From fc5c8192ffc8a10ce5f7ccbd96320dfbade1a8ef Mon Sep 17 00:00:00 2001 From: James Buren Date: Sun, 15 Nov 2020 09:56:14 +0000 Subject: h1x0/h300: fix h300 bootloader hold switch check This fixes an early boot bug on the h300 where hold_status is read before it has a chance to properly check whether the hold switch is even active. This was accomplished by porting over the method the h1x0 uses to perform the same check. Change-Id: I04679d82f65a2edcbee4be9a146437c3988040a2 --- bootloader/iriver_h1x0.c | 6 +----- bootloader/iriver_h300.c | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/bootloader/iriver_h1x0.c b/bootloader/iriver_h1x0.c index 7af0e86240..94ec6cb0fb 100644 --- a/bootloader/iriver_h1x0.c +++ b/bootloader/iriver_h1x0.c @@ -429,15 +429,13 @@ void main(void) adc_init(); button_init(); + sleep(HZ/50); /* Allow the button driver to check the buttons */ /* Only check remote hold status if remote power button was actually used. */ if (rc_on_button) { lcd_remote_init(); - /* Allow the button driver to check the buttons */ - sleep(HZ/50); - if (remote_button_hold()) hold_status = true; } @@ -476,8 +474,6 @@ void main(void) printf("Rockbox boot loader"); printf("Version %s", rbversion); - /* No need to wait here more because lcd_init and others already do that. */ - // sleep(HZ/50); /* Allow the button driver to check the buttons */ rec_button = ((button_status() & BUTTON_REC) == BUTTON_REC) || ((button_status() & BUTTON_RC_REC) == BUTTON_RC_REC); diff --git a/bootloader/iriver_h300.c b/bootloader/iriver_h300.c index 6cacbc4a42..2e4909fd53 100644 --- a/bootloader/iriver_h300.c +++ b/bootloader/iriver_h300.c @@ -425,6 +425,22 @@ void main(void) adc_init(); button_init(); + sleep(HZ/50); /* Allow the button driver to check the buttons */ + + /* Only check remote hold status if remote power button was actually used. */ + if (rc_on_button) + { + lcd_remote_init(); + + if (remote_button_hold()) + hold_status = true; + } + + /* Check main hold switch status too. */ + if (on_button && button_hold()) + { + hold_status = true; + } /* Power on the hard drive early, to speed up the loading. */ if (!hold_status && !recovery_mode) @@ -436,7 +452,10 @@ void main(void) } lcd_init(); - lcd_remote_init(); + + if (!rc_on_button) + lcd_remote_init(); + font_init(); lcd_setfont(FONT_SYSFIXED); @@ -446,7 +465,6 @@ void main(void) printf("Rockbox boot loader"); printf("Version %s", rbversion); - sleep(HZ/50); /* Allow the button driver to check the buttons */ rec_button = ((button_status() & BUTTON_REC) == BUTTON_REC) || ((button_status() & BUTTON_RC_REC) == BUTTON_RC_REC); @@ -457,11 +475,6 @@ void main(void) /* 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())) - { - hold_status = true; - } if ((hold_status || recovery_mode) && !rtc_alarm && (usb_detect() != USB_INSERTED) && !charger_inserted()) { -- cgit v1.2.3