if (dev->flags & DM_FLAG_ACTIVATED)
return -EINVAL;
+ if (!(dev->flags & DM_FLAG_BOUND))
+ return -EINVAL;
+
drv = dev->driver;
assert(drv);
if (dev->parent)
list_del(&dev->sibling_node);
+
+ devres_release_all(dev);
+
+ if (dev->flags & DM_FLAG_NAME_ALLOCED)
+ free((char *)dev->name);
free(dev);
return 0;
dev->parent_priv = NULL;
}
}
+
+ devres_release_probe(dev);
}
int device_remove(struct udevice *dev)