diff options
Diffstat (limited to 'firmware')
-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 99845c2a49..b6d6ff154d 100644 --- a/firmware/target/arm/usb-drv-arc.c +++ b/firmware/target/arm/usb-drv-arc.c | |||
@@ -272,6 +272,7 @@ | |||
272 | 272 | ||
273 | /* OTGSC Register Bit Masks */ | 273 | /* OTGSC Register Bit Masks */ |
274 | #define OTGSC_B_SESSION_VALID (0x00000800) | 274 | #define OTGSC_B_SESSION_VALID (0x00000800) |
275 | #define OTGSC_A_VBUS_VALID (0x00000200) | ||
275 | 276 | ||
276 | #define QH_MULT_POS (30) | 277 | #define QH_MULT_POS (30) |
277 | #define QH_ZLT_SEL (0x20000000) | 278 | #define QH_ZLT_SEL (0x20000000) |
@@ -516,7 +517,10 @@ void usb_drv_int(void) | |||
516 | if (UNLIKELY(usbintr == USBINTR_RESET_EN)) { | 517 | if (UNLIKELY(usbintr == USBINTR_RESET_EN)) { |
517 | /* USB detected - detach and inform */ | 518 | /* USB detected - detach and inform */ |
518 | usb_drv_stop(); | 519 | usb_drv_stop(); |
519 | usb_drv_usb_detect_event(); | 520 | /* A false reset may occur upon unplugging, be sure VBUS is above |
521 | * the 4V4 threshold. */ | ||
522 | if (usb_drv_powered()) | ||
523 | usb_drv_usb_detect_event(); | ||
520 | } | 524 | } |
521 | else | 525 | else |
522 | #endif | 526 | #endif |
@@ -594,7 +598,8 @@ bool usb_drv_connected(void) | |||
594 | 598 | ||
595 | bool usb_drv_powered(void) | 599 | bool usb_drv_powered(void) |
596 | { | 600 | { |
597 | return (REG_OTGSC & OTGSC_B_SESSION_VALID) ? true : false; | 601 | /* true = bus 4V4 ok */ |
602 | return (REG_OTGSC & OTGSC_A_VBUS_VALID) ? true : false; | ||
598 | } | 603 | } |
599 | 604 | ||
600 | void usb_drv_set_address(int address) | 605 | void usb_drv_set_address(int address) |