]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/mmc/mmc.c
mmc: Fix splitting device initialization
[karo-tx-uboot.git] / drivers / mmc / mmc.c
index 408f97d51f6ef0db0d307f3840991f0be3723132..1099908a72d25b2712eaf1fdc5d69d459feb72cd 100644 (file)
@@ -388,7 +388,6 @@ static int mmc_send_op_cond(struct mmc *mmc)
        mmc_go_idle(mmc);
 
        /* Asking to the card its capabilities */
        mmc_go_idle(mmc);
 
        /* Asking to the card its capabilities */
-       mmc->op_cond_pending = 1;
        for (i = 0; i < 2; i++) {
                err = mmc_send_op_cond_iter(mmc, i != 0);
                if (err)
        for (i = 0; i < 2; i++) {
                err = mmc_send_op_cond_iter(mmc, i != 0);
                if (err)
@@ -396,9 +395,10 @@ static int mmc_send_op_cond(struct mmc *mmc)
 
                /* exit if not busy (flag seems to be inverted) */
                if (mmc->ocr & OCR_BUSY)
 
                /* exit if not busy (flag seems to be inverted) */
                if (mmc->ocr & OCR_BUSY)
-                       return 0;
+                       break;
        }
        }
-       return IN_PROGRESS;
+       mmc->op_cond_pending = 1;
+       return 0;
 }
 
 static int mmc_complete_op_cond(struct mmc *mmc)
 }
 
 static int mmc_complete_op_cond(struct mmc *mmc)
@@ -1598,9 +1598,6 @@ int mmc_start_init(struct mmc *mmc)
        if (mmc->has_init)
                return 0;
 
        if (mmc->has_init)
                return 0;
 
-#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
-       mmc_adapter_card_type_ident();
-#endif
        board_mmc_power_init();
 
        /* made sure it's not NULL earlier */
        board_mmc_power_init();
 
        /* made sure it's not NULL earlier */
@@ -1632,7 +1629,7 @@ int mmc_start_init(struct mmc *mmc)
        if (err == TIMEOUT) {
                err = mmc_send_op_cond(mmc);
 
        if (err == TIMEOUT) {
                err = mmc_send_op_cond(mmc);
 
-               if (err && err != IN_PROGRESS) {
+               if (err) {
 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
                        printf("Card did not respond to voltage select!\n");
 #endif
 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
                        printf("Card did not respond to voltage select!\n");
 #endif
@@ -1640,7 +1637,7 @@ int mmc_start_init(struct mmc *mmc)
                }
        }
 
                }
        }
 
-       if (err == IN_PROGRESS)
+       if (!err)
                mmc->init_in_progress = 1;
 
        return err;
                mmc->init_in_progress = 1;
 
        return err;
@@ -1650,6 +1647,7 @@ static int mmc_complete_init(struct mmc *mmc)
 {
        int err = 0;
 
 {
        int err = 0;
 
+       mmc->init_in_progress = 0;
        if (mmc->op_cond_pending)
                err = mmc_complete_op_cond(mmc);
 
        if (mmc->op_cond_pending)
                err = mmc_complete_op_cond(mmc);
 
@@ -1659,13 +1657,12 @@ static int mmc_complete_init(struct mmc *mmc)
                mmc->has_init = 0;
        else
                mmc->has_init = 1;
                mmc->has_init = 0;
        else
                mmc->has_init = 1;
-       mmc->init_in_progress = 0;
        return err;
 }
 
 int mmc_init(struct mmc *mmc)
 {
        return err;
 }
 
 int mmc_init(struct mmc *mmc)
 {
-       int err = IN_PROGRESS;
+       int err = 0;
        unsigned long start;
 
        if (mmc->has_init)
        unsigned long start;
 
        if (mmc->has_init)
@@ -1676,7 +1673,7 @@ int mmc_init(struct mmc *mmc)
        if (!mmc->init_in_progress)
                err = mmc_start_init(mmc);
 
        if (!mmc->init_in_progress)
                err = mmc_start_init(mmc);
 
-       if (!err || err == IN_PROGRESS)
+       if (!err)
                err = mmc_complete_init(mmc);
        debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
        return err;
                err = mmc_complete_init(mmc);
        debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
        return err;