From ecd80d888e8fe933c68a3618a1edfe7e667a9227 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Sun, 12 Dec 2010 20:03:42 +0000 Subject: Move AMSv1 USB to the USB_DETECT_BY_DRV model, so connecting to a dumb charger works without interrupting playback git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28819 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/config.h | 5 ++++- firmware/target/arm/as3525/usb-as3525.c | 21 +++++++++++++++++---- firmware/target/arm/as3525/usb-drv-as3525.c | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/firmware/export/config.h b/firmware/export/config.h index 0cc3251c70..8e9afe5937 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -724,8 +724,11 @@ Lyre prototype 1 */ #if CONFIG_CPU != IMX31L #define INCLUDE_TIMEOUT_API #endif -#endif /* HAVE_USBSTACK */ +#endif /* HAVE_USBSTACK && USBOTG_ARC */ +#if defined(HAVE_USBSTACK) && CONFIG_USBOTG == USBOTG_AS3525 +#define USB_DETECT_BY_DRV +#endif /* HAVE_USBSTACK && USBOTG_AS3525 */ #endif /* BOOTLOADER */ diff --git a/firmware/target/arm/as3525/usb-as3525.c b/firmware/target/arm/as3525/usb-as3525.c index 45e608a6fe..1c411b074f 100644 --- a/firmware/target/arm/as3525/usb-as3525.c +++ b/firmware/target/arm/as3525/usb-as3525.c @@ -29,7 +29,8 @@ #include "power.h" #include "as3525.h" -static int usb_status = USB_EXTRACTED; +static bool bus_activity = 0; +static bool connected = 0; void usb_enable(bool on) { @@ -45,12 +46,19 @@ void usb_enable(bool on) void usb_insert_int(void) { - usb_status = USB_INSERTED; + connected = 1; } void usb_remove_int(void) { - usb_status = USB_EXTRACTED; + connected = 0; + bus_activity = 0; +} + +void usb_drv_usb_detect_event(void) +{ + /* Bus activity seen */ + bus_activity = 1; } int usb_detect(void) @@ -61,5 +69,10 @@ int usb_detect(void) * TODO: Implement USB in rockbox for these players */ return USB_EXTRACTED; #endif - return usb_status; + if(bus_activity && connected) + return USB_INSERTED; + else if(connected) + return USB_POWERED; + else + return USB_EXTRACTED; } diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c index 3a2cc9df3f..2e5330ec1b 100644 --- a/firmware/target/arm/as3525/usb-drv-as3525.c +++ b/firmware/target/arm/as3525/usb-drv-as3525.c @@ -754,6 +754,7 @@ void INT_USB(void) } if (intr & USB_DEV_INTR_USB_RESET) {/* usb reset from host? */ logf("usb reset\n"); + usb_drv_usb_detect_event(); reset_endpoints(1); usb_core_bus_reset(); intr &= ~USB_DEV_INTR_USB_RESET; -- cgit v1.2.3