Skip to content

Commit

Permalink
usb: gadget: amd5536udc: convert to udc_start/udc_stop
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Felipe Balbi committed Jan 24, 2013
1 parent aac16b6 commit 45005f6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 45 deletions.
59 changes: 14 additions & 45 deletions drivers/usb/gadget/amd5536udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1400,15 +1400,16 @@ static int udc_wakeup(struct usb_gadget *gadget)
return 0;
}

static int amd5536_start(struct usb_gadget_driver *driver,
int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
static int amd5536_stop(struct usb_gadget_driver *driver);
static int amd5536_udc_start(struct usb_gadget *g,
struct usb_gadget_driver *driver);
static int amd5536_udc_stop(struct usb_gadget *g,
struct usb_gadget_driver *driver);
/* gadget operations */
static const struct usb_gadget_ops udc_ops = {
.wakeup = udc_wakeup,
.get_frame = udc_get_frame,
.start = amd5536_start,
.stop = amd5536_stop,
.udc_start = amd5536_udc_start,
.udc_stop = amd5536_udc_stop,
};

/* Setups endpoint parameters, adds endpoints to linked list */
Expand Down Expand Up @@ -1913,41 +1914,22 @@ static int setup_ep0(struct udc *dev)
}

/* Called by gadget driver to register itself */
static int amd5536_start(struct usb_gadget_driver *driver,
int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
static int amd5536_udc_start(struct usb_gadget *g,
struct usb_gadget_driver *driver)
{
struct udc *dev = udc;
int retval;
struct udc *dev = to_amd5536_udc(g);
u32 tmp;

if (!driver || !bind || !driver->setup
|| driver->max_speed < USB_SPEED_HIGH)
return -EINVAL;
if (!dev)
return -ENODEV;
if (dev->driver)
return -EBUSY;

driver->driver.bus = NULL;
dev->driver = driver;
dev->gadget.dev.driver = &driver->driver;

retval = bind(&dev->gadget, driver);

/* Some gadget drivers use both ep0 directions.
* NOTE: to gadget driver, ep0 is just one endpoint...
*/
dev->ep[UDC_EP0OUT_IX].ep.driver_data =
dev->ep[UDC_EP0IN_IX].ep.driver_data;

if (retval) {
DBG(dev, "binding to %s returning %d\n",
driver->driver.name, retval);
dev->driver = NULL;
dev->gadget.dev.driver = NULL;
return retval;
}

/* get ready for ep0 traffic */
setup_ep0(dev);

Expand All @@ -1969,38 +1951,28 @@ __acquires(dev->lock)
{
int tmp;

if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
spin_unlock(&dev->lock);
driver->disconnect(&dev->gadget);
spin_lock(&dev->lock);
}

/* empty queues and init hardware */
udc_basic_init(dev);

for (tmp = 0; tmp < UDC_EP_NUM; tmp++)
empty_req_queue(&dev->ep[tmp]);

udc_setup_endpoints(dev);
}

/* Called by gadget driver to unregister itself */
static int amd5536_stop(struct usb_gadget_driver *driver)
static int amd5536_udc_stop(struct usb_gadget *g,
struct usb_gadget_driver *driver)
{
struct udc *dev = udc;
unsigned long flags;
struct udc *dev = to_amd5536_udc(g);
unsigned long flags;
u32 tmp;

if (!dev)
return -ENODEV;
if (!driver || driver != dev->driver || !driver->unbind)
return -EINVAL;

spin_lock_irqsave(&dev->lock, flags);
udc_mask_unused_interrupts(dev);
shutdown(dev, driver);
spin_unlock_irqrestore(&dev->lock, flags);

driver->unbind(&dev->gadget);
dev->gadget.dev.driver = NULL;
dev->driver = NULL;

Expand All @@ -2009,9 +1981,6 @@ static int amd5536_stop(struct usb_gadget_driver *driver)
tmp |= AMD_BIT(UDC_DEVCTL_SD);
writel(tmp, &dev->regs->ctl);


DBG(dev, "%s: unregistered\n", driver->driver.name);

return 0;
}

Expand Down
2 changes: 2 additions & 0 deletions drivers/usb/gadget/amd5536udc.h
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@ struct udc {
u16 cur_alt;
};

#define to_amd5536_udc(g) (container_of((g), struct udc, gadget))

/* setup request data */
union udc_setup_data {
u32 data[2];
Expand Down

0 comments on commit 45005f6

Please sign in to comment.