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