summaryrefslogtreecommitdiff
path: root/rbutil/mkamsboot/dualboot
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-03-09 16:29:38 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-03-09 16:29:38 +0000
commit1f251ea30dbcd23494e5981d6ef21f18211096f2 (patch)
tree418a9c7abe82263ef8c51393e6493accfa3db993 /rbutil/mkamsboot/dualboot
parent8d720f4d4e956a0c97466def1f3600ae5c10f268 (diff)
downloadrockbox-1f251ea30dbcd23494e5981d6ef21f18211096f2.tar.gz
rockbox-1f251ea30dbcd23494e5981d6ef21f18211096f2.zip
mkamsboot: Use audio master irq_enrd0 usb_status bit instead of gpio on C200V2
FlySpray: FS#11085 Author: Tobias Diedrich git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25088 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/mkamsboot/dualboot')
-rw-r--r--rbutil/mkamsboot/dualboot/dualboot.S77
1 files changed, 73 insertions, 4 deletions
diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S
index d1a9721f9f..8bb2059d78 100644
--- a/rbutil/mkamsboot/dualboot/dualboot.S
+++ b/rbutil/mkamsboot/dualboot/dualboot.S
@@ -27,7 +27,26 @@
27.set GPIOC, 0xC80D0000 27.set GPIOC, 0xC80D0000
28.set GPIOD, 0xC80E0000 28.set GPIOD, 0xC80E0000
29.set CGU_PERI, 0xC80F0014 29.set CGU_PERI, 0xC80F0014
30 30.set I2C_BASE, 0xC8070000
31.set I2C_DATA, 0x00
32.set I2C_SLAD0, 0x04
33.set I2C_CNTRL, 0x0c
34.set I2C_DACNT, 0x10
35.set I2C_CPSR0, 0x1c
36.set I2C_CPSR1, 0x20
37.set I2C_IMR, 0x24
38.set I2C_SR, 0x30
39.set I2C_SADDR, 0x44
40.set AS3514_I2C_ADDR, 0x46
41.set AS3514_IRQ_ENRD0, 0x25
42.set PCLK, 24000000
43.set I2C_CLK, 400000
44.set I2C_PRESCALER, ((PCLK + I2C_CLK -1) / I2C_CLK)
45.set I2C_PRESCALER_LOW, (I2C_PRESCALER & 0xff)
46.set I2C_PRESCALER_HIGH, (I2C_PRESCALER >> 8)
47#if I2C_PRESCALER_HIGH > 3
48#error i2c prescaler too big!
49#endif
31 50
32/* Vectors */ 51/* Vectors */
33 52
@@ -80,9 +99,7 @@ uclcopy:
80 99
81 100
82/* TODO : M200V4 ? */ 101/* TODO : M200V4 ? */
83#if defined(SANSA_C200V2) 102#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
84#define USB_PIN 1 /* FIXME: not correct on some c200v2s */
85#elif defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
86#define USB_PIN 6 103#define USB_PIN 6
87#elif defined(SANSA_FUZE) || defined(SANSA_E200V2) || defined(SANSA_FUZEV2) 104#elif defined(SANSA_FUZE) || defined(SANSA_E200V2) || defined(SANSA_FUZEV2)
88#define USB_PIN 3 105#define USB_PIN 3
@@ -96,6 +113,58 @@ uclcopy:
96 cmp r1, #0 113 cmp r1, #0
97 bne boot_of 114 bne boot_of
98#endif 115#endif
116#if defined(SANSA_C200V2)
117 /* Instead of checking the GPIO, check the audio master IRQ_ENRD0
118 * USB_STATUS bit on C200V2 */
119
120 ldr r0, =CGU_PERI
121 ldr r1, [r0]
122 /* enable i2c audio master clock */
123 orr r1, r1, #(1<<17)
124 /* make sure 24MHz clk_main is selected */
125 bic r1, r1, #0x7f
126 str r1, [r0]
127
128 ldr r0, =I2C_BASE
129 /* disable i2c interrupts */
130 mov r1, #0
131 str r1, [r0, #I2C_IMR]
132 /* setup prescaler */
133 mov r1, #I2C_PRESCALER_LOW
134 str r1, [r0, #I2C_CPSR0]
135 mov r1, #I2C_PRESCALER_HIGH
136 str r1, [r0, #I2C_CPSR1]
137 /* setup i2c slave address */
138 mov r1, #(AS3514_I2C_ADDR << 1)
139 str r1, [r0, #I2C_SLAD0]
140 mov r2, #0x51
141 str r2, [r0, #I2C_CNTRL]
142
143 /* wait for not busy */
1441:
145 ldr r1, [r0, #I2C_SR]
146 tst r1, #1
147 bne 1b
148
149 /* start read of irq_enrd0 */
150 mov r1, #AS3514_IRQ_ENRD0
151 str r1, [r0, #I2C_SADDR]
152 orr r2, r2, #(1 << 1)
153 str r2, [r0, #I2C_CNTRL]
154 mov r1, #1
155 str r1, [r0, #I2C_DACNT]
156
157 /* wait for transfer to finish */
1581:
159 ldr r1, [r0, #I2C_DACNT]
160 cmp r1, #0
161 bne 1b
162
163 /* load result and test USB_STATUS bit */
164 ldr r1, [r0, #I2C_DATA]
165 tst r1, #(1 << 3)
166 bne boot_of
167#endif
99 168
100 /* Here are model specific tests, for dual boot without a computer */ 169 /* Here are model specific tests, for dual boot without a computer */
101 /* All models use left button */ 170 /* All models use left button */