From: Jisheng Zhang Date: Tue, 16 Feb 2016 13:08:23 +0000 (+0800) Subject: mmc: sdhci-of-arasan: fix clk issue in sdhci_arasan_remove() X-Git-Tag: v4.6-rc1~58^2~31 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=0c7fe32e847ff20d1ae04b4b9f3e32f8551b4a6a;p=linux.git mmc: sdhci-of-arasan: fix clk issue in sdhci_arasan_remove() sdhci_pltfm_unregister() could operate host's registers, it will cause problems if the clk is already disabled and unprepared. Fix this issue by moving the clk_disable_unprepare() call to the end of remove function. Signed-off-by: Jisheng Zhang Acked-by: Sören Brinkmann Acked-by: Adrian Hunter Signed-off-by: Ulf Hansson --- diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c index 5d9fdb353446..8b4f8f7ad060 100644 --- a/drivers/mmc/host/sdhci-of-arasan.c +++ b/drivers/mmc/host/sdhci-of-arasan.c @@ -201,13 +201,16 @@ static int sdhci_arasan_probe(struct platform_device *pdev) static int sdhci_arasan_remove(struct platform_device *pdev) { + int ret; struct sdhci_host *host = platform_get_drvdata(pdev); struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv; + ret = sdhci_pltfm_unregister(pdev); + clk_disable_unprepare(sdhci_arasan->clk_ahb); - return sdhci_pltfm_unregister(pdev); + return ret; } static const struct of_device_id sdhci_arasan_of_match[] = {