diff options
author | David Henningsson <david.henningsson@canonical.com> | 2013-10-07 04:39:59 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-10-07 04:49:37 -0400 |
commit | 338cae565c53755de9f87d6a801517940d2d56f7 (patch) | |
tree | fdefdd07d40e891d4335926ce6045ebb6397e6b9 /sound/pci | |
parent | a9d14bc0b188a822e42787d01e56c06fe9750162 (diff) |
ALSA: hda - Fix mono speakers and headset mic on Dell Vostro 5470
On this machine, DAC on node 0x03 seems to give mono output.
Also, it needs additional patches for headset mic support.
It supports CTIA style headsets only.
Alsa-info available at the bug link below.
Cc: stable@kernel.org (v3.10+)
BugLink: https://bugs.launchpad.net/bugs/1236228
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 0e303b99a47c..52c26d3a61d4 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -3496,6 +3496,15 @@ static void alc282_fixup_asus_tx300(struct hda_codec *codec, | |||
3496 | } | 3496 | } |
3497 | } | 3497 | } |
3498 | 3498 | ||
3499 | static void alc290_fixup_mono_speakers(struct hda_codec *codec, | ||
3500 | const struct hda_fixup *fix, int action) | ||
3501 | { | ||
3502 | if (action == HDA_FIXUP_ACT_PRE_PROBE) | ||
3503 | /* Remove DAC node 0x03, as it seems to be | ||
3504 | giving mono output */ | ||
3505 | snd_hda_override_wcaps(codec, 0x03, 0); | ||
3506 | } | ||
3507 | |||
3499 | enum { | 3508 | enum { |
3500 | ALC269_FIXUP_SONY_VAIO, | 3509 | ALC269_FIXUP_SONY_VAIO, |
3501 | ALC275_FIXUP_SONY_VAIO_GPIO2, | 3510 | ALC275_FIXUP_SONY_VAIO_GPIO2, |
@@ -3522,6 +3531,7 @@ enum { | |||
3522 | ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT, | 3531 | ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT, |
3523 | ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, | 3532 | ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, |
3524 | ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, | 3533 | ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, |
3534 | ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, | ||
3525 | ALC269_FIXUP_HEADSET_MODE, | 3535 | ALC269_FIXUP_HEADSET_MODE, |
3526 | ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, | 3536 | ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, |
3527 | ALC269_FIXUP_ASUS_X101_FUNC, | 3537 | ALC269_FIXUP_ASUS_X101_FUNC, |
@@ -3535,6 +3545,7 @@ enum { | |||
3535 | ALC283_FIXUP_CHROME_BOOK, | 3545 | ALC283_FIXUP_CHROME_BOOK, |
3536 | ALC282_FIXUP_ASUS_TX300, | 3546 | ALC282_FIXUP_ASUS_TX300, |
3537 | ALC283_FIXUP_INT_MIC, | 3547 | ALC283_FIXUP_INT_MIC, |
3548 | ALC290_FIXUP_MONO_SPEAKERS, | ||
3538 | }; | 3549 | }; |
3539 | 3550 | ||
3540 | static const struct hda_fixup alc269_fixups[] = { | 3551 | static const struct hda_fixup alc269_fixups[] = { |
@@ -3712,6 +3723,15 @@ static const struct hda_fixup alc269_fixups[] = { | |||
3712 | .chained = true, | 3723 | .chained = true, |
3713 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC | 3724 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC |
3714 | }, | 3725 | }, |
3726 | [ALC269_FIXUP_DELL3_MIC_NO_PRESENCE] = { | ||
3727 | .type = HDA_FIXUP_PINS, | ||
3728 | .v.pins = (const struct hda_pintbl[]) { | ||
3729 | { 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */ | ||
3730 | { } | ||
3731 | }, | ||
3732 | .chained = true, | ||
3733 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC | ||
3734 | }, | ||
3715 | [ALC269_FIXUP_HEADSET_MODE] = { | 3735 | [ALC269_FIXUP_HEADSET_MODE] = { |
3716 | .type = HDA_FIXUP_FUNC, | 3736 | .type = HDA_FIXUP_FUNC, |
3717 | .v.func = alc_fixup_headset_mode, | 3737 | .v.func = alc_fixup_headset_mode, |
@@ -3804,6 +3824,12 @@ static const struct hda_fixup alc269_fixups[] = { | |||
3804 | .chained = true, | 3824 | .chained = true, |
3805 | .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST | 3825 | .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST |
3806 | }, | 3826 | }, |
3827 | [ALC290_FIXUP_MONO_SPEAKERS] = { | ||
3828 | .type = HDA_FIXUP_FUNC, | ||
3829 | .v.func = alc290_fixup_mono_speakers, | ||
3830 | .chained = true, | ||
3831 | .chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, | ||
3832 | }, | ||
3807 | }; | 3833 | }; |
3808 | 3834 | ||
3809 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { | 3835 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { |
@@ -3845,6 +3871,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
3845 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3871 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3846 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3872 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3847 | SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3873 | SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3874 | SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS), | ||
3848 | SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3875 | SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
3849 | SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3876 | SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
3850 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), | 3877 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |