summaryrefslogtreecommitdiff
path: root/firmware/target/arm/ipod/3g
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/ipod/3g')
-rw-r--r--firmware/target/arm/ipod/3g/button-3g.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/firmware/target/arm/ipod/3g/button-3g.c b/firmware/target/arm/ipod/3g/button-3g.c
index c034d55936..aa26e30280 100644
--- a/firmware/target/arm/ipod/3g/button-3g.c
+++ b/firmware/target/arm/ipod/3g/button-3g.c
@@ -103,11 +103,12 @@ static int ipod_3g_button_read(void)
103 unsigned char source, state; 103 unsigned char source, state;
104 static int was_hold = 0; 104 static int was_hold = 0;
105 int btn = BUTTON_NONE; 105 int btn = BUTTON_NONE;
106 /* 106
107 * we need some delay for g3, cause hold generates several interrupts, 107#ifdef IPOD_3G
108 * some of them delayed 108 /* we need some delay for g3, cause hold generates several interrupts,
109 */ 109 * some of them delayed */
110 udelay(250); 110 udelay(250);
111#endif
111 112
112 /* get source of interupts */ 113 /* get source of interupts */
113 source = GPIOA_INT_STAT; 114 source = GPIOA_INT_STAT;
@@ -117,6 +118,7 @@ static int ipod_3g_button_read(void)
117 state = GPIOA_INPUT_VAL; 118 state = GPIOA_INPUT_VAL;
118 GPIOA_INT_LEV = ~state; 119 GPIOA_INT_LEV = ~state;
119 120
121#ifdef IPOD_3G
120 if (was_hold && source == 0x40 && state == 0xbf) { 122 if (was_hold && source == 0x40 && state == 0xbf) {
121 /* ack any active interrupts */ 123 /* ack any active interrupts */
122 GPIOA_INT_CLR = source; 124 GPIOA_INT_CLR = source;
@@ -124,7 +126,6 @@ static int ipod_3g_button_read(void)
124 } 126 }
125 was_hold = 0; 127 was_hold = 0;
126 128
127
128 if ((state & 0x20) == 0) { 129 if ((state & 0x20) == 0) {
129 /* 3g hold switch is active low */ 130 /* 3g hold switch is active low */
130 was_hold = 1; 131 was_hold = 1;
@@ -133,6 +134,12 @@ static int ipod_3g_button_read(void)
133 GPIOA_INT_CLR = source; 134 GPIOA_INT_CLR = source;
134 return BUTTON_NONE; 135 return BUTTON_NONE;
135 } 136 }
137#elif defined IPOD_1G2G
138 if (state & 0x20)
139 was_hold = 1;
140 else
141 was_hold = 0;
142#endif
136 if ((state & 0x1) == 0) { 143 if ((state & 0x1) == 0) {
137 btn |= BUTTON_RIGHT; 144 btn |= BUTTON_RIGHT;
138 } 145 }
@@ -163,6 +170,7 @@ void button_init_device(void)
163{ 170{
164 GPIOA_INT_LEV = ~GPIOA_INPUT_VAL; 171 GPIOA_INT_LEV = ~GPIOA_INPUT_VAL;
165 GPIOA_INT_CLR = GPIOA_INT_STAT; 172 GPIOA_INT_CLR = GPIOA_INT_STAT;
173 /* TODO: put additional G1 code here */
166 GPIOA_INT_EN = 0xff; 174 GPIOA_INT_EN = 0xff;
167} 175}
168 176