
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@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;