Skip to content

Commit

Permalink
usb: gadget: m66592-udc: 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 eb65796 commit 3381fb6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 51 deletions.
70 changes: 19 additions & 51 deletions drivers/usb/gadget/m66592-udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1463,42 +1463,16 @@ static struct usb_ep_ops m66592_ep_ops = {
};

/*-------------------------------------------------------------------------*/
static struct m66592 *the_controller;

static int m66592_start(struct usb_gadget_driver *driver,
int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
static int m66592_udc_start(struct usb_gadget *g,
struct usb_gadget_driver *driver)
{
struct m66592 *m66592 = the_controller;
int retval;

if (!driver
|| driver->max_speed < USB_SPEED_HIGH
|| !bind
|| !driver->setup)
return -EINVAL;
if (!m66592)
return -ENODEV;
if (m66592->driver)
return -EBUSY;
struct m66592 *m66592 = to_m66592(g);

/* hook up the driver */
driver->driver.bus = NULL;
m66592->driver = driver;
m66592->gadget.dev.driver = &driver->driver;

retval = device_add(&m66592->gadget.dev);
if (retval) {
pr_err("device_add error (%d)\n", retval);
goto error;
}

retval = bind(&m66592->gadget, driver);
if (retval) {
pr_err("bind to driver error (%d)\n", retval);
device_del(&m66592->gadget.dev);
goto error;
}

m66592_bset(m66592, M66592_VBSE | M66592_URST, M66592_INTENB0);
if (m66592_read(m66592, M66592_INTSTS0) & M66592_VBSTS) {
m66592_start_xclock(m66592);
Expand All @@ -1510,26 +1484,12 @@ static int m66592_start(struct usb_gadget_driver *driver,
}

return 0;

error:
m66592->driver = NULL;
m66592->gadget.dev.driver = NULL;

return retval;
}

static int m66592_stop(struct usb_gadget_driver *driver)
static int m66592_udc_stop(struct usb_gadget *g,
struct usb_gadget_driver *driver)
{
struct m66592 *m66592 = the_controller;
unsigned long flags;

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

spin_lock_irqsave(&m66592->lock, flags);
if (m66592->gadget.speed != USB_SPEED_UNKNOWN)
m66592_usb_disconnect(m66592);
spin_unlock_irqrestore(&m66592->lock, flags);
struct m66592 *m66592 = to_m66592(g);

m66592_bclr(m66592, M66592_VBSE | M66592_URST, M66592_INTENB0);

Expand All @@ -1539,8 +1499,8 @@ static int m66592_stop(struct usb_gadget_driver *driver)
init_controller(m66592);
disable_controller(m66592);

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

return 0;
}

Expand Down Expand Up @@ -1568,8 +1528,8 @@ static int m66592_pullup(struct usb_gadget *gadget, int is_on)

static struct usb_gadget_ops m66592_gadget_ops = {
.get_frame = m66592_get_frame,
.start = m66592_start,
.stop = m66592_stop,
.udc_start = m66592_udc_start,
.udc_stop = m66592_udc_stop,
.pullup = m66592_pullup,
};

Expand All @@ -1578,6 +1538,7 @@ static int __exit m66592_remove(struct platform_device *pdev)
struct m66592 *m66592 = dev_get_drvdata(&pdev->dev);

usb_del_gadget_udc(&m66592->gadget);
device_del(&m66592->gadget.dev);

del_timer_sync(&m66592->timer);
iounmap(m66592->reg);
Expand Down Expand Up @@ -1706,15 +1667,19 @@ static int __init m66592_probe(struct platform_device *pdev)
m66592->pipenum2ep[0] = &m66592->ep[0];
m66592->epaddr2ep[0] = &m66592->ep[0];

the_controller = m66592;

m66592->ep0_req = m66592_alloc_request(&m66592->ep[0].ep, GFP_KERNEL);
if (m66592->ep0_req == NULL)
goto clean_up3;
m66592->ep0_req->complete = nop_completion;

init_controller(m66592);

ret = device_add(&m66592->gadget.dev);
if (ret) {
pr_err("device_add error (%d)\n", ret);
goto err_device_add;
}

ret = usb_add_gadget_udc(&pdev->dev, &m66592->gadget);
if (ret)
goto err_add_udc;
Expand All @@ -1723,6 +1688,9 @@ static int __init m66592_probe(struct platform_device *pdev)
return 0;

err_add_udc:
device_del(&m66592->gadget.dev);

err_device_add:
m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req);

clean_up3:
Expand Down
1 change: 1 addition & 0 deletions drivers/usb/gadget/m66592-udc.h
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,7 @@ struct m66592 {
int isochronous;
int num_dma;
};
#define to_m66592(g) (container_of((g), struct m66592, gadget))

#define gadget_to_m66592(_gadget) container_of(_gadget, struct m66592, gadget)
#define m66592_to_gadget(m66592) (&m66592->gadget)
Expand Down

0 comments on commit 3381fb6

Please sign in to comment.