diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2009-01-19 19:23:59 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2009-01-19 19:23:59 +0000 |
| commit | 5d1eb8ee3193c0b0c779258e754218929fa09723 (patch) | |
| tree | 279a9fcc48e9c8a409e22fe09d25351a2229d6ac | |
| parent | 76042cb389d18726c60103a5d0d84ad756a56143 (diff) | |
| download | rockbox-5d1eb8ee3193c0b0c779258e754218929fa09723.zip rockbox-5d1eb8ee3193c0b0c779258e754218929fa09723.tar.gz rockbox-5d1eb8ee3193c0b0c779258e754218929fa09723.tar.bz2 rockbox-5d1eb8ee3193c0b0c779258e754218929fa09723.tar.xz | |
This should take care of resetting when unplugging on e200 as reported in FS#9812. Be sure VBUS is valid before posting insert message as a spurious reset can occur. It seems to fix it for me (tested by insulating D+/D- pins).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19800 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/target/arm/usb-drv-arc.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/firmware/target/arm/usb-drv-arc.c b/firmware/target/arm/usb-drv-arc.c index 99845c2..b6d6ff1 100644 --- a/firmware/target/arm/usb-drv-arc.c +++ b/firmware/target/arm/usb-drv-arc.c @@ -272,6 +272,7 @@ /* OTGSC Register Bit Masks */ #define OTGSC_B_SESSION_VALID (0x00000800) +#define OTGSC_A_VBUS_VALID (0x00000200) #define QH_MULT_POS (30) #define QH_ZLT_SEL (0x20000000) @@ -516,7 +517,10 @@ void usb_drv_int(void) if (UNLIKELY(usbintr == USBINTR_RESET_EN)) { /* USB detected - detach and inform */ usb_drv_stop(); - usb_drv_usb_detect_event(); + /* A false reset may occur upon unplugging, be sure VBUS is above + * the 4V4 threshold. */ + if (usb_drv_powered()) + usb_drv_usb_detect_event(); } else #endif @@ -594,7 +598,8 @@ bool usb_drv_connected(void) bool usb_drv_powered(void) { - return (REG_OTGSC & OTGSC_B_SESSION_VALID) ? true : false; + /* true = bus 4V4 ok */ + return (REG_OTGSC & OTGSC_A_VBUS_VALID) ? true : false; } void usb_drv_set_address(int address) |