[U-Boot] [PATCH] dm: usb: setup ehci gadget before usb is probed

Ramon Fried ramon.fried at gmail.com
Mon May 21 15:00:06 UTC 2018


usb_setup_ehci_gadget() looks for a loaded USB class driver,
then it unloads it and loads it again as a device instead of host.
This change loads the USB class driver as device if it wasn't loaded
in the first place.

Signed-off-by: Ramon Fried <ramon.fried at gmail.com>
---
 drivers/usb/host/usb-uclass.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c
index 611ea97a72..7ab7e8990c 100644
--- a/drivers/usb/host/usb-uclass.c
+++ b/drivers/usb/host/usb-uclass.c
@@ -380,17 +380,22 @@ struct usb_device *usb_get_dev_index(struct udevice *bus, int index)
 
 int usb_setup_ehci_gadget(struct ehci_ctrl **ctlrp)
 {
+	TRACE();
 	struct usb_platdata *plat;
 	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;
+	if (ret) {
+		ret = uclass_find_device(UCLASS_USB, 0, &dev);
+		if (ret)
+			return ret;
+	} else {
+		ret = device_remove(dev, DM_REMOVE_NORMAL);
+		if (ret)
+			return ret;
+	}
 
 	plat = dev_get_platdata(dev);
 	plat->init_type = USB_INIT_DEVICE;
-- 
2.17.0



More information about the U-Boot mailing list