• Home
  • Raw
  • Download

Lines Matching full:ac97

18 static struct snd_kcontrol *snd_ac97_find_mixer_ctl(struct snd_ac97 *ac97,
20 static int snd_ac97_add_vmaster(struct snd_ac97 *ac97, char *name,
28 static int patch_build_controls(struct snd_ac97 * ac97, const struct snd_kcontrol_new *controls, in… in patch_build_controls() argument
33 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&controls[idx], ac97))) < 0) in patch_build_controls()
39 static void reset_tlv(struct snd_ac97 *ac97, const char *name, in reset_tlv() argument
47 kctl = snd_ctl_find_id(ac97->bus->card, &sid); in reset_tlv()
53 static int ac97_update_bits_page(struct snd_ac97 *ac97, unsigned short reg, unsigned short mask, un… in ac97_update_bits_page() argument
58 mutex_lock(&ac97->page_mutex); in ac97_update_bits_page()
59 page_save = snd_ac97_read(ac97, AC97_INT_PAGING) & AC97_PAGE_MASK; in ac97_update_bits_page()
60 snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, page); in ac97_update_bits_page()
61 ret = snd_ac97_update_bits(ac97, reg, mask, value); in ac97_update_bits_page()
62 snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, page_save); in ac97_update_bits_page()
63 mutex_unlock(&ac97->page_mutex); /* unlock paging */ in ac97_update_bits_page()
79 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in ac97_surround_jack_mode_get() local
81 ucontrol->value.enumerated.item[0] = ac97->indep_surround; in ac97_surround_jack_mode_get()
87 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in ac97_surround_jack_mode_put() local
90 if (indep != ac97->indep_surround) { in ac97_surround_jack_mode_put()
91 ac97->indep_surround = indep; in ac97_surround_jack_mode_put()
92 if (ac97->build_ops->update_jacks) in ac97_surround_jack_mode_put()
93 ac97->build_ops->update_jacks(ac97); in ac97_surround_jack_mode_put()
108 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in ac97_channel_mode_get() local
110 ucontrol->value.enumerated.item[0] = ac97->channel_mode; in ac97_channel_mode_get()
116 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in ac97_channel_mode_put() local
122 if (mode != ac97->channel_mode) { in ac97_channel_mode_put()
123 ac97->channel_mode = mode; in ac97_channel_mode_put()
124 if (ac97->build_ops->update_jacks) in ac97_channel_mode_put()
125 ac97->build_ops->update_jacks(ac97); in ac97_channel_mode_put()
170 static inline int is_surround_on(struct snd_ac97 *ac97) in is_surround_on() argument
172 return ac97->channel_mode >= 1; in is_surround_on()
175 static inline int is_clfe_on(struct snd_ac97 *ac97) in is_clfe_on() argument
177 return ac97->channel_mode >= 2; in is_clfe_on()
181 static inline int is_shared_surrout(struct snd_ac97 *ac97) in is_shared_surrout() argument
183 return !ac97->indep_surround && is_surround_on(ac97); in is_shared_surrout()
187 static inline int is_shared_clfeout(struct snd_ac97 *ac97) in is_shared_clfeout() argument
189 return !ac97->indep_surround && is_clfe_on(ac97); in is_shared_clfeout()
193 static inline int is_shared_linein(struct snd_ac97 *ac97) in is_shared_linein() argument
195 return !ac97->indep_surround && !is_surround_on(ac97); in is_shared_linein()
199 static inline int is_shared_micin(struct snd_ac97 *ac97) in is_shared_micin() argument
201 return !ac97->indep_surround && !is_clfe_on(ac97); in is_shared_micin()
204 static inline int alc850_is_aux_back_surround(struct snd_ac97 *ac97) in alc850_is_aux_back_surround() argument
206 return is_surround_on(ac97); in alc850_is_aux_back_surround()
228 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ymf7x3_get_speaker() local
231 val = ac97->regs[AC97_YMF7X3_3D_MODE_SEL]; in snd_ac97_ymf7x3_get_speaker()
242 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ymf7x3_put_speaker() local
248 return snd_ac97_update(ac97, AC97_YMF7X3_3D_MODE_SEL, val); in snd_ac97_ymf7x3_put_speaker()
273 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ymf7x3_spdif_source_get() local
276 val = ac97->regs[AC97_YMF7X3_DIT_CTRL]; in snd_ac97_ymf7x3_spdif_source_get()
284 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ymf7x3_spdif_source_put() local
290 return snd_ac97_update_bits(ac97, AC97_YMF7X3_DIT_CTRL, 0x0002, val); in snd_ac97_ymf7x3_spdif_source_put()
293 static int patch_yamaha_ymf7x3_3d(struct snd_ac97 *ac97) in patch_yamaha_ymf7x3_3d() argument
298 kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97); in patch_yamaha_ymf7x3_3d()
299 err = snd_ctl_add(ac97->bus->card, kctl); in patch_yamaha_ymf7x3_3d()
304 snd_ac97_write_cache(ac97, AC97_3D_CONTROL, 0x0000); in patch_yamaha_ymf7x3_3d()
305 err = snd_ctl_add(ac97->bus->card, in patch_yamaha_ymf7x3_3d()
307 ac97)); in patch_yamaha_ymf7x3_3d()
310 snd_ac97_write_cache(ac97, AC97_YMF7X3_3D_MODE_SEL, 0x0c00); in patch_yamaha_ymf7x3_3d()
329 static int patch_yamaha_ymf743_build_spdif(struct snd_ac97 *ac97) in patch_yamaha_ymf743_build_spdif() argument
333 err = patch_build_controls(ac97, &snd_ac97_controls_spdif[0], 3); in patch_yamaha_ymf743_build_spdif()
336 err = patch_build_controls(ac97, in patch_yamaha_ymf743_build_spdif()
342 snd_ac97_write_cache(ac97, AC97_YMF7X3_DIT_CTRL, 0xa201); in patch_yamaha_ymf743_build_spdif()
351 static int patch_yamaha_ymf743(struct snd_ac97 *ac97) in patch_yamaha_ymf743() argument
353 ac97->build_ops = &patch_yamaha_ymf743_ops; in patch_yamaha_ymf743()
354 ac97->caps |= AC97_BC_BASS_TREBLE; in patch_yamaha_ymf743()
355 ac97->caps |= 0x04 << 10; /* Yamaha 3D enhancement */ in patch_yamaha_ymf743()
356 ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; /* 48k only */ in patch_yamaha_ymf743()
357 ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ in patch_yamaha_ymf743()
374 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ymf753_spdif_output_pin_get() local
377 val = ac97->regs[AC97_YMF7X3_DIT_CTRL]; in snd_ac97_ymf753_spdif_output_pin_get()
384 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ymf753_spdif_output_pin_put() local
391 return snd_ac97_update_bits(ac97, AC97_YMF7X3_DIT_CTRL, 0x0028, val); in snd_ac97_ymf753_spdif_output_pin_put()
393 snd_ac97_write_cache(ac97, 0x62, snd_ac97_read(ac97, 0x62) | 0x0008); */ in snd_ac97_ymf753_spdif_output_pin_put()
415 static int patch_yamaha_ymf753_post_spdif(struct snd_ac97 * ac97) in patch_yamaha_ymf753_post_spdif() argument
419 …if ((err = patch_build_controls(ac97, snd_ac97_ymf753_controls_spdif, ARRAY_SIZE(snd_ac97_ymf753_c… in patch_yamaha_ymf753_post_spdif()
429 static int patch_yamaha_ymf753(struct snd_ac97 * ac97) in patch_yamaha_ymf753() argument
438 ac97->build_ops = &patch_yamaha_ymf753_ops; in patch_yamaha_ymf753()
439 ac97->caps |= AC97_BC_BASS_TREBLE; in patch_yamaha_ymf753()
440 ac97->caps |= 0x04 << 10; /* Yamaha 3D enhancement */ in patch_yamaha_ymf753()
455 static int patch_wolfson_wm9703_specific(struct snd_ac97 * ac97) in patch_wolfson_wm9703_specific() argument
464 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm97xx_snd_ac97_controls[i], ac97))) < 0) in patch_wolfson_wm9703_specific()
467 snd_ac97_write_cache(ac97, AC97_WM97XX_FMIXER_VOL, 0x0808); in patch_wolfson_wm9703_specific()
475 static int patch_wolfson03(struct snd_ac97 * ac97) in patch_wolfson03() argument
477 ac97->build_ops = &patch_wolfson_wm9703_ops; in patch_wolfson03()
490 static int patch_wolfson_wm9704_specific(struct snd_ac97 * ac97) in patch_wolfson_wm9704_specific() argument
494 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm9704_snd_ac97_controls[i], ac97))) < 0) in patch_wolfson_wm9704_specific()
498 snd_ac97_write_cache(ac97, AC97_WM9704_TEST, 0x0200); in patch_wolfson_wm9704_specific()
506 static int patch_wolfson04(struct snd_ac97 * ac97) in patch_wolfson04() argument
509 ac97->build_ops = &patch_wolfson_wm9704_ops; in patch_wolfson04()
513 static int patch_wolfson05(struct snd_ac97 * ac97) in patch_wolfson05() argument
516 ac97->build_ops = &patch_wolfson_wm9703_ops; in patch_wolfson05()
519 ac97->flags |= AC97_HAS_NO_VIDEO | AC97_HAS_NO_AUX; in patch_wolfson05()
629 static int patch_wolfson_wm9711_specific(struct snd_ac97 * ac97) in patch_wolfson_wm9711_specific() argument
634 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm9711_snd_ac97_controls[i], ac97))) < 0) in patch_wolfson_wm9711_specific()
637 snd_ac97_write_cache(ac97, AC97_CODEC_CLASS_REV, 0x0808); in patch_wolfson_wm9711_specific()
638 snd_ac97_write_cache(ac97, AC97_PCI_SVID, 0x0808); in patch_wolfson_wm9711_specific()
639 snd_ac97_write_cache(ac97, AC97_VIDEO, 0x0808); in patch_wolfson_wm9711_specific()
640 snd_ac97_write_cache(ac97, AC97_AUX, 0x0808); in patch_wolfson_wm9711_specific()
641 snd_ac97_write_cache(ac97, AC97_PC_BEEP, 0x0808); in patch_wolfson_wm9711_specific()
642 snd_ac97_write_cache(ac97, AC97_CD, 0x0000); in patch_wolfson_wm9711_specific()
650 static int patch_wolfson11(struct snd_ac97 * ac97) in patch_wolfson11() argument
653 ac97->build_ops = &patch_wolfson_wm9711_ops; in patch_wolfson11()
655 ac97->flags |= AC97_HAS_NO_REC_GAIN | AC97_STEREO_MUTES | AC97_HAS_NO_MIC | in patch_wolfson11()
796 static int patch_wolfson_wm9713_3d (struct snd_ac97 * ac97) in patch_wolfson_wm9713_3d() argument
801 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm13_snd_ac97_controls_3d[i], ac97))) < 0) in patch_wolfson_wm9713_3d()
807 static int patch_wolfson_wm9713_specific(struct snd_ac97 * ac97) in patch_wolfson_wm9713_specific() argument
812 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm13_snd_ac97_controls[i], ac97))) < 0) in patch_wolfson_wm9713_specific()
815 snd_ac97_write_cache(ac97, AC97_PC_BEEP, 0x0808); in patch_wolfson_wm9713_specific()
816 snd_ac97_write_cache(ac97, AC97_PHONE, 0x0808); in patch_wolfson_wm9713_specific()
817 snd_ac97_write_cache(ac97, AC97_MIC, 0x0808); in patch_wolfson_wm9713_specific()
818 snd_ac97_write_cache(ac97, AC97_LINE, 0x00da); in patch_wolfson_wm9713_specific()
819 snd_ac97_write_cache(ac97, AC97_CD, 0x0808); in patch_wolfson_wm9713_specific()
820 snd_ac97_write_cache(ac97, AC97_VIDEO, 0xd612); in patch_wolfson_wm9713_specific()
821 snd_ac97_write_cache(ac97, AC97_REC_GAIN, 0x1ba0); in patch_wolfson_wm9713_specific()
826 static void patch_wolfson_wm9713_suspend (struct snd_ac97 * ac97) in patch_wolfson_wm9713_suspend() argument
828 snd_ac97_write_cache(ac97, AC97_EXTENDED_MID, 0xfeff); in patch_wolfson_wm9713_suspend()
829 snd_ac97_write_cache(ac97, AC97_EXTENDED_MSTATUS, 0xffff); in patch_wolfson_wm9713_suspend()
832 static void patch_wolfson_wm9713_resume (struct snd_ac97 * ac97) in patch_wolfson_wm9713_resume() argument
834 snd_ac97_write_cache(ac97, AC97_EXTENDED_MID, 0xda00); in patch_wolfson_wm9713_resume()
835 snd_ac97_write_cache(ac97, AC97_EXTENDED_MSTATUS, 0x3810); in patch_wolfson_wm9713_resume()
836 snd_ac97_write_cache(ac97, AC97_POWERDOWN, 0x0); in patch_wolfson_wm9713_resume()
849 static int patch_wolfson13(struct snd_ac97 * ac97) in patch_wolfson13() argument
852 ac97->build_ops = &patch_wolfson_wm9713_ops; in patch_wolfson13()
854 ac97->flags |= AC97_HAS_NO_REC_GAIN | AC97_STEREO_MUTES | AC97_HAS_NO_PHONE | in patch_wolfson13()
857 ac97->scaps &= ~AC97_SCAP_MODEM; in patch_wolfson13()
859 snd_ac97_write_cache(ac97, AC97_EXTENDED_MID, 0xda00); in patch_wolfson13()
860 snd_ac97_write_cache(ac97, AC97_EXTENDED_MSTATUS, 0x3810); in patch_wolfson13()
861 snd_ac97_write_cache(ac97, AC97_POWERDOWN, 0x0); in patch_wolfson13()
869 static int patch_tritech_tr28028(struct snd_ac97 * ac97) in patch_tritech_tr28028() argument
871 snd_ac97_write_cache(ac97, 0x26, 0x0300); in patch_tritech_tr28028()
872 snd_ac97_write_cache(ac97, 0x26, 0x0000); in patch_tritech_tr28028()
873 snd_ac97_write_cache(ac97, AC97_SURROUND_MASTER, 0x0000); in patch_tritech_tr28028()
874 snd_ac97_write_cache(ac97, AC97_SPDIF, 0x0000); in patch_tritech_tr28028()
881 static int patch_sigmatel_stac9700_3d(struct snd_ac97 * ac97) in patch_sigmatel_stac9700_3d() argument
886 if ((err = snd_ctl_add(ac97->bus->card, kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97))) < 0) in patch_sigmatel_stac9700_3d()
890 snd_ac97_write_cache(ac97, AC97_3D_CONTROL, 0x0000); in patch_sigmatel_stac9700_3d()
894 static int patch_sigmatel_stac9708_3d(struct snd_ac97 * ac97) in patch_sigmatel_stac9708_3d() argument
899 if ((err = snd_ctl_add(ac97->bus->card, kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97))) < 0) in patch_sigmatel_stac9708_3d()
903 if ((err = snd_ctl_add(ac97->bus->card, kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97))) < 0) in patch_sigmatel_stac9708_3d()
907 snd_ac97_write_cache(ac97, AC97_3D_CONTROL, 0x0000); in patch_sigmatel_stac9708_3d()
925 static int patch_sigmatel_stac97xx_specific(struct snd_ac97 * ac97) in patch_sigmatel_stac97xx_specific() argument
929 …snd_ac97_write_cache(ac97, AC97_SIGMATEL_ANALOG, snd_ac97_read(ac97, AC97_SIGMATEL_ANALOG) & ~0x00… in patch_sigmatel_stac97xx_specific()
930 if (snd_ac97_try_bit(ac97, AC97_SIGMATEL_ANALOG, 1)) in patch_sigmatel_stac97xx_specific()
931 if ((err = patch_build_controls(ac97, &snd_ac97_sigmatel_controls[0], 1)) < 0) in patch_sigmatel_stac97xx_specific()
933 if (snd_ac97_try_bit(ac97, AC97_SIGMATEL_ANALOG, 0)) in patch_sigmatel_stac97xx_specific()
934 if ((err = patch_build_controls(ac97, &snd_ac97_sigmatel_controls[1], 1)) < 0) in patch_sigmatel_stac97xx_specific()
936 if (snd_ac97_try_bit(ac97, AC97_SIGMATEL_DAC2INVERT, 2)) in patch_sigmatel_stac97xx_specific()
937 if ((err = patch_build_controls(ac97, &snd_ac97_sigmatel_4speaker, 1)) < 0) in patch_sigmatel_stac97xx_specific()
939 if (snd_ac97_try_bit(ac97, AC97_SIGMATEL_DAC2INVERT, 3)) in patch_sigmatel_stac97xx_specific()
940 if ((err = patch_build_controls(ac97, &snd_ac97_sigmatel_phaseinvert, 1)) < 0) in patch_sigmatel_stac97xx_specific()
950 static int patch_sigmatel_stac9700(struct snd_ac97 * ac97) in patch_sigmatel_stac9700() argument
952 ac97->build_ops = &patch_sigmatel_stac9700_ops; in patch_sigmatel_stac9700()
958 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_stac9708_put_bias() local
961 mutex_lock(&ac97->page_mutex); in snd_ac97_stac9708_put_bias()
962 snd_ac97_write(ac97, AC97_SIGMATEL_BIAS1, 0xabba); in snd_ac97_stac9708_put_bias()
963 err = snd_ac97_update_bits(ac97, AC97_SIGMATEL_BIAS2, 0x0010, in snd_ac97_stac9708_put_bias()
965 snd_ac97_write(ac97, AC97_SIGMATEL_BIAS1, 0); in snd_ac97_stac9708_put_bias()
966 mutex_unlock(&ac97->page_mutex); in snd_ac97_stac9708_put_bias()
979 static int patch_sigmatel_stac9708_specific(struct snd_ac97 *ac97) in patch_sigmatel_stac9708_specific() argument
984 snd_ac97_remove_ctl(ac97, "PCM Out Path & Mute", NULL); in patch_sigmatel_stac9708_specific()
986 snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Sigmatel Surround Playback"); in patch_sigmatel_stac9708_specific()
987 if ((err = patch_build_controls(ac97, &snd_ac97_stac9708_bias_control, 1)) < 0) in patch_sigmatel_stac9708_specific()
989 return patch_sigmatel_stac97xx_specific(ac97); in patch_sigmatel_stac9708_specific()
997 static int patch_sigmatel_stac9708(struct snd_ac97 * ac97) in patch_sigmatel_stac9708() argument
1001 ac97->build_ops = &patch_sigmatel_stac9708_ops; in patch_sigmatel_stac9708()
1002 ac97->caps |= 0x10; /* HP (sigmatel surround) support */ in patch_sigmatel_stac9708()
1004 codec72 = snd_ac97_read(ac97, AC97_SIGMATEL_BIAS2) & 0x8000; in patch_sigmatel_stac9708()
1005 codec6c = snd_ac97_read(ac97, AC97_SIGMATEL_ANALOG); in patch_sigmatel_stac9708()
1008 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC1, 0xabba); in patch_sigmatel_stac9708()
1009 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC2, 0x1000); in patch_sigmatel_stac9708()
1010 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS1, 0xabba); in patch_sigmatel_stac9708()
1011 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS2, 0x0007); in patch_sigmatel_stac9708()
1013 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC1, 0xabba); in patch_sigmatel_stac9708()
1014 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC2, 0x1001); in patch_sigmatel_stac9708()
1015 snd_ac97_write_cache(ac97, AC97_SIGMATEL_DAC2INVERT, 0x0008); in patch_sigmatel_stac9708()
1019 snd_ac97_write_cache(ac97, AC97_SIGMATEL_MULTICHN, 0x0000); in patch_sigmatel_stac9708()
1023 static int patch_sigmatel_stac9721(struct snd_ac97 * ac97) in patch_sigmatel_stac9721() argument
1025 ac97->build_ops = &patch_sigmatel_stac9700_ops; in patch_sigmatel_stac9721()
1026 if (snd_ac97_read(ac97, AC97_SIGMATEL_ANALOG) == 0) { in patch_sigmatel_stac9721()
1028 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC1, 0xabba); in patch_sigmatel_stac9721()
1029 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC2, 0x4000); in patch_sigmatel_stac9721()
1030 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS1, 0xabba); in patch_sigmatel_stac9721()
1031 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS2, 0x0002); in patch_sigmatel_stac9721()
1033 snd_ac97_write_cache(ac97, AC97_SIGMATEL_MULTICHN, 0x0000); in patch_sigmatel_stac9721()
1037 static int patch_sigmatel_stac9744(struct snd_ac97 * ac97) in patch_sigmatel_stac9744() argument
1040 ac97->build_ops = &patch_sigmatel_stac9700_ops; in patch_sigmatel_stac9744()
1041 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC1, 0xabba); in patch_sigmatel_stac9744()
1042 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC2, 0x0000); /* is this correct? --jk */ in patch_sigmatel_stac9744()
1043 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS1, 0xabba); in patch_sigmatel_stac9744()
1044 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS2, 0x0002); in patch_sigmatel_stac9744()
1045 snd_ac97_write_cache(ac97, AC97_SIGMATEL_MULTICHN, 0x0000); in patch_sigmatel_stac9744()
1049 static int patch_sigmatel_stac9756(struct snd_ac97 * ac97) in patch_sigmatel_stac9756() argument
1052 ac97->build_ops = &patch_sigmatel_stac9700_ops; in patch_sigmatel_stac9756()
1053 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC1, 0xabba); in patch_sigmatel_stac9756()
1054 snd_ac97_write_cache(ac97, AC97_SIGMATEL_CIC2, 0x0000); /* is this correct? --jk */ in patch_sigmatel_stac9756()
1055 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS1, 0xabba); in patch_sigmatel_stac9756()
1056 snd_ac97_write_cache(ac97, AC97_SIGMATEL_BIAS2, 0x0002); in patch_sigmatel_stac9756()
1057 snd_ac97_write_cache(ac97, AC97_SIGMATEL_MULTICHN, 0x0000); in patch_sigmatel_stac9756()
1072 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_stac9758_output_jack_get() local
1076 val = ac97->regs[AC97_SIGMATEL_OUTSEL] >> shift; in snd_ac97_stac9758_output_jack_get()
1086 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_stac9758_output_jack_put() local
1096 return ac97_update_bits_page(ac97, AC97_SIGMATEL_OUTSEL, in snd_ac97_stac9758_output_jack_put()
1111 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_stac9758_input_jack_get() local
1115 val = ac97->regs[AC97_SIGMATEL_INSEL]; in snd_ac97_stac9758_input_jack_get()
1122 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_stac9758_input_jack_put() local
1125 return ac97_update_bits_page(ac97, AC97_SIGMATEL_INSEL, 7 << shift, in snd_ac97_stac9758_input_jack_put()
1140 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_stac9758_phonesel_get() local
1142 ucontrol->value.enumerated.item[0] = ac97->regs[AC97_SIGMATEL_IOMISC] & 3; in snd_ac97_stac9758_phonesel_get()
1148 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_stac9758_phonesel_put() local
1150 return ac97_update_bits_page(ac97, AC97_SIGMATEL_IOMISC, 3, in snd_ac97_stac9758_phonesel_put()
1185 static int patch_sigmatel_stac9758_specific(struct snd_ac97 *ac97) in patch_sigmatel_stac9758_specific() argument
1189 err = patch_sigmatel_stac97xx_specific(ac97); in patch_sigmatel_stac9758_specific()
1192 err = patch_build_controls(ac97, snd_ac97_sigmatel_stac9758_controls, in patch_sigmatel_stac9758_specific()
1197 snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Front Playback"); in patch_sigmatel_stac9758_specific()
1201 snd_ac97_rename_vol_ctl(ac97, "Video Playback", "Surround Mix Playback"); in patch_sigmatel_stac9758_specific()
1212 static int patch_sigmatel_stac9758(struct snd_ac97 * ac97) in patch_sigmatel_stac9758() argument
1236 if (ac97->pci && in patch_sigmatel_stac9758()
1237 ac97->subsystem_vendor == 0x107b && in patch_sigmatel_stac9758()
1238 ac97->subsystem_device == 0x0601) in patch_sigmatel_stac9758()
1242 ac97->build_ops = &patch_sigmatel_stac9758_ops; in patch_sigmatel_stac9758()
1244 snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, AC97_PAGE_VENDOR); in patch_sigmatel_stac9758()
1246 snd_ac97_write_cache(ac97, regs[i], pregs[i]); in patch_sigmatel_stac9758()
1248 ac97->flags |= AC97_STEREO_MUTES; in patch_sigmatel_stac9758()
1257 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",PLAYBACK,NONE) "AC97-SPSA", AC97_CSR_ACMODE, 0, 3, 0)
1260 static int patch_cirrus_build_spdif(struct snd_ac97 * ac97) in patch_cirrus_build_spdif() argument
1265 if ((err = patch_build_controls(ac97, &snd_ac97_controls_spdif[0], 3)) < 0) in patch_cirrus_build_spdif()
1268 if ((err = patch_build_controls(ac97, &snd_ac97_cirrus_controls_spdif[0], 1)) < 0) in patch_cirrus_build_spdif()
1270 switch (ac97->id & AC97_ID_CS_MASK) { in patch_cirrus_build_spdif()
1272 if ((err = patch_build_controls(ac97, &snd_ac97_cirrus_controls_spdif[1], 1)) < 0) in patch_cirrus_build_spdif()
1278 snd_ac97_write_cache(ac97, AC97_CSR_SPDIF, 0x0a20); in patch_cirrus_build_spdif()
1286 static int patch_cirrus_spdif(struct snd_ac97 * ac97) in patch_cirrus_spdif() argument
1292 - sp/dif control register is 0x68. differs from AC97: in patch_cirrus_spdif()
1295 - only 44.1/48k [00 = 48, 01=44,1] (AC97 is 00=44.1, 10=48) in patch_cirrus_spdif()
1299 ac97->build_ops = &patch_cirrus_ops; in patch_cirrus_spdif()
1300 ac97->flags |= AC97_CS_SPDIF; in patch_cirrus_spdif()
1301 ac97->rates[AC97_RATES_SPDIF] &= ~SNDRV_PCM_RATE_32000; in patch_cirrus_spdif()
1302 ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ in patch_cirrus_spdif()
1303 snd_ac97_write_cache(ac97, AC97_CSR_ACMODE, 0x0080); in patch_cirrus_spdif()
1307 static int patch_cirrus_cs4299(struct snd_ac97 * ac97) in patch_cirrus_cs4299() argument
1310 ac97->flags |= AC97_HAS_PC_BEEP; in patch_cirrus_cs4299()
1312 return patch_cirrus_spdif(ac97); in patch_cirrus_cs4299()
1322 static int patch_conexant_build_spdif(struct snd_ac97 * ac97) in patch_conexant_build_spdif() argument
1327 if ((err = patch_build_controls(ac97, &snd_ac97_controls_spdif[0], 3)) < 0) in patch_conexant_build_spdif()
1330 if ((err = patch_build_controls(ac97, &snd_ac97_conexant_controls_spdif[0], 1)) < 0) in patch_conexant_build_spdif()
1334 snd_ac97_write_cache(ac97, AC97_CXR_AUDIO_MISC, in patch_conexant_build_spdif()
1335 …snd_ac97_read(ac97, AC97_CXR_AUDIO_MISC) & ~(AC97_CXR_SPDIFEN|AC97_CXR_COPYRGT|AC97_CXR_SPDIF_MASK… in patch_conexant_build_spdif()
1343 static int patch_conexant(struct snd_ac97 * ac97) in patch_conexant() argument
1345 ac97->build_ops = &patch_conexant_ops; in patch_conexant()
1346 ac97->flags |= AC97_CX_SPDIF; in patch_conexant()
1347 ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ in patch_conexant()
1348 ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; /* 48k only */ in patch_conexant()
1352 static int patch_cx20551(struct snd_ac97 *ac97) in patch_cx20551() argument
1354 snd_ac97_update_bits(ac97, 0x5c, 0x01, 0x01); in patch_cx20551()
1362 static void ad18xx_resume(struct snd_ac97 *ac97) in ad18xx_resume() argument
1371 if (test_bit(reg, ac97->reg_accessed)) { in ad18xx_resume()
1372 snd_ac97_write(ac97, reg, ac97->regs[reg]); in ad18xx_resume()
1373 snd_ac97_read(ac97, reg); in ad18xx_resume()
1377 if (! (ac97->flags & AC97_AD_MULTI)) in ad18xx_resume()
1379 snd_ac97_restore_status(ac97); in ad18xx_resume()
1383 if (! ac97->spec.ad18xx.id[codec]) in ad18xx_resume()
1386 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, in ad18xx_resume()
1387 ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]); in ad18xx_resume()
1388 ac97->bus->ops->write(ac97, AC97_AD_CODEC_CFG, ac97->spec.ad18xx.codec_cfg[codec]); in ad18xx_resume()
1391 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000); in ad18xx_resume()
1397 if (test_bit(i, ac97->reg_accessed)) { in ad18xx_resume()
1401 if (! ac97->spec.ad18xx.id[codec]) in ad18xx_resume()
1404 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, in ad18xx_resume()
1405 ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]); in ad18xx_resume()
1407 ac97->bus->ops->write(ac97, AC97_PCM, ac97->spec.ad18xx.pcmreg[codec]); in ad18xx_resume()
1410 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000); in ad18xx_resume()
1417 snd_ac97_write(ac97, i, ac97->regs[i]); in ad18xx_resume()
1418 snd_ac97_read(ac97, i); in ad18xx_resume()
1422 snd_ac97_restore_iec958(ac97); in ad18xx_resume()
1425 static void ad1888_resume(struct snd_ac97 *ac97) in ad1888_resume() argument
1427 ad18xx_resume(ac97); in ad1888_resume()
1428 snd_ac97_write_cache(ac97, AC97_CODEC_CLASS_REV, 0x8080); in ad1888_resume()
1444 static int patch_ad1819(struct snd_ac97 * ac97) in patch_ad1819() argument
1449 scfg = snd_ac97_read(ac97, AC97_AD_SERIAL_CFG); in patch_ad1819()
1450 snd_ac97_write_cache(ac97, AC97_AD_SERIAL_CFG, scfg | 0x7000); /* select all codecs */ in patch_ad1819()
1451 ac97->res_table = ad1819_restbl; in patch_ad1819()
1455 static unsigned short patch_ad1881_unchained(struct snd_ac97 * ac97, int idx, unsigned short mask) in patch_ad1881_unchained() argument
1460 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, mask); in patch_ad1881_unchained()
1461 snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0000); /* ID0C, ID1C, SDIE = off */ in patch_ad1881_unchained()
1462 val = snd_ac97_read(ac97, AC97_VENDOR_ID2); in patch_ad1881_unchained()
1465 ac97->spec.ad18xx.unchained[idx] = mask; in patch_ad1881_unchained()
1466 ac97->spec.ad18xx.id[idx] = val; in patch_ad1881_unchained()
1467 ac97->spec.ad18xx.codec_cfg[idx] = 0x0000; in patch_ad1881_unchained()
1471 static int patch_ad1881_chained1(struct snd_ac97 * ac97, int idx, unsigned short codec_bits) in patch_ad1881_chained1() argument
1476 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, cfg_bits[idx]); in patch_ad1881_chained1()
1477 snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0004); // SDIE in patch_ad1881_chained1()
1478 val = snd_ac97_read(ac97, AC97_VENDOR_ID2); in patch_ad1881_chained1()
1482 snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, codec_bits); in patch_ad1881_chained1()
1483 ac97->spec.ad18xx.chained[idx] = cfg_bits[idx]; in patch_ad1881_chained1()
1484 ac97->spec.ad18xx.id[idx] = val; in patch_ad1881_chained1()
1485 ac97->spec.ad18xx.codec_cfg[idx] = codec_bits ? codec_bits : 0x0004; in patch_ad1881_chained1()
1489 static void patch_ad1881_chained(struct snd_ac97 * ac97, int unchained_idx, int cidx1, int cidx2) in patch_ad1881_chained() argument
1492 if (ac97->spec.ad18xx.unchained[cidx1] || ac97->spec.ad18xx.chained[cidx1]) in patch_ad1881_chained()
1494 if (ac97->spec.ad18xx.unchained[cidx2] || ac97->spec.ad18xx.chained[cidx2]) in patch_ad1881_chained()
1499 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, in patch_ad1881_chained()
1500 ac97->spec.ad18xx.unchained[unchained_idx]); in patch_ad1881_chained()
1501 snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0002); // ID1C in patch_ad1881_chained()
1502 ac97->spec.ad18xx.codec_cfg[unchained_idx] = 0x0002; in patch_ad1881_chained()
1505 patch_ad1881_chained1(ac97, cidx1, 0); in patch_ad1881_chained()
1506 else if (patch_ad1881_chained1(ac97, cidx1, 0x0006)) // SDIE | ID1C in patch_ad1881_chained()
1507 patch_ad1881_chained1(ac97, cidx2, 0); in patch_ad1881_chained()
1508 else if (patch_ad1881_chained1(ac97, cidx2, 0x0006)) // SDIE | ID1C in patch_ad1881_chained()
1509 patch_ad1881_chained1(ac97, cidx1, 0); in patch_ad1881_chained()
1511 patch_ad1881_chained1(ac97, cidx2, 0); in patch_ad1881_chained()
1521 static int patch_ad1881(struct snd_ac97 * ac97) in patch_ad1881() argument
1534 val = snd_ac97_read(ac97, AC97_AD_SERIAL_CFG); in patch_ad1881()
1535 snd_ac97_write_cache(ac97, AC97_AD_SERIAL_CFG, val); in patch_ad1881()
1536 codecs[0] = patch_ad1881_unchained(ac97, 0, (1<<12)); in patch_ad1881()
1537 codecs[1] = patch_ad1881_unchained(ac97, 1, (1<<14)); in patch_ad1881()
1538 codecs[2] = patch_ad1881_unchained(ac97, 2, (1<<13)); in patch_ad1881()
1544 if (ac97->spec.ad18xx.unchained[idx]) in patch_ad1881()
1545 patch_ad1881_chained(ac97, idx, cfg_idxs[idx][0], cfg_idxs[idx][1]); in patch_ad1881()
1547 if (ac97->spec.ad18xx.id[1]) { in patch_ad1881()
1548 ac97->flags |= AC97_AD_MULTI; in patch_ad1881()
1549 ac97->scaps |= AC97_SCAP_SURROUND_DAC; in patch_ad1881()
1551 if (ac97->spec.ad18xx.id[2]) { in patch_ad1881()
1552 ac97->flags |= AC97_AD_MULTI; in patch_ad1881()
1553 ac97->scaps |= AC97_SCAP_CENTER_LFE_DAC; in patch_ad1881()
1558 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000); in patch_ad1881()
1561 if (ac97->spec.ad18xx.id[idx]) in patch_ad1881()
1565 snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0000); in patch_ad1881()
1566 ac97->spec.ad18xx.codec_cfg[0] = in patch_ad1881()
1567 ac97->spec.ad18xx.codec_cfg[1] = in patch_ad1881()
1568 ac97->spec.ad18xx.codec_cfg[2] = 0x0000; in patch_ad1881()
1571 ac97->ext_id = snd_ac97_read(ac97, AC97_EXTENDED_ID); in patch_ad1881()
1572 if (ac97->spec.ad18xx.id[0]) { in patch_ad1881()
1573 ac97->id &= 0xffff0000; in patch_ad1881()
1574 ac97->id |= ac97->spec.ad18xx.id[0]; in patch_ad1881()
1576 ac97->build_ops = &patch_ad1881_build_ops; in patch_ad1881()
1591 static int patch_ad1885_specific(struct snd_ac97 * ac97) in patch_ad1885_specific() argument
1595 …if ((err = patch_build_controls(ac97, snd_ac97_controls_ad1885, ARRAY_SIZE(snd_ac97_controls_ad188… in patch_ad1885_specific()
1597 reset_tlv(ac97, "Headphone Playback Volume", in patch_ad1885_specific()
1609 static int patch_ad1885(struct snd_ac97 * ac97) in patch_ad1885() argument
1611 patch_ad1881(ac97); in patch_ad1885()
1616 snd_ac97_write_cache(ac97, AC97_AD_MISC, 0x0404); in patch_ad1885()
1618 ac97->build_ops = &patch_ad1885_build_ops; in patch_ad1885()
1622 static int patch_ad1886_specific(struct snd_ac97 * ac97) in patch_ad1886_specific() argument
1624 reset_tlv(ac97, "Headphone Playback Volume", in patch_ad1886_specific()
1636 static int patch_ad1886(struct snd_ac97 * ac97) in patch_ad1886() argument
1638 patch_ad1881(ac97); in patch_ad1886()
1641 snd_ac97_write_cache(ac97, AC97_AD_JACK_SPDIF, 0x0010); in patch_ad1886()
1642 ac97->build_ops = &patch_ad1886_build_ops; in patch_ad1886()
1667 #define AC97_AD198X_AC97NC 0x4000 /* AC97 no compatible mode */
1691 #define AC97_AD1986_AC97NC 0x4000 /* AC97 no compatible mode (r/o 1) */
1757 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad198x_spdif_source_get() local
1760 val = ac97->regs[AC97_AD_SERIAL_CFG]; in snd_ac97_ad198x_spdif_source_get()
1767 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad198x_spdif_source_put() local
1773 return snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x0004, val); in snd_ac97_ad198x_spdif_source_put()
1784 static int patch_ad198x_post_spdif(struct snd_ac97 * ac97) in patch_ad198x_post_spdif() argument
1786 return patch_build_controls(ac97, &snd_ac97_ad198x_spdif_source, 1); in patch_ad198x_post_spdif()
1813 static int check_list(struct snd_ac97 *ac97, const unsigned int *list) in check_list() argument
1815 u32 subid = ((u32)ac97->subsystem_vendor << 16) | ac97->subsystem_device; in check_list()
1822 static int patch_ad1981a_specific(struct snd_ac97 * ac97) in patch_ad1981a_specific() argument
1824 if (check_list(ac97, ad1981_jacks_denylist)) in patch_ad1981a_specific()
1826 return patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense, in patch_ad1981a_specific()
1854 static void check_ad1981_hp_jack_sense(struct snd_ac97 *ac97) in check_ad1981_hp_jack_sense() argument
1856 if (check_list(ac97, ad1981_jacks_allowlist)) in check_ad1981_hp_jack_sense()
1858 snd_ac97_update_bits(ac97, AC97_AD_JACK_SPDIF, 1<<11, 1<<11); in check_ad1981_hp_jack_sense()
1861 static int patch_ad1981a(struct snd_ac97 *ac97) in patch_ad1981a() argument
1863 patch_ad1881(ac97); in patch_ad1981a()
1864 ac97->build_ops = &patch_ad1981a_build_ops; in patch_ad1981a()
1865 snd_ac97_update_bits(ac97, AC97_AD_MISC, AC97_AD198X_MSPLT, AC97_AD198X_MSPLT); in patch_ad1981a()
1866 ac97->flags |= AC97_STEREO_MUTES; in patch_ad1981a()
1867 check_ad1981_hp_jack_sense(ac97); in patch_ad1981a()
1874 static int patch_ad1981b_specific(struct snd_ac97 *ac97) in patch_ad1981b_specific() argument
1878 if ((err = patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1)) < 0) in patch_ad1981b_specific()
1880 if (check_list(ac97, ad1981_jacks_denylist)) in patch_ad1981b_specific()
1882 return patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense, in patch_ad1981b_specific()
1894 static int patch_ad1981b(struct snd_ac97 *ac97) in patch_ad1981b() argument
1896 patch_ad1881(ac97); in patch_ad1981b()
1897 ac97->build_ops = &patch_ad1981b_build_ops; in patch_ad1981b()
1898 snd_ac97_update_bits(ac97, AC97_AD_MISC, AC97_AD198X_MSPLT, AC97_AD198X_MSPLT); in patch_ad1981b()
1899 ac97->flags |= AC97_STEREO_MUTES; in patch_ad1981b()
1900 check_ad1981_hp_jack_sense(ac97); in patch_ad1981b()
1908 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1888_lohpsel_get() local
1911 val = ac97->regs[AC97_AD_MISC]; in snd_ac97_ad1888_lohpsel_get()
1913 if (ac97->spec.ad18xx.lo_as_master) in snd_ac97_ad1888_lohpsel_get()
1921 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1888_lohpsel_put() local
1925 if (ac97->spec.ad18xx.lo_as_master) in snd_ac97_ad1888_lohpsel_put()
1928 return snd_ac97_update_bits(ac97, AC97_AD_MISC, in snd_ac97_ad1888_lohpsel_put()
1941 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1888_downmix_get() local
1944 val = ac97->regs[AC97_AD_MISC]; in snd_ac97_ad1888_downmix_get()
1954 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1888_downmix_put() local
1964 return snd_ac97_update_bits(ac97, AC97_AD_MISC, in snd_ac97_ad1888_downmix_put()
1968 static void ad1888_update_jacks(struct snd_ac97 *ac97) in ad1888_update_jacks() argument
1972 if (!ac97->spec.ad18xx.lo_as_master && is_shared_linein(ac97)) in ad1888_update_jacks()
1975 if (is_shared_micin(ac97)) in ad1888_update_jacks()
1978 snd_ac97_update_bits(ac97, AC97_AD_MISC, (1 << 11) | (1 << 12), val); in ad1888_update_jacks()
2007 static int patch_ad1888_specific(struct snd_ac97 *ac97) in patch_ad1888_specific() argument
2009 if (!ac97->spec.ad18xx.lo_as_master) { in patch_ad1888_specific()
2011 snd_ac97_rename_vol_ctl(ac97, "Master Playback", in patch_ad1888_specific()
2013 snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", in patch_ad1888_specific()
2016 return patch_build_controls(ac97, snd_ac97_ad1888_controls, ARRAY_SIZE(snd_ac97_ad1888_controls)); in patch_ad1888_specific()
2028 static int patch_ad1888(struct snd_ac97 * ac97) in patch_ad1888() argument
2032 patch_ad1881(ac97); in patch_ad1888()
2033 ac97->build_ops = &patch_ad1888_build_ops; in patch_ad1888()
2039 if (ac97->subsystem_vendor == 0x1043 && in patch_ad1888()
2040 ac97->subsystem_device == 0x1193) /* ASUS A9T laptop */ in patch_ad1888()
2041 ac97->spec.ad18xx.lo_as_master = 1; in patch_ad1888()
2043 misc = snd_ac97_read(ac97, AC97_AD_MISC); in patch_ad1888()
2047 if (!ac97->spec.ad18xx.lo_as_master) in patch_ad1888()
2054 snd_ac97_write_cache(ac97, AC97_AD_MISC, misc); in patch_ad1888()
2055 ac97->flags |= AC97_STEREO_MUTES; in patch_ad1888()
2059 static int patch_ad1980_specific(struct snd_ac97 *ac97) in patch_ad1980_specific() argument
2063 if ((err = patch_ad1888_specific(ac97)) < 0) in patch_ad1980_specific()
2065 return patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1); in patch_ad1980_specific()
2077 static int patch_ad1980(struct snd_ac97 * ac97) in patch_ad1980() argument
2079 patch_ad1888(ac97); in patch_ad1980()
2080 ac97->build_ops = &patch_ad1980_build_ops; in patch_ad1980()
2098 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1985_vrefout_get() local
2100 val = (ac97->regs[AC97_AD_MISC] & AC97_AD198X_VREF_MASK) in snd_ac97_ad1985_vrefout_get()
2110 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1985_vrefout_put() local
2117 return snd_ac97_update_bits(ac97, AC97_AD_MISC, in snd_ac97_ad1985_vrefout_put()
2154 static void ad1985_update_jacks(struct snd_ac97 *ac97) in ad1985_update_jacks() argument
2156 ad1888_update_jacks(ac97); in ad1985_update_jacks()
2158 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 1 << 9, in ad1985_update_jacks()
2159 is_shared_micin(ac97) ? 1 << 9 : 0); in ad1985_update_jacks()
2162 static int patch_ad1985_specific(struct snd_ac97 *ac97) in patch_ad1985_specific() argument
2167 snd_ac97_rename_vol_ctl(ac97, "Master Playback", in patch_ad1985_specific()
2169 snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Master Playback"); in patch_ad1985_specific()
2171 if ((err = patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1)) < 0) in patch_ad1985_specific()
2174 return patch_build_controls(ac97, snd_ac97_ad1985_controls, in patch_ad1985_specific()
2187 static int patch_ad1985(struct snd_ac97 * ac97) in patch_ad1985() argument
2191 patch_ad1881(ac97); in patch_ad1985()
2192 ac97->build_ops = &patch_ad1985_build_ops; in patch_ad1985()
2193 misc = snd_ac97_read(ac97, AC97_AD_MISC); in patch_ad1985()
2197 snd_ac97_write_cache(ac97, AC97_AD_MISC, misc | in patch_ad1985()
2202 ac97->flags |= AC97_STEREO_MUTES; in patch_ad1985()
2205 ad1985_update_jacks(ac97); in patch_ad1985()
2208 ac97->ext_id = (ac97->ext_id & ~AC97_EI_REV_MASK) | AC97_EI_REV_23; in patch_ad1985()
2217 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_lososel_get() local
2220 val = ac97->regs[AC97_AD_MISC3]; in snd_ac97_ad1986_lososel_get()
2228 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_lososel_put() local
2231 int sprd = (ac97->regs[AC97_AD_MISC] & AC97_AD1986_SPRD) != 0; in snd_ac97_ad1986_lososel_put()
2233 ret0 = snd_ac97_update_bits(ac97, AC97_AD_MISC3, AC97_AD1986_LOSEL, in snd_ac97_ad1986_lososel_put()
2240 ret1 = snd_ac97_update_bits(ac97, AC97_AD_MISC, AC97_AD1986_SOSEL, in snd_ac97_ad1986_lososel_put()
2253 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_spread_get() local
2256 val = ac97->regs[AC97_AD_MISC]; in snd_ac97_ad1986_spread_get()
2264 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_spread_put() local
2267 int sprd = (ac97->regs[AC97_AD_MISC3] & AC97_AD1986_LOSEL) != 0; in snd_ac97_ad1986_spread_put()
2269 ret0 = snd_ac97_update_bits(ac97, AC97_AD_MISC, AC97_AD1986_SPRD, in snd_ac97_ad1986_spread_put()
2276 ret1 = snd_ac97_update_bits(ac97, AC97_AD_MISC, AC97_AD1986_SOSEL, in snd_ac97_ad1986_spread_put()
2289 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_miclisel_get() local
2291 ucontrol->value.integer.value[0] = ac97->spec.ad18xx.swap_mic_linein; in snd_ac97_ad1986_miclisel_get()
2298 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_miclisel_put() local
2301 if (swap != ac97->spec.ad18xx.swap_mic_linein) { in snd_ac97_ad1986_miclisel_put()
2302 ac97->spec.ad18xx.swap_mic_linein = swap; in snd_ac97_ad1986_miclisel_put()
2303 if (ac97->build_ops->update_jacks) in snd_ac97_ad1986_miclisel_put()
2304 ac97->build_ops->update_jacks(ac97); in snd_ac97_ad1986_miclisel_put()
2314 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_vrefout_get() local
2316 unsigned short reg = ac97->regs[AC97_AD_MISC2]; in snd_ac97_ad1986_vrefout_get()
2332 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_ad1986_vrefout_put() local
2366 cret = snd_ac97_update_bits(ac97, AC97_AD_MISC2, in snd_ac97_ad1986_vrefout_put()
2370 lret = snd_ac97_update_bits(ac97, AC97_AD_MISC3, in snd_ac97_ad1986_vrefout_put()
2374 mret = snd_ac97_update_bits(ac97, AC97_AD_MISC2, in snd_ac97_ad1986_vrefout_put()
2426 static void ad1986_update_jacks(struct snd_ac97 *ac97) in ad1986_update_jacks() argument
2432 if (!is_surround_on(ac97)) in ad1986_update_jacks()
2434 if (!is_clfe_on(ac97)) in ad1986_update_jacks()
2438 if (is_shared_linein(ac97)) in ad1986_update_jacks()
2440 else if (ac97->spec.ad18xx.swap_mic_linein != 0) in ad1986_update_jacks()
2442 snd_ac97_update_bits(ac97, AC97_AD_MISC, in ad1986_update_jacks()
2448 if (is_shared_micin(ac97)) in ad1986_update_jacks()
2450 else if (ac97->spec.ad18xx.swap_mic_linein != 0) in ad1986_update_jacks()
2454 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, in ad1986_update_jacks()
2459 static int patch_ad1986_specific(struct snd_ac97 *ac97) in patch_ad1986_specific() argument
2463 if ((err = patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1)) < 0) in patch_ad1986_specific()
2466 return patch_build_controls(ac97, snd_ac97_ad1986_controls, in patch_ad1986_specific()
2479 static int patch_ad1986(struct snd_ac97 * ac97) in patch_ad1986() argument
2481 patch_ad1881(ac97); in patch_ad1986()
2482 ac97->build_ops = &patch_ad1986_build_ops; in patch_ad1986()
2483 ac97->flags |= AC97_STEREO_MUTES; in patch_ad1986()
2486 ad1986_update_jacks(ac97); in patch_ad1986()
2494 static int patch_alc203(struct snd_ac97 *ac97) in patch_alc203() argument
2496 snd_ac97_update_bits(ac97, 0x7a, 0x400, 0x400); in patch_alc203()
2503 static void alc650_update_jacks(struct snd_ac97 *ac97) in alc650_update_jacks() argument
2508 shared = is_shared_surrout(ac97); in alc650_update_jacks()
2509 snd_ac97_update_bits(ac97, AC97_ALC650_MULTICH, 1 << 9, in alc650_update_jacks()
2512 shared = is_shared_clfeout(ac97); in alc650_update_jacks()
2514 snd_ac97_update_bits(ac97, AC97_ALC650_CLOCK, 1 << 12, in alc650_update_jacks()
2517 snd_ac97_update_bits(ac97, AC97_ALC650_MULTICH, 1 << 10, in alc650_update_jacks()
2520 snd_ac97_update_bits(ac97, AC97_ALC650_GPIO_STATUS, 0x100, in alc650_update_jacks()
2527 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in alc650_swap_surround_put() local
2528 struct snd_pcm_chmap *map = ac97->chmaps[SNDRV_PCM_STREAM_PLAYBACK]; in alc650_swap_surround_put()
2581 static int patch_alc650_specific(struct snd_ac97 * ac97) in patch_alc650_specific() argument
2585 …if ((err = patch_build_controls(ac97, snd_ac97_controls_alc650, ARRAY_SIZE(snd_ac97_controls_alc65… in patch_alc650_specific()
2587 if (ac97->ext_id & AC97_EI_SPDIF) { in patch_alc650_specific()
2588 …if ((err = patch_build_controls(ac97, snd_ac97_spdif_controls_alc650, ARRAY_SIZE(snd_ac97_spdif_co… in patch_alc650_specific()
2591 if (ac97->id != AC97_ID_ALC650F) in patch_alc650_specific()
2592 reset_tlv(ac97, "Master Playback Volume", in patch_alc650_specific()
2602 static int patch_alc650(struct snd_ac97 * ac97) in patch_alc650() argument
2606 ac97->build_ops = &patch_alc650_ops; in patch_alc650()
2609 val = snd_ac97_read(ac97, AC97_ALC650_REVISION) & 0x3f; in patch_alc650()
2611 ac97->id = 0x414c4720; /* Old version */ in patch_alc650()
2613 ac97->id = 0x414c4721; /* D version */ in patch_alc650()
2615 ac97->id = 0x414c4722; /* E version */ in patch_alc650()
2617 ac97->id = 0x414c4723; /* F version */ in patch_alc650()
2621 ac97->spec.dev_flags = (ac97->id == 0x414c4722 || in patch_alc650()
2622 ac97->id == 0x414c4723); in patch_alc650()
2625 snd_ac97_write_cache(ac97, AC97_ALC650_GPIO_STATUS, in patch_alc650()
2626 snd_ac97_read(ac97, AC97_ALC650_GPIO_STATUS) | 0x8000); in patch_alc650()
2629 val = snd_ac97_read(ac97, AC97_ALC650_CLOCK); in patch_alc650()
2631 if (ac97->spec.dev_flags && in patch_alc650()
2633 ! (ac97->subsystem_vendor == 0x1043 && in patch_alc650()
2634 ac97->subsystem_device == 0x1103)) in patch_alc650()
2638 snd_ac97_write_cache(ac97, AC97_ALC650_CLOCK, val); in patch_alc650()
2645 snd_ac97_write_cache(ac97, AC97_ALC650_MULTICH, 0); in patch_alc650()
2649 snd_ac97_write_cache(ac97, AC97_ALC650_GPIO_SETUP, in patch_alc650()
2650 snd_ac97_read(ac97, AC97_ALC650_GPIO_SETUP) | 0x01); in patch_alc650()
2651 snd_ac97_write_cache(ac97, AC97_ALC650_GPIO_STATUS, in patch_alc650()
2652 (snd_ac97_read(ac97, AC97_ALC650_GPIO_STATUS) | 0x100) & ~0x10); in patch_alc650()
2655 snd_ac97_write_cache(ac97, AC97_ALC650_SURR_DAC_VOL, 0x0808); in patch_alc650()
2656 snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808); in patch_alc650()
2660 static void alc655_update_jacks(struct snd_ac97 *ac97) in alc655_update_jacks() argument
2665 shared = is_shared_surrout(ac97); in alc655_update_jacks()
2666 ac97_update_bits_page(ac97, AC97_ALC650_MULTICH, 1 << 9, in alc655_update_jacks()
2669 shared = is_shared_clfeout(ac97); in alc655_update_jacks()
2671 snd_ac97_update_bits(ac97, AC97_ALC650_CLOCK, 1 << 12, in alc655_update_jacks()
2673 ac97_update_bits_page(ac97, AC97_ALC650_MULTICH, 1 << 10, in alc655_update_jacks()
2691 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in alc655_iec958_route_info() local
2693 if (ac97->spec.dev_flags) in alc655_iec958_route_info()
2701 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in alc655_iec958_route_get() local
2704 val = ac97->regs[AC97_ALC650_MULTICH]; in alc655_iec958_route_get()
2706 if (ac97->spec.dev_flags && val == 3) in alc655_iec958_route_get()
2714 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in alc655_iec958_route_put() local
2716 return ac97_update_bits_page(ac97, AC97_ALC650_MULTICH, 3 << 12, in alc655_iec958_route_put()
2734 static int patch_alc655_specific(struct snd_ac97 * ac97) in patch_alc655_specific() argument
2738 …if ((err = patch_build_controls(ac97, snd_ac97_controls_alc655, ARRAY_SIZE(snd_ac97_controls_alc65… in patch_alc655_specific()
2740 if (ac97->ext_id & AC97_EI_SPDIF) { in patch_alc655_specific()
2741 …if ((err = patch_build_controls(ac97, snd_ac97_spdif_controls_alc655, ARRAY_SIZE(snd_ac97_spdif_co… in patch_alc655_specific()
2752 static int patch_alc655(struct snd_ac97 * ac97) in patch_alc655() argument
2756 if (ac97->id == AC97_ID_ALC658) { in patch_alc655()
2757 ac97->spec.dev_flags = 1; /* ALC658 */ in patch_alc655()
2758 if ((snd_ac97_read(ac97, AC97_ALC650_REVISION) & 0x3f) == 2) { in patch_alc655()
2759 ac97->id = AC97_ID_ALC658D; in patch_alc655()
2760 ac97->spec.dev_flags = 2; in patch_alc655()
2764 ac97->build_ops = &patch_alc655_ops; in patch_alc655()
2767 snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, AC97_PAGE_VENDOR); in patch_alc655()
2770 val = snd_ac97_read(ac97, 0x7a); /* misc control */ in patch_alc655()
2771 if (ac97->spec.dev_flags) /* ALC658 */ in patch_alc655()
2774 if (ac97->subsystem_vendor == 0x1462 && in patch_alc655()
2775 (ac97->subsystem_device == 0x0131 || /* MSI S270 laptop */ in patch_alc655()
2776 ac97->subsystem_device == 0x0161 || /* LG K1 Express */ in patch_alc655()
2777 ac97->subsystem_device == 0x0351 || /* MSI L725 laptop */ in patch_alc655()
2778 ac97->subsystem_device == 0x0471 || /* MSI L720 laptop */ in patch_alc655()
2779 ac97->subsystem_device == 0x0061)) /* MSI S250 laptop */ in patch_alc655()
2784 ac97->ext_id |= AC97_EI_SPDIF; in patch_alc655()
2787 snd_ac97_write_cache(ac97, 0x7a, val); in patch_alc655()
2793 snd_ac97_write_cache(ac97, AC97_ALC650_MULTICH, 1<<15); in patch_alc655()
2796 snd_ac97_write_cache(ac97, AC97_ALC650_SURR_DAC_VOL, 0x0808); in patch_alc655()
2797 snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808); in patch_alc655()
2800 if (ac97->id == AC97_ID_ALC658D) in patch_alc655()
2801 snd_ac97_update_bits(ac97, 0x74, 0x0800, 0x0800); in patch_alc655()
2811 static void alc850_update_jacks(struct snd_ac97 *ac97) in alc850_update_jacks() argument
2817 shared = is_shared_surrout(ac97); in alc850_update_jacks()
2819 snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<4)|(1<<5), in alc850_update_jacks()
2822 snd_ac97_update_bits(ac97, AC97_ALC850_JACK_SELECT, 7 << 12, in alc850_update_jacks()
2825 shared = is_shared_clfeout(ac97); in alc850_update_jacks()
2827 snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<12)|(1<<13), in alc850_update_jacks()
2830 snd_ac97_update_bits(ac97, AC97_ALC850_JACK_SELECT, 7 << 4, in alc850_update_jacks()
2833 aux_is_back_surround = alc850_is_aux_back_surround(ac97); in alc850_update_jacks()
2835 snd_ac97_update_bits(ac97, AC97_ALC850_MULTICH, 1 << 10, in alc850_update_jacks()
2846 static int patch_alc850_specific(struct snd_ac97 *ac97) in patch_alc850_specific() argument
2850 …if ((err = patch_build_controls(ac97, snd_ac97_controls_alc850, ARRAY_SIZE(snd_ac97_controls_alc85… in patch_alc850_specific()
2852 if (ac97->ext_id & AC97_EI_SPDIF) { in patch_alc850_specific()
2853 …if ((err = patch_build_controls(ac97, snd_ac97_spdif_controls_alc655, ARRAY_SIZE(snd_ac97_spdif_co… in patch_alc850_specific()
2864 static int patch_alc850(struct snd_ac97 *ac97) in patch_alc850() argument
2866 ac97->build_ops = &patch_alc850_ops; in patch_alc850()
2868 ac97->spec.dev_flags = 0; /* for IEC958 playback route - ALC655 compatible */ in patch_alc850()
2869 ac97->flags |= AC97_HAS_8CH; in patch_alc850()
2872 snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, AC97_PAGE_VENDOR); in patch_alc850()
2881 snd_ac97_write_cache(ac97, AC97_ALC650_MULTICH, 1<<15); in patch_alc850()
2885 snd_ac97_write_cache(ac97, 0x7a, (1<<1)|(1<<4)|(0<<5)|(1<<6)| in patch_alc850()
2890 snd_ac97_write_cache(ac97, 0x76, (0<<0)|(0<<2)|(1<<4)|(1<<7)|(2<<8)| in patch_alc850()
2894 snd_ac97_write_cache(ac97, AC97_ALC650_SURR_DAC_VOL, 0x0808); in patch_alc850()
2895 snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808); in patch_alc850()
2899 static int patch_aztech_azf3328_specific(struct snd_ac97 *ac97) in patch_aztech_azf3328_specific() argument
2902 snd_ac97_find_mixer_ctl(ac97, "3D Control - Center"); in patch_aztech_azf3328_specific()
2904 snd_ac97_find_mixer_ctl(ac97, "3D Control - Depth"); in patch_aztech_azf3328_specific()
2907 * 3D register is different from AC97 standard layout in patch_aztech_azf3328_specific()
2913 snd_ac97_rename_vol_ctl(ac97, in patch_aztech_azf3328_specific()
2923 snd_ac97_rename_vol_ctl(ac97, in patch_aztech_azf3328_specific()
2926 snd_ac97_rename_vol_ctl(ac97, in patch_aztech_azf3328_specific()
2937 static int patch_aztech_azf3328(struct snd_ac97 *ac97) in patch_aztech_azf3328() argument
2939 ac97->build_ops = &patch_aztech_azf3328_ops; in patch_aztech_azf3328()
2946 static void cm9738_update_jacks(struct snd_ac97 *ac97) in cm9738_update_jacks() argument
2949 snd_ac97_update_bits(ac97, AC97_CM9738_VENDOR_CTRL, 1 << 10, in cm9738_update_jacks()
2950 is_shared_surrout(ac97) ? (1 << 10) : 0); in cm9738_update_jacks()
2959 static int patch_cm9738_specific(struct snd_ac97 * ac97) in patch_cm9738_specific() argument
2961 return patch_build_controls(ac97, snd_ac97_cm9738_controls, ARRAY_SIZE(snd_ac97_cm9738_controls)); in patch_cm9738_specific()
2969 static int patch_cm9738(struct snd_ac97 * ac97) in patch_cm9738() argument
2971 ac97->build_ops = &patch_cm9738_ops; in patch_cm9738()
2974 ac97->flags |= AC97_HAS_NO_PCM_VOL; in patch_cm9738()
2975 snd_ac97_write_cache(ac97, AC97_PCM, 0x8000); in patch_cm9738()
2989 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_cmedia_spdif_playback_source_get() local
2992 val = ac97->regs[AC97_CM9739_SPDIF_CTRL]; in snd_ac97_cmedia_spdif_playback_source_get()
2999 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in snd_ac97_cmedia_spdif_playback_source_put() local
3001 return snd_ac97_update_bits(ac97, AC97_CM9739_SPDIF_CTRL, in snd_ac97_cmedia_spdif_playback_source_put()
3024 static void cm9739_update_jacks(struct snd_ac97 *ac97) in cm9739_update_jacks() argument
3027 snd_ac97_update_bits(ac97, AC97_CM9739_MULTI_CHAN, 1 << 10, in cm9739_update_jacks()
3028 is_shared_surrout(ac97) ? (1 << 10) : 0); in cm9739_update_jacks()
3030 snd_ac97_update_bits(ac97, AC97_CM9739_MULTI_CHAN, 0x3000, in cm9739_update_jacks()
3031 is_shared_clfeout(ac97) ? 0x1000 : 0x2000); in cm9739_update_jacks()
3039 static int patch_cm9739_specific(struct snd_ac97 * ac97) in patch_cm9739_specific() argument
3041 return patch_build_controls(ac97, snd_ac97_cm9739_controls, ARRAY_SIZE(snd_ac97_cm9739_controls)); in patch_cm9739_specific()
3044 static int patch_cm9739_post_spdif(struct snd_ac97 * ac97) in patch_cm9739_post_spdif() argument
3046 …return patch_build_controls(ac97, snd_ac97_cm9739_controls_spdif, ARRAY_SIZE(snd_ac97_cm9739_contr… in patch_cm9739_post_spdif()
3055 static int patch_cm9739(struct snd_ac97 * ac97) in patch_cm9739() argument
3059 ac97->build_ops = &patch_cm9739_ops; in patch_cm9739()
3062 ac97->flags |= AC97_HAS_NO_MASTER_VOL | AC97_HAS_NO_PCM_VOL; in patch_cm9739()
3063 snd_ac97_write_cache(ac97, AC97_MASTER, 0x8000); in patch_cm9739()
3064 snd_ac97_write_cache(ac97, AC97_PCM, 0x8000); in patch_cm9739()
3067 val = snd_ac97_read(ac97, AC97_EXTENDED_STATUS); in patch_cm9739()
3070 snd_ac97_write_cache(ac97, AC97_CM9739_SPDIF_CTRL, in patch_cm9739()
3071 snd_ac97_read(ac97, AC97_CM9739_SPDIF_CTRL) | 0x01); in patch_cm9739()
3072 ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; /* 48k only */ in patch_cm9739()
3074 ac97->ext_id &= ~AC97_EI_SPDIF; /* disable extended-id */ in patch_cm9739()
3075 ac97->rates[AC97_RATES_SPDIF] = 0; in patch_cm9739()
3087 val = snd_ac97_read(ac97, AC97_CM9739_MULTI_CHAN) & (1 << 4); in patch_cm9739()
3090 if (! (ac97->ext_id & AC97_EI_SPDIF)) in patch_cm9739()
3092 snd_ac97_write_cache(ac97, AC97_CM9739_MULTI_CHAN, val); in patch_cm9739()
3095 snd_ac97_write_cache(ac97, 0x70, 0x0100); in patch_cm9739()
3096 snd_ac97_write_cache(ac97, 0x72, 0x0020); in patch_cm9739()
3098 if (ac97->pci && in patch_cm9739()
3099 ac97->subsystem_vendor == 0x1043 && in patch_cm9739()
3100 ac97->subsystem_device == 0x1843) { in patch_cm9739()
3101 snd_ac97_write_cache(ac97, AC97_CM9739_SPDIF_CTRL, in patch_cm9739()
3102 snd_ac97_read(ac97, AC97_CM9739_SPDIF_CTRL) & ~0x01); in patch_cm9739()
3103 snd_ac97_write_cache(ac97, AC97_CM9739_MULTI_CHAN, in patch_cm9739()
3104 snd_ac97_read(ac97, AC97_CM9739_MULTI_CHAN) | (1 << 14)); in patch_cm9739()
3114 static void cm9761_update_jacks(struct snd_ac97 *ac97) in cm9761_update_jacks() argument
3141 val |= surr_on[ac97->spec.dev_flags][is_surround_on(ac97)]; in cm9761_update_jacks()
3142 val |= clfe_on[ac97->spec.dev_flags][is_clfe_on(ac97)]; in cm9761_update_jacks()
3143 val |= surr_shared[ac97->spec.dev_flags][is_shared_surrout(ac97)]; in cm9761_update_jacks()
3144 val |= clfe_shared[ac97->spec.dev_flags][is_shared_clfeout(ac97)]; in cm9761_update_jacks()
3146 snd_ac97_update_bits(ac97, AC97_CM9761_MULTI_CHAN, 0x3c88, val); in cm9761_update_jacks()
3163 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in cm9761_spdif_out_source_get() local
3165 if (ac97->regs[AC97_CM9761_FUNC] & 0x1) in cm9761_spdif_out_source_get()
3167 else if (ac97->regs[AC97_CM9761_SPDIF_CTRL] & 0x2) in cm9761_spdif_out_source_get()
3176 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); in cm9761_spdif_out_source_put() local
3179 return snd_ac97_update_bits(ac97, AC97_CM9761_FUNC, 0x1, 0x1); in cm9761_spdif_out_source_put()
3180 snd_ac97_update_bits(ac97, AC97_CM9761_FUNC, 0x1, 0); in cm9761_spdif_out_source_put()
3181 return snd_ac97_update_bits(ac97, AC97_CM9761_SPDIF_CTRL, 0x2, in cm9761_spdif_out_source_put()
3209 static int patch_cm9761_post_spdif(struct snd_ac97 * ac97) in patch_cm9761_post_spdif() argument
3211 …return patch_build_controls(ac97, snd_ac97_cm9761_controls_spdif, ARRAY_SIZE(snd_ac97_cm9761_contr… in patch_cm9761_post_spdif()
3214 static int patch_cm9761_specific(struct snd_ac97 * ac97) in patch_cm9761_specific() argument
3216 return patch_build_controls(ac97, snd_ac97_cm9761_controls, ARRAY_SIZE(snd_ac97_cm9761_controls)); in patch_cm9761_specific()
3225 static int patch_cm9761(struct snd_ac97 *ac97) in patch_cm9761() argument
3233 ac97->flags |= /*AC97_HAS_NO_MASTER_VOL |*/ AC97_HAS_NO_PCM_VOL; in patch_cm9761()
3234 snd_ac97_write_cache(ac97, AC97_MASTER, 0x8808); in patch_cm9761()
3235 snd_ac97_write_cache(ac97, AC97_PCM, 0x8808); in patch_cm9761()
3237 ac97->spec.dev_flags = 0; /* 1 = model 82 revision B, 2 = model 83 */ in patch_cm9761()
3238 if (ac97->id == AC97_ID_CM9761_82) { in patch_cm9761()
3241 val = snd_ac97_read(ac97, AC97_INT_PAGING); in patch_cm9761()
3242 snd_ac97_write_cache(ac97, AC97_INT_PAGING, (val & ~0x0f) | 0x01); in patch_cm9761()
3243 tmp = snd_ac97_read(ac97, 0x60); in patch_cm9761()
3244 ac97->spec.dev_flags = tmp & 1; /* revision B? */ in patch_cm9761()
3245 snd_ac97_write_cache(ac97, AC97_INT_PAGING, val); in patch_cm9761()
3246 } else if (ac97->id == AC97_ID_CM9761_83) in patch_cm9761()
3247 ac97->spec.dev_flags = 2; in patch_cm9761()
3249 ac97->build_ops = &patch_cm9761_ops; in patch_cm9761()
3253 ac97->ext_id |= AC97_EI_SPDIF; in patch_cm9761()
3255 snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, 0x05c0); in patch_cm9761()
3257 snd_ac97_write_cache(ac97, AC97_CM9761_SPDIF_CTRL, 0x0001); /* enable spdif-in */ in patch_cm9761()
3258 ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; /* 48k only */ in patch_cm9761()
3279 if (ac97->spec.dev_flags) in patch_cm9761()
3284 val = snd_ac97_read(ac97, AC97_CM9761_MULTI_CHAN); in patch_cm9761()
3286 snd_ac97_write_cache(ac97, AC97_CM9761_MULTI_CHAN, val); in patch_cm9761()
3289 snd_ac97_write_cache(ac97, 0x70, 0x0100); in patch_cm9761()
3290 snd_ac97_write_cache(ac97, 0x72, 0x0020); in patch_cm9761()
3312 static int patch_cm9780_specific(struct snd_ac97 *ac97) in patch_cm9780_specific() argument
3314 return patch_build_controls(ac97, cm9780_controls, ARRAY_SIZE(cm9780_controls)); in patch_cm9780_specific()
3322 static int patch_cm9780(struct snd_ac97 *ac97) in patch_cm9780() argument
3326 ac97->build_ops = &patch_cm9780_ops; in patch_cm9780()
3329 if (ac97->ext_id & AC97_EI_SPDIF) { in patch_cm9780()
3330 ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; /* 48k only */ in patch_cm9780()
3331 val = snd_ac97_read(ac97, AC97_CM9780_SPDIF); in patch_cm9780()
3333 snd_ac97_write_cache(ac97, AC97_CM9780_SPDIF, val); in patch_cm9780()
3346 static int patch_vt1613_specific(struct snd_ac97 *ac97) in patch_vt1613_specific() argument
3348 return patch_build_controls(ac97, &snd_ac97_controls_vt1613[0], in patch_vt1613_specific()
3356 static int patch_vt1613(struct snd_ac97 *ac97) in patch_vt1613() argument
3358 ac97->build_ops = &patch_vt1613_ops; in patch_vt1613()
3360 ac97->flags |= AC97_HAS_NO_VIDEO; in patch_vt1613()
3361 ac97->caps |= AC97_BC_HEADPHONE; in patch_vt1613()
3393 static struct snd_kcontrol *snd_ac97_find_mixer_ctl(struct snd_ac97 *ac97, in snd_ac97_find_mixer_ctl() argument
3400 return snd_ctl_find_id(ac97->bus->card, &id); in snd_ac97_find_mixer_ctl()
3404 static int snd_ac97_add_vmaster(struct snd_ac97 *ac97, char *name, in snd_ac97_add_vmaster() argument
3415 err = snd_ctl_add(ac97->bus->card, kctl); in snd_ac97_add_vmaster()
3422 sctl = snd_ac97_find_mixer_ctl(ac97, *s); in snd_ac97_add_vmaster()
3424 dev_dbg(ac97->bus->card->dev, in snd_ac97_add_vmaster()
3435 static int patch_vt1616_specific(struct snd_ac97 * ac97) in patch_vt1616_specific() argument
3440 if (snd_ac97_try_bit(ac97, 0x5a, 9)) in patch_vt1616_specific()
3441 if ((err = patch_build_controls(ac97, &snd_ac97_controls_vt1616[0], 1)) < 0) in patch_vt1616_specific()
3443 …if ((err = patch_build_controls(ac97, &snd_ac97_controls_vt1616[1], ARRAY_SIZE(snd_ac97_controls_v… in patch_vt1616_specific()
3447 kctl = snd_ac97_find_mixer_ctl(ac97, "Master Playback Volume"); in patch_vt1616_specific()
3451 snd_ac97_rename_vol_ctl(ac97, "Master Playback", "Front Playback"); in patch_vt1616_specific()
3453 err = snd_ac97_add_vmaster(ac97, "Master Playback Volume", in patch_vt1616_specific()
3458 err = snd_ac97_add_vmaster(ac97, "Master Playback Switch", in patch_vt1616_specific()
3470 static int patch_vt1616(struct snd_ac97 * ac97) in patch_vt1616() argument
3472 ac97->build_ops = &patch_vt1616_ops; in patch_vt1616()
3566 static int patch_vt1617a(struct snd_ac97 * ac97) in patch_vt1617a() argument
3574 err = patch_build_controls(ac97, &snd_ac97_controls_vt1617a[0], in patch_vt1617a()
3583 val = snd_ac97_read(ac97, 0x5c); in patch_vt1617a()
3585 snd_ac97_write_cache(ac97, 0x5c, 0x20); in patch_vt1617a()
3587 ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ in patch_vt1617a()
3588 ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000; in patch_vt1617a()
3589 ac97->build_ops = &patch_vt1616_ops; in patch_vt1617a()
3594 /* VIA VT1618 8 CHANNEL AC97 CODEC
3781 static int patch_vt1618(struct snd_ac97 *ac97) in patch_vt1618() argument
3783 return patch_build_controls(ac97, snd_ac97_controls_vt1618, in patch_vt1618()
3789 static void it2646_update_jacks(struct snd_ac97 *ac97) in it2646_update_jacks() argument
3792 snd_ac97_update_bits(ac97, 0x76, 1 << 9, in it2646_update_jacks()
3793 is_shared_surrout(ac97) ? (1<<9) : 0); in it2646_update_jacks()
3795 snd_ac97_update_bits(ac97, 0x76, 1 << 10, in it2646_update_jacks()
3796 is_shared_clfeout(ac97) ? (1<<10) : 0); in it2646_update_jacks()
3810 static int patch_it2646_specific(struct snd_ac97 * ac97) in patch_it2646_specific() argument
3813 …if ((err = patch_build_controls(ac97, snd_ac97_controls_it2646, ARRAY_SIZE(snd_ac97_controls_it264… in patch_it2646_specific()
3815 …if ((err = patch_build_controls(ac97, snd_ac97_spdif_controls_it2646, ARRAY_SIZE(snd_ac97_spdif_co… in patch_it2646_specific()
3825 static int patch_it2646(struct snd_ac97 * ac97) in patch_it2646() argument
3827 ac97->build_ops = &patch_it2646_ops; in patch_it2646()
3829 snd_ac97_write_cache(ac97, 0x5E, 0x0808); in patch_it2646()
3830 snd_ac97_write_cache(ac97, 0x7A, 0x0808); in patch_it2646()
3845 static int patch_si3036_specific(struct snd_ac97 * ac97) in patch_si3036_specific() argument
3849 if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_si3036[idx], ac97))) < 0) in patch_si3036_specific()
3858 static int mpatch_si3036(struct snd_ac97 * ac97) in mpatch_si3036() argument
3860 ac97->build_ops = &patch_si3036_ops; in mpatch_si3036()
3861 snd_ac97_write_cache(ac97, 0x5c, 0xf210 ); in mpatch_si3036()
3862 snd_ac97_write_cache(ac97, 0x68, 0); in mpatch_si3036()
3890 static int patch_lm4550(struct snd_ac97 *ac97) in patch_lm4550() argument
3892 ac97->res_table = lm4550_restbl; in patch_lm4550()
3912 static int patch_ucb1400_specific(struct snd_ac97 * ac97) in patch_ucb1400_specific() argument
3916 if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_ucb1400[idx], ac97))) < 0) in patch_ucb1400_specific()
3925 static int patch_ucb1400(struct snd_ac97 * ac97) in patch_ucb1400() argument
3927 ac97->build_ops = &patch_ucb1400_ops; in patch_ucb1400()
3929 snd_ac97_write_cache(ac97, 0x6a, 0x0050); in patch_ucb1400()
3930 snd_ac97_write_cache(ac97, 0x6c, 0x0030); in patch_ucb1400()