[ adding Cirrus people to Cc ]
On Tue, 03 Jan 2023 21:39:42 +0100, waldek andrukiewicz wrote:
Hello,
I am running Manjaro, after upgrading from kernel 6.0.15 to 6.1.1 ( https://gitlab.manjaro.org/packages/core/linux61) I have noticed that suspend stopped working, what I can see in the logs is the following issue which IMO points to cs35l41
Machine: Type: Laptop System: LENOVO product: 82N6 v: Legion 7 16ACHg6
journalctl output below:
Jan 02 21:52:54 legion16 systemd[1]: Starting System Suspend... Jan 02 21:52:54 legion16 wpa_supplicant[1193]: wlp4s0: CTRL-EVENT-DSCP-POLICY clear_all Jan 02 21:52:54 legion16 systemd-sleep[2912]: Entering sleep state 'suspend'... Jan 02 21:52:54 legion16 kernel: PM: suspend entry (deep) Jan 02 21:52:54 legion16 kernel: Filesystems sync: 0.008 seconds Jan 02 21:52:54 legion16 wpa_supplicant[1193]: wlp4s0: CTRL-EVENT-DSCP-POLICY clear_all Jan 02 21:52:54 legion16 wpa_supplicant[1193]: nl80211: deinit ifname=wlp4s0 disabled_11b_rates=0 Jan 02 21:52:54 legion16 plasmashell[1770]: qml: [DEBUG] - onNewData Jan 02 21:52:54 legion16 kernel: Freezing user space processes ... (elapsed 0.002 seconds) done. Jan 02 21:52:54 legion16 kernel: OOM killer disabled. Jan 02 21:52:54 legion16 kernel: Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. Jan 02 21:52:54 legion16 kernel: printk: Suspending console(s) (use no_console_suspend to debug) Jan 02 21:52:54 legion16 kernel: cs35l41-hda i2c-CLSA0100:00-cs35l41-hda.1: System Suspend not supported Jan 02 21:52:54 legion16 kernel: cs35l41-hda i2c-CLSA0100:00-cs35l41-hda.0: System Suspend not supported Jan 02 21:52:54 legion16 kernel: cs35l41-hda i2c-CLSA0100:00-cs35l41-hda.1: PM: dpm_run_callback(): cs35l41_system_suspend+0x0/0xd0 [snd_hda_scodec_cs35l41] returns -22
Indeed the suspend isn't supported for this chip wrt the specific model/config, but it's a bad behavior to block the whole system suspend due to that.
Could you try the patch below?
Takashi
-- 8< -- diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 91842c0c8c74..6322157c7ea2 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -598,8 +598,8 @@ static int cs35l41_system_suspend(struct device *dev) dev_dbg(cs35l41->dev, "System Suspend\n");
if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST_NO_VSPK_SWITCH) { - dev_err(cs35l41->dev, "System Suspend not supported\n"); - return -EINVAL; + dev_err_once(cs35l41->dev, "System Suspend not supported\n"); + return 0; /* don't block the whole system suspend */ }
ret = pm_runtime_force_suspend(dev); @@ -624,8 +624,8 @@ static int cs35l41_system_resume(struct device *dev) dev_dbg(cs35l41->dev, "System Resume\n");
if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST_NO_VSPK_SWITCH) { - dev_err(cs35l41->dev, "System Resume not supported\n"); - return -EINVAL; + dev_err_once(cs35l41->dev, "System Resume not supported\n"); + return 0; /* don't block the whole system resume */ }
if (cs35l41->reset_gpio) { @@ -647,6 +647,15 @@ static int cs35l41_system_resume(struct device *dev) return ret; }
+static int cs35l41_runtime_idle(struct device *dev) +{ + struct cs35l41_hda *cs35l41 = dev_get_drvdata(dev); + + if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST_NO_VSPK_SWITCH) + return -EBUSY; /* suspend not supported yet on this model */ + return 0; +} + static int cs35l41_runtime_suspend(struct device *dev) { struct cs35l41_hda *cs35l41 = dev_get_drvdata(dev); @@ -1536,7 +1545,8 @@ void cs35l41_hda_remove(struct device *dev) EXPORT_SYMBOL_NS_GPL(cs35l41_hda_remove, SND_HDA_SCODEC_CS35L41);
const struct dev_pm_ops cs35l41_hda_pm_ops = { - RUNTIME_PM_OPS(cs35l41_runtime_suspend, cs35l41_runtime_resume, NULL) + RUNTIME_PM_OPS(cs35l41_runtime_suspend, cs35l41_runtime_resume, + cs35l41_runtime_idle) SYSTEM_SLEEP_PM_OPS(cs35l41_system_suspend, cs35l41_system_resume) }; EXPORT_SYMBOL_NS_GPL(cs35l41_hda_pm_ops, SND_HDA_SCODEC_CS35L41);
On 04.01.23 10:29, Takashi Iwai wrote:
[ adding Cirrus people to Cc ]
On Tue, 03 Jan 2023 21:39:42 +0100, waldek andrukiewicz wrote:
Hello,
I am running Manjaro, after upgrading from kernel 6.0.15 to 6.1.1 ( https://gitlab.manjaro.org/packages/core/linux61) I have noticed that suspend stopped working, what I can see in the logs is the following issue which IMO points to cs35l41
Machine: Type: Laptop System: LENOVO product: 82N6 v: Legion 7 16ACHg6
journalctl output below:
Jan 02 21:52:54 legion16 systemd[1]: Starting System Suspend... Jan 02 21:52:54 legion16 wpa_supplicant[1193]: wlp4s0: CTRL-EVENT-DSCP-POLICY clear_all Jan 02 21:52:54 legion16 systemd-sleep[2912]: Entering sleep state 'suspend'... Jan 02 21:52:54 legion16 kernel: PM: suspend entry (deep) Jan 02 21:52:54 legion16 kernel: Filesystems sync: 0.008 seconds Jan 02 21:52:54 legion16 wpa_supplicant[1193]: wlp4s0: CTRL-EVENT-DSCP-POLICY clear_all Jan 02 21:52:54 legion16 wpa_supplicant[1193]: nl80211: deinit ifname=wlp4s0 disabled_11b_rates=0 Jan 02 21:52:54 legion16 plasmashell[1770]: qml: [DEBUG] - onNewData Jan 02 21:52:54 legion16 kernel: Freezing user space processes ... (elapsed 0.002 seconds) done. Jan 02 21:52:54 legion16 kernel: OOM killer disabled. Jan 02 21:52:54 legion16 kernel: Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. Jan 02 21:52:54 legion16 kernel: printk: Suspending console(s) (use no_console_suspend to debug) Jan 02 21:52:54 legion16 kernel: cs35l41-hda i2c-CLSA0100:00-cs35l41-hda.1: System Suspend not supported Jan 02 21:52:54 legion16 kernel: cs35l41-hda i2c-CLSA0100:00-cs35l41-hda.0: System Suspend not supported Jan 02 21:52:54 legion16 kernel: cs35l41-hda i2c-CLSA0100:00-cs35l41-hda.1: PM: dpm_run_callback(): cs35l41_system_suspend+0x0/0xd0 [snd_hda_scodec_cs35l41] returns -22
Indeed the suspend isn't supported for this chip wrt the specific model/config, but it's a bad behavior to block the whole system suspend due to that.
Could you try the patch below?
Takashi
-- 8< -- diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 91842c0c8c74..6322157c7ea2 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -598,8 +598,8 @@ static int cs35l41_system_suspend(struct device *dev) dev_dbg(cs35l41->dev, "System Suspend\n");
if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST_NO_VSPK_SWITCH) {
dev_err(cs35l41->dev, "System Suspend not supported\n");
return -EINVAL;
dev_err_once(cs35l41->dev, "System Suspend not supported\n");
return 0; /* don't block the whole system suspend */
}
ret = pm_runtime_force_suspend(dev);
@@ -624,8 +624,8 @@ static int cs35l41_system_resume(struct device *dev) dev_dbg(cs35l41->dev, "System Resume\n");
if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST_NO_VSPK_SWITCH) {
dev_err(cs35l41->dev, "System Resume not supported\n");
return -EINVAL;
dev_err_once(cs35l41->dev, "System Resume not supported\n");
return 0; /* don't block the whole system resume */
}
if (cs35l41->reset_gpio) {
@@ -647,6 +647,15 @@ static int cs35l41_system_resume(struct device *dev) return ret; }
+static int cs35l41_runtime_idle(struct device *dev) +{
- struct cs35l41_hda *cs35l41 = dev_get_drvdata(dev);
- if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST_NO_VSPK_SWITCH)
return -EBUSY; /* suspend not supported yet on this model */
- return 0;
+}
- static int cs35l41_runtime_suspend(struct device *dev) { struct cs35l41_hda *cs35l41 = dev_get_drvdata(dev);
@@ -1536,7 +1545,8 @@ void cs35l41_hda_remove(struct device *dev) EXPORT_SYMBOL_NS_GPL(cs35l41_hda_remove, SND_HDA_SCODEC_CS35L41);
const struct dev_pm_ops cs35l41_hda_pm_ops = {
- RUNTIME_PM_OPS(cs35l41_runtime_suspend, cs35l41_runtime_resume, NULL)
- RUNTIME_PM_OPS(cs35l41_runtime_suspend, cs35l41_runtime_resume,
SYSTEM_SLEEP_PM_OPS(cs35l41_system_suspend, cs35l41_system_resume) }; EXPORT_SYMBOL_NS_GPL(cs35l41_hda_pm_ops, SND_HDA_SCODEC_CS35L41);cs35l41_runtime_idle)
Hi Takashi,
Thank you for your prompt reply, I decided to patch the Manjaro 6.1.3 kernel and in case the issue persisted, try the same with mainline but it helped. I can suspend/resume the laptop same as I could with pre 6.1 kernels.
If you are interested in any logs from my system let me know.
Best Regards,
Waldek Andrukiewicz
linux-stable-mirror@lists.linaro.org