summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2009-02-17 22:24:00 +0000
committerFrank Gevaerts <frank@gevaerts.be>2009-02-17 22:24:00 +0000
commit25be896b9fed6f3dbaf7787d1ebbe3152664495e (patch)
treef986607a45c7993c450c218e7f1b863c12f7482a
parent00baccd945d3dc2e561c7a982fe77f9755777ebe (diff)
downloadrockbox-25be896b9fed6f3dbaf7787d1ebbe3152664495e.tar.gz
rockbox-25be896b9fed6f3dbaf7787d1ebbe3152664495e.zip
PP5022/PP5024-specific USB init which may fix "signal quality issues"
FS#9923 by Boris Gjenero (dreamlayers) This is reasonably likely to finally solve the USB issues on PP5022 and PP5024, but more testing is needed before USB will be considered stable enough to be enabled by default git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20032 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/usb-drv-arc.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/firmware/target/arm/usb-drv-arc.c b/firmware/target/arm/usb-drv-arc.c
index 5a08acb348..af97e3e174 100644
--- a/firmware/target/arm/usb-drv-arc.c
+++ b/firmware/target/arm/usb-drv-arc.c
@@ -388,6 +388,30 @@ void usb_drv_reset(void)
388 sleep(HZ/20); 388 sleep(HZ/20);
389 REG_USBCMD |= USBCMD_CTRL_RESET; 389 REG_USBCMD |= USBCMD_CTRL_RESET;
390 while (REG_USBCMD & USBCMD_CTRL_RESET); 390 while (REG_USBCMD & USBCMD_CTRL_RESET);
391
392#if CONFIG_CPU == PP5022 || CONFIG_CPU == PP5024
393 /* On a CPU which identifies as a PP5022, this
394 initialization must be done after USB is reset.
395 */
396 outl(inl(0x70000060) | 0xF, 0x70000060);
397 outl(inl(0x70000028) | 0x10000, 0x70000028);
398 outl(inl(0x70000028) & ~0x10000, 0x70000028);
399 outl(inl(0x70000060) & ~0x20, 0x70000060);
400 udelay(10);
401 outl(inl(0x70000060) | 0x20, 0x70000060);
402 udelay(10);
403 outl((inl(0x70000060) & ~0xF) | 4, 0x70000060);
404 udelay(10);
405 outl(inl(0x70000060) & ~0x20, 0x70000060);
406 udelay(10);
407 outl(inl(0x70000060) & ~0xF, 0x70000060);
408 udelay(10);
409 outl(inl(0x70000060) | 0x20, 0x70000060);
410 udelay(10);
411 outl(inl(0x70000028) | 0x800, 0x70000028);
412 outl(inl(0x70000028) & ~0x800, 0x70000028);
413 while (inl(0x70000028) & 0x80);
414#endif
391} 415}
392 416
393/* One-time driver startup init */ 417/* One-time driver startup init */