Lines Matching refs:reg
213 static int snd_ac97_valid_reg(struct snd_ac97 *ac97, unsigned short reg)
218 if (reg == 0x08)
222 if (reg == 0x22 || reg == 0x7a)
227 if (reg <= 0x1c || reg == 0x20 || reg == 0x26 || reg >= 0x7c)
233 if (reg >= 0x3a && reg <= 0x6e) /* 0x59 */
240 if (reg == 0x5a)
242 if (reg >= 0x3c && reg <= 0x6e) /* 0x59 */
252 if (reg <= 0x3a || reg >= 0x5a)
262 * @reg: the register to change
271 void snd_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)
273 if (!snd_ac97_valid_reg(ac97, reg))
277 if (reg == AC97_MASTER || reg == AC97_HEADPHONE)
280 ac97->bus->ops->write(ac97, reg, value);
289 * @reg: the register to read
296 unsigned short snd_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
298 if (!snd_ac97_valid_reg(ac97, reg))
300 return ac97->bus->ops->read(ac97, reg);
304 static inline unsigned short snd_ac97_read_cache(struct snd_ac97 *ac97, unsigned short reg)
306 if (! test_bit(reg, ac97->reg_accessed)) {
307 ac97->regs[reg] = ac97->bus->ops->read(ac97, reg);
308 // set_bit(reg, ac97->reg_accessed);
310 return ac97->regs[reg];
318 * @reg: the register to change
325 void snd_ac97_write_cache(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)
327 if (!snd_ac97_valid_reg(ac97, reg))
330 ac97->regs[reg] = value;
331 ac97->bus->ops->write(ac97, reg, value);
332 set_bit(reg, ac97->reg_accessed);
341 * @reg: the register to change
350 int snd_ac97_update(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)
354 if (!snd_ac97_valid_reg(ac97, reg))
357 change = ac97->regs[reg] != value;
359 ac97->regs[reg] = value;
360 ac97->bus->ops->write(ac97, reg, value);
362 set_bit(reg, ac97->reg_accessed);
372 * @reg: the register to change
382 int snd_ac97_update_bits(struct snd_ac97 *ac97, unsigned short reg, unsigned short mask, unsigned short value)
386 if (!snd_ac97_valid_reg(ac97, reg))
389 change = snd_ac97_update_bits_nolock(ac97, reg, mask, value);
397 int snd_ac97_update_bits_nolock(struct snd_ac97 *ac97, unsigned short reg,
403 old = snd_ac97_read_cache(ac97, reg);
407 ac97->regs[reg] = new;
408 ac97->bus->ops->write(ac97, reg, new);
410 set_bit(reg, ac97->reg_accessed);
464 val = snd_ac97_read_cache(ac97, e->reg);
492 return snd_ac97_update_bits(ac97, e->reg, mask, val);
496 static int snd_ac97_page_save(struct snd_ac97 *ac97, int reg, struct snd_kcontrol *kcontrol)
501 (reg >= 0x60 && reg < 0x70)) {
537 int reg = kcontrol->private_value & 0xff;
544 page_save = snd_ac97_page_save(ac97, reg, kcontrol);
545 ucontrol->value.integer.value[0] = (snd_ac97_read_cache(ac97, reg) >> shift) & mask;
547 ucontrol->value.integer.value[1] = (snd_ac97_read_cache(ac97, reg) >> rshift) & mask;
561 int reg = kcontrol->private_value & 0xff;
569 page_save = snd_ac97_page_save(ac97, reg, kcontrol);
582 err = snd_ac97_update_bits(ac97, reg, val_mask, val);
589 ac97->power_up &= ~(1 << (reg>>1));
591 ac97->power_up |= 1 << (reg>>1);
805 int reg = kcontrol->private_value & 0xff;
817 old = snd_ac97_read_cache(ac97, reg);
824 change = snd_ac97_update_bits_nolock(ac97, reg, mask, value);
1024 static int snd_ac97_try_volume_mix(struct snd_ac97 * ac97, int reg)
1028 if (! snd_ac97_valid_reg(ac97, reg))
1031 switch (reg) {
1040 val = snd_ac97_read(ac97, reg);
1052 reg = AC97_CENTER_LFE_MASTER;
1061 val = snd_ac97_read(ac97, reg);
1065 snd_ac97_write_cache(ac97, reg, val | mask);
1066 val = snd_ac97_read(ac97, reg);
1067 val = snd_ac97_read(ac97, reg);
1074 static void check_volume_resolution(struct snd_ac97 *ac97, int reg, unsigned char *lo_max, unsigned char *hi_max)
1083 for (tbl = ac97->res_table; tbl->reg; tbl++) {
1084 if (tbl->reg == reg) {
1096 ac97, reg,
1103 val = snd_ac97_read(ac97, reg);
1104 val = snd_ac97_read(ac97, reg);
1114 static int snd_ac97_try_bit(struct snd_ac97 * ac97, int reg, int bit)
1119 orig = snd_ac97_read(ac97, reg);
1121 snd_ac97_write(ac97, reg, val);
1122 res = snd_ac97_read(ac97, reg);
1123 snd_ac97_write_cache(ac97, reg, orig);
1128 static void snd_ac97_change_volume_params2(struct snd_ac97 * ac97, int reg, int shift, unsigned char *max)
1134 snd_ac97_write(ac97, reg, val);
1135 val1 = snd_ac97_read(ac97, reg);
1140 snd_ac97_write_cache(ac97, reg, AC97_MUTE_MASK_STEREO);
1166 static int snd_ac97_cmute_new_stereo(struct snd_card *card, char *name, int reg,
1174 if (! snd_ac97_valid_reg(ac97, reg))
1178 val = snd_ac97_read(ac97, reg);
1182 snd_ac97_write(ac97, reg, val1);
1183 if (val1 == snd_ac97_read(ac97, reg))
1187 struct snd_kcontrol_new tmp = AC97_DOUBLE(name, reg, 15, 7, 1, 1);
1193 struct snd_kcontrol_new tmp = AC97_SINGLE(name, reg, 15, 1, 1);
1203 snd_ac97_write_cache(ac97, reg, val | mute_mask);
1236 static int snd_ac97_cvol_new(struct snd_card *card, char *name, int reg, unsigned int lo_max,
1242 if (! snd_ac97_valid_reg(ac97, reg))
1246 struct snd_kcontrol_new tmp = AC97_DOUBLE(name, reg, 8, 0, lo_max, 1);
1251 struct snd_kcontrol_new tmp = AC97_SINGLE(name, reg, 0, lo_max, 1);
1257 if (reg >= AC97_PHONE && reg <= AC97_PCM)
1265 ac97, reg,
1266 (snd_ac97_read(ac97, reg) & AC97_MUTE_MASK_STEREO)
1276 int reg, int check_stereo, int check_amix,
1283 if (! snd_ac97_valid_reg(ac97, reg))
1286 if (snd_ac97_try_bit(ac97, reg, 15)) {
1288 err = snd_ac97_cmute_new_stereo(card, name, reg,
1294 check_volume_resolution(ac97, reg, &lo_max, &hi_max);
1297 err = snd_ac97_cvol_new(card, name, reg, lo_max, hi_max, ac97);
1304 #define snd_ac97_cmix_new(card, pfx, reg, acheck, ac97) \
1305 snd_ac97_cmix_new_stereo(card, pfx, reg, 0, acheck, ac97)
1306 #define snd_ac97_cmute_new(card, name, reg, acheck, ac97) \
1307 snd_ac97_cmute_new_stereo(card, name, reg, 0, acheck, ac97)
1739 static int snd_ac97_test_rate(struct snd_ac97 *ac97, int reg, int shadow_reg, int rate)
1745 snd_ac97_write_cache(ac97, reg, tmp & 0xffff);
1748 val = snd_ac97_read(ac97, reg);
1752 static void snd_ac97_determine_rates(struct snd_ac97 *ac97, int reg, int shadow_reg, unsigned int *r_result)
1760 reg == AC97_PCM_FRONT_DAC_RATE)
1765 saved = snd_ac97_read(ac97, reg);
1766 if ((ac97->ext_id & AC97_EI_DRA) && reg == AC97_PCM_FRONT_DAC_RATE)
1770 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11000))
1773 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 8000))
1775 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11025))
1777 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 16000))
1779 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 22050))
1781 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 32000))
1783 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 44100))
1785 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 48000))
1788 reg == AC97_PCM_FRONT_DAC_RATE) {
1792 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 64000 / 2))
1794 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 88200 / 2))
1796 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 96000 / 2))
1799 if (!snd_ac97_test_rate(ac97, reg, shadow_reg, 76100 / 2))
1805 snd_ac97_write_cache(ac97, reg, saved);
2064 unsigned int reg;
2254 reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS);
2255 reg |= ac97->ext_id & 0x01c0; /* LDAC/SDAC/CDAC */
2257 reg |= ac97->ext_id & 0x0009; /* VRA/VRM */
2258 snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, reg);
2408 unsigned short reg;
2430 * @reg: the rate register, e.g. AC97_PCM_FRONT_DAC_RATE
2437 int snd_ac97_update_power(struct snd_ac97 *ac97, int reg, int powerup)
2444 if (reg) {
2446 if (reg == AC97_SPDIF)
2447 reg = AC97_PCM_FRONT_DAC_RATE;
2449 if (power_regs[i].reg == reg) {