diff options
author | Takashi Iwai <tiwai@suse.de> | 2014-03-18 04:56:07 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2014-03-18 04:56:07 -0400 |
commit | 67b2fb48cbd593ebb2796eb0c918abc17b88c1b5 (patch) | |
tree | 2e142d8d532e40948d46c6dc10c8d271044eb01c /sound/pci | |
parent | 376f94c33989a1ea5be4b9e03666582e7052a331 (diff) | |
parent | cb149cb3a7178ad653e4a1e1deb5100b96a10b2c (diff) |
Merge branch 'topic/alc28x' into for-next
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 9dffed37953c..b0e25e5c8402 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -2787,6 +2787,81 @@ static void alc269_shutup(struct hda_codec *codec) | |||
2787 | snd_hda_shutup_pins(codec); | 2787 | snd_hda_shutup_pins(codec); |
2788 | } | 2788 | } |
2789 | 2789 | ||
2790 | static void alc282_restore_default_value(struct hda_codec *codec) | ||
2791 | { | ||
2792 | int val; | ||
2793 | |||
2794 | /* Power Down Control */ | ||
2795 | alc_write_coef_idx(codec, 0x03, 0x0002); | ||
2796 | /* FIFO and filter clock */ | ||
2797 | alc_write_coef_idx(codec, 0x05, 0x0700); | ||
2798 | /* DMIC control */ | ||
2799 | alc_write_coef_idx(codec, 0x07, 0x0200); | ||
2800 | /* Analog clock */ | ||
2801 | val = alc_read_coef_idx(codec, 0x06); | ||
2802 | alc_write_coef_idx(codec, 0x06, (val & ~0x00f0) | 0x0); | ||
2803 | /* JD */ | ||
2804 | val = alc_read_coef_idx(codec, 0x08); | ||
2805 | alc_write_coef_idx(codec, 0x08, (val & ~0xfffc) | 0x0c2c); | ||
2806 | /* JD offset1 */ | ||
2807 | alc_write_coef_idx(codec, 0x0a, 0xcccc); | ||
2808 | /* JD offset2 */ | ||
2809 | alc_write_coef_idx(codec, 0x0b, 0xcccc); | ||
2810 | /* LDO1/2/3, DAC/ADC */ | ||
2811 | alc_write_coef_idx(codec, 0x0e, 0x6e00); | ||
2812 | /* JD */ | ||
2813 | val = alc_read_coef_idx(codec, 0x0f); | ||
2814 | alc_write_coef_idx(codec, 0x0f, (val & ~0xf800) | 0x1000); | ||
2815 | /* Capless */ | ||
2816 | val = alc_read_coef_idx(codec, 0x10); | ||
2817 | alc_write_coef_idx(codec, 0x10, (val & ~0xfc00) | 0x0c00); | ||
2818 | /* Class D test 4 */ | ||
2819 | alc_write_coef_idx(codec, 0x6f, 0x0); | ||
2820 | /* IO power down directly */ | ||
2821 | val = alc_read_coef_idx(codec, 0x0c); | ||
2822 | alc_write_coef_idx(codec, 0x0c, (val & ~0xfe00) | 0x0); | ||
2823 | /* ANC */ | ||
2824 | alc_write_coef_idx(codec, 0x34, 0xa0c0); | ||
2825 | /* AGC MUX */ | ||
2826 | val = alc_read_coef_idx(codec, 0x16); | ||
2827 | alc_write_coef_idx(codec, 0x16, (val & ~0x0008) | 0x0); | ||
2828 | /* DAC simple content protection */ | ||
2829 | val = alc_read_coef_idx(codec, 0x1d); | ||
2830 | alc_write_coef_idx(codec, 0x1d, (val & ~0x00e0) | 0x0); | ||
2831 | /* ADC simple content protection */ | ||
2832 | val = alc_read_coef_idx(codec, 0x1f); | ||
2833 | alc_write_coef_idx(codec, 0x1f, (val & ~0x00e0) | 0x0); | ||
2834 | /* DAC ADC Zero Detection */ | ||
2835 | alc_write_coef_idx(codec, 0x21, 0x8804); | ||
2836 | /* PLL */ | ||
2837 | alc_write_coef_idx(codec, 0x63, 0x2902); | ||
2838 | /* capless control 2 */ | ||
2839 | alc_write_coef_idx(codec, 0x68, 0xa080); | ||
2840 | /* capless control 3 */ | ||
2841 | alc_write_coef_idx(codec, 0x69, 0x3400); | ||
2842 | /* capless control 4 */ | ||
2843 | alc_write_coef_idx(codec, 0x6a, 0x2f3e); | ||
2844 | /* capless control 5 */ | ||
2845 | alc_write_coef_idx(codec, 0x6b, 0x0); | ||
2846 | /* class D test 2 */ | ||
2847 | val = alc_read_coef_idx(codec, 0x6d); | ||
2848 | alc_write_coef_idx(codec, 0x6d, (val & ~0x0fff) | 0x0900); | ||
2849 | /* class D test 3 */ | ||
2850 | alc_write_coef_idx(codec, 0x6e, 0x110a); | ||
2851 | /* class D test 5 */ | ||
2852 | val = alc_read_coef_idx(codec, 0x70); | ||
2853 | alc_write_coef_idx(codec, 0x70, (val & ~0x00f8) | 0x00d8); | ||
2854 | /* class D test 6 */ | ||
2855 | alc_write_coef_idx(codec, 0x71, 0x0014); | ||
2856 | /* classD OCP */ | ||
2857 | alc_write_coef_idx(codec, 0x72, 0xc2ba); | ||
2858 | /* classD pure DC test */ | ||
2859 | val = alc_read_coef_idx(codec, 0x77); | ||
2860 | alc_write_coef_idx(codec, 0x77, (val & ~0x0f80) | 0x0); | ||
2861 | /* Class D amp control */ | ||
2862 | alc_write_coef_idx(codec, 0x6c, 0xfc06); | ||
2863 | } | ||
2864 | |||
2790 | static void alc282_init(struct hda_codec *codec) | 2865 | static void alc282_init(struct hda_codec *codec) |
2791 | { | 2866 | { |
2792 | struct alc_spec *spec = codec->spec; | 2867 | struct alc_spec *spec = codec->spec; |
@@ -2794,6 +2869,8 @@ static void alc282_init(struct hda_codec *codec) | |||
2794 | bool hp_pin_sense; | 2869 | bool hp_pin_sense; |
2795 | int coef78; | 2870 | int coef78; |
2796 | 2871 | ||
2872 | alc282_restore_default_value(codec); | ||
2873 | |||
2797 | if (!hp_pin) | 2874 | if (!hp_pin) |
2798 | return; | 2875 | return; |
2799 | hp_pin_sense = snd_hda_jack_detect(codec, hp_pin); | 2876 | hp_pin_sense = snd_hda_jack_detect(codec, hp_pin); |