i2c: designware: Make sure the device is suspended before disabling runtime PM
authorMika Westerberg <mika.westerberg@linux.intel.com>
Wed, 17 Jun 2015 09:08:38 +0000 (12:08 +0300)
committerWolfram Sang <wsa@the-dreams.de>
Sun, 21 Jun 2015 19:30:35 +0000 (21:30 +0200)
The driver calls pm_runtime_put() right before pm_runtime_disable() in its
->remove() hook to make sure clock is gated etc. However, it turns out that
pm_runtime_put() only calls ->idle() hook without actually suspending
anything. The following pm_runtime_disable() will prevent the driver from
suspending thus leaving it "active".

It is better to suspend the device synchronously to make sure it is
actually suspended before disabling runtime PM from it.

While there, undo call to pm_runtime_use_autosuspend().

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-designware-platdrv.c

index 4794911a61654c3b90e1292c4197472a6df88baa..3dd2de31a2f8d380f71ff61c562a53d8638f9eb5 100644 (file)
@@ -281,7 +281,8 @@ static int dw_i2c_remove(struct platform_device *pdev)
 
        i2c_dw_disable(dev);
 
-       pm_runtime_put(&pdev->dev);
+       pm_runtime_dont_use_autosuspend(&pdev->dev);
+       pm_runtime_put_sync(&pdev->dev);
        pm_runtime_disable(&pdev->dev);
 
        if (has_acpi_companion(&pdev->dev))
This page took 0.027289 seconds and 5 git commands to generate.