aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2014-03-18 04:56:07 -0400
committerTakashi Iwai <tiwai@suse.de>2014-03-18 04:56:07 -0400
commit67b2fb48cbd593ebb2796eb0c918abc17b88c1b5 (patch)
tree2e142d8d532e40948d46c6dc10c8d271044eb01c /sound/pci
parent376f94c33989a1ea5be4b9e03666582e7052a331 (diff)
parentcb149cb3a7178ad653e4a1e1deb5100b96a10b2c (diff)
Merge branch 'topic/alc28x' into for-next
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/patch_realtek.c77
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
2790static 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
2790static void alc282_init(struct hda_codec *codec) 2865static 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);