xref: /linux/drivers/gpio/gpiolib-of.c (revision 031fba65fc202abf1f193e321be7a2c274fd88ba)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * OF helpers for the GPIO API
4  *
5  * Copyright (c) 2007-2008  MontaVista Software, Inc.
6  *
7  * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
8  */
9 
10 #include <linux/device.h>
11 #include <linux/err.h>
12 #include <linux/errno.h>
13 #include <linux/io.h>
14 #include <linux/module.h>
15 #include <linux/of.h>
16 #include <linux/of_address.h>
17 #include <linux/of_gpio.h>
18 #include <linux/pinctrl/pinctrl.h>
19 #include <linux/slab.h>
20 #include <linux/string.h>
21 
22 #include <linux/gpio/consumer.h>
23 #include <linux/gpio/machine.h>
24 
25 #include "gpiolib.h"
26 #include "gpiolib-of.h"
27 
28 /*
29  * This is Linux-specific flags. By default controllers' and Linux' mapping
30  * match, but GPIO controllers are free to translate their own flags to
31  * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended.
32  */
33 enum of_gpio_flags {
34 	OF_GPIO_ACTIVE_LOW = 0x1,
35 	OF_GPIO_SINGLE_ENDED = 0x2,
36 	OF_GPIO_OPEN_DRAIN = 0x4,
37 	OF_GPIO_TRANSITORY = 0x8,
38 	OF_GPIO_PULL_UP = 0x10,
39 	OF_GPIO_PULL_DOWN = 0x20,
40 	OF_GPIO_PULL_DISABLE = 0x40,
41 };
42 
43 /**
44  * of_gpio_named_count() - Count GPIOs for a device
45  * @np:		device node to count GPIOs for
46  * @propname:	property name containing gpio specifier(s)
47  *
48  * The function returns the count of GPIOs specified for a node.
49  * Note that the empty GPIO specifiers count too. Returns either
50  *   Number of gpios defined in property,
51  *   -EINVAL for an incorrectly formed gpios property, or
52  *   -ENOENT for a missing gpios property
53  *
54  * Example:
55  * gpios = <0
56  *          &gpio1 1 2
57  *          0
58  *          &gpio2 3 4>;
59  *
60  * The above example defines four GPIOs, two of which are not specified.
61  * This function will return '4'
62  */
63 static int of_gpio_named_count(const struct device_node *np,
64 			       const char *propname)
65 {
66 	return of_count_phandle_with_args(np, propname, "#gpio-cells");
67 }
68 
69 /**
70  * of_gpio_spi_cs_get_count() - special GPIO counting for SPI
71  * @dev:    Consuming device
72  * @con_id: Function within the GPIO consumer
73  *
74  * Some elder GPIO controllers need special quirks. Currently we handle
75  * the Freescale and PPC GPIO controller with bindings that doesn't use the
76  * established "cs-gpios" for chip selects but instead rely on
77  * "gpios" for the chip select lines. If we detect this, we redirect
78  * the counting of "cs-gpios" to count "gpios" transparent to the
79  * driver.
80  */
81 static int of_gpio_spi_cs_get_count(struct device *dev, const char *con_id)
82 {
83 	struct device_node *np = dev->of_node;
84 
85 	if (!IS_ENABLED(CONFIG_SPI_MASTER))
86 		return 0;
87 	if (!con_id || strcmp(con_id, "cs"))
88 		return 0;
89 	if (!of_device_is_compatible(np, "fsl,spi") &&
90 	    !of_device_is_compatible(np, "aeroflexgaisler,spictrl") &&
91 	    !of_device_is_compatible(np, "ibm,ppc4xx-spi"))
92 		return 0;
93 	return of_gpio_named_count(np, "gpios");
94 }
95 
96 int of_gpio_get_count(struct device *dev, const char *con_id)
97 {
98 	int ret;
99 	char propname[32];
100 	unsigned int i;
101 
102 	ret = of_gpio_spi_cs_get_count(dev, con_id);
103 	if (ret > 0)
104 		return ret;
105 
106 	for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
107 		if (con_id)
108 			snprintf(propname, sizeof(propname), "%s-%s",
109 				 con_id, gpio_suffixes[i]);
110 		else
111 			snprintf(propname, sizeof(propname), "%s",
112 				 gpio_suffixes[i]);
113 
114 		ret = of_gpio_named_count(dev->of_node, propname);
115 		if (ret > 0)
116 			break;
117 	}
118 	return ret ? ret : -ENOENT;
119 }
120 
121 static int of_gpiochip_match_node_and_xlate(struct gpio_chip *chip, void *data)
122 {
123 	struct of_phandle_args *gpiospec = data;
124 
125 	return device_match_of_node(&chip->gpiodev->dev, gpiospec->np) &&
126 				chip->of_xlate &&
127 				chip->of_xlate(chip, gpiospec, NULL) >= 0;
128 }
129 
130 static struct gpio_device *
131 of_find_gpio_device_by_xlate(struct of_phandle_args *gpiospec)
132 {
133 	return gpio_device_find(gpiospec, of_gpiochip_match_node_and_xlate);
134 }
135 
136 static struct gpio_desc *of_xlate_and_get_gpiod_flags(struct gpio_chip *chip,
137 					struct of_phandle_args *gpiospec,
138 					enum of_gpio_flags *flags)
139 {
140 	int ret;
141 
142 	if (chip->of_gpio_n_cells != gpiospec->args_count)
143 		return ERR_PTR(-EINVAL);
144 
145 	ret = chip->of_xlate(chip, gpiospec, flags);
146 	if (ret < 0)
147 		return ERR_PTR(ret);
148 
149 	return gpiochip_get_desc(chip, ret);
150 }
151 
152 /*
153  * Overrides stated polarity of a gpio line and warns when there is a
154  * discrepancy.
155  */
156 static void of_gpio_quirk_polarity(const struct device_node *np,
157 				   bool active_high,
158 				   enum of_gpio_flags *flags)
159 {
160 	if (active_high) {
161 		if (*flags & OF_GPIO_ACTIVE_LOW) {
162 			pr_warn("%s GPIO handle specifies active low - ignored\n",
163 				of_node_full_name(np));
164 			*flags &= ~OF_GPIO_ACTIVE_LOW;
165 		}
166 	} else {
167 		if (!(*flags & OF_GPIO_ACTIVE_LOW))
168 			pr_info("%s enforce active low on GPIO handle\n",
169 				of_node_full_name(np));
170 		*flags |= OF_GPIO_ACTIVE_LOW;
171 	}
172 }
173 
174 /*
175  * This quirk does static polarity overrides in cases where existing
176  * DTS specified incorrect polarity.
177  */
178 static void of_gpio_try_fixup_polarity(const struct device_node *np,
179 				       const char *propname,
180 				       enum of_gpio_flags *flags)
181 {
182 	static const struct {
183 		const char *compatible;
184 		const char *propname;
185 		bool active_high;
186 	} gpios[] = {
187 #if !IS_ENABLED(CONFIG_LCD_HX8357)
188 		/*
189 		 * Himax LCD controllers used incorrectly named
190 		 * "gpios-reset" property and also specified wrong
191 		 * polarity.
192 		 */
193 		{ "himax,hx8357",	"gpios-reset",	false },
194 		{ "himax,hx8369",	"gpios-reset",	false },
195 		/*
196 		 * The rb-gpios semantics was undocumented and qi,lb60 (along with
197 		 * the ingenic driver) got it wrong. The active state encodes the
198 		 * NAND ready state, which is high level. Since there's no signal
199 		 * inverter on this board, it should be active-high. Let's fix that
200 		 * here for older DTs so we can re-use the generic nand_gpio_waitrdy()
201 		 * helper, and be consistent with what other drivers do.
202 		 */
203 		{ "qi,lb60",		"rb-gpios",	true },
204 #endif
205 	};
206 	unsigned int i;
207 
208 	for (i = 0; i < ARRAY_SIZE(gpios); i++) {
209 		if (of_device_is_compatible(np, gpios[i].compatible) &&
210 		    !strcmp(propname, gpios[i].propname)) {
211 			of_gpio_quirk_polarity(np, gpios[i].active_high, flags);
212 			break;
213 		}
214 	}
215 }
216 
217 static void of_gpio_set_polarity_by_property(const struct device_node *np,
218 					     const char *propname,
219 					     enum of_gpio_flags *flags)
220 {
221 	const struct device_node *np_compat = np;
222 	const struct device_node *np_propname = np;
223 	static const struct {
224 		const char *compatible;
225 		const char *gpio_propname;
226 		const char *polarity_propname;
227 	} gpios[] = {
228 #if IS_ENABLED(CONFIG_FEC)
229 		/* Freescale Fast Ethernet Controller */
230 		{ "fsl,imx25-fec",   "phy-reset-gpios", "phy-reset-active-high" },
231 		{ "fsl,imx27-fec",   "phy-reset-gpios", "phy-reset-active-high" },
232 		{ "fsl,imx28-fec",   "phy-reset-gpios", "phy-reset-active-high" },
233 		{ "fsl,imx6q-fec",   "phy-reset-gpios", "phy-reset-active-high" },
234 		{ "fsl,mvf600-fec",  "phy-reset-gpios", "phy-reset-active-high" },
235 		{ "fsl,imx6sx-fec",  "phy-reset-gpios", "phy-reset-active-high" },
236 		{ "fsl,imx6ul-fec",  "phy-reset-gpios", "phy-reset-active-high" },
237 		{ "fsl,imx8mq-fec",  "phy-reset-gpios", "phy-reset-active-high" },
238 		{ "fsl,imx8qm-fec",  "phy-reset-gpios", "phy-reset-active-high" },
239 		{ "fsl,s32v234-fec", "phy-reset-gpios", "phy-reset-active-high" },
240 #endif
241 #if IS_ENABLED(CONFIG_PCI_IMX6)
242 		{ "fsl,imx6q-pcie",  "reset-gpio", "reset-gpio-active-high" },
243 		{ "fsl,imx6sx-pcie", "reset-gpio", "reset-gpio-active-high" },
244 		{ "fsl,imx6qp-pcie", "reset-gpio", "reset-gpio-active-high" },
245 		{ "fsl,imx7d-pcie",  "reset-gpio", "reset-gpio-active-high" },
246 		{ "fsl,imx8mq-pcie", "reset-gpio", "reset-gpio-active-high" },
247 		{ "fsl,imx8mm-pcie", "reset-gpio", "reset-gpio-active-high" },
248 		{ "fsl,imx8mp-pcie", "reset-gpio", "reset-gpio-active-high" },
249 #endif
250 
251 		/*
252 		 * The regulator GPIO handles are specified such that the
253 		 * presence or absence of "enable-active-high" solely controls
254 		 * the polarity of the GPIO line. Any phandle flags must
255 		 * be actively ignored.
256 		 */
257 #if IS_ENABLED(CONFIG_REGULATOR_FIXED_VOLTAGE)
258 		{ "regulator-fixed",   "gpios",        "enable-active-high" },
259 		{ "regulator-fixed",   "gpio",         "enable-active-high" },
260 		{ "reg-fixed-voltage", "gpios",        "enable-active-high" },
261 		{ "reg-fixed-voltage", "gpio",         "enable-active-high" },
262 #endif
263 #if IS_ENABLED(CONFIG_REGULATOR_GPIO)
264 		{ "regulator-gpio",    "enable-gpio",  "enable-active-high" },
265 		{ "regulator-gpio",    "enable-gpios", "enable-active-high" },
266 #endif
267 #if IS_ENABLED(CONFIG_MMC_ATMELMCI)
268 		{ "atmel,hsmci",       "cd-gpios",     "cd-inverted" },
269 #endif
270 	};
271 	unsigned int i;
272 	bool active_high;
273 
274 #if IS_ENABLED(CONFIG_MMC_ATMELMCI)
275 	/*
276 	 * The Atmel HSMCI has compatible property in the parent node and
277 	 * gpio property in a child node
278 	 */
279 	if (of_device_is_compatible(np->parent, "atmel,hsmci")) {
280 		np_compat = np->parent;
281 		np_propname = np;
282 	}
283 #endif
284 
285 	for (i = 0; i < ARRAY_SIZE(gpios); i++) {
286 		if (of_device_is_compatible(np_compat, gpios[i].compatible) &&
287 		    !strcmp(propname, gpios[i].gpio_propname)) {
288 			active_high = of_property_read_bool(np_propname,
289 						gpios[i].polarity_propname);
290 			of_gpio_quirk_polarity(np, active_high, flags);
291 			break;
292 		}
293 	}
294 }
295 
296 static void of_gpio_flags_quirks(const struct device_node *np,
297 				 const char *propname,
298 				 enum of_gpio_flags *flags,
299 				 int index)
300 {
301 	of_gpio_try_fixup_polarity(np, propname, flags);
302 	of_gpio_set_polarity_by_property(np, propname, flags);
303 
304 	/*
305 	 * Legacy open drain handling for fixed voltage regulators.
306 	 */
307 	if (IS_ENABLED(CONFIG_REGULATOR) &&
308 	    of_device_is_compatible(np, "reg-fixed-voltage") &&
309 	    of_property_read_bool(np, "gpio-open-drain")) {
310 		*flags |= (OF_GPIO_SINGLE_ENDED | OF_GPIO_OPEN_DRAIN);
311 		pr_info("%s uses legacy open drain flag - update the DTS if you can\n",
312 			of_node_full_name(np));
313 	}
314 
315 	/*
316 	 * Legacy handling of SPI active high chip select. If we have a
317 	 * property named "cs-gpios" we need to inspect the child node
318 	 * to determine if the flags should have inverted semantics.
319 	 */
320 	if (IS_ENABLED(CONFIG_SPI_MASTER) && !strcmp(propname, "cs-gpios") &&
321 	    of_property_read_bool(np, "cs-gpios")) {
322 		struct device_node *child;
323 		u32 cs;
324 		int ret;
325 
326 		for_each_child_of_node(np, child) {
327 			ret = of_property_read_u32(child, "reg", &cs);
328 			if (ret)
329 				continue;
330 			if (cs == index) {
331 				/*
332 				 * SPI children have active low chip selects
333 				 * by default. This can be specified negatively
334 				 * by just omitting "spi-cs-high" in the
335 				 * device node, or actively by tagging on
336 				 * GPIO_ACTIVE_LOW as flag in the device
337 				 * tree. If the line is simultaneously
338 				 * tagged as active low in the device tree
339 				 * and has the "spi-cs-high" set, we get a
340 				 * conflict and the "spi-cs-high" flag will
341 				 * take precedence.
342 				 */
343 				bool active_high = of_property_read_bool(child,
344 								"spi-cs-high");
345 				of_gpio_quirk_polarity(child, active_high,
346 						       flags);
347 				of_node_put(child);
348 				break;
349 			}
350 		}
351 	}
352 
353 	/* Legacy handling of stmmac's active-low PHY reset line */
354 	if (IS_ENABLED(CONFIG_STMMAC_ETH) &&
355 	    !strcmp(propname, "snps,reset-gpio") &&
356 	    of_property_read_bool(np, "snps,reset-active-low"))
357 		*flags |= OF_GPIO_ACTIVE_LOW;
358 }
359 
360 /**
361  * of_get_named_gpiod_flags() - Get a GPIO descriptor and flags for GPIO API
362  * @np:		device node to get GPIO from
363  * @propname:	property name containing gpio specifier(s)
364  * @index:	index of the GPIO
365  * @flags:	a flags pointer to fill in
366  *
367  * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno
368  * value on the error condition. If @flags is not NULL the function also fills
369  * in flags for the GPIO.
370  */
371 static struct gpio_desc *of_get_named_gpiod_flags(const struct device_node *np,
372 		     const char *propname, int index, enum of_gpio_flags *flags)
373 {
374 	struct of_phandle_args gpiospec;
375 	struct gpio_desc *desc;
376 	int ret;
377 
378 	ret = of_parse_phandle_with_args_map(np, propname, "gpio", index,
379 					     &gpiospec);
380 	if (ret) {
381 		pr_debug("%s: can't parse '%s' property of node '%pOF[%d]'\n",
382 			__func__, propname, np, index);
383 		return ERR_PTR(ret);
384 	}
385 
386 	struct gpio_device *gdev __free(gpio_device_put) =
387 				of_find_gpio_device_by_xlate(&gpiospec);
388 	if (!gdev) {
389 		desc = ERR_PTR(-EPROBE_DEFER);
390 		goto out;
391 	}
392 
393 	desc = of_xlate_and_get_gpiod_flags(gpio_device_get_chip(gdev),
394 					    &gpiospec, flags);
395 	if (IS_ERR(desc))
396 		goto out;
397 
398 	if (flags)
399 		of_gpio_flags_quirks(np, propname, flags, index);
400 
401 	pr_debug("%s: parsed '%s' property of node '%pOF[%d]' - status (%d)\n",
402 		 __func__, propname, np, index,
403 		 PTR_ERR_OR_ZERO(desc));
404 
405 out:
406 	of_node_put(gpiospec.np);
407 
408 	return desc;
409 }
410 
411 /**
412  * of_get_named_gpio() - Get a GPIO number to use with GPIO API
413  * @np:		device node to get GPIO from
414  * @propname:	Name of property containing gpio specifier(s)
415  * @index:	index of the GPIO
416  *
417  * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
418  * value on the error condition.
419  */
420 int of_get_named_gpio(const struct device_node *np, const char *propname,
421 		      int index)
422 {
423 	struct gpio_desc *desc;
424 
425 	desc = of_get_named_gpiod_flags(np, propname, index, NULL);
426 
427 	if (IS_ERR(desc))
428 		return PTR_ERR(desc);
429 	else
430 		return desc_to_gpio(desc);
431 }
432 EXPORT_SYMBOL_GPL(of_get_named_gpio);
433 
434 /* Converts gpio_lookup_flags into bitmask of GPIO_* values */
435 static unsigned long of_convert_gpio_flags(enum of_gpio_flags flags)
436 {
437 	unsigned long lflags = GPIO_LOOKUP_FLAGS_DEFAULT;
438 
439 	if (flags & OF_GPIO_ACTIVE_LOW)
440 		lflags |= GPIO_ACTIVE_LOW;
441 
442 	if (flags & OF_GPIO_SINGLE_ENDED) {
443 		if (flags & OF_GPIO_OPEN_DRAIN)
444 			lflags |= GPIO_OPEN_DRAIN;
445 		else
446 			lflags |= GPIO_OPEN_SOURCE;
447 	}
448 
449 	if (flags & OF_GPIO_TRANSITORY)
450 		lflags |= GPIO_TRANSITORY;
451 
452 	if (flags & OF_GPIO_PULL_UP)
453 		lflags |= GPIO_PULL_UP;
454 
455 	if (flags & OF_GPIO_PULL_DOWN)
456 		lflags |= GPIO_PULL_DOWN;
457 
458 	if (flags & OF_GPIO_PULL_DISABLE)
459 		lflags |= GPIO_PULL_DISABLE;
460 
461 	return lflags;
462 }
463 
464 static struct gpio_desc *of_find_gpio_rename(struct device_node *np,
465 					     const char *con_id,
466 					     unsigned int idx,
467 					     enum of_gpio_flags *of_flags)
468 {
469 	static const struct of_rename_gpio {
470 		const char *con_id;
471 		const char *legacy_id;	/* NULL - same as con_id */
472 		/*
473 		 * Compatible string can be set to NULL in case where
474 		 * matching to a particular compatible is not practical,
475 		 * but it should only be done for gpio names that have
476 		 * vendor prefix to reduce risk of false positives.
477 		 * Addition of such entries is strongly discouraged.
478 		 */
479 		const char *compatible;
480 	} gpios[] = {
481 #if !IS_ENABLED(CONFIG_LCD_HX8357)
482 		/* Himax LCD controllers used "gpios-reset" */
483 		{ "reset",	"gpios-reset",	"himax,hx8357" },
484 		{ "reset",	"gpios-reset",	"himax,hx8369" },
485 #endif
486 #if IS_ENABLED(CONFIG_MFD_ARIZONA)
487 		{ "wlf,reset",	NULL,		NULL },
488 #endif
489 #if IS_ENABLED(CONFIG_RTC_DRV_MOXART)
490 		{ "rtc-data",	"gpio-rtc-data",	"moxa,moxart-rtc" },
491 		{ "rtc-sclk",	"gpio-rtc-sclk",	"moxa,moxart-rtc" },
492 		{ "rtc-reset",	"gpio-rtc-reset",	"moxa,moxart-rtc" },
493 #endif
494 #if IS_ENABLED(CONFIG_NFC_MRVL_I2C)
495 		{ "reset",	"reset-n-io",	"marvell,nfc-i2c" },
496 #endif
497 #if IS_ENABLED(CONFIG_NFC_MRVL_SPI)
498 		{ "reset",	"reset-n-io",	"marvell,nfc-spi" },
499 #endif
500 #if IS_ENABLED(CONFIG_NFC_MRVL_UART)
501 		{ "reset",	"reset-n-io",	"marvell,nfc-uart" },
502 		{ "reset",	"reset-n-io",	"mrvl,nfc-uart" },
503 #endif
504 #if !IS_ENABLED(CONFIG_PCI_LANTIQ)
505 		/* MIPS Lantiq PCI */
506 		{ "reset",	"gpios-reset",	"lantiq,pci-xway" },
507 #endif
508 
509 		/*
510 		 * Some regulator bindings happened before we managed to
511 		 * establish that GPIO properties should be named
512 		 * "foo-gpios" so we have this special kludge for them.
513 		 */
514 #if IS_ENABLED(CONFIG_REGULATOR_ARIZONA_LDO1)
515 		{ "wlf,ldoena",  NULL,		NULL }, /* Arizona */
516 #endif
517 #if IS_ENABLED(CONFIG_REGULATOR_WM8994)
518 		{ "wlf,ldo1ena", NULL,		NULL }, /* WM8994 */
519 		{ "wlf,ldo2ena", NULL,		NULL }, /* WM8994 */
520 #endif
521 
522 #if IS_ENABLED(CONFIG_SND_SOC_CS42L56)
523 		{ "reset",	"cirrus,gpio-nreset",	"cirrus,cs42l56" },
524 #endif
525 #if IS_ENABLED(CONFIG_SND_SOC_TLV320AIC3X)
526 		{ "reset",	"gpio-reset",	"ti,tlv320aic3x" },
527 		{ "reset",	"gpio-reset",	"ti,tlv320aic33" },
528 		{ "reset",	"gpio-reset",	"ti,tlv320aic3007" },
529 		{ "reset",	"gpio-reset",	"ti,tlv320aic3104" },
530 		{ "reset",	"gpio-reset",	"ti,tlv320aic3106" },
531 #endif
532 #if IS_ENABLED(CONFIG_SPI_GPIO)
533 		/*
534 		 * The SPI GPIO bindings happened before we managed to
535 		 * establish that GPIO properties should be named
536 		 * "foo-gpios" so we have this special kludge for them.
537 		 */
538 		{ "miso",	"gpio-miso",	"spi-gpio" },
539 		{ "mosi",	"gpio-mosi",	"spi-gpio" },
540 		{ "sck",	"gpio-sck",	"spi-gpio" },
541 #endif
542 
543 		/*
544 		 * The old Freescale bindings use simply "gpios" as name
545 		 * for the chip select lines rather than "cs-gpios" like
546 		 * all other SPI hardware. Allow this specifically for
547 		 * Freescale and PPC devices.
548 		 */
549 #if IS_ENABLED(CONFIG_SPI_FSL_SPI)
550 		{ "cs",		"gpios",	"fsl,spi" },
551 		{ "cs",		"gpios",	"aeroflexgaisler,spictrl" },
552 #endif
553 #if IS_ENABLED(CONFIG_SPI_PPC4xx)
554 		{ "cs",		"gpios",	"ibm,ppc4xx-spi" },
555 #endif
556 
557 #if IS_ENABLED(CONFIG_TYPEC_FUSB302)
558 		/*
559 		 * Fairchild FUSB302 host is using undocumented "fcs,int_n"
560 		 * property without the compulsory "-gpios" suffix.
561 		 */
562 		{ "fcs,int_n",	NULL,		"fcs,fusb302" },
563 #endif
564 	};
565 	struct gpio_desc *desc;
566 	const char *legacy_id;
567 	unsigned int i;
568 
569 	if (!con_id)
570 		return ERR_PTR(-ENOENT);
571 
572 	for (i = 0; i < ARRAY_SIZE(gpios); i++) {
573 		if (strcmp(con_id, gpios[i].con_id))
574 			continue;
575 
576 		if (gpios[i].compatible &&
577 		    !of_device_is_compatible(np, gpios[i].compatible))
578 			continue;
579 
580 		legacy_id = gpios[i].legacy_id ?: gpios[i].con_id;
581 		desc = of_get_named_gpiod_flags(np, legacy_id, idx, of_flags);
582 		if (!gpiod_not_found(desc)) {
583 			pr_info("%s uses legacy gpio name '%s' instead of '%s-gpios'\n",
584 				of_node_full_name(np), legacy_id, con_id);
585 			return desc;
586 		}
587 	}
588 
589 	return ERR_PTR(-ENOENT);
590 }
591 
592 static struct gpio_desc *of_find_mt2701_gpio(struct device_node *np,
593 					     const char *con_id,
594 					     unsigned int idx,
595 					     enum of_gpio_flags *of_flags)
596 {
597 	struct gpio_desc *desc;
598 	const char *legacy_id;
599 
600 	if (!IS_ENABLED(CONFIG_SND_SOC_MT2701_CS42448))
601 		return ERR_PTR(-ENOENT);
602 
603 	if (!of_device_is_compatible(np, "mediatek,mt2701-cs42448-machine"))
604 		return ERR_PTR(-ENOENT);
605 
606 	if (!con_id || strcmp(con_id, "i2s1-in-sel"))
607 		return ERR_PTR(-ENOENT);
608 
609 	if (idx == 0)
610 		legacy_id = "i2s1-in-sel-gpio1";
611 	else if (idx == 1)
612 		legacy_id = "i2s1-in-sel-gpio2";
613 	else
614 		return ERR_PTR(-ENOENT);
615 
616 	desc = of_get_named_gpiod_flags(np, legacy_id, 0, of_flags);
617 	if (!gpiod_not_found(desc))
618 		pr_info("%s is using legacy gpio name '%s' instead of '%s-gpios'\n",
619 			of_node_full_name(np), legacy_id, con_id);
620 
621 	return desc;
622 }
623 
624 /*
625  * Trigger sources are special, they allow us to use any GPIO as a LED trigger
626  * and have the name "trigger-sources" no matter which kind of phandle it is
627  * pointing to, whether to a GPIO, a USB host, a network PHY etc. So in this case
628  * we allow looking something up that is not named "foo-gpios".
629  */
630 static struct gpio_desc *of_find_trigger_gpio(struct device_node *np,
631 					      const char *con_id,
632 					      unsigned int idx,
633 					      enum of_gpio_flags *of_flags)
634 {
635 	struct gpio_desc *desc;
636 
637 	if (!IS_ENABLED(CONFIG_LEDS_TRIGGER_GPIO))
638 		return ERR_PTR(-ENOENT);
639 
640 	if (!con_id || strcmp(con_id, "trigger-sources"))
641 		return ERR_PTR(-ENOENT);
642 
643 	desc = of_get_named_gpiod_flags(np, con_id, idx, of_flags);
644 	if (!gpiod_not_found(desc))
645 		pr_debug("%s is used as a trigger\n", of_node_full_name(np));
646 
647 	return desc;
648 }
649 
650 
651 typedef struct gpio_desc *(*of_find_gpio_quirk)(struct device_node *np,
652 						const char *con_id,
653 						unsigned int idx,
654 						enum of_gpio_flags *of_flags);
655 static const of_find_gpio_quirk of_find_gpio_quirks[] = {
656 	of_find_gpio_rename,
657 	of_find_mt2701_gpio,
658 	of_find_trigger_gpio,
659 	NULL
660 };
661 
662 struct gpio_desc *of_find_gpio(struct device_node *np, const char *con_id,
663 			       unsigned int idx, unsigned long *flags)
664 {
665 	char prop_name[32]; /* 32 is max size of property name */
666 	enum of_gpio_flags of_flags;
667 	const of_find_gpio_quirk *q;
668 	struct gpio_desc *desc;
669 	unsigned int i;
670 
671 	/* Try GPIO property "foo-gpios" and "foo-gpio" */
672 	for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
673 		if (con_id)
674 			snprintf(prop_name, sizeof(prop_name), "%s-%s", con_id,
675 				 gpio_suffixes[i]);
676 		else
677 			snprintf(prop_name, sizeof(prop_name), "%s",
678 				 gpio_suffixes[i]);
679 
680 		desc = of_get_named_gpiod_flags(np, prop_name, idx, &of_flags);
681 
682 		if (!gpiod_not_found(desc))
683 			break;
684 	}
685 
686 	/* Properly named GPIO was not found, try workarounds */
687 	for (q = of_find_gpio_quirks; gpiod_not_found(desc) && *q; q++)
688 		desc = (*q)(np, con_id, idx, &of_flags);
689 
690 	if (IS_ERR(desc))
691 		return desc;
692 
693 	*flags = of_convert_gpio_flags(of_flags);
694 
695 	return desc;
696 }
697 
698 /**
699  * of_parse_own_gpio() - Get a GPIO hog descriptor, names and flags for GPIO API
700  * @np:		device node to get GPIO from
701  * @chip:	GPIO chip whose hog is parsed
702  * @idx:	Index of the GPIO to parse
703  * @name:	GPIO line name
704  * @lflags:	bitmask of gpio_lookup_flags GPIO_* values - returned from
705  *		of_find_gpio() or of_parse_own_gpio()
706  * @dflags:	gpiod_flags - optional GPIO initialization flags
707  *
708  * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno
709  * value on the error condition.
710  */
711 static struct gpio_desc *of_parse_own_gpio(struct device_node *np,
712 					   struct gpio_chip *chip,
713 					   unsigned int idx, const char **name,
714 					   unsigned long *lflags,
715 					   enum gpiod_flags *dflags)
716 {
717 	struct device_node *chip_np;
718 	enum of_gpio_flags xlate_flags;
719 	struct of_phandle_args gpiospec;
720 	struct gpio_desc *desc;
721 	unsigned int i;
722 	u32 tmp;
723 	int ret;
724 
725 	chip_np = dev_of_node(&chip->gpiodev->dev);
726 	if (!chip_np)
727 		return ERR_PTR(-EINVAL);
728 
729 	xlate_flags = 0;
730 	*lflags = GPIO_LOOKUP_FLAGS_DEFAULT;
731 	*dflags = GPIOD_ASIS;
732 
733 	ret = of_property_read_u32(chip_np, "#gpio-cells", &tmp);
734 	if (ret)
735 		return ERR_PTR(ret);
736 
737 	gpiospec.np = chip_np;
738 	gpiospec.args_count = tmp;
739 
740 	for (i = 0; i < tmp; i++) {
741 		ret = of_property_read_u32_index(np, "gpios", idx * tmp + i,
742 						 &gpiospec.args[i]);
743 		if (ret)
744 			return ERR_PTR(ret);
745 	}
746 
747 	desc = of_xlate_and_get_gpiod_flags(chip, &gpiospec, &xlate_flags);
748 	if (IS_ERR(desc))
749 		return desc;
750 
751 	*lflags = of_convert_gpio_flags(xlate_flags);
752 
753 	if (of_property_read_bool(np, "input"))
754 		*dflags |= GPIOD_IN;
755 	else if (of_property_read_bool(np, "output-low"))
756 		*dflags |= GPIOD_OUT_LOW;
757 	else if (of_property_read_bool(np, "output-high"))
758 		*dflags |= GPIOD_OUT_HIGH;
759 	else {
760 		pr_warn("GPIO line %d (%pOFn): no hogging state specified, bailing out\n",
761 			desc_to_gpio(desc), np);
762 		return ERR_PTR(-EINVAL);
763 	}
764 
765 	if (name && of_property_read_string(np, "line-name", name))
766 		*name = np->name;
767 
768 	return desc;
769 }
770 
771 /**
772  * of_gpiochip_add_hog - Add all hogs in a hog device node
773  * @chip:	gpio chip to act on
774  * @hog:	device node describing the hogs
775  *
776  * Returns error if it fails otherwise 0 on success.
777  */
778 static int of_gpiochip_add_hog(struct gpio_chip *chip, struct device_node *hog)
779 {
780 	enum gpiod_flags dflags;
781 	struct gpio_desc *desc;
782 	unsigned long lflags;
783 	const char *name;
784 	unsigned int i;
785 	int ret;
786 
787 	for (i = 0;; i++) {
788 		desc = of_parse_own_gpio(hog, chip, i, &name, &lflags, &dflags);
789 		if (IS_ERR(desc))
790 			break;
791 
792 		ret = gpiod_hog(desc, name, lflags, dflags);
793 		if (ret < 0)
794 			return ret;
795 
796 #ifdef CONFIG_OF_DYNAMIC
797 		desc->hog = hog;
798 #endif
799 	}
800 
801 	return 0;
802 }
803 
804 /**
805  * of_gpiochip_scan_gpios - Scan gpio-controller for gpio definitions
806  * @chip:	gpio chip to act on
807  *
808  * This is only used by of_gpiochip_add to request/set GPIO initial
809  * configuration.
810  * It returns error if it fails otherwise 0 on success.
811  */
812 static int of_gpiochip_scan_gpios(struct gpio_chip *chip)
813 {
814 	struct device_node *np;
815 	int ret;
816 
817 	for_each_available_child_of_node(dev_of_node(&chip->gpiodev->dev), np) {
818 		if (!of_property_read_bool(np, "gpio-hog"))
819 			continue;
820 
821 		ret = of_gpiochip_add_hog(chip, np);
822 		if (ret < 0) {
823 			of_node_put(np);
824 			return ret;
825 		}
826 
827 		of_node_set_flag(np, OF_POPULATED);
828 	}
829 
830 	return 0;
831 }
832 
833 #ifdef CONFIG_OF_DYNAMIC
834 /**
835  * of_gpiochip_remove_hog - Remove all hogs in a hog device node
836  * @chip:	gpio chip to act on
837  * @hog:	device node describing the hogs
838  */
839 static void of_gpiochip_remove_hog(struct gpio_chip *chip,
840 				   struct device_node *hog)
841 {
842 	struct gpio_desc *desc;
843 
844 	for_each_gpio_desc_with_flag(chip, desc, FLAG_IS_HOGGED)
845 		if (desc->hog == hog)
846 			gpiochip_free_own_desc(desc);
847 }
848 
849 static int of_gpiochip_match_node(struct gpio_chip *chip, void *data)
850 {
851 	return device_match_of_node(&chip->gpiodev->dev, data);
852 }
853 
854 static struct gpio_device *of_find_gpio_device_by_node(struct device_node *np)
855 {
856 	return gpio_device_find(np, of_gpiochip_match_node);
857 }
858 
859 static int of_gpio_notify(struct notifier_block *nb, unsigned long action,
860 			  void *arg)
861 {
862 	struct gpio_device *gdev __free(gpio_device_put) = NULL;
863 	struct of_reconfig_data *rd = arg;
864 	int ret;
865 
866 	/*
867 	 * This only supports adding and removing complete gpio-hog nodes.
868 	 * Modifying an existing gpio-hog node is not supported (except for
869 	 * changing its "status" property, which is treated the same as
870 	 * addition/removal).
871 	 */
872 	switch (of_reconfig_get_state_change(action, arg)) {
873 	case OF_RECONFIG_CHANGE_ADD:
874 		if (!of_property_read_bool(rd->dn, "gpio-hog"))
875 			return NOTIFY_DONE;	/* not for us */
876 
877 		if (of_node_test_and_set_flag(rd->dn, OF_POPULATED))
878 			return NOTIFY_DONE;
879 
880 		gdev = of_find_gpio_device_by_node(rd->dn->parent);
881 		if (!gdev)
882 			return NOTIFY_DONE;	/* not for us */
883 
884 		ret = of_gpiochip_add_hog(gpio_device_get_chip(gdev), rd->dn);
885 		if (ret < 0) {
886 			pr_err("%s: failed to add hogs for %pOF\n", __func__,
887 			       rd->dn);
888 			of_node_clear_flag(rd->dn, OF_POPULATED);
889 			return notifier_from_errno(ret);
890 		}
891 		return NOTIFY_OK;
892 
893 	case OF_RECONFIG_CHANGE_REMOVE:
894 		if (!of_node_check_flag(rd->dn, OF_POPULATED))
895 			return NOTIFY_DONE;	/* already depopulated */
896 
897 		gdev = of_find_gpio_device_by_node(rd->dn->parent);
898 		if (!gdev)
899 			return NOTIFY_DONE;	/* not for us */
900 
901 		of_gpiochip_remove_hog(gpio_device_get_chip(gdev), rd->dn);
902 		of_node_clear_flag(rd->dn, OF_POPULATED);
903 		return NOTIFY_OK;
904 	}
905 
906 	return NOTIFY_DONE;
907 }
908 
909 struct notifier_block gpio_of_notifier = {
910 	.notifier_call = of_gpio_notify,
911 };
912 #endif /* CONFIG_OF_DYNAMIC */
913 
914 /**
915  * of_gpio_simple_xlate - translate gpiospec to the GPIO number and flags
916  * @gc:		pointer to the gpio_chip structure
917  * @gpiospec:	GPIO specifier as found in the device tree
918  * @flags:	a flags pointer to fill in
919  *
920  * This is simple translation function, suitable for the most 1:1 mapped
921  * GPIO chips. This function performs only one sanity check: whether GPIO
922  * is less than ngpios (that is specified in the gpio_chip).
923  */
924 static int of_gpio_simple_xlate(struct gpio_chip *gc,
925 				const struct of_phandle_args *gpiospec,
926 				u32 *flags)
927 {
928 	/*
929 	 * We're discouraging gpio_cells < 2, since that way you'll have to
930 	 * write your own xlate function (that will have to retrieve the GPIO
931 	 * number and the flags from a single gpio cell -- this is possible,
932 	 * but not recommended).
933 	 */
934 	if (gc->of_gpio_n_cells < 2) {
935 		WARN_ON(1);
936 		return -EINVAL;
937 	}
938 
939 	if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells))
940 		return -EINVAL;
941 
942 	if (gpiospec->args[0] >= gc->ngpio)
943 		return -EINVAL;
944 
945 	if (flags)
946 		*flags = gpiospec->args[1];
947 
948 	return gpiospec->args[0];
949 }
950 
951 #if IS_ENABLED(CONFIG_OF_GPIO_MM_GPIOCHIP)
952 #include <linux/gpio/legacy-of-mm-gpiochip.h>
953 /**
954  * of_mm_gpiochip_add_data - Add memory mapped GPIO chip (bank)
955  * @np:		device node of the GPIO chip
956  * @mm_gc:	pointer to the of_mm_gpio_chip allocated structure
957  * @data:	driver data to store in the struct gpio_chip
958  *
959  * To use this function you should allocate and fill mm_gc with:
960  *
961  * 1) In the gpio_chip structure:
962  *    - all the callbacks
963  *    - of_gpio_n_cells
964  *    - of_xlate callback (optional)
965  *
966  * 3) In the of_mm_gpio_chip structure:
967  *    - save_regs callback (optional)
968  *
969  * If succeeded, this function will map bank's memory and will
970  * do all necessary work for you. Then you'll able to use .regs
971  * to manage GPIOs from the callbacks.
972  */
973 int of_mm_gpiochip_add_data(struct device_node *np,
974 			    struct of_mm_gpio_chip *mm_gc,
975 			    void *data)
976 {
977 	int ret = -ENOMEM;
978 	struct gpio_chip *gc = &mm_gc->gc;
979 
980 	gc->label = kasprintf(GFP_KERNEL, "%pOF", np);
981 	if (!gc->label)
982 		goto err0;
983 
984 	mm_gc->regs = of_iomap(np, 0);
985 	if (!mm_gc->regs)
986 		goto err1;
987 
988 	gc->base = -1;
989 
990 	if (mm_gc->save_regs)
991 		mm_gc->save_regs(mm_gc);
992 
993 	fwnode_handle_put(mm_gc->gc.fwnode);
994 	mm_gc->gc.fwnode = fwnode_handle_get(of_fwnode_handle(np));
995 
996 	ret = gpiochip_add_data(gc, data);
997 	if (ret)
998 		goto err2;
999 
1000 	return 0;
1001 err2:
1002 	of_node_put(np);
1003 	iounmap(mm_gc->regs);
1004 err1:
1005 	kfree(gc->label);
1006 err0:
1007 	pr_err("%pOF: GPIO chip registration failed with status %d\n", np, ret);
1008 	return ret;
1009 }
1010 EXPORT_SYMBOL_GPL(of_mm_gpiochip_add_data);
1011 
1012 /**
1013  * of_mm_gpiochip_remove - Remove memory mapped GPIO chip (bank)
1014  * @mm_gc:	pointer to the of_mm_gpio_chip allocated structure
1015  */
1016 void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc)
1017 {
1018 	struct gpio_chip *gc = &mm_gc->gc;
1019 
1020 	gpiochip_remove(gc);
1021 	iounmap(mm_gc->regs);
1022 	kfree(gc->label);
1023 }
1024 EXPORT_SYMBOL_GPL(of_mm_gpiochip_remove);
1025 #endif
1026 
1027 #ifdef CONFIG_PINCTRL
1028 static int of_gpiochip_add_pin_range(struct gpio_chip *chip)
1029 {
1030 	struct of_phandle_args pinspec;
1031 	struct pinctrl_dev *pctldev;
1032 	struct device_node *np;
1033 	int index = 0, ret;
1034 	const char *name;
1035 	static const char group_names_propname[] = "gpio-ranges-group-names";
1036 	struct property *group_names;
1037 
1038 	np = dev_of_node(&chip->gpiodev->dev);
1039 	if (!np)
1040 		return 0;
1041 
1042 	group_names = of_find_property(np, group_names_propname, NULL);
1043 
1044 	for (;; index++) {
1045 		ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3,
1046 				index, &pinspec);
1047 		if (ret)
1048 			break;
1049 
1050 		pctldev = of_pinctrl_get(pinspec.np);
1051 		of_node_put(pinspec.np);
1052 		if (!pctldev)
1053 			return -EPROBE_DEFER;
1054 
1055 		if (pinspec.args[2]) {
1056 			if (group_names) {
1057 				of_property_read_string_index(np,
1058 						group_names_propname,
1059 						index, &name);
1060 				if (strlen(name)) {
1061 					pr_err("%pOF: Group name of numeric GPIO ranges must be the empty string.\n",
1062 						np);
1063 					break;
1064 				}
1065 			}
1066 			/* npins != 0: linear range */
1067 			ret = gpiochip_add_pin_range(chip,
1068 					pinctrl_dev_get_devname(pctldev),
1069 					pinspec.args[0],
1070 					pinspec.args[1],
1071 					pinspec.args[2]);
1072 			if (ret)
1073 				return ret;
1074 		} else {
1075 			/* npins == 0: special range */
1076 			if (pinspec.args[1]) {
1077 				pr_err("%pOF: Illegal gpio-range format.\n",
1078 					np);
1079 				break;
1080 			}
1081 
1082 			if (!group_names) {
1083 				pr_err("%pOF: GPIO group range requested but no %s property.\n",
1084 					np, group_names_propname);
1085 				break;
1086 			}
1087 
1088 			ret = of_property_read_string_index(np,
1089 						group_names_propname,
1090 						index, &name);
1091 			if (ret)
1092 				break;
1093 
1094 			if (!strlen(name)) {
1095 				pr_err("%pOF: Group name of GPIO group range cannot be the empty string.\n",
1096 				np);
1097 				break;
1098 			}
1099 
1100 			ret = gpiochip_add_pingroup_range(chip, pctldev,
1101 						pinspec.args[0], name);
1102 			if (ret)
1103 				return ret;
1104 		}
1105 	}
1106 
1107 	return 0;
1108 }
1109 
1110 #else
1111 static int of_gpiochip_add_pin_range(struct gpio_chip *chip) { return 0; }
1112 #endif
1113 
1114 int of_gpiochip_add(struct gpio_chip *chip)
1115 {
1116 	struct device_node *np;
1117 	int ret;
1118 
1119 	np = dev_of_node(&chip->gpiodev->dev);
1120 	if (!np)
1121 		return 0;
1122 
1123 	if (!chip->of_xlate) {
1124 		chip->of_gpio_n_cells = 2;
1125 		chip->of_xlate = of_gpio_simple_xlate;
1126 	}
1127 
1128 	if (chip->of_gpio_n_cells > MAX_PHANDLE_ARGS)
1129 		return -EINVAL;
1130 
1131 	ret = of_gpiochip_add_pin_range(chip);
1132 	if (ret)
1133 		return ret;
1134 
1135 	of_node_get(np);
1136 
1137 	ret = of_gpiochip_scan_gpios(chip);
1138 	if (ret)
1139 		of_node_put(np);
1140 
1141 	return ret;
1142 }
1143 
1144 void of_gpiochip_remove(struct gpio_chip *chip)
1145 {
1146 	of_node_put(dev_of_node(&chip->gpiodev->dev));
1147 }
1148