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;
|
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);
|
||||||
|
|
Loading…
Reference in a new issue