usb: gadget: omap_udc: 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:
parent
3381fb602d
commit
1bf0cf6040
@ -1309,9 +1309,10 @@ static int omap_pullup(struct usb_gadget *gadget, int is_on)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap_udc_start(struct usb_gadget_driver *driver,
|
static int omap_udc_start(struct usb_gadget *g,
|
||||||
int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
|
struct usb_gadget_driver *driver)
|
||||||
static int omap_udc_stop(struct usb_gadget_driver *driver);
|
static int omap_udc_stop(struct usb_gadget *g,
|
||||||
|
struct usb_gadget_driver *driver);
|
||||||
|
|
||||||
static struct usb_gadget_ops omap_gadget_ops = {
|
static struct usb_gadget_ops omap_gadget_ops = {
|
||||||
.get_frame = omap_get_frame,
|
.get_frame = omap_get_frame,
|
||||||
@ -1320,8 +1321,8 @@ static struct usb_gadget_ops omap_gadget_ops = {
|
|||||||
.vbus_session = omap_vbus_session,
|
.vbus_session = omap_vbus_session,
|
||||||
.vbus_draw = omap_vbus_draw,
|
.vbus_draw = omap_vbus_draw,
|
||||||
.pullup = omap_pullup,
|
.pullup = omap_pullup,
|
||||||
.start = omap_udc_start,
|
.udc_start = omap_udc_start,
|
||||||
.stop = omap_udc_stop,
|
.udc_stop = omap_udc_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
@ -2041,28 +2042,15 @@ static inline int machine_without_vbus_sense(void)
|
|||||||
|| cpu_is_omap7xx();
|
|| cpu_is_omap7xx();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap_udc_start(struct usb_gadget_driver *driver,
|
static int omap_udc_start(struct usb_gadget *g,
|
||||||
int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
|
struct usb_gadget_driver *driver)
|
||||||
{
|
{
|
||||||
int status = -ENODEV;
|
int status = -ENODEV;
|
||||||
struct omap_ep *ep;
|
struct omap_ep *ep;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
/* basic sanity tests */
|
|
||||||
if (!udc)
|
|
||||||
return -ENODEV;
|
|
||||||
if (!driver
|
|
||||||
/* FIXME if otg, check: driver->is_otg */
|
|
||||||
|| driver->max_speed < USB_SPEED_FULL
|
|
||||||
|| !bind || !driver->setup)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&udc->lock, flags);
|
spin_lock_irqsave(&udc->lock, flags);
|
||||||
if (udc->driver) {
|
|
||||||
spin_unlock_irqrestore(&udc->lock, flags);
|
|
||||||
return -EBUSY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* reset state */
|
/* reset state */
|
||||||
list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
|
list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
|
||||||
ep->irqs = 0;
|
ep->irqs = 0;
|
||||||
@ -2084,15 +2072,6 @@ static int omap_udc_start(struct usb_gadget_driver *driver,
|
|||||||
if (udc->dc_clk != NULL)
|
if (udc->dc_clk != NULL)
|
||||||
omap_udc_enable_clock(1);
|
omap_udc_enable_clock(1);
|
||||||
|
|
||||||
status = bind(&udc->gadget, driver);
|
|
||||||
if (status) {
|
|
||||||
DBG("bind to %s --> %d\n", driver->driver.name, status);
|
|
||||||
udc->gadget.dev.driver = NULL;
|
|
||||||
udc->driver = NULL;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
DBG("bound to driver %s\n", driver->driver.name);
|
|
||||||
|
|
||||||
omap_writew(UDC_IRQ_SRC_MASK, UDC_IRQ_SRC);
|
omap_writew(UDC_IRQ_SRC_MASK, UDC_IRQ_SRC);
|
||||||
|
|
||||||
/* connect to bus through transceiver */
|
/* connect to bus through transceiver */
|
||||||
@ -2124,19 +2103,16 @@ static int omap_udc_start(struct usb_gadget_driver *driver,
|
|||||||
done:
|
done:
|
||||||
if (udc->dc_clk != NULL)
|
if (udc->dc_clk != NULL)
|
||||||
omap_udc_enable_clock(0);
|
omap_udc_enable_clock(0);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap_udc_stop(struct usb_gadget_driver *driver)
|
static int omap_udc_stop(struct usb_gadget *g,
|
||||||
|
struct usb_gadget_driver *driver)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int status = -ENODEV;
|
int status = -ENODEV;
|
||||||
|
|
||||||
if (!udc)
|
|
||||||
return -ENODEV;
|
|
||||||
if (!driver || driver != udc->driver || !driver->unbind)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (udc->dc_clk != NULL)
|
if (udc->dc_clk != NULL)
|
||||||
omap_udc_enable_clock(1);
|
omap_udc_enable_clock(1);
|
||||||
|
|
||||||
@ -2152,13 +2128,12 @@ static int omap_udc_stop(struct usb_gadget_driver *driver)
|
|||||||
udc_quiesce(udc);
|
udc_quiesce(udc);
|
||||||
spin_unlock_irqrestore(&udc->lock, flags);
|
spin_unlock_irqrestore(&udc->lock, flags);
|
||||||
|
|
||||||
driver->unbind(&udc->gadget);
|
|
||||||
udc->gadget.dev.driver = NULL;
|
udc->gadget.dev.driver = NULL;
|
||||||
udc->driver = NULL;
|
udc->driver = NULL;
|
||||||
|
|
||||||
if (udc->dc_clk != NULL)
|
if (udc->dc_clk != NULL)
|
||||||
omap_udc_enable_clock(0);
|
omap_udc_enable_clock(0);
|
||||||
DBG("unregistered driver '%s'\n", driver->driver.name);
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user