summaryrefslogtreecommitdiff
path: root/bootloader
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader')
-rw-r--r--bootloader/iaudio_coldfire.c44
1 files changed, 37 insertions, 7 deletions
diff --git a/bootloader/iaudio_coldfire.c b/bootloader/iaudio_coldfire.c
index a80a202d41..bb7fbebd3e 100644
--- a/bootloader/iaudio_coldfire.c
+++ b/bootloader/iaudio_coldfire.c
@@ -67,6 +67,7 @@ inline void __reset_cookie(void)
67 67
68void start_firmware(void) 68void start_firmware(void)
69{ 69{
70 adc_close();
70 asm(" move.w #0x2700,%sr"); 71 asm(" move.w #0x2700,%sr");
71 __reset_cookie(); 72 __reset_cookie();
72 asm(" move.l %0,%%d0" :: "i"(DRAM_START)); 73 asm(" move.l %0,%%d0" :: "i"(DRAM_START));
@@ -126,16 +127,35 @@ void main(void)
126 int rc; 127 int rc;
127 bool rc_on_button = false; 128 bool rc_on_button = false;
128 bool on_button = false; 129 bool on_button = false;
129 bool rec_button = false; 130
130 bool hold_status = false; 131 /* We want to read the buttons as early as possible, before the user
132 releases the ON button */
133
134#ifdef IAUDIO_M3
135 or_l(0x80000000, &GPIO_FUNCTION); /* remote Play button */
136 and_l(~0x80000000, &GPIO_ENABLE);
137 or_l(0x00000202, &GPIO1_FUNCTION); /* main Hold & Play */
138
139 if ((GPIO1_READ & 0x000000002) == 0)
140 on_button = true;
141
142 if ((GPIO_READ & 0x80000000) == 0)
143 rc_on_button = true;
144#elif defined(IAUDIO_M5) || defined(IAUDIO_X5)
131 int data; 145 int data;
132 146
133 (void)rc_on_button; 147 or_l(0x0e000000, &GPIO_FUNCTION); /* main Hold & Power, remote Play */
134 (void)on_button; 148 and_l(~0x0e000000, &GPIO_ENABLE);
135 (void)rec_button; 149
136 (void)hold_status; 150 data = GPIO_READ;
137 (void)data;
138 151
152 if ((data & 0x04000000) == 0)
153 on_button = true;
154
155 if ((data & 0x02000000) == 0)
156 rc_on_button = true;
157#endif
158
139 power_init(); 159 power_init();
140 160
141 system_init(); 161 system_init();
@@ -153,6 +173,16 @@ void main(void)
153 font_init(); 173 font_init();
154 adc_init(); 174 adc_init();
155 button_init(); 175 button_init();
176
177 if ((!on_button || button_hold())
178 && (!rc_on_button || remote_button_hold())
179 && !charger_inserted())
180 {
181 /* No need to check for USB connection here, as USB is handled
182 * in the cowon loader. */
183 printf("Hold switch on");
184 shutdown();
185 }
156 186
157 printf("Rockbox boot loader"); 187 printf("Rockbox boot loader");
158 printf("Version %s", version); 188 printf("Version %s", version);