gpiolib.c 65.7 KB
Newer Older
1 2
#include <linux/kernel.h>
#include <linux/module.h>
3
#include <linux/interrupt.h>
4 5
#include <linux/irq.h>
#include <linux/spinlock.h>
6
#include <linux/list.h>
David Brownell's avatar
David Brownell committed
7 8 9 10 11
#include <linux/device.h>
#include <linux/err.h>
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/gpio.h>
12
#include <linux/of_gpio.h>
13
#include <linux/idr.h>
14
#include <linux/slab.h>
15
#include <linux/acpi.h>
16
#include <linux/gpio/driver.h>
17
#include <linux/gpio/machine.h>
18

19 20
#include "gpiolib.h"

21 22
#define CREATE_TRACE_POINTS
#include <trace/events/gpio.h>
23

24
/* Implementation infrastructure for GPIO interfaces.
25
 *
26 27 28
 * The GPIO programming interface allows for inlining speed-critical
 * get/set operations for common cases, so that access to SOC-integrated
 * GPIOs can sometimes cost only an instruction or two per bit.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
 */


/* When debugging, extend minimal trust to callers and platform code.
 * Also emit diagnostic messages that may help initial bringup, when
 * board setup or driver bugs are most common.
 *
 * Otherwise, minimize overhead in what may be bitbanging codepaths.
 */
#ifdef	DEBUG
#define	extra_checks	1
#else
#define	extra_checks	0
#endif

/* gpio_lock prevents conflicts during gpio_desc[] table updates.
 * While any GPIO is requested, its gpio_chip is not removable;
 * each GPIO's "requested" flag serves as a lock and refcount.
 */
48
DEFINE_SPINLOCK(gpio_lock);
49

50 51
#define GPIO_OFFSET_VALID(chip, offset) (offset >= 0 && offset < chip->ngpio)

52 53
static DEFINE_MUTEX(gpio_lookup_lock);
static LIST_HEAD(gpio_lookup_list);
54
LIST_HEAD(gpio_chips);
55

56 57 58 59 60

static void gpiochip_free_hogs(struct gpio_chip *chip);
static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip);


61 62 63 64 65
static inline void desc_set_label(struct gpio_desc *d, const char *label)
{
	d->label = label;
}

66 67 68
/**
 * Convert a GPIO number to its descriptor
 */
69
struct gpio_desc *gpio_to_desc(unsigned gpio)
70
{
71 72 73 74 75 76 77 78 79 80 81 82 83 84
	struct gpio_chip *chip;
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);

	list_for_each_entry(chip, &gpio_chips, list) {
		if (chip->base <= gpio && chip->base + chip->ngpio > gpio) {
			spin_unlock_irqrestore(&gpio_lock, flags);
			return &chip->desc[gpio - chip->base];
		}
	}

	spin_unlock_irqrestore(&gpio_lock, flags);

85 86 87
	if (!gpio_is_valid(gpio))
		WARN(1, "invalid GPIO %d\n", gpio);

88
	return NULL;
89
}
90
EXPORT_SYMBOL_GPL(gpio_to_desc);
91

92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
/**
 * Convert a GPIO name to its descriptor
 */
struct gpio_desc *gpio_name_to_desc(const char * const name)
{
	struct gpio_chip *chip;
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);

	list_for_each_entry(chip, &gpio_chips, list) {
		int i;

		for (i = 0; i != chip->ngpio; ++i) {
			struct gpio_desc *gpio = &chip->desc[i];

			if (!gpio->name)
				continue;

			if (!strcmp(gpio->name, name)) {
				spin_unlock_irqrestore(&gpio_lock, flags);
				return gpio;
			}
		}
	}

	spin_unlock_irqrestore(&gpio_lock, flags);

	return NULL;
}
EXPORT_SYMBOL_GPL(gpio_name_to_desc);

124
/**
125
 * Get the GPIO descriptor corresponding to the given hw number for this chip.
126
 */
127 128
struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
				    u16 hwnum)
129
{
130
	if (hwnum >= chip->ngpio)
131
		return ERR_PTR(-EINVAL);
132

133
	return &chip->desc[hwnum];
134
}
135 136 137 138 139 140

/**
 * Convert a GPIO descriptor to the integer namespace.
 * This should disappear in the future but is needed since we still
 * use GPIO numbers for error messages and sysfs nodes
 */
141
int desc_to_gpio(const struct gpio_desc *desc)
142
{
143
	return desc->chip->base + (desc - &desc->chip->desc[0]);
144
}
145
EXPORT_SYMBOL_GPL(desc_to_gpio);
146 147


148 149 150 151 152
/**
 * gpiod_to_chip - Return the GPIO chip to which a GPIO descriptor belongs
 * @desc:	descriptor to return the chip of
 */
struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
153
{
154
	return desc ? desc->chip : NULL;
155
}
156
EXPORT_SYMBOL_GPL(gpiod_to_chip);
157

158 159 160
/* dynamic allocation of GPIOs, e.g. on a hotplugged device */
static int gpiochip_find_base(int ngpio)
{
161 162
	struct gpio_chip *chip;
	int base = ARCH_NR_GPIOS - ngpio;
163

164 165 166 167 168 169 170
	list_for_each_entry_reverse(chip, &gpio_chips, list) {
		/* found a free space? */
		if (chip->base + chip->ngpio <= base)
			break;
		else
			/* nope, check the space right before the chip */
			base = chip->base - ngpio;
171 172
	}

173
	if (gpio_is_valid(base)) {
174
		pr_debug("%s: found new base at %d\n", __func__, base);
175 176 177 178
		return base;
	} else {
		pr_err("%s: cannot find free range\n", __func__);
		return -ENOSPC;
Anton Vorontsov's avatar
Anton Vorontsov committed
179 180 181
	}
}

182 183 184 185 186 187 188 189
/**
 * gpiod_get_direction - return the current direction of a GPIO
 * @desc:	GPIO to get the direction of
 *
 * Return GPIOF_DIR_IN or GPIOF_DIR_OUT, or an error code in case of error.
 *
 * This function may sleep if gpiod_cansleep() is true.
 */
190
int gpiod_get_direction(struct gpio_desc *desc)
191 192
{
	struct gpio_chip	*chip;
193
	unsigned		offset;
194 195
	int			status = -EINVAL;

196 197
	chip = gpiod_to_chip(desc);
	offset = gpio_chip_hwgpio(desc);
198 199 200 201

	if (!chip->get_direction)
		return status;

202
	status = chip->get_direction(chip, offset);
203 204 205
	if (status > 0) {
		/* GPIOF_DIR_IN, or other positive */
		status = 1;
206
		clear_bit(FLAG_IS_OUT, &desc->flags);
207 208 209
	}
	if (status == 0) {
		/* GPIOF_DIR_OUT */
210
		set_bit(FLAG_IS_OUT, &desc->flags);
211 212 213
	}
	return status;
}
214
EXPORT_SYMBOL_GPL(gpiod_get_direction);
215

216 217 218 219 220 221 222 223 224
/*
 * Add a new chip to the global chips list, keeping the list of chips sorted
 * by base order.
 *
 * Return -EBUSY if the new chip overlaps with some other chip's integer
 * space.
 */
static int gpiochip_add_to_list(struct gpio_chip *chip)
{
225
	struct list_head *pos;
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
	struct gpio_chip *_chip;
	int err = 0;

	/* find where to insert our chip */
	list_for_each(pos, &gpio_chips) {
		_chip = list_entry(pos, struct gpio_chip, list);
		/* shall we insert before _chip? */
		if (_chip->base >= chip->base + chip->ngpio)
			break;
	}

	/* are we stepping on the chip right before? */
	if (pos != &gpio_chips && pos->prev != &gpio_chips) {
		_chip = list_entry(pos->prev, struct gpio_chip, list);
		if (_chip->base + _chip->ngpio > chip->base) {
			dev_err(chip->dev,
			       "GPIO integer space overlap, cannot add chip\n");
			err = -EBUSY;
		}
	}

	if (!err)
		list_add_tail(&chip->list, pos);

	return err;
}

253 254 255
/**
 * gpiochip_add() - register a gpio_chip
 * @chip: the chip to register, with chip->base initialized
256
 * Context: potentially before irqs will work
257 258 259 260
 *
 * Returns a negative errno if the chip can't be registered, such as
 * because the chip->base is invalid or already associated with a
 * different chip.  Otherwise it returns zero as a success code.
261
 *
David Brownell's avatar
David Brownell committed
262 263 264 265 266
 * When gpiochip_add() is called very early during boot, so that GPIOs
 * can be freely used, the chip->dev device must be registered before
 * the gpio framework's arch_initcall().  Otherwise sysfs initialization
 * for GPIOs will fail rudely.
 *
267 268
 * If chip->base is negative, this requests dynamic assignment of
 * a range of valid GPIOs.
269 270 271 272 273 274
 */
int gpiochip_add(struct gpio_chip *chip)
{
	unsigned long	flags;
	int		status = 0;
	unsigned	id;
275
	int		base = chip->base;
276
	struct gpio_desc *descs;
277

278 279 280
	descs = kcalloc(chip->ngpio, sizeof(descs[0]), GFP_KERNEL);
	if (!descs)
		return -ENOMEM;
281 282 283

	spin_lock_irqsave(&gpio_lock, flags);

284 285 286 287
	if (base < 0) {
		base = gpiochip_find_base(chip->ngpio);
		if (base < 0) {
			status = base;
288 289
			spin_unlock_irqrestore(&gpio_lock, flags);
			goto err_free_descs;
290 291 292 293
		}
		chip->base = base;
	}

294
	status = gpiochip_add_to_list(chip);
295 296 297 298
	if (status) {
		spin_unlock_irqrestore(&gpio_lock, flags);
		goto err_free_descs;
	}
299

300 301 302 303 304 305 306 307 308 309 310 311
	for (id = 0; id < chip->ngpio; id++) {
		struct gpio_desc *desc = &descs[id];

		desc->chip = chip;

		/* REVISIT: most hardware initializes GPIOs as inputs (often
		 * with pullups enabled) so power usage is minimized. Linux
		 * code should set the gpio direction first thing; but until
		 * it does, and in case chip->get_direction is not set, we may
		 * expose the wrong direction in sysfs.
		 */
		desc->flags = !chip->direction_input ? (1 << FLAG_IS_OUT) : 0;
312 313
	}

314 315
	chip->desc = descs;

316 317
	spin_unlock_irqrestore(&gpio_lock, flags);

318 319 320 321
#ifdef CONFIG_PINCTRL
	INIT_LIST_HEAD(&chip->pin_ranges);
#endif

322 323 324
	if (!chip->owner && chip->dev && chip->dev->driver)
		chip->owner = chip->dev->driver->owner;

325 326 327 328
	status = of_gpiochip_add(chip);
	if (status)
		goto err_remove_chip;

329
	acpi_gpiochip_add(chip);
330

331
	status = gpiochip_sysfs_register(chip);
332 333
	if (status)
		goto err_remove_chip;
334

335
	pr_debug("%s: registered GPIOs %d to %d on device: %s\n", __func__,
336 337 338
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");

339
	return 0;
340

341 342
err_remove_chip:
	acpi_gpiochip_remove(chip);
343
	gpiochip_free_hogs(chip);
344 345 346
	of_gpiochip_remove(chip);
	spin_lock_irqsave(&gpio_lock, flags);
	list_del(&chip->list);
347
	spin_unlock_irqrestore(&gpio_lock, flags);
348
	chip->desc = NULL;
349
err_free_descs:
350 351
	kfree(descs);

352
	/* failures here can mean systems won't boot... */
353
	pr_err("%s: GPIOs %d..%d (%s) failed to register\n", __func__,
354 355
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");
356 357 358 359 360 361 362 363 364 365
	return status;
}
EXPORT_SYMBOL_GPL(gpiochip_add);

/**
 * gpiochip_remove() - unregister a gpio_chip
 * @chip: the chip to unregister
 *
 * A gpio_chip with any GPIOs still requested may not be removed.
 */
366
void gpiochip_remove(struct gpio_chip *chip)
367
{
Johan Hovold's avatar
Johan Hovold committed
368
	struct gpio_desc *desc;
369 370
	unsigned long	flags;
	unsigned	id;
Johan Hovold's avatar
Johan Hovold committed
371
	bool		requested = false;
372

373
	gpiochip_sysfs_unregister(chip);
374

375 376
	gpiochip_irqchip_remove(chip);

377
	acpi_gpiochip_remove(chip);
378
	gpiochip_remove_pin_ranges(chip);
379
	gpiochip_free_hogs(chip);
380 381
	of_gpiochip_remove(chip);

382
	spin_lock_irqsave(&gpio_lock, flags);
383
	for (id = 0; id < chip->ngpio; id++) {
Johan Hovold's avatar
Johan Hovold committed
384 385 386 387
		desc = &chip->desc[id];
		desc->chip = NULL;
		if (test_bit(FLAG_REQUESTED, &desc->flags))
			requested = true;
388
	}
389
	list_del(&chip->list);
390
	spin_unlock_irqrestore(&gpio_lock, flags);
391

Johan Hovold's avatar
Johan Hovold committed
392 393 394
	if (requested)
		dev_crit(chip->dev, "REMOVING GPIOCHIP WITH GPIOS STILL REQUESTED\n");

395 396
	kfree(chip->desc);
	chip->desc = NULL;
397 398 399
}
EXPORT_SYMBOL_GPL(gpiochip_remove);

400 401 402 403 404 405 406 407 408 409 410
/**
 * gpiochip_find() - iterator for locating a specific gpio_chip
 * @data: data to pass to match function
 * @callback: Callback function to check gpio_chip
 *
 * Similar to bus_find_device.  It returns a reference to a gpio_chip as
 * determined by a user supplied @match callback.  The callback should return
 * 0 if the device doesn't match and non-zero if it does.  If the callback is
 * non-zero, this function will return to the caller and not iterate over any
 * more gpio_chips.
 */
411
struct gpio_chip *gpiochip_find(void *data,
412
				int (*match)(struct gpio_chip *chip,
413
					     void *data))
414
{
415
	struct gpio_chip *chip;
416 417 418
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);
419 420
	list_for_each_entry(chip, &gpio_chips, list)
		if (match(chip, data))
421
			break;
422 423 424 425

	/* No match? */
	if (&chip->list == &gpio_chips)
		chip = NULL;
426 427 428 429
	spin_unlock_irqrestore(&gpio_lock, flags);

	return chip;
}
Jean Delvare's avatar
Jean Delvare committed
430
EXPORT_SYMBOL_GPL(gpiochip_find);
431

432 433 434 435 436 437 438 439 440 441 442 443
static int gpiochip_match_name(struct gpio_chip *chip, void *data)
{
	const char *name = data;

	return !strcmp(chip->label, name);
}

static struct gpio_chip *find_chip_by_name(const char *name)
{
	return gpiochip_find((void *)name, gpiochip_match_name);
}

444 445 446 447 448 449 450
#ifdef CONFIG_GPIOLIB_IRQCHIP

/*
 * The following is irqchip helper code for gpiochips.
 */

/**
451 452 453
 * gpiochip_set_chained_irqchip() - sets a chained irqchip to a gpiochip
 * @gpiochip: the gpiochip to set the irqchip chain to
 * @irqchip: the irqchip to chain to the gpiochip
454 455 456
 * @parent_irq: the irq number corresponding to the parent IRQ for this
 * chained irqchip
 * @parent_handler: the parent interrupt handler for the accumulated IRQ
457 458
 * coming out of the gpiochip. If the interrupt is nested rather than
 * cascaded, pass NULL in this handler argument
459 460 461 462 463 464
 */
void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
				  struct irq_chip *irqchip,
				  int parent_irq,
				  irq_flow_handler_t parent_handler)
{
465 466 467 468 469
	unsigned int offset;

	if (!gpiochip->irqdomain) {
		chip_err(gpiochip, "called %s before setting up irqchip\n",
			 __func__);
470 471 472
		return;
	}

473 474 475 476 477 478 479 480 481 482 483
	if (parent_handler) {
		if (gpiochip->can_sleep) {
			chip_err(gpiochip,
				 "you cannot have chained interrupts on a "
				 "chip that may sleep\n");
			return;
		}
		/*
		 * The parent irqchip is already using the chip_data for this
		 * irqchip, so our callbacks simply use the handler_data.
		 */
484 485
		irq_set_chained_handler_and_data(parent_irq, parent_handler,
						 gpiochip);
486 487

		gpiochip->irq_parent = parent_irq;
488
	}
489 490 491 492 493

	/* Set the parent IRQ for all affected IRQs */
	for (offset = 0; offset < gpiochip->ngpio; offset++)
		irq_set_parent(irq_find_mapping(gpiochip->irqdomain, offset),
			       parent_irq);
494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512
}
EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);

/**
 * gpiochip_irq_map() - maps an IRQ into a GPIO irqchip
 * @d: the irqdomain used by this irqchip
 * @irq: the global irq number used by this GPIO irqchip irq
 * @hwirq: the local IRQ/GPIO line offset on this gpiochip
 *
 * This function will set up the mapping for a certain IRQ line on a
 * gpiochip by assigning the gpiochip as chip data, and using the irqchip
 * stored inside the gpiochip.
 */
static int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
			    irq_hw_number_t hwirq)
{
	struct gpio_chip *chip = d->host_data;

	irq_set_chip_data(irq, chip);
513 514 515 516 517
	/*
	 * This lock class tells lockdep that GPIO irqs are in a different
	 * category than their parents, so it won't report false recursion.
	 */
	irq_set_lockdep_class(irq, chip->lock_key);
518
	irq_set_chip_and_handler(irq, chip->irqchip, chip->irq_handler);
519
	/* Chips that can sleep need nested thread handlers */
520
	if (chip->can_sleep && !chip->irq_not_threaded)
521
		irq_set_nested_thread(irq, 1);
522
	irq_set_noprobe(irq);
523

524 525 526 527 528 529
	/*
	 * No set-up of the hardware will happen if IRQ_TYPE_NONE
	 * is passed as default type.
	 */
	if (chip->irq_default_type != IRQ_TYPE_NONE)
		irq_set_irq_type(irq, chip->irq_default_type);
530 531 532 533

	return 0;
}

Linus Walleij's avatar
Linus Walleij committed
534 535
static void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq)
{
536 537 538 539
	struct gpio_chip *chip = d->host_data;

	if (chip->can_sleep)
		irq_set_nested_thread(irq, 0);
Linus Walleij's avatar
Linus Walleij committed
540 541 542 543
	irq_set_chip_and_handler(irq, NULL, NULL);
	irq_set_chip_data(irq, NULL);
}

544 545
static const struct irq_domain_ops gpiochip_domain_ops = {
	.map	= gpiochip_irq_map,
Linus Walleij's avatar
Linus Walleij committed
546
	.unmap	= gpiochip_irq_unmap,
547 548 549 550 551 552 553 554
	/* Virtually all GPIO irqchips are twocell:ed */
	.xlate	= irq_domain_xlate_twocell,
};

static int gpiochip_irq_reqres(struct irq_data *d)
{
	struct gpio_chip *chip = irq_data_get_irq_chip_data(d);

555 556 557
	if (!try_module_get(chip->owner))
		return -ENODEV;

558
	if (gpiochip_lock_as_irq(chip, d->hwirq)) {
559 560 561
		chip_err(chip,
			"unable to lock HW IRQ %lu for IRQ\n",
			d->hwirq);
562
		module_put(chip->owner);
563 564 565 566 567 568 569 570 571
		return -EINVAL;
	}
	return 0;
}

static void gpiochip_irq_relres(struct irq_data *d)
{
	struct gpio_chip *chip = irq_data_get_irq_chip_data(d);

572
	gpiochip_unlock_as_irq(chip, d->hwirq);
573
	module_put(chip->owner);
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
}

static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset)
{
	return irq_find_mapping(chip->irqdomain, offset);
}

/**
 * gpiochip_irqchip_remove() - removes an irqchip added to a gpiochip
 * @gpiochip: the gpiochip to remove the irqchip from
 *
 * This is called only from gpiochip_remove()
 */
static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
{
Linus Walleij's avatar
Linus Walleij committed
589 590
	unsigned int offset;

591 592
	acpi_gpiochip_free_interrupts(gpiochip);

593 594 595 596 597
	if (gpiochip->irq_parent) {
		irq_set_chained_handler(gpiochip->irq_parent, NULL);
		irq_set_handler_data(gpiochip->irq_parent, NULL);
	}

Linus Walleij's avatar
Linus Walleij committed
598 599 600
	/* Remove all IRQ mappings and delete the domain */
	if (gpiochip->irqdomain) {
		for (offset = 0; offset < gpiochip->ngpio; offset++)
601 602
			irq_dispose_mapping(
				irq_find_mapping(gpiochip->irqdomain, offset));
603
		irq_domain_remove(gpiochip->irqdomain);
Linus Walleij's avatar
Linus Walleij committed
604
	}
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619

	if (gpiochip->irqchip) {
		gpiochip->irqchip->irq_request_resources = NULL;
		gpiochip->irqchip->irq_release_resources = NULL;
		gpiochip->irqchip = NULL;
	}
}

/**
 * gpiochip_irqchip_add() - adds an irqchip to a gpiochip
 * @gpiochip: the gpiochip to add the irqchip to
 * @irqchip: the irqchip to add to the gpiochip
 * @first_irq: if not dynamically assigned, the base (first) IRQ to
 * allocate gpiochip irqs from
 * @handler: the irq handler to use (often a predefined irq core function)
620 621
 * @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE
 * to have the core avoid setting up any default type in the hardware.
622
 * @lock_key: lockdep class
623 624 625 626 627 628 629 630 631 632 633
 *
 * This function closely associates a certain irqchip with a certain
 * gpiochip, providing an irq domain to translate the local IRQs to
 * global irqs in the gpiolib core, and making sure that the gpiochip
 * is passed as chip data to all related functions. Driver callbacks
 * need to use container_of() to get their local state containers back
 * from the gpiochip passed as chip data. An irqdomain will be stored
 * in the gpiochip that shall be used by the driver to handle IRQ number
 * translation. The gpiochip will need to be initialized and registered
 * before calling this function.
 *
Linus Walleij's avatar
Linus Walleij committed
634 635
 * This function will handle two cell:ed simple IRQs and assumes all
 * the pins on the gpiochip can generate a unique IRQ. Everything else
636 637
 * need to be open coded.
 */
638 639 640 641 642 643
int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
			  struct irq_chip *irqchip,
			  unsigned int first_irq,
			  irq_flow_handler_t handler,
			  unsigned int type,
			  struct lock_class_key *lock_key)
644 645 646
{
	struct device_node *of_node;
	unsigned int offset;
Linus Walleij's avatar
Linus Walleij committed
647
	unsigned irq_base = 0;
648 649 650 651 652 653 654 655 656 657 658

	if (!gpiochip || !irqchip)
		return -EINVAL;

	if (!gpiochip->dev) {
		pr_err("missing gpiochip .dev parent pointer\n");
		return -EINVAL;
	}
	of_node = gpiochip->dev->of_node;
#ifdef CONFIG_OF_GPIO
	/*
659
	 * If the gpiochip has an assigned OF node this takes precedence
660 661 662 663 664 665 666 667 668
	 * FIXME: get rid of this and use gpiochip->dev->of_node everywhere
	 */
	if (gpiochip->of_node)
		of_node = gpiochip->of_node;
#endif
	gpiochip->irqchip = irqchip;
	gpiochip->irq_handler = handler;
	gpiochip->irq_default_type = type;
	gpiochip->to_irq = gpiochip_to_irq;
669
	gpiochip->lock_key = lock_key;
670 671 672 673 674 675 676
	gpiochip->irqdomain = irq_domain_add_simple(of_node,
					gpiochip->ngpio, first_irq,
					&gpiochip_domain_ops, gpiochip);
	if (!gpiochip->irqdomain) {
		gpiochip->irqchip = NULL;
		return -EINVAL;
	}
677 678 679 680 681 682 683 684 685 686

	/*
	 * It is possible for a driver to override this, but only if the
	 * alternative functions are both implemented.
	 */
	if (!irqchip->irq_request_resources &&
	    !irqchip->irq_release_resources) {
		irqchip->irq_request_resources = gpiochip_irq_reqres;
		irqchip->irq_release_resources = gpiochip_irq_relres;
	}
687 688 689 690 691 692

	/*
	 * Prepare the mapping since the irqchip shall be orthogonal to
	 * any gpiochip calls. If the first_irq was zero, this is
	 * necessary to allocate descriptors for all IRQs.
	 */
Linus Walleij's avatar
Linus Walleij committed
693 694 695 696 697 698 699 700 701
	for (offset = 0; offset < gpiochip->ngpio; offset++) {
		irq_base = irq_create_mapping(gpiochip->irqdomain, offset);
		if (offset == 0)
			/*
			 * Store the base into the gpiochip to be used when
			 * unmapping the irqs.
			 */
			gpiochip->irq_base = irq_base;
	}
702

703 704
	acpi_gpiochip_request_interrupts(gpiochip);

705 706
	return 0;
}
707
EXPORT_SYMBOL_GPL(_gpiochip_irqchip_add);
708 709 710 711 712 713 714

#else /* CONFIG_GPIOLIB_IRQCHIP */

static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) {}

#endif /* CONFIG_GPIOLIB_IRQCHIP */

715
#ifdef CONFIG_PINCTRL
716

717 718 719
/**
 * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping
 * @chip: the gpiochip to add the range for
720
 * @pctldev: the pin controller to map to
721 722 723 724 725 726 727 728 729 730 731 732
 * @gpio_offset: the start offset in the current gpio_chip number space
 * @pin_group: name of the pin group inside the pin controller
 */
int gpiochip_add_pingroup_range(struct gpio_chip *chip,
			struct pinctrl_dev *pctldev,
			unsigned int gpio_offset, const char *pin_group)
{
	struct gpio_pin_range *pin_range;
	int ret;

	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
	if (!pin_range) {
733
		chip_err(chip, "failed to allocate pin ranges\n");
734 735 736 737 738 739 740 741 742 743 744 745 746
		return -ENOMEM;
	}

	/* Use local offset as range ID */
	pin_range->range.id = gpio_offset;
	pin_range->range.gc = chip;
	pin_range->range.name = chip->label;
	pin_range->range.base = chip->base + gpio_offset;
	pin_range->pctldev = pctldev;

	ret = pinctrl_get_group_pins(pctldev, pin_group,
					&pin_range->range.pins,
					&pin_range->range.npins);
747 748
	if (ret < 0) {
		kfree(pin_range);
749
		return ret;
750
	}
751 752 753

	pinctrl_add_gpio_range(pctldev, &pin_range->range);

754 755
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PINGRP %s\n",
		 gpio_offset, gpio_offset + pin_range->range.npins - 1,
756 757 758 759 760 761 762 763
		 pinctrl_dev_get_devname(pctldev), pin_group);

	list_add_tail(&pin_range->node, &chip->pin_ranges);

	return 0;
}
EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);

764 765 766 767
/**
 * gpiochip_add_pin_range() - add a range for GPIO <-> pin mapping
 * @chip: the gpiochip to add the range for
 * @pinctrl_name: the dev_name() of the pin controller to map to
768 769
 * @gpio_offset: the start offset in the current gpio_chip number space
 * @pin_offset: the start offset in the pin controller number space
770 771 772
 * @npins: the number of pins from the offset of each pin space (GPIO and
 *	pin controller) to accumulate in this range
 */
773
int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
774
			   unsigned int gpio_offset, unsigned int pin_offset,
775
			   unsigned int npins)
776 777
{
	struct gpio_pin_range *pin_range;
778
	int ret;
779

780
	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
781
	if (!pin_range) {
782
		chip_err(chip, "failed to allocate pin ranges\n");
783
		return -ENOMEM;
784 785
	}

786
	/* Use local offset as range ID */
787
	pin_range->range.id = gpio_offset;
788
	pin_range->range.gc = chip;
789
	pin_range->range.name = chip->label;
790 791
	pin_range->range.base = chip->base + gpio_offset;
	pin_range->range.pin_base = pin_offset;
792
	pin_range->range.npins = npins;
Linus Walleij's avatar
Linus Walleij committed
793
	pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
794
			&pin_range->range);
795
	if (IS_ERR(pin_range->pctldev)) {
796
		ret = PTR_ERR(pin_range->pctldev);
797
		chip_err(chip, "could not create pin range\n");
798
		kfree(pin_range);
799
		return ret;
800
	}
801 802
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PIN %d->%d\n",
		 gpio_offset, gpio_offset + npins - 1,
803 804
		 pinctl_name,
		 pin_offset, pin_offset + npins - 1);
805 806

	list_add_tail(&pin_range->node, &chip->pin_ranges);
807 808

	return 0;
809
}
810
EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
811

812 813 814 815
/**
 * gpiochip_remove_pin_ranges() - remove all the GPIO <-> pin mappings
 * @chip: the chip to remove all the mappings for
 */
816 817 818 819 820 821 822 823
void gpiochip_remove_pin_ranges(struct gpio_chip *chip)
{
	struct gpio_pin_range *pin_range, *tmp;

	list_for_each_entry_safe(pin_range, tmp, &chip->pin_ranges, node) {
		list_del(&pin_range->node);
		pinctrl_remove_gpio_range(pin_range->pctldev,
				&pin_range->range);
824
		kfree(pin_range);
825 826
	}
}
827 828 829
EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);

#endif /* CONFIG_PINCTRL */
830

831 832 833 834
/* These "optional" allocation calls help prevent drivers from stomping
 * on each other, and help provide better diagnostics in debugfs.
 * They're called even less than the "set direction" calls.
 */
835
static int __gpiod_request(struct gpio_desc *desc, const char *label)
836
{
837 838
	struct gpio_chip	*chip = desc->chip;
	int			status;
839 840
	unsigned long		flags;

841 842
	spin_lock_irqsave(&gpio_lock, flags);

843
	/* NOTE:  gpio_request() can be called in early boot,
David Brownell's avatar
David Brownell committed
844
	 * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
845 846 847 848 849
	 */

	if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
		desc_set_label(desc, label ? : "?");
		status = 0;
850
	} else {
851
		status = -EBUSY;
852
		goto done;
David Brownell's avatar
David Brownell committed
853 854 855 856 857
	}

	if (chip->request) {
		/* chip->request may sleep */
		spin_unlock_irqrestore(&gpio_lock, flags);
858
		status = chip->request(chip, gpio_chip_hwgpio(desc));
David Brownell's avatar
David Brownell committed
859 860 861 862 863
		spin_lock_irqsave(&gpio_lock, flags);

		if (status < 0) {
			desc_set_label(desc, NULL);
			clear_bit(FLAG_REQUESTED, &desc->flags);
864
			goto done;
David Brownell's avatar
David Brownell committed
865
		}
866
	}
867 868 869
	if (chip->get_direction) {
		/* chip->get_direction may sleep */
		spin_unlock_irqrestore(&gpio_lock, flags);
870
		gpiod_get_direction(desc);
871 872
		spin_lock_irqsave(&gpio_lock, flags);
	}
873 874 875 876 877
done:
	spin_unlock_irqrestore(&gpio_lock, flags);
	return status;
}

878
int gpiod_request(struct gpio_desc *desc, const char *label)
879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897
{
	int status = -EPROBE_DEFER;
	struct gpio_chip *chip;

	if (!desc) {
		pr_warn("%s: invalid GPIO\n", __func__);
		return -EINVAL;
	}

	chip = desc->chip;
	if (!chip)
		goto done;

	if (try_module_get(chip->owner)) {
		status = __gpiod_request(desc, label);
		if (status < 0)
			module_put(chip->owner);
	}

898 899
done:
	if (status)
900
		gpiod_dbg(desc, "%s: status %d\n", __func__, status);
901

902 903
	return status;
}
904

905
static bool __gpiod_free(struct gpio_desc *desc)
906
{
907
	bool			ret = false;
908
	unsigned long		flags;
David Brownell's avatar
David Brownell committed
909
	struct gpio_chip	*chip;
910

911 912
	might_sleep();

913
	gpiod_unexport(desc);
David Brownell's avatar
David Brownell committed
914

915 916
	spin_lock_irqsave(&gpio_lock, flags);

David Brownell's avatar
David Brownell committed
917 918 919 920
	chip = desc->chip;
	if (chip && test_bit(FLAG_REQUESTED, &desc->flags)) {
		if (chip->free) {
			spin_unlock_irqrestore(&gpio_lock, flags);
921
			might_sleep_if(chip->can_sleep);
922
			chip->free(chip, gpio_chip_hwgpio(desc));
David Brownell's avatar
David Brownell committed
923 924
			spin_lock_irqsave(&gpio_lock, flags);
		}
925
		desc_set_label(desc, NULL);
926
		clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
David Brownell's avatar
David Brownell committed
927
		clear_bit(FLAG_REQUESTED, &desc->flags);
928
		clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
929
		clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
930
		clear_bit(FLAG_IS_HOGGED, &desc->flags);
931 932
		ret = true;
	}
933 934

	spin_unlock_irqrestore(&gpio_lock, flags);
935 936 937
	return ret;
}

938
void gpiod_free(struct gpio_desc *desc)
939 940 941 942 943
{
	if (desc && __gpiod_free(desc))
		module_put(desc->chip->owner);
	else
		WARN_ON(extra_checks);
944
}
945

946 947 948 949 950 951
/**
 * gpiochip_is_requested - return string iff signal was requested
 * @chip: controller managing the signal
 * @offset: of signal within controller's 0..(ngpio - 1) range
 *
 * Returns NULL if the GPIO is not currently requested, else a string.
952 953
 * The string returned is the label passed to gpio_request(); if none has been
 * passed it is a meaningless, non-NULL constant.
954 955 956 957 958 959 960
 *
 * This function is for use by GPIO controller drivers.  The label can
 * help with diagnostics, and knowing that the signal is used as a GPIO
 * can help avoid accidentally multiplexing it to another controller.
 */
const char *gpiochip_is_requested(struct gpio_chip *chip, unsigned offset)
{
961
	struct gpio_desc *desc;
962

963
	if (!GPIO_OFFSET_VALID(chip, offset))
964
		return NULL;
965 966 967

	desc = &chip->desc[offset];

968
	if (test_bit(FLAG_REQUESTED, &desc->flags) == 0)
969
		return NULL;
970
	return desc->label;
971 972 973
}
EXPORT_SYMBOL_GPL(gpiochip_is_requested);

974 975 976 977 978 979 980 981 982 983 984
/**
 * gpiochip_request_own_desc - Allow GPIO chip to request its own descriptor
 * @desc: GPIO descriptor to request
 * @label: label for the GPIO
 *
 * Function allows GPIO chip drivers to request and use their own GPIO
 * descriptors via gpiolib API. Difference to gpiod_request() is that this
 * function will not increase reference count of the GPIO chip module. This
 * allows the GPIO chip module to be unloaded as needed (we assume that the
 * GPIO chip driver handles freeing the GPIOs it has requested).
 */
985 986
struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
					    const char *label)
987
{
988 989
	struct gpio_desc *desc = gpiochip_get_desc(chip, hwnum);
	int err;
990

991 992 993 994 995 996 997 998
	if (IS_ERR(desc)) {
		chip_err(chip, "failed to get GPIO descriptor\n");
		return desc;
	}

	err = __gpiod_request(desc, label);
	if (err < 0)
		return ERR_PTR(err);
999

1000
	return desc;
1001
}
1002
EXPORT_SYMBOL_GPL(gpiochip_request_own_desc);
1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015

/**
 * gpiochip_free_own_desc - Free GPIO requested by the chip driver
 * @desc: GPIO descriptor to free
 *
 * Function frees the given GPIO requested previously with
 * gpiochip_request_own_desc().
 */
void gpiochip_free_own_desc(struct gpio_desc *desc)
{
	if (desc)
		__gpiod_free(desc);
}
1016
EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
1017 1018 1019 1020 1021 1022 1023 1024 1025 1026

/* Drivers MUST set GPIO direction before making get/set calls.  In
 * some cases this is done in early boot, before IRQs are enabled.
 *
 * As a rule these aren't called more than once (except for drivers
 * using the open-drain emulation idiom) so these are natural places
 * to accumulate extra debugging checks.  Note that we can't (yet)
 * rely on gpio_request() having been called beforehand.
 */

1027 1028 1029 1030 1031 1032 1033 1034 1035 1036
/**
 * gpiod_direction_input - set the GPIO direction to input
 * @desc:	GPIO to set to input
 *
 * Set the direction of the passed GPIO to input, such as gpiod_get_value() can
 * be called safely on it.
 *
 * Return 0 in case of success, else an error code.
 */
int gpiod_direction_input(struct gpio_desc *desc)
1037 1038 1039 1040
{
	struct gpio_chip	*chip;
	int			status = -EINVAL;

1041
	if (!desc || !desc->chip) {
1042 1043 1044 1045
		pr_warn("%s: invalid GPIO\n", __func__);
		return -EINVAL;
	}

1046 1047
	chip = desc->chip;
	if (!chip->get || !chip->direction_input) {
1048 1049
		gpiod_warn(desc,
			"%s: missing get() or direction_input() operations\n",
1050
			__func__);
1051 1052 1053
		return -EIO;
	}

1054
	status = chip->direction_input(chip, gpio_chip_hwgpio(desc));
1055 1056
	if (status == 0)
		clear_bit(FLAG_IS_OUT, &desc->flags);
1057

1058
	trace_gpio_direction(desc_to_gpio(desc), 1, status);
1059

1060 1061
	return status;
}
1062
EXPORT_SYMBOL_GPL(gpiod_direction_input);
1063

1064
static int _gpiod_direction_output_raw(struct gpio_desc *desc, int value)
1065 1066 1067 1068
{
	struct gpio_chip	*chip;
	int			status = -EINVAL;

1069 1070 1071 1072 1073 1074 1075 1076
	/* GPIOs used for IRQs shall not be set as output */
	if (test_bit(FLAG_USED_AS_IRQ, &desc->flags)) {
		gpiod_err(desc,
			  "%s: tried to set a GPIO tied to an IRQ as output\n",
			  __func__);
		return -EIO;
	}

1077 1078
	/* Open drain pin should not be driven to 1 */
	if (value && test_bit(FLAG_OPEN_DRAIN,  &desc->flags))
1079
		return gpiod_direction_input(desc);