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