summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-04-23 20:02:10 -0600
committerSimon Glass <sjg@chromium.org>2017-06-01 07:03:05 -0600
commit854f9a71f594555858cdffce18f6183a75d1d730 (patch)
treeac7493eb55054b0a51c2bda436958e35dfdf1572
parent66656020ff180e2a689fbe83fcd02c3e42ecdc30 (diff)
dm: mmc: Rewrite mmc_blk_probe()
This function is called when the MMC block device is being probed. There is a recursive call in this function since find_mmc_device() itself can cause the MMC device to be probed. Admittedly the MMC device should already be probed, since we would not be probing its child otherwise, but the current code is unnecessarily convoluted. Rewrite this to access the MMC structure directly. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--drivers/mmc/mmc-uclass.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c
index c9b6364260..16cc91ebdf 100644
--- a/drivers/mmc/mmc-uclass.c
+++ b/drivers/mmc/mmc-uclass.c
@@ -260,13 +260,18 @@ static int mmc_select_hwpart(struct udevice *bdev, int hwpart)
static int mmc_blk_probe(struct udevice *dev)
{
- struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
- int dev_num = block_dev->devnum;
- struct mmc *mmc = find_mmc_device(dev_num);
+ struct udevice *mmc_dev = dev_get_parent(dev);
+ struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc_dev);
+ struct mmc *mmc = upriv->mmc;
+ int ret;
+
+ ret = mmc_init(mmc);
+ if (ret) {
+ debug("%s: mmc_init() failed (err=%d)\n", __func__, ret);
+ return ret;
+ }
- if (!mmc)
- return -ENODEV;
- return mmc_init(mmc);
+ return 0;
}
static const struct blk_ops mmc_blk_ops = {