aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Kuzmichev <vkuzmichev@mvista.com>2011-02-11 18:18:31 +0300
committerRemy Bohmer <linux@bohmer.net>2011-02-19 20:32:36 +0100
commitb3649f3bbfdb2686eceb40a629cef8d4d257f5fa (patch)
tree8b7d947e655a37f888a7bc55793c5c1b45264891
parent9b70e00773f0c76a243816b8ec134c3c7dacd531 (diff)
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>
-rw-r--r--drivers/usb/gadget/ether.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 638486998..0e7549d6b 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(&eth_driver);
}