dm: core: Add a post_bind method for parents
[oweals/u-boot.git] / drivers / core / device.c
index 2f33b0e6a3b1bf87e532e777a901564231fdd71d..365676b9121941afb9982013296422ee8b5b77af 100644 (file)
@@ -111,12 +111,24 @@ int device_bind(struct udevice *parent, struct driver *drv, const char *name,
                if (ret)
                        goto fail_bind;
        }
+       if (parent && parent->driver->child_post_bind) {
+               ret = parent->driver->child_post_bind(dev);
+               if (ret)
+                       goto fail_child_post_bind;
+       }
+
        if (parent)
                dm_dbg("Bound device %s to %s\n", dev->name, parent->name);
        *devp = dev;
 
        return 0;
 
+fail_child_post_bind:
+       if (drv->unbind && drv->unbind(dev)) {
+               dm_warn("unbind() method failed on dev '%s' on error path\n",
+                       dev->name);
+       }
+
 fail_bind:
        if (uclass_unbind_device(dev)) {
                dm_warn("Failed to unbind dev '%s' on error path\n",