diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2011-12-14 09:19:50 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2011-12-14 09:19:50 +0000 |
| commit | bfd69f2aa19321e7fb3dfdd0befcfc7e32eca656 (patch) | |
| tree | de136173c7b46650b09b0a07c6a94cb5dd4d1679 | |
| parent | 7af94b442741c4bb11a3b42c7c346465bdb30479 (diff) | |
| download | rockbox-bfd69f2aa19321e7fb3dfdd0befcfc7e32eca656.zip rockbox-bfd69f2aa19321e7fb3dfdd0befcfc7e32eca656.tar.gz rockbox-bfd69f2aa19321e7fb3dfdd0befcfc7e32eca656.tar.bz2 rockbox-bfd69f2aa19321e7fb3dfdd0befcfc7e32eca656.tar.xz | |
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.c | 2 | ||||
| -rw-r--r-- | firmware/usb.c | 21 |
2 files changed, 15 insertions, 8 deletions
diff --git a/bootloader/sansa_as3525.c b/bootloader/sansa_as3525.c index 7b0a8b8..c384007 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 bb19850..c7326c5 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) |