Skip to content

Commit ca0aa17

Browse files
Uwe Kleine-Königwsakernel
authored andcommitted
i2c: sprd: Delete i2c adapter in .remove's error path
If pm runtime resume fails the .remove callback used to exit early. This resulted in an error message by the driver core but the device gets removed anyhow. This lets the registered i2c adapter stay around with an unbound parent device. So only skip clk disabling if resume failed, but do delete the adapter. Fixes: 8b9ec07 ("i2c: Add Spreadtrum I2C controller driver") Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Reviewed-by: Andi Shyti <andi.shyti@kernel.org> Signed-off-by: Wolfram Sang <wsa@kernel.org>
1 parent 5578d0a commit ca0aa17

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

drivers/i2c/busses/i2c-sprd.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -576,12 +576,14 @@ static int sprd_i2c_remove(struct platform_device *pdev)
576576
struct sprd_i2c *i2c_dev = platform_get_drvdata(pdev);
577577
int ret;
578578

579-
ret = pm_runtime_resume_and_get(i2c_dev->dev);
579+
ret = pm_runtime_get_sync(i2c_dev->dev);
580580
if (ret < 0)
581-
return ret;
581+
dev_err(&pdev->dev, "Failed to resume device (%pe)\n", ERR_PTR(ret));
582582

583583
i2c_del_adapter(&i2c_dev->adap);
584-
clk_disable_unprepare(i2c_dev->clk);
584+
585+
if (ret >= 0)
586+
clk_disable_unprepare(i2c_dev->clk);
585587

586588
pm_runtime_put_noidle(i2c_dev->dev);
587589
pm_runtime_disable(i2c_dev->dev);

0 commit comments

Comments
 (0)