aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorHaojian Zhuang <haojian.zhuang@marvell.com>2011-10-10 04:03:51 -0400
committerHaojian Zhuang <haojian.zhuang@marvell.com>2011-11-14 08:07:59 -0500
commit4929f5a8a99f64378659c5658621e45c90c2aaa9 (patch)
tree37887d8dafda515434896c467d304c04e276889f /drivers/gpio
parent87c49e20579c933d531a376596875b8fd5dcb04f (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.c89
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
42enum {
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
42static DEFINE_SPINLOCK(gpio_lock); 52static DEFINE_SPINLOCK(gpio_lock);
43static struct pxa_gpio_chip *pxa_gpio_chips; 53static struct pxa_gpio_chip *pxa_gpio_chips;
54static 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
69static inline int gpio_is_pxa_type(int type)
70{
71 return (type & MMP_GPIO) == 0;
72}
73
74static inline int gpio_is_mmp_type(int type)
75{
76 return (type & MMP_GPIO) != 0;
77}
78
79#ifdef CONFIG_ARCH_PXA
80static 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
87static 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
94static inline int __pxa_gpio_to_irq(int gpio) { return -1; }
95static inline int __pxa_irq_to_gpio(int irq) { return -1; }
96#endif
97
98#ifdef CONFIG_ARCH_MMP
99static 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
106static 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
113static inline int __mmp_gpio_to_irq(int gpio) { return -1; }
114static inline int __mmp_irq_to_gpio(int irq) { return -1; }
115#endif
116
117static 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
128int 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
58static int pxa_gpio_direction_input(struct gpio_chip *chip, unsigned offset) 138static 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)
158static int pxa_gpio_irq_type(struct irq_data *d, unsigned int type) 239static 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
230static void pxa_ack_muxed_gpio(struct irq_data *d) 311static 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
238static void pxa_mask_muxed_gpio(struct irq_data *d) 319static 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
252static void pxa_unmask_muxed_gpio(struct irq_data *d) 333static 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);