mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 17:10:11 +00:00
dm: usb: Implement usb_detect_change() for driver model
Support this function with driver model also (CONFIG_DM_USB). Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
534f9d3fef
commit
0c5dd9ae2f
1 changed files with 43 additions and 0 deletions
|
@ -628,6 +628,49 @@ int usb_scan_device(struct udevice *parent, int port,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Detect if a USB device has been plugged or unplugged.
|
||||
*/
|
||||
int usb_detect_change(void)
|
||||
{
|
||||
struct udevice *hub;
|
||||
struct uclass *uc;
|
||||
int change = 0;
|
||||
int ret;
|
||||
|
||||
ret = uclass_get(UCLASS_USB_HUB, &uc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
uclass_foreach_dev(hub, uc) {
|
||||
struct usb_device *udev;
|
||||
struct udevice *dev;
|
||||
|
||||
if (!device_active(hub))
|
||||
continue;
|
||||
for (device_find_first_child(hub, &dev);
|
||||
dev;
|
||||
device_find_next_child(&dev)) {
|
||||
struct usb_port_status status;
|
||||
|
||||
if (!device_active(dev))
|
||||
continue;
|
||||
|
||||
udev = dev_get_parentdata(dev);
|
||||
if (usb_get_port_status(udev, udev->portnr, &status)
|
||||
< 0)
|
||||
/* USB request failed */
|
||||
continue;
|
||||
|
||||
if (le16_to_cpu(status.wPortChange) &
|
||||
USB_PORT_STAT_C_CONNECTION)
|
||||
change++;
|
||||
}
|
||||
}
|
||||
|
||||
return change;
|
||||
}
|
||||
|
||||
int usb_child_post_bind(struct udevice *dev)
|
||||
{
|
||||
struct usb_dev_platdata *plat = dev_get_parent_platdata(dev);
|
||||
|
|
Loading…
Reference in a new issue