aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci-s3c.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc/host/sdhci-s3c.c')
-rw-r--r--drivers/mmc/host/sdhci-s3c.c51
1 files changed, 16 insertions, 35 deletions
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
index 5a81b34..97b40b8 100644
--- a/drivers/mmc/host/sdhci-s3c.c
+++ b/drivers/mmc/host/sdhci-s3c.c
@@ -386,17 +386,11 @@ static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
pr_info("%s: card inserted.\n",
mmc_hostname(host->mmc));
host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
-#ifdef CONFIG_MACH_MIDAS_01_BD
- sdhci_s3c_vtf_on_off(1);
-#endif
} else {
dev_dbg(&dev->dev, "card removed.\n");
pr_info("%s: card removed.\n",
mmc_hostname(host->mmc));
host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION;
-#ifdef CONFIG_MACH_MIDAS_01_BD
- sdhci_s3c_vtf_on_off(0);
-#endif
}
tasklet_schedule(&host->card_tasklet);
spin_unlock_irqrestore(&host->lock, flags);
@@ -586,7 +580,7 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
if (!host->ioaddr) {
dev_err(dev, "failed to map registers\n");
ret = -ENXIO;
- goto err_req_regs;
+ goto err_add_host;
}
/* Ensure we have minimal gpio selected CMD/CLK/Detect */
@@ -652,11 +646,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
if (pdata->pm_flags)
host->mmc->pm_flags |= pdata->pm_flags;
-#ifdef CONFIG_MACH_MIDAS_01_BD
- /* before calling shhci_add_host, you should turn vdd_tflash on */
- sdhci_s3c_vtf_on_off(1);
-#endif
-
/* To turn on vmmc regulator only if sd card exists,
GPIO pin for card detection should be initialized.
Moved from sdhci_s3c_setup_card_detect_gpio() function */
@@ -721,20 +710,12 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
gpio_is_valid(pdata->ext_cd_gpio))
sdhci_s3c_setup_card_detect_gpio(sc);
-#ifdef CONFIG_MACH_MIDAS_01_BD
- /* if card dose not exist, it should turn vtf off */
- if (pdata->cd_type == S3C_SDHCI_CD_GPIO &&
- sdhci_s3c_get_card_exist(host))
- sdhci_s3c_vtf_on_off(1);
- else
- sdhci_s3c_vtf_on_off(0);
-#endif
-
return 0;
err_add_host:
- release_resource(sc->ioarea);
- kfree(sc->ioarea);
+ if (host->ioaddr)
+ iounmap(host->ioaddr);
+ release_mem_region(sc->ioarea->start, resource_size(sc->ioarea));
err_req_regs:
for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
@@ -798,26 +779,21 @@ static int sdhci_s3c_suspend(struct platform_device *dev, pm_message_t pm)
ret = sdhci_suspend_host(host, pm);
-#ifdef CONFIG_MACH_MIDAS_01_BD
- /* turn vdd_tflash off */
- sdhci_s3c_vtf_on_off(0);
-#endif
return ret;
}
+static void sdhci_s3c_shutdown(struct platform_device *dev)
+{
+ struct sdhci_host *host = platform_get_drvdata(dev);
+
+ sdhci_shutdown_host(host);
+}
+
static int sdhci_s3c_resume(struct platform_device *dev)
{
struct sdhci_host *host = platform_get_drvdata(dev);
int ret = 0;
-#ifdef CONFIG_MACH_MIDAS_01_BD
- /* turn vdd_tflash off if a card exists*/
- if (sdhci_s3c_get_card_exist(host))
- sdhci_s3c_vtf_on_off(1);
- else
- sdhci_s3c_vtf_on_off(0);
-
-#endif
ret = sdhci_resume_host(host);
return ret;
}
@@ -832,6 +808,7 @@ static struct platform_driver sdhci_s3c_driver = {
.remove = __devexit_p(sdhci_s3c_remove),
.suspend = sdhci_s3c_suspend,
.resume = sdhci_s3c_resume,
+ .shutdown = sdhci_s3c_shutdown,
.driver = {
.owner = THIS_MODULE,
.name = "s3c-sdhci",
@@ -848,7 +825,11 @@ static void __exit sdhci_s3c_exit(void)
platform_driver_unregister(&sdhci_s3c_driver);
}
+#ifdef CONFIG_FAST_RESUME
+beforeresume_initcall(sdhci_s3c_init);
+#else
module_init(sdhci_s3c_init);
+#endif
module_exit(sdhci_s3c_exit);
MODULE_DESCRIPTION("Samsung SDHCI (HSMMC) glue");