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/io-mapping.h> 20 #include <linux/gpio/consumer.h> 21 #include <linux/of.h> 22 #include <linux/of_address.h> 23 #include <linux/of_gpio.h> 24 #include <linux/pinctrl/pinctrl.h> 25 #include <linux/slab.h> 26 #include <linux/gpio/machine.h> 27 28 #include "gpiolib.h" 29 30 /* Private data structure for of_gpiochip_find_and_xlate */ 31 struct gg_data { 32 enum of_gpio_flags *flags; 33 struct of_phandle_args gpiospec; 34 35 struct gpio_desc *out_gpio; 36 }; 37 38 /* Private function for resolving node pointer to gpio_chip */ 39 static int of_gpiochip_find_and_xlate(struct gpio_chip *gc, void *data) 40 { 41 struct gg_data *gg_data = data; 42 int ret; 43 44 if ((gc->of_node != gg_data->gpiospec.np) || 45 (gc->of_gpio_n_cells != gg_data->gpiospec.args_count) || 46 (!gc->of_xlate)) 47 return false; 48 49 ret = gc->of_xlate(gc, &gg_data->gpiospec, gg_data->flags); 50 if (ret < 0) { 51 /* We've found a gpio chip, but the translation failed. 52 * Store translation error in out_gpio. 53 * Return false to keep looking, as more than one gpio chip 54 * could be registered per of-node. 55 */ 56 gg_data->out_gpio = ERR_PTR(ret); 57 return false; 58 } 59 60 gg_data->out_gpio = gpiochip_get_desc(gc, ret); 61 return true; 62 } 63 64 /** 65 * of_get_named_gpiod_flags() - Get a GPIO descriptor and flags for GPIO API 66 * @np: device node to get GPIO from 67 * @propname: property name containing gpio specifier(s) 68 * @index: index of the GPIO 69 * @flags: a flags pointer to fill in 70 * 71 * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno 72 * value on the error condition. If @flags is not NULL the function also fills 73 * in flags for the GPIO. 74 */ 75 struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np, 76 const char *propname, int index, enum of_gpio_flags *flags) 77 { 78 /* Return -EPROBE_DEFER to support probe() functions to be called 79 * later when the GPIO actually becomes available 80 */ 81 struct gg_data gg_data = { 82 .flags = flags, 83 .out_gpio = ERR_PTR(-EPROBE_DEFER) 84 }; 85 int ret; 86 87 /* .of_xlate might decide to not fill in the flags, so clear it. */ 88 if (flags) 89 *flags = 0; 90 91 ret = of_parse_phandle_with_args(np, propname, "#gpio-cells", index, 92 &gg_data.gpiospec); 93 if (ret) { 94 pr_debug("%s: can't parse '%s' property of node '%s[%d]'\n", 95 __func__, propname, np->full_name, index); 96 return ERR_PTR(ret); 97 } 98 99 gpiochip_find(&gg_data, of_gpiochip_find_and_xlate); 100 101 of_node_put(gg_data.gpiospec.np); 102 pr_debug("%s: parsed '%s' property of node '%s[%d]' - status (%d)\n", 103 __func__, propname, np->full_name, index, 104 PTR_ERR_OR_ZERO(gg_data.out_gpio)); 105 return gg_data.out_gpio; 106 } 107 108 int of_get_named_gpio_flags(struct device_node *np, const char *list_name, 109 int index, enum of_gpio_flags *flags) 110 { 111 struct gpio_desc *desc; 112 113 desc = of_get_named_gpiod_flags(np, list_name, index, flags); 114 115 if (IS_ERR(desc)) 116 return PTR_ERR(desc); 117 else 118 return desc_to_gpio(desc); 119 } 120 EXPORT_SYMBOL(of_get_named_gpio_flags); 121 122 /** 123 * of_parse_own_gpio() - Get a GPIO hog descriptor, names and flags for GPIO API 124 * @np: device node to get GPIO from 125 * @name: GPIO line name 126 * @lflags: gpio_lookup_flags - returned from of_find_gpio() or 127 * of_parse_own_gpio() 128 * @dflags: gpiod_flags - optional GPIO initialization flags 129 * 130 * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno 131 * value on the error condition. 132 */ 133 static struct gpio_desc *of_parse_own_gpio(struct device_node *np, 134 const char **name, 135 enum gpio_lookup_flags *lflags, 136 enum gpiod_flags *dflags) 137 { 138 struct device_node *chip_np; 139 enum of_gpio_flags xlate_flags; 140 struct gg_data gg_data = { 141 .flags = &xlate_flags, 142 }; 143 u32 tmp; 144 int i, ret; 145 146 chip_np = np->parent; 147 if (!chip_np) 148 return ERR_PTR(-EINVAL); 149 150 xlate_flags = 0; 151 *lflags = 0; 152 *dflags = 0; 153 154 ret = of_property_read_u32(chip_np, "#gpio-cells", &tmp); 155 if (ret) 156 return ERR_PTR(ret); 157 158 if (tmp > MAX_PHANDLE_ARGS) 159 return ERR_PTR(-EINVAL); 160 161 gg_data.gpiospec.args_count = tmp; 162 gg_data.gpiospec.np = chip_np; 163 for (i = 0; i < tmp; i++) { 164 ret = of_property_read_u32_index(np, "gpios", i, 165 &gg_data.gpiospec.args[i]); 166 if (ret) 167 return ERR_PTR(ret); 168 } 169 170 gpiochip_find(&gg_data, of_gpiochip_find_and_xlate); 171 if (!gg_data.out_gpio) { 172 if (np->parent == np) 173 return ERR_PTR(-ENXIO); 174 else 175 return ERR_PTR(-EINVAL); 176 } 177 178 if (xlate_flags & OF_GPIO_ACTIVE_LOW) 179 *lflags |= GPIO_ACTIVE_LOW; 180 181 if (of_property_read_bool(np, "input")) 182 *dflags |= GPIOD_IN; 183 else if (of_property_read_bool(np, "output-low")) 184 *dflags |= GPIOD_OUT_LOW; 185 else if (of_property_read_bool(np, "output-high")) 186 *dflags |= GPIOD_OUT_HIGH; 187 else { 188 pr_warn("GPIO line %d (%s): no hogging state specified, bailing out\n", 189 desc_to_gpio(gg_data.out_gpio), np->name); 190 return ERR_PTR(-EINVAL); 191 } 192 193 if (name && of_property_read_string(np, "line-name", name)) 194 *name = np->name; 195 196 return gg_data.out_gpio; 197 } 198 199 /** 200 * of_gpiochip_set_names() - set up the names of the lines 201 * @chip: GPIO chip whose lines should be named, if possible 202 */ 203 static void of_gpiochip_set_names(struct gpio_chip *gc) 204 { 205 struct gpio_device *gdev = gc->gpiodev; 206 struct device_node *np = gc->of_node; 207 int i; 208 int nstrings; 209 210 nstrings = of_property_count_strings(np, "gpio-line-names"); 211 if (nstrings <= 0) 212 /* Lines names not present */ 213 return; 214 215 /* This is normally not what you want */ 216 if (gdev->ngpio != nstrings) 217 dev_info(&gdev->dev, "gpio-line-names specifies %d line " 218 "names but there are %d lines on the chip\n", 219 nstrings, gdev->ngpio); 220 221 /* 222 * Make sure to not index beyond the end of the number of descriptors 223 * of the GPIO device. 224 */ 225 for (i = 0; i < gdev->ngpio; i++) { 226 const char *name; 227 int ret; 228 229 ret = of_property_read_string_index(np, 230 "gpio-line-names", 231 i, 232 &name); 233 if (ret) { 234 if (ret != -ENODATA) 235 dev_err(&gdev->dev, 236 "unable to name line %d: %d\n", 237 i, ret); 238 break; 239 } 240 gdev->descs[i].name = name; 241 } 242 } 243 244 /** 245 * of_gpiochip_scan_gpios - Scan gpio-controller for gpio definitions 246 * @chip: gpio chip to act on 247 * 248 * This is only used by of_gpiochip_add to request/set GPIO initial 249 * configuration. 250 * It retures error if it fails otherwise 0 on success. 251 */ 252 static int of_gpiochip_scan_gpios(struct gpio_chip *chip) 253 { 254 struct gpio_desc *desc = NULL; 255 struct device_node *np; 256 const char *name; 257 enum gpio_lookup_flags lflags; 258 enum gpiod_flags dflags; 259 int ret; 260 261 for_each_available_child_of_node(chip->of_node, np) { 262 if (!of_property_read_bool(np, "gpio-hog")) 263 continue; 264 265 desc = of_parse_own_gpio(np, &name, &lflags, &dflags); 266 if (IS_ERR(desc)) 267 continue; 268 269 ret = gpiod_hog(desc, name, lflags, dflags); 270 if (ret < 0) 271 return ret; 272 } 273 274 return 0; 275 } 276 277 /** 278 * of_gpio_simple_xlate - translate gpio_spec to the GPIO number and flags 279 * @gc: pointer to the gpio_chip structure 280 * @np: device node of the GPIO chip 281 * @gpio_spec: gpio specifier as found in the device tree 282 * @flags: a flags pointer to fill in 283 * 284 * This is simple translation function, suitable for the most 1:1 mapped 285 * gpio chips. This function performs only one sanity check: whether gpio 286 * is less than ngpios (that is specified in the gpio_chip). 287 */ 288 int of_gpio_simple_xlate(struct gpio_chip *gc, 289 const struct of_phandle_args *gpiospec, u32 *flags) 290 { 291 /* 292 * We're discouraging gpio_cells < 2, since that way you'll have to 293 * write your own xlate function (that will have to retrieve the GPIO 294 * number and the flags from a single gpio cell -- this is possible, 295 * but not recommended). 296 */ 297 if (gc->of_gpio_n_cells < 2) { 298 WARN_ON(1); 299 return -EINVAL; 300 } 301 302 if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells)) 303 return -EINVAL; 304 305 if (gpiospec->args[0] >= gc->ngpio) 306 return -EINVAL; 307 308 if (flags) 309 *flags = gpiospec->args[1]; 310 311 return gpiospec->args[0]; 312 } 313 EXPORT_SYMBOL(of_gpio_simple_xlate); 314 315 /** 316 * of_mm_gpiochip_add_data - Add memory mapped GPIO chip (bank) 317 * @np: device node of the GPIO chip 318 * @mm_gc: pointer to the of_mm_gpio_chip allocated structure 319 * @data: driver data to store in the struct gpio_chip 320 * 321 * To use this function you should allocate and fill mm_gc with: 322 * 323 * 1) In the gpio_chip structure: 324 * - all the callbacks 325 * - of_gpio_n_cells 326 * - of_xlate callback (optional) 327 * 328 * 3) In the of_mm_gpio_chip structure: 329 * - save_regs callback (optional) 330 * 331 * If succeeded, this function will map bank's memory and will 332 * do all necessary work for you. Then you'll able to use .regs 333 * to manage GPIOs from the callbacks. 334 */ 335 int of_mm_gpiochip_add_data(struct device_node *np, 336 struct of_mm_gpio_chip *mm_gc, 337 void *data) 338 { 339 int ret = -ENOMEM; 340 struct gpio_chip *gc = &mm_gc->gc; 341 342 gc->label = kstrdup(np->full_name, GFP_KERNEL); 343 if (!gc->label) 344 goto err0; 345 346 mm_gc->regs = of_iomap(np, 0); 347 if (!mm_gc->regs) 348 goto err1; 349 350 gc->base = -1; 351 352 if (mm_gc->save_regs) 353 mm_gc->save_regs(mm_gc); 354 355 mm_gc->gc.of_node = np; 356 357 ret = gpiochip_add_data(gc, data); 358 if (ret) 359 goto err2; 360 361 return 0; 362 err2: 363 iounmap(mm_gc->regs); 364 err1: 365 kfree(gc->label); 366 err0: 367 pr_err("%s: GPIO chip registration failed with status %d\n", 368 np->full_name, ret); 369 return ret; 370 } 371 EXPORT_SYMBOL(of_mm_gpiochip_add_data); 372 373 /** 374 * of_mm_gpiochip_remove - Remove memory mapped GPIO chip (bank) 375 * @mm_gc: pointer to the of_mm_gpio_chip allocated structure 376 */ 377 void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc) 378 { 379 struct gpio_chip *gc = &mm_gc->gc; 380 381 if (!mm_gc) 382 return; 383 384 gpiochip_remove(gc); 385 iounmap(mm_gc->regs); 386 kfree(gc->label); 387 } 388 EXPORT_SYMBOL(of_mm_gpiochip_remove); 389 390 #ifdef CONFIG_PINCTRL 391 static int of_gpiochip_add_pin_range(struct gpio_chip *chip) 392 { 393 struct device_node *np = chip->of_node; 394 struct of_phandle_args pinspec; 395 struct pinctrl_dev *pctldev; 396 int index = 0, ret; 397 const char *name; 398 static const char group_names_propname[] = "gpio-ranges-group-names"; 399 struct property *group_names; 400 401 if (!np) 402 return 0; 403 404 group_names = of_find_property(np, group_names_propname, NULL); 405 406 for (;; index++) { 407 ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 408 index, &pinspec); 409 if (ret) 410 break; 411 412 pctldev = of_pinctrl_get(pinspec.np); 413 if (!pctldev) 414 return -EPROBE_DEFER; 415 416 if (pinspec.args[2]) { 417 if (group_names) { 418 of_property_read_string_index(np, 419 group_names_propname, 420 index, &name); 421 if (strlen(name)) { 422 pr_err("%s: Group name of numeric GPIO ranges must be the empty string.\n", 423 np->full_name); 424 break; 425 } 426 } 427 /* npins != 0: linear range */ 428 ret = gpiochip_add_pin_range(chip, 429 pinctrl_dev_get_devname(pctldev), 430 pinspec.args[0], 431 pinspec.args[1], 432 pinspec.args[2]); 433 if (ret) 434 return ret; 435 } else { 436 /* npins == 0: special range */ 437 if (pinspec.args[1]) { 438 pr_err("%s: Illegal gpio-range format.\n", 439 np->full_name); 440 break; 441 } 442 443 if (!group_names) { 444 pr_err("%s: GPIO group range requested but no %s property.\n", 445 np->full_name, group_names_propname); 446 break; 447 } 448 449 ret = of_property_read_string_index(np, 450 group_names_propname, 451 index, &name); 452 if (ret) 453 break; 454 455 if (!strlen(name)) { 456 pr_err("%s: Group name of GPIO group range cannot be the empty string.\n", 457 np->full_name); 458 break; 459 } 460 461 ret = gpiochip_add_pingroup_range(chip, pctldev, 462 pinspec.args[0], name); 463 if (ret) 464 return ret; 465 } 466 } 467 468 return 0; 469 } 470 471 #else 472 static int of_gpiochip_add_pin_range(struct gpio_chip *chip) { return 0; } 473 #endif 474 475 int of_gpiochip_add(struct gpio_chip *chip) 476 { 477 int status; 478 479 if ((!chip->of_node) && (chip->parent)) 480 chip->of_node = chip->parent->of_node; 481 482 if (!chip->of_node) 483 return 0; 484 485 if (!chip->of_xlate) { 486 chip->of_gpio_n_cells = 2; 487 chip->of_xlate = of_gpio_simple_xlate; 488 } 489 490 status = of_gpiochip_add_pin_range(chip); 491 if (status) 492 return status; 493 494 /* If the chip defines names itself, these take precedence */ 495 if (!chip->names) 496 of_gpiochip_set_names(chip); 497 498 of_node_get(chip->of_node); 499 500 return of_gpiochip_scan_gpios(chip); 501 } 502 503 void of_gpiochip_remove(struct gpio_chip *chip) 504 { 505 gpiochip_remove_pin_ranges(chip); 506 of_node_put(chip->of_node); 507 } 508