[PATCH v2] bus: ti-pwmss: unwind child devices and runtime PM

Pengpeng Hou pengpeng at iscas.ac.cn
Fri Aug 14 00:52:04 PDT 2026


pwmss_probe() enables runtime PM before populating child devices. If
population partially succeeds and then fails, probe leaves both the
children and runtime PM state behind. The remove path likewise lacks
the matching child depopulation.

Depopulate partial children and disable runtime PM on probe failure.
Depopulate children before disabling runtime PM during removal.

Fixes: af0ba001d208 ("pwm: Add TI PWM subsystem driver")
Assisted-by: Codex:gpt-5
Signed-off-by: Pengpeng Hou <pengpeng at iscas.ac.cn>
---
Changes since v1: https://lore.kernel.org/all/20260616151946.53001-1-pengpeng@iscas.ac.cn/
- route the orphaned driver change to OMAP maintainers and lists
- depopulate partially created children on probe failure
- depopulate children before runtime-PM teardown on remove

The child/runtime-PM unwind order was reviewed statically; no AM33xx
bind/unbind test was performed.

 drivers/bus/ti-pwmss.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/bus/ti-pwmss.c b/drivers/bus/ti-pwmss.c
index 1f2cab91e438..0c92968b8d25 100644
--- a/drivers/bus/ti-pwmss.c
+++ b/drivers/bus/ti-pwmss.c
@@ -27,14 +27,18 @@ static int pwmss_probe(struct platform_device *pdev)
 
 	/* Populate all the child nodes here... */
 	ret = of_platform_populate(node, NULL, NULL, &pdev->dev);
-	if (ret)
+	if (ret) {
 		dev_err(&pdev->dev, "no child node found\n");
+		of_platform_depopulate(&pdev->dev);
+		pm_runtime_disable(&pdev->dev);
+	}
 
 	return ret;
 }
 
 static void pwmss_remove(struct platform_device *pdev)
 {
+	of_platform_depopulate(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
 }
 
-- 
2.50.1 (Apple Git-155)




More information about the linux-arm-kernel mailing list