]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sandbox: mmc: Support fixed MMC devices
authorSimon Glass <sjg@chromium.org>
Mon, 5 Jul 2021 22:32:58 +0000 (16:32 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 21 Jul 2021 16:27:35 +0000 (10:27 -0600)
Add support for reading devicetree flags for MMC devices. With this we
can distinguish between fixed and removable drives. Note that this
information is only available when the device is probed, not when it is
bound, since it is read in the of_to_plat() method. This could be changed
if needed later.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
arch/sandbox/dts/test.dts
drivers/mmc/sandbox_mmc.c

index d85bb46cebaa8f572a34c695a184ff06c311607a..0cee15a0ea2cc1e008664f36c072e98a16c1fd41 100644 (file)
 
        mmc2 {
                compatible = "sandbox,mmc";
+               non-removable;
        };
 
        mmc1 {
index 18ba020aaccd80e0a80e090254ad81d345f7fc66..895fbffecfcdb3ad108031f62b04fc02e1e8cf7c 100644 (file)
@@ -136,14 +136,31 @@ static const struct dm_mmc_ops sandbox_mmc_ops = {
        .get_cd = sandbox_mmc_get_cd,
 };
 
-int sandbox_mmc_probe(struct udevice *dev)
+static int sandbox_mmc_of_to_plat(struct udevice *dev)
+{
+       struct sandbox_mmc_plat *plat = dev_get_plat(dev);
+       struct mmc_config *cfg = &plat->cfg;
+       struct blk_desc *blk;
+       int ret;
+
+       ret = mmc_of_parse(dev, cfg);
+       if (ret)
+               return ret;
+       blk = mmc_get_blk_desc(&plat->mmc);
+       if (blk)
+               blk->removable = !(cfg->host_caps & MMC_CAP_NONREMOVABLE);
+
+       return 0;
+}
+
+static int sandbox_mmc_probe(struct udevice *dev)
 {
        struct sandbox_mmc_plat *plat = dev_get_plat(dev);
 
        return mmc_init(&plat->mmc);
 }
 
-int sandbox_mmc_bind(struct udevice *dev)
+static int sandbox_mmc_bind(struct udevice *dev)
 {
        struct sandbox_mmc_plat *plat = dev_get_plat(dev);
        struct mmc_config *cfg = &plat->cfg;
@@ -158,7 +175,7 @@ int sandbox_mmc_bind(struct udevice *dev)
        return mmc_bind(dev, &plat->mmc, cfg);
 }
 
-int sandbox_mmc_unbind(struct udevice *dev)
+static int sandbox_mmc_unbind(struct udevice *dev)
 {
        mmc_unbind(dev);
 
@@ -177,6 +194,7 @@ U_BOOT_DRIVER(mmc_sandbox) = {
        .ops            = &sandbox_mmc_ops,
        .bind           = sandbox_mmc_bind,
        .unbind         = sandbox_mmc_unbind,
+       .of_to_plat     = sandbox_mmc_of_to_plat,
        .probe          = sandbox_mmc_probe,
        .priv_auto = sizeof(struct sandbox_mmc_priv),
        .plat_auto = sizeof(struct sandbox_mmc_plat),