summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-12-14 09:19:50 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-12-14 09:19:50 +0000
commitbfd69f2aa19321e7fb3dfdd0befcfc7e32eca656 (patch)
treede136173c7b46650b09b0a07c6a94cb5dd4d1679
parent7af94b442741c4bb11a3b42c7c346465bdb30479 (diff)
downloadrockbox-bfd69f2aa19321e7fb3dfdd0befcfc7e32eca656.tar.gz
rockbox-bfd69f2aa19321e7fb3dfdd0befcfc7e32eca656.zip
Fix the real issue with AMS bootloader USB mode. A call to usb_enable was missing in usb.c when using the USB stack and USB_DETECT_BY_CORE was not enabled. Try to do it in a clean-ish way.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31245 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--bootloader/sansa_as3525.c2
-rw-r--r--firmware/usb.c21
2 files changed, 15 insertions, 8 deletions
diff --git a/bootloader/sansa_as3525.c b/bootloader/sansa_as3525.c
index 7b0a8b8d88..c384007898 100644
--- a/bootloader/sansa_as3525.c
+++ b/bootloader/sansa_as3525.c
@@ -63,10 +63,8 @@ static void usb_mode(void)
(LCD_HEIGHT - SYSFONT_HEIGHT) / 2, msg);
lcd_update();
- usb_enable(true);
while(usb_detect() == USB_INSERTED)
sleep(HZ);
- usb_enable(false);
reset_screen();
lcd_update();
diff --git a/firmware/usb.c b/firmware/usb.c
index bb19850cae..c7326c548b 100644
--- a/firmware/usb.c
+++ b/firmware/usb.c
@@ -135,6 +135,11 @@ static inline bool usb_do_screendump(void)
#ifdef HAVE_USBSTACK
+/* Enable / disable USB when the stack is enabled - otherwise a noop */
+static inline void usb_stack_enable(bool enable)
+{
+ usb_enable(enable);
+}
#ifdef HAVE_HOTSWAP
static inline void usb_handle_hotswap(long id)
@@ -222,7 +227,6 @@ static inline void usb_slave_mode(bool on)
}
else /* usb_state == USB_INSERTED (only!) */
{
- usb_enable(false);
#ifdef HAVE_PRIORITY_SCHEDULING
thread_set_priority(thread_self(), PRIORITY_SYSTEM);
#endif
@@ -254,6 +258,11 @@ void usb_signal_transfer_completion(
#else /* !HAVE_USBSTACK */
+static inline void usb_stack_enable(bool enable)
+{
+ (void)enable;
+}
+
#ifdef HAVE_HOTSWAP
static inline void usb_handle_hotswap(long id)
{
@@ -403,6 +412,7 @@ static void usb_thread(void)
break;
usb_state = USB_POWERED;
+ usb_stack_enable(true);
#endif /* USB_DETECT_BY_CORE */
if(usb_power_button())
@@ -467,20 +477,19 @@ static void usb_thread(void)
break;
usb_state = USB_POWERED;
- usb_enable(true);
+ usb_stack_enable(true);
break;
/* USB_POWERED: */
case USB_UNPOWERED:
- if(usb_state == USB_POWERED)
- usb_enable(false);
- /* Fall-through - other legal states can be USB_INSERTED or
- USB_SCREENDUMP */
#endif /* USB_DETECT_BY_CORE */
case USB_EXTRACTED:
if(usb_state == USB_EXTRACTED)
break;
+ if(usb_state == USB_POWERED || usb_state == USB_INSERTED)
+ usb_stack_enable(false);
+
/* Only disable the USB slave mode if we really have enabled
it. Some expected acks may not have been received. */
if(usb_state == USB_INSERTED)