Merge tag 'armsoc-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[linux-2.6-block.git] / drivers / pinctrl / bcm / pinctrl-bcm2835.c
1 /*
2  * Driver for Broadcom BCM2835 GPIO unit (pinctrl + GPIO)
3  *
4  * Copyright (C) 2012 Chris Boot, Simon Arlott, Stephen Warren
5  *
6  * This driver is inspired by:
7  * pinctrl-nomadik.c, please see original file for copyright information
8  * pinctrl-tegra.c, please see original file for copyright information
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  */
20
21 #include <linux/bitmap.h>
22 #include <linux/bug.h>
23 #include <linux/delay.h>
24 #include <linux/device.h>
25 #include <linux/err.h>
26 #include <linux/gpio/driver.h>
27 #include <linux/io.h>
28 #include <linux/irq.h>
29 #include <linux/irqdesc.h>
30 #include <linux/module.h>
31 #include <linux/of_address.h>
32 #include <linux/of.h>
33 #include <linux/of_irq.h>
34 #include <linux/pinctrl/consumer.h>
35 #include <linux/pinctrl/machine.h>
36 #include <linux/pinctrl/pinconf.h>
37 #include <linux/pinctrl/pinctrl.h>
38 #include <linux/pinctrl/pinmux.h>
39 #include <linux/platform_device.h>
40 #include <linux/seq_file.h>
41 #include <linux/slab.h>
42 #include <linux/spinlock.h>
43 #include <linux/types.h>
44
45 #define MODULE_NAME "pinctrl-bcm2835"
46 #define BCM2835_NUM_GPIOS 54
47 #define BCM2835_NUM_BANKS 2
48 #define BCM2835_NUM_IRQS  3
49
50 #define BCM2835_PIN_BITMAP_SZ \
51         DIV_ROUND_UP(BCM2835_NUM_GPIOS, sizeof(unsigned long) * 8)
52
53 /* GPIO register offsets */
54 #define GPFSEL0         0x0     /* Function Select */
55 #define GPSET0          0x1c    /* Pin Output Set */
56 #define GPCLR0          0x28    /* Pin Output Clear */
57 #define GPLEV0          0x34    /* Pin Level */
58 #define GPEDS0          0x40    /* Pin Event Detect Status */
59 #define GPREN0          0x4c    /* Pin Rising Edge Detect Enable */
60 #define GPFEN0          0x58    /* Pin Falling Edge Detect Enable */
61 #define GPHEN0          0x64    /* Pin High Detect Enable */
62 #define GPLEN0          0x70    /* Pin Low Detect Enable */
63 #define GPAREN0         0x7c    /* Pin Async Rising Edge Detect */
64 #define GPAFEN0         0x88    /* Pin Async Falling Edge Detect */
65 #define GPPUD           0x94    /* Pin Pull-up/down Enable */
66 #define GPPUDCLK0       0x98    /* Pin Pull-up/down Enable Clock */
67
68 #define FSEL_REG(p)             (GPFSEL0 + (((p) / 10) * 4))
69 #define FSEL_SHIFT(p)           (((p) % 10) * 3)
70 #define GPIO_REG_OFFSET(p)      ((p) / 32)
71 #define GPIO_REG_SHIFT(p)       ((p) % 32)
72
73 enum bcm2835_pinconf_param {
74         /* argument: bcm2835_pinconf_pull */
75         BCM2835_PINCONF_PARAM_PULL,
76 };
77
78 #define BCM2835_PINCONF_PACK(_param_, _arg_) ((_param_) << 16 | (_arg_))
79 #define BCM2835_PINCONF_UNPACK_PARAM(_conf_) ((_conf_) >> 16)
80 #define BCM2835_PINCONF_UNPACK_ARG(_conf_) ((_conf_) & 0xffff)
81
82 struct bcm2835_pinctrl {
83         struct device *dev;
84         void __iomem *base;
85         int irq[BCM2835_NUM_IRQS];
86
87         /* note: locking assumes each bank will have its own unsigned long */
88         unsigned long enabled_irq_map[BCM2835_NUM_BANKS];
89         unsigned int irq_type[BCM2835_NUM_GPIOS];
90
91         struct pinctrl_dev *pctl_dev;
92         struct gpio_chip gpio_chip;
93         struct pinctrl_gpio_range gpio_range;
94
95         int irq_group[BCM2835_NUM_IRQS];
96         spinlock_t irq_lock[BCM2835_NUM_BANKS];
97 };
98
99 /* pins are just named GPIO0..GPIO53 */
100 #define BCM2835_GPIO_PIN(a) PINCTRL_PIN(a, "gpio" #a)
101 static struct pinctrl_pin_desc bcm2835_gpio_pins[] = {
102         BCM2835_GPIO_PIN(0),
103         BCM2835_GPIO_PIN(1),
104         BCM2835_GPIO_PIN(2),
105         BCM2835_GPIO_PIN(3),
106         BCM2835_GPIO_PIN(4),
107         BCM2835_GPIO_PIN(5),
108         BCM2835_GPIO_PIN(6),
109         BCM2835_GPIO_PIN(7),
110         BCM2835_GPIO_PIN(8),
111         BCM2835_GPIO_PIN(9),
112         BCM2835_GPIO_PIN(10),
113         BCM2835_GPIO_PIN(11),
114         BCM2835_GPIO_PIN(12),
115         BCM2835_GPIO_PIN(13),
116         BCM2835_GPIO_PIN(14),
117         BCM2835_GPIO_PIN(15),
118         BCM2835_GPIO_PIN(16),
119         BCM2835_GPIO_PIN(17),
120         BCM2835_GPIO_PIN(18),
121         BCM2835_GPIO_PIN(19),
122         BCM2835_GPIO_PIN(20),
123         BCM2835_GPIO_PIN(21),
124         BCM2835_GPIO_PIN(22),
125         BCM2835_GPIO_PIN(23),
126         BCM2835_GPIO_PIN(24),
127         BCM2835_GPIO_PIN(25),
128         BCM2835_GPIO_PIN(26),
129         BCM2835_GPIO_PIN(27),
130         BCM2835_GPIO_PIN(28),
131         BCM2835_GPIO_PIN(29),
132         BCM2835_GPIO_PIN(30),
133         BCM2835_GPIO_PIN(31),
134         BCM2835_GPIO_PIN(32),
135         BCM2835_GPIO_PIN(33),
136         BCM2835_GPIO_PIN(34),
137         BCM2835_GPIO_PIN(35),
138         BCM2835_GPIO_PIN(36),
139         BCM2835_GPIO_PIN(37),
140         BCM2835_GPIO_PIN(38),
141         BCM2835_GPIO_PIN(39),
142         BCM2835_GPIO_PIN(40),
143         BCM2835_GPIO_PIN(41),
144         BCM2835_GPIO_PIN(42),
145         BCM2835_GPIO_PIN(43),
146         BCM2835_GPIO_PIN(44),
147         BCM2835_GPIO_PIN(45),
148         BCM2835_GPIO_PIN(46),
149         BCM2835_GPIO_PIN(47),
150         BCM2835_GPIO_PIN(48),
151         BCM2835_GPIO_PIN(49),
152         BCM2835_GPIO_PIN(50),
153         BCM2835_GPIO_PIN(51),
154         BCM2835_GPIO_PIN(52),
155         BCM2835_GPIO_PIN(53),
156 };
157
158 /* one pin per group */
159 static const char * const bcm2835_gpio_groups[] = {
160         "gpio0",
161         "gpio1",
162         "gpio2",
163         "gpio3",
164         "gpio4",
165         "gpio5",
166         "gpio6",
167         "gpio7",
168         "gpio8",
169         "gpio9",
170         "gpio10",
171         "gpio11",
172         "gpio12",
173         "gpio13",
174         "gpio14",
175         "gpio15",
176         "gpio16",
177         "gpio17",
178         "gpio18",
179         "gpio19",
180         "gpio20",
181         "gpio21",
182         "gpio22",
183         "gpio23",
184         "gpio24",
185         "gpio25",
186         "gpio26",
187         "gpio27",
188         "gpio28",
189         "gpio29",
190         "gpio30",
191         "gpio31",
192         "gpio32",
193         "gpio33",
194         "gpio34",
195         "gpio35",
196         "gpio36",
197         "gpio37",
198         "gpio38",
199         "gpio39",
200         "gpio40",
201         "gpio41",
202         "gpio42",
203         "gpio43",
204         "gpio44",
205         "gpio45",
206         "gpio46",
207         "gpio47",
208         "gpio48",
209         "gpio49",
210         "gpio50",
211         "gpio51",
212         "gpio52",
213         "gpio53",
214 };
215
216 enum bcm2835_fsel {
217         BCM2835_FSEL_GPIO_IN = 0,
218         BCM2835_FSEL_GPIO_OUT = 1,
219         BCM2835_FSEL_ALT0 = 4,
220         BCM2835_FSEL_ALT1 = 5,
221         BCM2835_FSEL_ALT2 = 6,
222         BCM2835_FSEL_ALT3 = 7,
223         BCM2835_FSEL_ALT4 = 3,
224         BCM2835_FSEL_ALT5 = 2,
225         BCM2835_FSEL_COUNT = 8,
226         BCM2835_FSEL_MASK = 0x7,
227 };
228
229 static const char * const bcm2835_functions[BCM2835_FSEL_COUNT] = {
230         [BCM2835_FSEL_GPIO_IN] = "gpio_in",
231         [BCM2835_FSEL_GPIO_OUT] = "gpio_out",
232         [BCM2835_FSEL_ALT0] = "alt0",
233         [BCM2835_FSEL_ALT1] = "alt1",
234         [BCM2835_FSEL_ALT2] = "alt2",
235         [BCM2835_FSEL_ALT3] = "alt3",
236         [BCM2835_FSEL_ALT4] = "alt4",
237         [BCM2835_FSEL_ALT5] = "alt5",
238 };
239
240 static const char * const irq_type_names[] = {
241         [IRQ_TYPE_NONE] = "none",
242         [IRQ_TYPE_EDGE_RISING] = "edge-rising",
243         [IRQ_TYPE_EDGE_FALLING] = "edge-falling",
244         [IRQ_TYPE_EDGE_BOTH] = "edge-both",
245         [IRQ_TYPE_LEVEL_HIGH] = "level-high",
246         [IRQ_TYPE_LEVEL_LOW] = "level-low",
247 };
248
249 static inline u32 bcm2835_gpio_rd(struct bcm2835_pinctrl *pc, unsigned reg)
250 {
251         return readl(pc->base + reg);
252 }
253
254 static inline void bcm2835_gpio_wr(struct bcm2835_pinctrl *pc, unsigned reg,
255                 u32 val)
256 {
257         writel(val, pc->base + reg);
258 }
259
260 static inline int bcm2835_gpio_get_bit(struct bcm2835_pinctrl *pc, unsigned reg,
261                 unsigned bit)
262 {
263         reg += GPIO_REG_OFFSET(bit) * 4;
264         return (bcm2835_gpio_rd(pc, reg) >> GPIO_REG_SHIFT(bit)) & 1;
265 }
266
267 /* note NOT a read/modify/write cycle */
268 static inline void bcm2835_gpio_set_bit(struct bcm2835_pinctrl *pc,
269                 unsigned reg, unsigned bit)
270 {
271         reg += GPIO_REG_OFFSET(bit) * 4;
272         bcm2835_gpio_wr(pc, reg, BIT(GPIO_REG_SHIFT(bit)));
273 }
274
275 static inline enum bcm2835_fsel bcm2835_pinctrl_fsel_get(
276                 struct bcm2835_pinctrl *pc, unsigned pin)
277 {
278         u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin));
279         enum bcm2835_fsel status = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK;
280
281         dev_dbg(pc->dev, "get %08x (%u => %s)\n", val, pin,
282                         bcm2835_functions[status]);
283
284         return status;
285 }
286
287 static inline void bcm2835_pinctrl_fsel_set(
288                 struct bcm2835_pinctrl *pc, unsigned pin,
289                 enum bcm2835_fsel fsel)
290 {
291         u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin));
292         enum bcm2835_fsel cur = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK;
293
294         dev_dbg(pc->dev, "read %08x (%u => %s)\n", val, pin,
295                         bcm2835_functions[cur]);
296
297         if (cur == fsel)
298                 return;
299
300         if (cur != BCM2835_FSEL_GPIO_IN && fsel != BCM2835_FSEL_GPIO_IN) {
301                 /* always transition through GPIO_IN */
302                 val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin));
303                 val |= BCM2835_FSEL_GPIO_IN << FSEL_SHIFT(pin);
304
305                 dev_dbg(pc->dev, "trans %08x (%u <= %s)\n", val, pin,
306                                 bcm2835_functions[BCM2835_FSEL_GPIO_IN]);
307                 bcm2835_gpio_wr(pc, FSEL_REG(pin), val);
308         }
309
310         val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin));
311         val |= fsel << FSEL_SHIFT(pin);
312
313         dev_dbg(pc->dev, "write %08x (%u <= %s)\n", val, pin,
314                         bcm2835_functions[fsel]);
315         bcm2835_gpio_wr(pc, FSEL_REG(pin), val);
316 }
317
318 static int bcm2835_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
319 {
320         return pinctrl_gpio_direction_input(chip->base + offset);
321 }
322
323 static int bcm2835_gpio_get(struct gpio_chip *chip, unsigned offset)
324 {
325         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
326
327         return bcm2835_gpio_get_bit(pc, GPLEV0, offset);
328 }
329
330 static int bcm2835_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
331 {
332         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
333         enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset);
334
335         /* Alternative function doesn't clearly provide a direction */
336         if (fsel > BCM2835_FSEL_GPIO_OUT)
337                 return -EINVAL;
338
339         return (fsel == BCM2835_FSEL_GPIO_IN);
340 }
341
342 static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
343 {
344         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
345
346         bcm2835_gpio_set_bit(pc, value ? GPSET0 : GPCLR0, offset);
347 }
348
349 static int bcm2835_gpio_direction_output(struct gpio_chip *chip,
350                 unsigned offset, int value)
351 {
352         bcm2835_gpio_set(chip, offset, value);
353         return pinctrl_gpio_direction_output(chip->base + offset);
354 }
355
356 static struct gpio_chip bcm2835_gpio_chip = {
357         .label = MODULE_NAME,
358         .owner = THIS_MODULE,
359         .request = gpiochip_generic_request,
360         .free = gpiochip_generic_free,
361         .direction_input = bcm2835_gpio_direction_input,
362         .direction_output = bcm2835_gpio_direction_output,
363         .get_direction = bcm2835_gpio_get_direction,
364         .get = bcm2835_gpio_get,
365         .set = bcm2835_gpio_set,
366         .base = -1,
367         .ngpio = BCM2835_NUM_GPIOS,
368         .can_sleep = false,
369 };
370
371 static void bcm2835_gpio_irq_handle_bank(struct bcm2835_pinctrl *pc,
372                                          unsigned int bank, u32 mask)
373 {
374         unsigned long events;
375         unsigned offset;
376         unsigned gpio;
377         unsigned int type;
378
379         events = bcm2835_gpio_rd(pc, GPEDS0 + bank * 4);
380         events &= mask;
381         events &= pc->enabled_irq_map[bank];
382         for_each_set_bit(offset, &events, 32) {
383                 gpio = (32 * bank) + offset;
384                 /* FIXME: no clue why the code looks up the type here */
385                 type = pc->irq_type[gpio];
386
387                 generic_handle_irq(irq_linear_revmap(pc->gpio_chip.irqdomain,
388                                                      gpio));
389         }
390 }
391
392 static void bcm2835_gpio_irq_handler(struct irq_desc *desc)
393 {
394         struct gpio_chip *chip = irq_desc_get_handler_data(desc);
395         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
396         struct irq_chip *host_chip = irq_desc_get_chip(desc);
397         int irq = irq_desc_get_irq(desc);
398         int group;
399         int i;
400
401         for (i = 0; i < ARRAY_SIZE(pc->irq); i++) {
402                 if (pc->irq[i] == irq) {
403                         group = pc->irq_group[i];
404                         break;
405                 }
406         }
407         /* This should not happen, every IRQ has a bank */
408         if (i == ARRAY_SIZE(pc->irq))
409                 BUG();
410
411         chained_irq_enter(host_chip, desc);
412
413         switch (group) {
414         case 0: /* IRQ0 covers GPIOs 0-27 */
415                 bcm2835_gpio_irq_handle_bank(pc, 0, 0x0fffffff);
416                 break;
417         case 1: /* IRQ1 covers GPIOs 28-45 */
418                 bcm2835_gpio_irq_handle_bank(pc, 0, 0xf0000000);
419                 bcm2835_gpio_irq_handle_bank(pc, 1, 0x00003fff);
420                 break;
421         case 2: /* IRQ2 covers GPIOs 46-53 */
422                 bcm2835_gpio_irq_handle_bank(pc, 1, 0x003fc000);
423                 break;
424         }
425
426         chained_irq_exit(host_chip, desc);
427 }
428
429 static inline void __bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc,
430         unsigned reg, unsigned offset, bool enable)
431 {
432         u32 value;
433         reg += GPIO_REG_OFFSET(offset) * 4;
434         value = bcm2835_gpio_rd(pc, reg);
435         if (enable)
436                 value |= BIT(GPIO_REG_SHIFT(offset));
437         else
438                 value &= ~(BIT(GPIO_REG_SHIFT(offset)));
439         bcm2835_gpio_wr(pc, reg, value);
440 }
441
442 /* fast path for IRQ handler */
443 static void bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc,
444         unsigned offset, bool enable)
445 {
446         switch (pc->irq_type[offset]) {
447         case IRQ_TYPE_EDGE_RISING:
448                 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable);
449                 break;
450
451         case IRQ_TYPE_EDGE_FALLING:
452                 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable);
453                 break;
454
455         case IRQ_TYPE_EDGE_BOTH:
456                 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable);
457                 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable);
458                 break;
459
460         case IRQ_TYPE_LEVEL_HIGH:
461                 __bcm2835_gpio_irq_config(pc, GPHEN0, offset, enable);
462                 break;
463
464         case IRQ_TYPE_LEVEL_LOW:
465                 __bcm2835_gpio_irq_config(pc, GPLEN0, offset, enable);
466                 break;
467         }
468 }
469
470 static void bcm2835_gpio_irq_enable(struct irq_data *data)
471 {
472         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
473         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
474         unsigned gpio = irqd_to_hwirq(data);
475         unsigned offset = GPIO_REG_SHIFT(gpio);
476         unsigned bank = GPIO_REG_OFFSET(gpio);
477         unsigned long flags;
478
479         spin_lock_irqsave(&pc->irq_lock[bank], flags);
480         set_bit(offset, &pc->enabled_irq_map[bank]);
481         bcm2835_gpio_irq_config(pc, gpio, true);
482         spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
483 }
484
485 static void bcm2835_gpio_irq_disable(struct irq_data *data)
486 {
487         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
488         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
489         unsigned gpio = irqd_to_hwirq(data);
490         unsigned offset = GPIO_REG_SHIFT(gpio);
491         unsigned bank = GPIO_REG_OFFSET(gpio);
492         unsigned long flags;
493
494         spin_lock_irqsave(&pc->irq_lock[bank], flags);
495         bcm2835_gpio_irq_config(pc, gpio, false);
496         /* Clear events that were latched prior to clearing event sources */
497         bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
498         clear_bit(offset, &pc->enabled_irq_map[bank]);
499         spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
500 }
501
502 static int __bcm2835_gpio_irq_set_type_disabled(struct bcm2835_pinctrl *pc,
503         unsigned offset, unsigned int type)
504 {
505         switch (type) {
506         case IRQ_TYPE_NONE:
507         case IRQ_TYPE_EDGE_RISING:
508         case IRQ_TYPE_EDGE_FALLING:
509         case IRQ_TYPE_EDGE_BOTH:
510         case IRQ_TYPE_LEVEL_HIGH:
511         case IRQ_TYPE_LEVEL_LOW:
512                 pc->irq_type[offset] = type;
513                 break;
514
515         default:
516                 return -EINVAL;
517         }
518         return 0;
519 }
520
521 /* slower path for reconfiguring IRQ type */
522 static int __bcm2835_gpio_irq_set_type_enabled(struct bcm2835_pinctrl *pc,
523         unsigned offset, unsigned int type)
524 {
525         switch (type) {
526         case IRQ_TYPE_NONE:
527                 if (pc->irq_type[offset] != type) {
528                         bcm2835_gpio_irq_config(pc, offset, false);
529                         pc->irq_type[offset] = type;
530                 }
531                 break;
532
533         case IRQ_TYPE_EDGE_RISING:
534                 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) {
535                         /* RISING already enabled, disable FALLING */
536                         pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING;
537                         bcm2835_gpio_irq_config(pc, offset, false);
538                         pc->irq_type[offset] = type;
539                 } else if (pc->irq_type[offset] != type) {
540                         bcm2835_gpio_irq_config(pc, offset, false);
541                         pc->irq_type[offset] = type;
542                         bcm2835_gpio_irq_config(pc, offset, true);
543                 }
544                 break;
545
546         case IRQ_TYPE_EDGE_FALLING:
547                 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) {
548                         /* FALLING already enabled, disable RISING */
549                         pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING;
550                         bcm2835_gpio_irq_config(pc, offset, false);
551                         pc->irq_type[offset] = type;
552                 } else if (pc->irq_type[offset] != type) {
553                         bcm2835_gpio_irq_config(pc, offset, false);
554                         pc->irq_type[offset] = type;
555                         bcm2835_gpio_irq_config(pc, offset, true);
556                 }
557                 break;
558
559         case IRQ_TYPE_EDGE_BOTH:
560                 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_RISING) {
561                         /* RISING already enabled, enable FALLING too */
562                         pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING;
563                         bcm2835_gpio_irq_config(pc, offset, true);
564                         pc->irq_type[offset] = type;
565                 } else if (pc->irq_type[offset] == IRQ_TYPE_EDGE_FALLING) {
566                         /* FALLING already enabled, enable RISING too */
567                         pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING;
568                         bcm2835_gpio_irq_config(pc, offset, true);
569                         pc->irq_type[offset] = type;
570                 } else if (pc->irq_type[offset] != type) {
571                         bcm2835_gpio_irq_config(pc, offset, false);
572                         pc->irq_type[offset] = type;
573                         bcm2835_gpio_irq_config(pc, offset, true);
574                 }
575                 break;
576
577         case IRQ_TYPE_LEVEL_HIGH:
578         case IRQ_TYPE_LEVEL_LOW:
579                 if (pc->irq_type[offset] != type) {
580                         bcm2835_gpio_irq_config(pc, offset, false);
581                         pc->irq_type[offset] = type;
582                         bcm2835_gpio_irq_config(pc, offset, true);
583                 }
584                 break;
585
586         default:
587                 return -EINVAL;
588         }
589         return 0;
590 }
591
592 static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type)
593 {
594         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
595         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
596         unsigned gpio = irqd_to_hwirq(data);
597         unsigned offset = GPIO_REG_SHIFT(gpio);
598         unsigned bank = GPIO_REG_OFFSET(gpio);
599         unsigned long flags;
600         int ret;
601
602         spin_lock_irqsave(&pc->irq_lock[bank], flags);
603
604         if (test_bit(offset, &pc->enabled_irq_map[bank]))
605                 ret = __bcm2835_gpio_irq_set_type_enabled(pc, gpio, type);
606         else
607                 ret = __bcm2835_gpio_irq_set_type_disabled(pc, gpio, type);
608
609         if (type & IRQ_TYPE_EDGE_BOTH)
610                 irq_set_handler_locked(data, handle_edge_irq);
611         else
612                 irq_set_handler_locked(data, handle_level_irq);
613
614         spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
615
616         return ret;
617 }
618
619 static void bcm2835_gpio_irq_ack(struct irq_data *data)
620 {
621         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
622         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
623         unsigned gpio = irqd_to_hwirq(data);
624
625         bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
626 }
627
628 static struct irq_chip bcm2835_gpio_irq_chip = {
629         .name = MODULE_NAME,
630         .irq_enable = bcm2835_gpio_irq_enable,
631         .irq_disable = bcm2835_gpio_irq_disable,
632         .irq_set_type = bcm2835_gpio_irq_set_type,
633         .irq_ack = bcm2835_gpio_irq_ack,
634         .irq_mask = bcm2835_gpio_irq_disable,
635         .irq_unmask = bcm2835_gpio_irq_enable,
636 };
637
638 static int bcm2835_pctl_get_groups_count(struct pinctrl_dev *pctldev)
639 {
640         return ARRAY_SIZE(bcm2835_gpio_groups);
641 }
642
643 static const char *bcm2835_pctl_get_group_name(struct pinctrl_dev *pctldev,
644                 unsigned selector)
645 {
646         return bcm2835_gpio_groups[selector];
647 }
648
649 static int bcm2835_pctl_get_group_pins(struct pinctrl_dev *pctldev,
650                 unsigned selector,
651                 const unsigned **pins,
652                 unsigned *num_pins)
653 {
654         *pins = &bcm2835_gpio_pins[selector].number;
655         *num_pins = 1;
656
657         return 0;
658 }
659
660 static void bcm2835_pctl_pin_dbg_show(struct pinctrl_dev *pctldev,
661                 struct seq_file *s,
662                 unsigned offset)
663 {
664         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
665         struct gpio_chip *chip = &pc->gpio_chip;
666         enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset);
667         const char *fname = bcm2835_functions[fsel];
668         int value = bcm2835_gpio_get_bit(pc, GPLEV0, offset);
669         int irq = irq_find_mapping(chip->irqdomain, offset);
670
671         seq_printf(s, "function %s in %s; irq %d (%s)",
672                 fname, value ? "hi" : "lo",
673                 irq, irq_type_names[pc->irq_type[offset]]);
674 }
675
676 static void bcm2835_pctl_dt_free_map(struct pinctrl_dev *pctldev,
677                 struct pinctrl_map *maps, unsigned num_maps)
678 {
679         int i;
680
681         for (i = 0; i < num_maps; i++)
682                 if (maps[i].type == PIN_MAP_TYPE_CONFIGS_PIN)
683                         kfree(maps[i].data.configs.configs);
684
685         kfree(maps);
686 }
687
688 static int bcm2835_pctl_dt_node_to_map_func(struct bcm2835_pinctrl *pc,
689                 struct device_node *np, u32 pin, u32 fnum,
690                 struct pinctrl_map **maps)
691 {
692         struct pinctrl_map *map = *maps;
693
694         if (fnum >= ARRAY_SIZE(bcm2835_functions)) {
695                 dev_err(pc->dev, "%s: invalid brcm,function %d\n",
696                         of_node_full_name(np), fnum);
697                 return -EINVAL;
698         }
699
700         map->type = PIN_MAP_TYPE_MUX_GROUP;
701         map->data.mux.group = bcm2835_gpio_groups[pin];
702         map->data.mux.function = bcm2835_functions[fnum];
703         (*maps)++;
704
705         return 0;
706 }
707
708 static int bcm2835_pctl_dt_node_to_map_pull(struct bcm2835_pinctrl *pc,
709                 struct device_node *np, u32 pin, u32 pull,
710                 struct pinctrl_map **maps)
711 {
712         struct pinctrl_map *map = *maps;
713         unsigned long *configs;
714
715         if (pull > 2) {
716                 dev_err(pc->dev, "%s: invalid brcm,pull %d\n",
717                         of_node_full_name(np), pull);
718                 return -EINVAL;
719         }
720
721         configs = kzalloc(sizeof(*configs), GFP_KERNEL);
722         if (!configs)
723                 return -ENOMEM;
724         configs[0] = BCM2835_PINCONF_PACK(BCM2835_PINCONF_PARAM_PULL, pull);
725
726         map->type = PIN_MAP_TYPE_CONFIGS_PIN;
727         map->data.configs.group_or_pin = bcm2835_gpio_pins[pin].name;
728         map->data.configs.configs = configs;
729         map->data.configs.num_configs = 1;
730         (*maps)++;
731
732         return 0;
733 }
734
735 static int bcm2835_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
736                 struct device_node *np,
737                 struct pinctrl_map **map, unsigned *num_maps)
738 {
739         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
740         struct property *pins, *funcs, *pulls;
741         int num_pins, num_funcs, num_pulls, maps_per_pin;
742         struct pinctrl_map *maps, *cur_map;
743         int i, err;
744         u32 pin, func, pull;
745
746         pins = of_find_property(np, "brcm,pins", NULL);
747         if (!pins) {
748                 dev_err(pc->dev, "%s: missing brcm,pins property\n",
749                                 of_node_full_name(np));
750                 return -EINVAL;
751         }
752
753         funcs = of_find_property(np, "brcm,function", NULL);
754         pulls = of_find_property(np, "brcm,pull", NULL);
755
756         if (!funcs && !pulls) {
757                 dev_err(pc->dev,
758                         "%s: neither brcm,function nor brcm,pull specified\n",
759                         of_node_full_name(np));
760                 return -EINVAL;
761         }
762
763         num_pins = pins->length / 4;
764         num_funcs = funcs ? (funcs->length / 4) : 0;
765         num_pulls = pulls ? (pulls->length / 4) : 0;
766
767         if (num_funcs > 1 && num_funcs != num_pins) {
768                 dev_err(pc->dev,
769                         "%s: brcm,function must have 1 or %d entries\n",
770                         of_node_full_name(np), num_pins);
771                 return -EINVAL;
772         }
773
774         if (num_pulls > 1 && num_pulls != num_pins) {
775                 dev_err(pc->dev,
776                         "%s: brcm,pull must have 1 or %d entries\n",
777                         of_node_full_name(np), num_pins);
778                 return -EINVAL;
779         }
780
781         maps_per_pin = 0;
782         if (num_funcs)
783                 maps_per_pin++;
784         if (num_pulls)
785                 maps_per_pin++;
786         cur_map = maps = kzalloc(num_pins * maps_per_pin * sizeof(*maps),
787                                 GFP_KERNEL);
788         if (!maps)
789                 return -ENOMEM;
790
791         for (i = 0; i < num_pins; i++) {
792                 err = of_property_read_u32_index(np, "brcm,pins", i, &pin);
793                 if (err)
794                         goto out;
795                 if (pin >= ARRAY_SIZE(bcm2835_gpio_pins)) {
796                         dev_err(pc->dev, "%s: invalid brcm,pins value %d\n",
797                                 of_node_full_name(np), pin);
798                         err = -EINVAL;
799                         goto out;
800                 }
801
802                 if (num_funcs) {
803                         err = of_property_read_u32_index(np, "brcm,function",
804                                         (num_funcs > 1) ? i : 0, &func);
805                         if (err)
806                                 goto out;
807                         err = bcm2835_pctl_dt_node_to_map_func(pc, np, pin,
808                                                         func, &cur_map);
809                         if (err)
810                                 goto out;
811                 }
812                 if (num_pulls) {
813                         err = of_property_read_u32_index(np, "brcm,pull",
814                                         (num_pulls > 1) ? i : 0, &pull);
815                         if (err)
816                                 goto out;
817                         err = bcm2835_pctl_dt_node_to_map_pull(pc, np, pin,
818                                                         pull, &cur_map);
819                         if (err)
820                                 goto out;
821                 }
822         }
823
824         *map = maps;
825         *num_maps = num_pins * maps_per_pin;
826
827         return 0;
828
829 out:
830         bcm2835_pctl_dt_free_map(pctldev, maps, num_pins * maps_per_pin);
831         return err;
832 }
833
834 static const struct pinctrl_ops bcm2835_pctl_ops = {
835         .get_groups_count = bcm2835_pctl_get_groups_count,
836         .get_group_name = bcm2835_pctl_get_group_name,
837         .get_group_pins = bcm2835_pctl_get_group_pins,
838         .pin_dbg_show = bcm2835_pctl_pin_dbg_show,
839         .dt_node_to_map = bcm2835_pctl_dt_node_to_map,
840         .dt_free_map = bcm2835_pctl_dt_free_map,
841 };
842
843 static int bcm2835_pmx_free(struct pinctrl_dev *pctldev,
844                 unsigned offset)
845 {
846         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
847
848         /* disable by setting to GPIO_IN */
849         bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
850         return 0;
851 }
852
853 static int bcm2835_pmx_get_functions_count(struct pinctrl_dev *pctldev)
854 {
855         return BCM2835_FSEL_COUNT;
856 }
857
858 static const char *bcm2835_pmx_get_function_name(struct pinctrl_dev *pctldev,
859                 unsigned selector)
860 {
861         return bcm2835_functions[selector];
862 }
863
864 static int bcm2835_pmx_get_function_groups(struct pinctrl_dev *pctldev,
865                 unsigned selector,
866                 const char * const **groups,
867                 unsigned * const num_groups)
868 {
869         /* every pin can do every function */
870         *groups = bcm2835_gpio_groups;
871         *num_groups = ARRAY_SIZE(bcm2835_gpio_groups);
872
873         return 0;
874 }
875
876 static int bcm2835_pmx_set(struct pinctrl_dev *pctldev,
877                 unsigned func_selector,
878                 unsigned group_selector)
879 {
880         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
881
882         bcm2835_pinctrl_fsel_set(pc, group_selector, func_selector);
883
884         return 0;
885 }
886
887 static void bcm2835_pmx_gpio_disable_free(struct pinctrl_dev *pctldev,
888                 struct pinctrl_gpio_range *range,
889                 unsigned offset)
890 {
891         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
892
893         /* disable by setting to GPIO_IN */
894         bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
895 }
896
897 static int bcm2835_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
898                 struct pinctrl_gpio_range *range,
899                 unsigned offset,
900                 bool input)
901 {
902         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
903         enum bcm2835_fsel fsel = input ?
904                 BCM2835_FSEL_GPIO_IN : BCM2835_FSEL_GPIO_OUT;
905
906         bcm2835_pinctrl_fsel_set(pc, offset, fsel);
907
908         return 0;
909 }
910
911 static const struct pinmux_ops bcm2835_pmx_ops = {
912         .free = bcm2835_pmx_free,
913         .get_functions_count = bcm2835_pmx_get_functions_count,
914         .get_function_name = bcm2835_pmx_get_function_name,
915         .get_function_groups = bcm2835_pmx_get_function_groups,
916         .set_mux = bcm2835_pmx_set,
917         .gpio_disable_free = bcm2835_pmx_gpio_disable_free,
918         .gpio_set_direction = bcm2835_pmx_gpio_set_direction,
919 };
920
921 static int bcm2835_pinconf_get(struct pinctrl_dev *pctldev,
922                         unsigned pin, unsigned long *config)
923 {
924         /* No way to read back config in HW */
925         return -ENOTSUPP;
926 }
927
928 static int bcm2835_pinconf_set(struct pinctrl_dev *pctldev,
929                         unsigned pin, unsigned long *configs,
930                         unsigned num_configs)
931 {
932         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
933         enum bcm2835_pinconf_param param;
934         u16 arg;
935         u32 off, bit;
936         int i;
937
938         for (i = 0; i < num_configs; i++) {
939                 param = BCM2835_PINCONF_UNPACK_PARAM(configs[i]);
940                 arg = BCM2835_PINCONF_UNPACK_ARG(configs[i]);
941
942                 if (param != BCM2835_PINCONF_PARAM_PULL)
943                         return -EINVAL;
944
945                 off = GPIO_REG_OFFSET(pin);
946                 bit = GPIO_REG_SHIFT(pin);
947
948                 bcm2835_gpio_wr(pc, GPPUD, arg & 3);
949                 /*
950                  * BCM2835 datasheet say to wait 150 cycles, but not of what.
951                  * But the VideoCore firmware delay for this operation
952                  * based nearly on the same amount of VPU cycles and this clock
953                  * runs at 250 MHz.
954                  */
955                 udelay(1);
956                 bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), BIT(bit));
957                 udelay(1);
958                 bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), 0);
959         } /* for each config */
960
961         return 0;
962 }
963
964 static const struct pinconf_ops bcm2835_pinconf_ops = {
965         .pin_config_get = bcm2835_pinconf_get,
966         .pin_config_set = bcm2835_pinconf_set,
967 };
968
969 static struct pinctrl_desc bcm2835_pinctrl_desc = {
970         .name = MODULE_NAME,
971         .pins = bcm2835_gpio_pins,
972         .npins = ARRAY_SIZE(bcm2835_gpio_pins),
973         .pctlops = &bcm2835_pctl_ops,
974         .pmxops = &bcm2835_pmx_ops,
975         .confops = &bcm2835_pinconf_ops,
976         .owner = THIS_MODULE,
977 };
978
979 static struct pinctrl_gpio_range bcm2835_pinctrl_gpio_range = {
980         .name = MODULE_NAME,
981         .npins = BCM2835_NUM_GPIOS,
982 };
983
984 static int bcm2835_pinctrl_probe(struct platform_device *pdev)
985 {
986         struct device *dev = &pdev->dev;
987         struct device_node *np = dev->of_node;
988         struct bcm2835_pinctrl *pc;
989         struct resource iomem;
990         int err, i;
991         BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_pins) != BCM2835_NUM_GPIOS);
992         BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_groups) != BCM2835_NUM_GPIOS);
993
994         pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL);
995         if (!pc)
996                 return -ENOMEM;
997
998         platform_set_drvdata(pdev, pc);
999         pc->dev = dev;
1000
1001         err = of_address_to_resource(np, 0, &iomem);
1002         if (err) {
1003                 dev_err(dev, "could not get IO memory\n");
1004                 return err;
1005         }
1006
1007         pc->base = devm_ioremap_resource(dev, &iomem);
1008         if (IS_ERR(pc->base))
1009                 return PTR_ERR(pc->base);
1010
1011         pc->gpio_chip = bcm2835_gpio_chip;
1012         pc->gpio_chip.parent = dev;
1013         pc->gpio_chip.of_node = np;
1014
1015         for (i = 0; i < BCM2835_NUM_BANKS; i++) {
1016                 unsigned long events;
1017                 unsigned offset;
1018
1019                 /* clear event detection flags */
1020                 bcm2835_gpio_wr(pc, GPREN0 + i * 4, 0);
1021                 bcm2835_gpio_wr(pc, GPFEN0 + i * 4, 0);
1022                 bcm2835_gpio_wr(pc, GPHEN0 + i * 4, 0);
1023                 bcm2835_gpio_wr(pc, GPLEN0 + i * 4, 0);
1024                 bcm2835_gpio_wr(pc, GPAREN0 + i * 4, 0);
1025                 bcm2835_gpio_wr(pc, GPAFEN0 + i * 4, 0);
1026
1027                 /* clear all the events */
1028                 events = bcm2835_gpio_rd(pc, GPEDS0 + i * 4);
1029                 for_each_set_bit(offset, &events, 32)
1030                         bcm2835_gpio_wr(pc, GPEDS0 + i * 4, BIT(offset));
1031
1032                 spin_lock_init(&pc->irq_lock[i]);
1033         }
1034
1035         err = gpiochip_add_data(&pc->gpio_chip, pc);
1036         if (err) {
1037                 dev_err(dev, "could not add GPIO chip\n");
1038                 return err;
1039         }
1040
1041         err = gpiochip_irqchip_add(&pc->gpio_chip, &bcm2835_gpio_irq_chip,
1042                                    0, handle_level_irq, IRQ_TYPE_NONE);
1043         if (err) {
1044                 dev_info(dev, "could not add irqchip\n");
1045                 return err;
1046         }
1047
1048         for (i = 0; i < BCM2835_NUM_IRQS; i++) {
1049                 pc->irq[i] = irq_of_parse_and_map(np, i);
1050                 pc->irq_group[i] = i;
1051                 /*
1052                  * Use the same handler for all groups: this is necessary
1053                  * since we use one gpiochip to cover all lines - the
1054                  * irq handler then needs to figure out which group and
1055                  * bank that was firing the IRQ and look up the per-group
1056                  * and bank data.
1057                  */
1058                 gpiochip_set_chained_irqchip(&pc->gpio_chip,
1059                                              &bcm2835_gpio_irq_chip,
1060                                              pc->irq[i],
1061                                              bcm2835_gpio_irq_handler);
1062         }
1063
1064         pc->pctl_dev = devm_pinctrl_register(dev, &bcm2835_pinctrl_desc, pc);
1065         if (IS_ERR(pc->pctl_dev)) {
1066                 gpiochip_remove(&pc->gpio_chip);
1067                 return PTR_ERR(pc->pctl_dev);
1068         }
1069
1070         pc->gpio_range = bcm2835_pinctrl_gpio_range;
1071         pc->gpio_range.base = pc->gpio_chip.base;
1072         pc->gpio_range.gc = &pc->gpio_chip;
1073         pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
1074
1075         return 0;
1076 }
1077
1078 static int bcm2835_pinctrl_remove(struct platform_device *pdev)
1079 {
1080         struct bcm2835_pinctrl *pc = platform_get_drvdata(pdev);
1081
1082         gpiochip_remove(&pc->gpio_chip);
1083
1084         return 0;
1085 }
1086
1087 static const struct of_device_id bcm2835_pinctrl_match[] = {
1088         { .compatible = "brcm,bcm2835-gpio" },
1089         {}
1090 };
1091 MODULE_DEVICE_TABLE(of, bcm2835_pinctrl_match);
1092
1093 static struct platform_driver bcm2835_pinctrl_driver = {
1094         .probe = bcm2835_pinctrl_probe,
1095         .remove = bcm2835_pinctrl_remove,
1096         .driver = {
1097                 .name = MODULE_NAME,
1098                 .of_match_table = bcm2835_pinctrl_match,
1099         },
1100 };
1101 module_platform_driver(bcm2835_pinctrl_driver);
1102
1103 MODULE_AUTHOR("Chris Boot, Simon Arlott, Stephen Warren");
1104 MODULE_DESCRIPTION("BCM2835 Pin control driver");
1105 MODULE_LICENSE("GPL");