mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 14:41:31 +00:00
dm: usb: Remove inactive children after a bus scan
Each scan of the USB bus may return different results. Existing driver-model devices are reused when found, but if a device no longer exists it will stay around, de-activated, but bound. Detect these devices and remove them after the scan completes. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e8ea5e8c85
commit
eae11bece6
1 changed files with 23 additions and 0 deletions
|
@ -202,6 +202,20 @@ static void usb_scan_bus(struct udevice *bus, bool recurse)
|
||||||
printf("%d USB Device(s) found\n", priv->next_addr);
|
printf("%d USB Device(s) found\n", priv->next_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void remove_inactive_children(struct uclass *uc, struct udevice *bus)
|
||||||
|
{
|
||||||
|
uclass_foreach_dev(bus, uc) {
|
||||||
|
struct udevice *dev, *next;
|
||||||
|
|
||||||
|
if (!device_active(bus))
|
||||||
|
continue;
|
||||||
|
device_foreach_child_safe(dev, next, bus) {
|
||||||
|
if (!device_active(dev))
|
||||||
|
device_unbind(dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int usb_init(void)
|
int usb_init(void)
|
||||||
{
|
{
|
||||||
int controllers_initialized = 0;
|
int controllers_initialized = 0;
|
||||||
|
@ -270,6 +284,15 @@ int usb_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
debug("scan end\n");
|
debug("scan end\n");
|
||||||
|
|
||||||
|
/* Remove any devices that were not found on this scan */
|
||||||
|
remove_inactive_children(uc, bus);
|
||||||
|
|
||||||
|
ret = uclass_get(UCLASS_USB_HUB, &uc);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
remove_inactive_children(uc, bus);
|
||||||
|
|
||||||
/* if we were not able to find at least one working bus, bail out */
|
/* if we were not able to find at least one working bus, bail out */
|
||||||
if (!count)
|
if (!count)
|
||||||
printf("No controllers found\n");
|
printf("No controllers found\n");
|
||||||
|
|
Loading…
Add table
Reference in a new issue