diff options
author | Vitaly Kuzmichev <vkuzmichev@mvista.com> | 2011-02-11 18:18:31 +0300 |
---|---|---|
committer | Remy Bohmer <linux@bohmer.net> | 2011-02-19 20:32:36 +0100 |
commit | b3649f3bbfdb2686eceb40a629cef8d4d257f5fa (patch) | |
tree | 8b7d947e655a37f888a7bc55793c5c1b45264891 /drivers/usb/gadget | |
parent | 9b70e00773f0c76a243816b8ec134c3c7dacd531 (diff) | |
download | talos-obmc-uboot-b3649f3bbfdb2686eceb40a629cef8d4d257f5fa.tar.gz talos-obmc-uboot-b3649f3bbfdb2686eceb40a629cef8d4d257f5fa.zip |
USB-CDC: handle interrupt after dropped pullup
Disconnecting USB gadget with pending interrupt may cause its wrong
handling in the next time when interface will be started again
(especially actual for RNDIS). This interrupt may force the gadget
to queue unexpected response before setup stage.
Despite the fact that such interrupt handled after dropped pullup
also may add pending response, this will not bring to any issues due to
usb_ep_disable (which clears the queue) called on gadget unregistering.
Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r-- | drivers/usb/gadget/ether.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 638486998d..0e7549d6b1 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -1928,6 +1928,13 @@ void usb_eth_halt(struct eth_device *netdev) return; usb_gadget_disconnect(dev->gadget); + + /* Clear pending interrupt */ + if (dev->network_started) { + usb_gadget_handle_interrupts(); + dev->network_started = 0; + } + usb_gadget_unregister_driver(ð_driver); } |