summaryrefslogtreecommitdiff
path: root/drivers/mmc/mmc.c
diff options
context:
space:
mode:
authorPeter Bigot <pab@pabigot.com>2014-09-02 18:31:23 -0500
committerPantelis Antoniou <panto@antoniou-consulting.com>2014-10-03 17:26:50 +0300
commit6dc93e7087ccac1acb6910ac8838d9e90c602fe4 (patch)
tree5d71cb683c8b049255a0fea09277e4114aeb9a07 /drivers/mmc/mmc.c
parent021a80559f4293368558cc10dbbc75b26ecab059 (diff)
downloadu-boot-imx-6dc93e7087ccac1acb6910ac8838d9e90c602fe4.zip
u-boot-imx-6dc93e7087ccac1acb6910ac8838d9e90c602fe4.tar.gz
u-boot-imx-6dc93e7087ccac1acb6910ac8838d9e90c602fe4.tar.bz2
mmc: restore capacity when switching to partition 0
The capacity and lba for an MMC device with part_num 0 reflects the whole device. When mmc_switch_part() successfully switches to a partition, the capacity is changed to that partition. As partition 0 does not physically exist, attempts to switch back to the whole device will indicate an error, but the capacity setting for the whole device must still be restored to match the partition. Signed-off-by: Peter A. Bigot <pab@pabigot.com> Tested-by: Tom Rini <trini@ti.com> Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com>
Diffstat (limited to 'drivers/mmc/mmc.c')
-rw-r--r--drivers/mmc/mmc.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 52a8e36..e4a28d4 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -594,10 +594,15 @@ int mmc_switch_part(int dev_num, unsigned int part_num)
ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
(mmc->part_config & ~PART_ACCESS_MASK)
| (part_num & PART_ACCESS_MASK));
- if (ret)
- return ret;
- return mmc_set_capacity(mmc, part_num);
+ /*
+ * Set the capacity if the switch succeeded or was intended
+ * to return to representing the raw device.
+ */
+ if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0)))
+ ret = mmc_set_capacity(mmc, part_num);
+
+ return ret;
}
int mmc_getcd(struct mmc *mmc)