aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda
diff options
context:
space:
mode:
authorDavid Henningsson <david.henningsson@canonical.com>2013-12-20 10:08:13 -0500
committerTakashi Iwai <tiwai@suse.de>2013-12-20 10:34:19 -0500
commit0f4881dc1fd858649589edae76efd9c318bb562f (patch)
treeee351a97965dbf30053b5d564d872c8fc69be790 /sound/pci/hda
parentd171ebc5b9d197c1ec76c4b21c91981649db4c65 (diff)
ALSA: hda - Enable subwoofer on Dell Vostro 5460/5470
In this case, there are two DACs, and DAC 0x03 is mono. In order to make headphones and front speaker use DAC 0x02, and subwoofer use DAC 0x03, we artificially cut the connection from nodes 0x14 and 0x15 to node 0x03, so they can only use DAC 0x02. In addition, the 5460 and 5470 differs in the sense that 5470 also needs a headset mic patch, whereas 5460 has individual detection for headphone and headset mic. BugLink: https://bugs.launchpad.net/bugs/1211920 Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda')
-rw-r--r--sound/pci/hda/patch_realtek.c43
1 files changed, 37 insertions, 6 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index ef43171c0bd0..a84e0493499d 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -3770,10 +3770,14 @@ static void alc282_fixup_asus_tx300(struct hda_codec *codec,
3770static void alc290_fixup_mono_speakers(struct hda_codec *codec, 3770static void alc290_fixup_mono_speakers(struct hda_codec *codec,
3771 const struct hda_fixup *fix, int action) 3771 const struct hda_fixup *fix, int action)
3772{ 3772{
3773 if (action == HDA_FIXUP_ACT_PRE_PROBE) 3773 if (action == HDA_FIXUP_ACT_PRE_PROBE) {
3774 /* Remove DAC node 0x03, as it seems to be 3774 /* DAC node 0x03 is giving mono output. We therefore want to
3775 giving mono output */ 3775 make sure 0x14 (front speaker) and 0x15 (headphones) use the
3776 snd_hda_override_wcaps(codec, 0x03, 0); 3776 stereo DAC, while leaving 0x17 (bass speaker) for node 0x03. */
3777 hda_nid_t conn1[2] = { 0x0c };
3778 snd_hda_override_conn_list(codec, 0x14, 1, conn1);
3779 snd_hda_override_conn_list(codec, 0x15, 1, conn1);
3780 }
3777} 3781}
3778 3782
3779#if IS_ENABLED(CONFIG_THINKPAD_ACPI) 3783#if IS_ENABLED(CONFIG_THINKPAD_ACPI)
@@ -3913,6 +3917,9 @@ enum {
3913 ALC282_FIXUP_ASUS_TX300, 3917 ALC282_FIXUP_ASUS_TX300,
3914 ALC283_FIXUP_INT_MIC, 3918 ALC283_FIXUP_INT_MIC,
3915 ALC290_FIXUP_MONO_SPEAKERS, 3919 ALC290_FIXUP_MONO_SPEAKERS,
3920 ALC290_FIXUP_MONO_SPEAKERS_HSJACK,
3921 ALC290_FIXUP_SUBWOOFER,
3922 ALC290_FIXUP_SUBWOOFER_HSJACK,
3916 ALC269_FIXUP_THINKPAD_ACPI, 3923 ALC269_FIXUP_THINKPAD_ACPI,
3917 ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, 3924 ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3918 ALC255_FIXUP_HEADSET_MODE, 3925 ALC255_FIXUP_HEADSET_MODE,
@@ -4235,9 +4242,31 @@ static const struct hda_fixup alc269_fixups[] = {
4235 .chained = true, 4242 .chained = true,
4236 .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST 4243 .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
4237 }, 4244 },
4245 [ALC290_FIXUP_SUBWOOFER_HSJACK] = {
4246 .type = HDA_FIXUP_PINS,
4247 .v.pins = (const struct hda_pintbl[]) {
4248 { 0x17, 0x90170112 }, /* subwoofer */
4249 { }
4250 },
4251 .chained = true,
4252 .chain_id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK,
4253 },
4254 [ALC290_FIXUP_SUBWOOFER] = {
4255 .type = HDA_FIXUP_PINS,
4256 .v.pins = (const struct hda_pintbl[]) {
4257 { 0x17, 0x90170112 }, /* subwoofer */
4258 { }
4259 },
4260 .chained = true,
4261 .chain_id = ALC290_FIXUP_MONO_SPEAKERS,
4262 },
4238 [ALC290_FIXUP_MONO_SPEAKERS] = { 4263 [ALC290_FIXUP_MONO_SPEAKERS] = {
4239 .type = HDA_FIXUP_FUNC, 4264 .type = HDA_FIXUP_FUNC,
4240 .v.func = alc290_fixup_mono_speakers, 4265 .v.func = alc290_fixup_mono_speakers,
4266 },
4267 [ALC290_FIXUP_MONO_SPEAKERS_HSJACK] = {
4268 .type = HDA_FIXUP_FUNC,
4269 .v.func = alc290_fixup_mono_speakers,
4241 .chained = true, 4270 .chained = true,
4242 .chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, 4271 .chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
4243 }, 4272 },
@@ -4282,6 +4311,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4282 SND_PCI_QUIRK(0x1028, 0x05cb, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4311 SND_PCI_QUIRK(0x1028, 0x05cb, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
4283 SND_PCI_QUIRK(0x1028, 0x05cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4312 SND_PCI_QUIRK(0x1028, 0x05cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
4284 SND_PCI_QUIRK(0x1028, 0x05cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4313 SND_PCI_QUIRK(0x1028, 0x05cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
4314 SND_PCI_QUIRK(0x1028, 0x05da, "Dell Vostro 5460", ALC290_FIXUP_SUBWOOFER),
4285 SND_PCI_QUIRK(0x1028, 0x05de, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4315 SND_PCI_QUIRK(0x1028, 0x05de, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
4286 SND_PCI_QUIRK(0x1028, 0x05e0, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4316 SND_PCI_QUIRK(0x1028, 0x05e0, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
4287 SND_PCI_QUIRK(0x1028, 0x05e9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 4317 SND_PCI_QUIRK(0x1028, 0x05e9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
@@ -4303,10 +4333,11 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4303 SND_PCI_QUIRK(0x1028, 0x0610, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 4333 SND_PCI_QUIRK(0x1028, 0x0610, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4304 SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 4334 SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4305 SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 4335 SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4306 SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS), 4336 SND_PCI_QUIRK(0x1028, 0x0615, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
4337 SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
4307 SND_PCI_QUIRK(0x1028, 0x061f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), 4338 SND_PCI_QUIRK(0x1028, 0x061f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4308 SND_PCI_QUIRK(0x1028, 0x0629, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 4339 SND_PCI_QUIRK(0x1028, 0x0629, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4309 SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS), 4340 SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
4310 SND_PCI_QUIRK(0x1028, 0x063e, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 4341 SND_PCI_QUIRK(0x1028, 0x063e, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4311 SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), 4342 SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4312 SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4343 SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),