dm: usb: Allow setting up a USB controller as a device/gadget
Some controllers support OTG (on-the-go) where they can operate as either host or device. The gadget layer in U-Boot supports this. While this layer does not interact with driver model, we can provide a function which sets up the controller in the correct way. This way the code at least builds (although it likely will not work). Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
parent
449230f031
commit
fbeceb2602
|
@ -883,7 +883,11 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
|
|||
if (driver->speed != USB_SPEED_FULL && driver->speed != USB_SPEED_HIGH)
|
||||
return -EINVAL;
|
||||
|
||||
#ifdef CONFIG_DM_USB
|
||||
ret = usb_setup_ehci_gadget(&controller.ctrl);
|
||||
#else
|
||||
ret = usb_lowlevel_init(0, USB_INIT_DEVICE, (void **)&controller.ctrl);
|
||||
#endif
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -249,6 +249,30 @@ int usb_legacy_port_reset(struct usb_device *parent, int portnr)
|
|||
return usb_port_reset(parent, portnr);
|
||||
}
|
||||
|
||||
int usb_setup_ehci_gadget(struct ehci_ctrl **ctlrp)
|
||||
{
|
||||
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);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
plat = dev_get_platdata(dev);
|
||||
plat->init_type = USB_INIT_DEVICE;
|
||||
ret = device_probe(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
*ctlrp = dev_get_priv(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* returns 0 if no match, 1 if match */
|
||||
int usb_match_device(const struct usb_device_descriptor *desc,
|
||||
const struct usb_device_id *id)
|
||||
|
|
Loading…
Reference in New Issue