}
 }
 
+static void tmio_mmc_set_bus_width(struct tmio_mmc_host *host,
+                                  unsigned char bus_width)
+{
+       u16 reg = sd_ctrl_read16(host, CTL_SD_MEM_CARD_OPT)
+                               & ~(CARD_OPT_WIDTH | CARD_OPT_WIDTH8);
+
+       /* reg now applies to MMC_BUS_WIDTH_4 */
+       if (bus_width == MMC_BUS_WIDTH_1)
+               reg |= CARD_OPT_WIDTH;
+       else if (bus_width == MMC_BUS_WIDTH_8)
+               reg |= CARD_OPT_WIDTH8;
+
+       sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, reg);
+}
+
 static void tmio_mmc_reset(struct tmio_mmc_host *host)
 {
        /* FIXME - should we set stop clock reg here */
        if (host->reset)
                host->reset(host);
 
+       tmio_mmc_set_bus_width(host, host->mmc->ios.bus_width);
+
        if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) {
                sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask);
                sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0001);
                host->set_pwr(host->pdev, 0);
 }
 
-static void tmio_mmc_set_bus_width(struct tmio_mmc_host *host,
-                                  unsigned char bus_width)
-{
-       u16 reg = sd_ctrl_read16(host, CTL_SD_MEM_CARD_OPT)
-                               & ~(CARD_OPT_WIDTH | CARD_OPT_WIDTH8);
-
-       /* reg now applies to MMC_BUS_WIDTH_4 */
-       if (bus_width == MMC_BUS_WIDTH_1)
-               reg |= CARD_OPT_WIDTH;
-       else if (bus_width == MMC_BUS_WIDTH_8)
-               reg |= CARD_OPT_WIDTH8;
-
-       sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, reg);
-}
-
 static unsigned int tmio_mmc_get_timeout_cycles(struct tmio_mmc_host *host)
 {
        u16 val = sd_ctrl_read16(host, CTL_SD_MEM_CARD_OPT);