usb: gadget: fsl_udc_core: convert to udc_start/udc_stop

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>
This commit is contained in:
Felipe Balbi 2013-01-24 10:43:52 +02:00
parent 950b3c1dac
commit eb65796ef1

View File

@ -1254,9 +1254,10 @@ static int fsl_pullup(struct usb_gadget *gadget, int is_on)
return 0; return 0;
} }
static int fsl_start(struct usb_gadget_driver *driver, static int fsl_udc_start(struct usb_gadget *g,
int (*bind)(struct usb_gadget *, struct usb_gadget_driver *)); struct usb_gadget_driver *driver);
static int fsl_stop(struct usb_gadget_driver *driver); static int fsl_udc_stop(struct usb_gadget *g,
struct usb_gadget_driver *driver);
/* defined in gadget.h */ /* defined in gadget.h */
static struct usb_gadget_ops fsl_gadget_ops = { static struct usb_gadget_ops fsl_gadget_ops = {
.get_frame = fsl_get_frame, .get_frame = fsl_get_frame,
@ -1265,8 +1266,8 @@ static struct usb_gadget_ops fsl_gadget_ops = {
.vbus_session = fsl_vbus_session, .vbus_session = fsl_vbus_session,
.vbus_draw = fsl_vbus_draw, .vbus_draw = fsl_vbus_draw,
.pullup = fsl_pullup, .pullup = fsl_pullup,
.start = fsl_start, .udc_start = fsl_udc_start,
.stop = fsl_stop, .udc_stop = fsl_udc_stop,
}; };
/* Set protocol stall on ep0, protocol stall will automatically be cleared /* Set protocol stall on ep0, protocol stall will automatically be cleared
@ -1950,22 +1951,12 @@ static irqreturn_t fsl_udc_irq(int irq, void *_udc)
* Hook to gadget drivers * Hook to gadget drivers
* Called by initialization code of gadget drivers * Called by initialization code of gadget drivers
*----------------------------------------------------------------*/ *----------------------------------------------------------------*/
static int fsl_start(struct usb_gadget_driver *driver, static int fsl_udc_start(struct usb_gadget *g,
int (*bind)(struct usb_gadget *, struct usb_gadget_driver *)) struct usb_gadget_driver *driver)
{ {
int retval = -ENODEV; int retval = 0;
unsigned long flags = 0; unsigned long flags = 0;
if (!udc_controller)
return -ENODEV;
if (!driver || driver->max_speed < USB_SPEED_FULL
|| !bind || !driver->disconnect || !driver->setup)
return -EINVAL;
if (udc_controller->driver)
return -EBUSY;
/* lock is needed but whether should use this lock or another */ /* lock is needed but whether should use this lock or another */
spin_lock_irqsave(&udc_controller->lock, flags); spin_lock_irqsave(&udc_controller->lock, flags);
@ -1975,15 +1966,6 @@ static int fsl_start(struct usb_gadget_driver *driver,
udc_controller->gadget.dev.driver = &driver->driver; udc_controller->gadget.dev.driver = &driver->driver;
spin_unlock_irqrestore(&udc_controller->lock, flags); spin_unlock_irqrestore(&udc_controller->lock, flags);
/* bind udc driver to gadget driver */
retval = bind(&udc_controller->gadget, driver);
if (retval) {
VDBG("bind to %s --> %d", driver->driver.name, retval);
udc_controller->gadget.dev.driver = NULL;
udc_controller->driver = NULL;
goto out;
}
if (!IS_ERR_OR_NULL(udc_controller->transceiver)) { if (!IS_ERR_OR_NULL(udc_controller->transceiver)) {
/* Suspend the controller until OTG enable it */ /* Suspend the controller until OTG enable it */
udc_controller->stopped = 1; udc_controller->stopped = 1;
@ -2009,28 +1991,17 @@ static int fsl_start(struct usb_gadget_driver *driver,
udc_controller->ep0_state = WAIT_FOR_SETUP; udc_controller->ep0_state = WAIT_FOR_SETUP;
udc_controller->ep0_dir = 0; udc_controller->ep0_dir = 0;
} }
printk(KERN_INFO "%s: bind to driver %s\n",
udc_controller->gadget.name, driver->driver.name);
out:
if (retval)
printk(KERN_WARNING "gadget driver register failed %d\n",
retval);
return retval; return retval;
} }
/* Disconnect from gadget driver */ /* Disconnect from gadget driver */
static int fsl_stop(struct usb_gadget_driver *driver) static int fsl_udc_stop(struct usb_gadget *g,
struct usb_gadget_driver *driver)
{ {
struct fsl_ep *loop_ep; struct fsl_ep *loop_ep;
unsigned long flags; unsigned long flags;
if (!udc_controller)
return -ENODEV;
if (!driver || driver != udc_controller->driver || !driver->unbind)
return -EINVAL;
if (!IS_ERR_OR_NULL(udc_controller->transceiver)) if (!IS_ERR_OR_NULL(udc_controller->transceiver))
otg_set_peripheral(udc_controller->transceiver->otg, NULL); otg_set_peripheral(udc_controller->transceiver->otg, NULL);
@ -2051,16 +2022,9 @@ static int fsl_stop(struct usb_gadget_driver *driver)
nuke(loop_ep, -ESHUTDOWN); nuke(loop_ep, -ESHUTDOWN);
spin_unlock_irqrestore(&udc_controller->lock, flags); spin_unlock_irqrestore(&udc_controller->lock, flags);
/* report disconnect; the controller is already quiesced */
driver->disconnect(&udc_controller->gadget);
/* unbind gadget and unhook driver. */
driver->unbind(&udc_controller->gadget);
udc_controller->gadget.dev.driver = NULL; udc_controller->gadget.dev.driver = NULL;
udc_controller->driver = NULL; udc_controller->driver = NULL;
printk(KERN_WARNING "unregistered gadget driver '%s'\n",
driver->driver.name);
return 0; return 0;
} }