summaryrefslogtreecommitdiff
path: root/bootloader/xduoox3.c
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader/xduoox3.c')
-rw-r--r--bootloader/xduoox3.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/bootloader/xduoox3.c b/bootloader/xduoox3.c
index 3db87a866d..d38639bfd4 100644
--- a/bootloader/xduoox3.c
+++ b/bootloader/xduoox3.c
@@ -44,6 +44,7 @@
44extern void show_logo(void); 44extern void show_logo(void);
45extern void power_off(void); 45extern void power_off(void);
46 46
47#ifdef HAVE_BOOTLOADER_USB_MODE
47static void show_splash(int timeout, const char *msg) 48static void show_splash(int timeout, const char *msg)
48{ 49{
49 reset_screen(); 50 reset_screen();
@@ -88,6 +89,7 @@ static void usb_mode(void)
88 } 89 }
89 } 90 }
90} 91}
92#endif
91 93
92static int boot_rockbox(void) 94static int boot_rockbox(void)
93{ 95{
@@ -95,11 +97,17 @@ static int boot_rockbox(void)
95 void (*kernel_entry)(void); 97 void (*kernel_entry)(void);
96 98
97 printf("Mounting disk...\n"); 99 printf("Mounting disk...\n");
98 rc = disk_mount_all(); 100
99 if (rc <= 0) 101 while((rc = disk_mount_all()) <= 0)
100 { 102 {
101 verbose = true; 103 verbose = true;
102 error(EDISK,rc, true); 104#ifdef HAVE_BOOTLOADER_USB_MODE
105 error(EDISK, rc, false);
106 usb_start_monitoring();
107 usb_mode();
108#else
109 error(EDISK, rc, true);
110#endif
103 } 111 }
104 112
105 printf("Loading firmware...\n"); 113 printf("Loading firmware...\n");
@@ -119,6 +127,7 @@ static int boot_rockbox(void)
119 } 127 }
120} 128}
121 129
130#if 0
122static void reset_configuration(void) 131static void reset_configuration(void)
123{ 132{
124 int rc; 133 int rc;
@@ -135,6 +144,7 @@ static void reset_configuration(void)
135 else 144 else
136 show_splash(HZ/2, "Couldn't reset configuration!"); 145 show_splash(HZ/2, "Couldn't reset configuration!");
137} 146}
147#endif
138 148
139int main(void) 149int main(void)
140{ 150{
@@ -151,8 +161,6 @@ int main(void)
151 161
152 show_logo(); 162 show_logo();
153 163
154 filesystem_init();
155
156 rc = storage_init(); 164 rc = storage_init();
157 if(rc) 165 if(rc)
158 { 166 {
@@ -160,6 +168,22 @@ int main(void)
160 error(EATA, rc, true); 168 error(EATA, rc, true);
161 } 169 }
162 170
171 filesystem_init();
172
173#ifdef HAVE_BOOTLOADER_USB_MODE
174 button_init_device();
175 int btn = button_read_device();
176
177 usb_init();
178
179 /* Enter USB mode if USB is plugged and PLAY button is pressed */
180 if(btn & BUTTON_PLAY) {
181 usb_start_monitoring();
182 if(usb_detect() == USB_INSERTED)
183 usb_mode();
184 }
185#endif /* HAVE_BOOTLOADER_USB_MODE */
186
163 /* Don't mount the disks yet, there could be file system/partition errors 187 /* Don't mount the disks yet, there could be file system/partition errors
164 which are fixable in USB mode */ 188 which are fixable in USB mode */
165 189