diff options
author | Alastair Bridgewater <alastair.bridgewater@gmail.com> | 2018-06-15 21:56:20 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2018-06-17 02:45:46 -0400 |
commit | a57a46b93244a0a916b894d8b2ca2a6cfe1904d3 (patch) | |
tree | 00e35fa63c3b673130d108515d902e65217a3ba9 | |
parent | 5f8ddc6ee63a9057522923a6b2eb8c51993e1db0 (diff) |
ALSA: hda/ca0132: Fix DMic data rate for Alienware M17x R4
The commentary says to use various parameters, and lays out what
the mapping is... The code used a 32KHz rate when the comment
says that it needs to use a 48KHz rate. And this has been the
case since day one.
On the Alienware M17x R4, the DMic used to have exceptionally quiet
pickup and a lot of noise. Changing the data rate fixes both of
these issues.
Searching the kernel bug tracker for ca0132-related issues shows no
mention of this being an issue for other hardware, and I have no
other hardware to test with, so a quirk is used to limit the effect
to just the M17x R4.
Signed-off-by: Alastair Bridgewater <alastair.bridgewater@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/pci/hda/patch_ca0132.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index 09ff85c622bb..d62c56feaf7d 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c | |||
@@ -991,6 +991,7 @@ struct ca0132_spec { | |||
991 | enum { | 991 | enum { |
992 | QUIRK_NONE, | 992 | QUIRK_NONE, |
993 | QUIRK_ALIENWARE, | 993 | QUIRK_ALIENWARE, |
994 | QUIRK_ALIENWARE_M17XR4, | ||
994 | QUIRK_SBZ, | 995 | QUIRK_SBZ, |
995 | QUIRK_R3DI, | 996 | QUIRK_R3DI, |
996 | }; | 997 | }; |
@@ -1040,6 +1041,7 @@ static const struct hda_pintbl r3di_pincfgs[] = { | |||
1040 | }; | 1041 | }; |
1041 | 1042 | ||
1042 | static const struct snd_pci_quirk ca0132_quirks[] = { | 1043 | static const struct snd_pci_quirk ca0132_quirks[] = { |
1044 | SND_PCI_QUIRK(0x1028, 0x057b, "Alienware M17x R4", QUIRK_ALIENWARE_M17XR4), | ||
1043 | SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE), | 1045 | SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE), |
1044 | SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE), | 1046 | SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE), |
1045 | SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE), | 1047 | SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE), |
@@ -6130,7 +6132,10 @@ static void ca0132_init_dmic(struct hda_codec *codec) | |||
6130 | * Bit 6: set to select Data2, clear for Data1 | 6132 | * Bit 6: set to select Data2, clear for Data1 |
6131 | * Bit 7: set to enable DMic, clear for AMic | 6133 | * Bit 7: set to enable DMic, clear for AMic |
6132 | */ | 6134 | */ |
6133 | val = 0x23; | 6135 | if (spec->quirk == QUIRK_ALIENWARE_M17XR4) |
6136 | val = 0x33; | ||
6137 | else | ||
6138 | val = 0x23; | ||
6134 | /* keep a copy of dmic ctl val for enable/disable dmic purpuse */ | 6139 | /* keep a copy of dmic ctl val for enable/disable dmic purpuse */ |
6135 | spec->dmic_ctl = val; | 6140 | spec->dmic_ctl = val; |
6136 | snd_hda_codec_write(codec, spec->input_pins[0], 0, | 6141 | snd_hda_codec_write(codec, spec->input_pins[0], 0, |