summaryrefslogtreecommitdiff
path: root/rbutil/mkamsboot/dualboot/dualboot.S
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-05-17 21:57:46 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-05-17 21:57:46 +0000
commit66f183077d835b7d3bc2041fad89a65f04faacb9 (patch)
treeffec90e078b3710d23d5612d24c2839d7ec7b270 /rbutil/mkamsboot/dualboot/dualboot.S
parent60741f2b0deaabb12da74323e2fb7b6383f36bbb (diff)
downloadrockbox-66f183077d835b7d3bc2041fad89a65f04faacb9.tar.gz
rockbox-66f183077d835b7d3bc2041fad89a65f04faacb9.zip
Clip+: boot to OF if USB is connected
To be sure that there is no mistake in this code, it is run *after* the known to work HOME & LEFT buttons checks, unlike other Sansas git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26122 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/mkamsboot/dualboot/dualboot.S')
-rw-r--r--rbutil/mkamsboot/dualboot/dualboot.S63
1 files changed, 63 insertions, 0 deletions
diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S
index 8bb2059d78..309aa67742 100644
--- a/rbutil/mkamsboot/dualboot/dualboot.S
+++ b/rbutil/mkamsboot/dualboot/dualboot.S
@@ -26,6 +26,7 @@
26.set GPIOB, 0xC80C0000 26.set GPIOB, 0xC80C0000
27.set GPIOC, 0xC80D0000 27.set GPIOC, 0xC80D0000
28.set GPIOD, 0xC80E0000 28.set GPIOD, 0xC80E0000
29.set CGU_PROC, 0xC80F0010
29.set CGU_PERI, 0xC80F0014 30.set CGU_PERI, 0xC80F0014
30.set I2C_BASE, 0xC8070000 31.set I2C_BASE, 0xC8070000
31.set I2C_DATA, 0x00 32.set I2C_DATA, 0x00
@@ -239,6 +240,68 @@ uclcopy:
239 240
240 cmp r2, #0 @ test input from pins 241 cmp r2, #0 @ test input from pins
241 bne boot_of @ branch directly to OF if either pin high 242 bne boot_of @ branch directly to OF if either pin high
243
244
245 @ check USB connection
246
247 ldr r0, =CGU_PROC
248 mov r1, #0
249 str r1, [r0] @ fclk = 24MHz
250
251 ldr r0, =CGU_PERI
252 ldr r1, [r0]
253 /* enable i2c audio master clock */
254 orr r1, r1, #(1<<17)
255 /* pclk = fclk = 24MHz */
256 bic r1, r1, #0x7f
257 str r1, [r0]
258
259 ldr r0, =I2C_BASE
260 /* disable i2c interrupts */
261 mov r1, #0
262 str r1, [r0, #I2C_IMR]
263 /* setup prescaler */
264 mov r1, #I2C_PRESCALER_LOW
265 str r1, [r0, #I2C_CPSR0]
266 mov r1, #I2C_PRESCALER_HIGH
267 str r1, [r0, #I2C_CPSR1]
268 /* setup i2c slave address */
269 mov r1, #(AS3514_I2C_ADDR << 1)
270 str r1, [r0, #I2C_SLAD0]
271 mov r2, #0x51
272 str r2, [r0, #I2C_CNTRL]
273
274 /* wait for not busy */
2751:
276 ldr r1, [r0, #I2C_SR]
277 tst r1, #1
278 bne 1b
279
280 /* wait a bit (~100ms) else detection fails */
281 mov r1, #0x80000
2821: subs r1, r1, #1
283 bne 1b
284
285 /* start read of irq_enrd0 */
286 mov r1, #AS3514_IRQ_ENRD0
287 str r1, [r0, #I2C_SADDR]
288 orr r2, r2, #(1 << 1)
289 str r2, [r0, #I2C_CNTRL]
290 mov r1, #1
291 str r1, [r0, #I2C_DACNT]
292
293 /* wait for transfer to finish */
2941:
295 ldr r1, [r0, #I2C_DACNT]
296 cmp r1, #0
297 bne 1b
298
299 /* load result and test USB_STATUS bit */
300 ldr r1, [r0, #I2C_DATA]
301 tst r1, #(1 << 3)
302 bne boot_of
303
304
242#elif defined(SANSA_C200V2) 305#elif defined(SANSA_C200V2)
243 /* check for RIGHT on C6, should changed to LEFT as soon as it 306 /* check for RIGHT on C6, should changed to LEFT as soon as it
244 * known in which pin that is in order for consistency */ 307 * known in which pin that is in order for consistency */