| From 86b59bbfae2a895aa26b3d15f31b1a705dbfede1 Mon Sep 17 00:00:00 2001 |
| From: Andy Gross <agross@codeaurora.org> |
| Date: Mon, 29 Sep 2014 17:00:51 -0500 |
| Subject: i2c: qup: Fix order of runtime pm initialization |
| |
| From: Andy Gross <agross@codeaurora.org> |
| |
| commit 86b59bbfae2a895aa26b3d15f31b1a705dbfede1 upstream. |
| |
| The runtime pm calls need to be done before populating the children via the |
| i2c_add_adapter call. If this is not done, a child can run into issues trying |
| to do i2c read/writes due to the pm_runtime_sync failing. |
| |
| Signed-off-by: Andy Gross <agross@codeaurora.org> |
| Reviewed-by: Felipe Balbi <balbi@ti.com> |
| Acked-by: Bjorn Andersson <bjorn.andersson@sonymobile.com> |
| Signed-off-by: Wolfram Sang <wsa@the-dreams.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/i2c/busses/i2c-qup.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/i2c/busses/i2c-qup.c |
| +++ b/drivers/i2c/busses/i2c-qup.c |
| @@ -670,16 +670,20 @@ static int qup_i2c_probe(struct platform |
| qup->adap.dev.of_node = pdev->dev.of_node; |
| strlcpy(qup->adap.name, "QUP I2C adapter", sizeof(qup->adap.name)); |
| |
| - ret = i2c_add_adapter(&qup->adap); |
| - if (ret) |
| - goto fail; |
| - |
| pm_runtime_set_autosuspend_delay(qup->dev, MSEC_PER_SEC); |
| pm_runtime_use_autosuspend(qup->dev); |
| pm_runtime_set_active(qup->dev); |
| pm_runtime_enable(qup->dev); |
| + |
| + ret = i2c_add_adapter(&qup->adap); |
| + if (ret) |
| + goto fail_runtime; |
| + |
| return 0; |
| |
| +fail_runtime: |
| + pm_runtime_disable(qup->dev); |
| + pm_runtime_set_suspended(qup->dev); |
| fail: |
| qup_i2c_disable_clocks(qup); |
| return ret; |