Re: i2c-CLSA0100:00-cs35l41-hda.1: System Suspend not supported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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,
> +		       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);


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






[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux