[U-Boot] [PATCH] dm: usb: setup ehci gadget before usb is probed
Marek Vasut
marex at denx.de
Mon May 21 20:55:35 UTC 2018
On 05/21/2018 08:13 PM, Ramon Fried wrote:
> On Mon, May 21, 2018 at 6:08 PM, Marek Vasut <marex at 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 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;
>>>
>>
>>
>> --
>> Best regards,
>> Marek Vasut
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list