gpiolib.c 65.1 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
 * Get the GPIO descriptor corresponding to the given hw number for this chip.
94
 */
95 96
struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
				    u16 hwnum)
97
{
98
	if (hwnum >= chip->ngpio)
99
		return ERR_PTR(-EINVAL);
100

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

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


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

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

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

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

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

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

	if (!chip->get_direction)
		return status;

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

184 185 186 187 188 189 190 191 192
/*
 * 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)
{
193
	struct list_head *pos;
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
	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;
}

221 222 223
/**
 * gpiochip_add() - register a gpio_chip
 * @chip: the chip to register, with chip->base initialized
224
 * Context: potentially before irqs will work
225 226 227 228
 *
 * 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.
229
 *
David Brownell's avatar
David Brownell committed
230 231 232 233 234
 * 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.
 *
235 236
 * If chip->base is negative, this requests dynamic assignment of
 * a range of valid GPIOs.
237 238 239 240 241 242
 */
int gpiochip_add(struct gpio_chip *chip)
{
	unsigned long	flags;
	int		status = 0;
	unsigned	id;
243
	int		base = chip->base;
244
	struct gpio_desc *descs;
245

246 247 248
	descs = kcalloc(chip->ngpio, sizeof(descs[0]), GFP_KERNEL);
	if (!descs)
		return -ENOMEM;
249 250 251

	spin_lock_irqsave(&gpio_lock, flags);

252 253 254 255
	if (base < 0) {
		base = gpiochip_find_base(chip->ngpio);
		if (base < 0) {
			status = base;
256 257
			spin_unlock_irqrestore(&gpio_lock, flags);
			goto err_free_descs;
258 259 260 261
		}
		chip->base = base;
	}

262
	status = gpiochip_add_to_list(chip);
263 264 265 266
	if (status) {
		spin_unlock_irqrestore(&gpio_lock, flags);
		goto err_free_descs;
	}
267

268 269 270 271 272 273 274 275 276 277 278 279
	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;
280 281
	}

282 283
	chip->desc = descs;

284 285
	spin_unlock_irqrestore(&gpio_lock, flags);

286 287 288 289
#ifdef CONFIG_PINCTRL
	INIT_LIST_HEAD(&chip->pin_ranges);
#endif

290 291 292
	if (!chip->owner && chip->dev && chip->dev->driver)
		chip->owner = chip->dev->driver->owner;

293 294 295 296
	status = of_gpiochip_add(chip);
	if (status)
		goto err_remove_chip;

297
	acpi_gpiochip_add(chip);
298

299
	status = gpiochip_sysfs_register(chip);
300 301
	if (status)
		goto err_remove_chip;
302

303
	pr_debug("%s: registered GPIOs %d to %d on device: %s\n", __func__,
304 305 306
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");

307
	return 0;
308

309 310
err_remove_chip:
	acpi_gpiochip_remove(chip);
311
	gpiochip_free_hogs(chip);
312 313 314
	of_gpiochip_remove(chip);
	spin_lock_irqsave(&gpio_lock, flags);
	list_del(&chip->list);
315
	spin_unlock_irqrestore(&gpio_lock, flags);
316
	chip->desc = NULL;
317
err_free_descs:
318 319
	kfree(descs);

320
	/* failures here can mean systems won't boot... */
321
	pr_err("%s: GPIOs %d..%d (%s) failed to register\n", __func__,
322 323
		chip->base, chip->base + chip->ngpio - 1,
		chip->label ? : "generic");
324 325 326 327 328 329 330 331 332 333
	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.
 */
334
void gpiochip_remove(struct gpio_chip *chip)
335
{
Johan Hovold's avatar
Johan Hovold committed
336
	struct gpio_desc *desc;
337 338
	unsigned long	flags;
	unsigned	id;
Johan Hovold's avatar
Johan Hovold committed
339
	bool		requested = false;
340

341
	gpiochip_sysfs_unregister(chip);
342

343 344
	gpiochip_irqchip_remove(chip);

345
	acpi_gpiochip_remove(chip);
346
	gpiochip_remove_pin_ranges(chip);
347
	gpiochip_free_hogs(chip);
348 349
	of_gpiochip_remove(chip);

350
	spin_lock_irqsave(&gpio_lock, flags);
351
	for (id = 0; id < chip->ngpio; id++) {
Johan Hovold's avatar
Johan Hovold committed
352 353 354 355
		desc = &chip->desc[id];
		desc->chip = NULL;
		if (test_bit(FLAG_REQUESTED, &desc->flags))
			requested = true;
356
	}
357
	list_del(&chip->list);
358
	spin_unlock_irqrestore(&gpio_lock, flags);
359

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

363 364
	kfree(chip->desc);
	chip->desc = NULL;
365 366 367
}
EXPORT_SYMBOL_GPL(gpiochip_remove);

368 369 370 371 372 373 374 375 376 377 378
/**
 * 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.
 */
379
struct gpio_chip *gpiochip_find(void *data,
380
				int (*match)(struct gpio_chip *chip,
381
					     void *data))
382
{
383
	struct gpio_chip *chip;
384 385 386
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);
387 388
	list_for_each_entry(chip, &gpio_chips, list)
		if (match(chip, data))
389
			break;
390 391 392 393

	/* No match? */
	if (&chip->list == &gpio_chips)
		chip = NULL;
394 395 396 397
	spin_unlock_irqrestore(&gpio_lock, flags);

	return chip;
}
Jean Delvare's avatar
Jean Delvare committed
398
EXPORT_SYMBOL_GPL(gpiochip_find);
399

400 401 402 403 404 405 406 407 408 409 410 411
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);
}

412 413 414 415 416 417 418
#ifdef CONFIG_GPIOLIB_IRQCHIP

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

/**
419 420 421
 * 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
422 423 424
 * @parent_irq: the irq number corresponding to the parent IRQ for this
 * chained irqchip
 * @parent_handler: the parent interrupt handler for the accumulated IRQ
425 426
 * coming out of the gpiochip. If the interrupt is nested rather than
 * cascaded, pass NULL in this handler argument
427 428 429 430 431 432
 */
void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
				  struct irq_chip *irqchip,
				  int parent_irq,
				  irq_flow_handler_t parent_handler)
{
433 434 435 436 437
	unsigned int offset;

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

441 442 443 444 445 446 447 448 449 450 451
	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.
		 */
452 453
		irq_set_chained_handler_and_data(parent_irq, parent_handler,
						 gpiochip);
454 455

		gpiochip->irq_parent = parent_irq;
456
	}
457 458 459 460 461

	/* 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);
462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480
}
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);
481 482 483 484 485
	/*
	 * 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);
486
	irq_set_chip_and_handler(irq, chip->irqchip, chip->irq_handler);
487
	/* Chips that can sleep need nested thread handlers */
488
	if (chip->can_sleep && !chip->irq_not_threaded)
489
		irq_set_nested_thread(irq, 1);
490
	irq_set_noprobe(irq);
491

492 493 494 495 496 497
	/*
	 * 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);
498 499 500 501

	return 0;
}

Linus Walleij's avatar
Linus Walleij committed
502 503
static void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq)
{
504 505 506 507
	struct gpio_chip *chip = d->host_data;

	if (chip->can_sleep)
		irq_set_nested_thread(irq, 0);
Linus Walleij's avatar
Linus Walleij committed
508 509 510 511
	irq_set_chip_and_handler(irq, NULL, NULL);
	irq_set_chip_data(irq, NULL);
}

512 513
static const struct irq_domain_ops gpiochip_domain_ops = {
	.map	= gpiochip_irq_map,
Linus Walleij's avatar
Linus Walleij committed
514
	.unmap	= gpiochip_irq_unmap,
515 516 517 518 519 520 521 522
	/* 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);

523 524 525
	if (!try_module_get(chip->owner))
		return -ENODEV;

526
	if (gpiochip_lock_as_irq(chip, d->hwirq)) {
527 528 529
		chip_err(chip,
			"unable to lock HW IRQ %lu for IRQ\n",
			d->hwirq);
530
		module_put(chip->owner);
531 532 533 534 535 536 537 538 539
		return -EINVAL;
	}
	return 0;
}

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

540
	gpiochip_unlock_as_irq(chip, d->hwirq);
541
	module_put(chip->owner);
542 543 544 545 546 547 548 549 550 551 552 553 554 555 556
}

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
557 558
	unsigned int offset;

559 560
	acpi_gpiochip_free_interrupts(gpiochip);

561 562 563 564 565
	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
566 567 568
	/* Remove all IRQ mappings and delete the domain */
	if (gpiochip->irqdomain) {
		for (offset = 0; offset < gpiochip->ngpio; offset++)
569 570
			irq_dispose_mapping(
				irq_find_mapping(gpiochip->irqdomain, offset));
571
		irq_domain_remove(gpiochip->irqdomain);
Linus Walleij's avatar
Linus Walleij committed
572
	}
573 574 575 576 577 578 579 580 581 582 583 584 585 586 587

	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)
588 589
 * @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.
590
 * @lock_key: lockdep class
591 592 593 594 595 596 597 598 599 600 601
 *
 * 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
602 603
 * This function will handle two cell:ed simple IRQs and assumes all
 * the pins on the gpiochip can generate a unique IRQ. Everything else
604 605
 * need to be open coded.
 */
606 607 608 609 610 611
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)
612 613 614
{
	struct device_node *of_node;
	unsigned int offset;
Linus Walleij's avatar
Linus Walleij committed
615
	unsigned irq_base = 0;
616 617 618 619 620 621 622 623 624 625 626

	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
	/*
627
	 * If the gpiochip has an assigned OF node this takes precedence
628 629 630 631 632 633 634 635 636
	 * 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;
637
	gpiochip->lock_key = lock_key;
638 639 640 641 642 643 644
	gpiochip->irqdomain = irq_domain_add_simple(of_node,
					gpiochip->ngpio, first_irq,
					&gpiochip_domain_ops, gpiochip);
	if (!gpiochip->irqdomain) {
		gpiochip->irqchip = NULL;
		return -EINVAL;
	}
645 646 647 648 649 650 651 652 653 654

	/*
	 * 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;
	}
655 656 657 658 659 660

	/*
	 * 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
661 662 663 664 665 666 667 668 669
	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;
	}
670

671 672
	acpi_gpiochip_request_interrupts(gpiochip);

673 674
	return 0;
}
675
EXPORT_SYMBOL_GPL(_gpiochip_irqchip_add);
676 677 678 679 680 681 682

#else /* CONFIG_GPIOLIB_IRQCHIP */

static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) {}

#endif /* CONFIG_GPIOLIB_IRQCHIP */

683
#ifdef CONFIG_PINCTRL
684

685 686 687
/**
 * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping
 * @chip: the gpiochip to add the range for
688
 * @pctldev: the pin controller to map to
689 690 691 692 693 694 695 696 697 698 699 700
 * @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) {
701
		chip_err(chip, "failed to allocate pin ranges\n");
702 703 704 705 706 707 708 709 710 711 712 713 714
		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);
715 716
	if (ret < 0) {
		kfree(pin_range);
717
		return ret;
718
	}
719 720 721

	pinctrl_add_gpio_range(pctldev, &pin_range->range);

722 723
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PINGRP %s\n",
		 gpio_offset, gpio_offset + pin_range->range.npins - 1,
724 725 726 727 728 729 730 731
		 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);

732 733 734 735
/**
 * 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
736 737
 * @gpio_offset: the start offset in the current gpio_chip number space
 * @pin_offset: the start offset in the pin controller number space
738 739 740
 * @npins: the number of pins from the offset of each pin space (GPIO and
 *	pin controller) to accumulate in this range
 */
741
int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
742
			   unsigned int gpio_offset, unsigned int pin_offset,
743
			   unsigned int npins)
744 745
{
	struct gpio_pin_range *pin_range;
746
	int ret;
747

748
	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
749
	if (!pin_range) {
750
		chip_err(chip, "failed to allocate pin ranges\n");
751
		return -ENOMEM;
752 753
	}

754
	/* Use local offset as range ID */
755
	pin_range->range.id = gpio_offset;
756
	pin_range->range.gc = chip;
757
	pin_range->range.name = chip->label;
758 759
	pin_range->range.base = chip->base + gpio_offset;
	pin_range->range.pin_base = pin_offset;
760
	pin_range->range.npins = npins;
Linus Walleij's avatar
Linus Walleij committed
761
	pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
762
			&pin_range->range);
763
	if (IS_ERR(pin_range->pctldev)) {
764
		ret = PTR_ERR(pin_range->pctldev);
765
		chip_err(chip, "could not create pin range\n");
766
		kfree(pin_range);
767
		return ret;
768
	}
769 770
	chip_dbg(chip, "created GPIO range %d->%d ==> %s PIN %d->%d\n",
		 gpio_offset, gpio_offset + npins - 1,
771 772
		 pinctl_name,
		 pin_offset, pin_offset + npins - 1);
773 774

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

	return 0;
777
}
778
EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
779

780 781 782 783
/**
 * gpiochip_remove_pin_ranges() - remove all the GPIO <-> pin mappings
 * @chip: the chip to remove all the mappings for
 */
784 785 786 787 788 789 790 791
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);
792
		kfree(pin_range);
793 794
	}
}
795 796 797
EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);

#endif /* CONFIG_PINCTRL */
798

799 800 801 802
/* 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.
 */
803
static int __gpiod_request(struct gpio_desc *desc, const char *label)
804
{
805 806
	struct gpio_chip	*chip = desc->chip;
	int			status;
807 808
	unsigned long		flags;

809 810
	spin_lock_irqsave(&gpio_lock, flags);

811
	/* NOTE:  gpio_request() can be called in early boot,
David Brownell's avatar
David Brownell committed
812
	 * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
813 814 815 816 817
	 */

	if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
		desc_set_label(desc, label ? : "?");
		status = 0;
818
	} else {
819
		status = -EBUSY;
820
		goto done;
David Brownell's avatar
David Brownell committed
821 822 823 824 825
	}

	if (chip->request) {
		/* chip->request may sleep */
		spin_unlock_irqrestore(&gpio_lock, flags);
826
		status = chip->request(chip, gpio_chip_hwgpio(desc));
David Brownell's avatar
David Brownell committed
827 828 829 830 831
		spin_lock_irqsave(&gpio_lock, flags);

		if (status < 0) {
			desc_set_label(desc, NULL);
			clear_bit(FLAG_REQUESTED, &desc->flags);
832
			goto done;
David Brownell's avatar
David Brownell committed
833
		}
834
	}
835 836 837
	if (chip->get_direction) {
		/* chip->get_direction may sleep */
		spin_unlock_irqrestore(&gpio_lock, flags);
838
		gpiod_get_direction(desc);
839 840
		spin_lock_irqsave(&gpio_lock, flags);
	}
841 842 843 844 845
done:
	spin_unlock_irqrestore(&gpio_lock, flags);
	return status;
}

846
int gpiod_request(struct gpio_desc *desc, const char *label)
847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865
{
	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);
	}

866 867
done:
	if (status)
868
		gpiod_dbg(desc, "%s: status %d\n", __func__, status);
869

870 871
	return status;
}
872

873
static bool __gpiod_free(struct gpio_desc *desc)
874
{
875
	bool			ret = false;
876
	unsigned long		flags;
David Brownell's avatar
David Brownell committed
877
	struct gpio_chip	*chip;
878

879 880
	might_sleep();

881
	gpiod_unexport(desc);
David Brownell's avatar
David Brownell committed
882

883 884
	spin_lock_irqsave(&gpio_lock, flags);

David Brownell's avatar
David Brownell committed
885 886 887 888
	chip = desc->chip;
	if (chip && test_bit(FLAG_REQUESTED, &desc->flags)) {
		if (chip->free) {
			spin_unlock_irqrestore(&gpio_lock, flags);
889
			might_sleep_if(chip->can_sleep);
890
			chip->free(chip, gpio_chip_hwgpio(desc));
David Brownell's avatar
David Brownell committed
891 892
			spin_lock_irqsave(&gpio_lock, flags);
		}
893
		desc_set_label(desc, NULL);
894
		clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
David Brownell's avatar
David Brownell committed
895
		clear_bit(FLAG_REQUESTED, &desc->flags);
896
		clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
897
		clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
898
		clear_bit(FLAG_IS_HOGGED, &desc->flags);
899 900
		ret = true;
	}
901 902

	spin_unlock_irqrestore(&gpio_lock, flags);
903 904 905
	return ret;
}

906
void gpiod_free(struct gpio_desc *desc)
907 908 909 910 911
{
	if (desc && __gpiod_free(desc))
		module_put(desc->chip->owner);
	else
		WARN_ON(extra_checks);
912
}
913

914 915 916 917 918 919
/**
 * 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.
920 921
 * The string returned is the label passed to gpio_request(); if none has been
 * passed it is a meaningless, non-NULL constant.
922 923 924 925 926 927 928
 *
 * 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)
{
929
	struct gpio_desc *desc;
930

931
	if (!GPIO_OFFSET_VALID(chip, offset))
932
		return NULL;
933 934 935

	desc = &chip->desc[offset];

936
	if (test_bit(FLAG_REQUESTED, &desc->flags) == 0)
937
		return NULL;
938
	return desc->label;
939 940 941
}
EXPORT_SYMBOL_GPL(gpiochip_is_requested);

942 943 944 945 946 947 948 949 950 951 952
/**
 * 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).
 */
953 954
struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
					    const char *label)
955
{
956 957
	struct gpio_desc *desc = gpiochip_get_desc(chip, hwnum);
	int err;
958

959 960 961 962 963 964 965 966
	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);
967

968
	return desc;
969
}
970
EXPORT_SYMBOL_GPL(gpiochip_request_own_desc);
971 972 973 974 975 976 977 978 979 980 981 982 983

/**
 * 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);
}
984
EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
985 986 987 988 989 990 991 992 993 994

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

995 996 997 998 999 1000 1001 1002 1003 1004
/**
 * 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)
1005 1006 1007 1008
{
	struct gpio_chip	*chip;
	int			status = -EINVAL;

1009
	if (!desc || !desc->chip) {
1010 1011 1012 1013
		pr_warn("%s: invalid GPIO\n", __func__);
		return -EINVAL;
	}

1014 1015
	chip = desc->chip;
	if (!chip->get || !chip->direction_input) {
1016 1017
		gpiod_warn(desc,
			"%s: missing get() or direction_input() operations\n",
1018
			__func__);
1019 1020 1021
		return -EIO;
	}

1022
	status = chip->direction_input(chip, gpio_chip_hwgpio(desc));
1023 1024
	if (status == 0)
		clear_bit(FLAG_IS_OUT, &desc->flags);
1025

1026
	trace_gpio_direction(desc_to_gpio(desc), 1, status);
1027

1028 1029
	return status;
}
1030
EXPORT_SYMBOL_GPL(gpiod_direction_input);
1031

1032
static int _gpiod_direction_output_raw(struct gpio_desc *desc, int value)
1033 1034 1035 1036
{
	struct gpio_chip	*chip;
	int			status = -EINVAL;

1037 1038 1039 1040 1041 1042 1043 1044
	/* 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;
	}

1045 1046
	/* Open drain pin should not be driven to 1 */
	if (value && test_bit(FLAG_OPEN_DRAIN,  &desc->flags))
1047
		return gpiod_direction_input(desc);
1048

1049 1050
	/* Open source pin should not be driven to 0 */
	if (!value && test_bit(FLAG_OPEN_SOURCE,  &desc->flags))
1051
		return gpiod_direction_input(desc);
1052

1053 1054
	chip = desc->chip;
	if (!chip->set || !chip->direction_output) {
1055 1056 1057
		gpiod_warn(desc,
		       "%s: missing set() or direction_output() operations\n",
		       __func__);