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