Skip to content
Snippets Groups Projects
Commit 0c5dd9ae authored by Simon Glass's avatar Simon Glass
Browse files

dm: usb: Implement usb_detect_change() for driver model


Support this function with driver model also (CONFIG_DM_USB).

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 534f9d3f
No related branches found
No related tags found
No related merge requests found
...@@ -628,6 +628,49 @@ int usb_scan_device(struct udevice *parent, int port, ...@@ -628,6 +628,49 @@ int usb_scan_device(struct udevice *parent, int port,
return 0; 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) int usb_child_post_bind(struct udevice *dev)
{ {
struct usb_dev_platdata *plat = dev_get_parent_platdata(dev); struct usb_dev_platdata *plat = dev_get_parent_platdata(dev);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment