mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-13 08:39:52 +00:00
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: Roland Stigge <stigge@antcom.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
4e177260e5
commit
252d8cec49
@ -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 = {
|
|||||||
.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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user