usb: gadget: pxa27x_udc: convert to udc_start/udc_stop
authorFelipe Balbi <balbi@ti.com>
Thu, 24 Jan 2013 15:16:39 +0000 (17:16 +0200)
committerFelipe Balbi <balbi@ti.com>
Thu, 24 Jan 2013 19:11:31 +0000 (21:11 +0200)
Mechanical change making use of the new (can we
still call it new ?) interface for registering
UDC drivers.

Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/pxa27x_udc.c
drivers/usb/gadget/pxa27x_udc.h

index 2b3b01d5f403c2ef0e78929ba7663b1ea925ea47..f7d25795821ac2830aa6ae587eda30c714c16342 100644 (file)
@@ -1671,9 +1671,10 @@ static int pxa_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
        return -EOPNOTSUPP;
 }
 
-static int pxa27x_udc_start(struct usb_gadget_driver *driver,
-               int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
-static int pxa27x_udc_stop(struct usb_gadget_driver *driver);
+static int pxa27x_udc_start(struct usb_gadget *g,
+               struct usb_gadget_driver *driver);
+static int pxa27x_udc_stop(struct usb_gadget *g,
+               struct usb_gadget_driver *driver);
 
 static const struct usb_gadget_ops pxa_udc_ops = {
        .get_frame      = pxa_udc_get_frame,
@@ -1681,8 +1682,8 @@ static const struct usb_gadget_ops pxa_udc_ops = {
        .pullup         = pxa_udc_pullup,
        .vbus_session   = pxa_udc_vbus_session,
        .vbus_draw      = pxa_udc_vbus_draw,
-       .start          = pxa27x_udc_start,
-       .stop           = pxa27x_udc_stop,
+       .udc_start      = pxa27x_udc_start,
+       .udc_stop       = pxa27x_udc_stop,
 };
 
 /**
@@ -1802,20 +1803,12 @@ static void udc_enable(struct pxa_udc *udc)
  *
  * Returns 0 if no error, -EINVAL, -ENODEV, -EBUSY otherwise
  */
-static int pxa27x_udc_start(struct usb_gadget_driver *driver,
-               int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
+static int pxa27x_udc_start(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct pxa_udc *udc = the_controller;
+       struct pxa_udc *udc = to_pxa(g);
        int retval;
 
-       if (!driver || driver->max_speed < USB_SPEED_FULL || !bind
-                       || !driver->disconnect || !driver->setup)
-               return -EINVAL;
-       if (!udc)
-               return -ENODEV;
-       if (udc->driver)
-               return -EBUSY;
-
        /* first hook up the driver ... */
        udc->driver = driver;
        udc->gadget.dev.driver = &driver->driver;
@@ -1824,23 +1817,14 @@ static int pxa27x_udc_start(struct usb_gadget_driver *driver,
        retval = device_add(&udc->gadget.dev);
        if (retval) {
                dev_err(udc->dev, "device_add error %d\n", retval);
-               goto add_fail;
+               goto fail;
        }
-       retval = bind(&udc->gadget, driver);
-       if (retval) {
-               dev_err(udc->dev, "bind to driver %s --> error %d\n",
-                       driver->driver.name, retval);
-               goto bind_fail;
-       }
-       dev_dbg(udc->dev, "registered gadget driver '%s'\n",
-               driver->driver.name);
-
        if (!IS_ERR_OR_NULL(udc->transceiver)) {
                retval = otg_set_peripheral(udc->transceiver->otg,
                                                &udc->gadget);
                if (retval) {
                        dev_err(udc->dev, "can't bind to transceiver\n");
-                       goto transceiver_fail;
+                       goto fail;
                }
        }
 
@@ -1848,12 +1832,7 @@ static int pxa27x_udc_start(struct usb_gadget_driver *driver,
                udc_enable(udc);
        return 0;
 
-transceiver_fail:
-       if (driver->unbind)
-               driver->unbind(&udc->gadget);
-bind_fail:
-       device_del(&udc->gadget.dev);
-add_fail:
+fail:
        udc->driver = NULL;
        udc->gadget.dev.driver = NULL;
        return retval;
@@ -1878,9 +1857,6 @@ static void stop_activity(struct pxa_udc *udc, struct usb_gadget_driver *driver)
 
        for (i = 0; i < NR_USB_ENDPOINTS; i++)
                pxa_ep_disable(&udc->udc_usb_ep[i].usb_ep);
-
-       if (driver)
-               driver->disconnect(&udc->gadget);
 }
 
 /**
@@ -1889,25 +1865,18 @@ static void stop_activity(struct pxa_udc *udc, struct usb_gadget_driver *driver)
  *
  * Returns 0 if no error, -ENODEV, -EINVAL otherwise
  */
-static int pxa27x_udc_stop(struct usb_gadget_driver *driver)
+static int pxa27x_udc_stop(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct pxa_udc *udc = the_controller;
-
-       if (!udc)
-               return -ENODEV;
-       if (!driver || driver != udc->driver || !driver->unbind)
-               return -EINVAL;
+       struct pxa_udc *udc = to_pxa(g);
 
        stop_activity(udc, driver);
        udc_disable(udc);
        dplus_pullup(udc, 0);
 
-       driver->unbind(&udc->gadget);
        udc->driver = NULL;
 
        device_del(&udc->gadget.dev);
-       dev_info(udc->dev, "unregistered gadget driver '%s'\n",
-                driver->driver.name);
 
        if (!IS_ERR_OR_NULL(udc->transceiver))
                return otg_set_peripheral(udc->transceiver->otg, NULL);
index 79d81a4b234409b6943a49c6c978c42219149f94..28f2b53530f57b7e3c54bb01ba29b6a336ad48e0 100644 (file)
@@ -473,6 +473,7 @@ struct pxa_udc {
        struct dentry                           *debugfs_eps;
 #endif
 };
+#define to_pxa(g)      (container_of((g), struct pxa_udc, gadget))
 
 static inline struct pxa_udc *to_gadget_udc(struct usb_gadget *gadget)
 {