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