mmc: omap_hsmmc: refactor duplicated code
authorAndy Shevchenko <ext-andriy.shevchenko@nokia.com>
Wed, 13 Jul 2011 15:31:15 +0000 (11:31 -0400)
committerChris Ball <cjb@laptop.org>
Thu, 21 Jul 2011 14:35:03 +0000 (10:35 -0400)
There are a few places with the same functionality. This patch creates
two functions omap_hsmmc_set_bus_width() and omap_hsmmc_set_bus_mode()
to do the job.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/host/omap_hsmmc.c

index bda284b..f82a053 100644 (file)
@@ -638,6 +638,41 @@ static void omap_hsmmc_set_clock(struct omap_hsmmc_host *host)
        omap_hsmmc_start_clock(host);
 }
 
+static void omap_hsmmc_set_bus_width(struct omap_hsmmc_host *host)
+{
+       struct mmc_ios *ios = &host->mmc->ios;
+       u32 con;
+
+       con = OMAP_HSMMC_READ(host->base, CON);
+       switch (ios->bus_width) {
+       case MMC_BUS_WIDTH_8:
+               OMAP_HSMMC_WRITE(host->base, CON, con | DW8);
+               break;
+       case MMC_BUS_WIDTH_4:
+               OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
+               OMAP_HSMMC_WRITE(host->base, HCTL,
+                       OMAP_HSMMC_READ(host->base, HCTL) | FOUR_BIT);
+               break;
+       case MMC_BUS_WIDTH_1:
+               OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
+               OMAP_HSMMC_WRITE(host->base, HCTL,
+                       OMAP_HSMMC_READ(host->base, HCTL) & ~FOUR_BIT);
+               break;
+       }
+}
+
+static void omap_hsmmc_set_bus_mode(struct omap_hsmmc_host *host)
+{
+       struct mmc_ios *ios = &host->mmc->ios;
+       u32 con;
+
+       con = OMAP_HSMMC_READ(host->base, CON);
+       if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN)
+               OMAP_HSMMC_WRITE(host->base, CON, con | OD);
+       else
+               OMAP_HSMMC_WRITE(host->base, CON, con & ~OD);
+}
+
 #ifdef CONFIG_PM
 
 /*
@@ -649,7 +684,7 @@ static int omap_hsmmc_context_restore(struct omap_hsmmc_host *host)
        struct mmc_ios *ios = &host->mmc->ios;
        struct omap_mmc_platform_data *pdata = host->pdata;
        int context_loss = 0;
-       u32 hctl, capa, con;
+       u32 hctl, capa;
        unsigned long timeout;
 
        if (pdata->get_context_loss_count) {
@@ -711,30 +746,12 @@ static int omap_hsmmc_context_restore(struct omap_hsmmc_host *host)
        if (host->power_mode == MMC_POWER_OFF)
                goto out;
 
-       con = OMAP_HSMMC_READ(host->base, CON);
-       switch (ios->bus_width) {
-       case MMC_BUS_WIDTH_8:
-               OMAP_HSMMC_WRITE(host->base, CON, con | DW8);
-               break;
-       case MMC_BUS_WIDTH_4:
-               OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
-               OMAP_HSMMC_WRITE(host->base, HCTL,
-                       OMAP_HSMMC_READ(host->base, HCTL) | FOUR_BIT);
-               break;
-       case MMC_BUS_WIDTH_1:
-               OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
-               OMAP_HSMMC_WRITE(host->base, HCTL,
-                       OMAP_HSMMC_READ(host->base, HCTL) & ~FOUR_BIT);
-               break;
-       }
+       omap_hsmmc_set_bus_width(host);
 
        omap_hsmmc_set_clock(host);
 
-       con = OMAP_HSMMC_READ(host->base, CON);
-       if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN)
-               OMAP_HSMMC_WRITE(host->base, CON, con | OD);
-       else
-               OMAP_HSMMC_WRITE(host->base, CON, con & ~OD);
+       omap_hsmmc_set_bus_mode(host);
+
 out:
        host->context_loss = context_loss;
 
@@ -1628,7 +1645,6 @@ static void omap_hsmmc_request(struct mmc_host *mmc, struct mmc_request *req)
 static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 {
        struct omap_hsmmc_host *host = mmc_priv(mmc);
-       u32 con;
        int do_send_init_stream = 0;
 
        pm_runtime_get_sync(host->dev);
@@ -1654,22 +1670,7 @@ static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 
        /* FIXME: set registers based only on changes to ios */
 
-       con = OMAP_HSMMC_READ(host->base, CON);
-       switch (mmc->ios.bus_width) {
-       case MMC_BUS_WIDTH_8:
-               OMAP_HSMMC_WRITE(host->base, CON, con | DW8);
-               break;
-       case MMC_BUS_WIDTH_4:
-               OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
-               OMAP_HSMMC_WRITE(host->base, HCTL,
-                       OMAP_HSMMC_READ(host->base, HCTL) | FOUR_BIT);
-               break;
-       case MMC_BUS_WIDTH_1:
-               OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
-               OMAP_HSMMC_WRITE(host->base, HCTL,
-                       OMAP_HSMMC_READ(host->base, HCTL) & ~FOUR_BIT);
-               break;
-       }
+       omap_hsmmc_set_bus_width(host);
 
        if (host->pdata->controller_flags & OMAP_HSMMC_SUPPORTS_DUAL_VOLT) {
                /* Only MMC1 can interface at 3V without some flavor
@@ -1694,11 +1695,7 @@ static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
        if (do_send_init_stream)
                send_init_stream(host);
 
-       con = OMAP_HSMMC_READ(host->base, CON);
-       if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN)
-               OMAP_HSMMC_WRITE(host->base, CON, con | OD);
-       else
-               OMAP_HSMMC_WRITE(host->base, CON, con & ~OD);
+       omap_hsmmc_set_bus_mode(host);
 
        pm_runtime_put_autosuspend(host->dev);
 }