16 #include <linux/bitops.h>
21 #include <linux/module.h>
37 #define MSM_GPIO1_REG(off) (MSM_GPIO1_BASE + (off))
38 #define MSM_GPIO2_REG(off) (MSM_GPIO2_BASE + 0x400 + (off))
39 #define MSM_GPIO1_SHADOW_REG(off) (MSM_GPIO1_BASE + 0x800 + (off))
40 #define MSM_GPIO2_SHADOW_REG(off) (MSM_GPIO2_BASE + 0xC00 + (off))
46 #define MSM7X00_GPIO_OUT_0 MSM_GPIO1_SHADOW_REG(0x00)
47 #define MSM7X00_GPIO_OUT_1 MSM_GPIO2_SHADOW_REG(0x00)
48 #define MSM7X00_GPIO_OUT_2 MSM_GPIO1_SHADOW_REG(0x04)
49 #define MSM7X00_GPIO_OUT_3 MSM_GPIO1_SHADOW_REG(0x08)
50 #define MSM7X00_GPIO_OUT_4 MSM_GPIO1_SHADOW_REG(0x0C)
51 #define MSM7X00_GPIO_OUT_5 MSM_GPIO1_SHADOW_REG(0x50)
54 #define MSM7X00_GPIO_OE_0 MSM_GPIO1_SHADOW_REG(0x10)
55 #define MSM7X00_GPIO_OE_1 MSM_GPIO2_SHADOW_REG(0x08)
56 #define MSM7X00_GPIO_OE_2 MSM_GPIO1_SHADOW_REG(0x14)
57 #define MSM7X00_GPIO_OE_3 MSM_GPIO1_SHADOW_REG(0x18)
58 #define MSM7X00_GPIO_OE_4 MSM_GPIO1_SHADOW_REG(0x1C)
59 #define MSM7X00_GPIO_OE_5 MSM_GPIO1_SHADOW_REG(0x54)
62 #define MSM7X00_GPIO_IN_0 MSM_GPIO1_SHADOW_REG(0x34)
63 #define MSM7X00_GPIO_IN_1 MSM_GPIO2_SHADOW_REG(0x20)
64 #define MSM7X00_GPIO_IN_2 MSM_GPIO1_SHADOW_REG(0x38)
65 #define MSM7X00_GPIO_IN_3 MSM_GPIO1_SHADOW_REG(0x3C)
66 #define MSM7X00_GPIO_IN_4 MSM_GPIO1_SHADOW_REG(0x40)
67 #define MSM7X00_GPIO_IN_5 MSM_GPIO1_SHADOW_REG(0x44)
70 #define MSM7X00_GPIO_INT_EDGE_0 MSM_GPIO1_SHADOW_REG(0x60)
71 #define MSM7X00_GPIO_INT_EDGE_1 MSM_GPIO2_SHADOW_REG(0x50)
72 #define MSM7X00_GPIO_INT_EDGE_2 MSM_GPIO1_SHADOW_REG(0x64)
73 #define MSM7X00_GPIO_INT_EDGE_3 MSM_GPIO1_SHADOW_REG(0x68)
74 #define MSM7X00_GPIO_INT_EDGE_4 MSM_GPIO1_SHADOW_REG(0x6C)
75 #define MSM7X00_GPIO_INT_EDGE_5 MSM_GPIO1_SHADOW_REG(0xC0)
78 #define MSM7X00_GPIO_INT_POS_0 MSM_GPIO1_SHADOW_REG(0x70)
79 #define MSM7X00_GPIO_INT_POS_1 MSM_GPIO2_SHADOW_REG(0x58)
80 #define MSM7X00_GPIO_INT_POS_2 MSM_GPIO1_SHADOW_REG(0x74)
81 #define MSM7X00_GPIO_INT_POS_3 MSM_GPIO1_SHADOW_REG(0x78)
82 #define MSM7X00_GPIO_INT_POS_4 MSM_GPIO1_SHADOW_REG(0x7C)
83 #define MSM7X00_GPIO_INT_POS_5 MSM_GPIO1_SHADOW_REG(0xBC)
86 #define MSM7X00_GPIO_INT_EN_0 MSM_GPIO1_SHADOW_REG(0x80)
87 #define MSM7X00_GPIO_INT_EN_1 MSM_GPIO2_SHADOW_REG(0x60)
88 #define MSM7X00_GPIO_INT_EN_2 MSM_GPIO1_SHADOW_REG(0x84)
89 #define MSM7X00_GPIO_INT_EN_3 MSM_GPIO1_SHADOW_REG(0x88)
90 #define MSM7X00_GPIO_INT_EN_4 MSM_GPIO1_SHADOW_REG(0x8C)
91 #define MSM7X00_GPIO_INT_EN_5 MSM_GPIO1_SHADOW_REG(0xB8)
94 #define MSM7X00_GPIO_INT_CLEAR_0 MSM_GPIO1_SHADOW_REG(0x90)
95 #define MSM7X00_GPIO_INT_CLEAR_1 MSM_GPIO2_SHADOW_REG(0x68)
96 #define MSM7X00_GPIO_INT_CLEAR_2 MSM_GPIO1_SHADOW_REG(0x94)
97 #define MSM7X00_GPIO_INT_CLEAR_3 MSM_GPIO1_SHADOW_REG(0x98)
98 #define MSM7X00_GPIO_INT_CLEAR_4 MSM_GPIO1_SHADOW_REG(0x9C)
99 #define MSM7X00_GPIO_INT_CLEAR_5 MSM_GPIO1_SHADOW_REG(0xB4)
102 #define MSM7X00_GPIO_INT_STATUS_0 MSM_GPIO1_SHADOW_REG(0xA0)
103 #define MSM7X00_GPIO_INT_STATUS_1 MSM_GPIO2_SHADOW_REG(0x70)
104 #define MSM7X00_GPIO_INT_STATUS_2 MSM_GPIO1_SHADOW_REG(0xA4)
105 #define MSM7X00_GPIO_INT_STATUS_3 MSM_GPIO1_SHADOW_REG(0xA8)
106 #define MSM7X00_GPIO_INT_STATUS_4 MSM_GPIO1_SHADOW_REG(0xAC)
107 #define MSM7X00_GPIO_INT_STATUS_5 MSM_GPIO1_SHADOW_REG(0xB0)
113 #define QSD8X50_GPIO_OUT_0 MSM_GPIO1_SHADOW_REG(0x00)
114 #define QSD8X50_GPIO_OUT_1 MSM_GPIO2_SHADOW_REG(0x00)
115 #define QSD8X50_GPIO_OUT_2 MSM_GPIO1_SHADOW_REG(0x04)
116 #define QSD8X50_GPIO_OUT_3 MSM_GPIO1_SHADOW_REG(0x08)
117 #define QSD8X50_GPIO_OUT_4 MSM_GPIO1_SHADOW_REG(0x0C)
118 #define QSD8X50_GPIO_OUT_5 MSM_GPIO1_SHADOW_REG(0x10)
119 #define QSD8X50_GPIO_OUT_6 MSM_GPIO1_SHADOW_REG(0x14)
120 #define QSD8X50_GPIO_OUT_7 MSM_GPIO1_SHADOW_REG(0x18)
123 #define QSD8X50_GPIO_OE_0 MSM_GPIO1_SHADOW_REG(0x20)
124 #define QSD8X50_GPIO_OE_1 MSM_GPIO2_SHADOW_REG(0x08)
125 #define QSD8X50_GPIO_OE_2 MSM_GPIO1_SHADOW_REG(0x24)
126 #define QSD8X50_GPIO_OE_3 MSM_GPIO1_SHADOW_REG(0x28)
127 #define QSD8X50_GPIO_OE_4 MSM_GPIO1_SHADOW_REG(0x2C)
128 #define QSD8X50_GPIO_OE_5 MSM_GPIO1_SHADOW_REG(0x30)
129 #define QSD8X50_GPIO_OE_6 MSM_GPIO1_SHADOW_REG(0x34)
130 #define QSD8X50_GPIO_OE_7 MSM_GPIO1_SHADOW_REG(0x38)
133 #define QSD8X50_GPIO_IN_0 MSM_GPIO1_SHADOW_REG(0x50)
134 #define QSD8X50_GPIO_IN_1 MSM_GPIO2_SHADOW_REG(0x20)
135 #define QSD8X50_GPIO_IN_2 MSM_GPIO1_SHADOW_REG(0x54)
136 #define QSD8X50_GPIO_IN_3 MSM_GPIO1_SHADOW_REG(0x58)
137 #define QSD8X50_GPIO_IN_4 MSM_GPIO1_SHADOW_REG(0x5C)
138 #define QSD8X50_GPIO_IN_5 MSM_GPIO1_SHADOW_REG(0x60)
139 #define QSD8X50_GPIO_IN_6 MSM_GPIO1_SHADOW_REG(0x64)
140 #define QSD8X50_GPIO_IN_7 MSM_GPIO1_SHADOW_REG(0x68)
143 #define QSD8X50_GPIO_INT_EDGE_0 MSM_GPIO1_SHADOW_REG(0x70)
144 #define QSD8X50_GPIO_INT_EDGE_1 MSM_GPIO2_SHADOW_REG(0x50)
145 #define QSD8X50_GPIO_INT_EDGE_2 MSM_GPIO1_SHADOW_REG(0x74)
146 #define QSD8X50_GPIO_INT_EDGE_3 MSM_GPIO1_SHADOW_REG(0x78)
147 #define QSD8X50_GPIO_INT_EDGE_4 MSM_GPIO1_SHADOW_REG(0x7C)
148 #define QSD8X50_GPIO_INT_EDGE_5 MSM_GPIO1_SHADOW_REG(0x80)
149 #define QSD8X50_GPIO_INT_EDGE_6 MSM_GPIO1_SHADOW_REG(0x84)
150 #define QSD8X50_GPIO_INT_EDGE_7 MSM_GPIO1_SHADOW_REG(0x88)
153 #define QSD8X50_GPIO_INT_POS_0 MSM_GPIO1_SHADOW_REG(0x90)
154 #define QSD8X50_GPIO_INT_POS_1 MSM_GPIO2_SHADOW_REG(0x58)
155 #define QSD8X50_GPIO_INT_POS_2 MSM_GPIO1_SHADOW_REG(0x94)
156 #define QSD8X50_GPIO_INT_POS_3 MSM_GPIO1_SHADOW_REG(0x98)
157 #define QSD8X50_GPIO_INT_POS_4 MSM_GPIO1_SHADOW_REG(0x9C)
158 #define QSD8X50_GPIO_INT_POS_5 MSM_GPIO1_SHADOW_REG(0xA0)
159 #define QSD8X50_GPIO_INT_POS_6 MSM_GPIO1_SHADOW_REG(0xA4)
160 #define QSD8X50_GPIO_INT_POS_7 MSM_GPIO1_SHADOW_REG(0xA8)
163 #define QSD8X50_GPIO_INT_EN_0 MSM_GPIO1_SHADOW_REG(0xB0)
164 #define QSD8X50_GPIO_INT_EN_1 MSM_GPIO2_SHADOW_REG(0x60)
165 #define QSD8X50_GPIO_INT_EN_2 MSM_GPIO1_SHADOW_REG(0xB4)
166 #define QSD8X50_GPIO_INT_EN_3 MSM_GPIO1_SHADOW_REG(0xB8)
167 #define QSD8X50_GPIO_INT_EN_4 MSM_GPIO1_SHADOW_REG(0xBC)
168 #define QSD8X50_GPIO_INT_EN_5 MSM_GPIO1_SHADOW_REG(0xC0)
169 #define QSD8X50_GPIO_INT_EN_6 MSM_GPIO1_SHADOW_REG(0xC4)
170 #define QSD8X50_GPIO_INT_EN_7 MSM_GPIO1_SHADOW_REG(0xC8)
173 #define QSD8X50_GPIO_INT_CLEAR_0 MSM_GPIO1_SHADOW_REG(0xD0)
174 #define QSD8X50_GPIO_INT_CLEAR_1 MSM_GPIO2_SHADOW_REG(0x68)
175 #define QSD8X50_GPIO_INT_CLEAR_2 MSM_GPIO1_SHADOW_REG(0xD4)
176 #define QSD8X50_GPIO_INT_CLEAR_3 MSM_GPIO1_SHADOW_REG(0xD8)
177 #define QSD8X50_GPIO_INT_CLEAR_4 MSM_GPIO1_SHADOW_REG(0xDC)
178 #define QSD8X50_GPIO_INT_CLEAR_5 MSM_GPIO1_SHADOW_REG(0xE0)
179 #define QSD8X50_GPIO_INT_CLEAR_6 MSM_GPIO1_SHADOW_REG(0xE4)
180 #define QSD8X50_GPIO_INT_CLEAR_7 MSM_GPIO1_SHADOW_REG(0xE8)
183 #define QSD8X50_GPIO_INT_STATUS_0 MSM_GPIO1_SHADOW_REG(0xF0)
184 #define QSD8X50_GPIO_INT_STATUS_1 MSM_GPIO2_SHADOW_REG(0x70)
185 #define QSD8X50_GPIO_INT_STATUS_2 MSM_GPIO1_SHADOW_REG(0xF4)
186 #define QSD8X50_GPIO_INT_STATUS_3 MSM_GPIO1_SHADOW_REG(0xF8)
187 #define QSD8X50_GPIO_INT_STATUS_4 MSM_GPIO1_SHADOW_REG(0xFC)
188 #define QSD8X50_GPIO_INT_STATUS_5 MSM_GPIO1_SHADOW_REG(0x100)
189 #define QSD8X50_GPIO_INT_STATUS_6 MSM_GPIO1_SHADOW_REG(0x104)
190 #define QSD8X50_GPIO_INT_STATUS_7 MSM_GPIO1_SHADOW_REG(0x108)
196 #define MSM7X30_GPIO_OUT_0 MSM_GPIO1_REG(0x00)
197 #define MSM7X30_GPIO_OUT_1 MSM_GPIO2_REG(0x00)
198 #define MSM7X30_GPIO_OUT_2 MSM_GPIO1_REG(0x04)
199 #define MSM7X30_GPIO_OUT_3 MSM_GPIO1_REG(0x08)
200 #define MSM7X30_GPIO_OUT_4 MSM_GPIO1_REG(0x0C)
201 #define MSM7X30_GPIO_OUT_5 MSM_GPIO1_REG(0x50)
202 #define MSM7X30_GPIO_OUT_6 MSM_GPIO1_REG(0xC4)
203 #define MSM7X30_GPIO_OUT_7 MSM_GPIO1_REG(0x214)
206 #define MSM7X30_GPIO_OE_0 MSM_GPIO1_REG(0x10)
207 #define MSM7X30_GPIO_OE_1 MSM_GPIO2_REG(0x08)
208 #define MSM7X30_GPIO_OE_2 MSM_GPIO1_REG(0x14)
209 #define MSM7X30_GPIO_OE_3 MSM_GPIO1_REG(0x18)
210 #define MSM7X30_GPIO_OE_4 MSM_GPIO1_REG(0x1C)
211 #define MSM7X30_GPIO_OE_5 MSM_GPIO1_REG(0x54)
212 #define MSM7X30_GPIO_OE_6 MSM_GPIO1_REG(0xC8)
213 #define MSM7X30_GPIO_OE_7 MSM_GPIO1_REG(0x218)
216 #define MSM7X30_GPIO_IN_0 MSM_GPIO1_REG(0x34)
217 #define MSM7X30_GPIO_IN_1 MSM_GPIO2_REG(0x20)
218 #define MSM7X30_GPIO_IN_2 MSM_GPIO1_REG(0x38)
219 #define MSM7X30_GPIO_IN_3 MSM_GPIO1_REG(0x3C)
220 #define MSM7X30_GPIO_IN_4 MSM_GPIO1_REG(0x40)
221 #define MSM7X30_GPIO_IN_5 MSM_GPIO1_REG(0x44)
222 #define MSM7X30_GPIO_IN_6 MSM_GPIO1_REG(0xCC)
223 #define MSM7X30_GPIO_IN_7 MSM_GPIO1_REG(0x21C)
226 #define MSM7X30_GPIO_INT_EDGE_0 MSM_GPIO1_REG(0x60)
227 #define MSM7X30_GPIO_INT_EDGE_1 MSM_GPIO2_REG(0x50)
228 #define MSM7X30_GPIO_INT_EDGE_2 MSM_GPIO1_REG(0x64)
229 #define MSM7X30_GPIO_INT_EDGE_3 MSM_GPIO1_REG(0x68)
230 #define MSM7X30_GPIO_INT_EDGE_4 MSM_GPIO1_REG(0x6C)
231 #define MSM7X30_GPIO_INT_EDGE_5 MSM_GPIO1_REG(0xC0)
232 #define MSM7X30_GPIO_INT_EDGE_6 MSM_GPIO1_REG(0xD0)
233 #define MSM7X30_GPIO_INT_EDGE_7 MSM_GPIO1_REG(0x240)
236 #define MSM7X30_GPIO_INT_POS_0 MSM_GPIO1_REG(0x70)
237 #define MSM7X30_GPIO_INT_POS_1 MSM_GPIO2_REG(0x58)
238 #define MSM7X30_GPIO_INT_POS_2 MSM_GPIO1_REG(0x74)
239 #define MSM7X30_GPIO_INT_POS_3 MSM_GPIO1_REG(0x78)
240 #define MSM7X30_GPIO_INT_POS_4 MSM_GPIO1_REG(0x7C)
241 #define MSM7X30_GPIO_INT_POS_5 MSM_GPIO1_REG(0xBC)
242 #define MSM7X30_GPIO_INT_POS_6 MSM_GPIO1_REG(0xD4)
243 #define MSM7X30_GPIO_INT_POS_7 MSM_GPIO1_REG(0x228)
246 #define MSM7X30_GPIO_INT_EN_0 MSM_GPIO1_REG(0x80)
247 #define MSM7X30_GPIO_INT_EN_1 MSM_GPIO2_REG(0x60)
248 #define MSM7X30_GPIO_INT_EN_2 MSM_GPIO1_REG(0x84)
249 #define MSM7X30_GPIO_INT_EN_3 MSM_GPIO1_REG(0x88)
250 #define MSM7X30_GPIO_INT_EN_4 MSM_GPIO1_REG(0x8C)
251 #define MSM7X30_GPIO_INT_EN_5 MSM_GPIO1_REG(0xB8)
252 #define MSM7X30_GPIO_INT_EN_6 MSM_GPIO1_REG(0xD8)
253 #define MSM7X30_GPIO_INT_EN_7 MSM_GPIO1_REG(0x22C)
256 #define MSM7X30_GPIO_INT_CLEAR_0 MSM_GPIO1_REG(0x90)
257 #define MSM7X30_GPIO_INT_CLEAR_1 MSM_GPIO2_REG(0x68)
258 #define MSM7X30_GPIO_INT_CLEAR_2 MSM_GPIO1_REG(0x94)
259 #define MSM7X30_GPIO_INT_CLEAR_3 MSM_GPIO1_REG(0x98)
260 #define MSM7X30_GPIO_INT_CLEAR_4 MSM_GPIO1_REG(0x9C)
261 #define MSM7X30_GPIO_INT_CLEAR_5 MSM_GPIO1_REG(0xB4)
262 #define MSM7X30_GPIO_INT_CLEAR_6 MSM_GPIO1_REG(0xDC)
263 #define MSM7X30_GPIO_INT_CLEAR_7 MSM_GPIO1_REG(0x230)
266 #define MSM7X30_GPIO_INT_STATUS_0 MSM_GPIO1_REG(0xA0)
267 #define MSM7X30_GPIO_INT_STATUS_1 MSM_GPIO2_REG(0x70)
268 #define MSM7X30_GPIO_INT_STATUS_2 MSM_GPIO1_REG(0xA4)
269 #define MSM7X30_GPIO_INT_STATUS_3 MSM_GPIO1_REG(0xA8)
270 #define MSM7X30_GPIO_INT_STATUS_4 MSM_GPIO1_REG(0xAC)
271 #define MSM7X30_GPIO_INT_STATUS_5 MSM_GPIO1_REG(0xB0)
272 #define MSM7X30_GPIO_INT_STATUS_6 MSM_GPIO1_REG(0xE0)
273 #define MSM7X30_GPIO_INT_STATUS_7 MSM_GPIO1_REG(0x234)
275 #define FIRST_GPIO_IRQ MSM_GPIO_TO_INT(0)
277 #define MSM_GPIO_BANK(soc, bank, first, last) \
280 .out = soc##_GPIO_OUT_##bank, \
281 .in = soc##_GPIO_IN_##bank, \
282 .int_status = soc##_GPIO_INT_STATUS_##bank, \
283 .int_clear = soc##_GPIO_INT_CLEAR_##bank, \
284 .int_en = soc##_GPIO_INT_EN_##bank, \
285 .int_edge = soc##_GPIO_INT_EDGE_##bank, \
286 .int_pos = soc##_GPIO_INT_POS_##bank, \
287 .oe = soc##_GPIO_OE_##bank, \
291 .ngpio = (last) - (first) + 1, \
292 .get = msm_gpio_get, \
293 .set = msm_gpio_set, \
294 .direction_input = msm_gpio_direction_input, \
295 .direction_output = msm_gpio_direction_output, \
296 .to_irq = msm_gpio_to_irq, \
297 .request = msm_gpio_request, \
298 .free = msm_gpio_free, \
302 #define MSM_GPIO_BROKEN_INT_CLEAR 1
317 struct gpio_chip
chip;
319 #if MSM_GPIO_BROKEN_INT_CLEAR
327 unsigned offset,
unsigned on)
340 static void msm_gpio_update_both_edge_detect(
struct msm_gpio_chip *msm_chip)
342 int loop_limit = 100;
343 unsigned pol,
val, val2, intstat;
350 intstat =
readl(msm_chip->
regs.int_status);
354 }
while (loop_limit-- > 0);
356 "failed to reach stable state %x != %x\n", val, val2);
359 static int msm_gpio_clear_detect_status(
struct msm_gpio_chip *msm_chip,
362 unsigned bit =
BIT(offset);
364 #if MSM_GPIO_BROKEN_INT_CLEAR
372 msm_gpio_update_both_edge_detect(msm_chip);
376 static int msm_gpio_direction_input(
struct gpio_chip *
chip,
unsigned offset)
379 unsigned long irq_flags;
384 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
389 msm_gpio_direction_output(
struct gpio_chip *chip,
unsigned offset,
int value)
392 unsigned long irq_flags;
396 msm_gpio_write(msm_chip, offset, value);
398 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
402 static int msm_gpio_get(
struct gpio_chip *chip,
unsigned offset)
407 return (
readl(msm_chip->
regs.in) & (1
U << offset)) ? 1 : 0;
410 static void msm_gpio_set(
struct gpio_chip *chip,
unsigned offset,
int value)
413 unsigned long irq_flags;
417 msm_gpio_write(msm_chip, offset, value);
418 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
421 static int msm_gpio_to_irq(
struct gpio_chip *chip,
unsigned offset)
426 #ifdef CONFIG_MSM_GPIOMUX
432 static void msm_gpio_free(
struct gpio_chip *chip,
unsigned offset)
437 #define msm_gpio_request NULL
438 #define msm_gpio_free NULL
442 static int msm_gpio_count;
475 static void msm_gpio_irq_ack(
struct irq_data *
d)
477 unsigned long irq_flags;
478 struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d);
480 msm_gpio_clear_detect_status(msm_chip,
482 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
485 static void msm_gpio_irq_mask(
struct irq_data *d)
487 unsigned long irq_flags;
488 struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d);
494 msm_gpio_clear_detect_status(msm_chip, offset);
497 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
500 static void msm_gpio_irq_unmask(
struct irq_data *d)
502 unsigned long irq_flags;
503 struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d);
509 msm_gpio_clear_detect_status(msm_chip, offset);
512 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
515 static int msm_gpio_irq_set_wake(
struct irq_data *d,
unsigned int on)
517 unsigned long irq_flags;
518 struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d);
528 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
532 static int msm_gpio_irq_set_type(
struct irq_data *d,
unsigned int flow_type)
534 unsigned long irq_flags;
535 struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d);
548 if ((flow_type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH) {
550 msm_gpio_update_both_edge_detect(msm_chip);
559 spin_unlock_irqrestore(&msm_chip->
lock, irq_flags);
563 static void msm_gpio_irq_handler(
unsigned int irq,
struct irq_desc *
desc)
568 for (i = 0; i < msm_gpio_count; i++) {
580 msm_chip->
chip.base + j);
586 static struct irq_chip msm_gpio_irq_chip = {
588 .irq_ack = msm_gpio_irq_ack,
589 .irq_mask = msm_gpio_irq_mask,
590 .irq_unmask = msm_gpio_irq_unmask,
591 .irq_set_wake = msm_gpio_irq_set_wake,
592 .irq_set_type = msm_gpio_irq_set_type,
600 msm_gpio_chips = msm_gpio_chips_msm7x01;
601 msm_gpio_count =
ARRAY_SIZE(msm_gpio_chips_msm7x01);
603 msm_gpio_chips = msm_gpio_chips_msm7x30;
604 msm_gpio_count =
ARRAY_SIZE(msm_gpio_chips_msm7x30);
606 msm_gpio_chips = msm_gpio_chips_qsd8x50;
607 msm_gpio_count =
ARRAY_SIZE(msm_gpio_chips_qsd8x50);
614 msm_gpio_chips[j].chip.base +
615 msm_gpio_chips[j].
chip.ngpio)
618 irq_set_chip_and_handler(i, &msm_gpio_irq_chip,
623 for (i = 0; i < msm_gpio_count; i++) {