Merge tag 'pinctrl-v5.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[linux-2.6-microblaze.git] / drivers / pinctrl / bcm / pinctrl-bcm2835.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Driver for Broadcom BCM2835 GPIO unit (pinctrl + GPIO)
4  *
5  * Copyright (C) 2012 Chris Boot, Simon Arlott, Stephen Warren
6  *
7  * This driver is inspired by:
8  * pinctrl-nomadik.c, please see original file for copyright information
9  * pinctrl-tegra.c, please see original file for copyright information
10  */
11
12 #include <linux/bitmap.h>
13 #include <linux/bug.h>
14 #include <linux/delay.h>
15 #include <linux/device.h>
16 #include <linux/err.h>
17 #include <linux/gpio/driver.h>
18 #include <linux/io.h>
19 #include <linux/irq.h>
20 #include <linux/irqdesc.h>
21 #include <linux/init.h>
22 #include <linux/interrupt.h>
23 #include <linux/of_address.h>
24 #include <linux/of.h>
25 #include <linux/of_irq.h>
26 #include <linux/pinctrl/consumer.h>
27 #include <linux/pinctrl/machine.h>
28 #include <linux/pinctrl/pinconf.h>
29 #include <linux/pinctrl/pinctrl.h>
30 #include <linux/pinctrl/pinmux.h>
31 #include <linux/pinctrl/pinconf-generic.h>
32 #include <linux/platform_device.h>
33 #include <linux/seq_file.h>
34 #include <linux/slab.h>
35 #include <linux/spinlock.h>
36 #include <linux/types.h>
37 #include <dt-bindings/pinctrl/bcm2835.h>
38
39 #define MODULE_NAME "pinctrl-bcm2835"
40 #define BCM2835_NUM_GPIOS 54
41 #define BCM2711_NUM_GPIOS 58
42 #define BCM2835_NUM_BANKS 2
43 #define BCM2835_NUM_IRQS  3
44
45 /* GPIO register offsets */
46 #define GPFSEL0         0x0     /* Function Select */
47 #define GPSET0          0x1c    /* Pin Output Set */
48 #define GPCLR0          0x28    /* Pin Output Clear */
49 #define GPLEV0          0x34    /* Pin Level */
50 #define GPEDS0          0x40    /* Pin Event Detect Status */
51 #define GPREN0          0x4c    /* Pin Rising Edge Detect Enable */
52 #define GPFEN0          0x58    /* Pin Falling Edge Detect Enable */
53 #define GPHEN0          0x64    /* Pin High Detect Enable */
54 #define GPLEN0          0x70    /* Pin Low Detect Enable */
55 #define GPAREN0         0x7c    /* Pin Async Rising Edge Detect */
56 #define GPAFEN0         0x88    /* Pin Async Falling Edge Detect */
57 #define GPPUD           0x94    /* Pin Pull-up/down Enable */
58 #define GPPUDCLK0       0x98    /* Pin Pull-up/down Enable Clock */
59 #define GP_GPIO_PUP_PDN_CNTRL_REG0 0xe4 /* 2711 Pin Pull-up/down select */
60
61 #define FSEL_REG(p)             (GPFSEL0 + (((p) / 10) * 4))
62 #define FSEL_SHIFT(p)           (((p) % 10) * 3)
63 #define GPIO_REG_OFFSET(p)      ((p) / 32)
64 #define GPIO_REG_SHIFT(p)       ((p) % 32)
65
66 #define PUD_2711_MASK           0x3
67 #define PUD_2711_REG_OFFSET(p)  ((p) / 16)
68 #define PUD_2711_REG_SHIFT(p)   (((p) % 16) * 2)
69
70 /* argument: bcm2835_pinconf_pull */
71 #define BCM2835_PINCONF_PARAM_PULL      (PIN_CONFIG_END + 1)
72
73 #define BCM2711_PULL_NONE       0x0
74 #define BCM2711_PULL_UP         0x1
75 #define BCM2711_PULL_DOWN       0x2
76
77 struct bcm2835_pinctrl {
78         struct device *dev;
79         void __iomem *base;
80         int *wake_irq;
81
82         /* note: locking assumes each bank will have its own unsigned long */
83         unsigned long enabled_irq_map[BCM2835_NUM_BANKS];
84         unsigned int irq_type[BCM2711_NUM_GPIOS];
85
86         struct pinctrl_dev *pctl_dev;
87         struct gpio_chip gpio_chip;
88         struct pinctrl_desc pctl_desc;
89         struct pinctrl_gpio_range gpio_range;
90
91         raw_spinlock_t irq_lock[BCM2835_NUM_BANKS];
92 };
93
94 /* pins are just named GPIO0..GPIO53 */
95 #define BCM2835_GPIO_PIN(a) PINCTRL_PIN(a, "gpio" #a)
96 static struct pinctrl_pin_desc bcm2835_gpio_pins[] = {
97         BCM2835_GPIO_PIN(0),
98         BCM2835_GPIO_PIN(1),
99         BCM2835_GPIO_PIN(2),
100         BCM2835_GPIO_PIN(3),
101         BCM2835_GPIO_PIN(4),
102         BCM2835_GPIO_PIN(5),
103         BCM2835_GPIO_PIN(6),
104         BCM2835_GPIO_PIN(7),
105         BCM2835_GPIO_PIN(8),
106         BCM2835_GPIO_PIN(9),
107         BCM2835_GPIO_PIN(10),
108         BCM2835_GPIO_PIN(11),
109         BCM2835_GPIO_PIN(12),
110         BCM2835_GPIO_PIN(13),
111         BCM2835_GPIO_PIN(14),
112         BCM2835_GPIO_PIN(15),
113         BCM2835_GPIO_PIN(16),
114         BCM2835_GPIO_PIN(17),
115         BCM2835_GPIO_PIN(18),
116         BCM2835_GPIO_PIN(19),
117         BCM2835_GPIO_PIN(20),
118         BCM2835_GPIO_PIN(21),
119         BCM2835_GPIO_PIN(22),
120         BCM2835_GPIO_PIN(23),
121         BCM2835_GPIO_PIN(24),
122         BCM2835_GPIO_PIN(25),
123         BCM2835_GPIO_PIN(26),
124         BCM2835_GPIO_PIN(27),
125         BCM2835_GPIO_PIN(28),
126         BCM2835_GPIO_PIN(29),
127         BCM2835_GPIO_PIN(30),
128         BCM2835_GPIO_PIN(31),
129         BCM2835_GPIO_PIN(32),
130         BCM2835_GPIO_PIN(33),
131         BCM2835_GPIO_PIN(34),
132         BCM2835_GPIO_PIN(35),
133         BCM2835_GPIO_PIN(36),
134         BCM2835_GPIO_PIN(37),
135         BCM2835_GPIO_PIN(38),
136         BCM2835_GPIO_PIN(39),
137         BCM2835_GPIO_PIN(40),
138         BCM2835_GPIO_PIN(41),
139         BCM2835_GPIO_PIN(42),
140         BCM2835_GPIO_PIN(43),
141         BCM2835_GPIO_PIN(44),
142         BCM2835_GPIO_PIN(45),
143         BCM2835_GPIO_PIN(46),
144         BCM2835_GPIO_PIN(47),
145         BCM2835_GPIO_PIN(48),
146         BCM2835_GPIO_PIN(49),
147         BCM2835_GPIO_PIN(50),
148         BCM2835_GPIO_PIN(51),
149         BCM2835_GPIO_PIN(52),
150         BCM2835_GPIO_PIN(53),
151         BCM2835_GPIO_PIN(54),
152         BCM2835_GPIO_PIN(55),
153         BCM2835_GPIO_PIN(56),
154         BCM2835_GPIO_PIN(57),
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         "gpio54",
214         "gpio55",
215         "gpio56",
216         "gpio57",
217 };
218
219 enum bcm2835_fsel {
220         BCM2835_FSEL_COUNT = 8,
221         BCM2835_FSEL_MASK = 0x7,
222 };
223
224 static const char * const bcm2835_functions[BCM2835_FSEL_COUNT] = {
225         [BCM2835_FSEL_GPIO_IN] = "gpio_in",
226         [BCM2835_FSEL_GPIO_OUT] = "gpio_out",
227         [BCM2835_FSEL_ALT0] = "alt0",
228         [BCM2835_FSEL_ALT1] = "alt1",
229         [BCM2835_FSEL_ALT2] = "alt2",
230         [BCM2835_FSEL_ALT3] = "alt3",
231         [BCM2835_FSEL_ALT4] = "alt4",
232         [BCM2835_FSEL_ALT5] = "alt5",
233 };
234
235 static const char * const irq_type_names[] = {
236         [IRQ_TYPE_NONE] = "none",
237         [IRQ_TYPE_EDGE_RISING] = "edge-rising",
238         [IRQ_TYPE_EDGE_FALLING] = "edge-falling",
239         [IRQ_TYPE_EDGE_BOTH] = "edge-both",
240         [IRQ_TYPE_LEVEL_HIGH] = "level-high",
241         [IRQ_TYPE_LEVEL_LOW] = "level-low",
242 };
243
244 static inline u32 bcm2835_gpio_rd(struct bcm2835_pinctrl *pc, unsigned reg)
245 {
246         return readl(pc->base + reg);
247 }
248
249 static inline void bcm2835_gpio_wr(struct bcm2835_pinctrl *pc, unsigned reg,
250                 u32 val)
251 {
252         writel(val, pc->base + reg);
253 }
254
255 static inline int bcm2835_gpio_get_bit(struct bcm2835_pinctrl *pc, unsigned reg,
256                 unsigned bit)
257 {
258         reg += GPIO_REG_OFFSET(bit) * 4;
259         return (bcm2835_gpio_rd(pc, reg) >> GPIO_REG_SHIFT(bit)) & 1;
260 }
261
262 /* note NOT a read/modify/write cycle */
263 static inline void bcm2835_gpio_set_bit(struct bcm2835_pinctrl *pc,
264                 unsigned reg, unsigned bit)
265 {
266         reg += GPIO_REG_OFFSET(bit) * 4;
267         bcm2835_gpio_wr(pc, reg, BIT(GPIO_REG_SHIFT(bit)));
268 }
269
270 static inline enum bcm2835_fsel bcm2835_pinctrl_fsel_get(
271                 struct bcm2835_pinctrl *pc, unsigned pin)
272 {
273         u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin));
274         enum bcm2835_fsel status = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK;
275
276         dev_dbg(pc->dev, "get %08x (%u => %s)\n", val, pin,
277                         bcm2835_functions[status]);
278
279         return status;
280 }
281
282 static inline void bcm2835_pinctrl_fsel_set(
283                 struct bcm2835_pinctrl *pc, unsigned pin,
284                 enum bcm2835_fsel fsel)
285 {
286         u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin));
287         enum bcm2835_fsel cur = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK;
288
289         dev_dbg(pc->dev, "read %08x (%u => %s)\n", val, pin,
290                         bcm2835_functions[cur]);
291
292         if (cur == fsel)
293                 return;
294
295         if (cur != BCM2835_FSEL_GPIO_IN && fsel != BCM2835_FSEL_GPIO_IN) {
296                 /* always transition through GPIO_IN */
297                 val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin));
298                 val |= BCM2835_FSEL_GPIO_IN << FSEL_SHIFT(pin);
299
300                 dev_dbg(pc->dev, "trans %08x (%u <= %s)\n", val, pin,
301                                 bcm2835_functions[BCM2835_FSEL_GPIO_IN]);
302                 bcm2835_gpio_wr(pc, FSEL_REG(pin), val);
303         }
304
305         val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin));
306         val |= fsel << FSEL_SHIFT(pin);
307
308         dev_dbg(pc->dev, "write %08x (%u <= %s)\n", val, pin,
309                         bcm2835_functions[fsel]);
310         bcm2835_gpio_wr(pc, FSEL_REG(pin), val);
311 }
312
313 static int bcm2835_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
314 {
315         return pinctrl_gpio_direction_input(chip->base + offset);
316 }
317
318 static int bcm2835_gpio_get(struct gpio_chip *chip, unsigned offset)
319 {
320         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
321
322         return bcm2835_gpio_get_bit(pc, GPLEV0, offset);
323 }
324
325 static int bcm2835_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
326 {
327         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
328         enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset);
329
330         /* Alternative function doesn't clearly provide a direction */
331         if (fsel > BCM2835_FSEL_GPIO_OUT)
332                 return -EINVAL;
333
334         if (fsel == BCM2835_FSEL_GPIO_IN)
335                 return GPIO_LINE_DIRECTION_IN;
336
337         return GPIO_LINE_DIRECTION_OUT;
338 }
339
340 static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
341 {
342         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
343
344         bcm2835_gpio_set_bit(pc, value ? GPSET0 : GPCLR0, offset);
345 }
346
347 static int bcm2835_gpio_direction_output(struct gpio_chip *chip,
348                 unsigned offset, int value)
349 {
350         bcm2835_gpio_set(chip, offset, value);
351         return pinctrl_gpio_direction_output(chip->base + offset);
352 }
353
354 static const struct gpio_chip bcm2835_gpio_chip = {
355         .label = MODULE_NAME,
356         .owner = THIS_MODULE,
357         .request = gpiochip_generic_request,
358         .free = gpiochip_generic_free,
359         .direction_input = bcm2835_gpio_direction_input,
360         .direction_output = bcm2835_gpio_direction_output,
361         .get_direction = bcm2835_gpio_get_direction,
362         .get = bcm2835_gpio_get,
363         .set = bcm2835_gpio_set,
364         .set_config = gpiochip_generic_config,
365         .base = -1,
366         .ngpio = BCM2835_NUM_GPIOS,
367         .can_sleep = false,
368 };
369
370 static const struct gpio_chip bcm2711_gpio_chip = {
371         .label = "pinctrl-bcm2711",
372         .owner = THIS_MODULE,
373         .request = gpiochip_generic_request,
374         .free = gpiochip_generic_free,
375         .direction_input = bcm2835_gpio_direction_input,
376         .direction_output = bcm2835_gpio_direction_output,
377         .get_direction = bcm2835_gpio_get_direction,
378         .get = bcm2835_gpio_get,
379         .set = bcm2835_gpio_set,
380         .set_config = gpiochip_generic_config,
381         .base = -1,
382         .ngpio = BCM2711_NUM_GPIOS,
383         .can_sleep = false,
384 };
385
386 static void bcm2835_gpio_irq_handle_bank(struct bcm2835_pinctrl *pc,
387                                          unsigned int bank, u32 mask)
388 {
389         unsigned long events;
390         unsigned offset;
391         unsigned gpio;
392
393         events = bcm2835_gpio_rd(pc, GPEDS0 + bank * 4);
394         events &= mask;
395         events &= pc->enabled_irq_map[bank];
396         for_each_set_bit(offset, &events, 32) {
397                 gpio = (32 * bank) + offset;
398                 generic_handle_domain_irq(pc->gpio_chip.irq.domain,
399                                           gpio);
400         }
401 }
402
403 static void bcm2835_gpio_irq_handler(struct irq_desc *desc)
404 {
405         struct gpio_chip *chip = irq_desc_get_handler_data(desc);
406         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
407         struct irq_chip *host_chip = irq_desc_get_chip(desc);
408         int irq = irq_desc_get_irq(desc);
409         int group;
410         int i;
411
412         for (i = 0; i < BCM2835_NUM_IRQS; i++) {
413                 if (chip->irq.parents[i] == irq) {
414                         group = i;
415                         break;
416                 }
417         }
418         /* This should not happen, every IRQ has a bank */
419         BUG_ON(i == BCM2835_NUM_IRQS);
420
421         chained_irq_enter(host_chip, desc);
422
423         switch (group) {
424         case 0: /* IRQ0 covers GPIOs 0-27 */
425                 bcm2835_gpio_irq_handle_bank(pc, 0, 0x0fffffff);
426                 break;
427         case 1: /* IRQ1 covers GPIOs 28-45 */
428                 bcm2835_gpio_irq_handle_bank(pc, 0, 0xf0000000);
429                 bcm2835_gpio_irq_handle_bank(pc, 1, 0x00003fff);
430                 break;
431         case 2: /* IRQ2 covers GPIOs 46-57 */
432                 bcm2835_gpio_irq_handle_bank(pc, 1, 0x003fc000);
433                 break;
434         }
435
436         chained_irq_exit(host_chip, desc);
437 }
438
439 static irqreturn_t bcm2835_gpio_wake_irq_handler(int irq, void *dev_id)
440 {
441         return IRQ_HANDLED;
442 }
443
444 static inline void __bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc,
445         unsigned reg, unsigned offset, bool enable)
446 {
447         u32 value;
448         reg += GPIO_REG_OFFSET(offset) * 4;
449         value = bcm2835_gpio_rd(pc, reg);
450         if (enable)
451                 value |= BIT(GPIO_REG_SHIFT(offset));
452         else
453                 value &= ~(BIT(GPIO_REG_SHIFT(offset)));
454         bcm2835_gpio_wr(pc, reg, value);
455 }
456
457 /* fast path for IRQ handler */
458 static void bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc,
459         unsigned offset, bool enable)
460 {
461         switch (pc->irq_type[offset]) {
462         case IRQ_TYPE_EDGE_RISING:
463                 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable);
464                 break;
465
466         case IRQ_TYPE_EDGE_FALLING:
467                 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable);
468                 break;
469
470         case IRQ_TYPE_EDGE_BOTH:
471                 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable);
472                 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable);
473                 break;
474
475         case IRQ_TYPE_LEVEL_HIGH:
476                 __bcm2835_gpio_irq_config(pc, GPHEN0, offset, enable);
477                 break;
478
479         case IRQ_TYPE_LEVEL_LOW:
480                 __bcm2835_gpio_irq_config(pc, GPLEN0, offset, enable);
481                 break;
482         }
483 }
484
485 static void bcm2835_gpio_irq_enable(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         raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
495         set_bit(offset, &pc->enabled_irq_map[bank]);
496         bcm2835_gpio_irq_config(pc, gpio, true);
497         raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
498 }
499
500 static void bcm2835_gpio_irq_disable(struct irq_data *data)
501 {
502         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
503         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
504         unsigned gpio = irqd_to_hwirq(data);
505         unsigned offset = GPIO_REG_SHIFT(gpio);
506         unsigned bank = GPIO_REG_OFFSET(gpio);
507         unsigned long flags;
508
509         raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
510         bcm2835_gpio_irq_config(pc, gpio, false);
511         /* Clear events that were latched prior to clearing event sources */
512         bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
513         clear_bit(offset, &pc->enabled_irq_map[bank]);
514         raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
515 }
516
517 static int __bcm2835_gpio_irq_set_type_disabled(struct bcm2835_pinctrl *pc,
518         unsigned offset, unsigned int type)
519 {
520         switch (type) {
521         case IRQ_TYPE_NONE:
522         case IRQ_TYPE_EDGE_RISING:
523         case IRQ_TYPE_EDGE_FALLING:
524         case IRQ_TYPE_EDGE_BOTH:
525         case IRQ_TYPE_LEVEL_HIGH:
526         case IRQ_TYPE_LEVEL_LOW:
527                 pc->irq_type[offset] = type;
528                 break;
529
530         default:
531                 return -EINVAL;
532         }
533         return 0;
534 }
535
536 /* slower path for reconfiguring IRQ type */
537 static int __bcm2835_gpio_irq_set_type_enabled(struct bcm2835_pinctrl *pc,
538         unsigned offset, unsigned int type)
539 {
540         switch (type) {
541         case IRQ_TYPE_NONE:
542                 if (pc->irq_type[offset] != type) {
543                         bcm2835_gpio_irq_config(pc, offset, false);
544                         pc->irq_type[offset] = type;
545                 }
546                 break;
547
548         case IRQ_TYPE_EDGE_RISING:
549                 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) {
550                         /* RISING already enabled, disable FALLING */
551                         pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING;
552                         bcm2835_gpio_irq_config(pc, offset, false);
553                         pc->irq_type[offset] = type;
554                 } else if (pc->irq_type[offset] != type) {
555                         bcm2835_gpio_irq_config(pc, offset, false);
556                         pc->irq_type[offset] = type;
557                         bcm2835_gpio_irq_config(pc, offset, true);
558                 }
559                 break;
560
561         case IRQ_TYPE_EDGE_FALLING:
562                 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) {
563                         /* FALLING already enabled, disable RISING */
564                         pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING;
565                         bcm2835_gpio_irq_config(pc, offset, false);
566                         pc->irq_type[offset] = type;
567                 } else if (pc->irq_type[offset] != type) {
568                         bcm2835_gpio_irq_config(pc, offset, false);
569                         pc->irq_type[offset] = type;
570                         bcm2835_gpio_irq_config(pc, offset, true);
571                 }
572                 break;
573
574         case IRQ_TYPE_EDGE_BOTH:
575                 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_RISING) {
576                         /* RISING already enabled, enable FALLING too */
577                         pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING;
578                         bcm2835_gpio_irq_config(pc, offset, true);
579                         pc->irq_type[offset] = type;
580                 } else if (pc->irq_type[offset] == IRQ_TYPE_EDGE_FALLING) {
581                         /* FALLING already enabled, enable RISING too */
582                         pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING;
583                         bcm2835_gpio_irq_config(pc, offset, true);
584                         pc->irq_type[offset] = type;
585                 } else if (pc->irq_type[offset] != type) {
586                         bcm2835_gpio_irq_config(pc, offset, false);
587                         pc->irq_type[offset] = type;
588                         bcm2835_gpio_irq_config(pc, offset, true);
589                 }
590                 break;
591
592         case IRQ_TYPE_LEVEL_HIGH:
593         case IRQ_TYPE_LEVEL_LOW:
594                 if (pc->irq_type[offset] != type) {
595                         bcm2835_gpio_irq_config(pc, offset, false);
596                         pc->irq_type[offset] = type;
597                         bcm2835_gpio_irq_config(pc, offset, true);
598                 }
599                 break;
600
601         default:
602                 return -EINVAL;
603         }
604         return 0;
605 }
606
607 static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type)
608 {
609         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
610         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
611         unsigned gpio = irqd_to_hwirq(data);
612         unsigned offset = GPIO_REG_SHIFT(gpio);
613         unsigned bank = GPIO_REG_OFFSET(gpio);
614         unsigned long flags;
615         int ret;
616
617         raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
618
619         if (test_bit(offset, &pc->enabled_irq_map[bank]))
620                 ret = __bcm2835_gpio_irq_set_type_enabled(pc, gpio, type);
621         else
622                 ret = __bcm2835_gpio_irq_set_type_disabled(pc, gpio, type);
623
624         if (type & IRQ_TYPE_EDGE_BOTH)
625                 irq_set_handler_locked(data, handle_edge_irq);
626         else
627                 irq_set_handler_locked(data, handle_level_irq);
628
629         raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
630
631         return ret;
632 }
633
634 static void bcm2835_gpio_irq_ack(struct irq_data *data)
635 {
636         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
637         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
638         unsigned gpio = irqd_to_hwirq(data);
639
640         bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
641 }
642
643 static int bcm2835_gpio_irq_set_wake(struct irq_data *data, unsigned int on)
644 {
645         struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
646         struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
647         unsigned gpio = irqd_to_hwirq(data);
648         unsigned int irqgroup;
649         int ret = -EINVAL;
650
651         if (!pc->wake_irq)
652                 return ret;
653
654         if (gpio <= 27)
655                 irqgroup = 0;
656         else if (gpio >= 28 && gpio <= 45)
657                 irqgroup = 1;
658         else if (gpio >= 46 && gpio <= 57)
659                 irqgroup = 2;
660         else
661                 return ret;
662
663         if (on)
664                 ret = enable_irq_wake(pc->wake_irq[irqgroup]);
665         else
666                 ret = disable_irq_wake(pc->wake_irq[irqgroup]);
667
668         return ret;
669 }
670
671 static struct irq_chip bcm2835_gpio_irq_chip = {
672         .name = MODULE_NAME,
673         .irq_enable = bcm2835_gpio_irq_enable,
674         .irq_disable = bcm2835_gpio_irq_disable,
675         .irq_set_type = bcm2835_gpio_irq_set_type,
676         .irq_ack = bcm2835_gpio_irq_ack,
677         .irq_mask = bcm2835_gpio_irq_disable,
678         .irq_unmask = bcm2835_gpio_irq_enable,
679         .irq_set_wake = bcm2835_gpio_irq_set_wake,
680         .flags = IRQCHIP_MASK_ON_SUSPEND,
681 };
682
683 static int bcm2835_pctl_get_groups_count(struct pinctrl_dev *pctldev)
684 {
685         return BCM2835_NUM_GPIOS;
686 }
687
688 static const char *bcm2835_pctl_get_group_name(struct pinctrl_dev *pctldev,
689                 unsigned selector)
690 {
691         return bcm2835_gpio_groups[selector];
692 }
693
694 static int bcm2835_pctl_get_group_pins(struct pinctrl_dev *pctldev,
695                 unsigned selector,
696                 const unsigned **pins,
697                 unsigned *num_pins)
698 {
699         *pins = &bcm2835_gpio_pins[selector].number;
700         *num_pins = 1;
701
702         return 0;
703 }
704
705 static void bcm2835_pctl_pin_dbg_show(struct pinctrl_dev *pctldev,
706                 struct seq_file *s,
707                 unsigned offset)
708 {
709         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
710         struct gpio_chip *chip = &pc->gpio_chip;
711         enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset);
712         const char *fname = bcm2835_functions[fsel];
713         int value = bcm2835_gpio_get_bit(pc, GPLEV0, offset);
714         int irq = irq_find_mapping(chip->irq.domain, offset);
715
716         seq_printf(s, "function %s in %s; irq %d (%s)",
717                 fname, value ? "hi" : "lo",
718                 irq, irq_type_names[pc->irq_type[offset]]);
719 }
720
721 static void bcm2835_pctl_dt_free_map(struct pinctrl_dev *pctldev,
722                 struct pinctrl_map *maps, unsigned num_maps)
723 {
724         int i;
725
726         for (i = 0; i < num_maps; i++)
727                 if (maps[i].type == PIN_MAP_TYPE_CONFIGS_PIN)
728                         kfree(maps[i].data.configs.configs);
729
730         kfree(maps);
731 }
732
733 static int bcm2835_pctl_dt_node_to_map_func(struct bcm2835_pinctrl *pc,
734                 struct device_node *np, u32 pin, u32 fnum,
735                 struct pinctrl_map **maps)
736 {
737         struct pinctrl_map *map = *maps;
738
739         if (fnum >= ARRAY_SIZE(bcm2835_functions)) {
740                 dev_err(pc->dev, "%pOF: invalid brcm,function %d\n", np, fnum);
741                 return -EINVAL;
742         }
743
744         map->type = PIN_MAP_TYPE_MUX_GROUP;
745         map->data.mux.group = bcm2835_gpio_groups[pin];
746         map->data.mux.function = bcm2835_functions[fnum];
747         (*maps)++;
748
749         return 0;
750 }
751
752 static int bcm2835_pctl_dt_node_to_map_pull(struct bcm2835_pinctrl *pc,
753                 struct device_node *np, u32 pin, u32 pull,
754                 struct pinctrl_map **maps)
755 {
756         struct pinctrl_map *map = *maps;
757         unsigned long *configs;
758
759         if (pull > 2) {
760                 dev_err(pc->dev, "%pOF: invalid brcm,pull %d\n", np, pull);
761                 return -EINVAL;
762         }
763
764         configs = kzalloc(sizeof(*configs), GFP_KERNEL);
765         if (!configs)
766                 return -ENOMEM;
767         configs[0] = pinconf_to_config_packed(BCM2835_PINCONF_PARAM_PULL, pull);
768
769         map->type = PIN_MAP_TYPE_CONFIGS_PIN;
770         map->data.configs.group_or_pin = bcm2835_gpio_pins[pin].name;
771         map->data.configs.configs = configs;
772         map->data.configs.num_configs = 1;
773         (*maps)++;
774
775         return 0;
776 }
777
778 static int bcm2835_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
779                 struct device_node *np,
780                 struct pinctrl_map **map, unsigned int *num_maps)
781 {
782         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
783         struct property *pins, *funcs, *pulls;
784         int num_pins, num_funcs, num_pulls, maps_per_pin;
785         struct pinctrl_map *maps, *cur_map;
786         int i, err;
787         u32 pin, func, pull;
788
789         /* Check for generic binding in this node */
790         err = pinconf_generic_dt_node_to_map_all(pctldev, np, map, num_maps);
791         if (err || *num_maps)
792                 return err;
793
794         /* Generic binding did not find anything continue with legacy parse */
795         pins = of_find_property(np, "brcm,pins", NULL);
796         if (!pins) {
797                 dev_err(pc->dev, "%pOF: missing brcm,pins property\n", np);
798                 return -EINVAL;
799         }
800
801         funcs = of_find_property(np, "brcm,function", NULL);
802         pulls = of_find_property(np, "brcm,pull", NULL);
803
804         if (!funcs && !pulls) {
805                 dev_err(pc->dev,
806                         "%pOF: neither brcm,function nor brcm,pull specified\n",
807                         np);
808                 return -EINVAL;
809         }
810
811         num_pins = pins->length / 4;
812         num_funcs = funcs ? (funcs->length / 4) : 0;
813         num_pulls = pulls ? (pulls->length / 4) : 0;
814
815         if (num_funcs > 1 && num_funcs != num_pins) {
816                 dev_err(pc->dev,
817                         "%pOF: brcm,function must have 1 or %d entries\n",
818                         np, num_pins);
819                 return -EINVAL;
820         }
821
822         if (num_pulls > 1 && num_pulls != num_pins) {
823                 dev_err(pc->dev,
824                         "%pOF: brcm,pull must have 1 or %d entries\n",
825                         np, num_pins);
826                 return -EINVAL;
827         }
828
829         maps_per_pin = 0;
830         if (num_funcs)
831                 maps_per_pin++;
832         if (num_pulls)
833                 maps_per_pin++;
834         cur_map = maps = kcalloc(num_pins * maps_per_pin, sizeof(*maps),
835                                  GFP_KERNEL);
836         if (!maps)
837                 return -ENOMEM;
838
839         for (i = 0; i < num_pins; i++) {
840                 err = of_property_read_u32_index(np, "brcm,pins", i, &pin);
841                 if (err)
842                         goto out;
843                 if (pin >= pc->pctl_desc.npins) {
844                         dev_err(pc->dev, "%pOF: invalid brcm,pins value %d\n",
845                                 np, pin);
846                         err = -EINVAL;
847                         goto out;
848                 }
849
850                 if (num_funcs) {
851                         err = of_property_read_u32_index(np, "brcm,function",
852                                         (num_funcs > 1) ? i : 0, &func);
853                         if (err)
854                                 goto out;
855                         err = bcm2835_pctl_dt_node_to_map_func(pc, np, pin,
856                                                         func, &cur_map);
857                         if (err)
858                                 goto out;
859                 }
860                 if (num_pulls) {
861                         err = of_property_read_u32_index(np, "brcm,pull",
862                                         (num_pulls > 1) ? i : 0, &pull);
863                         if (err)
864                                 goto out;
865                         err = bcm2835_pctl_dt_node_to_map_pull(pc, np, pin,
866                                                         pull, &cur_map);
867                         if (err)
868                                 goto out;
869                 }
870         }
871
872         *map = maps;
873         *num_maps = num_pins * maps_per_pin;
874
875         return 0;
876
877 out:
878         bcm2835_pctl_dt_free_map(pctldev, maps, num_pins * maps_per_pin);
879         return err;
880 }
881
882 static const struct pinctrl_ops bcm2835_pctl_ops = {
883         .get_groups_count = bcm2835_pctl_get_groups_count,
884         .get_group_name = bcm2835_pctl_get_group_name,
885         .get_group_pins = bcm2835_pctl_get_group_pins,
886         .pin_dbg_show = bcm2835_pctl_pin_dbg_show,
887         .dt_node_to_map = bcm2835_pctl_dt_node_to_map,
888         .dt_free_map = bcm2835_pctl_dt_free_map,
889 };
890
891 static int bcm2835_pmx_free(struct pinctrl_dev *pctldev,
892                 unsigned offset)
893 {
894         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
895
896         /* disable by setting to GPIO_IN */
897         bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
898         return 0;
899 }
900
901 static int bcm2835_pmx_get_functions_count(struct pinctrl_dev *pctldev)
902 {
903         return BCM2835_FSEL_COUNT;
904 }
905
906 static const char *bcm2835_pmx_get_function_name(struct pinctrl_dev *pctldev,
907                 unsigned selector)
908 {
909         return bcm2835_functions[selector];
910 }
911
912 static int bcm2835_pmx_get_function_groups(struct pinctrl_dev *pctldev,
913                 unsigned selector,
914                 const char * const **groups,
915                 unsigned * const num_groups)
916 {
917         /* every pin can do every function */
918         *groups = bcm2835_gpio_groups;
919         *num_groups = BCM2835_NUM_GPIOS;
920
921         return 0;
922 }
923
924 static int bcm2835_pmx_set(struct pinctrl_dev *pctldev,
925                 unsigned func_selector,
926                 unsigned group_selector)
927 {
928         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
929
930         bcm2835_pinctrl_fsel_set(pc, group_selector, func_selector);
931
932         return 0;
933 }
934
935 static void bcm2835_pmx_gpio_disable_free(struct pinctrl_dev *pctldev,
936                 struct pinctrl_gpio_range *range,
937                 unsigned offset)
938 {
939         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
940
941         /* disable by setting to GPIO_IN */
942         bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
943 }
944
945 static int bcm2835_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
946                 struct pinctrl_gpio_range *range,
947                 unsigned offset,
948                 bool input)
949 {
950         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
951         enum bcm2835_fsel fsel = input ?
952                 BCM2835_FSEL_GPIO_IN : BCM2835_FSEL_GPIO_OUT;
953
954         bcm2835_pinctrl_fsel_set(pc, offset, fsel);
955
956         return 0;
957 }
958
959 static const struct pinmux_ops bcm2835_pmx_ops = {
960         .free = bcm2835_pmx_free,
961         .get_functions_count = bcm2835_pmx_get_functions_count,
962         .get_function_name = bcm2835_pmx_get_function_name,
963         .get_function_groups = bcm2835_pmx_get_function_groups,
964         .set_mux = bcm2835_pmx_set,
965         .gpio_disable_free = bcm2835_pmx_gpio_disable_free,
966         .gpio_set_direction = bcm2835_pmx_gpio_set_direction,
967 };
968
969 static int bcm2835_pinconf_get(struct pinctrl_dev *pctldev,
970                         unsigned pin, unsigned long *config)
971 {
972         /* No way to read back config in HW */
973         return -ENOTSUPP;
974 }
975
976 static void bcm2835_pull_config_set(struct bcm2835_pinctrl *pc,
977                 unsigned int pin, unsigned int arg)
978 {
979         u32 off, bit;
980
981         off = GPIO_REG_OFFSET(pin);
982         bit = GPIO_REG_SHIFT(pin);
983
984         bcm2835_gpio_wr(pc, GPPUD, arg & 3);
985         /*
986          * BCM2835 datasheet say to wait 150 cycles, but not of what.
987          * But the VideoCore firmware delay for this operation
988          * based nearly on the same amount of VPU cycles and this clock
989          * runs at 250 MHz.
990          */
991         udelay(1);
992         bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), BIT(bit));
993         udelay(1);
994         bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), 0);
995 }
996
997 static int bcm2835_pinconf_set(struct pinctrl_dev *pctldev,
998                         unsigned int pin, unsigned long *configs,
999                         unsigned int num_configs)
1000 {
1001         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
1002         u32 param, arg;
1003         int i;
1004
1005         for (i = 0; i < num_configs; i++) {
1006                 param = pinconf_to_config_param(configs[i]);
1007                 arg = pinconf_to_config_argument(configs[i]);
1008
1009                 switch (param) {
1010                 /* Set legacy brcm,pull */
1011                 case BCM2835_PINCONF_PARAM_PULL:
1012                         bcm2835_pull_config_set(pc, pin, arg);
1013                         break;
1014
1015                 /* Set pull generic bindings */
1016                 case PIN_CONFIG_BIAS_DISABLE:
1017                         bcm2835_pull_config_set(pc, pin, BCM2835_PUD_OFF);
1018                         break;
1019
1020                 case PIN_CONFIG_BIAS_PULL_DOWN:
1021                         bcm2835_pull_config_set(pc, pin, BCM2835_PUD_DOWN);
1022                         break;
1023
1024                 case PIN_CONFIG_BIAS_PULL_UP:
1025                         bcm2835_pull_config_set(pc, pin, BCM2835_PUD_UP);
1026                         break;
1027
1028                 /* Set output-high or output-low */
1029                 case PIN_CONFIG_OUTPUT:
1030                         bcm2835_gpio_set_bit(pc, arg ? GPSET0 : GPCLR0, pin);
1031                         break;
1032
1033                 default:
1034                         return -ENOTSUPP;
1035
1036                 } /* switch param type */
1037         } /* for each config */
1038
1039         return 0;
1040 }
1041
1042 static const struct pinconf_ops bcm2835_pinconf_ops = {
1043         .is_generic = true,
1044         .pin_config_get = bcm2835_pinconf_get,
1045         .pin_config_set = bcm2835_pinconf_set,
1046 };
1047
1048 static void bcm2711_pull_config_set(struct bcm2835_pinctrl *pc,
1049                                     unsigned int pin, unsigned int arg)
1050 {
1051         u32 shifter;
1052         u32 value;
1053         u32 off;
1054
1055         off = PUD_2711_REG_OFFSET(pin);
1056         shifter = PUD_2711_REG_SHIFT(pin);
1057
1058         value = bcm2835_gpio_rd(pc, GP_GPIO_PUP_PDN_CNTRL_REG0 + (off * 4));
1059         value &= ~(PUD_2711_MASK << shifter);
1060         value |= (arg << shifter);
1061         bcm2835_gpio_wr(pc, GP_GPIO_PUP_PDN_CNTRL_REG0 + (off * 4), value);
1062 }
1063
1064 static int bcm2711_pinconf_set(struct pinctrl_dev *pctldev,
1065                                unsigned int pin, unsigned long *configs,
1066                                unsigned int num_configs)
1067 {
1068         struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
1069         u32 param, arg;
1070         int i;
1071
1072         for (i = 0; i < num_configs; i++) {
1073                 param = pinconf_to_config_param(configs[i]);
1074                 arg = pinconf_to_config_argument(configs[i]);
1075
1076                 switch (param) {
1077                 /* convert legacy brcm,pull */
1078                 case BCM2835_PINCONF_PARAM_PULL:
1079                         if (arg == BCM2835_PUD_UP)
1080                                 arg = BCM2711_PULL_UP;
1081                         else if (arg == BCM2835_PUD_DOWN)
1082                                 arg = BCM2711_PULL_DOWN;
1083                         else
1084                                 arg = BCM2711_PULL_NONE;
1085
1086                         bcm2711_pull_config_set(pc, pin, arg);
1087                         break;
1088
1089                 /* Set pull generic bindings */
1090                 case PIN_CONFIG_BIAS_DISABLE:
1091                         bcm2711_pull_config_set(pc, pin, BCM2711_PULL_NONE);
1092                         break;
1093                 case PIN_CONFIG_BIAS_PULL_DOWN:
1094                         bcm2711_pull_config_set(pc, pin, BCM2711_PULL_DOWN);
1095                         break;
1096                 case PIN_CONFIG_BIAS_PULL_UP:
1097                         bcm2711_pull_config_set(pc, pin, BCM2711_PULL_UP);
1098                         break;
1099
1100                 /* Set output-high or output-low */
1101                 case PIN_CONFIG_OUTPUT:
1102                         bcm2835_gpio_set_bit(pc, arg ? GPSET0 : GPCLR0, pin);
1103                         break;
1104
1105                 default:
1106                         return -ENOTSUPP;
1107                 }
1108         } /* for each config */
1109
1110         return 0;
1111 }
1112
1113 static const struct pinconf_ops bcm2711_pinconf_ops = {
1114         .is_generic = true,
1115         .pin_config_get = bcm2835_pinconf_get,
1116         .pin_config_set = bcm2711_pinconf_set,
1117 };
1118
1119 static const struct pinctrl_desc bcm2835_pinctrl_desc = {
1120         .name = MODULE_NAME,
1121         .pins = bcm2835_gpio_pins,
1122         .npins = BCM2835_NUM_GPIOS,
1123         .pctlops = &bcm2835_pctl_ops,
1124         .pmxops = &bcm2835_pmx_ops,
1125         .confops = &bcm2835_pinconf_ops,
1126         .owner = THIS_MODULE,
1127 };
1128
1129 static const struct pinctrl_desc bcm2711_pinctrl_desc = {
1130         .name = "pinctrl-bcm2711",
1131         .pins = bcm2835_gpio_pins,
1132         .npins = BCM2711_NUM_GPIOS,
1133         .pctlops = &bcm2835_pctl_ops,
1134         .pmxops = &bcm2835_pmx_ops,
1135         .confops = &bcm2711_pinconf_ops,
1136         .owner = THIS_MODULE,
1137 };
1138
1139 static const struct pinctrl_gpio_range bcm2835_pinctrl_gpio_range = {
1140         .name = MODULE_NAME,
1141         .npins = BCM2835_NUM_GPIOS,
1142 };
1143
1144 static const struct pinctrl_gpio_range bcm2711_pinctrl_gpio_range = {
1145         .name = "pinctrl-bcm2711",
1146         .npins = BCM2711_NUM_GPIOS,
1147 };
1148
1149 struct bcm_plat_data {
1150         const struct gpio_chip *gpio_chip;
1151         const struct pinctrl_desc *pctl_desc;
1152         const struct pinctrl_gpio_range *gpio_range;
1153 };
1154
1155 static const struct bcm_plat_data bcm2835_plat_data = {
1156         .gpio_chip = &bcm2835_gpio_chip,
1157         .pctl_desc = &bcm2835_pinctrl_desc,
1158         .gpio_range = &bcm2835_pinctrl_gpio_range,
1159 };
1160
1161 static const struct bcm_plat_data bcm2711_plat_data = {
1162         .gpio_chip = &bcm2711_gpio_chip,
1163         .pctl_desc = &bcm2711_pinctrl_desc,
1164         .gpio_range = &bcm2711_pinctrl_gpio_range,
1165 };
1166
1167 static const struct of_device_id bcm2835_pinctrl_match[] = {
1168         {
1169                 .compatible = "brcm,bcm2835-gpio",
1170                 .data = &bcm2835_plat_data,
1171         },
1172         {
1173                 .compatible = "brcm,bcm2711-gpio",
1174                 .data = &bcm2711_plat_data,
1175         },
1176         {
1177                 .compatible = "brcm,bcm7211-gpio",
1178                 .data = &bcm2711_plat_data,
1179         },
1180         {}
1181 };
1182
1183 static int bcm2835_pinctrl_probe(struct platform_device *pdev)
1184 {
1185         struct device *dev = &pdev->dev;
1186         struct device_node *np = dev->of_node;
1187         const struct bcm_plat_data *pdata;
1188         struct bcm2835_pinctrl *pc;
1189         struct gpio_irq_chip *girq;
1190         struct resource iomem;
1191         int err, i;
1192         const struct of_device_id *match;
1193         int is_7211 = 0;
1194
1195         BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_pins) != BCM2711_NUM_GPIOS);
1196         BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_groups) != BCM2711_NUM_GPIOS);
1197
1198         pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL);
1199         if (!pc)
1200                 return -ENOMEM;
1201
1202         platform_set_drvdata(pdev, pc);
1203         pc->dev = dev;
1204
1205         err = of_address_to_resource(np, 0, &iomem);
1206         if (err) {
1207                 dev_err(dev, "could not get IO memory\n");
1208                 return err;
1209         }
1210
1211         pc->base = devm_ioremap_resource(dev, &iomem);
1212         if (IS_ERR(pc->base))
1213                 return PTR_ERR(pc->base);
1214
1215         match = of_match_node(bcm2835_pinctrl_match, pdev->dev.of_node);
1216         if (!match)
1217                 return -EINVAL;
1218
1219         pdata = match->data;
1220         is_7211 = of_device_is_compatible(np, "brcm,bcm7211-gpio");
1221
1222         pc->gpio_chip = *pdata->gpio_chip;
1223         pc->gpio_chip.parent = dev;
1224         pc->gpio_chip.of_node = np;
1225
1226         for (i = 0; i < BCM2835_NUM_BANKS; i++) {
1227                 unsigned long events;
1228                 unsigned offset;
1229
1230                 /* clear event detection flags */
1231                 bcm2835_gpio_wr(pc, GPREN0 + i * 4, 0);
1232                 bcm2835_gpio_wr(pc, GPFEN0 + i * 4, 0);
1233                 bcm2835_gpio_wr(pc, GPHEN0 + i * 4, 0);
1234                 bcm2835_gpio_wr(pc, GPLEN0 + i * 4, 0);
1235                 bcm2835_gpio_wr(pc, GPAREN0 + i * 4, 0);
1236                 bcm2835_gpio_wr(pc, GPAFEN0 + i * 4, 0);
1237
1238                 /* clear all the events */
1239                 events = bcm2835_gpio_rd(pc, GPEDS0 + i * 4);
1240                 for_each_set_bit(offset, &events, 32)
1241                         bcm2835_gpio_wr(pc, GPEDS0 + i * 4, BIT(offset));
1242
1243                 raw_spin_lock_init(&pc->irq_lock[i]);
1244         }
1245
1246         girq = &pc->gpio_chip.irq;
1247         girq->chip = &bcm2835_gpio_irq_chip;
1248         girq->parent_handler = bcm2835_gpio_irq_handler;
1249         girq->num_parents = BCM2835_NUM_IRQS;
1250         girq->parents = devm_kcalloc(dev, BCM2835_NUM_IRQS,
1251                                      sizeof(*girq->parents),
1252                                      GFP_KERNEL);
1253         if (!girq->parents)
1254                 return -ENOMEM;
1255
1256         if (is_7211) {
1257                 pc->wake_irq = devm_kcalloc(dev, BCM2835_NUM_IRQS,
1258                                             sizeof(*pc->wake_irq),
1259                                             GFP_KERNEL);
1260                 if (!pc->wake_irq)
1261                         return -ENOMEM;
1262         }
1263
1264         /*
1265          * Use the same handler for all groups: this is necessary
1266          * since we use one gpiochip to cover all lines - the
1267          * irq handler then needs to figure out which group and
1268          * bank that was firing the IRQ and look up the per-group
1269          * and bank data.
1270          */
1271         for (i = 0; i < BCM2835_NUM_IRQS; i++) {
1272                 int len;
1273                 char *name;
1274
1275                 girq->parents[i] = irq_of_parse_and_map(np, i);
1276                 if (!is_7211) {
1277                         if (!girq->parents[i]) {
1278                                 girq->num_parents = i;
1279                                 break;
1280                         }
1281                         continue;
1282                 }
1283                 /* Skip over the all banks interrupts */
1284                 pc->wake_irq[i] = irq_of_parse_and_map(np, i +
1285                                                        BCM2835_NUM_IRQS + 1);
1286
1287                 len = strlen(dev_name(pc->dev)) + 16;
1288                 name = devm_kzalloc(pc->dev, len, GFP_KERNEL);
1289                 if (!name)
1290                         return -ENOMEM;
1291
1292                 snprintf(name, len, "%s:bank%d", dev_name(pc->dev), i);
1293
1294                 /* These are optional interrupts */
1295                 err = devm_request_irq(dev, pc->wake_irq[i],
1296                                        bcm2835_gpio_wake_irq_handler,
1297                                        IRQF_SHARED, name, pc);
1298                 if (err)
1299                         dev_warn(dev, "unable to request wake IRQ %d\n",
1300                                  pc->wake_irq[i]);
1301         }
1302
1303         girq->default_type = IRQ_TYPE_NONE;
1304         girq->handler = handle_level_irq;
1305
1306         err = gpiochip_add_data(&pc->gpio_chip, pc);
1307         if (err) {
1308                 dev_err(dev, "could not add GPIO chip\n");
1309                 return err;
1310         }
1311
1312         pc->pctl_desc = *pdata->pctl_desc;
1313         pc->pctl_dev = devm_pinctrl_register(dev, &pc->pctl_desc, pc);
1314         if (IS_ERR(pc->pctl_dev)) {
1315                 gpiochip_remove(&pc->gpio_chip);
1316                 return PTR_ERR(pc->pctl_dev);
1317         }
1318
1319         pc->gpio_range = *pdata->gpio_range;
1320         pc->gpio_range.base = pc->gpio_chip.base;
1321         pc->gpio_range.gc = &pc->gpio_chip;
1322         pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
1323
1324         return 0;
1325 }
1326
1327 static struct platform_driver bcm2835_pinctrl_driver = {
1328         .probe = bcm2835_pinctrl_probe,
1329         .driver = {
1330                 .name = MODULE_NAME,
1331                 .of_match_table = bcm2835_pinctrl_match,
1332                 .suppress_bind_attrs = true,
1333         },
1334 };
1335 builtin_platform_driver(bcm2835_pinctrl_driver);