Patch "ALSA: hda: Add a power_save blacklist" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ALSA: hda: Add a power_save blacklist
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
alsa-hda-add-a-power_save-blacklist.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
1ba8f9d308174e647b864c36209b4d7934d99888Mon Sep 17 00:00:00 2001
From: Hans de Goede <[email protected]>
Date: Thu, 22 Feb 2018 14:20:35 +0100
Subject: ALSA: hda: Add a power_save blacklist
From: Hans de Goede <[email protected]>
commit 1ba8f9d308174e647b864c36209b4d7934d99888 upstream.
On some boards setting power_save to a non 0 value leads to clicking / popping sounds when ever we enter/leave powersaving mode. Ideally we would figure out how to avoid these sounds, but that is not always feasible.
This commit adds a blacklist for devices where powersaving is known to cause problems and disables it on these devices.
Note I tried to put this blacklist in userspace first:
https://github.com/systemd/systemd/pull/8128
But the systemd maintainers rightfully pointed out that it would be impossible to then later remove entries once we actually find a way to make power-saving work on listed boards without issues. Having this list in the kernel will allow removal of the blacklist entry in the same commit which fixes the clicks / plops.
The blacklist only applies to the default power_save module-option value, if a user explicitly sets the module-option then the blacklist is not used.
[ added an ifdef CONFIG_PM for the build error -- tiwai]
--- sound/pci/hda/hda_intel.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-)
sound/pci/hda/hda_intel.c +36 -2
@@ -181,7 +181,7 @@ static const struct kernel_param_ops par };#define param_check_xint param_check_int -static int power_save =CONFIG_SND_HDA_POWER_SAVE_DEFAULT ; +static int power_save =-1 ;module_param (power_save, xint,0644 );MODULE_PARM_DESC (power_save,"Automatic power-saving timeout " "(in second, 0 = disable)." );
@@ -2186,6 +2186,24 @@ out_free:return err; } +#ifdef CONFIG_PM +/* On some boards setting power_save to a non 0 value leads to clicking / +* popping sounds when ever we enter/leave powersaving mode. Ideally we would +* figure out how to avoid these sounds, but that is not always feasible. +* So we keep a list of devices where we disable powersaving as its known +* to causes problems on these devices. +*/ +static struct snd_pci_quirk power_save_blacklist[] = { +/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */ +SND_PCI_QUIRK (0x1849 ,0x0c0c ,"Asrock B85M-ITX" ,0 ), +/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */ +SND_PCI_QUIRK (0x1043 ,0x8733 ,"Asus Prime X370-Pro" ,0 ), +/* https://bugzilla.kernel.org/show_bug.cgi?id=198611 */ +SND_PCI_QUIRK (0x17aa ,0x2227 ,"Lenovo X1 Carbon 3rd Gen" ,0 ), + {} +}; +#endif /* CONFIG_PM */ +/* number of codec slots for each chipset: 0 = default slots (i.e. 4) */ static unsigned int azx_max_codecs[AZX_NUM_DRIVERS ] = { [AZX_DRIVER_NVIDIA ] =8 ,
@@ -2198,6 +2216,7 @@ static int azx_probe_continue(struct azxstruct hdac_bus *bus =azx_bus (chip);struct pci_dev *pci = chip->pci;int dev = chip->dev_index; +int val;int err; hda->probe_continued =1 ;
@@ -2278,7 +2297,22 @@ static int azx_probe_continue(struct azx chip->running =1 ;azx_add_card_list (chip); -snd_hda_set_power_save (&chip->bus, power_save *1000 ); + + val = power_save; +#ifdef CONFIG_PM +if (val ==-1 ) { +const struct snd_pci_quirk *q; + + val =CONFIG_SND_HDA_POWER_SAVE_DEFAULT ; + q =snd_pci_quirk_lookup (chip->pci, power_save_blacklist); +if (q && val) { +dev_info (chip->card->dev,"device %04x:%04x is on the power_save blacklist, forcing power_save to 0\n" , + q->subvendor, q->subdevice); + val =0 ; + } + } +#endif /* CONFIG_PM */ +snd_hda_set_power_save (&chip->bus, val *1000 );if (azx_has_pm_runtime (chip) || hda->use_vga_switcheroo)pm_runtime_put_autosuspend (&pci->dev);
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/alsa-hda-add-a-power_save-blacklist.patch queue-4.14/bluetooth-btusb-use-dmi-matching-for-qca-reset_resume-quirking.patch