[PATCH] usb: ehci: call platform init before ehci reset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On i.MX25 platform init sets up things like the polarity of the
overcurrent pin. If the reset default value is still wrong at ehci_reset
time, this results in an overcurrent event being pending in the hardware
even if the pin is actually in it's inactive level. To prevent this call
platform init before ehci_reset().

Without this change barebox fails to correctly handle the imagined
overcurrent event resulting in the inability to access the contents of
an USB thumb drive. So there must be another problem somewhere, but I
didn't debug that. The change introduced in this patch works around this
problem but is correct on its own anyhow.

Note there is a chance that other platforms rely on the previous order,
I'm not aware of actual problems though.

The problem was debugged with Michael Grzeschik, thanks to him for his
valuable aid.

Signed-off-by: Michael Grzeschik <m.grzeschik@xxxxxxxxxxxxxx>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx>
---
 drivers/usb/host/ehci-hcd.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 9bbdda365c01..18ff6b589773 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -801,16 +801,16 @@ static int ehci_init(struct usb_host *host)
 
 	ehci_halt(ehci);
 
-	/* EHCI spec section 4.1 */
-	if (ehci_reset(ehci) != 0)
-		return -1;
-
 	if (ehci->init) {
 		ret = ehci->init(ehci->drvdata);
 		if (ret)
 			return ret;
 	}
 
+	/* EHCI spec section 4.1 */
+	if (ehci_reset(ehci) != 0)
+		return -1;
+
 	memset(ehci->qh_list, 0, sizeof(struct QH) * NUM_TD);
 
 	ehci->qh_list->qh_link = cpu_to_hc32((uint32_t)ehci->qh_list | QH_LINK_TYPE_QH);
-- 
2.19.0


_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox




[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux