diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-07-15 15:19:53 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-07-18 14:50:21 +0200 |
commit | 4bff0a0553b739427834ef7669621f08ee84dec0 (patch) | |
tree | 36f786dbad82db161e63eed04516544ad4112b35 /drivers/usb/core/usb.c | |
parent | c7d3ec47f9699bb210799593ebb277168259b8c5 (diff) | |
download | barebox-4bff0a0553b739427834ef7669621f08ee84dec0.tar.gz barebox-4bff0a0553b739427834ef7669621f08ee84dec0.tar.xz |
USB: host: implement usb_remove_device
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/usb/core/usb.c')
-rw-r--r-- | drivers/usb/core/usb.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 7c69e102ad..faf509ec9d 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c @@ -455,6 +455,25 @@ err_out: return err; } +void usb_remove_device(struct usb_device *usbdev) +{ + int i, ret; + + for (i = 0; i < usbdev->maxchild; i++) { + if (usbdev->children[i]) + usb_remove_device(usbdev->children[i]); + } + + dev_info(&usbdev->dev, "removing\n"); + + ret = unregister_device(&usbdev->dev); + if (ret) + dev_err(&usbdev->dev, "failed to unregister\n"); + + usbdev->parent->children[usbdev->portnr - 1] = NULL; + free(usbdev); +} + struct usb_device *usb_alloc_new_device(void) { struct usb_device *usbdev = xzalloc(sizeof (*usbdev)); |