summaryrefslogtreecommitdiff
path: root/bootloader
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader')
-rw-r--r--bootloader/main.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/bootloader/main.c b/bootloader/main.c
index db34533df7..fd8049e5e6 100644
--- a/bootloader/main.c
+++ b/bootloader/main.c
@@ -175,9 +175,11 @@ void main(void)
int data;
int adc_battery, battery_voltage, batt_int, batt_frac;
- /* Read the buttons early */
+ /* We want to read the buttons as early as possible, before the user
+ releases the ON button */
- /* Set GPIO33, GPIO37, GPIO38 and GPIO52 as general purpose inputs */
+ /* Set GPIO33, GPIO37, GPIO38 and GPIO52 as general purpose inputs
+ (The ON and Hold buttons on the main unit and the remote) */
or_l(0x00100062, &GPIO1_FUNCTION);
and_l(~0x00100062, &GPIO1_ENABLE);
@@ -192,7 +194,17 @@ void main(void)
or_l(0x00020000, &GPIO1_ENABLE);
or_l(0x00020000, &GPIO1_FUNCTION);
+ /* Set the default state of the hard drive power to OFF */
+ ide_power_enable(false);
+
power_init();
+
+ /* Power on the hard drive early, to speed up the loading */
+ if(!((on_button && button_hold()) ||
+ (rc_on_button && remote_button_hold()))) {
+ ide_power_enable(true);
+ }
+
system_init();
kernel_init();
@@ -212,12 +224,14 @@ void main(void)
lcd_setfont(FONT_SYSFIXED);
- snprintf(buf, sizeof(buf), "Rockboot version %s", version);
+ lcd_puts(0, line++, "Rockbox boot loader");
+ snprintf(buf, sizeof(buf), "Version %s", version);
lcd_puts(0, line++, buf);
lcd_update();
sleep(HZ/50); /* Allow the button driver to check the buttons */
+ /* Holding REC while starting runs the original firmware */
if(((button_status() & BUTTON_REC) == BUTTON_REC) ||
((button_status() & BUTTON_RC_REC) == BUTTON_RC_REC)) {
lcd_puts(0, 8, "Starting original firmware...");
@@ -225,8 +239,10 @@ void main(void)
start_iriver_fw();
}
- if(on_button & button_hold() ||
- rc_on_button & remote_button_hold()) {
+ /* Don't start if the Hold button is active on the device you
+ are starting with */
+ if((on_button && button_hold()) ||
+ (rc_on_button && remote_button_hold())) {
lcd_puts(0, 8, "HOLD switch on, power off...");
lcd_update();
sleep(HZ*2);
@@ -280,6 +296,9 @@ void main(void)
{
ata_spin(); /* Prevent the drive from spinning down */
sleep(HZ);
+
+ /* Backlight OFF */
+ or_l(0x00020000, &GPIO1_OUT);
}
system_reboot();