From 25be896b9fed6f3dbaf7787d1ebbe3152664495e Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Tue, 17 Feb 2009 22:24:00 +0000 Subject: 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 --- firmware/target/arm/usb-drv-arc.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'firmware') 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) sleep(HZ/20); REG_USBCMD |= USBCMD_CTRL_RESET; while (REG_USBCMD & USBCMD_CTRL_RESET); + +#if CONFIG_CPU == PP5022 || CONFIG_CPU == PP5024 + /* On a CPU which identifies as a PP5022, this + initialization must be done after USB is reset. + */ + outl(inl(0x70000060) | 0xF, 0x70000060); + outl(inl(0x70000028) | 0x10000, 0x70000028); + outl(inl(0x70000028) & ~0x10000, 0x70000028); + outl(inl(0x70000060) & ~0x20, 0x70000060); + udelay(10); + outl(inl(0x70000060) | 0x20, 0x70000060); + udelay(10); + outl((inl(0x70000060) & ~0xF) | 4, 0x70000060); + udelay(10); + outl(inl(0x70000060) & ~0x20, 0x70000060); + udelay(10); + outl(inl(0x70000060) & ~0xF, 0x70000060); + udelay(10); + outl(inl(0x70000060) | 0x20, 0x70000060); + udelay(10); + outl(inl(0x70000028) | 0x800, 0x70000028); + outl(inl(0x70000028) & ~0x800, 0x70000028); + while (inl(0x70000028) & 0x80); +#endif } /* One-time driver startup init */ -- cgit v1.2.3