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