Commit 252d8cec authored by Roland Stigge's avatar Roland Stigge Committed by Felipe Balbi

usb: gadget: lpc32xx_udc: Port to new start/stop interface

This patch adjusts the LPC32xx USB gadget driver to the new udc_start /
udc_stop interface.
Signed-off-by: default avatarRoland Stigge <stigge@antcom.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 4e177260
...@@ -2599,9 +2599,8 @@ static int lpc32xx_pullup(struct usb_gadget *gadget, int is_on) ...@@ -2599,9 +2599,8 @@ static int lpc32xx_pullup(struct usb_gadget *gadget, int is_on)
return 0; return 0;
} }
static int lpc32xx_start(struct usb_gadget_driver *driver, static int lpc32xx_start(struct usb_gadget *, struct usb_gadget_driver *);
int (*bind)(struct usb_gadget *)); static int lpc32xx_stop(struct usb_gadget *, struct usb_gadget_driver *);
static int lpc32xx_stop(struct usb_gadget_driver *driver);
static const struct usb_gadget_ops lpc32xx_udc_ops = { static const struct usb_gadget_ops lpc32xx_udc_ops = {
.get_frame = lpc32xx_get_frame, .get_frame = lpc32xx_get_frame,
...@@ -2609,8 +2608,8 @@ static const struct usb_gadget_ops lpc32xx_udc_ops = { ...@@ -2609,8 +2608,8 @@ static const struct usb_gadget_ops lpc32xx_udc_ops = {
.set_selfpowered = lpc32xx_set_selfpowered, .set_selfpowered = lpc32xx_set_selfpowered,
.vbus_session = lpc32xx_vbus_session, .vbus_session = lpc32xx_vbus_session,
.pullup = lpc32xx_pullup, .pullup = lpc32xx_pullup,
.start = lpc32xx_start, .udc_start = lpc32xx_start,
.stop = lpc32xx_stop, .udc_stop = lpc32xx_stop,
}; };
static void nop_release(struct device *dev) static void nop_release(struct device *dev)
...@@ -2987,14 +2986,13 @@ static irqreturn_t lpc32xx_usb_vbus_irq(int irq, void *_udc) ...@@ -2987,14 +2986,13 @@ static irqreturn_t lpc32xx_usb_vbus_irq(int irq, void *_udc)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int lpc32xx_start(struct usb_gadget_driver *driver, static int lpc32xx_start(struct usb_gadget *gadget,
int (*bind)(struct usb_gadget *)) struct usb_gadget_driver *driver)
{ {
struct lpc32xx_udc *udc = &controller; struct lpc32xx_udc *udc = to_udc(gadget);
int retval, i; int i;
if (!driver || driver->max_speed < USB_SPEED_FULL || if (!driver || driver->max_speed < USB_SPEED_FULL || !driver->setup) {
!bind || !driver->setup) {
dev_err(udc->dev, "bad parameter.\n"); dev_err(udc->dev, "bad parameter.\n");
return -EINVAL; return -EINVAL;
} }
...@@ -3011,18 +3009,6 @@ static int lpc32xx_start(struct usb_gadget_driver *driver, ...@@ -3011,18 +3009,6 @@ static int lpc32xx_start(struct usb_gadget_driver *driver,
udc->selfpowered = 1; udc->selfpowered = 1;
udc->vbus = 0; udc->vbus = 0;
retval = bind(&udc->gadget);
if (retval) {
dev_err(udc->dev, "bind() returned %d\n", retval);
udc->enabled = 0;
udc->selfpowered = 0;
udc->driver = NULL;
udc->gadget.dev.driver = NULL;
return retval;
}
dev_dbg(udc->dev, "bound to %s\n", driver->driver.name);
/* Force VBUS process once to check for cable insertion */ /* Force VBUS process once to check for cable insertion */
udc->last_vbus = udc->vbus = 0; udc->last_vbus = udc->vbus = 0;
schedule_work(&udc->vbus_job); schedule_work(&udc->vbus_job);
...@@ -3034,22 +3020,19 @@ static int lpc32xx_start(struct usb_gadget_driver *driver, ...@@ -3034,22 +3020,19 @@ static int lpc32xx_start(struct usb_gadget_driver *driver,
return 0; return 0;
} }
static int lpc32xx_stop(struct usb_gadget_driver *driver) static int lpc32xx_stop(struct usb_gadget *gadget,
struct usb_gadget_driver *driver)
{ {
int i; int i;
struct lpc32xx_udc *udc = &controller; struct lpc32xx_udc *udc = to_udc(gadget);
if (!driver || driver != udc->driver || !driver->unbind) if (!driver || driver != udc->driver)
return -EINVAL; return -EINVAL;
/* Disable USB pullup */
isp1301_pullup_enable(udc, 0, 1);
for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++) for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++)
disable_irq(udc->udp_irq[i]); disable_irq(udc->udp_irq[i]);
if (udc->clocked) { if (udc->clocked) {
spin_lock(&udc->lock); spin_lock(&udc->lock);
stop_activity(udc); stop_activity(udc);
spin_unlock(&udc->lock); spin_unlock(&udc->lock);
...@@ -3069,20 +3052,16 @@ static int lpc32xx_stop(struct usb_gadget_driver *driver) ...@@ -3069,20 +3052,16 @@ static int lpc32xx_stop(struct usb_gadget_driver *driver)
} }
udc->enabled = 0; udc->enabled = 0;
pullup(udc, 0);
driver->unbind(&udc->gadget);
udc->gadget.dev.driver = NULL; udc->gadget.dev.driver = NULL;
udc->driver = NULL; udc->driver = NULL;
dev_dbg(udc->dev, "unbound from %s\n", driver->driver.name);
return 0; return 0;
} }
static void lpc32xx_udc_shutdown(struct platform_device *dev) static void lpc32xx_udc_shutdown(struct platform_device *dev)
{ {
/* Force disconnect on reboot */ /* Force disconnect on reboot */
struct lpc32xx_udc *udc = &controller; struct lpc32xx_udc *udc = platform_get_drvdata(dev);
pullup(udc, 0); pullup(udc, 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment