Lines Matching refs:reg
211 static int snd_ac97_valid_reg(struct snd_ac97 *ac97, unsigned short reg) in snd_ac97_valid_reg() argument
217 if (reg <= 0x1c || reg == 0x20 || reg == 0x26 || reg >= 0x7c) in snd_ac97_valid_reg()
223 if (reg >= 0x3a && reg <= 0x6e) /* 0x59 */ in snd_ac97_valid_reg()
230 if (reg == 0x5a) in snd_ac97_valid_reg()
232 if (reg >= 0x3c && reg <= 0x6e) /* 0x59 */ in snd_ac97_valid_reg()
242 if (reg <= 0x3a || reg >= 0x5a) in snd_ac97_valid_reg()
261 void snd_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short value) in snd_ac97_write() argument
263 if (!snd_ac97_valid_reg(ac97, reg)) in snd_ac97_write()
267 if (reg == AC97_MASTER || reg == AC97_HEADPHONE) in snd_ac97_write()
270 ac97->bus->ops->write(ac97, reg, value); in snd_ac97_write()
286 unsigned short snd_ac97_read(struct snd_ac97 *ac97, unsigned short reg) in snd_ac97_read() argument
288 if (!snd_ac97_valid_reg(ac97, reg)) in snd_ac97_read()
290 return ac97->bus->ops->read(ac97, reg); in snd_ac97_read()
294 static inline unsigned short snd_ac97_read_cache(struct snd_ac97 *ac97, unsigned short reg) in snd_ac97_read_cache() argument
296 if (! test_bit(reg, ac97->reg_accessed)) { in snd_ac97_read_cache()
297 ac97->regs[reg] = ac97->bus->ops->read(ac97, reg); in snd_ac97_read_cache()
300 return ac97->regs[reg]; in snd_ac97_read_cache()
315 void snd_ac97_write_cache(struct snd_ac97 *ac97, unsigned short reg, unsigned short value) in snd_ac97_write_cache() argument
317 if (!snd_ac97_valid_reg(ac97, reg)) in snd_ac97_write_cache()
320 ac97->regs[reg] = value; in snd_ac97_write_cache()
321 ac97->bus->ops->write(ac97, reg, value); in snd_ac97_write_cache()
322 set_bit(reg, ac97->reg_accessed); in snd_ac97_write_cache()
340 int snd_ac97_update(struct snd_ac97 *ac97, unsigned short reg, unsigned short value) in snd_ac97_update() argument
344 if (!snd_ac97_valid_reg(ac97, reg)) in snd_ac97_update()
347 change = ac97->regs[reg] != value; in snd_ac97_update()
349 ac97->regs[reg] = value; in snd_ac97_update()
350 ac97->bus->ops->write(ac97, reg, value); in snd_ac97_update()
352 set_bit(reg, ac97->reg_accessed); in snd_ac97_update()
372 int snd_ac97_update_bits(struct snd_ac97 *ac97, unsigned short reg, unsigned short mask, unsigned s… in snd_ac97_update_bits() argument
376 if (!snd_ac97_valid_reg(ac97, reg)) in snd_ac97_update_bits()
379 change = snd_ac97_update_bits_nolock(ac97, reg, mask, value); in snd_ac97_update_bits()
387 int snd_ac97_update_bits_nolock(struct snd_ac97 *ac97, unsigned short reg, in snd_ac97_update_bits_nolock() argument
393 old = snd_ac97_read_cache(ac97, reg); in snd_ac97_update_bits_nolock()
397 ac97->regs[reg] = new; in snd_ac97_update_bits_nolock()
398 ac97->bus->ops->write(ac97, reg, new); in snd_ac97_update_bits_nolock()
400 set_bit(reg, ac97->reg_accessed); in snd_ac97_update_bits_nolock()
460 val = snd_ac97_read_cache(ac97, e->reg); in snd_ac97_get_enum_double()
488 return snd_ac97_update_bits(ac97, e->reg, mask, val); in snd_ac97_put_enum_double()
492 static int snd_ac97_page_save(struct snd_ac97 *ac97, int reg, struct snd_kcontrol *kcontrol) in snd_ac97_page_save() argument
497 (reg >= 0x60 && reg < 0x70)) { in snd_ac97_page_save()
533 int reg = kcontrol->private_value & 0xff; in snd_ac97_get_volsw() local
540 page_save = snd_ac97_page_save(ac97, reg, kcontrol); in snd_ac97_get_volsw()
541 ucontrol->value.integer.value[0] = (snd_ac97_read_cache(ac97, reg) >> shift) & mask; in snd_ac97_get_volsw()
543 ucontrol->value.integer.value[1] = (snd_ac97_read_cache(ac97, reg) >> rshift) & mask; in snd_ac97_get_volsw()
557 int reg = kcontrol->private_value & 0xff; in snd_ac97_put_volsw() local
565 page_save = snd_ac97_page_save(ac97, reg, kcontrol); in snd_ac97_put_volsw()
578 err = snd_ac97_update_bits(ac97, reg, val_mask, val); in snd_ac97_put_volsw()
585 ac97->power_up &= ~(1 << (reg>>1)); in snd_ac97_put_volsw()
587 ac97->power_up |= 1 << (reg>>1); in snd_ac97_put_volsw()
806 int reg = kcontrol->private_value & 0xff; in snd_ac97_put_spsa() local
818 old = snd_ac97_read_cache(ac97, reg); in snd_ac97_put_spsa()
825 change = snd_ac97_update_bits_nolock(ac97, reg, mask, value); in snd_ac97_put_spsa()
1026 static int snd_ac97_try_volume_mix(struct snd_ac97 * ac97, int reg) in snd_ac97_try_volume_mix() argument
1030 if (! snd_ac97_valid_reg(ac97, reg)) in snd_ac97_try_volume_mix()
1033 switch (reg) { in snd_ac97_try_volume_mix()
1042 val = snd_ac97_read(ac97, reg); in snd_ac97_try_volume_mix()
1054 reg = AC97_CENTER_LFE_MASTER; in snd_ac97_try_volume_mix()
1063 val = snd_ac97_read(ac97, reg); in snd_ac97_try_volume_mix()
1067 snd_ac97_write_cache(ac97, reg, val | mask); in snd_ac97_try_volume_mix()
1068 val = snd_ac97_read(ac97, reg); in snd_ac97_try_volume_mix()
1069 val = snd_ac97_read(ac97, reg); in snd_ac97_try_volume_mix()
1076 static void check_volume_resolution(struct snd_ac97 *ac97, int reg, unsigned char *lo_max, unsigned… in check_volume_resolution() argument
1085 for (tbl = ac97->res_table; tbl->reg; tbl++) { in check_volume_resolution()
1086 if (tbl->reg == reg) { in check_volume_resolution()
1097 snd_ac97_write(ac97, reg, 0x8080 | cbit[i] | (cbit[i] << 8)); in check_volume_resolution()
1102 val = snd_ac97_read(ac97, reg); in check_volume_resolution()
1103 val = snd_ac97_read(ac97, reg); in check_volume_resolution()
1113 static int snd_ac97_try_bit(struct snd_ac97 * ac97, int reg, int bit) in snd_ac97_try_bit() argument
1118 orig = snd_ac97_read(ac97, reg); in snd_ac97_try_bit()
1120 snd_ac97_write(ac97, reg, val); in snd_ac97_try_bit()
1121 res = snd_ac97_read(ac97, reg); in snd_ac97_try_bit()
1122 snd_ac97_write_cache(ac97, reg, orig); in snd_ac97_try_bit()
1127 static void snd_ac97_change_volume_params2(struct snd_ac97 * ac97, int reg, int shift, unsigned cha… in snd_ac97_change_volume_params2() argument
1133 snd_ac97_write(ac97, reg, val); in snd_ac97_change_volume_params2()
1134 val1 = snd_ac97_read(ac97, reg); in snd_ac97_change_volume_params2()
1139 snd_ac97_write_cache(ac97, reg, 0x8080); in snd_ac97_change_volume_params2()
1165 static int snd_ac97_cmute_new_stereo(struct snd_card *card, char *name, int reg, in snd_ac97_cmute_new_stereo() argument
1173 if (! snd_ac97_valid_reg(ac97, reg)) in snd_ac97_cmute_new_stereo()
1177 val = snd_ac97_read(ac97, reg); in snd_ac97_cmute_new_stereo()
1181 snd_ac97_write(ac97, reg, val1); in snd_ac97_cmute_new_stereo()
1182 if (val1 == snd_ac97_read(ac97, reg)) in snd_ac97_cmute_new_stereo()
1186 struct snd_kcontrol_new tmp = AC97_DOUBLE(name, reg, 15, 7, 1, 1); in snd_ac97_cmute_new_stereo()
1192 struct snd_kcontrol_new tmp = AC97_SINGLE(name, reg, 15, 1, 1); in snd_ac97_cmute_new_stereo()
1202 snd_ac97_write_cache(ac97, reg, val | mute_mask); in snd_ac97_cmute_new_stereo()
1235 static int snd_ac97_cvol_new(struct snd_card *card, char *name, int reg, unsigned int lo_max, in snd_ac97_cvol_new() argument
1241 if (! snd_ac97_valid_reg(ac97, reg)) in snd_ac97_cvol_new()
1245 struct snd_kcontrol_new tmp = AC97_DOUBLE(name, reg, 8, 0, lo_max, 1); in snd_ac97_cvol_new()
1250 struct snd_kcontrol_new tmp = AC97_SINGLE(name, reg, 0, lo_max, 1); in snd_ac97_cvol_new()
1254 if (reg >= AC97_PHONE && reg <= AC97_PCM) in snd_ac97_cvol_new()
1261 snd_ac97_write_cache(ac97, reg, in snd_ac97_cvol_new()
1262 (snd_ac97_read(ac97, reg) & 0x8080) | in snd_ac97_cvol_new()
1271 int reg, int check_stereo, int check_amix, in snd_ac97_cmix_new_stereo() argument
1278 if (! snd_ac97_valid_reg(ac97, reg)) in snd_ac97_cmix_new_stereo()
1281 if (snd_ac97_try_bit(ac97, reg, 15)) { in snd_ac97_cmix_new_stereo()
1283 if ((err = snd_ac97_cmute_new_stereo(card, name, reg, in snd_ac97_cmix_new_stereo()
1288 check_volume_resolution(ac97, reg, &lo_max, &hi_max); in snd_ac97_cmix_new_stereo()
1291 if ((err = snd_ac97_cvol_new(card, name, reg, lo_max, hi_max, ac97)) < 0) in snd_ac97_cmix_new_stereo()
1297 #define snd_ac97_cmix_new(card, pfx, reg, acheck, ac97) \ argument
1298 snd_ac97_cmix_new_stereo(card, pfx, reg, 0, acheck, ac97)
1299 #define snd_ac97_cmute_new(card, name, reg, acheck, ac97) \ argument
1300 snd_ac97_cmute_new_stereo(card, name, reg, 0, acheck, ac97)
1666 static int snd_ac97_test_rate(struct snd_ac97 *ac97, int reg, int shadow_reg, int rate) in snd_ac97_test_rate() argument
1672 snd_ac97_write_cache(ac97, reg, tmp & 0xffff); in snd_ac97_test_rate()
1675 val = snd_ac97_read(ac97, reg); in snd_ac97_test_rate()
1679 static void snd_ac97_determine_rates(struct snd_ac97 *ac97, int reg, int shadow_reg, unsigned int *… in snd_ac97_determine_rates() argument
1687 reg == AC97_PCM_FRONT_DAC_RATE) in snd_ac97_determine_rates()
1692 saved = snd_ac97_read(ac97, reg); in snd_ac97_determine_rates()
1693 if ((ac97->ext_id & AC97_EI_DRA) && reg == AC97_PCM_FRONT_DAC_RATE) in snd_ac97_determine_rates()
1697 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11000)) in snd_ac97_determine_rates()
1700 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 8000)) in snd_ac97_determine_rates()
1702 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11025)) in snd_ac97_determine_rates()
1704 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 16000)) in snd_ac97_determine_rates()
1706 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 22050)) in snd_ac97_determine_rates()
1708 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 32000)) in snd_ac97_determine_rates()
1710 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 44100)) in snd_ac97_determine_rates()
1712 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 48000)) in snd_ac97_determine_rates()
1715 reg == AC97_PCM_FRONT_DAC_RATE) { in snd_ac97_determine_rates()
1719 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 64000 / 2)) in snd_ac97_determine_rates()
1721 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 88200 / 2)) in snd_ac97_determine_rates()
1723 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 96000 / 2)) in snd_ac97_determine_rates()
1726 if (!snd_ac97_test_rate(ac97, reg, shadow_reg, 76100 / 2)) in snd_ac97_determine_rates()
1732 snd_ac97_write_cache(ac97, reg, saved); in snd_ac97_determine_rates()
1987 unsigned int reg; in snd_ac97_mixer() local
2168 reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS); in snd_ac97_mixer()
2169 reg |= ac97->ext_id & 0x01c0; /* LDAC/SDAC/CDAC */ in snd_ac97_mixer()
2171 reg |= ac97->ext_id & 0x0009; /* VRA/VRM */ in snd_ac97_mixer()
2172 snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, reg); in snd_ac97_mixer()
2319 unsigned short reg; member
2346 int snd_ac97_update_power(struct snd_ac97 *ac97, int reg, int powerup) in snd_ac97_update_power() argument
2353 if (reg) { in snd_ac97_update_power()
2355 if (reg == AC97_SPDIF) in snd_ac97_update_power()
2356 reg = AC97_PCM_FRONT_DAC_RATE; in snd_ac97_update_power()
2358 if (power_regs[i].reg == reg) { in snd_ac97_update_power()