gpiolib-of.c 15.8 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
	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);
244 245 246 247 248 249 250 251 252 253 254 255 256
		/*
		 * -EPROBE_DEFER in our case means that we found a
		 * valid GPIO property, but no controller has been
		 * registered so far.
		 *
		 * This means we don't need to look any further for
		 * alternate name conventions, and we should really
		 * preserve the return code for our user to be able to
		 * retry probing later.
		 */
		if (IS_ERR(desc) && PTR_ERR(desc) == -EPROBE_DEFER)
			return desc;

L
Linus Walleij 已提交
257 258 259 260
		if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT))
			break;
	}

261 262 263 264
	/* Special handling for SPI GPIOs if used */
	if (IS_ERR(desc))
		desc = of_find_spi_gpio(dev, con_id, &of_flags);

265
	/* Special handling for regulator GPIOs if used */
266
	if (IS_ERR(desc) && PTR_ERR(desc) != -EPROBE_DEFER)
267 268
		desc = of_find_regulator_gpio(dev, con_id, &of_flags);

L
Linus Walleij 已提交
269 270 271 272 273 274 275
	if (IS_ERR(desc))
		return desc;

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

	if (of_flags & OF_GPIO_SINGLE_ENDED) {
276
		if (of_flags & OF_GPIO_OPEN_DRAIN)
L
Linus Walleij 已提交
277 278 279 280 281
			*flags |= GPIO_OPEN_DRAIN;
		else
			*flags |= GPIO_OPEN_SOURCE;
	}

282 283
	if (of_flags & OF_GPIO_TRANSITORY)
		*flags |= GPIO_TRANSITORY;
284

L
Linus Walleij 已提交
285 286 287
	return desc;
}

B
Benoit Parrot 已提交
288
/**
289
 * of_parse_own_gpio() - Get a GPIO hog descriptor, names and flags for GPIO API
B
Benoit Parrot 已提交
290
 * @np:		device node to get GPIO from
291
 * @chip:	GPIO chip whose hog is parsed
292
 * @idx:	Index of the GPIO to parse
B
Benoit Parrot 已提交
293 294
 * @name:	GPIO line name
 * @lflags:	gpio_lookup_flags - returned from of_find_gpio() or
295
 *		of_parse_own_gpio()
B
Benoit Parrot 已提交
296 297 298 299 300
 * @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.
 */
301
static struct gpio_desc *of_parse_own_gpio(struct device_node *np,
302
					   struct gpio_chip *chip,
303
					   unsigned int idx, const char **name,
304 305
					   enum gpio_lookup_flags *lflags,
					   enum gpiod_flags *dflags)
B
Benoit Parrot 已提交
306 307 308
{
	struct device_node *chip_np;
	enum of_gpio_flags xlate_flags;
309 310
	struct of_phandle_args gpiospec;
	struct gpio_desc *desc;
311
	unsigned int i;
B
Benoit Parrot 已提交
312
	u32 tmp;
313
	int ret;
B
Benoit Parrot 已提交
314

315
	chip_np = chip->of_node;
B
Benoit Parrot 已提交
316 317 318 319 320 321 322 323 324 325 326
	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);

327 328
	gpiospec.np = chip_np;
	gpiospec.args_count = tmp;
B
Benoit Parrot 已提交
329

330 331 332 333 334 335
	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 已提交
336

337
	desc = of_xlate_and_get_gpiod_flags(chip, &gpiospec, &xlate_flags);
338 339
	if (IS_ERR(desc))
		return desc;
B
Benoit Parrot 已提交
340 341 342

	if (xlate_flags & OF_GPIO_ACTIVE_LOW)
		*lflags |= GPIO_ACTIVE_LOW;
343 344
	if (xlate_flags & OF_GPIO_TRANSITORY)
		*lflags |= GPIO_TRANSITORY;
B
Benoit Parrot 已提交
345 346 347 348 349 350 351 352 353

	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",
354
			desc_to_gpio(desc), np->name);
B
Benoit Parrot 已提交
355 356 357 358 359 360
		return ERR_PTR(-EINVAL);
	}

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

361
	return desc;
B
Benoit Parrot 已提交
362 363 364
}

/**
365
 * of_gpiochip_scan_gpios - Scan gpio-controller for gpio definitions
B
Benoit Parrot 已提交
366 367 368 369
 * @chip:	gpio chip to act on
 *
 * This is only used by of_gpiochip_add to request/set GPIO initial
 * configuration.
370
 * It returns error if it fails otherwise 0 on success.
B
Benoit Parrot 已提交
371
 */
372
static int of_gpiochip_scan_gpios(struct gpio_chip *chip)
B
Benoit Parrot 已提交
373 374 375 376 377 378
{
	struct gpio_desc *desc = NULL;
	struct device_node *np;
	const char *name;
	enum gpio_lookup_flags lflags;
	enum gpiod_flags dflags;
379
	unsigned int i;
380
	int ret;
B
Benoit Parrot 已提交
381

382
	for_each_available_child_of_node(chip->of_node, np) {
B
Benoit Parrot 已提交
383 384 385
		if (!of_property_read_bool(np, "gpio-hog"))
			continue;

386 387 388 389 390 391 392 393 394 395 396
		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;
			}
397
		}
B
Benoit Parrot 已提交
398
	}
399 400

	return 0;
B
Benoit Parrot 已提交
401 402
}

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

427 428 429
	if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells))
		return -EINVAL;

430
	if (gpiospec->args[0] >= gc->ngpio)
431 432
		return -EINVAL;

433
	if (flags)
434
		*flags = gpiospec->args[1];
435

436
	return gpiospec->args[0];
437
}
438
EXPORT_SYMBOL(of_gpio_simple_xlate);
439 440

/**
441
 * of_mm_gpiochip_add_data - Add memory mapped GPIO chip (bank)
442 443
 * @np:		device node of the GPIO chip
 * @mm_gc:	pointer to the of_mm_gpio_chip allocated structure
444
 * @data:	driver data to store in the struct gpio_chip
445 446 447 448 449
 *
 * To use this function you should allocate and fill mm_gc with:
 *
 * 1) In the gpio_chip structure:
 *    - all the callbacks
450 451
 *    - of_gpio_n_cells
 *    - of_xlate callback (optional)
452 453 454 455 456 457 458 459
 *
 * 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.
 */
460 461 462
int of_mm_gpiochip_add_data(struct device_node *np,
			    struct of_mm_gpio_chip *mm_gc,
			    void *data)
463 464
{
	int ret = -ENOMEM;
465
	struct gpio_chip *gc = &mm_gc->gc;
466

467
	gc->label = kasprintf(GFP_KERNEL, "%pOF", np);
468 469 470 471 472 473 474
	if (!gc->label)
		goto err0;

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

475
	gc->base = -1;
476 477 478 479

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

480
	mm_gc->gc.of_node = np;
481

482
	ret = gpiochip_add_data(gc, data);
483 484 485 486 487 488 489 490 491
	if (ret)
		goto err2;

	return 0;
err2:
	iounmap(mm_gc->regs);
err1:
	kfree(gc->label);
err0:
492
	pr_err("%pOF: GPIO chip registration failed with status %d\n", np, ret);
493 494
	return ret;
}
495
EXPORT_SYMBOL(of_mm_gpiochip_add_data);
496

497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
/**
 * 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);

514
#ifdef CONFIG_PINCTRL
515
static int of_gpiochip_add_pin_range(struct gpio_chip *chip)
516 517 518
{
	struct device_node *np = chip->of_node;
	struct of_phandle_args pinspec;
519
	struct pinctrl_dev *pctldev;
520
	int index = 0, ret;
521 522 523
	const char *name;
	static const char group_names_propname[] = "gpio-ranges-group-names";
	struct property *group_names;
524 525

	if (!np)
526
		return 0;
527

528 529
	group_names = of_find_property(np, group_names_propname, NULL);

530
	for (;; index++) {
531 532
		ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3,
				index, &pinspec);
533 534 535
		if (ret)
			break;

536
		pctldev = of_pinctrl_get(pinspec.np);
537
		of_node_put(pinspec.np);
538
		if (!pctldev)
539
			return -EPROBE_DEFER;
540

541 542
		if (pinspec.args[2]) {
			if (group_names) {
543
				of_property_read_string_index(np,
544 545 546
						group_names_propname,
						index, &name);
				if (strlen(name)) {
547 548
					pr_err("%pOF: Group name of numeric GPIO ranges must be the empty string.\n",
						np);
549 550 551 552 553 554 555 556 557 558
					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)
559
				return ret;
560 561 562
		} else {
			/* npins == 0: special range */
			if (pinspec.args[1]) {
563 564
				pr_err("%pOF: Illegal gpio-range format.\n",
					np);
565 566 567 568
				break;
			}

			if (!group_names) {
569 570
				pr_err("%pOF: GPIO group range requested but no %s property.\n",
					np, group_names_propname);
571 572 573 574 575 576 577 578 579 580
				break;
			}

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

			if (!strlen(name)) {
581 582
				pr_err("%pOF: Group name of GPIO group range cannot be the empty string.\n",
				np);
583 584 585 586 587 588
				break;
			}

			ret = gpiochip_add_pingroup_range(chip, pctldev,
						pinspec.args[0], name);
			if (ret)
589
				return ret;
590
		}
591
	}
592 593

	return 0;
594 595 596
}

#else
597
static int of_gpiochip_add_pin_range(struct gpio_chip *chip) { return 0; }
598 599
#endif

600
int of_gpiochip_add(struct gpio_chip *chip)
601
{
602 603
	int status;

604 605
	if ((!chip->of_node) && (chip->parent))
		chip->of_node = chip->parent->of_node;
606 607

	if (!chip->of_node)
608
		return 0;
609 610 611 612 613 614

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

615 616 617
	if (chip->of_gpio_n_cells > MAX_PHANDLE_ARGS)
		return -EINVAL;

618 619 620 621
	status = of_gpiochip_add_pin_range(chip);
	if (status)
		return status;

622 623
	/* If the chip defines names itself, these take precedence */
	if (!chip->names)
624 625
		devprop_gpiochip_set_names(chip,
					   of_fwnode_handle(chip->of_node));
626

627
	of_node_get(chip->of_node);
B
Benoit Parrot 已提交
628

629
	return of_gpiochip_scan_gpios(chip);
630 631 632 633
}

void of_gpiochip_remove(struct gpio_chip *chip)
{
634
	gpiochip_remove_pin_ranges(chip);
635
	of_node_put(chip->of_node);
636
}