mmc: sdhci-esdhc-imx: Fixup ->remove()
authorUlf Hansson <ulf.hansson@linaro.org>
Thu, 11 Dec 2014 13:56:15 +0000 (14:56 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 19 Jan 2015 08:56:21 +0000 (09:56 +0100)
Since sdhci_remove_host() access the device, we need to make sure it's
runtime PM resumed.

To handle clock gating properly in remove, we first have to make sure
the clocks are ungated.

To fix both these issues, by invoking pm_runtime_get_sync() early in
->remove() callback. Later once we disabled runtime PM, we can restore
the usage count.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-esdhc-imx.c

index af1f7c0f95450e94a923146f4d53240b7ba3e821..043866cdd73cb484f9b96e1ac617d88341a3a3c1 100644 (file)
@@ -1103,16 +1103,15 @@ static int sdhci_esdhc_imx_remove(struct platform_device *pdev)
        struct pltfm_imx_data *imx_data = pltfm_host->priv;
        int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
 
-       sdhci_remove_host(host, dead);
-
-       pm_runtime_dont_use_autosuspend(&pdev->dev);
+       pm_runtime_get_sync(&pdev->dev);
        pm_runtime_disable(&pdev->dev);
+       pm_runtime_put_noidle(&pdev->dev);
 
-       if (!IS_ENABLED(CONFIG_PM)) {
-               clk_disable_unprepare(imx_data->clk_per);
-               clk_disable_unprepare(imx_data->clk_ipg);
-               clk_disable_unprepare(imx_data->clk_ahb);
-       }
+       sdhci_remove_host(host, dead);
+
+       clk_disable_unprepare(imx_data->clk_per);
+       clk_disable_unprepare(imx_data->clk_ipg);
+       clk_disable_unprepare(imx_data->clk_ahb);
 
        sdhci_pltfm_free(pdev);