diff options
author | James Buren <braewoods+rb@braewoods.net> | 2020-11-15 10:33:12 +0000 |
---|---|---|
committer | James Buren <braewoods+rb@braewoods.net> | 2020-11-15 11:01:53 +0000 |
commit | 1bc68d5ad77bca333ac69bd4617a1f3af9375e0d (patch) | |
tree | d3e799cb15b62893a4b874f8f32454649cdecd06 /bootloader | |
parent | fc5c8192ffc8a10ce5f7ccbd96320dfbade1a8ef (diff) |
h1x0/h300: change when the hold switch and failsafe are used
After reviewing the code awhile I realized that the failsafe and hold
switch have no impact on the boot process when the usb or charger is
connected. That makes no real sense to me. If these are connected then
neither will be used at all. The boot process will never revisit it
either once those other modes end and resume the boot process. It will
just continue to try to boot from disk as if these emergency settings
never existed.
I have decided it makes more sense for them to be evaluated once the
higher priority charge and disk mode have finished their roles. Given
how the code was originally written it seems to be they were not
intended to run prior to these at the very least since the logical
conditions preclude that possibility as they include the inverse of
the conditions that trigger the charge and disk modes.
Change-Id: I0531c97474572c573178f480c239c3c1659f9653
Diffstat (limited to 'bootloader')
-rw-r--r-- | bootloader/iriver_h1x0.c | 31 | ||||
-rw-r--r-- | bootloader/iriver_h300.c | 32 |
2 files changed, 28 insertions, 35 deletions
diff --git a/bootloader/iriver_h1x0.c b/bootloader/iriver_h1x0.c index 94ec6cb0fb..7efaaa3308 100644 --- a/bootloader/iriver_h1x0.c +++ b/bootloader/iriver_h1x0.c @@ -479,19 +479,6 @@ void main(void) check_battery(); - /* Don't start if the Hold button is active on the device you - are starting with */ - if ((usb_detect() != USB_INSERTED) && (hold_status || recovery_mode)) - { - if (detect_original_firmware()) - { - printf("Hold switch on"); - shutdown(); - } - - failsafe_menu(); - } - /* Holding REC while starting runs the original firmware */ if (detect_original_firmware() && rec_button) { @@ -544,10 +531,20 @@ void main(void) lcd_update(); } - /* boot from flash if that is the default */ - try_flashboot(); - if (recovery_mode) - printf("Falling back to boot from disk"); + /* recheck the hold switch status as it may have changed */ + hold_status = (button_hold() || remote_button_hold()); + + /* hold switch shutdown or failsafe recovery mode */ + if (hold_status || recovery_mode) + { + if (detect_original_firmware()) + { + printf("Hold switch on"); + shutdown(); + } + + failsafe_menu(); + } rc = storage_init(); if(rc) diff --git a/bootloader/iriver_h300.c b/bootloader/iriver_h300.c index 2e4909fd53..3a254f4487 100644 --- a/bootloader/iriver_h300.c +++ b/bootloader/iriver_h300.c @@ -473,20 +473,6 @@ void main(void) if(rtc_alarm) printf("RTC alarm detected"); - /* Don't start if the Hold button is active on the device you - are starting with */ - if ((hold_status || recovery_mode) && !rtc_alarm && - (usb_detect() != USB_INSERTED) && !charger_inserted()) - { - if (detect_original_firmware()) - { - printf("Hold switch on"); - shutdown(); - } - - failsafe_menu(); - } - /* Holding REC while starting runs the original firmware */ if (detect_original_firmware() && rec_button) { @@ -605,10 +591,20 @@ void main(void) usb_charge = false; } - /* boot from flash if that is the default */ - try_flashboot(); - if (recovery_mode) - printf("Falling back to boot from disk"); + /* recheck the hold switch status as it may have changed */ + hold_status = (button_hold() || remote_button_hold()); + + /* hold switch shutdown or failsafe recovery mode */ + if (hold_status || recovery_mode) + { + if (detect_original_firmware()) + { + printf("Hold switch on"); + shutdown(); + } + + failsafe_menu(); + } rc = storage_init(); if(rc) |