]> git.sur5r.net Git - u-boot/blobdiff - drivers/mmc/mmc.c
Merge branch 'rmobile' of git://git.denx.de/u-boot-sh
[u-boot] / drivers / mmc / mmc.c
index f12546ac51925a9e249ffb1a8fbdf8cd6f91ea04..2a58702848b7f977bd3d10b12bd9138287fc1df5 100644 (file)
 #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>
 #include <malloc.h>
+#include <memalign.h>
 #include <linux/list.h>
 #include <div64.h>
 #include "mmc_private.h"
@@ -1759,10 +1762,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 +1807,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(',');