Loading drivers/usb/gadget/pxa27x_udc.c +15 −46 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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, }; /** Loading Loading @@ -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; Loading @@ -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; } } Loading @@ -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; Loading @@ -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); } /** Loading @@ -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); Loading drivers/usb/gadget/pxa27x_udc.h +1 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading
drivers/usb/gadget/pxa27x_udc.c +15 −46 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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, }; /** Loading Loading @@ -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; Loading @@ -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; } } Loading @@ -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; Loading @@ -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); } /** Loading @@ -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); Loading
drivers/usb/gadget/pxa27x_udc.h +1 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading