blob: 5e42d2fe6fedb4088898d2a9094bc5a5e2296460 [file] [log] [blame]
From 05ac3b2476dd66ba26622d437c2517dd3ac389f1 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 cef80e930db9..90f48eb32d93 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -670,7 +670,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.7.3