diff options
Diffstat (limited to 'firmware/target/arm/ipod/3g/button-3g.c')
-rw-r--r-- | firmware/target/arm/ipod/3g/button-3g.c | 18 |
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 | ||