gpiolib.c 71.6 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
#include <linux/idr.h>
20

21 22
#include "gpiolib.h"

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

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


/* 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

46 47 48
/* Device and char device-related information */
static DEFINE_IDA(gpio_ida);

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

55 56
static DEFINE_MUTEX(gpio_lookup_lock);
static LIST_HEAD(gpio_lookup_list);
57
LIST_HEAD(gpio_devices);
58 59 60 61 62

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


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

68 69 70
/**
 * Convert a GPIO number to its descriptor
 */
71
struct gpio_desc *gpio_to_desc(unsigned gpio)
72
{
73
	struct gpio_device *gdev;
74 75 76 77
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);

78 79 80
	list_for_each_entry(gdev, &gpio_devices, list) {
		if (gdev->chip->base <= gpio &&
		    gdev->chip->base + gdev->chip->ngpio > gpio) {
81
			spin_unlock_irqrestore(&gpio_lock, flags);
82
			return &gdev->chip->desc[gpio - gdev->chip->base];
83 84 85 86 87
		}
	}

	spin_unlock_irqrestore(&gpio_lock, flags);

88 89 90
	if (!gpio_is_valid(gpio))
		WARN(1, "invalid GPIO %d\n", gpio);

91
	return NULL;
92
}
93
EXPORT_SYMBOL_GPL(gpio_to_desc);
94

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

104
	return &chip->desc[hwnum];
105
}
106 107 108 109 110 111

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


119 120 121 122 123
/**
 * 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)
124
{
125
	return desc ? desc->chip : NULL;
126
}
127
EXPORT_SYMBOL_GPL(gpiod_to_chip);
128

129 130 131
/* dynamic allocation of GPIOs, e.g. on a hotplugged device */
static int gpiochip_find_base(int ngpio)
{
132
	struct gpio_device *gdev;
133
	int base = ARCH_NR_GPIOS - ngpio;
134

135
	list_for_each_entry_reverse(gdev, &gpio_devices, list) {
136
		/* found a free space? */
137
		if (gdev->chip->base + gdev->chip->ngpio <= base)
138 139 140
			break;
		else
			/* nope, check the space right before the chip */
141
			base = gdev->chip->base - ngpio;
142 143
	}

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

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

167 168
	chip = gpiod_to_chip(desc);
	offset = gpio_chip_hwgpio(desc);
169 170 171 172

	if (!chip->get_direction)
		return status;

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

187 188
/*
 * Add a new chip to the global chips list, keeping the list of chips sorted
189
 * by range(means [base, base + ngpio - 1]) order.
190 191 192 193
 *
 * Return -EBUSY if the new chip overlaps with some other chip's integer
 * space.
 */
194
static int gpiodev_add_to_list(struct gpio_device *gdev)
195
{
196 197 198 199 200
	struct gpio_device *iterator;
	struct gpio_device *previous = NULL;

	if (!gdev->chip)
		return -EINVAL;
201

202 203
	if (list_empty(&gpio_devices)) {
		list_add_tail(&gdev->list, &gpio_devices);
204
		return 0;
205 206
	}

207 208 209 210 211 212 213 214 215
	list_for_each_entry(iterator, &gpio_devices, list) {
		/*
		 * The list may contain dangling GPIO devices with no
		 * live chip assigned.
		 */
		if (!iterator->chip)
			continue;
		if (iterator->chip->base >=
		    gdev->chip->base + gdev->chip->ngpio) {
216 217 218 219
			/*
			 * Iterator is the first GPIO chip so there is no
			 * previous one
			 */
220
			if (!previous) {
221 222 223 224 225 226 227
				goto found;
			} else {
				/*
				 * We found a valid range(means
				 * [base, base + ngpio - 1]) between previous
				 * and iterator chip.
				 */
228 229
				if (previous->chip->base + previous->chip->ngpio
						<= gdev->chip->base)
230 231
					goto found;
			}
232
		}
233
		previous = iterator;
234 235
	}

236 237 238 239 240 241
	/*
	 * 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.
	 */

242 243 244
	iterator = list_last_entry(&gpio_devices, struct gpio_device, list);
	if (iterator->chip->base + iterator->chip->ngpio <= gdev->chip->base) {
		list_add(&gdev->list, &iterator->list);
245
		return 0;
246 247
	}

248
	dev_err(&gdev->dev,
249 250
	       "GPIO integer space overlap, cannot add chip\n");
	return -EBUSY;
251

252
found:
253
	list_add_tail(&gdev->list, &iterator->list);
254
	return 0;
255 256
}

257 258 259 260 261
/**
 * Convert a GPIO name to its descriptor
 */
static struct gpio_desc *gpio_name_to_desc(const char * const name)
{
262
	struct gpio_device *gdev;
263 264 265 266
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);

267
	list_for_each_entry(gdev, &gpio_devices, list) {
268 269
		int i;

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

273
			if (!gpio->name || !name)
274 275 276 277 278 279 280 281 282 283 284 285 286 287
				continue;

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

	spin_unlock_irqrestore(&gpio_lock, flags);

	return NULL;
}

288 289 290 291
/*
 * Takes the names from gc->names and checks if they are all unique. If they
 * are, they are assigned to their gpio descriptors.
 *
292
 * Warning if one of the names is already used for a different GPIO.
293 294 295 296 297 298 299 300 301 302 303 304 305
 */
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]);
306
		if (gpio)
307 308
			dev_warn(&gc->gpiodev->dev,
				 "Detected name collision for GPIO name '%s'\n",
309
				 gc->names[i]);
310 311 312 313 314 315 316 317 318
	}

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

	return 0;
}

319 320 321 322 323 324 325 326
static void gpiodevice_release(struct device *dev)
{
	struct gpio_device *gdev = dev_get_drvdata(dev);

	list_del(&gdev->list);
	ida_simple_remove(&gpio_ida, gdev->id);
}

327
/**
328
 * gpiochip_add_data() - register a gpio_chip
329
 * @chip: the chip to register, with chip->base initialized
330
 * Context: potentially before irqs will work
331 332 333 334
 *
 * 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.
335
 *
336
 * When gpiochip_add_data() is called very early during boot, so that GPIOs
337
 * can be freely used, the chip->parent device must be registered before
David Brownell's avatar
David Brownell committed
338 339 340
 * the gpio framework's arch_initcall().  Otherwise sysfs initialization
 * for GPIOs will fail rudely.
 *
341 342
 * If chip->base is negative, this requests dynamic assignment of
 * a range of valid GPIOs.
343
 */
344
int gpiochip_add_data(struct gpio_chip *chip, void *data)
345 346 347
{
	unsigned long	flags;
	int		status = 0;
348
	unsigned	i;
349
	int		base = chip->base;
350
	struct gpio_desc *descs;
351
	struct gpio_device *gdev;
352

353 354 355 356 357 358
	/*
	 * First: allocate and populate the internal stat container, and
	 * set up the struct device.
	 */
	gdev = kmalloc(sizeof(*gdev), GFP_KERNEL);
	if (!gdev)
359
		return -ENOMEM;
360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
	gdev->chip = chip;
	chip->gpiodev = gdev;
	if (chip->parent) {
		gdev->dev.parent = chip->parent;
		gdev->dev.of_node = chip->parent->of_node;
	} else {
#ifdef CONFIG_OF_GPIO
	/* If the gpiochip has an assigned OF node this takes precedence */
		if (chip->of_node)
			gdev->dev.of_node = chip->of_node;
#endif
	}
	gdev->id = ida_simple_get(&gpio_ida, 0, 0, GFP_KERNEL);
	if (gdev->id < 0) {
		status = gdev->id;
		goto err_free_gdev;
	}
	dev_set_name(&gdev->dev, "gpiochip%d", gdev->id);
	device_initialize(&gdev->dev);
	dev_set_drvdata(&gdev->dev, gdev);
	if (chip->parent && chip->parent->driver)
		gdev->owner = chip->parent->driver->owner;
	else if (chip->owner)
		/* TODO: remove chip->owner */
		gdev->owner = chip->owner;
	else
		gdev->owner = THIS_MODULE;
387

388 389 390 391 392 393 394 395
	/* FIXME: devm_kcalloc() these and move to gpio_device */
	descs = kcalloc(chip->ngpio, sizeof(descs[0]), GFP_KERNEL);
	if (!descs) {
		status = -ENOMEM;
		goto err_free_gdev;
	}

	/* FIXME: move driver data into gpio_device dev_set_drvdata() */
396 397
	chip->data = data;

398 399
	if (chip->ngpio == 0) {
		chip_err(chip, "tried to insert a GPIO chip with zero lines\n");
400 401
		status = -EINVAL;
		goto err_free_descs;
402 403
	}

404 405
	spin_lock_irqsave(&gpio_lock, flags);

406 407 408 409
	if (base < 0) {
		base = gpiochip_find_base(chip->ngpio);
		if (base < 0) {
			status = base;
410 411
			spin_unlock_irqrestore(&gpio_lock, flags);
			goto err_free_descs;
412 413 414 415
		}
		chip->base = base;
	}

416
	status = gpiodev_add_to_list(gdev);
417 418 419 420
	if (status) {
		spin_unlock_irqrestore(&gpio_lock, flags);
		goto err_free_descs;
	}
421

422 423
	for (i = 0; i < chip->ngpio; i++) {
		struct gpio_desc *desc = &descs[i];
424

425
		/* REVISIT: maybe a pointer to gpio_device is better */
426 427 428 429 430 431 432 433 434
		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;
435
	}
436 437
	chip->desc = descs;

438 439
	spin_unlock_irqrestore(&gpio_lock, flags);

440
#ifdef CONFIG_PINCTRL
441
	/* FIXME: move pin ranges to gpio_device */
442 443 444
	INIT_LIST_HEAD(&chip->pin_ranges);
#endif

445 446 447 448
	status = gpiochip_set_desc_names(chip);
	if (status)
		goto err_remove_from_list;

449 450 451 452
	status = of_gpiochip_add(chip);
	if (status)
		goto err_remove_chip;

453
	acpi_gpiochip_add(chip);
454

455
	status = device_add(&gdev->dev);
456 457
	if (status)
		goto err_remove_chip;
458

459 460 461 462 463 464 465
	status = gpiochip_sysfs_register(chip);
	if (status)
		goto err_remove_device;

	/* From this point, the .release() function cleans up gpio_device */
	gdev->dev.release = gpiodevice_release;
	get_device(&gdev->dev);
466
	pr_debug("%s: registered GPIOs %d to %d on device: %s\n", __func__,
467 468 469
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");

470
	return 0;
471

472 473
err_remove_device:
	device_del(&gdev->dev);
474 475
err_remove_chip:
	acpi_gpiochip_remove(chip);
476
	gpiochip_free_hogs(chip);
477
	of_gpiochip_remove(chip);
478
err_remove_from_list:
479
	spin_lock_irqsave(&gpio_lock, flags);
480
	list_del(&gdev->list);
481
	spin_unlock_irqrestore(&gpio_lock, flags);
482
	chip->desc = NULL;
483
err_free_descs:
484
	kfree(descs);
485 486 487
err_free_gdev:
	ida_simple_remove(&gpio_ida, gdev->id);
	kfree(gdev);
488
	/* failures here can mean systems won't boot... */
489
	pr_err("%s: GPIOs %d..%d (%s) failed to register\n", __func__,
490 491
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");
492 493
	return status;
}
494
EXPORT_SYMBOL_GPL(gpiochip_add_data);
495 496 497 498 499 500 501

/**
 * gpiochip_remove() - unregister a gpio_chip
 * @chip: the chip to unregister
 *
 * A gpio_chip with any GPIOs still requested may not be removed.
 */
502
void gpiochip_remove(struct gpio_chip *chip)
503
{
504
	struct gpio_device *gdev = chip->gpiodev;
Johan Hovold's avatar
Johan Hovold committed
505
	struct gpio_desc *desc;
506 507
	unsigned long	flags;
	unsigned	id;
Johan Hovold's avatar
Johan Hovold committed
508
	bool		requested = false;
509

510 511
	/* Numb the device, cancelling all outstanding operations */
	gdev->chip = NULL;
512

513 514
	/* FIXME: should the legacy sysfs handling be moved to gpio_device? */
	gpiochip_sysfs_unregister(chip);
515
	gpiochip_irqchip_remove(chip);
516
	acpi_gpiochip_remove(chip);
517
	gpiochip_remove_pin_ranges(chip);
518
	gpiochip_free_hogs(chip);
519 520
	of_gpiochip_remove(chip);

521
	spin_lock_irqsave(&gpio_lock, flags);
522
	for (id = 0; id < chip->ngpio; id++) {
Johan Hovold's avatar
Johan Hovold committed
523 524 525 526
		desc = &chip->desc[id];
		desc->chip = NULL;
		if (test_bit(FLAG_REQUESTED, &desc->flags))
			requested = true;
527 528
	}
	spin_unlock_irqrestore(&gpio_lock, flags);
529

Johan Hovold's avatar
Johan Hovold committed
530
	if (requested)
531
		dev_crit(&chip->gpiodev->dev,
532
			 "REMOVING GPIOCHIP WITH GPIOS STILL REQUESTED\n");
Johan Hovold's avatar
Johan Hovold committed
533

534
	/* FIXME: need to be moved to gpio_device and held there */
535 536
	kfree(chip->desc);
	chip->desc = NULL;
537 538 539 540 541 542 543 544

	/*
	 * The gpiochip side puts its use of the device to rest here:
	 * if there are no userspace clients, the chardev and device will
	 * be removed, else it will be dangling until the last user is
	 * gone.
	 */
	put_device(&gdev->dev);
545 546 547
}
EXPORT_SYMBOL_GPL(gpiochip_remove);

548 549 550 551 552 553 554 555 556 557 558
/**
 * 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.
 */
559
struct gpio_chip *gpiochip_find(void *data,
560
				int (*match)(struct gpio_chip *chip,
561
					     void *data))
562
{
563
	struct gpio_device *gdev;
564
	struct gpio_chip *chip;
565 566 567
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);
568 569
	list_for_each_entry(gdev, &gpio_devices, list)
		if (match(gdev->chip, data))
570
			break;
571 572

	/* No match? */
573
	if (&gdev->list == &gpio_devices)
574
		chip = NULL;
575 576 577
	else
		chip = gdev->chip;

578 579 580 581
	spin_unlock_irqrestore(&gpio_lock, flags);

	return chip;
}
Jean Delvare's avatar
Jean Delvare committed
582
EXPORT_SYMBOL_GPL(gpiochip_find);
583

584 585 586 587 588 589 590 591 592 593 594 595
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);
}

596 597 598 599 600 601 602
#ifdef CONFIG_GPIOLIB_IRQCHIP

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

/**
603 604 605
 * 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
606 607 608
 * @parent_irq: the irq number corresponding to the parent IRQ for this
 * chained irqchip
 * @parent_handler: the parent interrupt handler for the accumulated IRQ
609 610
 * coming out of the gpiochip. If the interrupt is nested rather than
 * cascaded, pass NULL in this handler argument
611 612 613 614 615 616
 */
void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
				  struct irq_chip *irqchip,
				  int parent_irq,
				  irq_flow_handler_t parent_handler)
{
617 618 619 620 621
	unsigned int offset;

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

625 626 627 628 629 630 631 632 633 634 635
	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.
		 */
636 637
		irq_set_chained_handler_and_data(parent_irq, parent_handler,
						 gpiochip);
638 639

		gpiochip->irq_parent = parent_irq;
640
	}
641 642 643 644 645

	/* 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);
646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664
}
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);
665 666 667 668 669
	/*
	 * 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);
670
	irq_set_chip_and_handler(irq, chip->irqchip, chip->irq_handler);
671
	/* Chips that can sleep need nested thread handlers */
672
	if (chip->can_sleep && !chip->irq_not_threaded)
673
		irq_set_nested_thread(irq, 1);
674
	irq_set_noprobe(irq);
675

676 677 678 679 680 681
	/*
	 * 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);
682 683 684 685

	return 0;
}

Linus Walleij's avatar
Linus Walleij committed
686 687
static void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq)
{
688 689 690 691
	struct gpio_chip *chip = d->host_data;

	if (chip->can_sleep)
		irq_set_nested_thread(irq, 0);
Linus Walleij's avatar
Linus Walleij committed
692 693 694 695
	irq_set_chip_and_handler(irq, NULL, NULL);
	irq_set_chip_data(irq, NULL);
}

696 697
static const struct irq_domain_ops gpiochip_domain_ops = {
	.map	= gpiochip_irq_map,
Linus Walleij's avatar
Linus Walleij committed
698
	.unmap	= gpiochip_irq_unmap,
699 700 701 702 703 704 705 706
	/* 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);

707
	if (!try_module_get(chip->gpiodev->owner))
708 709
		return -ENODEV;

710
	if (gpiochip_lock_as_irq(chip, d->hwirq)) {
711 712 713
		chip_err(chip,
			"unable to lock HW IRQ %lu for IRQ\n",
			d->hwirq);
714
		module_put(chip->gpiodev->owner);
715 716 717 718 719 720 721 722 723
		return -EINVAL;
	}
	return 0;
}

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

724
	gpiochip_unlock_as_irq(chip, d->hwirq);
725
	module_put(chip->gpiodev->owner);
726 727 728 729 730 731 732 733 734 735 736 737 738 739 740
}

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
741 742
	unsigned int offset;

743 744
	acpi_gpiochip_free_interrupts(gpiochip);

745 746 747 748 749
	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
750 751 752
	/* Remove all IRQ mappings and delete the domain */
	if (gpiochip->irqdomain) {
		for (offset = 0; offset < gpiochip->ngpio; offset++)
753 754
			irq_dispose_mapping(
				irq_find_mapping(gpiochip->irqdomain, offset));
755
		irq_domain_remove(gpiochip->irqdomain);
Linus Walleij's avatar
Linus Walleij committed
756
	}
757 758 759 760 761 762 763 764 765 766 767 768 769 770 771

	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)
772 773
 * @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.
774
 * @lock_key: lockdep class
775 776 777 778 779
 *
 * 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
780
 * need to use gpiochip_get_data() to get their local state containers back
781 782 783 784 785
 * 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
786 787
 * This function will handle two cell:ed simple IRQs and assumes all
 * the pins on the gpiochip can generate a unique IRQ. Everything else
788 789
 * need to be open coded.
 */
790 791 792 793 794 795
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)
796 797 798
{
	struct device_node *of_node;
	unsigned int offset;
Linus Walleij's avatar
Linus Walleij committed
799
	unsigned irq_base = 0;
800 801 802 803

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

804
	if (!gpiochip->parent) {
805 806 807
		pr_err("missing gpiochip .dev parent pointer\n");
		return -EINVAL;
	}
808
	of_node = gpiochip->parent->of_node;
809 810
#ifdef CONFIG_OF_GPIO
	/*
811
	 * If the gpiochip has an assigned OF node this takes precedence
812 813
	 * FIXME: get rid of this and use gpiochip->parent->of_node
	 * everywhere
814 815 816 817 818 819 820 821
	 */
	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;
822
	gpiochip->lock_key = lock_key;
823 824 825 826 827 828 829
	gpiochip->irqdomain = irq_domain_add_simple(of_node,
					gpiochip->ngpio, first_irq,
					&gpiochip_domain_ops, gpiochip);
	if (!gpiochip->irqdomain) {
		gpiochip->irqchip = NULL;
		return -EINVAL;
	}
830 831 832 833 834 835 836 837 838 839

	/*
	 * 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;
	}
840 841 842 843 844 845

	/*
	 * 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
846 847 848 849 850 851 852 853 854
	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;
	}
855

856 857
	acpi_gpiochip_request_interrupts(gpiochip);

858 859
	return 0;
}
860
EXPORT_SYMBOL_GPL(_gpiochip_irqchip_add);
861 862 863 864 865 866 867

#else /* CONFIG_GPIOLIB_IRQCHIP */

static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) {}

#endif /* CONFIG_GPIOLIB_IRQCHIP */

868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889
/**
 * 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);

890
#ifdef CONFIG_PINCTRL
891

892 893 894
/**
 * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping
 * @chip: the gpiochip to add the range for
895
 * @pctldev: the pin controller to map to
896 897 898 899 900 901 902 903 904 905 906 907
 * @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) {
908
		chip_err(chip, "failed to allocate pin ranges\n");
909 910 911 912 913 914 915 916 917 918 919 920 921
		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);
922 923
	if (ret < 0) {
		kfree(pin_range);
924
		return ret;
925
	}
926 927 928

	pinctrl_add_gpio_range(pctldev, &pin_range->range);

929 930
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PINGRP %s\n",
		 gpio_offset, gpio_offset + pin_range->range.npins - 1,
931 932 933 934 935 936 937 938
		 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);

939 940 941 942
/**
 * 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
943 944
 * @gpio_offset: the start offset in the current gpio_chip number space
 * @pin_offset: the start offset in the pin controller number space
945 946 947
 * @npins: the number of pins from the offset of each pin space (GPIO and
 *	pin controller) to accumulate in this range
 */
948
int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
949
			   unsigned int gpio_offset, unsigned int pin_offset,
950
			   unsigned int npins)
951 952
{
	struct gpio_pin_range *pin_range;
953
	int ret;
954

955
	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
956
	if (!pin_range) {
957
		chip_err(chip, "failed to allocate pin ranges\n");
958
		return -ENOMEM;
959 960
	}

961
	/* Use local offset as range ID */
962
	pin_range->range.id = gpio_offset;
963
	pin_range->range.gc = chip;
964
	pin_range->range.name = chip->label;
965 966
	pin_range->range.base = chip->base + gpio_offset;
	pin_range->range.pin_base = pin_offset;
967
	pin_range->range.npins = npins;
Linus Walleij's avatar
Linus Walleij committed
968
	pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
969
			&pin_range->range);
970
	if (IS_ERR(pin_range->pctldev)) {
971
		ret = PTR_ERR(pin_range->pctldev);
972
		chip_err(chip, "could not create pin range\n");
973
		kfree(pin_range);
974
		return ret;
975
	}
976 977
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PIN %d->%d\n",
		 gpio_offset, gpio_offset + npins - 1,
978 979
		 pinctl_name,
		 pin_offset, pin_offset + npins - 1);
980 981

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

	return 0;
984
}
985
EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
986

987 988 989 990
/**
 * gpiochip_remove_pin_ranges() - remove all the GPIO <-> pin mappings
 * @chip: the chip to remove all the mappings for
 */
991 992 993 994 995 996 997 998
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);
999
		kfree(pin_range);
1000 1001
	}
}
1002 1003 1004
EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);

#endif /* CONFIG_PINCTRL */
1005

1006 1007 1008 1009
/* 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.
 */
1010
static int __gpiod_request(struct gpio_desc *desc, const char *label)
1011
{
1012 1013
	struct gpio_chip	*chip = desc->chip;
	int			status;
1014 1015
	unsigned long		flags;

1016 1017
	spin_lock_irqsave(&gpio_lock, flags);

1018
	/* NOTE:  gpio_request() can be called in early boot,
David Brownell's avatar
David Brownell committed
1019
	 * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
1020 1021 1022 1023 1024
	 */

	if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
		desc_set_label(desc, label ? : "?");
		status = 0;
1025
	} else {
1026
		status = -EBUSY;
1027
		goto done;
David Brownell's avatar
David Brownell committed
1028 1029 1030 1031 1032
	}

	if (chip->request) {
		/* chip->request may sleep */
		spin_unlock_irqrestore(&gpio_lock, flags);