blob: 6e1430e75d6697589e7301e357e432e199d01847 [file] [log] [blame]
From 855a1108e1dc8f18121e16fce490c590c4a51bf8 Mon Sep 17 00:00:00 2001
From: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
Date: Mon, 10 Mar 2014 13:02:13 -0300
Subject: [PATCH 3/7] xhci: do not halt the secondary HCD
We can't halt the secondary HCD, because it's also the primary HCD,
which will cause problems if we have devices attached to the primary
HCD, like a keyboard.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
drivers/usb/host/xhci.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 0e66476d4866..ce7b10506bac 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -671,7 +671,18 @@ static void xhci_only_stop_hcd(struct usb_hcd *hcd)
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
spin_lock_irq(&xhci->lock);
- xhci_halt(xhci);
+ /*
+ * We can't halt the secondary HCD, because it's also the
+ * primary HCD, which will cause problems if we have devices
+ * attached to the primary HCD, like a keyboard.
+ */
+ /*xhci_halt(xhci);*/
+
+ /* The shared_hcd is going to be deallocated shortly (the USB core only
+ * calls this function when allocation fails in usb_add_hcd(), or
+ * usb_remove_hcd() is called). So we need to unset xHCI's pointer.
+ */
+ xhci->shared_hcd = NULL;
spin_unlock_irq(&xhci->lock);
}
--
2.8.1