linux/sound/pci
Takashi Iwai 6a6660d049 ALSA: hda/realtek - Improved routing for Thinkpad X1 7th/8th Gen
There've been quite a few regression reports about the lowered volume
(reduced to ca 65% from the previous level) on Lenovo Thinkpad X1
after the commit d2cd795c4e ("ALSA: hda - fixup for the bass speaker
on Lenovo Carbon X1 7th gen").  Although the commit itself does the
right thing from HD-audio POV in order to have a volume control for
bass speakers, it seems that the machine has some secret recipe under
the hood.

Through experiments, Benjamin Poirier found out that the following
routing gives the best result:
* DAC1 (NID 0x02) -> Speaker pin (NID 0x14)
* DAC2 (NID 0x03) -> Shared by both Bass Speaker pin (NID 0x17) &
                     Headphone pin (0x21)
* DAC3 (NID 0x06) -> Unused

DAC1 seems to have some equalizer internally applied, and you'd get
again the output in a bad quality if you connect this to the
headphone pin.  Hence the headphone is connected to DAC2, which is now
shared with the bass speaker pin.  DAC3 has no volume amp, hence it's
not connected at all.

For achieving the routing above, this patch introduced a couple of
workarounds:

* The connection list of bass speaker pin (NID 0x17) is reduced not to
  include DAC3 (NID 0x06)
* Pass preferred_pairs array to specify the fixed connection

Here, both workarounds are needed because the generic parser prefers
the individual DAC assignment over others.

When the routing above is applied, the generic parser creates the two
volume controls "Front" and "Bass Speaker".  Since we have only two
DACs for three output pins, those are not fully controlling each
output individually, and it would confuse PulseAudio.  For avoiding
the pitfall, in this patch, we rename those volume controls to some
unique ones ("DAC1" and "DAC2").  Then PulseAudio ignore them and
concentrate only on the still good-working "Master" volume control.
If a user still wants to control each DAC volume, they can still
change manually via "DAC1" and "DAC2" volume controls.

Fixes: d2cd795c4e ("ALSA: hda - fixup for the bass speaker on Lenovo Carbon X1 7th gen")
Reported-by: Benjamin Poirier <benjamin.poirier@gmail.com>
Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Tested-by: Benjamin Poirier <benjamin.poirier@gmail.com>
Cc: <stable@vger.kernel.org>
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207407#c10
BugLink: https://gist.github.com/hamidzr/dd81e429dc86f4327ded7a2030e7d7d9#gistcomment-3214171
BugLink: https://gist.github.com/hamidzr/dd81e429dc86f4327ded7a2030e7d7d9#gistcomment-3276276
Link: https://lore/kernel.org/r/20200829112746.3118-1-benjamin.poirier@gmail.com
Link: https://lore.kernel.org/r/20200903083300.6333-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2020-09-03 12:49:12 +02:00
..
ac97 ALSA: Replace the word "slave" in vmaster API 2020-07-20 10:10:47 +02:00
ali5451 ALSA: ali5451: remove redundant variable capture_flag 2020-02-10 08:29:54 +01:00
asihpi ALSA: pci/asihpi: convert tasklets to use new tasklet_setup() API 2020-09-02 13:25:06 +02:00
au88x0 ALSA: Replace with fallthrough pseudo keyword in the remaining places 2020-07-09 19:10:43 +02:00
aw2 ALSA: pci/aw2-saa7146: remove 'set but not used' warning 2020-07-07 12:05:14 +02:00
ca0106 ALSA: ca0106: fix error code handling 2020-08-25 09:27:49 +02:00
cs46xx ALSA: pci: delete repeated words in comments 2020-08-06 09:30:02 +02:00
cs5535audio ALSA: pci: Constify snd_kcontrol_new items 2020-01-03 09:24:28 +01:00
ctxfi ALSA: ctxfi: Replace the word blacklist 2020-07-15 14:31:54 +02:00
echoaudio ALSA: echoaudio: Fix potential Oops in snd_echo_resume() 2020-08-13 11:21:05 +02:00
emu10k1 ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
hda ALSA: hda/realtek - Improved routing for Thinkpad X1 7th/8th Gen 2020-09-03 12:49:12 +02:00
ice1712 ALSA: pci: delete repeated words in comments 2020-08-06 09:30:02 +02:00
korg1212 ALSA: pci/korg1212: remove 'set but not used' warnings 2020-07-07 12:10:21 +02:00
lola ALSA: pci: Constify snd_device_ops definitions 2020-01-03 09:23:56 +01:00
lx6464es ALSA: lx6464es: More constifications 2020-01-05 16:15:07 +01:00
mixart ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
nm256 ALSA: nm256: Replace the words blacklist 2020-07-15 14:31:56 +02:00
oxygen ALSA: pci: delete repeated words in comments 2020-08-06 09:30:02 +02:00
pcxhr ALSA: pcxhr: More constifications 2020-01-05 16:14:47 +01:00
riptide ALSA: riptide: convert tasklets to use new tasklet_setup() API 2020-09-02 13:25:15 +02:00
rme9652 ALSA: hdsp: convert tasklets to use new tasklet_setup() API 2020-09-02 13:25:23 +02:00
trident ALSA: pci: Constify snd_ac97_bus_ops definitions 2020-01-03 09:24:13 +01:00
vx222 ALSA: vx: More constifications 2020-01-05 16:14:30 +01:00
ymfpci ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
ad1889.c ALSA: pci: Constify snd_ac97_bus_ops definitions 2020-01-03 09:24:13 +01:00
ad1889.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ak4531_codec.c ALSA: ak4531: More constification 2020-01-05 16:15:09 +01:00
als300.c ALSA: pci: Constify snd_ac97_bus_ops definitions 2020-01-03 09:24:13 +01:00
als4000.c ALSA: pci: Drop superfluous ioctl PCM ops 2019-12-11 07:25:31 +01:00
atiixp_modem.c ALSA: atiixp: More constifications 2020-01-05 16:14:54 +01:00
atiixp.c ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
azt3328.c ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
azt3328.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
bt87x.c ALSA: bt87x: Replace the words white/blacklist 2020-07-15 14:31:54 +02:00
cmipci.c ALSA: cmipci: More constifications 2020-01-05 16:14:55 +01:00
cs4281.c ALSA: cs4281: More constification 2020-01-05 16:15:10 +01:00
cs5530.c ALSA: pci: Constify snd_device_ops definitions 2020-01-03 09:23:56 +01:00
ens1370.c ALSA: ens137x: More constification 2020-01-05 16:15:11 +01:00
ens1371.c
es1938.c ALSA: pci/es1938: remove 'set but not used' warning 2020-07-07 12:11:59 +02:00
es1968.c ALSA: es1968: Replace the words white/blacklist 2020-07-15 14:31:55 +02:00
fm801.c ALSA: pci/fm801: fix kernel-doc 2020-07-07 12:12:21 +02:00
intel8x0.c ALSA: intel8x0: Replace the words white/blacklist 2020-07-15 14:31:56 +02:00
intel8x0m.c ALSA: intel8x0: More constifications 2020-01-05 16:14:31 +01:00
Kconfig sound: Fix Kconfig indentation 2019-10-07 03:53:03 +02:00
maestro3.c ALSA: pci: Constify snd_pci_quirk tables 2020-01-03 09:24:45 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rme32.c sound updates for 5.6-rc1 2020-01-28 16:26:57 -08:00
rme96.c sound updates for 5.6-rc1 2020-01-28 16:26:57 -08:00
sis7019.c sound updates for 5.6-rc1 2020-01-28 16:26:57 -08:00
sis7019.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 274 2019-06-05 17:30:30 +02:00
sonicvibes.c ALSA: pci: Constify snd_kcontrol_new items 2020-01-03 09:24:28 +01:00
via82xx_modem.c ALSA: pci/via82xx: remove 'set but not used' warnings 2020-07-07 12:12:38 +02:00
via82xx.c ALSA: via82xx: Replace the words whitelist 2020-07-15 14:31:57 +02:00