Re: [PATCH v2] pwm: imx-tpm: keep channel state instead of counting
From: Viorel Suman (OSS) <hidden>
Date: 2026-03-11 10:25:31
Also in:
imx, linux-pwm, lkml
Hello, On 26-03-05 10:29:21, Uwe Kleine-König wrote:
quoted hunk ↗ jump to hunk
Hello, On Mon, Feb 02, 2026 at 12:47:38PM +0200, Viorel Suman (OSS) wrote:quoted
On a soft reset TPM PWM IP may preserve its internal state from previous runtime, therefore on a subsequent OS boot and driver probe "enable_count" value and TPM PWM IP internal channels "enabled" states may get unaligned. In consequence on a suspend/resume cycle the call "if (--tpm->enable_count == 0)" may lead to "enable_count" overflow the system being blocked from entering suspend due to: if (tpm->enable_count > 0) return -EBUSY; Fix the problem by replacing counting logic with per-channel state handling and by aligning IP and driver state at probe. Signed-off-by: Viorel Suman (OSS) <redacted>I wonder if the following change would be enough:diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c index 5b399de16d60..36f873133f94 100644 --- a/drivers/pwm/pwm-imx-tpm.c +++ b/drivers/pwm/pwm-imx-tpm.c@@ -352,7 +352,7 @@ static int pwm_imx_tpm_probe(struct platform_device *pdev) struct clk *clk; void __iomem *base; int ret; - unsigned int npwm; + unsigned int i, npwm; u32 val; base = devm_platform_ioremap_resource(pdev, 0);@@ -382,6 +382,12 @@ static int pwm_imx_tpm_probe(struct platform_device *pdev) mutex_init(&tpm->lock); + for (i = 0; i < npwm; ++i) { + val = readl(base + PWM_IMX_TPM_CnSC(i)); + if (FIELD_GET(PWM_IMX_TPM_CnSC_ELS, val)) + ++tpm->enable_count; + } +
Yes, the change above would be enough, will send v3. Regards, Viorel