summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2005-07-11 14:01:45 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2005-07-11 14:01:45 +0000
commitdfa8ecbe609ca8ea194d08560a44fb9a92e94b4b (patch)
tree710eafbd3265421c0d7932444825c752428ffc1e
parentb6242daf4d1ee69e3608641f01a3bc27d0b0cafd (diff)
downloadrockbox-dfa8ecbe609ca8ea194d08560a44fb9a92e94b4b.tar.gz
rockbox-dfa8ecbe609ca8ea194d08560a44fb9a92e94b4b.tar.bz2
rockbox-dfa8ecbe609ca8ea194d08560a44fb9a92e94b4b.zip
iriver bootloader: enable backlight at boot, reset uda1380, warning when low battery, let the user try with USB when the ATA init fails
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7100 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--bootloader/main.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/bootloader/main.c b/bootloader/main.c
index 22053d25d4..a7985cda40 100644
--- a/bootloader/main.c
+++ b/bootloader/main.c
@@ -183,6 +183,7 @@ void main(void)
bool rc_on_button = false;
bool on_button = false;
int data;
+ int adc_battery, battery_voltage, batt_int, batt_frac;
/* Read the buttons early */
@@ -197,6 +198,10 @@ void main(void)
if ((data & 0x40) == 0)
rc_on_button = true;
+ /* Backlight ON */
+ or_l(0x00020000, &GPIO1_ENABLE);
+ or_l(0x00020000, &GPIO1_FUNCTION);
+
power_init();
system_init();
kernel_init();
@@ -206,6 +211,13 @@ void main(void)
set_cpu_frequency(0); /* PLL off */
#endif
+ /* UDA1380 RESET */
+ GPIO_OUT |= (1<<29);
+ GPIO_ENABLE |= (1<<29);
+ GPIO_FUNCTION |= (1<<29);
+ sleep(HZ/100);
+ GPIO_OUT &= ~(1<<29);
+
backlight_init();
set_irq_level(0);
lcd_init();
@@ -215,8 +227,7 @@ void main(void)
lcd_setfont(FONT_SYSFIXED);
- snprintf(buf, 256, "Rockboot version 3");
- lcd_puts(0, line++, buf);
+ lcd_puts(0, line++, "Rockboot version CVS");
lcd_update();
sleep(HZ/50); /* Allow the button driver to check the buttons */
@@ -239,18 +250,34 @@ void main(void)
power_off();
}
+ adc_battery = adc_read(ADC_BATTERY);
+
+ battery_voltage = (adc_battery * BATTERY_SCALE_FACTOR) / 10000;
+ batt_int = battery_voltage / 100;
+ batt_frac = battery_voltage % 100;
+
+ snprintf(buf, 32, "Batt: %d.%02dV", batt_int, batt_frac);
+ lcd_puts(0, line++, buf);
+ lcd_update();
+
+ if(battery_voltage <= 300) {
+ line++;
+ lcd_puts(0, line++, "WARNING! BATTERY LOW!!");
+ lcd_update();
+ sleep(HZ*2);
+ }
+
rc = ata_init();
if(rc)
{
-#ifdef HAVE_LCD_BITMAP
char str[32];
lcd_clear_display();
snprintf(str, 31, "ATA error: %d", rc);
- lcd_puts(0, 1, str);
+ lcd_puts(0, line++, str);
+ lcd_puts(0, line++, "Insert USB cable and press");
+ lcd_puts(0, line++, "a button");
lcd_update();
while(!(button_get(true) & BUTTON_REL));
-#endif
- panicf("ata: %d", rc);
}
/* A hack to enter USB mode without using the USB thread */