]> git.sur5r.net Git - u-boot/commitdiff
mmc: Probe DM based mmc devices in u-boot
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Sun, 30 Aug 2015 22:55:45 +0000 (16:55 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 3 Sep 2015 03:28:24 +0000 (21:28 -0600)
During mmc initialize probe all devices with the MMC Uclass if build
with CONFIG_DM_MMC

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Acked-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/mmc/mmc.c

index f12546ac51925a9e249ffb1a8fbdf8cd6f91ea04..371c1ec21230ba34ae42c822369628b0810bb6c6 100644 (file)
@@ -10,6 +10,8 @@
 #include <config.h>
 #include <common.h>
 #include <command.h>
+#include <dm.h>
+#include <dm/device-internal.h>
 #include <errno.h>
 #include <mmc.h>
 #include <part.h>
@@ -1759,10 +1761,44 @@ static void do_preinit(void)
        }
 }
 
+#if defined(CONFIG_DM_MMC) && defined(CONFIG_SPL_BUILD)
+static int mmc_probe(bd_t *bis)
+{
+       return 0;
+}
+#elif defined(CONFIG_DM_MMC)
+static int mmc_probe(bd_t *bis)
+{
+       int ret;
+       struct uclass *uc;
+       struct udevice *m;
+
+       ret = uclass_get(UCLASS_MMC, &uc);
+       if (ret)
+               return ret;
+
+       uclass_foreach_dev(m, uc) {
+               ret = device_probe(m);
+               if (ret)
+                       printf("%s - probe failed: %d\n", m->name, ret);
+       }
+
+       return 0;
+}
+#else
+static int mmc_probe(bd_t *bis)
+{
+       if (board_mmc_init(bis) < 0)
+               cpu_mmc_init(bis);
+
+       return 0;
+}
+#endif
 
 int mmc_initialize(bd_t *bis)
 {
        static int initialized = 0;
+       int ret;
        if (initialized)        /* Avoid initializing mmc multiple times */
                return 0;
        initialized = 1;
@@ -1770,10 +1806,9 @@ int mmc_initialize(bd_t *bis)
        INIT_LIST_HEAD (&mmc_devices);
        cur_dev_num = 0;
 
-#ifndef CONFIG_DM_MMC
-       if (board_mmc_init(bis) < 0)
-               cpu_mmc_init(bis);
-#endif
+       ret = mmc_probe(bis);
+       if (ret)
+               return ret;
 
 #ifndef CONFIG_SPL_BUILD
        print_mmc_devices(',');