dm: mmc: Implement the select_hwpart() method
authorSimon Glass <sjg@chromium.org>
Sun, 1 May 2016 19:52:26 +0000 (13:52 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 17 May 2016 15:54:43 +0000 (09:54 -0600)
Implement this method so that hardware partitions will work correctly with
MMC.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/mmc/mmc.c

index 2211ac6d9948ea900262c50bd8ac50ad1f503d19..e270f5f6447b3a98072bbf2797576da3a5e640c9 100644 (file)
@@ -606,6 +606,27 @@ int mmc_switch_part(int dev_num, unsigned int part_num)
        return ret;
 }
 
+static int mmc_select_hwpartp(struct blk_desc *desc, int hwpart)
+{
+       struct mmc *mmc = find_mmc_device(desc->devnum);
+       int ret;
+
+       if (!mmc)
+               return -ENODEV;
+
+       if (mmc->block_dev.hwpart == hwpart)
+               return 0;
+
+       if (mmc->part_config == MMCPART_NOAVAILABLE)
+               return -EMEDIUMTYPE;
+
+       ret = mmc_switch_part(desc->devnum, hwpart);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
 int mmc_select_hwpart(int dev_num, int hwpart)
 {
        struct mmc *mmc = find_mmc_device(dev_num);
@@ -1973,4 +1994,5 @@ U_BOOT_LEGACY_BLK(mmc) = {
        .if_type        = IF_TYPE_MMC,
        .max_devs       = -1,
        .get_dev        = mmc_get_dev,
+       .select_hwpart  = mmc_select_hwpartp,
 };