diff options
Diffstat (limited to 'drivers/mmc/core/mmc.c')
-rw-r--r-- | drivers/mmc/core/mmc.c | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 7af569522624..a5e09b8ee068 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -675,40 +675,38 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, goto free_card; } - if (!oldcard) { - /* - * Fetch and process extended CSD. - */ - - err = mmc_get_ext_csd(card, &ext_csd); - if (err) - goto free_card; - err = mmc_read_ext_csd(card, ext_csd); - if (err) - goto free_card; - - if (card->ext_csd.refresh) { - init_timer(&card->timer); - card->timer.data = (unsigned long) card; - card->timer.function = mmc_refresh; - card->timer.expires = MMC_BKOPS_INTERVAL < - MMC_REFRESH_INTERVAL ? MMC_BKOPS_INTERVAL : - MMC_REFRESH_INTERVAL; - card->timer.expires *= HZ; - card->timer.expires += jiffies; - add_timer(&card->timer); - } - /* If doing byte addressing, check if required to do sector - * addressing. Handle the case of <2GB cards needing sector - * addressing. See section 8.1 JEDEC Standard JED84-A441; - * ocr register has bit 30 set for sector addressing. - */ - if (!(mmc_card_blockaddr(card)) && (rocr & (1<<30))) - mmc_card_set_blockaddr(card); + /* + * Fetch and process extended CSD. + */ - /* Erase size depends on CSD and Extended CSD */ - mmc_set_erase_size(card); + err = mmc_get_ext_csd(card, &ext_csd); + if (err) + goto free_card; + err = mmc_read_ext_csd(card, ext_csd); + if (err) + goto free_card; + + if (card->ext_csd.refresh) { + init_timer(&card->timer); + card->timer.data = (unsigned long) card; + card->timer.function = mmc_refresh; + card->timer.expires = MMC_BKOPS_INTERVAL < + MMC_REFRESH_INTERVAL ? MMC_BKOPS_INTERVAL : + MMC_REFRESH_INTERVAL; + card->timer.expires *= HZ; + card->timer.expires += jiffies; + add_timer(&card->timer); } + /* If doing byte addressing, check if required to do sector + * addressing. Handle the case of <2GB cards needing sector + * addressing. See section 8.1 JEDEC Standard JED84-A441; + * ocr register has bit 30 set for sector addressing. + */ + if (!(mmc_card_blockaddr(card)) && (rocr & (1<<30))) + mmc_card_set_blockaddr(card); + + /* Erase size depends on CSD and Extended CSD */ + mmc_set_erase_size(card); /* * If enhanced_area_en is TRUE, host needs to enable ERASE_GRP_DEF |