gpiolib.c 68.8 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
#include <linux/pinctrl/consumer.h>
19

20 21
#include "gpiolib.h"

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

25
/* Implementation infrastructure for GPIO interfaces.
26
 *
27 28 29
 * 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.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
 */


/* 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.
 */
49
DEFINE_SPINLOCK(gpio_lock);
50

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

55 56 57 58 59

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


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

65 66 67
/**
 * Convert a GPIO number to its descriptor
 */
68
struct gpio_desc *gpio_to_desc(unsigned gpio)
69
{
70 71 72 73 74 75 76 77 78 79 80 81 82 83
	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);

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

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

91
/**
92
 * Get the GPIO descriptor corresponding to the given hw number for this chip.
93
 */
94 95
struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
				    u16 hwnum)
96
{
97
	if (hwnum >= chip->ngpio)
98
		return ERR_PTR(-EINVAL);
99

100
	return &chip->desc[hwnum];
101
}
102 103 104 105 106 107

/**
 * 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
 */
108
int desc_to_gpio(const struct gpio_desc *desc)
109
{
110
	return desc->chip->base + (desc - &desc->chip->desc[0]);
111
}
112
EXPORT_SYMBOL_GPL(desc_to_gpio);
113 114


115 116 117 118 119
/**
 * 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)
120
{
121
	return desc ? desc->chip : NULL;
122
}
123
EXPORT_SYMBOL_GPL(gpiod_to_chip);
124

125 126 127
/* dynamic allocation of GPIOs, e.g. on a hotplugged device */
static int gpiochip_find_base(int ngpio)
{
128 129
	struct gpio_chip *chip;
	int base = ARCH_NR_GPIOS - ngpio;
130

131 132 133 134 135 136 137
	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;
138 139
	}

140
	if (gpio_is_valid(base)) {
141
		pr_debug("%s: found new base at %d\n", __func__, base);
142 143 144 145
		return base;
	} else {
		pr_err("%s: cannot find free range\n", __func__);
		return -ENOSPC;
Anton Vorontsov's avatar
Anton Vorontsov committed
146 147 148
	}
}

149 150 151 152 153 154 155 156
/**
 * 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.
 */
157
int gpiod_get_direction(struct gpio_desc *desc)
158 159
{
	struct gpio_chip	*chip;
160
	unsigned		offset;
161 162
	int			status = -EINVAL;

163 164
	chip = gpiod_to_chip(desc);
	offset = gpio_chip_hwgpio(desc);
165 166 167 168

	if (!chip->get_direction)
		return status;

169
	status = chip->get_direction(chip, offset);
170 171 172
	if (status > 0) {
		/* GPIOF_DIR_IN, or other positive */
		status = 1;
173
		clear_bit(FLAG_IS_OUT, &desc->flags);
174 175 176
	}
	if (status == 0) {
		/* GPIOF_DIR_OUT */
177
		set_bit(FLAG_IS_OUT, &desc->flags);
178 179 180
	}
	return status;
}
181
EXPORT_SYMBOL_GPL(gpiod_get_direction);
182

183 184
/*
 * Add a new chip to the global chips list, keeping the list of chips sorted
185
 * by range(means [base, base + ngpio - 1]) order.
186 187 188 189 190 191
 *
 * Return -EBUSY if the new chip overlaps with some other chip's integer
 * space.
 */
static int gpiochip_add_to_list(struct gpio_chip *chip)
{
192 193
	struct gpio_chip *iterator;
	struct gpio_chip *previous = NULL;
194

195
	if (list_empty(&gpio_chips)) {
196 197
		list_add_tail(&chip->list, &gpio_chips);
		return 0;
198 199
	}

200
	list_for_each_entry(iterator, &gpio_chips, list) {
201 202 203 204 205
		if (iterator->base >= chip->base + chip->ngpio) {
			/*
			 * Iterator is the first GPIO chip so there is no
			 * previous one
			 */
206
			if (!previous) {
207 208 209 210 211 212 213 214 215 216 217
				goto found;
			} else {
				/*
				 * We found a valid range(means
				 * [base, base + ngpio - 1]) between previous
				 * and iterator chip.
				 */
				if (previous->base + previous->ngpio
						<= chip->base)
					goto found;
			}
218
		}
219
		previous = iterator;
220 221
	}

222 223 224 225 226 227 228
	/*
	 * We are beyond the last chip in the list and iterator now
	 * points to the head.
	 * Let iterator point to the last chip in the list.
	 */

	iterator = list_last_entry(&gpio_chips, struct gpio_chip, list);
229 230 231
	if (iterator->base + iterator->ngpio <= chip->base) {
		list_add(&chip->list, &iterator->list);
		return 0;
232 233
	}

234 235 236
	dev_err(chip->parent,
	       "GPIO integer space overlap, cannot add chip\n");
	return -EBUSY;
237

238
found:
239
	list_add_tail(&chip->list, &iterator->list);
240
	return 0;
241 242
}

243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258
/**
 * Convert a GPIO name to its descriptor
 */
static 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];

259
			if (!gpio->name || !name)
260 261 262 263 264 265 266 267 268 269 270 271 272 273
				continue;

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

	spin_unlock_irqrestore(&gpio_lock, flags);

	return NULL;
}

274 275 276 277
/*
 * Takes the names from gc->names and checks if they are all unique. If they
 * are, they are assigned to their gpio descriptors.
 *
278
 * Warning if one of the names is already used for a different GPIO.
279 280 281 282 283 284 285 286 287 288 289 290 291
 */
static int gpiochip_set_desc_names(struct gpio_chip *gc)
{
	int i;

	if (!gc->names)
		return 0;

	/* First check all names if they are unique */
	for (i = 0; i != gc->ngpio; ++i) {
		struct gpio_desc *gpio;

		gpio = gpio_name_to_desc(gc->names[i]);
292
		if (gpio)
293
			dev_warn(gc->parent, "Detected name collision for "
294 295
				 "GPIO name '%s'\n",
				 gc->names[i]);
296 297 298 299 300 301 302 303 304
	}

	/* Then add all names to the GPIO descriptors */
	for (i = 0; i != gc->ngpio; ++i)
		gc->desc[i].name = gc->names[i];

	return 0;
}

305
/**
306
 * gpiochip_add_data() - register a gpio_chip
307
 * @chip: the chip to register, with chip->base initialized
308
 * Context: potentially before irqs will work
309 310 311 312
 *
 * 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.
313
 *
314
 * When gpiochip_add_data() is called very early during boot, so that GPIOs
315
 * can be freely used, the chip->parent device must be registered before
David Brownell's avatar
David Brownell committed
316 317 318
 * the gpio framework's arch_initcall().  Otherwise sysfs initialization
 * for GPIOs will fail rudely.
 *
319 320
 * If chip->base is negative, this requests dynamic assignment of
 * a range of valid GPIOs.
321
 */
322
int gpiochip_add_data(struct gpio_chip *chip, void *data)
323 324 325 326
{
	unsigned long	flags;
	int		status = 0;
	unsigned	id;
327
	int		base = chip->base;
328
	struct gpio_desc *descs;
329

330 331 332
	descs = kcalloc(chip->ngpio, sizeof(descs[0]), GFP_KERNEL);
	if (!descs)
		return -ENOMEM;
333

334 335
	chip->data = data;

336 337 338 339 340
	if (chip->ngpio == 0) {
		chip_err(chip, "tried to insert a GPIO chip with zero lines\n");
		return -EINVAL;
	}

341 342
	spin_lock_irqsave(&gpio_lock, flags);

343 344 345 346
	if (base < 0) {
		base = gpiochip_find_base(chip->ngpio);
		if (base < 0) {
			status = base;
347 348
			spin_unlock_irqrestore(&gpio_lock, flags);
			goto err_free_descs;
349 350 351 352
		}
		chip->base = base;
	}

353
	status = gpiochip_add_to_list(chip);
354 355 356 357
	if (status) {
		spin_unlock_irqrestore(&gpio_lock, flags);
		goto err_free_descs;
	}
358

359 360 361 362 363 364 365 366 367 368 369 370
	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;
371 372
	}

373 374
	chip->desc = descs;

375 376
	spin_unlock_irqrestore(&gpio_lock, flags);

377 378 379 380
#ifdef CONFIG_PINCTRL
	INIT_LIST_HEAD(&chip->pin_ranges);
#endif

381 382
	if (!chip->owner && chip->parent && chip->parent->driver)
		chip->owner = chip->parent->driver->owner;
383

384 385 386 387
	status = gpiochip_set_desc_names(chip);
	if (status)
		goto err_remove_from_list;

388 389 390 391
	status = of_gpiochip_add(chip);
	if (status)
		goto err_remove_chip;

392
	acpi_gpiochip_add(chip);
393

394
	status = gpiochip_sysfs_register(chip);
395 396
	if (status)
		goto err_remove_chip;
397

398
	pr_debug("%s: registered GPIOs %d to %d on device: %s\n", __func__,
399 400 401
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");

402
	return 0;
403

404 405
err_remove_chip:
	acpi_gpiochip_remove(chip);
406
	gpiochip_free_hogs(chip);
407
	of_gpiochip_remove(chip);
408
err_remove_from_list:
409 410
	spin_lock_irqsave(&gpio_lock, flags);
	list_del(&chip->list);
411
	spin_unlock_irqrestore(&gpio_lock, flags);
412
	chip->desc = NULL;
413
err_free_descs:
414 415
	kfree(descs);

416
	/* failures here can mean systems won't boot... */
417
	pr_err("%s: GPIOs %d..%d (%s) failed to register\n", __func__,
418 419
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");
420 421
	return status;
}
422
EXPORT_SYMBOL_GPL(gpiochip_add_data);
423 424 425 426 427 428 429

/**
 * gpiochip_remove() - unregister a gpio_chip
 * @chip: the chip to unregister
 *
 * A gpio_chip with any GPIOs still requested may not be removed.
 */
430
void gpiochip_remove(struct gpio_chip *chip)
431
{
Johan Hovold's avatar
Johan Hovold committed
432
	struct gpio_desc *desc;
433 434
	unsigned long	flags;
	unsigned	id;
Johan Hovold's avatar
Johan Hovold committed
435
	bool		requested = false;
436

437
	gpiochip_sysfs_unregister(chip);
438

439 440
	gpiochip_irqchip_remove(chip);

441
	acpi_gpiochip_remove(chip);
442
	gpiochip_remove_pin_ranges(chip);
443
	gpiochip_free_hogs(chip);
444 445
	of_gpiochip_remove(chip);

446
	spin_lock_irqsave(&gpio_lock, flags);
447
	for (id = 0; id < chip->ngpio; id++) {
Johan Hovold's avatar
Johan Hovold committed
448 449 450 451
		desc = &chip->desc[id];
		desc->chip = NULL;
		if (test_bit(FLAG_REQUESTED, &desc->flags))
			requested = true;
452
	}
453
	list_del(&chip->list);
454
	spin_unlock_irqrestore(&gpio_lock, flags);
455

Johan Hovold's avatar
Johan Hovold committed
456
	if (requested)
457 458
		dev_crit(chip->parent,
			 "REMOVING GPIOCHIP WITH GPIOS STILL REQUESTED\n");
Johan Hovold's avatar
Johan Hovold committed
459

460 461
	kfree(chip->desc);
	chip->desc = NULL;
462 463 464
}
EXPORT_SYMBOL_GPL(gpiochip_remove);

465 466 467 468 469 470 471 472 473 474 475
/**
 * 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.
 */
476
struct gpio_chip *gpiochip_find(void *data,
477
				int (*match)(struct gpio_chip *chip,
478
					     void *data))
479
{
480
	struct gpio_chip *chip;
481 482 483
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);
484 485
	list_for_each_entry(chip, &gpio_chips, list)
		if (match(chip, data))
486
			break;
487 488 489 490

	/* No match? */
	if (&chip->list == &gpio_chips)
		chip = NULL;
491 492 493 494
	spin_unlock_irqrestore(&gpio_lock, flags);

	return chip;
}
Jean Delvare's avatar
Jean Delvare committed
495
EXPORT_SYMBOL_GPL(gpiochip_find);
496

497 498 499 500 501 502 503 504 505 506 507 508
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);
}

509 510 511 512 513 514 515
#ifdef CONFIG_GPIOLIB_IRQCHIP

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

/**
516 517 518
 * 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
519 520 521
 * @parent_irq: the irq number corresponding to the parent IRQ for this
 * chained irqchip
 * @parent_handler: the parent interrupt handler for the accumulated IRQ
522 523
 * coming out of the gpiochip. If the interrupt is nested rather than
 * cascaded, pass NULL in this handler argument
524 525 526 527 528 529
 */
void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
				  struct irq_chip *irqchip,
				  int parent_irq,
				  irq_flow_handler_t parent_handler)
{
530 531 532 533 534
	unsigned int offset;

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

538 539 540 541 542 543 544 545 546 547 548
	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.
		 */
549 550
		irq_set_chained_handler_and_data(parent_irq, parent_handler,
						 gpiochip);
551 552

		gpiochip->irq_parent = parent_irq;
553
	}
554 555 556 557 558

	/* 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);
559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577
}
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);
578 579 580 581 582
	/*
	 * 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);
583
	irq_set_chip_and_handler(irq, chip->irqchip, chip->irq_handler);
584
	/* Chips that can sleep need nested thread handlers */
585
	if (chip->can_sleep && !chip->irq_not_threaded)
586
		irq_set_nested_thread(irq, 1);
587
	irq_set_noprobe(irq);
588

589 590 591 592 593 594
	/*
	 * 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);
595 596 597 598

	return 0;
}

Linus Walleij's avatar
Linus Walleij committed
599 600
static void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq)
{
601 602 603 604
	struct gpio_chip *chip = d->host_data;

	if (chip->can_sleep)
		irq_set_nested_thread(irq, 0);
Linus Walleij's avatar
Linus Walleij committed
605 606 607 608
	irq_set_chip_and_handler(irq, NULL, NULL);
	irq_set_chip_data(irq, NULL);
}

609 610
static const struct irq_domain_ops gpiochip_domain_ops = {
	.map	= gpiochip_irq_map,
Linus Walleij's avatar
Linus Walleij committed
611
	.unmap	= gpiochip_irq_unmap,
612 613 614 615 616 617 618 619
	/* 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);

620 621 622
	if (!try_module_get(chip->owner))
		return -ENODEV;

623
	if (gpiochip_lock_as_irq(chip, d->hwirq)) {
624 625 626
		chip_err(chip,
			"unable to lock HW IRQ %lu for IRQ\n",
			d->hwirq);
627
		module_put(chip->owner);
628 629 630 631 632 633 634 635 636
		return -EINVAL;
	}
	return 0;
}

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

637
	gpiochip_unlock_as_irq(chip, d->hwirq);
638
	module_put(chip->owner);
639 640 641 642 643 644 645 646 647 648 649 650 651 652 653
}

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
654 655
	unsigned int offset;

656 657
	acpi_gpiochip_free_interrupts(gpiochip);

658 659 660 661 662
	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
663 664 665
	/* Remove all IRQ mappings and delete the domain */
	if (gpiochip->irqdomain) {
		for (offset = 0; offset < gpiochip->ngpio; offset++)
666 667
			irq_dispose_mapping(
				irq_find_mapping(gpiochip->irqdomain, offset));
668
		irq_domain_remove(gpiochip->irqdomain);
Linus Walleij's avatar
Linus Walleij committed
669
	}
670 671 672 673 674 675 676 677 678 679 680 681 682 683 684

	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)
685 686
 * @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.
687
 * @lock_key: lockdep class
688 689 690 691 692
 *
 * 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
Linus Walleij's avatar
Linus Walleij committed
693
 * need to use gpiochip_get_data() to get their local state containers back
694 695 696 697 698
 * 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
699 700
 * This function will handle two cell:ed simple IRQs and assumes all
 * the pins on the gpiochip can generate a unique IRQ. Everything else
701 702
 * need to be open coded.
 */
703 704 705 706 707 708
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)
709 710 711
{
	struct device_node *of_node;
	unsigned int offset;
Linus Walleij's avatar
Linus Walleij committed
712
	unsigned irq_base = 0;
713 714 715 716

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

717
	if (!gpiochip->parent) {
718 719 720
		pr_err("missing gpiochip .dev parent pointer\n");
		return -EINVAL;
	}
721
	of_node = gpiochip->parent->of_node;
722 723
#ifdef CONFIG_OF_GPIO
	/*
724
	 * If the gpiochip has an assigned OF node this takes precedence
725 726
	 * FIXME: get rid of this and use gpiochip->parent->of_node
	 * everywhere
727 728 729 730 731 732 733 734
	 */
	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;
735
	gpiochip->lock_key = lock_key;
736 737 738 739 740 741 742
	gpiochip->irqdomain = irq_domain_add_simple(of_node,
					gpiochip->ngpio, first_irq,
					&gpiochip_domain_ops, gpiochip);
	if (!gpiochip->irqdomain) {
		gpiochip->irqchip = NULL;
		return -EINVAL;
	}
743 744 745 746 747 748 749 750 751 752

	/*
	 * 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;
	}
753 754 755 756 757 758

	/*
	 * 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
759 760 761 762 763 764 765 766 767
	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;
	}
768

769 770
	acpi_gpiochip_request_interrupts(gpiochip);

771 772
	return 0;
}
773
EXPORT_SYMBOL_GPL(_gpiochip_irqchip_add);
774 775 776 777 778 779 780

#else /* CONFIG_GPIOLIB_IRQCHIP */

static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) {}

#endif /* CONFIG_GPIOLIB_IRQCHIP */

781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802
/**
 * gpiochip_generic_request() - request the gpio function for a pin
 * @chip: the gpiochip owning the GPIO
 * @offset: the offset of the GPIO to request for GPIO function
 */
int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset)
{
	return pinctrl_request_gpio(chip->base + offset);
}
EXPORT_SYMBOL_GPL(gpiochip_generic_request);

/**
 * gpiochip_generic_free() - free the gpio function from a pin
 * @chip: the gpiochip to request the gpio function for
 * @offset: the offset of the GPIO to free from GPIO function
 */
void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset)
{
	pinctrl_free_gpio(chip->base + offset);
}
EXPORT_SYMBOL_GPL(gpiochip_generic_free);

803
#ifdef CONFIG_PINCTRL
804

805 806 807
/**
 * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping
 * @chip: the gpiochip to add the range for
808
 * @pctldev: the pin controller to map to
809 810 811 812 813 814 815 816 817 818 819 820
 * @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) {
821
		chip_err(chip, "failed to allocate pin ranges\n");
822 823 824 825 826 827 828 829 830 831 832 833 834
		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);
835 836
	if (ret < 0) {
		kfree(pin_range);
837
		return ret;
838
	}
839 840 841

	pinctrl_add_gpio_range(pctldev, &pin_range->range);

842 843
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PINGRP %s\n",
		 gpio_offset, gpio_offset + pin_range->range.npins - 1,
844 845 846 847 848 849 850 851
		 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);

852 853 854 855
/**
 * 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
856 857
 * @gpio_offset: the start offset in the current gpio_chip number space
 * @pin_offset: the start offset in the pin controller number space
858 859 860
 * @npins: the number of pins from the offset of each pin space (GPIO and
 *	pin controller) to accumulate in this range
 */
861
int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
862
			   unsigned int gpio_offset, unsigned int pin_offset,
863
			   unsigned int npins)
864 865
{
	struct gpio_pin_range *pin_range;
866
	int ret;
867

868
	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
869
	if (!pin_range) {
870
		chip_err(chip, "failed to allocate pin ranges\n");
871
		return -ENOMEM;
872 873
	}

874
	/* Use local offset as range ID */
875
	pin_range->range.id = gpio_offset;
876
	pin_range->range.gc = chip;
877
	pin_range->range.name = chip->label;
878 879
	pin_range->range.base = chip->base + gpio_offset;
	pin_range->range.pin_base = pin_offset;
880
	pin_range->range.npins = npins;
Linus Walleij's avatar
Linus Walleij committed
881
	pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
882
			&pin_range->range);
883
	if (IS_ERR(pin_range->pctldev)) {
884
		ret = PTR_ERR(pin_range->pctldev);
885
		chip_err(chip, "could not create pin range\n");
886
		kfree(pin_range);
887
		return ret;
888
	}
889 890
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PIN %d->%d\n",
		 gpio_offset, gpio_offset + npins - 1,
891 892
		 pinctl_name,
		 pin_offset, pin_offset + npins - 1);
893 894

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

	return 0;
897
}
898
EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
899

900 901 902 903
/**
 * gpiochip_remove_pin_ranges() - remove all the GPIO <-> pin mappings
 * @chip: the chip to remove all the mappings for
 */
904 905 906 907 908 909 910 911
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);
912
		kfree(pin_range);
913 914
	}
}
915 916 917
EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);

#endif /* CONFIG_PINCTRL */
918

919 920 921 922
/* 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.
 */
923
static int __gpiod_request(struct gpio_desc *desc, const char *label)
924
{
925 926
	struct gpio_chip	*chip = desc->chip;
	int			status;
927 928
	unsigned long		flags;

929 930
	spin_lock_irqsave(&gpio_lock, flags);

931
	/* NOTE:  gpio_request() can be called in early boot,
David Brownell's avatar
David Brownell committed
932
	 * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
933 934 935 936 937
	 */

	if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
		desc_set_label(desc, label ? : "?");
		status = 0;
938
	} else {
939
		status = -EBUSY;
940
		goto done;
David Brownell's avatar
David Brownell committed
941 942 943 944 945
	}

	if (chip->request) {
		/* chip->request may sleep */
		spin_unlock_irqrestore(&gpio_lock, flags);
946
		status = chip->request(chip, gpio_chip_hwgpio(desc));
David Brownell's avatar
David Brownell committed
947 948 949 950 951
		spin_lock_irqsave(&gpio_lock, flags);

		if (status < 0) {
			desc_set_label(desc, NULL);
			clear_bit(FLAG_REQUESTED, &desc->flags);
952
			goto done;
David Brownell's avatar
David Brownell committed
953
		}
954
	}
955 956 957
	if (chip->get_direction) {
		/* chip->get_direction may sleep */
		spin_unlock_irqrestore(&gpio_lock, flags);
958
		gpiod_get_direction(desc);
959 960
		spin_lock_irqsave(&gpio_lock, flags);
	}
961
done:
962 963 964 965 966 967 968 969
	if (status < 0) {
		/* Clear flags that might have been set by the caller before
		 * requesting the GPIO.
		 */
		clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
		clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
		clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
	}
970 971 972 973
	spin_unlock_irqrestore(&gpio_lock, flags);
	return status;
}

974
int gpiod_request(struct gpio_desc *desc, const char *label)
975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993
{
	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);
	}

994 995
done:
	if (status)
996
		gpiod_dbg(desc, "%s: status %d\n", __func__, status);
997

998 999
	return status;
}
1000

1001
static bool __gpiod_free(struct gpio_desc *desc)
1002
{
1003
	bool			ret = false;
1004
	unsigned long		flags;
David Brownell's avatar
David Brownell committed
1005
	struct gpio_chip	*chip;
1006

1007 1008
	might_sleep();

1009
	gpiod_unexport(desc);
David Brownell's avatar
David Brownell committed
1010

1011 1012
	spin_lock_irqsave(&gpio_lock, flags);

David Brownell's avatar
David Brownell committed
1013 1014 1015 1016
	chip = desc->chip;
	if (chip && test_bit(FLAG_REQUESTED, &desc->flags)) {
		if (chip->free) {
			spin_unlock_irqrestore(&gpio_lock, flags);
1017
			might_sleep_if(chip->can_sleep);
1018
			chip->free(chip, gpio_chip_hwgpio(desc));
David Brownell's avatar
David Brownell committed
1019 1020
			spin_lock_irqsave(&gpio_lock, flags);
		}
1021
		desc_set_label(desc, NULL);
1022
		clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
David Brownell's avatar
David Brownell committed
1023
		clear_bit(FLAG_REQUESTED, &desc->flags);
1024
		clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
1025
		clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
1026
		clear_bit(FLAG_IS_HOGGED, &desc->flags);
1027 1028
		ret = true;
	}
1029 1030

	spin_unlock_irqrestore(&gpio_lock, flags);
1031 1032 1033
	return ret;
}

1034
void gpiod_free(struct gpio_desc *desc)
1035 1036 1037 1038 1039
{
	if (desc && __gpiod_free(desc))
		module_put(desc->chip->owner);
	else
		WARN_ON(extra_checks);
1040
}
1041