Changeset b3f36d2 in mainline
- Timestamp:
- 2011-09-26T09:55:27Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c7325dd6
- Parents:
- b1926d0a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/audio/sb16/mixer.c
rb1926d0a rb3f36d2 53 53 54 54 static const volume_item_t volume_ct1345[] = { 55 { 0x22, 2, "Master", 8, 1, true }, 55 56 { 0x04, 2, "Voice", 8, 1, true }, 56 57 { 0x0a, 1, "Mic", 4, 1, true }, 57 { 0x22, 2, "Master", 8, 1, true },58 58 { 0x26, 2, "MIDI", 8, 1, true }, 59 59 { 0x28, 2, "CD", 8, 1, true }, … … 143 143 /*----------------------------------------------------------------------------*/ 144 144 int mixer_set_volume_level(sb16_regs_t *regs, mixer_type_t type, 145 unsigned i tem, unsigned channel, unsigned level)145 unsigned index, unsigned channel, unsigned level) 146 146 { 147 return ENOTSUP; 147 if (type == SB_MIXER_UNKNOWN || type == SB_MIXER_NONE) 148 return ENOTSUP; 149 if (index >= volume_table[type].count) 150 return ENOENT; 151 if (level >= volume_table[type].table[index].volume_levels) 152 return ENOTSUP; 153 if (channel >= volume_table[type].table[index].channels) 154 return ENOENT; 155 156 const volume_item_t item = volume_table[type].table[index]; 157 const uint8_t address = item.address + (item.same_reg ? 0 : channel); 158 pio_write_8(®s->mixer_address, address); 159 if (!item.same_reg) { 160 const uint8_t value = level << item.shift; 161 pio_write_8(®s->mixer_data, value); 162 } else { 163 /* Nasty stuff */ 164 uint8_t value = pio_read_8(®s->mixer_data); 165 /* Remove value that is to be replaced register format is L:R*/ 166 value &= (channel ? 0xf0 : 0x0f); 167 /* Add the new value */ 168 value |= (level << item.shift) << (channel ? 0 : 4); 169 pio_write_8(®s->mixer_data, value); 170 } 171 return EOK; 148 172 } 149 173 /*----------------------------------------------------------------------------*/ 150 174 unsigned mixer_get_volume_level(sb16_regs_t *regs, mixer_type_t type, 151 unsigned i tem, unsigned channel)175 unsigned index, unsigned channel) 152 176 { 177 if (type == SB_MIXER_UNKNOWN 178 || type == SB_MIXER_NONE 179 || (index >= volume_table[type].count) 180 || (channel >= volume_table[type].table[index].channels)) 181 return 0; 182 183 const volume_item_t item = volume_table[type].table[index]; 184 const uint8_t address = item.address + (item.same_reg ? 0 : channel); 185 pio_write_8(®s->mixer_address, address); 186 if (!item.same_reg) { 187 return pio_read_8(®s->mixer_data) >> item.shift; 188 } else { 189 const uint8_t value = 190 pio_read_8(®s->mixer_data) >> (channel ? 0 : 4); 191 return value >> item.shift; 192 } 153 193 return 0; 154 194 }
Note:
See TracChangeset
for help on using the changeset viewer.