summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/target/arm/usb-drv-arc.c9
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
595bool usb_drv_powered(void) 599bool 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
600void usb_drv_set_address(int address) 605void usb_drv_set_address(int address)