gpiolib-of.c 15.4 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

L
Linus Walleij 已提交
132 133
	if (flags)
		of_gpio_flags_quirks(np, flags);
134

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

out:
	of_node_put(gpiospec.np);

	return desc;
143 144
}

145 146 147 148 149 150 151 152 153 154 155 156 157 158
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);

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 188
/*
 * 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;
}

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 223
/*
 * 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 已提交
224 225 226 227 228 229 230 231 232
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;

233
	/* Try GPIO property "foo-gpios" and "foo-gpio" */
L
Linus Walleij 已提交
234 235 236 237 238 239 240 241 242 243 244 245 246 247
	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;
	}

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

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

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

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

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

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

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

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

302
	chip_np = chip->of_node;
B
Benoit Parrot 已提交
303 304 305 306 307 308 309 310 311 312 313
	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);

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

317 318 319 320 321 322
	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 已提交
323

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

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

	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",
341
			desc_to_gpio(desc), np->name);
B
Benoit Parrot 已提交
342 343 344 345 346 347
		return ERR_PTR(-EINVAL);
	}

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

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

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

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

373 374 375 376 377 378 379 380 381 382 383
		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;
			}
384
		}
B
Benoit Parrot 已提交
385
	}
386 387

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

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

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

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

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

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

/**
428
 * of_mm_gpiochip_add_data - Add memory mapped GPIO chip (bank)
429 430
 * @np:		device node of the GPIO chip
 * @mm_gc:	pointer to the of_mm_gpio_chip allocated structure
431
 * @data:	driver data to store in the struct gpio_chip
432 433 434 435 436
 *
 * To use this function you should allocate and fill mm_gc with:
 *
 * 1) In the gpio_chip structure:
 *    - all the callbacks
437 438
 *    - of_gpio_n_cells
 *    - of_xlate callback (optional)
439 440 441 442 443 444 445 446
 *
 * 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.
 */
447 448 449
int of_mm_gpiochip_add_data(struct device_node *np,
			    struct of_mm_gpio_chip *mm_gc,
			    void *data)
450 451
{
	int ret = -ENOMEM;
452
	struct gpio_chip *gc = &mm_gc->gc;
453

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

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

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

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

467
	mm_gc->gc.of_node = np;
468

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

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

484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500
/**
 * 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);

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

	if (!np)
513
		return 0;
514

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

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

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

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

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

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

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

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

	return 0;
581 582 583
}

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

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

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

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

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

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

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

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

614
	of_node_get(chip->of_node);
B
Benoit Parrot 已提交
615

616
	return of_gpiochip_scan_gpios(chip);
617 618 619 620
}

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