aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Vorontsov <avorontsov@ru.mvista.com>2008-12-25 09:15:07 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2009-02-09 14:19:47 -0500
commit2247818a329687f30d1e5c3a62efc33d07c47522 (patch)
tree30ae140d233f6f84065e33d913f5ed675d3d88d9
parenta30551db66afa1b53a4fa7ceadddb7122bdcf491 (diff)
USB: fsl_qe_udc: Fix QE USB controller initialization
qe_udc_reg_init() leaves the USB controller enabled before muram memory initialized. Sometimes the uninitialized muram memory confuses the controller, and it start sending the busy interrupts. Fix this by disabling the controller, it will be enabled later by the gadget driver, at bind time. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/usb/gadget/fsl_qe_udc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c
index 064582fb6a87..1319f8f7acba 100644
--- a/drivers/usb/gadget/fsl_qe_udc.c
+++ b/drivers/usb/gadget/fsl_qe_udc.c
@@ -2452,8 +2452,12 @@ static int __devinit qe_udc_reg_init(struct qe_udc *udc)
2452 struct usb_ctlr __iomem *qe_usbregs; 2452 struct usb_ctlr __iomem *qe_usbregs;
2453 qe_usbregs = udc->usb_regs; 2453 qe_usbregs = udc->usb_regs;
2454 2454
2455 /* Init the usb register */ 2455 /* Spec says that we must enable the USB controller to change mode. */
2456 out_8(&qe_usbregs->usb_usmod, 0x01); 2456 out_8(&qe_usbregs->usb_usmod, 0x01);
2457 /* Mode changed, now disable it, since muram isn't initialized yet. */
2458 out_8(&qe_usbregs->usb_usmod, 0x00);
2459
2460 /* Initialize the rest. */
2457 out_be16(&qe_usbregs->usb_usbmr, 0); 2461 out_be16(&qe_usbregs->usb_usbmr, 0);
2458 out_8(&qe_usbregs->usb_uscom, 0); 2462 out_8(&qe_usbregs->usb_uscom, 0);
2459 out_be16(&qe_usbregs->usb_usber, USBER_ALL_CLEAR); 2463 out_be16(&qe_usbregs->usb_usber, USBER_ALL_CLEAR);