diff mbox

[U-Boot,05/23] dm: mmc: Implement the select_hwpart() method

Message ID 1460337163-5584-6-git-send-email-sjg@chromium.org
State Accepted
Commit e17d1143c1a3f6f9bb1b21acb50e5e6a79855023
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass April 11, 2016, 1:12 a.m. UTC
Implement this method so that hardware partitions will work correctly with
MMC.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/mmc/mmc.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
diff mbox

Patch

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 2211ac6..e270f5f 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -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,
 };