Lines Matching refs:reg

214 static int snd_ac97_valid_reg(struct snd_ac97 *ac97, unsigned short reg)
219 if (reg == 0x08)
223 if (reg == 0x22 || reg == 0x7a)
228 if (reg <= 0x1c || reg == 0x20 || reg == 0x26 || reg >= 0x7c)
234 if (reg >= 0x3a && reg <= 0x6e) /* 0x59 */
241 if (reg == 0x5a)
243 if (reg >= 0x3c && reg <= 0x6e) /* 0x59 */
253 if (reg <= 0x3a || reg >= 0x5a)
263 * @reg: the register to change
272 void snd_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)
274 if (!snd_ac97_valid_reg(ac97, reg))
278 if (reg == AC97_MASTER || reg == AC97_HEADPHONE)
281 ac97->bus->ops->write(ac97, reg, value);
290 * @reg: the register to read
297 unsigned short snd_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
299 if (!snd_ac97_valid_reg(ac97, reg))
301 return ac97->bus->ops->read(ac97, reg);
305 static inline unsigned short snd_ac97_read_cache(struct snd_ac97 *ac97, unsigned short reg)
307 if (! test_bit(reg, ac97->reg_accessed)) {
308 ac97->regs[reg] = ac97->bus->ops->read(ac97, reg);
309 // set_bit(reg, ac97->reg_accessed);
311 return ac97->regs[reg];
319 * @reg: the register to change
326 void snd_ac97_write_cache(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)
328 if (!snd_ac97_valid_reg(ac97, reg))
331 ac97->regs[reg] = value;
332 ac97->bus->ops->write(ac97, reg, value);
333 set_bit(reg, ac97->reg_accessed);
342 * @reg: the register to change
351 int snd_ac97_update(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)
355 if (!snd_ac97_valid_reg(ac97, reg))
358 change = ac97->regs[reg] != value;
360 ac97->regs[reg] = value;
361 ac97->bus->ops->write(ac97, reg, value);
363 set_bit(reg, ac97->reg_accessed);
373 * @reg: the register to change
383 int snd_ac97_update_bits(struct snd_ac97 *ac97, unsigned short reg, unsigned short mask, unsigned short value)
387 if (!snd_ac97_valid_reg(ac97, reg))
390 change = snd_ac97_update_bits_nolock(ac97, reg, mask, value);
398 int snd_ac97_update_bits_nolock(struct snd_ac97 *ac97, unsigned short reg,
404 old = snd_ac97_read_cache(ac97, reg);
408 ac97->regs[reg] = new;
409 ac97->bus->ops->write(ac97, reg, new);
411 set_bit(reg, ac97->reg_accessed);
465 val = snd_ac97_read_cache(ac97, e->reg);
493 return snd_ac97_update_bits(ac97, e->reg, mask, val);
497 static int snd_ac97_page_save(struct snd_ac97 *ac97, int reg, struct snd_kcontrol *kcontrol)
502 (reg >= 0x60 && reg < 0x70)) {
538 int reg = kcontrol->private_value & 0xff;
545 page_save = snd_ac97_page_save(ac97, reg, kcontrol);
546 ucontrol->value.integer.value[0] = (snd_ac97_read_cache(ac97, reg) >> shift) & mask;
548 ucontrol->value.integer.value[1] = (snd_ac97_read_cache(ac97, reg) >> rshift) & mask;
562 int reg = kcontrol->private_value & 0xff;
570 page_save = snd_ac97_page_save(ac97, reg, kcontrol);
583 err = snd_ac97_update_bits(ac97, reg, val_mask, val);
590 ac97->power_up &= ~(1 << (reg>>1));
592 ac97->power_up |= 1 << (reg>>1);
806 int reg = kcontrol->private_value & 0xff;
818 old = snd_ac97_read_cache(ac97, reg);
825 change = snd_ac97_update_bits_nolock(ac97, reg, mask, value);
1025 static int snd_ac97_try_volume_mix(struct snd_ac97 * ac97, int reg)
1029 if (! snd_ac97_valid_reg(ac97, reg))
1032 switch (reg) {
1041 val = snd_ac97_read(ac97, reg);
1053 reg = AC97_CENTER_LFE_MASTER;
1062 val = snd_ac97_read(ac97, reg);
1066 snd_ac97_write_cache(ac97, reg, val | mask);
1067 val = snd_ac97_read(ac97, reg);
1068 val = snd_ac97_read(ac97, reg);
1075 static void check_volume_resolution(struct snd_ac97 *ac97, int reg, unsigned char *lo_max, unsigned char *hi_max)
1084 for (tbl = ac97->res_table; tbl->reg; tbl++) {
1085 if (tbl->reg == reg) {
1097 ac97, reg,
1104 val = snd_ac97_read(ac97, reg);
1105 val = snd_ac97_read(ac97, reg);
1115 static int snd_ac97_try_bit(struct snd_ac97 * ac97, int reg, int bit)
1120 orig = snd_ac97_read(ac97, reg);
1122 snd_ac97_write(ac97, reg, val);
1123 res = snd_ac97_read(ac97, reg);
1124 snd_ac97_write_cache(ac97, reg, orig);
1129 static void snd_ac97_change_volume_params2(struct snd_ac97 * ac97, int reg, int shift, unsigned char *max)
1135 snd_ac97_write(ac97, reg, val);
1136 val1 = snd_ac97_read(ac97, reg);
1141 snd_ac97_write_cache(ac97, reg, AC97_MUTE_MASK_STEREO);
1167 static int snd_ac97_cmute_new_stereo(struct snd_card *card, char *name, int reg,
1175 if (! snd_ac97_valid_reg(ac97, reg))
1179 val = snd_ac97_read(ac97, reg);
1183 snd_ac97_write(ac97, reg, val1);
1184 if (val1 == snd_ac97_read(ac97, reg))
1188 struct snd_kcontrol_new tmp = AC97_DOUBLE(name, reg, 15, 7, 1, 1);
1194 struct snd_kcontrol_new tmp = AC97_SINGLE(name, reg, 15, 1, 1);
1204 snd_ac97_write_cache(ac97, reg, val | mute_mask);
1237 static int snd_ac97_cvol_new(struct snd_card *card, char *name, int reg, unsigned int lo_max,
1243 if (! snd_ac97_valid_reg(ac97, reg))
1247 struct snd_kcontrol_new tmp = AC97_DOUBLE(name, reg, 8, 0, lo_max, 1);
1252 struct snd_kcontrol_new tmp = AC97_SINGLE(name, reg, 0, lo_max, 1);
1258 if (reg >= AC97_PHONE && reg <= AC97_PCM)
1266 ac97, reg,
1267 (snd_ac97_read(ac97, reg) & AC97_MUTE_MASK_STEREO)
1277 int reg, int check_stereo, int check_amix,
1284 if (! snd_ac97_valid_reg(ac97, reg))
1287 if (snd_ac97_try_bit(ac97, reg, 15)) {
1289 if ((err = snd_ac97_cmute_new_stereo(card, name, reg,
1294 check_volume_resolution(ac97, reg, &lo_max, &hi_max);
1297 if ((err = snd_ac97_cvol_new(card, name, reg, lo_max, hi_max, ac97)) < 0)
1303 #define snd_ac97_cmix_new(card, pfx, reg, acheck, ac97) \
1304 snd_ac97_cmix_new_stereo(card, pfx, reg, 0, acheck, ac97)
1305 #define snd_ac97_cmute_new(card, name, reg, acheck, ac97) \
1306 snd_ac97_cmute_new_stereo(card, name, reg, 0, acheck, ac97)
1679 static int snd_ac97_test_rate(struct snd_ac97 *ac97, int reg, int shadow_reg, int rate)
1685 snd_ac97_write_cache(ac97, reg, tmp & 0xffff);
1688 val = snd_ac97_read(ac97, reg);
1692 static void snd_ac97_determine_rates(struct snd_ac97 *ac97, int reg, int shadow_reg, unsigned int *r_result)
1700 reg == AC97_PCM_FRONT_DAC_RATE)
1705 saved = snd_ac97_read(ac97, reg);
1706 if ((ac97->ext_id & AC97_EI_DRA) && reg == AC97_PCM_FRONT_DAC_RATE)
1710 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11000))
1713 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 8000))
1715 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11025))
1717 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 16000))
1719 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 22050))
1721 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 32000))
1723 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 44100))
1725 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 48000))
1728 reg == AC97_PCM_FRONT_DAC_RATE) {
1732 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 64000 / 2))
1734 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 88200 / 2))
1736 if (snd_ac97_test_rate(ac97, reg, shadow_reg, 96000 / 2))
1739 if (!snd_ac97_test_rate(ac97, reg, shadow_reg, 76100 / 2))
1745 snd_ac97_write_cache(ac97, reg, saved);
2002 unsigned int reg;
2191 reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS);
2192 reg |= ac97->ext_id & 0x01c0; /* LDAC/SDAC/CDAC */
2194 reg |= ac97->ext_id & 0x0009; /* VRA/VRM */
2195 snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, reg);
2342 unsigned short reg;
2364 * @reg: the rate register, e.g. AC97_PCM_FRONT_DAC_RATE
2371 int snd_ac97_update_power(struct snd_ac97 *ac97, int reg, int powerup)
2378 if (reg) {
2380 if (reg == AC97_SPDIF)
2381 reg = AC97_PCM_FRONT_DAC_RATE;
2383 if (power_regs[i].reg == reg) {