Skip to content

Commit 848bd3f

Browse files
bebarinoWolfram Sang
authored andcommitted
i2c: qcom-geni: Fix runtime PM mismatch with child devices
We need to enable runtime PM on this i2c controller before populating child devices with i2c_add_adapter(). Otherwise, if a child device uses runtime PM and stays runtime PM enabled we'll get the following warning at boot. Enabling runtime PM for inactive device (a98000.i2c) with active children [...] Call trace: pm_runtime_enable+0xd8/0xf8 geni_i2c_probe+0x440/0x460 platform_drv_probe+0x74/0xc8 [...] Let's move the runtime PM enabling and setup to before we add the adapter, so that this device can respond to runtime PM requests from children. Fixes: 37692de ("i2c: i2c-qcom-geni: Add bus driver for the Qualcomm GENI I2C controller") Signed-off-by: Stephen Boyd <swboyd@chromium.org> Reviewed-by: Douglas Anderson <dianders@chromium.org> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
1 parent 350784e commit 848bd3f

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

drivers/i2c/busses/i2c-qcom-geni.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -571,27 +571,28 @@ static int geni_i2c_probe(struct platform_device *pdev)
571571

572572
dev_dbg(&pdev->dev, "i2c fifo/se-dma mode. fifo depth:%d\n", tx_depth);
573573

574-
ret = i2c_add_adapter(&gi2c->adap);
575-
if (ret) {
576-
dev_err(&pdev->dev, "Error adding i2c adapter %d\n", ret);
577-
return ret;
578-
}
579-
580574
gi2c->suspended = 1;
581575
pm_runtime_set_suspended(gi2c->se.dev);
582576
pm_runtime_set_autosuspend_delay(gi2c->se.dev, I2C_AUTO_SUSPEND_DELAY);
583577
pm_runtime_use_autosuspend(gi2c->se.dev);
584578
pm_runtime_enable(gi2c->se.dev);
585579

580+
ret = i2c_add_adapter(&gi2c->adap);
581+
if (ret) {
582+
dev_err(&pdev->dev, "Error adding i2c adapter %d\n", ret);
583+
pm_runtime_disable(gi2c->se.dev);
584+
return ret;
585+
}
586+
586587
return 0;
587588
}
588589

589590
static int geni_i2c_remove(struct platform_device *pdev)
590591
{
591592
struct geni_i2c_dev *gi2c = platform_get_drvdata(pdev);
592593

593-
pm_runtime_disable(gi2c->se.dev);
594594
i2c_del_adapter(&gi2c->adap);
595+
pm_runtime_disable(gi2c->se.dev);
595596
return 0;
596597
}
597598

0 commit comments

Comments
 (0)