
On 05/21/2018 08:13 PM, Ramon Fried wrote:
On Mon, May 21, 2018 at 6:08 PM, Marek Vasut marex@denx.de wrote:
On 05/21/2018 05:00 PM, Ramon Fried wrote:
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.
To achieve what ? What is the purpose of this patch ? Are you fixing a bug or improving the code or what ?
This is an improvement of the code.
If I want for instance to run fastboot. running fastboot will fail if "start usb" wasn't run before.
In this scenario, "start usb" will start the USB as host, scan & enumerate the bus only to be taken down and brought up again as a device when usb_setup_ehci_gadget() is called.
Hope it's much clearer now.
CCing Lukasz to look at this.
Thanks, Ramon.
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;
-- Best regards, Marek Vasut