summaryrefslogtreecommitdiff
path: root/drivers/core
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2016-04-19 22:19:29 (GMT)
committerSimon Glass <sjg@chromium.org>2016-05-17 15:54:43 (GMT)
commit9fdfadf8fc83b173b3ba55aa82739ca92d8a273d (patch)
tree3c59744391fc23b2e6de92191f80a41f2b2e9869 /drivers/core
parentf79f1e0c0ea06de3af79094bc80be6e218b5f6ef (diff)
downloadu-boot-fsl-qoriq-9fdfadf8fc83b173b3ba55aa82739ca92d8a273d.tar.xz
dm: core: allow drivers to refuse to bind
In some cases, drivers may not want to bind to a device. Allow bind() to return -ENODEV in this case, and don't treat this as an error. This can be useful in situations where some information source other than the DT node's main status property indicates whether the device should be enabled, for example other DT properties might indicate this, or the driver might query non-DT sources such as system fuses or a version number register. Signed-off-by: Stephen Warren <swarren@nvidia.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/core')
-rw-r--r--drivers/core/lists.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/core/lists.c b/drivers/core/lists.c
index c4fc216..a72db13 100644
--- a/drivers/core/lists.c
+++ b/drivers/core/lists.c
@@ -171,6 +171,10 @@ int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
dm_dbg(" - found match at '%s'\n", entry->name);
ret = device_bind(parent, entry, name, NULL, offset, &dev);
+ if (ret == -ENODEV) {
+ dm_dbg("Driver '%s' refuses to bind\n", entry->name);
+ continue;
+ }
if (ret) {
dm_warn("Error binding driver '%s': %d\n", entry->name,
ret);