diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-02-13 09:25:07 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-02-13 09:26:41 -0500 |
commit | 02a237b24d57e2e2d5402c92549e9e792aa24359 (patch) | |
tree | 9bc15baa30e6a746a4a24773d0a778786a116e87 /sound | |
parent | 805a6af8dba5dfdd35ec35dc52ec0122400b2610 (diff) |
ALSA: hda - Fix silent speaker output on Acer Aspire 6935
Since 3.2 kernel, the driver starts trying to assign the multi-io DACs
before the speaker, thus it assigns DAC2/3 for multi-io and DAC4 for
the speaker for a standard laptop setup like a HP, a speaker, a mic-in
and a line-in. However, on Acer Aspire 6935, it seems that the
speaker pin 0x14 must be connected with either DAC1 or 2; otherwise it
results in silence by some reason, although the codec itself allows
the routing to DAC3/4.
As a workaround, the connection list of each pin is reduced to be
mapped to either only DAC1/2 or DAC3/4, so that the compatible
assignment as in kernel 3.1 is achieved.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42740
Cc: <stable@kernel.org> [v3.2+]
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 1d07e8fa2433..c4bde7108328 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -4201,8 +4201,26 @@ enum { | |||
4201 | PINFIX_PB_M5210, | 4201 | PINFIX_PB_M5210, |
4202 | PINFIX_ACER_ASPIRE_7736, | 4202 | PINFIX_ACER_ASPIRE_7736, |
4203 | PINFIX_ASUS_W90V, | 4203 | PINFIX_ASUS_W90V, |
4204 | ALC889_FIXUP_DAC_ROUTE, | ||
4204 | }; | 4205 | }; |
4205 | 4206 | ||
4207 | /* Fix the connection of some pins for ALC889: | ||
4208 | * At least, Acer Aspire 5935 shows the connections to DAC3/4 don't | ||
4209 | * work correctly (bko#42740) | ||
4210 | */ | ||
4211 | static void alc889_fixup_dac_route(struct hda_codec *codec, | ||
4212 | const struct alc_fixup *fix, int action) | ||
4213 | { | ||
4214 | if (action == ALC_FIXUP_ACT_PRE_PROBE) { | ||
4215 | hda_nid_t conn1[2] = { 0x0c, 0x0d }; | ||
4216 | hda_nid_t conn2[2] = { 0x0e, 0x0f }; | ||
4217 | snd_hda_override_conn_list(codec, 0x14, 2, conn1); | ||
4218 | snd_hda_override_conn_list(codec, 0x15, 2, conn1); | ||
4219 | snd_hda_override_conn_list(codec, 0x18, 2, conn2); | ||
4220 | snd_hda_override_conn_list(codec, 0x1a, 2, conn2); | ||
4221 | } | ||
4222 | } | ||
4223 | |||
4206 | static const struct alc_fixup alc882_fixups[] = { | 4224 | static const struct alc_fixup alc882_fixups[] = { |
4207 | [PINFIX_ABIT_AW9D_MAX] = { | 4225 | [PINFIX_ABIT_AW9D_MAX] = { |
4208 | .type = ALC_FIXUP_PINS, | 4226 | .type = ALC_FIXUP_PINS, |
@@ -4239,10 +4257,15 @@ static const struct alc_fixup alc882_fixups[] = { | |||
4239 | { } | 4257 | { } |
4240 | } | 4258 | } |
4241 | }, | 4259 | }, |
4260 | [ALC889_FIXUP_DAC_ROUTE] = { | ||
4261 | .type = ALC_FIXUP_FUNC, | ||
4262 | .v.func = alc889_fixup_dac_route, | ||
4263 | }, | ||
4242 | }; | 4264 | }; |
4243 | 4265 | ||
4244 | static const struct snd_pci_quirk alc882_fixup_tbl[] = { | 4266 | static const struct snd_pci_quirk alc882_fixup_tbl[] = { |
4245 | SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", PINFIX_PB_M5210), | 4267 | SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", PINFIX_PB_M5210), |
4268 | SND_PCI_QUIRK(0x1025, 0x0259, "Acer Aspire 5935", ALC889_FIXUP_DAC_ROUTE), | ||
4246 | SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", PINFIX_ASUS_W90V), | 4269 | SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", PINFIX_ASUS_W90V), |
4247 | SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", PINFIX_LENOVO_Y530), | 4270 | SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", PINFIX_LENOVO_Y530), |
4248 | SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX), | 4271 | SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX), |