mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
dm: Add child_pre_probe() and child_post_remove() methods
Some devices (particularly bus devices) must track their children, knowing when a new child is added so that it can be set up for communication on the bus. Add a child_pre_probe() method to provide this feature, and a corresponding child_post_remove() method. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e59f458de6
commit
a327dee0f4
5 changed files with 160 additions and 2 deletions
|
@ -291,6 +291,12 @@ int device_probe(struct udevice *dev)
|
|||
}
|
||||
dev->seq = seq;
|
||||
|
||||
if (dev->parent && dev->parent->driver->child_pre_probe) {
|
||||
ret = dev->parent->driver->child_pre_probe(dev);
|
||||
if (ret)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (drv->ofdata_to_platdata && dev->of_offset >= 0) {
|
||||
ret = drv->ofdata_to_platdata(dev);
|
||||
if (ret)
|
||||
|
@ -352,12 +358,20 @@ int device_remove(struct udevice *dev)
|
|||
goto err_remove;
|
||||
}
|
||||
|
||||
if (dev->parent && dev->parent->driver->child_post_remove) {
|
||||
ret = dev->parent->driver->child_post_remove(dev);
|
||||
if (ret) {
|
||||
dm_warn("%s: Device '%s' failed child_post_remove()",
|
||||
__func__, dev->name);
|
||||
}
|
||||
}
|
||||
|
||||
device_free(dev);
|
||||
|
||||
dev->seq = -1;
|
||||
dev->flags &= ~DM_FLAG_ACTIVATED;
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
|
||||
err_remove:
|
||||
/* We can't put the children back */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue