aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_realtek.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r--sound/pci/hda/patch_realtek.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 3647baa9bfed..22c73b78ac6f 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -802,7 +802,7 @@ static int alc_automute_mode_info(struct snd_kcontrol *kcontrol,
802 "Disabled", "Enabled" 802 "Disabled", "Enabled"
803 }; 803 };
804 static const char * const texts3[] = { 804 static const char * const texts3[] = {
805 "Disabled", "Speaker Only", "Line-Out+Speaker" 805 "Disabled", "Speaker Only", "Line Out+Speaker"
806 }; 806 };
807 const char * const *texts; 807 const char * const *texts;
808 808
@@ -1856,7 +1856,7 @@ static const char * const alc_slave_vols[] = {
1856 "Headphone Playback Volume", 1856 "Headphone Playback Volume",
1857 "Speaker Playback Volume", 1857 "Speaker Playback Volume",
1858 "Mono Playback Volume", 1858 "Mono Playback Volume",
1859 "Line-Out Playback Volume", 1859 "Line Out Playback Volume",
1860 "CLFE Playback Volume", 1860 "CLFE Playback Volume",
1861 "Bass Speaker Playback Volume", 1861 "Bass Speaker Playback Volume",
1862 "PCM Playback Volume", 1862 "PCM Playback Volume",
@@ -1873,7 +1873,7 @@ static const char * const alc_slave_sws[] = {
1873 "Speaker Playback Switch", 1873 "Speaker Playback Switch",
1874 "Mono Playback Switch", 1874 "Mono Playback Switch",
1875 "IEC958 Playback Switch", 1875 "IEC958 Playback Switch",
1876 "Line-Out Playback Switch", 1876 "Line Out Playback Switch",
1877 "CLFE Playback Switch", 1877 "CLFE Playback Switch",
1878 "Bass Speaker Playback Switch", 1878 "Bass Speaker Playback Switch",
1879 "PCM Playback Switch", 1879 "PCM Playback Switch",
@@ -2068,12 +2068,16 @@ static int alc_build_controls(struct hda_codec *codec)
2068 */ 2068 */
2069 2069
2070static void alc_init_special_input_src(struct hda_codec *codec); 2070static void alc_init_special_input_src(struct hda_codec *codec);
2071static int alc269_fill_coef(struct hda_codec *codec);
2071 2072
2072static int alc_init(struct hda_codec *codec) 2073static int alc_init(struct hda_codec *codec)
2073{ 2074{
2074 struct alc_spec *spec = codec->spec; 2075 struct alc_spec *spec = codec->spec;
2075 unsigned int i; 2076 unsigned int i;
2076 2077
2078 if (codec->vendor_id == 0x10ec0269)
2079 alc269_fill_coef(codec);
2080
2077 alc_fix_pll(codec); 2081 alc_fix_pll(codec);
2078 alc_auto_init_amp(codec, spec->init_amp); 2082 alc_auto_init_amp(codec, spec->init_amp);
2079 2083
@@ -3797,7 +3801,7 @@ static void alc_auto_init_input_src(struct hda_codec *codec)
3797 else 3801 else
3798 nums = spec->num_adc_nids; 3802 nums = spec->num_adc_nids;
3799 for (c = 0; c < nums; c++) 3803 for (c = 0; c < nums; c++)
3800 alc_mux_select(codec, 0, spec->cur_mux[c], true); 3804 alc_mux_select(codec, c, spec->cur_mux[c], true);
3801} 3805}
3802 3806
3803/* add mic boosts if needed */ 3807/* add mic boosts if needed */
@@ -4367,6 +4371,7 @@ enum {
4367 ALC882_FIXUP_PB_M5210, 4371 ALC882_FIXUP_PB_M5210,
4368 ALC882_FIXUP_ACER_ASPIRE_7736, 4372 ALC882_FIXUP_ACER_ASPIRE_7736,
4369 ALC882_FIXUP_ASUS_W90V, 4373 ALC882_FIXUP_ASUS_W90V,
4374 ALC889_FIXUP_CD,
4370 ALC889_FIXUP_VAIO_TT, 4375 ALC889_FIXUP_VAIO_TT,
4371 ALC888_FIXUP_EEE1601, 4376 ALC888_FIXUP_EEE1601,
4372 ALC882_FIXUP_EAPD, 4377 ALC882_FIXUP_EAPD,
@@ -4494,6 +4499,13 @@ static const struct alc_fixup alc882_fixups[] = {
4494 { } 4499 { }
4495 } 4500 }
4496 }, 4501 },
4502 [ALC889_FIXUP_CD] = {
4503 .type = ALC_FIXUP_PINS,
4504 .v.pins = (const struct alc_pincfg[]) {
4505 { 0x1c, 0x993301f0 }, /* CD */
4506 { }
4507 }
4508 },
4497 [ALC889_FIXUP_VAIO_TT] = { 4509 [ALC889_FIXUP_VAIO_TT] = {
4498 .type = ALC_FIXUP_PINS, 4510 .type = ALC_FIXUP_PINS,
4499 .v.pins = (const struct alc_pincfg[]) { 4511 .v.pins = (const struct alc_pincfg[]) {
@@ -4650,6 +4662,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
4650 4662
4651 SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD), 4663 SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD),
4652 SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3), 4664 SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
4665 SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3", ALC889_FIXUP_CD),
4653 SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX), 4666 SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
4654 SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD), 4667 SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD),
4655 SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD), 4668 SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
@@ -5467,8 +5480,12 @@ static const struct alc_model_fixup alc269_fixup_models[] = {
5467 5480
5468static int alc269_fill_coef(struct hda_codec *codec) 5481static int alc269_fill_coef(struct hda_codec *codec)
5469{ 5482{
5483 struct alc_spec *spec = codec->spec;
5470 int val; 5484 int val;
5471 5485
5486 if (spec->codec_variant != ALC269_TYPE_ALC269VB)
5487 return 0;
5488
5472 if ((alc_get_coef0(codec) & 0x00ff) < 0x015) { 5489 if ((alc_get_coef0(codec) & 0x00ff) < 0x015) {
5473 alc_write_coef_idx(codec, 0xf, 0x960b); 5490 alc_write_coef_idx(codec, 0xf, 0x960b);
5474 alc_write_coef_idx(codec, 0xe, 0x8817); 5491 alc_write_coef_idx(codec, 0xe, 0x8817);