summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bootloader/sansa_as3525.c28
-rw-r--r--firmware/export/config.h3
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525.c6
-rw-r--r--firmware/usb.c3
4 files changed, 38 insertions, 2 deletions
diff --git a/bootloader/sansa_as3525.c b/bootloader/sansa_as3525.c
index 9248921eed..e63bb2c749 100644
--- a/bootloader/sansa_as3525.c
+++ b/bootloader/sansa_as3525.c
@@ -27,6 +27,11 @@
27#include <inttypes.h> 27#include <inttypes.h>
28#include "config.h" 28#include "config.h"
29#include "lcd.h" 29#include "lcd.h"
30#ifdef USE_ROCKBOX_USB
31#include "usb.h"
32#include "usb_core.h"
33#include "sysfont.h"
34#endif /* USE_ROCKBOX_USB */
30#include "backlight.h" 35#include "backlight.h"
31#include "button-target.h" 36#include "button-target.h"
32#include "common.h" 37#include "common.h"
@@ -82,6 +87,29 @@ void main(void)
82 if(ret < 0) 87 if(ret < 0)
83 error(EATA,ret); 88 error(EATA,ret);
84 89
90#ifdef USE_ROCKBOX_USB
91 usb_init();
92 if(usb_detect() == USB_INSERTED)
93 {
94 const char msg[] = "Bootloader USB mode";
95 reset_screen();
96 lcd_putsxy( (LCD_WIDTH - (SYSFONT_WIDTH * sizeof(msg))) / 2,
97 (LCD_HEIGHT - SYSFONT_HEIGHT) / 2, msg);
98 lcd_update();
99
100 usb_core_enable_driver(USB_DRIVER_MASS_STORAGE, true);
101 usb_enable(true);
102
103 while(usb_detect() == USB_INSERTED)
104 sleep(HZ);
105
106 usb_enable(false);
107
108 reset_screen();
109 lcd_update();
110 }
111#endif /* USE_ROCKBOX_USB */
112
85 if(!disk_init(IF_MV(0))) 113 if(!disk_init(IF_MV(0)))
86 panicf("disk_init failed!"); 114 panicf("disk_init failed!");
87 115
diff --git a/firmware/export/config.h b/firmware/export/config.h
index 5be2c99dcb..22178e4bd4 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -916,7 +916,8 @@ Lyre prototype 1 */
916#if (defined(TOSHIBA_GIGABEAT_S) || \ 916#if (defined(TOSHIBA_GIGABEAT_S) || \
917 (defined(CREATIVE_ZVx) || \ 917 (defined(CREATIVE_ZVx) || \
918 defined(CPU_TCC77X) || defined(CPU_TCC780X))) || \ 918 defined(CPU_TCC77X) || defined(CPU_TCC780X))) || \
919 (CONFIG_USBOTG == USBOTG_JZ4740) || defined(IPOD_NANO2G) 919 (CONFIG_USBOTG == USBOTG_JZ4740) || defined(IPOD_NANO2G) || \
920 CONFIG_USBOTG == USBOTG_AS3525
920#define USB_ENABLE_STORAGE 921#define USB_ENABLE_STORAGE
921#endif 922#endif
922 923
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c
index 45dadebc85..fe3b38fdb5 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525.c
@@ -684,8 +684,10 @@ int usb_drv_recv(int ep, void *ptr, int len)
684 endpoints[ep][1].len = len; 684 endpoints[ep][1].len = len;
685 endpoints[ep][1].rc = -1; 685 endpoints[ep][1].rc = -1;
686 686
687#ifndef BOOTLOADER
687 /* remove data buffer from cache */ 688 /* remove data buffer from cache */
688 invalidate_dcache(); 689 invalidate_dcache();
690#endif
689 /* DMA setup */ 691 /* DMA setup */
690 uc_desc->status = USB_DMA_DESC_BS_HST_RDY | 692 uc_desc->status = USB_DMA_DESC_BS_HST_RDY |
691 USB_DMA_DESC_LAST | 693 USB_DMA_DESC_LAST |
@@ -734,8 +736,10 @@ void ep_send(int ep, void *ptr, int len)
734 endpoints[ep][0].len = len; 736 endpoints[ep][0].len = len;
735 endpoints[ep][0].rc = -1; 737 endpoints[ep][0].rc = -1;
736 738
739#ifndef BOOTLOADER
737 /* Make sure data is committed to memory */ 740 /* Make sure data is committed to memory */
738 clean_dcache(); 741 clean_dcache();
742#endif
739 743
740 logf("xx%s\n", make_hex(ptr, len)); 744 logf("xx%s\n", make_hex(ptr, len));
741 745
@@ -843,10 +847,12 @@ static void handle_out_ep(int ep)
843 logf("EP%d OUT token, st:%08x len:%d frm:%x data=%s epstate=%d\n", ep, 847 logf("EP%d OUT token, st:%08x len:%d frm:%x data=%s epstate=%d\n", ep,
844 dma_mst, dma_len, dma_frm, make_hex(uc_desc->data_ptr, dma_len), 848 dma_mst, dma_len, dma_frm, make_hex(uc_desc->data_ptr, dma_len),
845 endpoints[ep][1].state); 849 endpoints[ep][1].state);
850#ifndef BOOTLOADER
846 /* 851 /*
847 * If parts of the just dmaed range are in cache, dump them now. 852 * If parts of the just dmaed range are in cache, dump them now.
848 */ 853 */
849 dump_dcache_range(uc_desc->data_ptr, dma_len); 854 dump_dcache_range(uc_desc->data_ptr, dma_len);
855#endif
850 } else{ 856 } else{
851 logf("EP%d OUT token, st:%08x frm:%x (no data)\n", ep, 857 logf("EP%d OUT token, st:%08x frm:%x (no data)\n", ep,
852 dma_mst, dma_frm); 858 dma_mst, dma_frm);
diff --git a/firmware/usb.c b/firmware/usb.c
index e27a3c3dc2..baf6af7d69 100644
--- a/firmware/usb.c
+++ b/firmware/usb.c
@@ -51,7 +51,8 @@
51 (defined(HAVE_USBSTACK) && (defined(OLYMPUS_MROBE_500))) || \ 51 (defined(HAVE_USBSTACK) && (defined(OLYMPUS_MROBE_500))) || \
52 (defined(HAVE_USBSTACK) && (defined(IPOD_NANO2G))) || \ 52 (defined(HAVE_USBSTACK) && (defined(IPOD_NANO2G))) || \
53 defined(CPU_TCC77X) || defined(CPU_TCC780X) || \ 53 defined(CPU_TCC77X) || defined(CPU_TCC780X) || \
54 (CONFIG_USBOTG == USBOTG_JZ4740) 54 (CONFIG_USBOTG == USBOTG_JZ4740) || \
55 (defined(USE_ROCKBOX_USB) && CONFIG_USBOTG == USBOTG_AS3525)
55#define USB_FULL_INIT 56#define USB_FULL_INIT
56#endif 57#endif
57 58