1 /* 2 * OF helpers for the GPIO API 3 * 4 * Copyright (c) 2007-2008 MontaVista Software, Inc. 5 * 6 * Author: Anton Vorontsov <avorontsov@ru.mvista.com> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 */ 13 14 #include <linux/device.h> 15 #include <linux/err.h> 16 #include <linux/errno.h> 17 #include <linux/module.h> 18 #include <linux/io.h> 19 #include <linux/gpio/consumer.h> 20 #include <linux/of.h> 21 #include <linux/of_address.h> 22 #include <linux/of_gpio.h> 23 #include <linux/pinctrl/pinctrl.h> 24 #include <linux/slab.h> 25 #include <linux/gpio/machine.h> 26 27 #include "gpiolib.h" 28 29 static int of_gpiochip_match_node_and_xlate(struct gpio_chip *chip, void *data) 30 { 31 struct of_phandle_args *gpiospec = data; 32 33 return chip->gpiodev->dev.of_node == gpiospec->np && 34 chip->of_xlate && 35 chip->of_xlate(chip, gpiospec, NULL) >= 0; 36 } 37 38 static struct gpio_chip *of_find_gpiochip_by_xlate( 39 struct of_phandle_args *gpiospec) 40 { 41 return gpiochip_find(gpiospec, of_gpiochip_match_node_and_xlate); 42 } 43 44 static struct gpio_desc *of_xlate_and_get_gpiod_flags(struct gpio_chip *chip, 45 struct of_phandle_args *gpiospec, 46 enum of_gpio_flags *flags) 47 { 48 int ret; 49 50 if (chip->of_gpio_n_cells != gpiospec->args_count) 51 return ERR_PTR(-EINVAL); 52 53 ret = chip->of_xlate(chip, gpiospec, flags); 54 if (ret < 0) 55 return ERR_PTR(ret); 56 57 return gpiochip_get_desc(chip, ret); 58 } 59 60 static void of_gpio_flags_quirks(struct device_node *np, 61 enum of_gpio_flags *flags) 62 { 63 /* 64 * Some GPIO fixed regulator quirks. 65 * Note that active low is the default. 66 */ 67 if (IS_ENABLED(CONFIG_REGULATOR) && 68 (of_device_is_compatible(np, "regulator-fixed") || 69 of_device_is_compatible(np, "reg-fixed-voltage") || 70 of_device_is_compatible(np, "regulator-gpio"))) { 71 /* 72 * The regulator GPIO handles are specified such that the 73 * presence or absence of "enable-active-high" solely controls 74 * the polarity of the GPIO line. Any phandle flags must 75 * be actively ignored. 76 */ 77 if (*flags & OF_GPIO_ACTIVE_LOW) { 78 pr_warn("%s GPIO handle specifies active low - ignored\n", 79 of_node_full_name(np)); 80 *flags &= ~OF_GPIO_ACTIVE_LOW; 81 } 82 if (!of_property_read_bool(np, "enable-active-high")) 83 *flags |= OF_GPIO_ACTIVE_LOW; 84 } 85 /* 86 * Legacy open drain handling for fixed voltage regulators. 87 */ 88 if (IS_ENABLED(CONFIG_REGULATOR) && 89 of_device_is_compatible(np, "reg-fixed-voltage") && 90 of_property_read_bool(np, "gpio-open-drain")) { 91 *flags |= (OF_GPIO_SINGLE_ENDED | OF_GPIO_OPEN_DRAIN); 92 pr_info("%s uses legacy open drain flag - update the DTS if you can\n", 93 of_node_full_name(np)); 94 } 95 } 96 97 /** 98 * of_get_named_gpiod_flags() - Get a GPIO descriptor and flags for GPIO API 99 * @np: device node to get GPIO from 100 * @propname: property name containing gpio specifier(s) 101 * @index: index of the GPIO 102 * @flags: a flags pointer to fill in 103 * 104 * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno 105 * value on the error condition. If @flags is not NULL the function also fills 106 * in flags for the GPIO. 107 */ 108 struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np, 109 const char *propname, int index, enum of_gpio_flags *flags) 110 { 111 struct of_phandle_args gpiospec; 112 struct gpio_chip *chip; 113 struct gpio_desc *desc; 114 int ret; 115 116 ret = of_parse_phandle_with_args_map(np, propname, "gpio", index, 117 &gpiospec); 118 if (ret) { 119 pr_debug("%s: can't parse '%s' property of node '%pOF[%d]'\n", 120 __func__, propname, np, index); 121 return ERR_PTR(ret); 122 } 123 124 chip = of_find_gpiochip_by_xlate(&gpiospec); 125 if (!chip) { 126 desc = ERR_PTR(-EPROBE_DEFER); 127 goto out; 128 } 129 130 desc = of_xlate_and_get_gpiod_flags(chip, &gpiospec, flags); 131 if (IS_ERR(desc)) 132 goto out; 133 134 if (flags) 135 of_gpio_flags_quirks(np, flags); 136 137 pr_debug("%s: parsed '%s' property of node '%pOF[%d]' - status (%d)\n", 138 __func__, propname, np, index, 139 PTR_ERR_OR_ZERO(desc)); 140 141 out: 142 of_node_put(gpiospec.np); 143 144 return desc; 145 } 146 147 int of_get_named_gpio_flags(struct device_node *np, const char *list_name, 148 int index, enum of_gpio_flags *flags) 149 { 150 struct gpio_desc *desc; 151 152 desc = of_get_named_gpiod_flags(np, list_name, index, flags); 153 154 if (IS_ERR(desc)) 155 return PTR_ERR(desc); 156 else 157 return desc_to_gpio(desc); 158 } 159 EXPORT_SYMBOL(of_get_named_gpio_flags); 160 161 /* 162 * The SPI GPIO bindings happened before we managed to establish that GPIO 163 * properties should be named "foo-gpios" so we have this special kludge for 164 * them. 165 */ 166 static struct gpio_desc *of_find_spi_gpio(struct device *dev, const char *con_id, 167 enum of_gpio_flags *of_flags) 168 { 169 char prop_name[32]; /* 32 is max size of property name */ 170 struct device_node *np = dev->of_node; 171 struct gpio_desc *desc; 172 173 /* 174 * Hopefully the compiler stubs the rest of the function if this 175 * is false. 176 */ 177 if (!IS_ENABLED(CONFIG_SPI_MASTER)) 178 return ERR_PTR(-ENOENT); 179 180 /* Allow this specifically for "spi-gpio" devices */ 181 if (!of_device_is_compatible(np, "spi-gpio") || !con_id) 182 return ERR_PTR(-ENOENT); 183 184 /* Will be "gpio-sck", "gpio-mosi" or "gpio-miso" */ 185 snprintf(prop_name, sizeof(prop_name), "%s-%s", "gpio", con_id); 186 187 desc = of_get_named_gpiod_flags(np, prop_name, 0, of_flags); 188 return desc; 189 } 190 191 /* 192 * Some regulator bindings happened before we managed to establish that GPIO 193 * properties should be named "foo-gpios" so we have this special kludge for 194 * them. 195 */ 196 static struct gpio_desc *of_find_regulator_gpio(struct device *dev, const char *con_id, 197 enum of_gpio_flags *of_flags) 198 { 199 /* These are the connection IDs we accept as legacy GPIO phandles */ 200 const char *whitelist[] = { 201 "wlf,ldoena", /* Arizona */ 202 "wlf,ldo1ena", /* WM8994 */ 203 "wlf,ldo2ena", /* WM8994 */ 204 }; 205 struct device_node *np = dev->of_node; 206 struct gpio_desc *desc; 207 int i; 208 209 if (!IS_ENABLED(CONFIG_REGULATOR)) 210 return ERR_PTR(-ENOENT); 211 212 if (!con_id) 213 return ERR_PTR(-ENOENT); 214 215 i = match_string(whitelist, ARRAY_SIZE(whitelist), con_id); 216 if (i < 0) 217 return ERR_PTR(-ENOENT); 218 219 desc = of_get_named_gpiod_flags(np, con_id, 0, of_flags); 220 return desc; 221 } 222 223 struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id, 224 unsigned int idx, 225 enum gpio_lookup_flags *flags) 226 { 227 char prop_name[32]; /* 32 is max size of property name */ 228 enum of_gpio_flags of_flags; 229 struct gpio_desc *desc; 230 unsigned int i; 231 232 /* Try GPIO property "foo-gpios" and "foo-gpio" */ 233 for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) { 234 if (con_id) 235 snprintf(prop_name, sizeof(prop_name), "%s-%s", con_id, 236 gpio_suffixes[i]); 237 else 238 snprintf(prop_name, sizeof(prop_name), "%s", 239 gpio_suffixes[i]); 240 241 desc = of_get_named_gpiod_flags(dev->of_node, prop_name, idx, 242 &of_flags); 243 /* 244 * -EPROBE_DEFER in our case means that we found a 245 * valid GPIO property, but no controller has been 246 * registered so far. 247 * 248 * This means we don't need to look any further for 249 * alternate name conventions, and we should really 250 * preserve the return code for our user to be able to 251 * retry probing later. 252 */ 253 if (IS_ERR(desc) && PTR_ERR(desc) == -EPROBE_DEFER) 254 return desc; 255 256 if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT)) 257 break; 258 } 259 260 /* Special handling for SPI GPIOs if used */ 261 if (IS_ERR(desc)) 262 desc = of_find_spi_gpio(dev, con_id, &of_flags); 263 264 /* Special handling for regulator GPIOs if used */ 265 if (IS_ERR(desc) && PTR_ERR(desc) != -EPROBE_DEFER) 266 desc = of_find_regulator_gpio(dev, con_id, &of_flags); 267 268 if (IS_ERR(desc)) 269 return desc; 270 271 if (of_flags & OF_GPIO_ACTIVE_LOW) 272 *flags |= GPIO_ACTIVE_LOW; 273 274 if (of_flags & OF_GPIO_SINGLE_ENDED) { 275 if (of_flags & OF_GPIO_OPEN_DRAIN) 276 *flags |= GPIO_OPEN_DRAIN; 277 else 278 *flags |= GPIO_OPEN_SOURCE; 279 } 280 281 if (of_flags & OF_GPIO_TRANSITORY) 282 *flags |= GPIO_TRANSITORY; 283 284 return desc; 285 } 286 287 /** 288 * of_parse_own_gpio() - Get a GPIO hog descriptor, names and flags for GPIO API 289 * @np: device node to get GPIO from 290 * @chip: GPIO chip whose hog is parsed 291 * @idx: Index of the GPIO to parse 292 * @name: GPIO line name 293 * @lflags: gpio_lookup_flags - returned from of_find_gpio() or 294 * of_parse_own_gpio() 295 * @dflags: gpiod_flags - optional GPIO initialization flags 296 * 297 * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno 298 * value on the error condition. 299 */ 300 static struct gpio_desc *of_parse_own_gpio(struct device_node *np, 301 struct gpio_chip *chip, 302 unsigned int idx, const char **name, 303 enum gpio_lookup_flags *lflags, 304 enum gpiod_flags *dflags) 305 { 306 struct device_node *chip_np; 307 enum of_gpio_flags xlate_flags; 308 struct of_phandle_args gpiospec; 309 struct gpio_desc *desc; 310 unsigned int i; 311 u32 tmp; 312 int ret; 313 314 chip_np = chip->of_node; 315 if (!chip_np) 316 return ERR_PTR(-EINVAL); 317 318 xlate_flags = 0; 319 *lflags = 0; 320 *dflags = 0; 321 322 ret = of_property_read_u32(chip_np, "#gpio-cells", &tmp); 323 if (ret) 324 return ERR_PTR(ret); 325 326 gpiospec.np = chip_np; 327 gpiospec.args_count = tmp; 328 329 for (i = 0; i < tmp; i++) { 330 ret = of_property_read_u32_index(np, "gpios", idx * tmp + i, 331 &gpiospec.args[i]); 332 if (ret) 333 return ERR_PTR(ret); 334 } 335 336 desc = of_xlate_and_get_gpiod_flags(chip, &gpiospec, &xlate_flags); 337 if (IS_ERR(desc)) 338 return desc; 339 340 if (xlate_flags & OF_GPIO_ACTIVE_LOW) 341 *lflags |= GPIO_ACTIVE_LOW; 342 if (xlate_flags & OF_GPIO_TRANSITORY) 343 *lflags |= GPIO_TRANSITORY; 344 345 if (of_property_read_bool(np, "input")) 346 *dflags |= GPIOD_IN; 347 else if (of_property_read_bool(np, "output-low")) 348 *dflags |= GPIOD_OUT_LOW; 349 else if (of_property_read_bool(np, "output-high")) 350 *dflags |= GPIOD_OUT_HIGH; 351 else { 352 pr_warn("GPIO line %d (%s): no hogging state specified, bailing out\n", 353 desc_to_gpio(desc), np->name); 354 return ERR_PTR(-EINVAL); 355 } 356 357 if (name && of_property_read_string(np, "line-name", name)) 358 *name = np->name; 359 360 return desc; 361 } 362 363 /** 364 * of_gpiochip_scan_gpios - Scan gpio-controller for gpio definitions 365 * @chip: gpio chip to act on 366 * 367 * This is only used by of_gpiochip_add to request/set GPIO initial 368 * configuration. 369 * It returns error if it fails otherwise 0 on success. 370 */ 371 static int of_gpiochip_scan_gpios(struct gpio_chip *chip) 372 { 373 struct gpio_desc *desc = NULL; 374 struct device_node *np; 375 const char *name; 376 enum gpio_lookup_flags lflags; 377 enum gpiod_flags dflags; 378 unsigned int i; 379 int ret; 380 381 for_each_available_child_of_node(chip->of_node, np) { 382 if (!of_property_read_bool(np, "gpio-hog")) 383 continue; 384 385 for (i = 0;; i++) { 386 desc = of_parse_own_gpio(np, chip, i, &name, &lflags, 387 &dflags); 388 if (IS_ERR(desc)) 389 break; 390 391 ret = gpiod_hog(desc, name, lflags, dflags); 392 if (ret < 0) { 393 of_node_put(np); 394 return ret; 395 } 396 } 397 } 398 399 return 0; 400 } 401 402 /** 403 * of_gpio_simple_xlate - translate gpiospec to the GPIO number and flags 404 * @gc: pointer to the gpio_chip structure 405 * @gpiospec: GPIO specifier as found in the device tree 406 * @flags: a flags pointer to fill in 407 * 408 * This is simple translation function, suitable for the most 1:1 mapped 409 * GPIO chips. This function performs only one sanity check: whether GPIO 410 * is less than ngpios (that is specified in the gpio_chip). 411 */ 412 int of_gpio_simple_xlate(struct gpio_chip *gc, 413 const struct of_phandle_args *gpiospec, u32 *flags) 414 { 415 /* 416 * We're discouraging gpio_cells < 2, since that way you'll have to 417 * write your own xlate function (that will have to retrieve the GPIO 418 * number and the flags from a single gpio cell -- this is possible, 419 * but not recommended). 420 */ 421 if (gc->of_gpio_n_cells < 2) { 422 WARN_ON(1); 423 return -EINVAL; 424 } 425 426 if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells)) 427 return -EINVAL; 428 429 if (gpiospec->args[0] >= gc->ngpio) 430 return -EINVAL; 431 432 if (flags) 433 *flags = gpiospec->args[1]; 434 435 return gpiospec->args[0]; 436 } 437 EXPORT_SYMBOL(of_gpio_simple_xlate); 438 439 /** 440 * of_mm_gpiochip_add_data - Add memory mapped GPIO chip (bank) 441 * @np: device node of the GPIO chip 442 * @mm_gc: pointer to the of_mm_gpio_chip allocated structure 443 * @data: driver data to store in the struct gpio_chip 444 * 445 * To use this function you should allocate and fill mm_gc with: 446 * 447 * 1) In the gpio_chip structure: 448 * - all the callbacks 449 * - of_gpio_n_cells 450 * - of_xlate callback (optional) 451 * 452 * 3) In the of_mm_gpio_chip structure: 453 * - save_regs callback (optional) 454 * 455 * If succeeded, this function will map bank's memory and will 456 * do all necessary work for you. Then you'll able to use .regs 457 * to manage GPIOs from the callbacks. 458 */ 459 int of_mm_gpiochip_add_data(struct device_node *np, 460 struct of_mm_gpio_chip *mm_gc, 461 void *data) 462 { 463 int ret = -ENOMEM; 464 struct gpio_chip *gc = &mm_gc->gc; 465 466 gc->label = kasprintf(GFP_KERNEL, "%pOF", np); 467 if (!gc->label) 468 goto err0; 469 470 mm_gc->regs = of_iomap(np, 0); 471 if (!mm_gc->regs) 472 goto err1; 473 474 gc->base = -1; 475 476 if (mm_gc->save_regs) 477 mm_gc->save_regs(mm_gc); 478 479 mm_gc->gc.of_node = np; 480 481 ret = gpiochip_add_data(gc, data); 482 if (ret) 483 goto err2; 484 485 return 0; 486 err2: 487 iounmap(mm_gc->regs); 488 err1: 489 kfree(gc->label); 490 err0: 491 pr_err("%pOF: GPIO chip registration failed with status %d\n", np, ret); 492 return ret; 493 } 494 EXPORT_SYMBOL(of_mm_gpiochip_add_data); 495 496 /** 497 * of_mm_gpiochip_remove - Remove memory mapped GPIO chip (bank) 498 * @mm_gc: pointer to the of_mm_gpio_chip allocated structure 499 */ 500 void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc) 501 { 502 struct gpio_chip *gc = &mm_gc->gc; 503 504 if (!mm_gc) 505 return; 506 507 gpiochip_remove(gc); 508 iounmap(mm_gc->regs); 509 kfree(gc->label); 510 } 511 EXPORT_SYMBOL(of_mm_gpiochip_remove); 512 513 static void of_gpiochip_init_valid_mask(struct gpio_chip *chip) 514 { 515 int len, i; 516 u32 start, count; 517 struct device_node *np = chip->of_node; 518 519 len = of_property_count_u32_elems(np, "gpio-reserved-ranges"); 520 if (len < 0 || len % 2 != 0) 521 return; 522 523 for (i = 0; i < len; i += 2) { 524 of_property_read_u32_index(np, "gpio-reserved-ranges", 525 i, &start); 526 of_property_read_u32_index(np, "gpio-reserved-ranges", 527 i + 1, &count); 528 if (start >= chip->ngpio || start + count >= chip->ngpio) 529 continue; 530 531 bitmap_clear(chip->valid_mask, start, count); 532 } 533 }; 534 535 #ifdef CONFIG_PINCTRL 536 static int of_gpiochip_add_pin_range(struct gpio_chip *chip) 537 { 538 struct device_node *np = chip->of_node; 539 struct of_phandle_args pinspec; 540 struct pinctrl_dev *pctldev; 541 int index = 0, ret; 542 const char *name; 543 static const char group_names_propname[] = "gpio-ranges-group-names"; 544 struct property *group_names; 545 546 if (!np) 547 return 0; 548 549 group_names = of_find_property(np, group_names_propname, NULL); 550 551 for (;; index++) { 552 ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 553 index, &pinspec); 554 if (ret) 555 break; 556 557 pctldev = of_pinctrl_get(pinspec.np); 558 of_node_put(pinspec.np); 559 if (!pctldev) 560 return -EPROBE_DEFER; 561 562 if (pinspec.args[2]) { 563 if (group_names) { 564 of_property_read_string_index(np, 565 group_names_propname, 566 index, &name); 567 if (strlen(name)) { 568 pr_err("%pOF: Group name of numeric GPIO ranges must be the empty string.\n", 569 np); 570 break; 571 } 572 } 573 /* npins != 0: linear range */ 574 ret = gpiochip_add_pin_range(chip, 575 pinctrl_dev_get_devname(pctldev), 576 pinspec.args[0], 577 pinspec.args[1], 578 pinspec.args[2]); 579 if (ret) 580 return ret; 581 } else { 582 /* npins == 0: special range */ 583 if (pinspec.args[1]) { 584 pr_err("%pOF: Illegal gpio-range format.\n", 585 np); 586 break; 587 } 588 589 if (!group_names) { 590 pr_err("%pOF: GPIO group range requested but no %s property.\n", 591 np, group_names_propname); 592 break; 593 } 594 595 ret = of_property_read_string_index(np, 596 group_names_propname, 597 index, &name); 598 if (ret) 599 break; 600 601 if (!strlen(name)) { 602 pr_err("%pOF: Group name of GPIO group range cannot be the empty string.\n", 603 np); 604 break; 605 } 606 607 ret = gpiochip_add_pingroup_range(chip, pctldev, 608 pinspec.args[0], name); 609 if (ret) 610 return ret; 611 } 612 } 613 614 return 0; 615 } 616 617 #else 618 static int of_gpiochip_add_pin_range(struct gpio_chip *chip) { return 0; } 619 #endif 620 621 int of_gpiochip_add(struct gpio_chip *chip) 622 { 623 int status; 624 625 if (!chip->of_node) 626 return 0; 627 628 if (!chip->of_xlate) { 629 chip->of_gpio_n_cells = 2; 630 chip->of_xlate = of_gpio_simple_xlate; 631 } 632 633 if (chip->of_gpio_n_cells > MAX_PHANDLE_ARGS) 634 return -EINVAL; 635 636 of_gpiochip_init_valid_mask(chip); 637 638 status = of_gpiochip_add_pin_range(chip); 639 if (status) 640 return status; 641 642 /* If the chip defines names itself, these take precedence */ 643 if (!chip->names) 644 devprop_gpiochip_set_names(chip, 645 of_fwnode_handle(chip->of_node)); 646 647 of_node_get(chip->of_node); 648 649 return of_gpiochip_scan_gpios(chip); 650 } 651 652 void of_gpiochip_remove(struct gpio_chip *chip) 653 { 654 gpiochip_remove_pin_ranges(chip); 655 of_node_put(chip->of_node); 656 } 657