* we're trying to reinitialise.
  */
 static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
-                             struct mmc_card *oldcard)
+                             struct mmc_card *oldcard, int powered_resume)
 {
        struct mmc_card *card;
        int err;
        /*
         * Inform the card of the voltage
         */
-       err = mmc_send_io_op_cond(host, host->ocr, &ocr);
-       if (err)
-               goto err;
+       if (!powered_resume) {
+               err = mmc_send_io_op_cond(host, host->ocr, &ocr);
+               if (err)
+                       goto err;
+       }
 
        /*
         * For SPI, enable CRC as appropriate.
        /*
         * For native busses:  set card RCA and quit open drain mode.
         */
-       if (!mmc_host_is_spi(host)) {
+       if (!powered_resume && !mmc_host_is_spi(host)) {
                err = mmc_send_relative_addr(host, &card->rca);
                if (err)
                        goto remove;
        /*
         * Select card, as all following commands rely on that.
         */
-       if (!mmc_host_is_spi(host)) {
+       if (!powered_resume && !mmc_host_is_spi(host)) {
                err = mmc_select_card(card);
                if (err)
                        goto remove;
 
        /* Basic card reinitialization. */
        mmc_claim_host(host);
-       err = mmc_sdio_init_card(host, host->ocr, host->card);
+       err = mmc_sdio_init_card(host, host->ocr, host->card,
+                                (host->pm_flags & MMC_PM_KEEP_POWER));
        mmc_release_host(host);
 
        /*
        /*
         * Detect and init the card.
         */
-       err = mmc_sdio_init_card(host, host->ocr, NULL);
+       err = mmc_sdio_init_card(host, host->ocr, NULL, 0);
        if (err)
                goto err;
        card = host->card;