aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/host/usb-uclass.c
diff options
context:
space:
mode:
authorYe Li <ye.li@nxp.com>2020-06-29 10:12:59 +0800
committerMarek Vasut <marex@denx.de>2020-09-01 14:47:43 +0200
commit1468a1cc72afa210c35a4d0ed533de29110de648 (patch)
tree26c987450664ce86a785e1a0143c47777a63f984 /drivers/usb/host/usb-uclass.c
parent213fa47dacf07d11f094ff58a5695cd0c425e164 (diff)
downloadu-boot-1468a1cc72afa210c35a4d0ed533de29110de648.zip
u-boot-1468a1cc72afa210c35a4d0ed533de29110de648.tar.gz
u-boot-1468a1cc72afa210c35a4d0ed533de29110de648.tar.bz2
usb: ci_udc: Add function to remove usb device
When unregister gadget driver in ci_udc, the usb device is not removed or stop. This causes next "usb start" fails to work. Add a new interface "usb_remove_ehci_gadget" in usb-uclass to remove the usb device for DM driver. Using "usb_lowlevel_stop" for non-DM driver. Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Diffstat (limited to 'drivers/usb/host/usb-uclass.c')
-rw-r--r--drivers/usb/host/usb-uclass.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c
index e5dda79..8773824 100644
--- a/drivers/usb/host/usb-uclass.c
+++ b/drivers/usb/host/usb-uclass.c
@@ -411,6 +411,24 @@ int usb_setup_ehci_gadget(struct ehci_ctrl **ctlrp)
return 0;
}
+int usb_remove_ehci_gadget(struct ehci_ctrl **ctlrp)
+{
+ struct udevice *dev;
+ int ret;
+
+ /* Find the old device and remove it */
+ ret = uclass_find_device_by_seq(UCLASS_USB, 0, true, &dev);
+ if (ret)
+ return ret;
+ ret = device_remove(dev, DM_REMOVE_NORMAL);
+ if (ret)
+ return ret;
+
+ *ctlrp = NULL;
+
+ return 0;
+}
+
/* returns 0 if no match, 1 if match */
static int usb_match_device(const struct usb_device_descriptor *desc,
const struct usb_device_id *id)