diff options
author | Haojian Zhuang <haojian.zhuang@marvell.com> | 2011-10-10 04:03:51 -0400 |
---|---|---|
committer | Haojian Zhuang <haojian.zhuang@marvell.com> | 2011-11-14 08:07:59 -0500 |
commit | 4929f5a8a99f64378659c5658621e45c90c2aaa9 (patch) | |
tree | 37887d8dafda515434896c467d304c04e276889f /drivers/gpio | |
parent | 87c49e20579c933d531a376596875b8fd5dcb04f (diff) |
ARM: pxa: rename gpio_to_irq and irq_to_gpio
Avoid to define gpio_to_irq() and irq_to_gpio() for potential name
confliction since multiple architecture will be built together.
Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
Diffstat (limited to 'drivers/gpio')
-rw-r--r-- | drivers/gpio/gpio-pxa.c | 89 |
1 files changed, 85 insertions, 4 deletions
diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c index a4121bb50cf2..3e76c588f080 100644 --- a/drivers/gpio/gpio-pxa.c +++ b/drivers/gpio/gpio-pxa.c | |||
@@ -39,8 +39,19 @@ struct pxa_gpio_chip { | |||
39 | #endif | 39 | #endif |
40 | }; | 40 | }; |
41 | 41 | ||
42 | enum { | ||
43 | PXA25X_GPIO = 0, | ||
44 | PXA26X_GPIO, | ||
45 | PXA27X_GPIO, | ||
46 | PXA3XX_GPIO, | ||
47 | PXA93X_GPIO, | ||
48 | MMP_GPIO = 0x10, | ||
49 | MMP2_GPIO, | ||
50 | }; | ||
51 | |||
42 | static DEFINE_SPINLOCK(gpio_lock); | 52 | static DEFINE_SPINLOCK(gpio_lock); |
43 | static struct pxa_gpio_chip *pxa_gpio_chips; | 53 | static struct pxa_gpio_chip *pxa_gpio_chips; |
54 | static int gpio_type; | ||
44 | 55 | ||
45 | #define for_each_gpio_chip(i, c) \ | 56 | #define for_each_gpio_chip(i, c) \ |
46 | for (i = 0, c = &pxa_gpio_chips[0]; i <= pxa_last_gpio; i += 32, c++) | 57 | for (i = 0, c = &pxa_gpio_chips[0]; i <= pxa_last_gpio; i += 32, c++) |
@@ -55,6 +66,75 @@ static inline struct pxa_gpio_chip *gpio_to_pxachip(unsigned gpio) | |||
55 | return &pxa_gpio_chips[gpio_to_bank(gpio)]; | 66 | return &pxa_gpio_chips[gpio_to_bank(gpio)]; |
56 | } | 67 | } |
57 | 68 | ||
69 | static inline int gpio_is_pxa_type(int type) | ||
70 | { | ||
71 | return (type & MMP_GPIO) == 0; | ||
72 | } | ||
73 | |||
74 | static inline int gpio_is_mmp_type(int type) | ||
75 | { | ||
76 | return (type & MMP_GPIO) != 0; | ||
77 | } | ||
78 | |||
79 | #ifdef CONFIG_ARCH_PXA | ||
80 | static inline int __pxa_gpio_to_irq(int gpio) | ||
81 | { | ||
82 | if (gpio_is_pxa_type(gpio_type)) | ||
83 | return PXA_GPIO_TO_IRQ(gpio); | ||
84 | return -1; | ||
85 | } | ||
86 | |||
87 | static inline int __pxa_irq_to_gpio(int irq) | ||
88 | { | ||
89 | if (gpio_is_pxa_type(gpio_type)) | ||
90 | return irq - PXA_GPIO_TO_IRQ(0); | ||
91 | return -1; | ||
92 | } | ||
93 | #else | ||
94 | static inline int __pxa_gpio_to_irq(int gpio) { return -1; } | ||
95 | static inline int __pxa_irq_to_gpio(int irq) { return -1; } | ||
96 | #endif | ||
97 | |||
98 | #ifdef CONFIG_ARCH_MMP | ||
99 | static inline int __mmp_gpio_to_irq(int gpio) | ||
100 | { | ||
101 | if (gpio_is_mmp_type(gpio_type)) | ||
102 | return MMP_GPIO_TO_IRQ(gpio); | ||
103 | return -1; | ||
104 | } | ||
105 | |||
106 | static inline int __mmp_irq_to_gpio(int irq) | ||
107 | { | ||
108 | if (gpio_is_mmp_type(gpio_type)) | ||
109 | return irq - MMP_GPIO_TO_IRQ(0); | ||
110 | return -1; | ||
111 | } | ||
112 | #else | ||
113 | static inline int __mmp_gpio_to_irq(int gpio) { return -1; } | ||
114 | static inline int __mmp_irq_to_gpio(int irq) { return -1; } | ||
115 | #endif | ||
116 | |||
117 | static int pxa_gpio_to_irq(struct gpio_chip *chip, unsigned offset) | ||
118 | { | ||
119 | int gpio, ret; | ||
120 | |||
121 | gpio = chip->base + offset; | ||
122 | ret = __pxa_gpio_to_irq(gpio); | ||
123 | if (ret >= 0) | ||
124 | return ret; | ||
125 | return __mmp_gpio_to_irq(gpio); | ||
126 | } | ||
127 | |||
128 | int pxa_irq_to_gpio(int irq) | ||
129 | { | ||
130 | int ret; | ||
131 | |||
132 | ret = __pxa_irq_to_gpio(irq); | ||
133 | if (ret >= 0) | ||
134 | return ret; | ||
135 | return __mmp_irq_to_gpio(irq); | ||
136 | } | ||
137 | |||
58 | static int pxa_gpio_direction_input(struct gpio_chip *chip, unsigned offset) | 138 | static int pxa_gpio_direction_input(struct gpio_chip *chip, unsigned offset) |
59 | { | 139 | { |
60 | void __iomem *base = gpio_chip_base(chip); | 140 | void __iomem *base = gpio_chip_base(chip); |
@@ -131,6 +211,7 @@ static int __init pxa_init_gpio_chip(int gpio_end) | |||
131 | c->direction_output = pxa_gpio_direction_output; | 211 | c->direction_output = pxa_gpio_direction_output; |
132 | c->get = pxa_gpio_get; | 212 | c->get = pxa_gpio_get; |
133 | c->set = pxa_gpio_set; | 213 | c->set = pxa_gpio_set; |
214 | c->to_irq = pxa_gpio_to_irq; | ||
134 | 215 | ||
135 | /* number of GPIOs on last bank may be less than 32 */ | 216 | /* number of GPIOs on last bank may be less than 32 */ |
136 | c->ngpio = (gpio + 31 > gpio_end) ? (gpio_end - gpio + 1) : 32; | 217 | c->ngpio = (gpio + 31 > gpio_end) ? (gpio_end - gpio + 1) : 32; |
@@ -158,7 +239,7 @@ static inline void update_edge_detect(struct pxa_gpio_chip *c) | |||
158 | static int pxa_gpio_irq_type(struct irq_data *d, unsigned int type) | 239 | static int pxa_gpio_irq_type(struct irq_data *d, unsigned int type) |
159 | { | 240 | { |
160 | struct pxa_gpio_chip *c; | 241 | struct pxa_gpio_chip *c; |
161 | int gpio = irq_to_gpio(d->irq); | 242 | int gpio = pxa_irq_to_gpio(d->irq); |
162 | unsigned long gpdr, mask = GPIO_bit(gpio); | 243 | unsigned long gpdr, mask = GPIO_bit(gpio); |
163 | 244 | ||
164 | c = gpio_to_pxachip(gpio); | 245 | c = gpio_to_pxachip(gpio); |
@@ -229,7 +310,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irq_desc *desc) | |||
229 | 310 | ||
230 | static void pxa_ack_muxed_gpio(struct irq_data *d) | 311 | static void pxa_ack_muxed_gpio(struct irq_data *d) |
231 | { | 312 | { |
232 | int gpio = irq_to_gpio(d->irq); | 313 | int gpio = pxa_irq_to_gpio(d->irq); |
233 | struct pxa_gpio_chip *c = gpio_to_pxachip(gpio); | 314 | struct pxa_gpio_chip *c = gpio_to_pxachip(gpio); |
234 | 315 | ||
235 | __raw_writel(GPIO_bit(gpio), c->regbase + GEDR_OFFSET); | 316 | __raw_writel(GPIO_bit(gpio), c->regbase + GEDR_OFFSET); |
@@ -237,7 +318,7 @@ static void pxa_ack_muxed_gpio(struct irq_data *d) | |||
237 | 318 | ||
238 | static void pxa_mask_muxed_gpio(struct irq_data *d) | 319 | static void pxa_mask_muxed_gpio(struct irq_data *d) |
239 | { | 320 | { |
240 | int gpio = irq_to_gpio(d->irq); | 321 | int gpio = pxa_irq_to_gpio(d->irq); |
241 | struct pxa_gpio_chip *c = gpio_to_pxachip(gpio); | 322 | struct pxa_gpio_chip *c = gpio_to_pxachip(gpio); |
242 | uint32_t grer, gfer; | 323 | uint32_t grer, gfer; |
243 | 324 | ||
@@ -251,7 +332,7 @@ static void pxa_mask_muxed_gpio(struct irq_data *d) | |||
251 | 332 | ||
252 | static void pxa_unmask_muxed_gpio(struct irq_data *d) | 333 | static void pxa_unmask_muxed_gpio(struct irq_data *d) |
253 | { | 334 | { |
254 | int gpio = irq_to_gpio(d->irq); | 335 | int gpio = pxa_irq_to_gpio(d->irq); |
255 | struct pxa_gpio_chip *c = gpio_to_pxachip(gpio); | 336 | struct pxa_gpio_chip *c = gpio_to_pxachip(gpio); |
256 | 337 | ||
257 | c->irq_mask |= GPIO_bit(gpio); | 338 | c->irq_mask |= GPIO_bit(gpio); |