summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <funman@videolan.org>2012-01-30 00:10:21 -0500
committerRafaël Carré <funman@videolan.org>2012-01-30 00:13:51 -0500
commitd1b47c2eeb091d8d45fc73049998d68f33d9c5c0 (patch)
treeffc0036de6fdf3850ccf4cd356999aab1d82f080
parente7892c9851da0f3506c380983fac0c019f773489 (diff)
downloadrockbox-d1b47c2eeb091d8d45fc73049998d68f33d9c5c0.tar.gz
rockbox-d1b47c2eeb091d8d45fc73049998d68f33d9c5c0.zip
Clipv2: fix button reading on some models
We neet to setup the XPD to work as GPIO storage unaffected Tested on working-already Clipv2 and on a 'brickable' clipv2 Change-Id: Idcbdfb6bd50d51b7f6f7e00b21df24fac9b3a6d8
-rw-r--r--firmware/target/arm/as3525/button-clip.c1
-rw-r--r--rbutil/mkamsboot/dualboot.c13
-rw-r--r--rbutil/mkamsboot/dualboot.h2
-rw-r--r--rbutil/mkamsboot/dualboot/dualboot.S6
4 files changed, 15 insertions, 7 deletions
diff --git a/firmware/target/arm/as3525/button-clip.c b/firmware/target/arm/as3525/button-clip.c
index 18bac8aa01..2bd472c049 100644
--- a/firmware/target/arm/as3525/button-clip.c
+++ b/firmware/target/arm/as3525/button-clip.c
@@ -52,6 +52,7 @@ static const int rows[3] = {
52void button_init_device(void) 52void button_init_device(void)
53{ 53{
54 GPIOA_DIR &= ~((1<<7) | (1<<3)); 54 GPIOA_DIR &= ~((1<<7) | (1<<3));
55 CCU_IO &= ~(3<<2);
55 IN_DIR &= ~((1<<2) | (1<<1) | (1<<0)); 56 IN_DIR &= ~((1<<2) | (1<<1) | (1<<0));
56 57
57 for (int i = 0; i < 3; i++) { 58 for (int i = 0; i < 3; i++) {
diff --git a/rbutil/mkamsboot/dualboot.c b/rbutil/mkamsboot/dualboot.c
index 050e114ef8..d97ab0e95b 100644
--- a/rbutil/mkamsboot/dualboot.c
+++ b/rbutil/mkamsboot/dualboot.c
@@ -89,21 +89,22 @@ unsigned char dualboot_fuze[176] = {
89 0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 89 0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2,
90 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0d, 0xc8 90 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0d, 0xc8
91}; 91};
92unsigned char dualboot_clipv2[220] = { 92unsigned char dualboot_clipv2[240] = {
93 0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93 0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95 0x24, 0x00, 0x1f, 0xe5, 0x24, 0x10, 0x1f, 0xe5, 0x01, 0x20, 0x40, 0xe0, 0x18, 0x30, 0x1f, 0xe5, 95 0x24, 0x00, 0x1f, 0xe5, 0x24, 0x10, 0x1f, 0xe5, 0x01, 0x20, 0x40, 0xe0, 0x18, 0x30, 0x1f, 0xe5,
96 0x01, 0x40, 0x50, 0xe4, 0x01, 0x40, 0x43, 0xe4, 0x00, 0x00, 0x52, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 96 0x01, 0x40, 0x50, 0xe4, 0x01, 0x40, 0x43, 0xe4, 0x00, 0x00, 0x52, 0xe1, 0xfb, 0xff, 0xff, 0x1a,
97 0x2c, 0x30, 0x0f, 0xe5, 0x88, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3, 97 0x2c, 0x30, 0x0f, 0xe5, 0x98, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3,
98 0x00, 0x10, 0x80, 0xe5, 0x7c, 0x00, 0x9f, 0xe5, 0x38, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5, 98 0x00, 0x10, 0x80, 0xe5, 0x8c, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x0c, 0x10, 0xc1, 0xe3,
99 0x00, 0x10, 0x80, 0xe5, 0x80, 0x00, 0x9f, 0xe5, 0x38, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5,
99 0x08, 0x10, 0xa0, 0xe3, 0x20, 0x10, 0x80, 0xe5, 0x10, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5, 100 0x08, 0x10, 0xa0, 0xe3, 0x20, 0x10, 0x80, 0xe5, 0x10, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5,
100 0x20, 0x10, 0xa0, 0xe3, 0x80, 0x10, 0x80, 0xe5, 0x00, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5, 101 0x20, 0x10, 0xa0, 0xe3, 0x80, 0x10, 0x80, 0xe5, 0x00, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5,
101 0x05, 0x10, 0xa0, 0xe3, 0x01, 0x10, 0x51, 0xe2, 0xfd, 0xff, 0xff, 0x1a, 0x04, 0x10, 0x90, 0xe5, 102 0x05, 0x10, 0xa0, 0xe3, 0x01, 0x10, 0x51, 0xe2, 0xfd, 0xff, 0xff, 0x1a, 0x04, 0x10, 0x90, 0xe5,
102 0x00, 0x00, 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a, 0x8c, 0x00, 0x1f, 0xe5, 0x8c, 0x10, 0x1f, 0xe5, 103 0x00, 0x00, 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a, 0x9c, 0x00, 0x1f, 0xe5, 0x9c, 0x10, 0x1f, 0xe5,
103 0x01, 0x00, 0x00, 0xea, 0xa0, 0x00, 0x1f, 0xe5, 0xa0, 0x10, 0x1f, 0xe5, 0x98, 0x30, 0x1f, 0xe5, 104 0x01, 0x00, 0x00, 0xea, 0xb0, 0x00, 0x1f, 0xe5, 0xb0, 0x10, 0x1f, 0xe5, 0xa8, 0x30, 0x1f, 0xe5,
104 0x02, 0x50, 0x83, 0xe2, 0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4, 0x01, 0x20, 0x43, 0xe4, 105 0x02, 0x50, 0x83, 0xe2, 0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4, 0x01, 0x20, 0x43, 0xe4,
105 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 106 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3,
106 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0e, 0xc8 107 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8, 0x0c, 0x00, 0x10, 0xc8, 0x00, 0x00, 0x0e, 0xc8
107}; 108};
108unsigned char dualboot_clipplus[184] = { 109unsigned char dualboot_clipplus[184] = {
109 0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110 0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
diff --git a/rbutil/mkamsboot/dualboot.h b/rbutil/mkamsboot/dualboot.h
index 2a470d3a03..774c35c119 100644
--- a/rbutil/mkamsboot/dualboot.h
+++ b/rbutil/mkamsboot/dualboot.h
@@ -6,7 +6,7 @@ extern unsigned char dualboot_e200v2[176];
6extern unsigned char dualboot_c200v2[272]; 6extern unsigned char dualboot_c200v2[272];
7extern unsigned char dualboot_m200v4[180]; 7extern unsigned char dualboot_m200v4[180];
8extern unsigned char dualboot_fuze[176]; 8extern unsigned char dualboot_fuze[176];
9extern unsigned char dualboot_clipv2[220]; 9extern unsigned char dualboot_clipv2[240];
10extern unsigned char dualboot_clipplus[184]; 10extern unsigned char dualboot_clipplus[184];
11extern unsigned char dualboot_fuzev2[176]; 11extern unsigned char dualboot_fuzev2[176];
12extern unsigned char dualboot_clipzip[232]; 12extern unsigned char dualboot_clipzip[232];
diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S
index 932e91a4a3..4e4dbe5505 100644
--- a/rbutil/mkamsboot/dualboot/dualboot.S
+++ b/rbutil/mkamsboot/dualboot/dualboot.S
@@ -29,6 +29,7 @@
29.set CGU_PROC, 0xC80F0010 29.set CGU_PROC, 0xC80F0010
30.set CGU_PERI, 0xC80F0014 30.set CGU_PERI, 0xC80F0014
31.set CGU_DBOP, 0xC80F0038 31.set CGU_DBOP, 0xC80F0038
32.set CCU_IO, 0xC810000C
32.set DBOP, 0xC8120000 33.set DBOP, 0xC8120000
33.set I2C_BASE, 0xC8070000 34.set I2C_BASE, 0xC8070000
34.set I2C_DATA, 0x00 35.set I2C_DATA, 0x00
@@ -111,6 +112,11 @@ uclcopy:
111.set row, (1<<4) /* enable output on D4 */ 112.set row, (1<<4) /* enable output on D4 */
112.set col, (1<<0) /* read keyscan column D0 */ 113.set col, (1<<0) /* read keyscan column D0 */
113 114
115 ldr r0, =CCU_IO
116 ldr r1, [r0]
117 bic r1, r1, #(3<<2) @ XPD works as general purpose IO
118 str r1, [r0]
119
114 ldr r0, =GPIOD 120 ldr r0, =GPIOD
115 mov r1, #((1<<5)|(1<<4)|(1<<3)) /* all rows as output */ 121 mov r1, #((1<<5)|(1<<4)|(1<<3)) /* all rows as output */
116 str r1, [r0, #0x400] 122 str r1, [r0, #0x400]