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