aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/sdhci-s3c.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
index 0c77b10d2619..4d9acf833590 100644
--- a/drivers/mmc/host/sdhci-s3c.c
+++ b/drivers/mmc/host/sdhci-s3c.c
@@ -208,10 +208,12 @@ static void sdhci_s3c_set_clock(struct sdhci_host *host, unsigned int clock)
208 best_src, clock, best); 208 best_src, clock, best);
209 209
210 /* select the new clock source */ 210 /* select the new clock source */
211
212 if (ourhost->cur_clk != best_src) { 211 if (ourhost->cur_clk != best_src) {
213 struct clk *clk = ourhost->clk_bus[best_src]; 212 struct clk *clk = ourhost->clk_bus[best_src];
214 213
214 clk_enable(clk);
215 clk_disable(ourhost->clk_bus[ourhost->cur_clk]);
216
215 /* turn clock off to card before changing clock source */ 217 /* turn clock off to card before changing clock source */
216 writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL); 218 writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL);
217 219
@@ -625,8 +627,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
625 */ 627 */
626 sc->cur_clk = ptr; 628 sc->cur_clk = ptr;
627 629
628 clk_enable(clk);
629
630 dev_info(dev, "clock source %d: %s (%ld Hz)\n", 630 dev_info(dev, "clock source %d: %s (%ld Hz)\n",
631 ptr, name, clk_get_rate(clk)); 631 ptr, name, clk_get_rate(clk));
632 } 632 }
@@ -637,6 +637,8 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
637 goto err_no_busclks; 637 goto err_no_busclks;
638 } 638 }
639 639
640 clk_enable(sc->clk_bus[sc->cur_clk]);
641
640 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 642 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
641 host->ioaddr = devm_request_and_ioremap(&pdev->dev, res); 643 host->ioaddr = devm_request_and_ioremap(&pdev->dev, res);
642 if (!host->ioaddr) { 644 if (!host->ioaddr) {
@@ -745,9 +747,9 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
745 return 0; 747 return 0;
746 748
747 err_req_regs: 749 err_req_regs:
750 clk_disable(sc->clk_bus[sc->cur_clk]);
748 for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) { 751 for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
749 if (sc->clk_bus[ptr]) { 752 if (sc->clk_bus[ptr]) {
750 clk_disable(sc->clk_bus[ptr]);
751 clk_put(sc->clk_bus[ptr]); 753 clk_put(sc->clk_bus[ptr]);
752 } 754 }
753 } 755 }
@@ -788,9 +790,9 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
788 790
789 pm_runtime_disable(&pdev->dev); 791 pm_runtime_disable(&pdev->dev);
790 792
793 clk_disable(sc->clk_bus[sc->cur_clk]);
791 for (ptr = 0; ptr < 3; ptr++) { 794 for (ptr = 0; ptr < 3; ptr++) {
792 if (sc->clk_bus[ptr]) { 795 if (sc->clk_bus[ptr]) {
793 clk_disable(sc->clk_bus[ptr]);
794 clk_put(sc->clk_bus[ptr]); 796 clk_put(sc->clk_bus[ptr]);
795 } 797 }
796 } 798 }