summaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorWang Dongsheng <dongsheng.wang@hxt-semitech.com>2018-08-16 12:48:42 +0800
committerUlf Hansson <ulf.hansson@linaro.org>2018-10-08 11:40:43 +0200
commitc7eabbee3de99347105faa7fd925a500ccf43baf (patch)
treea4931a5af5c7c22d848fbfd05b767aa529a22cf9 /drivers/mmc
parentb1f378ab5334d96e661dd74586210a476b498802 (diff)
downloadlinux-stable-c7eabbee3de99347105faa7fd925a500ccf43baf.tar.gz
linux-stable-c7eabbee3de99347105faa7fd925a500ccf43baf.tar.bz2
linux-stable-c7eabbee3de99347105faa7fd925a500ccf43baf.zip
sdhci: acpi: add free_slot callback
The device specific resource can be free in free_slot after removing host controller. Signed-off-by: Wang Dongsheng <dongsheng.wang@hxt-semitech.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/sdhci-acpi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c
index 32321bd596d8..c61109f7b793 100644
--- a/drivers/mmc/host/sdhci-acpi.c
+++ b/drivers/mmc/host/sdhci-acpi.c
@@ -76,6 +76,7 @@ struct sdhci_acpi_slot {
size_t priv_size;
int (*probe_slot)(struct platform_device *, const char *, const char *);
int (*remove_slot)(struct platform_device *);
+ int (*free_slot)(struct platform_device *pdev);
int (*setup_host)(struct platform_device *pdev);
};
@@ -756,6 +757,9 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
err_cleanup:
sdhci_cleanup_host(c->host);
err_free:
+ if (c->slot && c->slot->free_slot)
+ c->slot->free_slot(pdev);
+
sdhci_free_host(c->host);
return err;
}
@@ -777,6 +781,10 @@ static int sdhci_acpi_remove(struct platform_device *pdev)
dead = (sdhci_readl(c->host, SDHCI_INT_STATUS) == ~0);
sdhci_remove_host(c->host, dead);
+
+ if (c->slot && c->slot->free_slot)
+ c->slot->free_slot(pdev);
+
sdhci_free_host(c->host);
return 0;