diff options
Diffstat (limited to 'bootloader')
-rw-r--r-- | bootloader/main.c | 44 |
1 files changed, 9 insertions, 35 deletions
diff --git a/bootloader/main.c b/bootloader/main.c index 7fa60f961a..31324b50fe 100644 --- a/bootloader/main.c +++ b/bootloader/main.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "kernel.h" | 26 | #include "kernel.h" |
27 | #include "thread.h" | 27 | #include "thread.h" |
28 | #include "ata.h" | 28 | #include "ata.h" |
29 | #include "usb.h" | ||
29 | #include "disk.h" | 30 | #include "disk.h" |
30 | #include "font.h" | 31 | #include "font.h" |
31 | #include "adc.h" | 32 | #include "adc.h" |
@@ -47,32 +48,6 @@ int usb_screen(void) | |||
47 | 48 | ||
48 | char version[] = APPSVERSION; | 49 | char version[] = APPSVERSION; |
49 | 50 | ||
50 | static void usb_enable(bool on) | ||
51 | { | ||
52 | and_l(~0x01000000, &GPIO_OUT); /* GPIO24 is the Cypress chip power */ | ||
53 | or_l(0x01000000, &GPIO_ENABLE); | ||
54 | or_l(0x01000000, &GPIO_FUNCTION); | ||
55 | |||
56 | or_l(0x00000080, &GPIO1_FUNCTION); /* GPIO39 is the USB detect input */ | ||
57 | |||
58 | if(on) | ||
59 | { | ||
60 | /* Power on the Cypress chip */ | ||
61 | or_l(0x01000000, &GPIO_OUT); | ||
62 | sleep(2); | ||
63 | } | ||
64 | else | ||
65 | { | ||
66 | /* Power off the Cypress chip */ | ||
67 | and_l(~0x01000000, &GPIO_OUT); | ||
68 | } | ||
69 | } | ||
70 | |||
71 | bool usb_detect(void) | ||
72 | { | ||
73 | return (GPIO1_READ & 0x80)?true:false; | ||
74 | } | ||
75 | |||
76 | void start_iriver_fw(void) | 51 | void start_iriver_fw(void) |
77 | { | 52 | { |
78 | asm(" move.w #0x2700,%sr"); | 53 | asm(" move.w #0x2700,%sr"); |
@@ -285,6 +260,8 @@ void main(void) | |||
285 | power_off(); | 260 | power_off(); |
286 | } | 261 | } |
287 | 262 | ||
263 | usb_init(); | ||
264 | |||
288 | adc_battery = adc_read(ADC_BATTERY); | 265 | adc_battery = adc_read(ADC_BATTERY); |
289 | 266 | ||
290 | battery_voltage = (adc_battery * BATTERY_SCALE_FACTOR) / 10000; | 267 | battery_voltage = (adc_battery * BATTERY_SCALE_FACTOR) / 10000; |
@@ -318,13 +295,17 @@ void main(void) | |||
318 | /* A hack to enter USB mode without using the USB thread */ | 295 | /* A hack to enter USB mode without using the USB thread */ |
319 | if(usb_detect()) | 296 | if(usb_detect()) |
320 | { | 297 | { |
298 | const char msg[] = "Bootloader USB mode"; | ||
299 | int w, h; | ||
300 | font_getstringsize(msg, &w, &h, FONT_SYSFIXED); | ||
321 | lcd_clear_display(); | 301 | lcd_clear_display(); |
322 | lcd_puts(0, 7, " Bootloader USB mode"); | 302 | lcd_putsxy((LCD_WIDTH-w)/2, (LCD_HEIGHT-h)/2, msg); |
323 | lcd_update(); | 303 | lcd_update(); |
324 | 304 | ||
325 | ata_spin(); | 305 | ata_spin(); |
326 | ata_enable(false); | 306 | ata_enable(false); |
327 | usb_enable(true); | 307 | usb_enable(true); |
308 | cpu_idle_mode(true); | ||
328 | while(usb_detect()) | 309 | while(usb_detect()) |
329 | { | 310 | { |
330 | ata_spin(); /* Prevent the drive from spinning down */ | 311 | ata_spin(); /* Prevent the drive from spinning down */ |
@@ -334,6 +315,7 @@ void main(void) | |||
334 | or_l(0x00020000, &GPIO1_OUT); | 315 | or_l(0x00020000, &GPIO1_OUT); |
335 | } | 316 | } |
336 | 317 | ||
318 | cpu_idle_mode(false); | ||
337 | usb_enable(false); | 319 | usb_enable(false); |
338 | ata_init(); /* Reinitialize ATA and continue booting */ | 320 | ata_init(); /* Reinitialize ATA and continue booting */ |
339 | 321 | ||
@@ -385,14 +367,6 @@ void mpeg_stop(void) | |||
385 | { | 367 | { |
386 | } | 368 | } |
387 | 369 | ||
388 | void usb_acknowledge(void) | ||
389 | { | ||
390 | } | ||
391 | |||
392 | void usb_wait_for_disconnect(void) | ||
393 | { | ||
394 | } | ||
395 | |||
396 | void sys_poweroff(void) | 370 | void sys_poweroff(void) |
397 | { | 371 | { |
398 | } | 372 | } |