diff options
Diffstat (limited to 'drivers/mmc/host/sdhci-s3c.c')
-rw-r--r-- | drivers/mmc/host/sdhci-s3c.c | 51 |
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"); |