dm: Add dm_scan_other() to locate board-specific devices
authorSimon Glass <sjg@chromium.org>
Wed, 23 Jul 2014 12:55:23 +0000 (06:55 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 23 Jul 2014 13:08:37 +0000 (14:08 +0100)
Some boards will have devices which are not in the device tree and do not
have platform data. They may be programnatically created, for example.
Add a hook which boards can use to bind those devices early in boot.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/root.c
include/dm/root.h

index 4f9c7e708ae4153c0f4f323ea6d40029bd7ba02b..393dd98b9db248c2c5d8ef89d280d1568cb3d759 100644 (file)
@@ -108,6 +108,11 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only)
 }
 #endif
 
+__weak int dm_scan_other(bool pre_reloc_only)
+{
+       return 0;
+}
+
 int dm_init_and_scan(bool pre_reloc_only)
 {
        int ret;
@@ -129,6 +134,9 @@ int dm_init_and_scan(bool pre_reloc_only)
                return ret;
        }
 #endif
+       ret = dm_scan_other(pre_reloc_only);
+       if (ret)
+               return ret;
 
        return 0;
 }
index 33f951b0ccfbd79a9a80943676a7548475f1fce7..c7f0c1d5ca302acd8bd89887b5bc8c53119af4dd 100644 (file)
@@ -61,6 +61,19 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only);
 int dm_scan_fdt_node(struct udevice *parent, const void *blob, int offset,
                     bool pre_reloc_only);
 
+/**
+ * dm_scan_other() - Scan for other devices
+ *
+ * Some devices may not be visible to Driver Model. This weak function can
+ * be provided by boards which wish to create their own devices
+ * programmaticaly. They should do this by calling device_bind() on each
+ * device.
+ *
+ * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC
+ * flag. If false bind all drivers.
+ */
+int dm_scan_other(bool pre_reloc_only);
+
 /**
  * dm_init_and_scan() - Initialise Driver Model structures and scan for devices
  *