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

Reply via email to