aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/mshci-s3c.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc/host/mshci-s3c.c')
-rw-r--r--drivers/mmc/host/mshci-s3c.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/mmc/host/mshci-s3c.c b/drivers/mmc/host/mshci-s3c.c
index 5023d10..58670ca 100644
--- a/drivers/mmc/host/mshci-s3c.c
+++ b/drivers/mmc/host/mshci-s3c.c
@@ -408,13 +408,14 @@ static int __devinit mshci_s3c_probe(struct platform_device *pdev)
if (parent_clk) {
#ifdef CONFIG_EXYNOS4_MSHC_EPLL_45MHZ
if (!strcmp("fout_epll", \
- parent_clk->name)) {
- clk_set_rate \
+ parent_clk->name) &&
+ soc_is_exynos4210()) {
+ clk_set_rate \
(parent_clk, 180633600);
pdata->cfg_ddr(pdev, 0);
#elif defined(CONFIG_EXYNOS4_MSHC_VPLL_46MHZ)
if (!strcmp("fout_vpll", \
- parent_clk->name)) {
+ parent_clk->name)) {
clk_set_rate \
(parent_clk, 370882812);
pdata->cfg_ddr(pdev, 0);
@@ -460,7 +461,7 @@ static int __devinit mshci_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 */
@@ -541,8 +542,9 @@ static int __devinit mshci_s3c_probe(struct platform_device *pdev)
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++) {
@@ -629,7 +631,11 @@ static void __exit mshci_s3c_exit(void)
platform_driver_unregister(&mshci_s3c_driver);
}
+#ifdef CONFIG_FAST_RESUME
+beforeresume_initcall(mshci_s3c_init);
+#else
module_init(mshci_s3c_init);
+#endif
module_exit(mshci_s3c_exit);
MODULE_DESCRIPTION("Samsung MSHCI (HSMMC) glue");