[PATCH v6 76/87] usb: gadget: dwc2_udc_otg: fix up after the resync
Anders Roxell <[email protected]>
| Newsgroups | gmane.comp.boot-loaders.u-boot.general,gmane.comp.boot-loaders.u-boot |
|---|---|
| Message-ID | <[email protected]> |
Adapt dwc2_udc_otg to the new gadget API. udc-core has its own usb_gadget_register_driver() now, so drop the local ones. Eight call sites reach dwc2_udc_probe() from board code without DM_USB_GADGET, six boards plus the socfpga and rockchip mach files, so call usb_add_gadget_udc() there too. That covers 49 defconfigs. Build tested on trats2 and socfpga_cyclone5, both keep their UDC. Co-developed-by: Jerome Forissier <[email protected]> Signed-off-by: Jerome Forissier <[email protected]> Co-developed-by: Jens Wiklander <[email protected]> Signed-off-by: Jens Wiklander <[email protected]> Signed-off-by: Anders Roxell <[email protected]> --- drivers/usb/gadget/dwc2_udc_otg.c | 86 +++---------------------------- 1 file changed, 8 insertions(+), 78 deletions(-) diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c index 570fed347c9e..398aec56a274 100644 --- a/drivers/usb/gadget/dwc2_udc_otg.c +++ b/drivers/usb/gadget/dwc2_udc_otg.c @@ -246,81 +246,6 @@ static int dwc2_gadget_pullup(struct usb_gadget *g, int is_on) return 0; } -#if !CONFIG_IS_ENABLED(DM_USB_GADGET) -/* - Register entry point for the peripheral controller driver. -*/ -int usb_gadget_register_driver(struct usb_gadget_driver *driver) -{ - struct dwc2_udc *dev = the_controller; - int retval = 0; - unsigned long flags = 0; - - debug_cond(DEBUG_SETUP != 0, "%s: %s\n", __func__, "no name"); - - if (!driver || driver->speed < USB_SPEED_FULL - || !driver->bind || !driver->disconnect || !driver->setup) - return -EINVAL; - if (!dev) - return -ENODEV; - if (dev->driver) - return -EBUSY; - - spin_lock_irqsave(&dev->lock, flags); - /* first hook up the driver ... */ - dev->driver = driver; - spin_unlock_irqrestore(&dev->lock, flags); - - if (retval) { /* TODO */ - printf("target device_add failed, error %d\n", retval); - return retval; - } - - retval = driver->bind(&dev->gadget); - if (retval) { - debug_cond(DEBUG_SETUP != 0, - "%s: bind to driver --> error %d\n", - dev->gadget.name, retval); - dev->driver = 0; - return retval; - } - - enable_irq(IRQ_OTG); - - debug_cond(DEBUG_SETUP != 0, - "Registered gadget driver %s\n", dev->gadget.name); - udc_enable(dev); - - return 0; -} - -/* - * Unregister entry point for the peripheral controller driver. - */ -int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) -{ - struct dwc2_udc *dev = the_controller; - unsigned long flags = 0; - - if (!dev) - return -ENODEV; - if (!driver || driver != dev->driver) - return -EINVAL; - - spin_lock_irqsave(&dev->lock, flags); - dev->driver = 0; - stop_activity(dev, driver); - spin_unlock_irqrestore(&dev->lock, flags); - - driver->unbind(&dev->gadget); - - disable_irq(IRQ_OTG); - - udc_disable(dev); - return 0; -} -#else /* !CONFIG_IS_ENABLED(DM_USB_GADGET) */ - static int dwc2_gadget_start(struct usb_gadget *g, struct usb_gadget_driver *driver) { @@ -364,7 +289,6 @@ static int dwc2_gadget_stop(struct usb_gadget *g) return 0; } -#endif /* !CONFIG_IS_ENABLED(DM_USB_GADGET) */ /* * done - retire a request; caller blocked irqs @@ -809,10 +733,8 @@ static void dwc2_fifo_flush(struct usb_ep *_ep) static const struct usb_gadget_ops dwc2_udc_ops = { .pullup = dwc2_gadget_pullup, /* current versions must always be self-powered */ -#if CONFIG_IS_ENABLED(DM_USB_GADGET) .udc_start = dwc2_gadget_start, .udc_stop = dwc2_gadget_stop, -#endif }; static struct dwc2_udc memory = { @@ -939,6 +861,14 @@ int dwc2_udc_probe(struct dwc2_plat_otg_data *pdata) udc_reinit(dev); + /* + * The boards call this from board code, there is no udevice for the + * parent. udc-core only stores the pointer. + */ + retval = usb_add_gadget_udc(NULL, &dev->gadget); + if (retval) + pr_err("failed to register udc: %d\n", retval); + return retval; } -- 2.53.0