gpiolib-of.c 15.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
/*
 * OF helpers for the GPIO API
 *
 * Copyright (c) 2007-2008  MontaVista Software, Inc.
 *
 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

G
Grant Likely 已提交
14
#include <linux/device.h>
15
#include <linux/err.h>
16
#include <linux/errno.h>
G
Grant Likely 已提交
17
#include <linux/module.h>
18
#include <linux/io.h>
19
#include <linux/gpio/consumer.h>
20
#include <linux/of.h>
G
Grant Likely 已提交
21
#include <linux/of_address.h>
22
#include <linux/of_gpio.h>
23
#include <linux/pinctrl/pinctrl.h>
G
Grant Likely 已提交
24
#include <linux/slab.h>
B
Benoit Parrot 已提交
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 32 33 34
	struct of_phandle_args *gpiospec = data;

	return chip->gpiodev->dev.of_node == gpiospec->np &&
				chip->of_xlate(chip, gpiospec, NULL) >= 0;
35
}
36

37 38
static struct gpio_chip *of_find_gpiochip_by_xlate(
					struct of_phandle_args *gpiospec)
39
{
40
	return gpiochip_find(gpiospec, of_gpiochip_match_node_and_xlate);
41 42
}

43 44 45
static struct gpio_desc *of_xlate_and_get_gpiod_flags(struct gpio_chip *chip,
					struct of_phandle_args *gpiospec,
					enum of_gpio_flags *flags)
46 47 48
{
	int ret;

49 50 51 52 53 54 55 56
	if (chip->of_gpio_n_cells != gpiospec->args_count)
		return ERR_PTR(-EINVAL);

	ret = chip->of_xlate(chip, gpiospec, flags);
	if (ret < 0)
		return ERR_PTR(ret);

	return gpiochip_get_desc(chip, ret);
57 58
}

59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
static void of_gpio_flags_quirks(struct device_node *np,
				 enum of_gpio_flags *flags)
{
	/*
	 * Some GPIO fixed regulator quirks.
	 * Note that active low is the default.
	 */
	if (IS_ENABLED(CONFIG_REGULATOR) &&
	    (of_device_is_compatible(np, "reg-fixed-voltage") ||
	     of_device_is_compatible(np, "regulator-gpio"))) {
		/*
		 * The regulator GPIO handles are specified such that the
		 * presence or absence of "enable-active-high" solely controls
		 * the polarity of the GPIO line. Any phandle flags must
		 * be actively ignored.
		 */
		if (*flags & OF_GPIO_ACTIVE_LOW) {
			pr_warn("%s GPIO handle specifies active low - ignored\n",
				of_node_full_name(np));
			*flags &= ~OF_GPIO_ACTIVE_LOW;
		}
		if (!of_property_read_bool(np, "enable-active-high"))
			*flags |= OF_GPIO_ACTIVE_LOW;
	}
	/*
	 * Legacy open drain handling for fixed voltage regulators.
	 */
	if (IS_ENABLED(CONFIG_REGULATOR) &&
	    of_device_is_compatible(np, "reg-fixed-voltage") &&
	    of_property_read_bool(np, "gpio-open-drain")) {
		*flags |= (OF_GPIO_SINGLE_ENDED | OF_GPIO_OPEN_DRAIN);
		pr_info("%s uses legacy open drain flag - update the DTS if you can\n",
			of_node_full_name(np));
	}
}

95
/**
96
 * of_get_named_gpiod_flags() - Get a GPIO descriptor and flags for GPIO API
97
 * @np:		device node to get GPIO from
98
 * @propname:	property name containing gpio specifier(s)
99
 * @index:	index of the GPIO
100
 * @flags:	a flags pointer to fill in
101
 *
102
 * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno
103 104
 * value on the error condition. If @flags is not NULL the function also fills
 * in flags for the GPIO.
105
 */
106 107
struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np,
		     const char *propname, int index, enum of_gpio_flags *flags)
108
{
109 110 111
	struct of_phandle_args gpiospec;
	struct gpio_chip *chip;
	struct gpio_desc *desc;
112
	int ret;
113

114
	ret = of_parse_phandle_with_args(np, propname, "#gpio-cells", index,
115
					 &gpiospec);
116
	if (ret) {
117 118
		pr_debug("%s: can't parse '%s' property of node '%pOF[%d]'\n",
			__func__, propname, np, index);
119
		return ERR_PTR(ret);
120 121
	}

122
	chip = of_find_gpiochip_by_xlate(&gpiospec);
123 124 125 126 127
	if (!chip) {
		desc = ERR_PTR(-EPROBE_DEFER);
		goto out;
	}

128
	desc = of_xlate_and_get_gpiod_flags(chip, &gpiospec, flags);
129 130
	if (IS_ERR(desc))
		goto out;
131

132 133
	of_gpio_flags_quirks(np, flags);

134 135
	pr_debug("%s: parsed '%s' property of node '%pOF[%d]' - status (%d)\n",
		 __func__, propname, np, index,
136 137 138 139 140 141
		 PTR_ERR_OR_ZERO(desc));

out:
	of_node_put(gpiospec.np);

	return desc;
142 143
}

144 145 146 147 148 149 150 151 152 153 154 155 156 157
int of_get_named_gpio_flags(struct device_node *np, const char *list_name,
			    int index, enum of_gpio_flags *flags)
{
	struct gpio_desc *desc;

	desc = of_get_named_gpiod_flags(np, list_name, index, flags);

	if (IS_ERR(desc))
		return PTR_ERR(desc);
	else
		return desc_to_gpio(desc);
}
EXPORT_SYMBOL(of_get_named_gpio_flags);

158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
/*
 * The SPI GPIO bindings happened before we managed to establish that GPIO
 * properties should be named "foo-gpios" so we have this special kludge for
 * them.
 */
static struct gpio_desc *of_find_spi_gpio(struct device *dev, const char *con_id,
					  enum of_gpio_flags *of_flags)
{
	char prop_name[32]; /* 32 is max size of property name */
	struct device_node *np = dev->of_node;
	struct gpio_desc *desc;

	/*
	 * Hopefully the compiler stubs the rest of the function if this
	 * is false.
	 */
	if (!IS_ENABLED(CONFIG_SPI_MASTER))
		return ERR_PTR(-ENOENT);

	/* Allow this specifically for "spi-gpio" devices */
	if (!of_device_is_compatible(np, "spi-gpio") || !con_id)
		return ERR_PTR(-ENOENT);

	/* Will be "gpio-sck", "gpio-mosi" or "gpio-miso" */
	snprintf(prop_name, sizeof(prop_name), "%s-%s", "gpio", con_id);

	desc = of_get_named_gpiod_flags(np, prop_name, 0, of_flags);
	return desc;
}

188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
/*
 * Some regulator bindings happened before we managed to establish that GPIO
 * properties should be named "foo-gpios" so we have this special kludge for
 * them.
 */
static struct gpio_desc *of_find_regulator_gpio(struct device *dev, const char *con_id,
						enum of_gpio_flags *of_flags)
{
	/* These are the connection IDs we accept as legacy GPIO phandles */
	const char *whitelist[] = {
		"wlf,ldoena", /* Arizona */
		"wlf,ldo1ena", /* WM8994 */
		"wlf,ldo2ena", /* WM8994 */
	};
	struct device_node *np = dev->of_node;
	struct gpio_desc *desc;
	int i;

	if (!IS_ENABLED(CONFIG_REGULATOR))
		return ERR_PTR(-ENOENT);

	if (!con_id)
		return ERR_PTR(-ENOENT);

	for (i = 0; i < ARRAY_SIZE(whitelist); i++)
		if (!strcmp(con_id, whitelist[i]))
			break;

	if (i == ARRAY_SIZE(whitelist))
		return ERR_PTR(-ENOENT);

	desc = of_get_named_gpiod_flags(np, con_id, 0, of_flags);
	return desc;
}

L
Linus Walleij 已提交
223 224 225 226 227 228 229 230 231
struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id,
			       unsigned int idx,
			       enum gpio_lookup_flags *flags)
{
	char prop_name[32]; /* 32 is max size of property name */
	enum of_gpio_flags of_flags;
	struct gpio_desc *desc;
	unsigned int i;

232
	/* Try GPIO property "foo-gpios" and "foo-gpio" */
L
Linus Walleij 已提交
233 234 235 236 237 238 239 240 241 242 243 244 245 246
	for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
		if (con_id)
			snprintf(prop_name, sizeof(prop_name), "%s-%s", con_id,
				 gpio_suffixes[i]);
		else
			snprintf(prop_name, sizeof(prop_name), "%s",
				 gpio_suffixes[i]);

		desc = of_get_named_gpiod_flags(dev->of_node, prop_name, idx,
						&of_flags);
		if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT))
			break;
	}

247 248 249 250
	/* Special handling for SPI GPIOs if used */
	if (IS_ERR(desc))
		desc = of_find_spi_gpio(dev, con_id, &of_flags);

251 252 253 254
	/* Special handling for regulator GPIOs if used */
	if (IS_ERR(desc))
		desc = of_find_regulator_gpio(dev, con_id, &of_flags);

L
Linus Walleij 已提交
255 256 257 258 259 260 261
	if (IS_ERR(desc))
		return desc;

	if (of_flags & OF_GPIO_ACTIVE_LOW)
		*flags |= GPIO_ACTIVE_LOW;

	if (of_flags & OF_GPIO_SINGLE_ENDED) {
262
		if (of_flags & OF_GPIO_OPEN_DRAIN)
L
Linus Walleij 已提交
263 264 265 266 267
			*flags |= GPIO_OPEN_DRAIN;
		else
			*flags |= GPIO_OPEN_SOURCE;
	}

268 269
	if (of_flags & OF_GPIO_TRANSITORY)
		*flags |= GPIO_TRANSITORY;
270

L
Linus Walleij 已提交
271 272 273
	return desc;
}

B
Benoit Parrot 已提交
274
/**
275
 * of_parse_own_gpio() - Get a GPIO hog descriptor, names and flags for GPIO API
B
Benoit Parrot 已提交
276
 * @np:		device node to get GPIO from
277
 * @chip:	GPIO chip whose hog is parsed
278
 * @idx:	Index of the GPIO to parse
B
Benoit Parrot 已提交
279 280
 * @name:	GPIO line name
 * @lflags:	gpio_lookup_flags - returned from of_find_gpio() or
281
 *		of_parse_own_gpio()
B
Benoit Parrot 已提交
282 283 284 285 286
 * @dflags:	gpiod_flags - optional GPIO initialization flags
 *
 * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno
 * value on the error condition.
 */
287
static struct gpio_desc *of_parse_own_gpio(struct device_node *np,
288
					   struct gpio_chip *chip,
289
					   unsigned int idx, const char **name,
290 291
					   enum gpio_lookup_flags *lflags,
					   enum gpiod_flags *dflags)
B
Benoit Parrot 已提交
292 293 294
{
	struct device_node *chip_np;
	enum of_gpio_flags xlate_flags;
295 296
	struct of_phandle_args gpiospec;
	struct gpio_desc *desc;
297
	unsigned int i;
B
Benoit Parrot 已提交
298
	u32 tmp;
299
	int ret;
B
Benoit Parrot 已提交
300

301
	chip_np = chip->of_node;
B
Benoit Parrot 已提交
302 303 304 305 306 307 308 309 310 311 312
	if (!chip_np)
		return ERR_PTR(-EINVAL);

	xlate_flags = 0;
	*lflags = 0;
	*dflags = 0;

	ret = of_property_read_u32(chip_np, "#gpio-cells", &tmp);
	if (ret)
		return ERR_PTR(ret);

313 314
	gpiospec.np = chip_np;
	gpiospec.args_count = tmp;
B
Benoit Parrot 已提交
315

316 317 318 319 320 321
	for (i = 0; i < tmp; i++) {
		ret = of_property_read_u32_index(np, "gpios", idx * tmp + i,
						 &gpiospec.args[i]);
		if (ret)
			return ERR_PTR(ret);
	}
B
Benoit Parrot 已提交
322

323
	desc = of_xlate_and_get_gpiod_flags(chip, &gpiospec, &xlate_flags);
324 325
	if (IS_ERR(desc))
		return desc;
B
Benoit Parrot 已提交
326 327 328

	if (xlate_flags & OF_GPIO_ACTIVE_LOW)
		*lflags |= GPIO_ACTIVE_LOW;
329 330
	if (xlate_flags & OF_GPIO_TRANSITORY)
		*lflags |= GPIO_TRANSITORY;
B
Benoit Parrot 已提交
331 332 333 334 335 336 337 338 339

	if (of_property_read_bool(np, "input"))
		*dflags |= GPIOD_IN;
	else if (of_property_read_bool(np, "output-low"))
		*dflags |= GPIOD_OUT_LOW;
	else if (of_property_read_bool(np, "output-high"))
		*dflags |= GPIOD_OUT_HIGH;
	else {
		pr_warn("GPIO line %d (%s): no hogging state specified, bailing out\n",
340
			desc_to_gpio(desc), np->name);
B
Benoit Parrot 已提交
341 342 343 344 345 346
		return ERR_PTR(-EINVAL);
	}

	if (name && of_property_read_string(np, "line-name", name))
		*name = np->name;

347
	return desc;
B
Benoit Parrot 已提交
348 349 350
}

/**
351
 * of_gpiochip_scan_gpios - Scan gpio-controller for gpio definitions
B
Benoit Parrot 已提交
352 353 354 355
 * @chip:	gpio chip to act on
 *
 * This is only used by of_gpiochip_add to request/set GPIO initial
 * configuration.
356
 * It returns error if it fails otherwise 0 on success.
B
Benoit Parrot 已提交
357
 */
358
static int of_gpiochip_scan_gpios(struct gpio_chip *chip)
B
Benoit Parrot 已提交
359 360 361 362 363 364
{
	struct gpio_desc *desc = NULL;
	struct device_node *np;
	const char *name;
	enum gpio_lookup_flags lflags;
	enum gpiod_flags dflags;
365
	unsigned int i;
366
	int ret;
B
Benoit Parrot 已提交
367

368
	for_each_available_child_of_node(chip->of_node, np) {
B
Benoit Parrot 已提交
369 370 371
		if (!of_property_read_bool(np, "gpio-hog"))
			continue;

372 373 374 375 376 377 378 379 380 381 382
		for (i = 0;; i++) {
			desc = of_parse_own_gpio(np, chip, i, &name, &lflags,
						 &dflags);
			if (IS_ERR(desc))
				break;

			ret = gpiod_hog(desc, name, lflags, dflags);
			if (ret < 0) {
				of_node_put(np);
				return ret;
			}
383
		}
B
Benoit Parrot 已提交
384
	}
385 386

	return 0;
B
Benoit Parrot 已提交
387 388
}

389
/**
T
Thierry Reding 已提交
390
 * of_gpio_simple_xlate - translate gpiospec to the GPIO number and flags
391
 * @gc:		pointer to the gpio_chip structure
T
Thierry Reding 已提交
392
 * @gpiospec:	GPIO specifier as found in the device tree
393
 * @flags:	a flags pointer to fill in
394 395
 *
 * This is simple translation function, suitable for the most 1:1 mapped
T
Thierry Reding 已提交
396
 * GPIO chips. This function performs only one sanity check: whether GPIO
397 398
 * is less than ngpios (that is specified in the gpio_chip).
 */
399 400
int of_gpio_simple_xlate(struct gpio_chip *gc,
			 const struct of_phandle_args *gpiospec, u32 *flags)
401
{
402 403
	/*
	 * We're discouraging gpio_cells < 2, since that way you'll have to
404
	 * write your own xlate function (that will have to retrieve the GPIO
405 406 407
	 * number and the flags from a single gpio cell -- this is possible,
	 * but not recommended).
	 */
408
	if (gc->of_gpio_n_cells < 2) {
409 410 411 412
		WARN_ON(1);
		return -EINVAL;
	}

413 414 415
	if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells))
		return -EINVAL;

416
	if (gpiospec->args[0] >= gc->ngpio)
417 418
		return -EINVAL;

419
	if (flags)
420
		*flags = gpiospec->args[1];
421

422
	return gpiospec->args[0];
423
}
424
EXPORT_SYMBOL(of_gpio_simple_xlate);
425 426

/**
427
 * of_mm_gpiochip_add_data - Add memory mapped GPIO chip (bank)
428 429
 * @np:		device node of the GPIO chip
 * @mm_gc:	pointer to the of_mm_gpio_chip allocated structure
430
 * @data:	driver data to store in the struct gpio_chip
431 432 433 434 435
 *
 * To use this function you should allocate and fill mm_gc with:
 *
 * 1) In the gpio_chip structure:
 *    - all the callbacks
436 437
 *    - of_gpio_n_cells
 *    - of_xlate callback (optional)
438 439 440 441 442 443 444 445
 *
 * 3) In the of_mm_gpio_chip structure:
 *    - save_regs callback (optional)
 *
 * If succeeded, this function will map bank's memory and will
 * do all necessary work for you. Then you'll able to use .regs
 * to manage GPIOs from the callbacks.
 */
446 447 448
int of_mm_gpiochip_add_data(struct device_node *np,
			    struct of_mm_gpio_chip *mm_gc,
			    void *data)
449 450
{
	int ret = -ENOMEM;
451
	struct gpio_chip *gc = &mm_gc->gc;
452

453
	gc->label = kasprintf(GFP_KERNEL, "%pOF", np);
454 455 456 457 458 459 460
	if (!gc->label)
		goto err0;

	mm_gc->regs = of_iomap(np, 0);
	if (!mm_gc->regs)
		goto err1;

461
	gc->base = -1;
462 463 464 465

	if (mm_gc->save_regs)
		mm_gc->save_regs(mm_gc);

466
	mm_gc->gc.of_node = np;
467

468
	ret = gpiochip_add_data(gc, data);
469 470 471 472 473 474 475 476 477
	if (ret)
		goto err2;

	return 0;
err2:
	iounmap(mm_gc->regs);
err1:
	kfree(gc->label);
err0:
478
	pr_err("%pOF: GPIO chip registration failed with status %d\n", np, ret);
479 480
	return ret;
}
481
EXPORT_SYMBOL(of_mm_gpiochip_add_data);
482

483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499
/**
 * of_mm_gpiochip_remove - Remove memory mapped GPIO chip (bank)
 * @mm_gc:	pointer to the of_mm_gpio_chip allocated structure
 */
void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc)
{
	struct gpio_chip *gc = &mm_gc->gc;

	if (!mm_gc)
		return;

	gpiochip_remove(gc);
	iounmap(mm_gc->regs);
	kfree(gc->label);
}
EXPORT_SYMBOL(of_mm_gpiochip_remove);

500
#ifdef CONFIG_PINCTRL
501
static int of_gpiochip_add_pin_range(struct gpio_chip *chip)
502 503 504
{
	struct device_node *np = chip->of_node;
	struct of_phandle_args pinspec;
505
	struct pinctrl_dev *pctldev;
506
	int index = 0, ret;
507 508 509
	const char *name;
	static const char group_names_propname[] = "gpio-ranges-group-names";
	struct property *group_names;
510 511

	if (!np)
512
		return 0;
513

514 515
	group_names = of_find_property(np, group_names_propname, NULL);

516
	for (;; index++) {
517 518
		ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3,
				index, &pinspec);
519 520 521
		if (ret)
			break;

522
		pctldev = of_pinctrl_get(pinspec.np);
523
		of_node_put(pinspec.np);
524
		if (!pctldev)
525
			return -EPROBE_DEFER;
526

527 528
		if (pinspec.args[2]) {
			if (group_names) {
529
				of_property_read_string_index(np,
530 531 532
						group_names_propname,
						index, &name);
				if (strlen(name)) {
533 534
					pr_err("%pOF: Group name of numeric GPIO ranges must be the empty string.\n",
						np);
535 536 537 538 539 540 541 542 543 544
					break;
				}
			}
			/* npins != 0: linear range */
			ret = gpiochip_add_pin_range(chip,
					pinctrl_dev_get_devname(pctldev),
					pinspec.args[0],
					pinspec.args[1],
					pinspec.args[2]);
			if (ret)
545
				return ret;
546 547 548
		} else {
			/* npins == 0: special range */
			if (pinspec.args[1]) {
549 550
				pr_err("%pOF: Illegal gpio-range format.\n",
					np);
551 552 553 554
				break;
			}

			if (!group_names) {
555 556
				pr_err("%pOF: GPIO group range requested but no %s property.\n",
					np, group_names_propname);
557 558 559 560 561 562 563 564 565 566
				break;
			}

			ret = of_property_read_string_index(np,
						group_names_propname,
						index, &name);
			if (ret)
				break;

			if (!strlen(name)) {
567 568
				pr_err("%pOF: Group name of GPIO group range cannot be the empty string.\n",
				np);
569 570 571 572 573 574
				break;
			}

			ret = gpiochip_add_pingroup_range(chip, pctldev,
						pinspec.args[0], name);
			if (ret)
575
				return ret;
576
		}
577
	}
578 579

	return 0;
580 581 582
}

#else
583
static int of_gpiochip_add_pin_range(struct gpio_chip *chip) { return 0; }
584 585
#endif

586
int of_gpiochip_add(struct gpio_chip *chip)
587
{
588 589
	int status;

590 591
	if ((!chip->of_node) && (chip->parent))
		chip->of_node = chip->parent->of_node;
592 593

	if (!chip->of_node)
594
		return 0;
595 596 597 598 599 600

	if (!chip->of_xlate) {
		chip->of_gpio_n_cells = 2;
		chip->of_xlate = of_gpio_simple_xlate;
	}

601 602 603
	if (chip->of_gpio_n_cells > MAX_PHANDLE_ARGS)
		return -EINVAL;

604 605 606 607
	status = of_gpiochip_add_pin_range(chip);
	if (status)
		return status;

608 609
	/* If the chip defines names itself, these take precedence */
	if (!chip->names)
610
		devprop_gpiochip_set_names(chip);
611

612
	of_node_get(chip->of_node);
B
Benoit Parrot 已提交
613

614
	return of_gpiochip_scan_gpios(chip);
615 616 617 618
}

void of_gpiochip_remove(struct gpio_chip *chip)
{
619
	gpiochip_remove_pin_ranges(chip);
620
	of_node_put(chip->of_node);
621
}