PP502x USB: It seems r29087 introduced additional parasitic current consumption after USB disconnect. So, reinitialize the controller just like at startup when disabling USB, which also happens to fix FS#10719.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29094 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2011-01-20 06:41:05 +00:00
parent 2565d37c67
commit 1b779e0461

View file

@ -106,19 +106,7 @@
#define USB_GPIO_INT_CLR GPIO_INT_CLR(USB_GPIO)
#define USB_GPIO_HI_INT_MASK GPIO_HI_INT_MASK(USB_GPIO)
/* Enable raw status pin read only - not interrupt */
void usb_pin_init(void)
{
GPIO_CLEAR_BITWISE(USB_GPIO_OUTPUT_EN, USB_GPIO_MASK);
GPIO_SET_BITWISE(USB_GPIO_ENABLE, USB_GPIO_MASK);
#ifdef USB_FIREWIRE_HANDLING
/* GPIO C bit 1 is firewire detect */
GPIO_CLEAR_BITWISE(GPIOC_OUTPUT_EN, 0x02);
GPIO_SET_BITWISE(GPIOC_ENABLE, 0x02);
#endif
}
void usb_init_device(void)
static void usb_reset_controller(void)
{
/* enable usb module */
outl(inl(0x7000002C) | 0x3000000, 0x7000002C);
@ -139,9 +127,6 @@ void usb_init_device(void)
udelay(100000);
XMB_RAM_CFG |= 0x47A;
/* Do one-time inits */
usb_drv_startup();
/* disable USB-devices until USB is detected via GPIO */
#ifndef BOOTLOADER
/* Disabling USB0 in the bootloader makes the OF not load,
@ -151,6 +136,26 @@ void usb_init_device(void)
DEV_EN &= ~DEV_USB1;
DEV_INIT2 &= ~INIT_USB;
#endif
}
/* Enable raw status pin read only - not interrupt */
void usb_pin_init(void)
{
GPIO_CLEAR_BITWISE(USB_GPIO_OUTPUT_EN, USB_GPIO_MASK);
GPIO_SET_BITWISE(USB_GPIO_ENABLE, USB_GPIO_MASK);
#ifdef USB_FIREWIRE_HANDLING
/* GPIO C bit 1 is firewire detect */
GPIO_CLEAR_BITWISE(GPIOC_OUTPUT_EN, 0x02);
GPIO_SET_BITWISE(GPIOC_ENABLE, 0x02);
#endif
}
void usb_init_device(void)
{
usb_reset_controller();
/* Do one-time inits (no dependency on controller) */
usb_drv_startup();
usb_pin_init();
@ -186,14 +191,8 @@ void usb_enable(bool on)
}
else {
usb_core_exit();
#ifndef BOOTLOADER
/* Disable USB devices */
DEV_RS |= (DEV_USB0 | DEV_USB1);
DEV_RS &= ~(DEV_USB0 | DEV_USB1);
DEV_EN &=~ DEV_USB0;
DEV_EN &=~ DEV_USB1;
DEV_INIT2 &=~ INIT_USB;
#endif
usb_reset_controller();
}
}