diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2014-11-06 01:27:57 -0500 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2014-11-10 18:19:35 -0500 |
commit | 5ca1ccdaa88ac15d1468c5e8bb40885dc6b8a364 (patch) | |
tree | f8ed17f5af82e13554826232b2072f2a1033b893 /drivers/usb/gadget | |
parent | b611e424f1ad189409dde50fe950eb8c05f75cab (diff) |
usb: gadget: net2272: use udc-core's reset notifier
This patch adds support for the new udc-core reset notifier to the
net2272 driver.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r-- | drivers/usb/gadget/udc/net2272.c | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/drivers/usb/gadget/udc/net2272.c b/drivers/usb/gadget/udc/net2272.c index ab3a73950d8f..3a90856625f2 100644 --- a/drivers/usb/gadget/udc/net2272.c +++ b/drivers/usb/gadget/udc/net2272.c | |||
@@ -1982,17 +1982,42 @@ net2272_handle_stat1_irqs(struct net2272 *dev, u8 stat) | |||
1982 | mask = (1 << USB_HIGH_SPEED) | (1 << USB_FULL_SPEED); | 1982 | mask = (1 << USB_HIGH_SPEED) | (1 << USB_FULL_SPEED); |
1983 | 1983 | ||
1984 | if (stat & tmp) { | 1984 | if (stat & tmp) { |
1985 | bool reset = false; | ||
1986 | bool disconnect = false; | ||
1987 | |||
1988 | /* | ||
1989 | * Ignore disconnects and resets if the speed hasn't been set. | ||
1990 | * VBUS can bounce and there's always an initial reset. | ||
1991 | */ | ||
1985 | net2272_write(dev, IRQSTAT1, tmp); | 1992 | net2272_write(dev, IRQSTAT1, tmp); |
1986 | if ((((stat & (1 << ROOT_PORT_RESET_INTERRUPT)) && | 1993 | if (dev->gadget.speed != USB_SPEED_UNKNOWN) { |
1987 | ((net2272_read(dev, USBCTL1) & mask) == 0)) | 1994 | if ((stat & (1 << VBUS_INTERRUPT)) && |
1988 | || ((net2272_read(dev, USBCTL1) & (1 << VBUS_PIN)) | 1995 | (net2272_read(dev, USBCTL1) & |
1989 | == 0)) | 1996 | (1 << VBUS_PIN)) == 0) { |
1990 | && (dev->gadget.speed != USB_SPEED_UNKNOWN)) { | 1997 | disconnect = true; |
1991 | dev_dbg(dev->dev, "disconnect %s\n", | 1998 | dev_dbg(dev->dev, "disconnect %s\n", |
1992 | dev->driver->driver.name); | 1999 | dev->driver->driver.name); |
1993 | stop_activity(dev, dev->driver); | 2000 | } else if ((stat & (1 << ROOT_PORT_RESET_INTERRUPT)) && |
1994 | net2272_ep0_start(dev); | 2001 | (net2272_read(dev, USBCTL1) & mask) |
1995 | return; | 2002 | == 0) { |
2003 | reset = true; | ||
2004 | dev_dbg(dev->dev, "reset %s\n", | ||
2005 | dev->driver->driver.name); | ||
2006 | } | ||
2007 | |||
2008 | if (disconnect || reset) { | ||
2009 | stop_activity(dev, dev->driver); | ||
2010 | net2272_ep0_start(dev); | ||
2011 | spin_unlock(&dev->lock); | ||
2012 | if (reset) | ||
2013 | usb_gadget_udc_reset | ||
2014 | (&dev->gadget, dev->driver); | ||
2015 | else | ||
2016 | (dev->driver->disconnect) | ||
2017 | (&dev->gadget); | ||
2018 | spin_lock(&dev->lock); | ||
2019 | return; | ||
2020 | } | ||
1996 | } | 2021 | } |
1997 | stat &= ~tmp; | 2022 | stat &= ~tmp; |
1998 | 2023 | ||