mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
ALSA: hda: Enhance pm_blacklist option
We want sometimes to keep the runtime PM disabled persistently just like we did for the PM deny-list in the previous change, e.g. for testing some buggy device. This patch enhances the existing pm_blacklist option for achieving it easily. The default behavior doesn't change -- the driver looks up the deny list and disables the runtime PM if matches. However, when pm_blacklist=1 option is set, now the driver disables the runtime PM completely, just like the deny-list does. Update the documentation for this option, too. Link: https://patch.msgid.link/20240729141519.18398-2-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
8abe0423dd
commit
3bb668264d
@ -1059,6 +1059,9 @@ power_save
|
|||||||
Automatic power-saving timeout (in second, 0 = disable)
|
Automatic power-saving timeout (in second, 0 = disable)
|
||||||
power_save_controller
|
power_save_controller
|
||||||
Reset HD-audio controller in power-saving mode (default = on)
|
Reset HD-audio controller in power-saving mode (default = on)
|
||||||
|
pm_blacklist
|
||||||
|
Enable / disable power-management deny-list (default = look up PM
|
||||||
|
deny-list, 0 = skip PM deny-list, 1 = force to turn off runtime PM)
|
||||||
align_buffer_size
|
align_buffer_size
|
||||||
Force rounding of buffer/period sizes to multiples of 128 bytes.
|
Force rounding of buffer/period sizes to multiples of 128 bytes.
|
||||||
This is more efficient in terms of memory access but isn't
|
This is more efficient in terms of memory access but isn't
|
||||||
|
@ -175,8 +175,8 @@ module_param(power_save, xint, 0644);
|
|||||||
MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
|
MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
|
||||||
"(in second, 0 = disable).");
|
"(in second, 0 = disable).");
|
||||||
|
|
||||||
static bool pm_blacklist = true;
|
static int pm_blacklist = -1;
|
||||||
module_param(pm_blacklist, bool, 0644);
|
module_param(pm_blacklist, bint, 0644);
|
||||||
MODULE_PARM_DESC(pm_blacklist, "Enable power-management denylist");
|
MODULE_PARM_DESC(pm_blacklist, "Enable power-management denylist");
|
||||||
|
|
||||||
/* reset the HD-audio controller in power save mode.
|
/* reset the HD-audio controller in power save mode.
|
||||||
@ -188,7 +188,7 @@ module_param(power_save_controller, bool, 0644);
|
|||||||
MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
|
MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
|
||||||
#else /* CONFIG_PM */
|
#else /* CONFIG_PM */
|
||||||
#define power_save 0
|
#define power_save 0
|
||||||
#define pm_blacklist false
|
#define pm_blacklist 0
|
||||||
#define power_save_controller false
|
#define power_save_controller false
|
||||||
#endif /* CONFIG_PM */
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
@ -930,6 +930,9 @@ static int __maybe_unused param_set_xint(const char *val, const struct kernel_pa
|
|||||||
if (ret || prev == power_save)
|
if (ret || prev == power_save)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
if (pm_blacklist > 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
mutex_lock(&card_list_lock);
|
mutex_lock(&card_list_lock);
|
||||||
list_for_each_entry(hda, &card_list, list) {
|
list_for_each_entry(hda, &card_list, list) {
|
||||||
chip = &hda->chip;
|
chip = &hda->chip;
|
||||||
@ -2247,7 +2250,7 @@ static void set_default_power_save(struct azx *chip)
|
|||||||
struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
|
struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
|
||||||
int val = power_save;
|
int val = power_save;
|
||||||
|
|
||||||
if (pm_blacklist) {
|
if (pm_blacklist < 0) {
|
||||||
const struct snd_pci_quirk *q;
|
const struct snd_pci_quirk *q;
|
||||||
|
|
||||||
q = snd_pci_quirk_lookup(chip->pci, power_save_denylist);
|
q = snd_pci_quirk_lookup(chip->pci, power_save_denylist);
|
||||||
@ -2257,6 +2260,9 @@ static void set_default_power_save(struct azx *chip)
|
|||||||
val = 0;
|
val = 0;
|
||||||
hda->runtime_pm_disabled = 1;
|
hda->runtime_pm_disabled = 1;
|
||||||
}
|
}
|
||||||
|
} else if (pm_blacklist > 0) {
|
||||||
|
dev_info(chip->card->dev, "Forcing power_save to 0 via option\n");
|
||||||
|
val = 0;
|
||||||
}
|
}
|
||||||
snd_hda_set_power_save(&chip->bus, val * 1000);
|
snd_hda_set_power_save(&chip->bus, val * 1000);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user