gpiolib.c 144.1 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0
2
#include <linux/bitmap.h>
3 4
#include <linux/kernel.h>
#include <linux/module.h>
5
#include <linux/interrupt.h>
6 7
#include <linux/irq.h>
#include <linux/spinlock.h>
8
#include <linux/list.h>
D
David Brownell 已提交
9 10 11 12 13
#include <linux/device.h>
#include <linux/err.h>
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/gpio.h>
14
#include <linux/idr.h>
15
#include <linux/slab.h>
16
#include <linux/acpi.h>
17
#include <linux/gpio/driver.h>
18
#include <linux/gpio/machine.h>
19
#include <linux/pinctrl/consumer.h>
20 21 22
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
23
#include <linux/compat.h>
24
#include <linux/anon_inodes.h>
25
#include <linux/file.h>
26 27 28
#include <linux/kfifo.h>
#include <linux/poll.h>
#include <linux/timekeeping.h>
29
#include <uapi/linux/gpio.h>
30

31
#include "gpiolib.h"
L
Linus Walleij 已提交
32
#include "gpiolib-of.h"
33
#include "gpiolib-acpi.h"
34

35 36
#define CREATE_TRACE_POINTS
#include <trace/events/gpio.h>
37

38
/* Implementation infrastructure for GPIO interfaces.
39
 *
40 41 42
 * 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.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
 */


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

58 59
/* Device and char device-related information */
static DEFINE_IDA(gpio_ida);
60 61 62 63 64
static dev_t gpio_devt;
#define GPIO_DEV_MAX 256 /* 256 GPIO chip devices supported */
static struct bus_type gpio_bus_type = {
	.name = "gpio",
};
65

L
Laura Abbott 已提交
66 67 68 69 70
/*
 * Number of GPIOs to use for the fast path in set array
 */
#define FASTPATH_NGPIO CONFIG_GPIOLIB_FASTPATH_LIMIT

71 72 73 74
/* 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.
 */
75
DEFINE_SPINLOCK(gpio_lock);
76

77 78
static DEFINE_MUTEX(gpio_lookup_lock);
static LIST_HEAD(gpio_lookup_list);
79
LIST_HEAD(gpio_devices);
80

81 82 83
static DEFINE_MUTEX(gpio_machine_hogs_mutex);
static LIST_HEAD(gpio_machine_hogs);

84 85
static void gpiochip_free_hogs(struct gpio_chip *gc);
static int gpiochip_add_irqchip(struct gpio_chip *gc,
86 87
				struct lock_class_key *lock_key,
				struct lock_class_key *request_key);
88 89 90 91
static void gpiochip_irqchip_remove(struct gpio_chip *gc);
static int gpiochip_irqchip_init_hw(struct gpio_chip *gc);
static int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gc);
static void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gc);
92

93
static bool gpiolib_initialized;
94

95 96 97 98 99
static inline void desc_set_label(struct gpio_desc *d, const char *label)
{
	d->label = label;
}

100
/**
T
Thierry Reding 已提交
101 102 103 104 105 106
 * gpio_to_desc - Convert a GPIO number to its descriptor
 * @gpio: global GPIO number
 *
 * Returns:
 * The GPIO descriptor associated with the given GPIO, or %NULL if no GPIO
 * with the given number exists in the system.
107
 */
108
struct gpio_desc *gpio_to_desc(unsigned gpio)
109
{
110
	struct gpio_device *gdev;
111 112 113 114
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);

115
	list_for_each_entry(gdev, &gpio_devices, list) {
116 117
		if (gdev->base <= gpio &&
		    gdev->base + gdev->ngpio > gpio) {
118
			spin_unlock_irqrestore(&gpio_lock, flags);
119
			return &gdev->descs[gpio - gdev->base];
120 121 122 123 124
		}
	}

	spin_unlock_irqrestore(&gpio_lock, flags);

125 126 127
	if (!gpio_is_valid(gpio))
		WARN(1, "invalid GPIO %d\n", gpio);

128
	return NULL;
129
}
130
EXPORT_SYMBOL_GPL(gpio_to_desc);
131

132
/**
T
Thierry Reding 已提交
133 134
 * gpiochip_get_desc - get the GPIO descriptor corresponding to the given
 *                     hardware number for this chip
135
 * @gc: GPIO chip
T
Thierry Reding 已提交
136 137 138
 * @hwnum: hardware number of the GPIO for this chip
 *
 * Returns:
139
 * A pointer to the GPIO descriptor or ``ERR_PTR(-EINVAL)`` if no GPIO exists
T
Thierry Reding 已提交
140
 * in the given chip for the specified hardware number.
141
 */
142
struct gpio_desc *gpiochip_get_desc(struct gpio_chip *gc,
143
				    unsigned int hwnum)
144
{
145
	struct gpio_device *gdev = gc->gpiodev;
146 147

	if (hwnum >= gdev->ngpio)
148
		return ERR_PTR(-EINVAL);
149

150
	return &gdev->descs[hwnum];
151
}
M
Marco Felsch 已提交
152
EXPORT_SYMBOL_GPL(gpiochip_get_desc);
153 154

/**
T
Thierry Reding 已提交
155 156 157
 * desc_to_gpio - convert a GPIO descriptor to the integer namespace
 * @desc: GPIO descriptor
 *
158
 * This should disappear in the future but is needed since we still
T
Thierry Reding 已提交
159 160 161 162
 * use GPIO numbers for error messages and sysfs nodes.
 *
 * Returns:
 * The global GPIO number for the GPIO specified by its descriptor.
163
 */
164
int desc_to_gpio(const struct gpio_desc *desc)
165
{
166
	return desc->gdev->base + (desc - &desc->gdev->descs[0]);
167
}
168
EXPORT_SYMBOL_GPL(desc_to_gpio);
169 170


171 172 173 174 175
/**
 * 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)
176
{
177
	if (!desc || !desc->gdev)
178 179
		return NULL;
	return desc->gdev->chip;
180
}
181
EXPORT_SYMBOL_GPL(gpiod_to_chip);
182

183 184 185
/* dynamic allocation of GPIOs, e.g. on a hotplugged device */
static int gpiochip_find_base(int ngpio)
{
186
	struct gpio_device *gdev;
187
	int base = ARCH_NR_GPIOS - ngpio;
188

189
	list_for_each_entry_reverse(gdev, &gpio_devices, list) {
190
		/* found a free space? */
191
		if (gdev->base + gdev->ngpio <= base)
192 193 194
			break;
		else
			/* nope, check the space right before the chip */
195
			base = gdev->base - ngpio;
196 197
	}

198
	if (gpio_is_valid(base)) {
199
		pr_debug("%s: found new base at %d\n", __func__, base);
200 201 202 203
		return base;
	} else {
		pr_err("%s: cannot find free range\n", __func__);
		return -ENOSPC;
A
Anton Vorontsov 已提交
204 205 206
	}
}

207 208 209 210
/**
 * gpiod_get_direction - return the current direction of a GPIO
 * @desc:	GPIO to get the direction of
 *
211
 * Returns 0 for output, 1 for input, or an error code in case of error.
212 213 214
 *
 * This function may sleep if gpiod_cansleep() is true.
 */
215
int gpiod_get_direction(struct gpio_desc *desc)
216
{
217
	struct gpio_chip *gc;
218
	unsigned offset;
219
	int ret;
220

221
	gc = gpiod_to_chip(desc);
222
	offset = gpio_chip_hwgpio(desc);
223

224 225 226 227 228 229 230 231
	/*
	 * Open drain emulation using input mode may incorrectly report
	 * input here, fix that up.
	 */
	if (test_bit(FLAG_OPEN_DRAIN, &desc->flags) &&
	    test_bit(FLAG_IS_OUT, &desc->flags))
		return 0;

232
	if (!gc->get_direction)
233
		return -ENOTSUPP;
234

235
	ret = gc->get_direction(gc, offset);
236 237 238 239 240
	if (ret < 0)
		return ret;

	/* GPIOF_DIR_IN or other positive, otherwise GPIOF_DIR_OUT */
	if (ret > 0)
241
		ret = 1;
242 243 244

	assign_bit(FLAG_IS_OUT, &desc->flags, !ret);

245
	return ret;
246
}
247
EXPORT_SYMBOL_GPL(gpiod_get_direction);
248

249 250
/*
 * Add a new chip to the global chips list, keeping the list of chips sorted
251
 * by range(means [base, base + ngpio - 1]) order.
252 253 254 255
 *
 * Return -EBUSY if the new chip overlaps with some other chip's integer
 * space.
 */
256
static int gpiodev_add_to_list(struct gpio_device *gdev)
257
{
258
	struct gpio_device *prev, *next;
259

260
	if (list_empty(&gpio_devices)) {
261
		/* initial entry in list */
262
		list_add_tail(&gdev->list, &gpio_devices);
S
Sudip Mukherjee 已提交
263
		return 0;
264 265
	}

266 267 268 269 270
	next = list_entry(gpio_devices.next, struct gpio_device, list);
	if (gdev->base + gdev->ngpio <= next->base) {
		/* add before first entry */
		list_add(&gdev->list, &gpio_devices);
		return 0;
271 272
	}

273 274 275 276
	prev = list_entry(gpio_devices.prev, struct gpio_device, list);
	if (prev->base + prev->ngpio <= gdev->base) {
		/* add behind last entry */
		list_add_tail(&gdev->list, &gpio_devices);
277
		return 0;
278 279
	}

280 281 282 283
	list_for_each_entry_safe(prev, next, &gpio_devices, list) {
		/* at the end of the list */
		if (&next->list == &gpio_devices)
			break;
284

285 286 287 288 289 290 291 292 293 294
		/* add between prev and next */
		if (prev->base + prev->ngpio <= gdev->base
				&& gdev->base + gdev->ngpio <= next->base) {
			list_add(&gdev->list, &prev->list);
			return 0;
		}
	}

	dev_err(&gdev->dev, "GPIO integer space overlap, cannot add chip\n");
	return -EBUSY;
295 296
}

T
Thierry Reding 已提交
297
/*
298 299 300 301
 * Convert a GPIO name to its descriptor
 */
static struct gpio_desc *gpio_name_to_desc(const char * const name)
{
302
	struct gpio_device *gdev;
303 304
	unsigned long flags;

305 306 307
	if (!name)
		return NULL;

308 309
	spin_lock_irqsave(&gpio_lock, flags);

310
	list_for_each_entry(gdev, &gpio_devices, list) {
311 312
		int i;

313 314
		for (i = 0; i != gdev->ngpio; ++i) {
			struct gpio_desc *desc = &gdev->descs[i];
315

316
			if (!desc->name)
317 318
				continue;

319
			if (!strcmp(desc->name, name)) {
320
				spin_unlock_irqrestore(&gpio_lock, flags);
321
				return desc;
322 323 324 325 326 327 328 329 330
			}
		}
	}

	spin_unlock_irqrestore(&gpio_lock, flags);

	return NULL;
}

331 332 333 334
/*
 * Takes the names from gc->names and checks if they are all unique. If they
 * are, they are assigned to their gpio descriptors.
 *
335
 * Warning if one of the names is already used for a different GPIO.
336 337 338
 */
static int gpiochip_set_desc_names(struct gpio_chip *gc)
{
339
	struct gpio_device *gdev = gc->gpiodev;
340 341 342 343 344 345 346 347 348 349
	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]);
350
		if (gpio)
351
			dev_warn(&gdev->dev,
352
				 "Detected name collision for GPIO name '%s'\n",
353
				 gc->names[i]);
354 355 356 357
	}

	/* Then add all names to the GPIO descriptors */
	for (i = 0; i != gc->ngpio; ++i)
358
		gdev->descs[i].name = gc->names[i];
359 360 361 362

	return 0;
}

363
static unsigned long *gpiochip_allocate_mask(struct gpio_chip *gc)
364 365 366
{
	unsigned long *p;

367
	p = bitmap_alloc(gc->ngpio, GFP_KERNEL);
368 369 370 371
	if (!p)
		return NULL;

	/* Assume by default all GPIOs are valid */
372
	bitmap_fill(p, gc->ngpio);
373 374 375 376

	return p;
}

L
Linus Walleij 已提交
377
static int gpiochip_alloc_valid_mask(struct gpio_chip *gc)
378
{
379
	if (!(of_gpio_need_valid_mask(gc) || gc->init_valid_mask))
380 381
		return 0;

L
Linus Walleij 已提交
382 383
	gc->valid_mask = gpiochip_allocate_mask(gc);
	if (!gc->valid_mask)
384 385 386 387 388
		return -ENOMEM;

	return 0;
}

389
static int gpiochip_init_valid_mask(struct gpio_chip *gc)
390
{
391 392 393 394
	if (gc->init_valid_mask)
		return gc->init_valid_mask(gc,
					   gc->valid_mask,
					   gc->ngpio);
395 396 397 398

	return 0;
}

399
static void gpiochip_free_valid_mask(struct gpio_chip *gc)
400
{
401 402
	bitmap_free(gc->valid_mask);
	gc->valid_mask = NULL;
403 404
}

405 406 407 408 409 410 411 412
static int gpiochip_add_pin_ranges(struct gpio_chip *gc)
{
	if (gc->add_pin_ranges)
		return gc->add_pin_ranges(gc);

	return 0;
}

413
bool gpiochip_line_is_valid(const struct gpio_chip *gc,
414 415 416
				unsigned int offset)
{
	/* No mask means all valid */
417
	if (likely(!gc->valid_mask))
418
		return true;
419
	return test_bit(offset, gc->valid_mask);
420 421 422
}
EXPORT_SYMBOL_GPL(gpiochip_line_is_valid);

423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440
/*
 * GPIO line handle management
 */

/**
 * struct linehandle_state - contains the state of a userspace handle
 * @gdev: the GPIO device the handle pertains to
 * @label: consumer label used to tag descriptors
 * @descs: the GPIO descriptors held by this handle
 * @numdescs: the number of descriptors held in the descs array
 */
struct linehandle_state {
	struct gpio_device *gdev;
	const char *label;
	struct gpio_desc *descs[GPIOHANDLES_MAX];
	u32 numdescs;
};

441 442 443 444
#define GPIOHANDLE_REQUEST_VALID_FLAGS \
	(GPIOHANDLE_REQUEST_INPUT | \
	GPIOHANDLE_REQUEST_OUTPUT | \
	GPIOHANDLE_REQUEST_ACTIVE_LOW | \
445 446
	GPIOHANDLE_REQUEST_BIAS_PULL_UP | \
	GPIOHANDLE_REQUEST_BIAS_PULL_DOWN | \
447
	GPIOHANDLE_REQUEST_BIAS_DISABLE | \
448 449 450
	GPIOHANDLE_REQUEST_OPEN_DRAIN | \
	GPIOHANDLE_REQUEST_OPEN_SOURCE)

451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498
static int linehandle_validate_flags(u32 flags)
{
	/* Return an error if an unknown flag is set */
	if (flags & ~GPIOHANDLE_REQUEST_VALID_FLAGS)
		return -EINVAL;

	/*
	 * Do not allow both INPUT & OUTPUT flags to be set as they are
	 * contradictory.
	 */
	if ((flags & GPIOHANDLE_REQUEST_INPUT) &&
	    (flags & GPIOHANDLE_REQUEST_OUTPUT))
		return -EINVAL;

	/*
	 * Do not allow OPEN_SOURCE & OPEN_DRAIN flags in a single request. If
	 * the hardware actually supports enabling both at the same time the
	 * electrical result would be disastrous.
	 */
	if ((flags & GPIOHANDLE_REQUEST_OPEN_DRAIN) &&
	    (flags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
		return -EINVAL;

	/* OPEN_DRAIN and OPEN_SOURCE flags only make sense for output mode. */
	if (!(flags & GPIOHANDLE_REQUEST_OUTPUT) &&
	    ((flags & GPIOHANDLE_REQUEST_OPEN_DRAIN) ||
	     (flags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
		return -EINVAL;

	/* Bias flags only allowed for input or output mode. */
	if (!((flags & GPIOHANDLE_REQUEST_INPUT) ||
	      (flags & GPIOHANDLE_REQUEST_OUTPUT)) &&
	    ((flags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
		return -EINVAL;

	/* Only one bias flag can be set. */
	if (((flags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
	     (flags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
			GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
	    ((flags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
		return -EINVAL;

	return 0;
}

499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519
static long linehandle_set_config(struct linehandle_state *lh,
				  void __user *ip)
{
	struct gpiohandle_config gcnf;
	struct gpio_desc *desc;
	int i, ret;
	u32 lflags;
	unsigned long *flagsp;

	if (copy_from_user(&gcnf, ip, sizeof(gcnf)))
		return -EFAULT;

	lflags = gcnf.flags;
	ret = linehandle_validate_flags(lflags);
	if (ret)
		return ret;

	for (i = 0; i < lh->numdescs; i++) {
		desc = lh->descs[i];
		flagsp = &desc->flags;

520
		assign_bit(FLAG_ACTIVE_LOW, flagsp,
521 522
			lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW);

523
		assign_bit(FLAG_OPEN_DRAIN, flagsp,
524 525
			lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN);

526
		assign_bit(FLAG_OPEN_SOURCE, flagsp,
527 528
			lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE);

529
		assign_bit(FLAG_PULL_UP, flagsp,
530 531
			lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP);

532
		assign_bit(FLAG_PULL_DOWN, flagsp,
533 534
			lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN);

535
		assign_bit(FLAG_BIAS_DISABLE, flagsp,
536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552
			lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE);

		/*
		 * Lines have to be requested explicitly for input
		 * or output, else the line will be treated "as is".
		 */
		if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {
			int val = !!gcnf.default_values[i];

			ret = gpiod_direction_output(desc, val);
			if (ret)
				return ret;
		} else if (lflags & GPIOHANDLE_REQUEST_INPUT) {
			ret = gpiod_direction_input(desc);
			if (ret)
				return ret;
		}
553 554 555

		atomic_notifier_call_chain(&desc->gdev->notifier,
					   GPIOLINE_CHANGED_CONFIG, desc);
556 557 558 559
	}
	return 0;
}

560 561 562 563 564 565
static long linehandle_ioctl(struct file *filep, unsigned int cmd,
			     unsigned long arg)
{
	struct linehandle_state *lh = filep->private_data;
	void __user *ip = (void __user *)arg;
	struct gpiohandle_data ghd;
566
	DECLARE_BITMAP(vals, GPIOHANDLES_MAX);
567 568 569
	int i;

	if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) {
570
		/* NOTE: It's ok to read values of output lines. */
571 572 573 574
		int ret = gpiod_get_array_value_complex(false,
							true,
							lh->numdescs,
							lh->descs,
575
							NULL,
576 577 578
							vals);
		if (ret)
			return ret;
579

580
		memset(&ghd, 0, sizeof(ghd));
581
		for (i = 0; i < lh->numdescs; i++)
582
			ghd.values[i] = test_bit(i, vals);
583 584 585 586 587 588

		if (copy_to_user(ip, &ghd, sizeof(ghd)))
			return -EFAULT;

		return 0;
	} else if (cmd == GPIOHANDLE_SET_LINE_VALUES_IOCTL) {
589 590 591 592 593 594 595
		/*
		 * All line descriptors were created at once with the same
		 * flags so just check if the first one is really output.
		 */
		if (!test_bit(FLAG_IS_OUT, &lh->descs[0]->flags))
			return -EPERM;

596 597 598 599 600
		if (copy_from_user(&ghd, ip, sizeof(ghd)))
			return -EFAULT;

		/* Clamp all values to [0,1] */
		for (i = 0; i < lh->numdescs; i++)
601
			__assign_bit(i, vals, ghd.values[i]);
602 603

		/* Reuse the array setting function */
L
Laura Abbott 已提交
604
		return gpiod_set_array_value_complex(false,
605 606 607
					      true,
					      lh->numdescs,
					      lh->descs,
608
					      NULL,
609
					      vals);
610 611
	} else if (cmd == GPIOHANDLE_SET_CONFIG_IOCTL) {
		return linehandle_set_config(lh, ip);
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651
	}
	return -EINVAL;
}

#ifdef CONFIG_COMPAT
static long linehandle_ioctl_compat(struct file *filep, unsigned int cmd,
			     unsigned long arg)
{
	return linehandle_ioctl(filep, cmd, (unsigned long)compat_ptr(arg));
}
#endif

static int linehandle_release(struct inode *inode, struct file *filep)
{
	struct linehandle_state *lh = filep->private_data;
	struct gpio_device *gdev = lh->gdev;
	int i;

	for (i = 0; i < lh->numdescs; i++)
		gpiod_free(lh->descs[i]);
	kfree(lh->label);
	kfree(lh);
	put_device(&gdev->dev);
	return 0;
}

static const struct file_operations linehandle_fileops = {
	.release = linehandle_release,
	.owner = THIS_MODULE,
	.llseek = noop_llseek,
	.unlocked_ioctl = linehandle_ioctl,
#ifdef CONFIG_COMPAT
	.compat_ioctl = linehandle_ioctl_compat,
#endif
};

static int linehandle_create(struct gpio_device *gdev, void __user *ip)
{
	struct gpiohandle_request handlereq;
	struct linehandle_state *lh;
652
	struct file *file;
653
	int fd, i, count = 0, ret;
654
	u32 lflags;
655 656 657 658 659 660

	if (copy_from_user(&handlereq, ip, sizeof(handlereq)))
		return -EFAULT;
	if ((handlereq.lines == 0) || (handlereq.lines > GPIOHANDLES_MAX))
		return -EINVAL;

661 662
	lflags = handlereq.flags;

663 664 665
	ret = linehandle_validate_flags(lflags);
	if (ret)
		return ret;
666

667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686
	lh = kzalloc(sizeof(*lh), GFP_KERNEL);
	if (!lh)
		return -ENOMEM;
	lh->gdev = gdev;
	get_device(&gdev->dev);

	/* Make sure this is terminated */
	handlereq.consumer_label[sizeof(handlereq.consumer_label)-1] = '\0';
	if (strlen(handlereq.consumer_label)) {
		lh->label = kstrdup(handlereq.consumer_label,
				    GFP_KERNEL);
		if (!lh->label) {
			ret = -ENOMEM;
			goto out_free_lh;
		}
	}

	/* Request each GPIO */
	for (i = 0; i < handlereq.lines; i++) {
		u32 offset = handlereq.lineoffsets[i];
687
		struct gpio_desc *desc = gpiochip_get_desc(gdev->chip, offset);
688

689 690
		if (IS_ERR(desc)) {
			ret = PTR_ERR(desc);
691 692 693
			goto out_free_descs;
		}

694 695 696 697
		ret = gpiod_request(desc, lh->label);
		if (ret)
			goto out_free_descs;
		lh->descs[i] = desc;
698
		count = i + 1;
699 700 701 702 703 704 705

		if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW)
			set_bit(FLAG_ACTIVE_LOW, &desc->flags);
		if (lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN)
			set_bit(FLAG_OPEN_DRAIN, &desc->flags);
		if (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)
			set_bit(FLAG_OPEN_SOURCE, &desc->flags);
706 707
		if (lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE)
			set_bit(FLAG_BIAS_DISABLE, &desc->flags);
708 709 710 711
		if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)
			set_bit(FLAG_PULL_DOWN, &desc->flags);
		if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)
			set_bit(FLAG_PULL_UP, &desc->flags);
712

713 714 715 716
		ret = gpiod_set_transitory(desc, false);
		if (ret < 0)
			goto out_free_descs;

717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734
		/*
		 * Lines have to be requested explicitly for input
		 * or output, else the line will be treated "as is".
		 */
		if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {
			int val = !!handlereq.default_values[i];

			ret = gpiod_direction_output(desc, val);
			if (ret)
				goto out_free_descs;
		} else if (lflags & GPIOHANDLE_REQUEST_INPUT) {
			ret = gpiod_direction_input(desc);
			if (ret)
				goto out_free_descs;
		}
		dev_dbg(&gdev->dev, "registered chardev handle for line %d\n",
			offset);
	}
735 736
	/* Let i point at the last handle */
	i--;
737 738
	lh->numdescs = handlereq.lines;

739
	fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC);
740 741 742 743 744
	if (fd < 0) {
		ret = fd;
		goto out_free_descs;
	}

745 746 747 748 749 750 751 752 753
	file = anon_inode_getfile("gpio-linehandle",
				  &linehandle_fileops,
				  lh,
				  O_RDONLY | O_CLOEXEC);
	if (IS_ERR(file)) {
		ret = PTR_ERR(file);
		goto out_put_unused_fd;
	}

754
	handlereq.fd = fd;
755
	if (copy_to_user(ip, &handlereq, sizeof(handlereq))) {
756 757 758 759 760 761 762
		/*
		 * fput() will trigger the release() callback, so do not go onto
		 * the regular error cleanup path here.
		 */
		fput(file);
		put_unused_fd(fd);
		return -EFAULT;
763
	}
764

765 766
	fd_install(fd, file);

767 768 769 770 771
	dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n",
		lh->numdescs);

	return 0;

772 773
out_put_unused_fd:
	put_unused_fd(fd);
774
out_free_descs:
775
	for (i = 0; i < count; i++)
776 777 778 779 780 781 782 783
		gpiod_free(lh->descs[i]);
	kfree(lh->label);
out_free_lh:
	kfree(lh);
	put_device(&gdev->dev);
	return ret;
}

784 785 786 787 788 789 790 791 792 793 794 795 796
/*
 * GPIO line event management
 */

/**
 * struct lineevent_state - contains the state of a userspace event
 * @gdev: the GPIO device the event pertains to
 * @label: consumer label used to tag descriptors
 * @desc: the GPIO descriptor held by this event
 * @eflags: the event flags this line was requested with
 * @irq: the interrupt that trigger in response to events on this GPIO
 * @wait: wait queue that handles blocking reads of events
 * @events: KFIFO for the GPIO events
797 798 799
 * @timestamp: cache for the timestamp storing it between hardirq
 * and IRQ thread, used to bring the timestamp close to the actual
 * event
800 801 802 803 804 805 806 807 808
 */
struct lineevent_state {
	struct gpio_device *gdev;
	const char *label;
	struct gpio_desc *desc;
	u32 eflags;
	int irq;
	wait_queue_head_t wait;
	DECLARE_KFIFO(events, struct gpioevent_data, 16);
809
	u64 timestamp;
810 811
};

812 813 814 815
#define GPIOEVENT_REQUEST_VALID_FLAGS \
	(GPIOEVENT_REQUEST_RISING_EDGE | \
	GPIOEVENT_REQUEST_FALLING_EDGE)

816
static __poll_t lineevent_poll(struct file *filep,
817 818 819
				   struct poll_table_struct *wait)
{
	struct lineevent_state *le = filep->private_data;
820
	__poll_t events = 0;
821 822 823

	poll_wait(filep, &le->wait, wait);

824
	if (!kfifo_is_empty_spinlocked_noirqsave(&le->events, &le->wait.lock))
825
		events = EPOLLIN | EPOLLRDNORM;
826 827 828 829 830 831 832 833 834 835 836

	return events;
}


static ssize_t lineevent_read(struct file *filep,
			      char __user *buf,
			      size_t count,
			      loff_t *f_ps)
{
	struct lineevent_state *le = filep->private_data;
837
	struct gpioevent_data ge;
838
	ssize_t bytes_read = 0;
839 840
	int ret;

841
	if (count < sizeof(ge))
842 843 844
		return -EINVAL;

	do {
845
		spin_lock(&le->wait.lock);
846
		if (kfifo_is_empty(&le->events)) {
847 848 849 850 851 852 853
			if (bytes_read) {
				spin_unlock(&le->wait.lock);
				return bytes_read;
			}

			if (filep->f_flags & O_NONBLOCK) {
				spin_unlock(&le->wait.lock);
854
				return -EAGAIN;
855
			}
856

857
			ret = wait_event_interruptible_locked(le->wait,
858
					!kfifo_is_empty(&le->events));
859 860
			if (ret) {
				spin_unlock(&le->wait.lock);
861
				return ret;
862
			}
863 864
		}

865
		ret = kfifo_out(&le->events, &ge, 1);
866 867 868 869 870 871 872 873 874 875
		spin_unlock(&le->wait.lock);
		if (ret != 1) {
			/*
			 * This should never happen - we were holding the lock
			 * from the moment we learned the fifo is no longer
			 * empty until now.
			 */
			ret = -EIO;
			break;
		}
876

877
		if (copy_to_user(buf + bytes_read, &ge, sizeof(ge)))
878
			return -EFAULT;
879 880
		bytes_read += sizeof(ge);
	} while (count >= bytes_read + sizeof(ge));
881

882
	return bytes_read;
883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911
}

static int lineevent_release(struct inode *inode, struct file *filep)
{
	struct lineevent_state *le = filep->private_data;
	struct gpio_device *gdev = le->gdev;

	free_irq(le->irq, le);
	gpiod_free(le->desc);
	kfree(le->label);
	kfree(le);
	put_device(&gdev->dev);
	return 0;
}

static long lineevent_ioctl(struct file *filep, unsigned int cmd,
			    unsigned long arg)
{
	struct lineevent_state *le = filep->private_data;
	void __user *ip = (void __user *)arg;
	struct gpiohandle_data ghd;

	/*
	 * We can get the value for an event line but not set it,
	 * because it is input by definition.
	 */
	if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) {
		int val;

912 913
		memset(&ghd, 0, sizeof(ghd));

914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946
		val = gpiod_get_value_cansleep(le->desc);
		if (val < 0)
			return val;
		ghd.values[0] = val;

		if (copy_to_user(ip, &ghd, sizeof(ghd)))
			return -EFAULT;

		return 0;
	}
	return -EINVAL;
}

#ifdef CONFIG_COMPAT
static long lineevent_ioctl_compat(struct file *filep, unsigned int cmd,
				   unsigned long arg)
{
	return lineevent_ioctl(filep, cmd, (unsigned long)compat_ptr(arg));
}
#endif

static const struct file_operations lineevent_fileops = {
	.release = lineevent_release,
	.read = lineevent_read,
	.poll = lineevent_poll,
	.owner = THIS_MODULE,
	.llseek = noop_llseek,
	.unlocked_ioctl = lineevent_ioctl,
#ifdef CONFIG_COMPAT
	.compat_ioctl = lineevent_ioctl_compat,
#endif
};

947
static irqreturn_t lineevent_irq_thread(int irq, void *p)
948 949 950
{
	struct lineevent_state *le = p;
	struct gpioevent_data ge;
951
	int ret;
952

953 954 955
	/* Do not leak kernel stack to userspace */
	memset(&ge, 0, sizeof(ge));

956 957 958 959 960
	/*
	 * We may be running from a nested threaded interrupt in which case
	 * we didn't get the timestamp from lineevent_irq_handler().
	 */
	if (!le->timestamp)
961
		ge.timestamp = ktime_get_ns();
962 963
	else
		ge.timestamp = le->timestamp;
964

965 966
	if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE
	    && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
967
		int level = gpiod_get_value_cansleep(le->desc);
968 969 970 971 972 973
		if (level)
			/* Emit low-to-high event */
			ge.id = GPIOEVENT_EVENT_RISING_EDGE;
		else
			/* Emit high-to-low event */
			ge.id = GPIOEVENT_EVENT_FALLING_EDGE;
974
	} else if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE) {
975 976
		/* Emit low-to-high event */
		ge.id = GPIOEVENT_EVENT_RISING_EDGE;
977
	} else if (le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
978 979
		/* Emit high-to-low event */
		ge.id = GPIOEVENT_EVENT_FALLING_EDGE;
980 981
	} else {
		return IRQ_NONE;
982 983
	}

984 985
	ret = kfifo_in_spinlocked_noirqsave(&le->events, &ge,
					    1, &le->wait.lock);
986
	if (ret)
987
		wake_up_poll(&le->wait, EPOLLIN);
988 989
	else
		pr_debug_ratelimited("event FIFO is full - event dropped\n");
990 991 992 993

	return IRQ_HANDLED;
}

994 995 996 997 998 999 1000 1001
static irqreturn_t lineevent_irq_handler(int irq, void *p)
{
	struct lineevent_state *le = p;

	/*
	 * Just store the timestamp in hardirq context so we get it as
	 * close in time as possible to the actual event.
	 */
1002
	le->timestamp = ktime_get_ns();
1003 1004 1005 1006

	return IRQ_WAKE_THREAD;
}

1007 1008 1009 1010 1011
static int lineevent_create(struct gpio_device *gdev, void __user *ip)
{
	struct gpioevent_request eventreq;
	struct lineevent_state *le;
	struct gpio_desc *desc;
1012
	struct file *file;
1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
	u32 offset;
	u32 lflags;
	u32 eflags;
	int fd;
	int ret;
	int irqflags = 0;

	if (copy_from_user(&eventreq, ip, sizeof(eventreq)))
		return -EFAULT;

1023 1024 1025 1026
	offset = eventreq.lineoffset;
	lflags = eventreq.handleflags;
	eflags = eventreq.eventflags;

1027 1028 1029
	desc = gpiochip_get_desc(gdev->chip, offset);
	if (IS_ERR(desc))
		return PTR_ERR(desc);
1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041

	/* Return an error if a unknown flag is set */
	if ((lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) ||
	    (eflags & ~GPIOEVENT_REQUEST_VALID_FLAGS))
		return -EINVAL;

	/* This is just wrong: we don't look for events on output lines */
	if ((lflags & GPIOHANDLE_REQUEST_OUTPUT) ||
	    (lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN) ||
	    (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
		return -EINVAL;

1042 1043 1044 1045 1046 1047 1048 1049
	/* Only one bias flag can be set. */
	if (((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
	     (lflags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
			GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
	    ((lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
		return -EINVAL;

1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068
	le = kzalloc(sizeof(*le), GFP_KERNEL);
	if (!le)
		return -ENOMEM;
	le->gdev = gdev;
	get_device(&gdev->dev);

	/* Make sure this is terminated */
	eventreq.consumer_label[sizeof(eventreq.consumer_label)-1] = '\0';
	if (strlen(eventreq.consumer_label)) {
		le->label = kstrdup(eventreq.consumer_label,
				    GFP_KERNEL);
		if (!le->label) {
			ret = -ENOMEM;
			goto out_free_le;
		}
	}

	ret = gpiod_request(desc, le->label);
	if (ret)
1069
		goto out_free_label;
1070 1071 1072 1073 1074
	le->desc = desc;
	le->eflags = eflags;

	if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW)
		set_bit(FLAG_ACTIVE_LOW, &desc->flags);
1075 1076
	if (lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE)
		set_bit(FLAG_BIAS_DISABLE, &desc->flags);
1077 1078 1079 1080
	if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)
		set_bit(FLAG_PULL_DOWN, &desc->flags);
	if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)
		set_bit(FLAG_PULL_UP, &desc->flags);
1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092

	ret = gpiod_direction_input(desc);
	if (ret)
		goto out_free_desc;

	le->irq = gpiod_to_irq(desc);
	if (le->irq <= 0) {
		ret = -ENODEV;
		goto out_free_desc;
	}

	if (eflags & GPIOEVENT_REQUEST_RISING_EDGE)
1093 1094
		irqflags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
			IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING;
1095
	if (eflags & GPIOEVENT_REQUEST_FALLING_EDGE)
1096 1097
		irqflags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
			IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING;
1098 1099 1100 1101 1102 1103 1104
	irqflags |= IRQF_ONESHOT;

	INIT_KFIFO(le->events);
	init_waitqueue_head(&le->wait);

	/* Request a thread to read the events */
	ret = request_threaded_irq(le->irq,
1105
			lineevent_irq_handler,
1106 1107 1108 1109 1110 1111 1112
			lineevent_irq_thread,
			irqflags,
			le->label,
			le);
	if (ret)
		goto out_free_desc;

1113
	fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC);
1114 1115 1116 1117 1118
	if (fd < 0) {
		ret = fd;
		goto out_free_irq;
	}

1119 1120 1121 1122 1123 1124 1125 1126 1127
	file = anon_inode_getfile("gpio-event",
				  &lineevent_fileops,
				  le,
				  O_RDONLY | O_CLOEXEC);
	if (IS_ERR(file)) {
		ret = PTR_ERR(file);
		goto out_put_unused_fd;
	}

1128
	eventreq.fd = fd;
1129
	if (copy_to_user(ip, &eventreq, sizeof(eventreq))) {
1130 1131 1132 1133 1134 1135 1136
		/*
		 * fput() will trigger the release() callback, so do not go onto
		 * the regular error cleanup path here.
		 */
		fput(file);
		put_unused_fd(fd);
		return -EFAULT;
1137
	}
1138

1139 1140
	fd_install(fd, file);

1141 1142
	return 0;

1143 1144
out_put_unused_fd:
	put_unused_fd(fd);
1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156
out_free_irq:
	free_irq(le->irq, le);
out_free_desc:
	gpiod_free(le->desc);
out_free_label:
	kfree(le->label);
out_free_le:
	kfree(le);
	put_device(&gdev->dev);
	return ret;
}

1157 1158 1159
static void gpio_desc_to_lineinfo(struct gpio_desc *desc,
				  struct gpioline_info *info)
{
1160
	struct gpio_chip *gc = desc->gdev->chip;
1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);

	if (desc->name) {
		strncpy(info->name, desc->name, sizeof(info->name));
		info->name[sizeof(info->name) - 1] = '\0';
	} else {
		info->name[0] = '\0';
	}

	if (desc->label) {
		strncpy(info->consumer, desc->label, sizeof(info->consumer));
		info->consumer[sizeof(info->consumer) - 1] = '\0';
	} else {
		info->consumer[0] = '\0';
	}

	/*
	 * Userspace only need to know that the kernel is using this GPIO so
	 * it can't use it.
	 */
	info->flags = 0;
	if (test_bit(FLAG_REQUESTED, &desc->flags) ||
	    test_bit(FLAG_IS_HOGGED, &desc->flags) ||
	    test_bit(FLAG_USED_AS_IRQ, &desc->flags) ||
	    test_bit(FLAG_EXPORT, &desc->flags) ||
	    test_bit(FLAG_SYSFS, &desc->flags) ||
1189
	    !pinctrl_gpio_can_use_line(gc->base + info->line_offset))
1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210
		info->flags |= GPIOLINE_FLAG_KERNEL;
	if (test_bit(FLAG_IS_OUT, &desc->flags))
		info->flags |= GPIOLINE_FLAG_IS_OUT;
	if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
		info->flags |= GPIOLINE_FLAG_ACTIVE_LOW;
	if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
		info->flags |= (GPIOLINE_FLAG_OPEN_DRAIN |
				GPIOLINE_FLAG_IS_OUT);
	if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
		info->flags |= (GPIOLINE_FLAG_OPEN_SOURCE |
				GPIOLINE_FLAG_IS_OUT);
	if (test_bit(FLAG_BIAS_DISABLE, &desc->flags))
		info->flags |= GPIOLINE_FLAG_BIAS_DISABLE;
	if (test_bit(FLAG_PULL_DOWN, &desc->flags))
		info->flags |= GPIOLINE_FLAG_BIAS_PULL_DOWN;
	if (test_bit(FLAG_PULL_UP, &desc->flags))
		info->flags |= GPIOLINE_FLAG_BIAS_PULL_UP;

	spin_unlock_irqrestore(&gpio_lock, flags);
}

1211 1212 1213 1214 1215 1216 1217 1218
struct gpio_chardev_data {
	struct gpio_device *gdev;
	wait_queue_head_t wait;
	DECLARE_KFIFO(events, struct gpioline_info_changed, 32);
	struct notifier_block lineinfo_changed_nb;
	unsigned long *watched_lines;
};

T
Thierry Reding 已提交
1219
/*
1220 1221 1222 1223
 * gpio_ioctl() - ioctl handler for the GPIO chardev
 */
static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
1224 1225
	struct gpio_chardev_data *priv = filp->private_data;
	struct gpio_device *gdev = priv->gdev;
1226
	struct gpio_chip *gc = gdev->chip;
1227
	void __user *ip = (void __user *)arg;
1228 1229
	struct gpio_desc *desc;
	__u32 offset;
1230 1231

	/* We fail any subsequent ioctl():s when the chip is gone */
1232
	if (!gc)
1233 1234
		return -ENODEV;

1235
	/* Fill in the struct and pass to userspace */
1236
	if (cmd == GPIO_GET_CHIPINFO_IOCTL) {
1237 1238
		struct gpiochip_info chipinfo;

1239 1240
		memset(&chipinfo, 0, sizeof(chipinfo));

1241 1242 1243
		strncpy(chipinfo.name, dev_name(&gdev->dev),
			sizeof(chipinfo.name));
		chipinfo.name[sizeof(chipinfo.name)-1] = '\0';
1244 1245 1246
		strncpy(chipinfo.label, gdev->label,
			sizeof(chipinfo.label));
		chipinfo.label[sizeof(chipinfo.label)-1] = '\0';
1247
		chipinfo.lines = gdev->ngpio;
1248 1249 1250
		if (copy_to_user(ip, &chipinfo, sizeof(chipinfo)))
			return -EFAULT;
		return 0;
1251 1252
	} else if (cmd == GPIO_GET_LINEINFO_IOCTL ||
		   cmd == GPIO_GET_LINEINFO_WATCH_IOCTL) {
1253 1254 1255 1256 1257
		struct gpioline_info lineinfo;

		if (copy_from_user(&lineinfo, ip, sizeof(lineinfo)))
			return -EFAULT;

1258
		desc = gpiochip_get_desc(gc, lineinfo.line_offset);
1259 1260 1261
		if (IS_ERR(desc))
			return PTR_ERR(desc);

1262
		gpio_desc_to_lineinfo(desc, &lineinfo);
1263 1264 1265

		if (copy_to_user(ip, &lineinfo, sizeof(lineinfo)))
			return -EFAULT;
1266 1267

		if (cmd == GPIO_GET_LINEINFO_WATCH_IOCTL)
1268
			set_bit(gpio_chip_hwgpio(desc), priv->watched_lines);
1269

1270
		return 0;
1271 1272
	} else if (cmd == GPIO_GET_LINEHANDLE_IOCTL) {
		return linehandle_create(gdev, ip);
1273 1274
	} else if (cmd == GPIO_GET_LINEEVENT_IOCTL) {
		return lineevent_create(gdev, ip);
1275 1276 1277 1278
	} else if (cmd == GPIO_GET_LINEINFO_UNWATCH_IOCTL) {
		if (copy_from_user(&offset, ip, sizeof(offset)))
			return -EFAULT;

1279
		desc = gpiochip_get_desc(gc, offset);
1280 1281 1282
		if (IS_ERR(desc))
			return PTR_ERR(desc);

1283
		clear_bit(gpio_chip_hwgpio(desc), priv->watched_lines);
1284
		return 0;
1285 1286 1287 1288
	}
	return -EINVAL;
}

1289 1290 1291 1292 1293 1294 1295 1296
#ifdef CONFIG_COMPAT
static long gpio_ioctl_compat(struct file *filp, unsigned int cmd,
			      unsigned long arg)
{
	return gpio_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
}
#endif

1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310
static struct gpio_chardev_data *
to_gpio_chardev_data(struct notifier_block *nb)
{
	return container_of(nb, struct gpio_chardev_data, lineinfo_changed_nb);
}

static int lineinfo_changed_notify(struct notifier_block *nb,
				   unsigned long action, void *data)
{
	struct gpio_chardev_data *priv = to_gpio_chardev_data(nb);
	struct gpioline_info_changed chg;
	struct gpio_desc *desc = data;
	int ret;

1311
	if (!test_bit(gpio_chip_hwgpio(desc), priv->watched_lines))
1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391
		return NOTIFY_DONE;

	memset(&chg, 0, sizeof(chg));
	chg.info.line_offset = gpio_chip_hwgpio(desc);
	chg.event_type = action;
	chg.timestamp = ktime_get_ns();
	gpio_desc_to_lineinfo(desc, &chg.info);

	ret = kfifo_in_spinlocked(&priv->events, &chg, 1, &priv->wait.lock);
	if (ret)
		wake_up_poll(&priv->wait, EPOLLIN);
	else
		pr_debug_ratelimited("lineinfo event FIFO is full - event dropped\n");

	return NOTIFY_OK;
}

static __poll_t lineinfo_watch_poll(struct file *filep,
				    struct poll_table_struct *pollt)
{
	struct gpio_chardev_data *priv = filep->private_data;
	__poll_t events = 0;

	poll_wait(filep, &priv->wait, pollt);

	if (!kfifo_is_empty_spinlocked_noirqsave(&priv->events,
						 &priv->wait.lock))
		events = EPOLLIN | EPOLLRDNORM;

	return events;
}

static ssize_t lineinfo_watch_read(struct file *filep, char __user *buf,
				   size_t count, loff_t *off)
{
	struct gpio_chardev_data *priv = filep->private_data;
	struct gpioline_info_changed event;
	ssize_t bytes_read = 0;
	int ret;

	if (count < sizeof(event))
		return -EINVAL;

	do {
		spin_lock(&priv->wait.lock);
		if (kfifo_is_empty(&priv->events)) {
			if (bytes_read) {
				spin_unlock(&priv->wait.lock);
				return bytes_read;
			}

			if (filep->f_flags & O_NONBLOCK) {
				spin_unlock(&priv->wait.lock);
				return -EAGAIN;
			}

			ret = wait_event_interruptible_locked(priv->wait,
					!kfifo_is_empty(&priv->events));
			if (ret) {
				spin_unlock(&priv->wait.lock);
				return ret;
			}
		}

		ret = kfifo_out(&priv->events, &event, 1);
		spin_unlock(&priv->wait.lock);
		if (ret != 1) {
			ret = -EIO;
			break;
			/* We should never get here. See lineevent_read(). */
		}

		if (copy_to_user(buf + bytes_read, &event, sizeof(event)))
			return -EFAULT;
		bytes_read += sizeof(event);
	} while (count >= bytes_read + sizeof(event));

	return bytes_read;
}

1392 1393 1394 1395 1396 1397 1398 1399 1400 1401
/**
 * gpio_chrdev_open() - open the chardev for ioctl operations
 * @inode: inode for this chardev
 * @filp: file struct for storing private data
 * Returns 0 on success
 */
static int gpio_chrdev_open(struct inode *inode, struct file *filp)
{
	struct gpio_device *gdev = container_of(inode->i_cdev,
					      struct gpio_device, chrdev);
1402 1403
	struct gpio_chardev_data *priv;
	int ret = -ENOMEM;
1404 1405

	/* Fail on open if the backing gpiochip is gone */
1406
	if (!gdev->chip)
1407
		return -ENODEV;
1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426

	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
	if (!priv)
		return -ENOMEM;

	priv->watched_lines = bitmap_zalloc(gdev->chip->ngpio, GFP_KERNEL);
	if (!priv->watched_lines)
		goto out_free_priv;

	init_waitqueue_head(&priv->wait);
	INIT_KFIFO(priv->events);
	priv->gdev = gdev;

	priv->lineinfo_changed_nb.notifier_call = lineinfo_changed_notify;
	ret = atomic_notifier_chain_register(&gdev->notifier,
					     &priv->lineinfo_changed_nb);
	if (ret)
		goto out_free_bitmap;

1427
	get_device(&gdev->dev);
1428
	filp->private_data = priv;
1429

1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443
	ret = nonseekable_open(inode, filp);
	if (ret)
		goto out_unregister_notifier;

	return ret;

out_unregister_notifier:
	atomic_notifier_chain_unregister(&gdev->notifier,
					 &priv->lineinfo_changed_nb);
out_free_bitmap:
	bitmap_free(priv->watched_lines);
out_free_priv:
	kfree(priv);
	return ret;
1444 1445 1446 1447 1448 1449 1450 1451 1452 1453
}

/**
 * gpio_chrdev_release() - close chardev after ioctl operations
 * @inode: inode for this chardev
 * @filp: file struct for storing private data
 * Returns 0 on success
 */
static int gpio_chrdev_release(struct inode *inode, struct file *filp)
{
1454 1455
	struct gpio_chardev_data *priv = filp->private_data;
	struct gpio_device *gdev = priv->gdev;
1456

1457 1458 1459
	bitmap_free(priv->watched_lines);
	atomic_notifier_chain_unregister(&gdev->notifier,
					 &priv->lineinfo_changed_nb);
1460
	put_device(&gdev->dev);
1461 1462
	kfree(priv);

1463 1464 1465 1466 1467 1468
	return 0;
}

static const struct file_operations gpio_fileops = {
	.release = gpio_chrdev_release,
	.open = gpio_chrdev_open,
1469 1470
	.poll = lineinfo_watch_poll,
	.read = lineinfo_watch_read,
1471
	.owner = THIS_MODULE,
1472
	.llseek = no_llseek,
1473
	.unlocked_ioctl = gpio_ioctl,
1474 1475 1476
#ifdef CONFIG_COMPAT
	.compat_ioctl = gpio_ioctl_compat,
#endif
1477 1478
};

1479 1480 1481 1482 1483 1484
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);
1485
	kfree_const(gdev->label);
1486
	kfree(gdev->descs);
1487
	kfree(gdev);
1488 1489
}

1490 1491
static int gpiochip_setup_dev(struct gpio_device *gdev)
{
1492
	int ret;
1493 1494 1495 1496

	cdev_init(&gdev->chrdev, &gpio_fileops);
	gdev->chrdev.owner = THIS_MODULE;
	gdev->dev.devt = MKDEV(MAJOR(gpio_devt), gdev->id);
1497

1498 1499 1500
	ret = cdev_device_add(&gdev->chrdev, &gdev->dev);
	if (ret)
		return ret;
1501 1502 1503

	chip_dbg(gdev->chip, "added GPIO chardev (%d:%d)\n",
		 MAJOR(gpio_devt), gdev->id);
1504

1505 1506
	ret = gpiochip_sysfs_register(gdev);
	if (ret)
1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517
		goto err_remove_device;

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

	return 0;

err_remove_device:
1518
	cdev_device_del(&gdev->chrdev, &gdev->dev);
1519
	return ret;
1520 1521
}

1522
static void gpiochip_machine_hog(struct gpio_chip *gc, struct gpiod_hog *hog)
1523 1524 1525 1526
{
	struct gpio_desc *desc;
	int rv;

1527
	desc = gpiochip_get_desc(gc, hog->chip_hwnum);
1528 1529 1530 1531 1532 1533
	if (IS_ERR(desc)) {
		pr_err("%s: unable to get GPIO desc: %ld\n",
		       __func__, PTR_ERR(desc));
		return;
	}

1534
	if (test_bit(FLAG_IS_HOGGED, &desc->flags))
1535 1536 1537 1538 1539
		return;

	rv = gpiod_hog(desc, hog->line_name, hog->lflags, hog->dflags);
	if (rv)
		pr_err("%s: unable to hog GPIO line (%s:%u): %d\n",
1540
		       __func__, gc->label, hog->chip_hwnum, rv);
1541 1542
}

1543
static void machine_gpiochip_add(struct gpio_chip *gc)
1544 1545 1546 1547 1548 1549
{
	struct gpiod_hog *hog;

	mutex_lock(&gpio_machine_hogs_mutex);

	list_for_each_entry(hog, &gpio_machine_hogs, list) {
1550 1551
		if (!strcmp(gc->label, hog->chip_label))
			gpiochip_machine_hog(gc, hog);
1552 1553 1554 1555 1556
	}

	mutex_unlock(&gpio_machine_hogs_mutex);
}

1557 1558 1559
static void gpiochip_setup_devs(void)
{
	struct gpio_device *gdev;
1560
	int ret;
1561 1562

	list_for_each_entry(gdev, &gpio_devices, list) {
1563 1564
		ret = gpiochip_setup_dev(gdev);
		if (ret)
1565
			pr_err("%s: Failed to initialize gpio device (%d)\n",
1566
			       dev_name(&gdev->dev), ret);
1567 1568 1569
	}
}

1570
int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
1571 1572
			       struct lock_class_key *lock_key,
			       struct lock_class_key *request_key)
1573 1574
{
	unsigned long	flags;
1575
	int		ret = 0;
1576
	unsigned	i;
1577
	int		base = gc->base;
1578
	struct gpio_device *gdev;
1579

1580 1581 1582 1583
	/*
	 * First: allocate and populate the internal stat container, and
	 * set up the struct device.
	 */
1584
	gdev = kzalloc(sizeof(*gdev), GFP_KERNEL);
1585
	if (!gdev)
1586
		return -ENOMEM;
1587
	gdev->dev.bus = &gpio_bus_type;
1588 1589 1590 1591 1592
	gdev->chip = gc;
	gc->gpiodev = gdev;
	if (gc->parent) {
		gdev->dev.parent = gc->parent;
		gdev->dev.of_node = gc->parent->of_node;
1593 1594
	}

1595 1596
#ifdef CONFIG_OF_GPIO
	/* If the gpiochip has an assigned OF node this takes precedence */
1597 1598
	if (gc->of_node)
		gdev->dev.of_node = gc->of_node;
B
Biju Das 已提交
1599
	else
1600
		gc->of_node = gdev->dev.of_node;
1601
#endif
1602

1603 1604
	gdev->id = ida_simple_get(&gpio_ida, 0, 0, GFP_KERNEL);
	if (gdev->id < 0) {
1605
		ret = gdev->id;
1606 1607
		goto err_free_gdev;
	}
1608
	dev_set_name(&gdev->dev, GPIOCHIP_NAME "%d", gdev->id);
1609 1610
	device_initialize(&gdev->dev);
	dev_set_drvdata(&gdev->dev, gdev);
1611 1612 1613
	if (gc->parent && gc->parent->driver)
		gdev->owner = gc->parent->driver->owner;
	else if (gc->owner)
1614
		/* TODO: remove chip->owner */
1615
		gdev->owner = gc->owner;
1616 1617
	else
		gdev->owner = THIS_MODULE;
1618

1619
	gdev->descs = kcalloc(gc->ngpio, sizeof(gdev->descs[0]), GFP_KERNEL);
1620
	if (!gdev->descs) {
1621
		ret = -ENOMEM;
1622
		goto err_free_ida;
1623 1624
	}

1625 1626
	if (gc->ngpio == 0) {
		chip_err(gc, "tried to insert a GPIO chip with zero lines\n");
1627
		ret = -EINVAL;
1628
		goto err_free_descs;
1629
	}
1630

1631 1632 1633
	if (gc->ngpio > FASTPATH_NGPIO)
		chip_warn(gc, "line cnt %u is greater than fast path cnt %u\n",
			  gc->ngpio, FASTPATH_NGPIO);
L
Laura Abbott 已提交
1634

1635
	gdev->label = kstrdup_const(gc->label ?: "unknown", GFP_KERNEL);
1636
	if (!gdev->label) {
1637
		ret = -ENOMEM;
1638
		goto err_free_descs;
1639 1640
	}

1641
	gdev->ngpio = gc->ngpio;
1642
	gdev->data = data;
1643

1644 1645
	spin_lock_irqsave(&gpio_lock, flags);

1646 1647 1648 1649 1650 1651 1652
	/*
	 * TODO: this allocates a Linux GPIO number base in the global
	 * GPIO numberspace for this chip. In the long run we want to
	 * get *rid* of this numberspace and use only descriptors, but
	 * it may be a pipe dream. It will not happen before we get rid
	 * of the sysfs interface anyways.
	 */
1653
	if (base < 0) {
1654
		base = gpiochip_find_base(gc->ngpio);
1655
		if (base < 0) {
1656
			ret = base;
1657
			spin_unlock_irqrestore(&gpio_lock, flags);
1658
			goto err_free_label;
1659
		}
1660 1661 1662 1663 1664 1665
		/*
		 * TODO: it should not be necessary to reflect the assigned
		 * base outside of the GPIO subsystem. Go over drivers and
		 * see if anyone makes use of this, else drop this and assign
		 * a poison instead.
		 */
1666
		gc->base = base;
1667
	}
1668
	gdev->base = base;
1669

1670 1671
	ret = gpiodev_add_to_list(gdev);
	if (ret) {
1672
		spin_unlock_irqrestore(&gpio_lock, flags);
1673
		goto err_free_label;
1674
	}
1675

1676
	for (i = 0; i < gc->ngpio; i++)
1677
		gdev->descs[i].gdev = gdev;
1678

1679 1680
	spin_unlock_irqrestore(&gpio_lock, flags);

1681 1682
	ATOMIC_INIT_NOTIFIER_HEAD(&gdev->notifier);

1683
#ifdef CONFIG_PINCTRL
1684
	INIT_LIST_HEAD(&gdev->pin_ranges);
1685 1686
#endif

1687
	ret = gpiochip_set_desc_names(gc);
1688
	if (ret)
1689 1690
		goto err_remove_from_list;

1691
	ret = gpiochip_alloc_valid_mask(gc);
1692
	if (ret)
1693
		goto err_remove_from_list;
1694

1695
	ret = of_gpiochip_add(gc);
1696
	if (ret)
1697
		goto err_free_gpiochip_mask;
1698

1699
	ret = gpiochip_init_valid_mask(gc);
1700
	if (ret)
1701
		goto err_remove_of_chip;
1702

1703
	for (i = 0; i < gc->ngpio; i++) {
1704 1705
		struct gpio_desc *desc = &gdev->descs[i];

1706
		if (gc->get_direction && gpiochip_line_is_valid(gc, i)) {
1707
			assign_bit(FLAG_IS_OUT,
1708
				   &desc->flags, !gc->get_direction(gc, i));
1709
		} else {
1710
			assign_bit(FLAG_IS_OUT,
1711
				   &desc->flags, !gc->direction_input);
1712
		}
1713 1714
	}

1715
	ret = gpiochip_add_pin_ranges(gc);
1716 1717 1718
	if (ret)
		goto err_remove_of_chip;

1719
	acpi_gpiochip_add(gc);
1720

1721
	machine_gpiochip_add(gc);
1722

1723
	ret = gpiochip_irqchip_init_valid_mask(gc);
1724 1725 1726
	if (ret)
		goto err_remove_acpi_chip;

1727
	ret = gpiochip_irqchip_init_hw(gc);
L
Linus Walleij 已提交
1728
	if (ret)
1729 1730
		goto err_remove_acpi_chip;

1731
	ret = gpiochip_add_irqchip(gc, lock_key, request_key);
L
Linus Walleij 已提交
1732
	if (ret)
1733 1734
		goto err_remove_irqchip_mask;

1735 1736 1737 1738 1739
	/*
	 * By first adding the chardev, and then adding the device,
	 * we get a device node entry in sysfs under
	 * /sys/bus/gpio/devices/gpiochipN/dev that can be used for
	 * coldplug of device nodes and other udev business.
1740 1741
	 * We can do this only if gpiolib has been initialized.
	 * Otherwise, defer until later.
1742
	 */
1743
	if (gpiolib_initialized) {
1744 1745
		ret = gpiochip_setup_dev(gdev);
		if (ret)
1746
			goto err_remove_irqchip;
1747
	}
1748
	return 0;
1749

1750
err_remove_irqchip:
1751
	gpiochip_irqchip_remove(gc);
1752
err_remove_irqchip_mask:
1753
	gpiochip_irqchip_free_valid_mask(gc);
1754
err_remove_acpi_chip:
1755
	acpi_gpiochip_remove(gc);
1756
err_remove_of_chip:
1757 1758
	gpiochip_free_hogs(gc);
	of_gpiochip_remove(gc);
1759
err_free_gpiochip_mask:
1760 1761
	gpiochip_remove_pin_ranges(gc);
	gpiochip_free_valid_mask(gc);
1762
err_remove_from_list:
1763
	spin_lock_irqsave(&gpio_lock, flags);
1764
	list_del(&gdev->list);
1765
	spin_unlock_irqrestore(&gpio_lock, flags);
1766
err_free_label:
1767
	kfree_const(gdev->label);
1768 1769
err_free_descs:
	kfree(gdev->descs);
1770
err_free_ida:
1771
	ida_simple_remove(&gpio_ida, gdev->id);
1772
err_free_gdev:
1773
	/* failures here can mean systems won't boot... */
1774
	pr_err("%s: GPIOs %d..%d (%s) failed to register, %d\n", __func__,
1775
	       gdev->base, gdev->base + gdev->ngpio - 1,
1776
	       gc->label ? : "generic", ret);
1777
	kfree(gdev);
1778
	return ret;
1779
}
1780
EXPORT_SYMBOL_GPL(gpiochip_add_data_with_key);
1781

1782 1783
/**
 * gpiochip_get_data() - get per-subdriver data for the chip
1784
 * @gc: GPIO chip
T
Thierry Reding 已提交
1785 1786 1787
 *
 * Returns:
 * The per-subdriver data for the chip.
1788
 */
1789
void *gpiochip_get_data(struct gpio_chip *gc)
1790
{
1791
	return gc->gpiodev->data;
1792 1793 1794
}
EXPORT_SYMBOL_GPL(gpiochip_get_data);

1795 1796
/**
 * gpiochip_remove() - unregister a gpio_chip
1797
 * @gc: the chip to unregister
1798 1799 1800
 *
 * A gpio_chip with any GPIOs still requested may not be removed.
 */
1801
void gpiochip_remove(struct gpio_chip *gc)
1802
{
1803
	struct gpio_device *gdev = gc->gpiodev;
1804
	unsigned long	flags;
1805
	unsigned int	i;
1806

1807
	/* FIXME: should the legacy sysfs handling be moved to gpio_device? */
1808
	gpiochip_sysfs_unregister(gdev);
1809
	gpiochip_free_hogs(gc);
1810 1811
	/* Numb the device, cancelling all outstanding operations */
	gdev->chip = NULL;
1812 1813 1814 1815 1816
	gpiochip_irqchip_remove(gc);
	acpi_gpiochip_remove(gc);
	of_gpiochip_remove(gc);
	gpiochip_remove_pin_ranges(gc);
	gpiochip_free_valid_mask(gc);
1817 1818 1819 1820 1821
	/*
	 * We accept no more calls into the driver from this point, so
	 * NULL the driver data pointer
	 */
	gdev->data = NULL;
1822

1823
	spin_lock_irqsave(&gpio_lock, flags);
1824
	for (i = 0; i < gdev->ngpio; i++) {
1825
		if (gpiochip_is_requested(gc, i))
1826
			break;
1827 1828
	}
	spin_unlock_irqrestore(&gpio_lock, flags);
1829

1830
	if (i != gdev->ngpio)
1831
		dev_crit(&gdev->dev,
1832
			 "REMOVING GPIOCHIP WITH GPIOS STILL REQUESTED\n");
J
Johan Hovold 已提交
1833

1834 1835 1836 1837 1838 1839
	/*
	 * 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.
	 */
1840
	cdev_device_del(&gdev->chrdev, &gdev->dev);
1841
	put_device(&gdev->dev);
1842 1843 1844
}
EXPORT_SYMBOL_GPL(gpiochip_remove);

1845 1846 1847
/**
 * gpiochip_find() - iterator for locating a specific gpio_chip
 * @data: data to pass to match function
T
Thierry Reding 已提交
1848
 * @match: Callback function to check gpio_chip
1849 1850 1851 1852 1853 1854 1855
 *
 * 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.
 */
1856
struct gpio_chip *gpiochip_find(void *data,
1857
				int (*match)(struct gpio_chip *gc,
1858
					     void *data))
1859
{
1860
	struct gpio_device *gdev;
1861
	struct gpio_chip *gc = NULL;
1862 1863 1864
	unsigned long flags;

	spin_lock_irqsave(&gpio_lock, flags);
1865
	list_for_each_entry(gdev, &gpio_devices, list)
1866
		if (gdev->chip && match(gdev->chip, data)) {
1867
			gc = gdev->chip;
1868
			break;
1869
		}
1870

1871 1872
	spin_unlock_irqrestore(&gpio_lock, flags);

1873
	return gc;
1874
}
J
Jean Delvare 已提交
1875
EXPORT_SYMBOL_GPL(gpiochip_find);
1876

1877
static int gpiochip_match_name(struct gpio_chip *gc, void *data)
1878 1879 1880
{
	const char *name = data;

1881
	return !strcmp(gc->label, name);
1882 1883 1884 1885 1886 1887 1888
}

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

1889 1890 1891 1892 1893 1894
#ifdef CONFIG_GPIOLIB_IRQCHIP

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

1895 1896 1897 1898 1899 1900 1901 1902 1903 1904
static int gpiochip_irqchip_init_hw(struct gpio_chip *gc)
{
	struct gpio_irq_chip *girq = &gc->irq;

	if (!girq->init_hw)
		return 0;

	return girq->init_hw(gc);
}

1905
static int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gc)
1906
{
1907 1908 1909
	struct gpio_irq_chip *girq = &gc->irq;

	if (!girq->init_valid_mask)
1910 1911
		return 0;

1912 1913
	girq->valid_mask = gpiochip_allocate_mask(gc);
	if (!girq->valid_mask)
1914 1915
		return -ENOMEM;

1916 1917
	girq->init_valid_mask(gc, girq->valid_mask, gc->ngpio);

1918 1919 1920
	return 0;
}

1921
static void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gc)
1922
{
1923 1924
	bitmap_free(gc->irq.valid_mask);
	gc->irq.valid_mask = NULL;
1925 1926
}

1927
bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gc,
1928
				unsigned int offset)
1929
{
1930
	if (!gpiochip_line_is_valid(gc, offset))
1931
		return false;
1932
	/* No mask means all valid */
1933
	if (likely(!gc->irq.valid_mask))
1934
		return true;
1935
	return test_bit(offset, gc->irq.valid_mask);
1936
}
1937
EXPORT_SYMBOL_GPL(gpiochip_irqchip_irq_valid);
1938

1939
/**
1940
 * gpiochip_set_cascaded_irqchip() - connects a cascaded irqchip to a gpiochip
1941
 * @gc: the gpiochip to set the irqchip chain to
1942
 * @parent_irq: the irq number corresponding to the parent IRQ for this
1943
 * cascaded irqchip
1944
 * @parent_handler: the parent interrupt handler for the accumulated IRQ
1945 1946
 * coming out of the gpiochip. If the interrupt is nested rather than
 * cascaded, pass NULL in this handler argument
1947
 */
1948
static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gc,
1949
					  unsigned int parent_irq,
1950
					  irq_flow_handler_t parent_handler)
1951
{
1952 1953 1954 1955 1956
	struct gpio_irq_chip *girq = &gc->irq;
	struct device *dev = &gc->gpiodev->dev;

	if (!girq->domain) {
		chip_err(gc, "called %s before setting up irqchip\n",
1957
			 __func__);
1958 1959 1960
		return;
	}

1961
	if (parent_handler) {
1962 1963
		if (gc->can_sleep) {
			chip_err(gc,
1964
				 "you cannot have chained interrupts on a chip that may sleep\n");
1965 1966
			return;
		}
1967 1968 1969 1970 1971 1972 1973 1974 1975
		girq->parents = devm_kcalloc(dev, 1,
					     sizeof(*girq->parents),
					     GFP_KERNEL);
		if (!girq->parents) {
			chip_err(gc, "out of memory allocating parent IRQ\n");
			return;
		}
		girq->parents[0] = parent_irq;
		girq->num_parents = 1;
1976 1977 1978 1979
		/*
		 * The parent irqchip is already using the chip_data for this
		 * irqchip, so our callbacks simply use the handler_data.
		 */
1980
		irq_set_chained_handler_and_data(parent_irq, parent_handler,
1981
						 gc);
1982
	}
1983
}
1984 1985 1986

/**
 * gpiochip_set_nested_irqchip() - connects a nested irqchip to a gpiochip
1987
 * @gc: the gpiochip to set the irqchip nested handler to
1988 1989 1990 1991
 * @irqchip: the irqchip to nest to the gpiochip
 * @parent_irq: the irq number corresponding to the parent IRQ for this
 * nested irqchip
 */
1992
void gpiochip_set_nested_irqchip(struct gpio_chip *gc,
1993
				 struct irq_chip *irqchip,
1994
				 unsigned int parent_irq)
1995
{
1996
	gpiochip_set_cascaded_irqchip(gc, parent_irq, NULL);
1997 1998 1999
}
EXPORT_SYMBOL_GPL(gpiochip_set_nested_irqchip);

2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY

/**
 * gpiochip_set_hierarchical_irqchip() - connects a hierarchical irqchip
 * to a gpiochip
 * @gc: the gpiochip to set the irqchip hierarchical handler to
 * @irqchip: the irqchip to handle this level of the hierarchy, the interrupt
 * will then percolate up to the parent
 */
static void gpiochip_set_hierarchical_irqchip(struct gpio_chip *gc,
					      struct irq_chip *irqchip)
{
	/* DT will deal with mapping each IRQ as we go along */
	if (is_of_node(gc->irq.fwnode))
		return;

	/*
	 * This is for legacy and boardfile "irqchip" fwnodes: allocate
	 * irqs upfront instead of dynamically since we don't have the
	 * dynamic type of allocation that hardware description languages
	 * provide. Once all GPIO drivers using board files are gone from
	 * the kernel we can delete this code, but for a transitional period
	 * it is necessary to keep this around.
	 */
	if (is_fwnode_irqchip(gc->irq.fwnode)) {
		int i;
		int ret;

		for (i = 0; i < gc->ngpio; i++) {
			struct irq_fwspec fwspec;
			unsigned int parent_hwirq;
			unsigned int parent_type;
			struct gpio_irq_chip *girq = &gc->irq;

			/*
			 * We call the child to parent translation function
			 * only to check if the child IRQ is valid or not.
			 * Just pick the rising edge type here as that is what
			 * we likely need to support.
			 */
			ret = girq->child_to_parent_hwirq(gc, i,
							  IRQ_TYPE_EDGE_RISING,
							  &parent_hwirq,
							  &parent_type);
			if (ret) {
				chip_err(gc, "skip set-up on hwirq %d\n",
					 i);
				continue;
			}

			fwspec.fwnode = gc->irq.fwnode;
			/* This is the hwirq for the GPIO line side of things */
			fwspec.param[0] = girq->child_offset_to_irq(gc, i);
			/* Just pick something */
			fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
			fwspec.param_count = 2;
			ret = __irq_domain_alloc_irqs(gc->irq.domain,
						      /* just pick something */
						      -1,
						      1,
						      NUMA_NO_NODE,
						      &fwspec,
						      false,
						      NULL);
			if (ret < 0) {
				chip_err(gc,
					 "can not allocate irq for GPIO line %d parent hwirq %d in hierarchy domain: %d\n",
					 i, parent_hwirq,
					 ret);
			}
		}
	}

	chip_err(gc, "%s unknown fwnode type proceed anyway\n", __func__);

	return;
}

static int gpiochip_hierarchy_irq_domain_translate(struct irq_domain *d,
						   struct irq_fwspec *fwspec,
						   unsigned long *hwirq,
						   unsigned int *type)
{
	/* We support standard DT translation */
	if (is_of_node(fwspec->fwnode) && fwspec->param_count == 2) {
		return irq_domain_translate_twocell(d, fwspec, hwirq, type);
	}

	/* This is for board files and others not using DT */
	if (is_fwnode_irqchip(fwspec->fwnode)) {
		int ret;

		ret = irq_domain_translate_twocell(d, fwspec, hwirq, type);
		if (ret)
			return ret;
		WARN_ON(*type == IRQ_TYPE_NONE);
		return 0;
	}
	return -EINVAL;
}

static int gpiochip_hierarchy_irq_domain_alloc(struct irq_domain *d,
					       unsigned int irq,
					       unsigned int nr_irqs,
					       void *data)
{
	struct gpio_chip *gc = d->host_data;
	irq_hw_number_t hwirq;
	unsigned int type = IRQ_TYPE_NONE;
	struct irq_fwspec *fwspec = data;
2110
	void *parent_arg;
2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125
	unsigned int parent_hwirq;
	unsigned int parent_type;
	struct gpio_irq_chip *girq = &gc->irq;
	int ret;

	/*
	 * The nr_irqs parameter is always one except for PCI multi-MSI
	 * so this should not happen.
	 */
	WARN_ON(nr_irqs != 1);

	ret = gc->irq.child_irq_domain_ops.translate(d, fwspec, &hwirq, &type);
	if (ret)
		return ret;

2126
	chip_dbg(gc, "allocate IRQ %d, hwirq %lu\n", irq,  hwirq);
2127 2128 2129 2130 2131 2132 2133

	ret = girq->child_to_parent_hwirq(gc, hwirq, type,
					  &parent_hwirq, &parent_type);
	if (ret) {
		chip_err(gc, "can't look up hwirq %lu\n", hwirq);
		return ret;
	}
2134
	chip_dbg(gc, "found parent hwirq %u\n", parent_hwirq);
2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149

	/*
	 * We set handle_bad_irq because the .set_type() should
	 * always be invoked and set the right type of handler.
	 */
	irq_domain_set_info(d,
			    irq,
			    hwirq,
			    gc->irq.chip,
			    gc,
			    girq->handler,
			    NULL, NULL);
	irq_set_probe(irq);

	/* This parent only handles asserted level IRQs */
2150 2151 2152 2153
	parent_arg = girq->populate_parent_alloc_arg(gc, parent_hwirq, parent_type);
	if (!parent_arg)
		return -ENOMEM;

2154
	chip_dbg(gc, "alloc_irqs_parent for %d parent hwirq %d\n",
2155
		  irq, parent_hwirq);
2156
	irq_set_lockdep_class(irq, gc->irq.lock_key, gc->irq.request_key);
2157
	ret = irq_domain_alloc_irqs_parent(d, irq, 1, parent_arg);
2158 2159 2160 2161 2162 2163
	/*
	 * If the parent irqdomain is msi, the interrupts have already
	 * been allocated, so the EEXIST is good.
	 */
	if (irq_domain_is_msi(d->parent) && (ret == -EEXIST))
		ret = 0;
2164 2165 2166 2167 2168
	if (ret)
		chip_err(gc,
			 "failed to allocate parent hwirq %d for hwirq %lu\n",
			 parent_hwirq, hwirq);

2169
	kfree(parent_arg);
2170 2171 2172
	return ret;
}

2173
static unsigned int gpiochip_child_offset_to_irq_noop(struct gpio_chip *gc,
2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205
						      unsigned int offset)
{
	return offset;
}

static void gpiochip_hierarchy_setup_domain_ops(struct irq_domain_ops *ops)
{
	ops->activate = gpiochip_irq_domain_activate;
	ops->deactivate = gpiochip_irq_domain_deactivate;
	ops->alloc = gpiochip_hierarchy_irq_domain_alloc;
	ops->free = irq_domain_free_irqs_common;

	/*
	 * We only allow overriding the translate() function for
	 * hierarchical chips, and this should only be done if the user
	 * really need something other than 1:1 translation.
	 */
	if (!ops->translate)
		ops->translate = gpiochip_hierarchy_irq_domain_translate;
}

static int gpiochip_hierarchy_add_domain(struct gpio_chip *gc)
{
	if (!gc->irq.child_to_parent_hwirq ||
	    !gc->irq.fwnode) {
		chip_err(gc, "missing irqdomain vital data\n");
		return -EINVAL;
	}

	if (!gc->irq.child_offset_to_irq)
		gc->irq.child_offset_to_irq = gpiochip_child_offset_to_irq_noop;

2206 2207
	if (!gc->irq.populate_parent_alloc_arg)
		gc->irq.populate_parent_alloc_arg =
2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232
			gpiochip_populate_parent_fwspec_twocell;

	gpiochip_hierarchy_setup_domain_ops(&gc->irq.child_irq_domain_ops);

	gc->irq.domain = irq_domain_create_hierarchy(
		gc->irq.parent_domain,
		0,
		gc->ngpio,
		gc->irq.fwnode,
		&gc->irq.child_irq_domain_ops,
		gc);

	if (!gc->irq.domain)
		return -ENOMEM;

	gpiochip_set_hierarchical_irqchip(gc, gc->irq.chip);

	return 0;
}

static bool gpiochip_hierarchy_is_hierarchical(struct gpio_chip *gc)
{
	return !!gc->irq.parent_domain;
}

2233
void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *gc,
2234 2235 2236
					     unsigned int parent_hwirq,
					     unsigned int parent_type)
{
2237 2238 2239 2240 2241 2242
	struct irq_fwspec *fwspec;

	fwspec = kmalloc(sizeof(*fwspec), GFP_KERNEL);
	if (!fwspec)
		return NULL;

2243
	fwspec->fwnode = gc->irq.parent_domain->fwnode;
2244 2245 2246
	fwspec->param_count = 2;
	fwspec->param[0] = parent_hwirq;
	fwspec->param[1] = parent_type;
2247 2248

	return fwspec;
2249 2250 2251
}
EXPORT_SYMBOL_GPL(gpiochip_populate_parent_fwspec_twocell);

2252
void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *gc,
2253 2254 2255
					      unsigned int parent_hwirq,
					      unsigned int parent_type)
{
2256 2257 2258 2259 2260 2261
	struct irq_fwspec *fwspec;

	fwspec = kmalloc(sizeof(*fwspec), GFP_KERNEL);
	if (!fwspec)
		return NULL;

2262
	fwspec->fwnode = gc->irq.parent_domain->fwnode;
2263 2264 2265 2266 2267
	fwspec->param_count = 4;
	fwspec->param[0] = 0;
	fwspec->param[1] = parent_hwirq;
	fwspec->param[2] = 0;
	fwspec->param[3] = parent_type;
2268 2269

	return fwspec;
2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286
}
EXPORT_SYMBOL_GPL(gpiochip_populate_parent_fwspec_fourcell);

#else

static int gpiochip_hierarchy_add_domain(struct gpio_chip *gc)
{
	return -EINVAL;
}

static bool gpiochip_hierarchy_is_hierarchical(struct gpio_chip *gc)
{
	return false;
}

#endif /* CONFIG_IRQ_DOMAIN_HIERARCHY */

2287 2288 2289 2290 2291 2292 2293 2294 2295 2296
/**
 * 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.
 */
2297 2298
int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
		     irq_hw_number_t hwirq)
2299
{
2300
	struct gpio_chip *gc = d->host_data;
2301
	int ret = 0;
2302

2303
	if (!gpiochip_irqchip_irq_valid(gc, hwirq))
2304 2305
		return -ENXIO;

2306
	irq_set_chip_data(irq, gc);
2307 2308 2309 2310
	/*
	 * This lock class tells lockdep that GPIO irqs are in a different
	 * category than their parents, so it won't report false recursion.
	 */
2311 2312
	irq_set_lockdep_class(irq, gc->irq.lock_key, gc->irq.request_key);
	irq_set_chip_and_handler(irq, gc->irq.chip, gc->irq.handler);
2313
	/* Chips that use nested thread handlers have them marked */
2314
	if (gc->irq.threaded)
2315
		irq_set_nested_thread(irq, 1);
2316
	irq_set_noprobe(irq);
R
Rob Herring 已提交
2317

2318 2319 2320 2321
	if (gc->irq.num_parents == 1)
		ret = irq_set_parent(irq, gc->irq.parents[0]);
	else if (gc->irq.map)
		ret = irq_set_parent(irq, gc->irq.map[hwirq]);
2322

2323 2324
	if (ret < 0)
		return ret;
2325

2326 2327 2328 2329
	/*
	 * No set-up of the hardware will happen if IRQ_TYPE_NONE
	 * is passed as default type.
	 */
2330 2331
	if (gc->irq.default_type != IRQ_TYPE_NONE)
		irq_set_irq_type(irq, gc->irq.default_type);
2332 2333 2334

	return 0;
}
2335
EXPORT_SYMBOL_GPL(gpiochip_irq_map);
2336

2337
void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq)
L
Linus Walleij 已提交
2338
{
2339
	struct gpio_chip *gc = d->host_data;
2340

2341
	if (gc->irq.threaded)
2342
		irq_set_nested_thread(irq, 0);
L
Linus Walleij 已提交
2343 2344 2345
	irq_set_chip_and_handler(irq, NULL, NULL);
	irq_set_chip_data(irq, NULL);
}
2346
EXPORT_SYMBOL_GPL(gpiochip_irq_unmap);
L
Linus Walleij 已提交
2347

2348 2349
static const struct irq_domain_ops gpiochip_domain_ops = {
	.map	= gpiochip_irq_map,
L
Linus Walleij 已提交
2350
	.unmap	= gpiochip_irq_unmap,
2351 2352 2353 2354
	/* Virtually all GPIO irqchips are twocell:ed */
	.xlate	= irq_domain_xlate_twocell,
};

2355 2356 2357 2358 2359
/*
 * TODO: move these activate/deactivate in under the hierarchicial
 * irqchip implementation as static once SPMI and SSBI (all external
 * users) are phased over.
 */
2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372
/**
 * gpiochip_irq_domain_activate() - Lock a GPIO to be used as an IRQ
 * @domain: The IRQ domain used by this IRQ chip
 * @data: Outermost irq_data associated with the IRQ
 * @reserve: If set, only reserve an interrupt vector instead of assigning one
 *
 * This function is a wrapper that calls gpiochip_lock_as_irq() and is to be
 * used as the activate function for the &struct irq_domain_ops. The host_data
 * for the IRQ domain must be the &struct gpio_chip.
 */
int gpiochip_irq_domain_activate(struct irq_domain *domain,
				 struct irq_data *data, bool reserve)
{
2373
	struct gpio_chip *gc = domain->host_data;
2374

2375
	return gpiochip_lock_as_irq(gc, data->hwirq);
2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390
}
EXPORT_SYMBOL_GPL(gpiochip_irq_domain_activate);

/**
 * gpiochip_irq_domain_deactivate() - Unlock a GPIO used as an IRQ
 * @domain: The IRQ domain used by this IRQ chip
 * @data: Outermost irq_data associated with the IRQ
 *
 * This function is a wrapper that will call gpiochip_unlock_as_irq() and is to
 * be used as the deactivate function for the &struct irq_domain_ops. The
 * host_data for the IRQ domain must be the &struct gpio_chip.
 */
void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
				    struct irq_data *data)
{
2391
	struct gpio_chip *gc = domain->host_data;
2392

2393
	return gpiochip_unlock_as_irq(gc, data->hwirq);
2394 2395 2396
}
EXPORT_SYMBOL_GPL(gpiochip_irq_domain_deactivate);

2397
static int gpiochip_to_irq(struct gpio_chip *gc, unsigned offset)
2398
{
2399
	struct irq_domain *domain = gc->irq.domain;
2400

2401
	if (!gpiochip_irqchip_irq_valid(gc, offset))
2402
		return -ENXIO;
2403

2404 2405 2406 2407 2408 2409
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
	if (irq_domain_is_hierarchy(domain)) {
		struct irq_fwspec spec;

		spec.fwnode = domain->fwnode;
		spec.param_count = 2;
2410
		spec.param[0] = gc->irq.child_offset_to_irq(gc, offset);
2411 2412 2413 2414 2415 2416 2417
		spec.param[1] = IRQ_TYPE_NONE;

		return irq_create_fwspec_mapping(&spec);
	}
#endif

	return irq_create_mapping(domain, offset);
2418 2419 2420 2421
}

static int gpiochip_irq_reqres(struct irq_data *d)
{
2422
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
2423

2424
	return gpiochip_reqres_irq(gc, d->hwirq);
2425 2426 2427 2428
}

static void gpiochip_irq_relres(struct irq_data *d)
{
2429
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
2430

2431
	gpiochip_relres_irq(gc, d->hwirq);
2432 2433
}

2434
static void gpiochip_irq_enable(struct irq_data *d)
2435
{
2436
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
2437

2438 2439 2440
	gpiochip_enable_irq(gc, d->hwirq);
	if (gc->irq.irq_enable)
		gc->irq.irq_enable(d);
2441
	else
2442
		gc->irq.chip->irq_unmask(d);
2443 2444 2445 2446
}

static void gpiochip_irq_disable(struct irq_data *d)
{
2447
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
2448

2449 2450 2451 2452 2453 2454 2455
	/*
	 * Since we override .irq_disable() we need to mimic the
	 * behaviour of __irq_disable() in irq/chip.c.
	 * First call .irq_disable() if it exists, else mimic the
	 * behaviour of mask_irq() which calls .irq_mask() if
	 * it exists.
	 */
2456 2457
	if (gc->irq.irq_disable)
		gc->irq.irq_disable(d);
2458
	else if (gc->irq.chip->irq_mask)
2459 2460
		gc->irq.chip->irq_mask(d);
	gpiochip_disable_irq(gc, d->hwirq);
2461 2462
}

2463
static void gpiochip_set_irq_hooks(struct gpio_chip *gc)
2464
{
2465
	struct irq_chip *irqchip = gc->irq.chip;
2466 2467 2468 2469 2470 2471

	if (!irqchip->irq_request_resources &&
	    !irqchip->irq_release_resources) {
		irqchip->irq_request_resources = gpiochip_irq_reqres;
		irqchip->irq_release_resources = gpiochip_irq_relres;
	}
2472
	if (WARN_ON(gc->irq.irq_enable))
2473
		return;
2474 2475 2476 2477 2478 2479
	/* Check if the irqchip already has this hook... */
	if (irqchip->irq_enable == gpiochip_irq_enable) {
		/*
		 * ...and if so, give a gentle warning that this is bad
		 * practice.
		 */
2480
		chip_info(gc,
2481 2482 2483
			  "detected irqchip that is shared with multiple gpiochips: please fix the driver.\n");
		return;
	}
2484 2485
	gc->irq.irq_enable = irqchip->irq_enable;
	gc->irq.irq_disable = irqchip->irq_disable;
2486 2487
	irqchip->irq_enable = gpiochip_irq_enable;
	irqchip->irq_disable = gpiochip_irq_disable;
2488 2489
}

2490 2491
/**
 * gpiochip_add_irqchip() - adds an IRQ chip to a GPIO chip
2492
 * @gc: the GPIO chip to add the IRQ chip to
2493 2494
 * @lock_key: lockdep class for IRQ lock
 * @request_key: lockdep class for IRQ request
2495
 */
2496
static int gpiochip_add_irqchip(struct gpio_chip *gc,
2497 2498
				struct lock_class_key *lock_key,
				struct lock_class_key *request_key)
2499
{
2500
	struct irq_chip *irqchip = gc->irq.chip;
2501
	const struct irq_domain_ops *ops = NULL;
2502 2503 2504 2505 2506 2507 2508
	struct device_node *np;
	unsigned int type;
	unsigned int i;

	if (!irqchip)
		return 0;

2509 2510
	if (gc->irq.parent_handler && gc->can_sleep) {
		chip_err(gc, "you cannot have chained interrupts on a chip that may sleep\n");
2511 2512 2513
		return -EINVAL;
	}

2514 2515
	np = gc->gpiodev->dev.of_node;
	type = gc->irq.default_type;
2516 2517 2518 2519 2520 2521 2522 2523 2524 2525

	/*
	 * Specifying a default trigger is a terrible idea if DT or ACPI is
	 * used to configure the interrupts, as you may end up with
	 * conflicting triggers. Tell the user, and reset to NONE.
	 */
	if (WARN(np && type != IRQ_TYPE_NONE,
		 "%s: Ignoring %u default trigger\n", np->full_name, type))
		type = IRQ_TYPE_NONE;

2526 2527
	if (has_acpi_companion(gc->parent) && type != IRQ_TYPE_NONE) {
		acpi_handle_warn(ACPI_HANDLE(gc->parent),
2528 2529 2530 2531
				 "Ignoring %u default trigger\n", type);
		type = IRQ_TYPE_NONE;
	}

2532 2533 2534 2535
	gc->to_irq = gpiochip_to_irq;
	gc->irq.default_type = type;
	gc->irq.lock_key = lock_key;
	gc->irq.request_key = request_key;
2536

2537
	/* If a parent irqdomain is provided, let's build a hierarchy */
2538 2539
	if (gpiochip_hierarchy_is_hierarchical(gc)) {
		int ret = gpiochip_hierarchy_add_domain(gc);
2540 2541 2542 2543
		if (ret)
			return ret;
	} else {
		/* Some drivers provide custom irqdomain ops */
2544 2545
		if (gc->irq.domain_ops)
			ops = gc->irq.domain_ops;
2546 2547 2548

		if (!ops)
			ops = &gpiochip_domain_ops;
2549 2550 2551 2552 2553
		gc->irq.domain = irq_domain_add_simple(np,
			gc->ngpio,
			gc->irq.first,
			ops, gc);
		if (!gc->irq.domain)
2554 2555
			return -EINVAL;
	}
2556

2557 2558
	if (gc->irq.parent_handler) {
		void *data = gc->irq.parent_handler_data ?: gc;
2559

2560
		for (i = 0; i < gc->irq.num_parents; i++) {
2561 2562 2563 2564 2565
			/*
			 * The parent IRQ chip is already using the chip_data
			 * for this IRQ chip, so our callbacks simply use the
			 * handler_data.
			 */
2566 2567
			irq_set_chained_handler_and_data(gc->irq.parents[i],
							 gc->irq.parent_handler,
2568 2569 2570 2571
							 data);
		}
	}

2572
	gpiochip_set_irq_hooks(gc);
2573

2574
	acpi_gpiochip_request_interrupts(gc);
2575 2576 2577 2578

	return 0;
}

2579 2580
/**
 * gpiochip_irqchip_remove() - removes an irqchip added to a gpiochip
2581
 * @gc: the gpiochip to remove the irqchip from
2582 2583 2584
 *
 * This is called only from gpiochip_remove()
 */
2585
static void gpiochip_irqchip_remove(struct gpio_chip *gc)
2586
{
2587
	struct irq_chip *irqchip = gc->irq.chip;
2588
	unsigned int offset;
L
Linus Walleij 已提交
2589

2590
	acpi_gpiochip_free_interrupts(gc);
2591

2592 2593
	if (irqchip && gc->irq.parent_handler) {
		struct gpio_irq_chip *irq = &gc->irq;
2594 2595 2596 2597 2598
		unsigned int i;

		for (i = 0; i < irq->num_parents; i++)
			irq_set_chained_handler_and_data(irq->parents[i],
							 NULL, NULL);
2599 2600
	}

L
Linus Walleij 已提交
2601
	/* Remove all IRQ mappings and delete the domain */
2602
	if (gc->irq.domain) {
2603 2604
		unsigned int irq;

2605 2606
		for (offset = 0; offset < gc->ngpio; offset++) {
			if (!gpiochip_irqchip_irq_valid(gc, offset))
2607
				continue;
2608

2609
			irq = irq_find_mapping(gc->irq.domain, offset);
2610
			irq_dispose_mapping(irq);
2611
		}
2612

2613
		irq_domain_remove(gc->irq.domain);
L
Linus Walleij 已提交
2614
	}
2615

2616 2617 2618 2619 2620 2621
	if (irqchip) {
		if (irqchip->irq_request_resources == gpiochip_irq_reqres) {
			irqchip->irq_request_resources = NULL;
			irqchip->irq_release_resources = NULL;
		}
		if (irqchip->irq_enable == gpiochip_irq_enable) {
2622 2623
			irqchip->irq_enable = gc->irq.irq_enable;
			irqchip->irq_disable = gc->irq.irq_disable;
2624
		}
2625
	}
2626 2627 2628
	gc->irq.irq_enable = NULL;
	gc->irq.irq_disable = NULL;
	gc->irq.chip = NULL;
2629

2630
	gpiochip_irqchip_free_valid_mask(gc);
2631 2632 2633
}

/**
2634
 * gpiochip_irqchip_add_key() - adds an irqchip to a gpiochip
2635
 * @gc: the gpiochip to add the irqchip to
2636 2637 2638 2639
 * @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)
2640 2641
 * @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.
2642
 * @threaded: whether this irqchip uses a nested thread handler
2643 2644
 * @lock_key: lockdep class for IRQ lock
 * @request_key: lockdep class for IRQ request
2645 2646 2647 2648 2649
 *
 * 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
L
Linus Walleij 已提交
2650
 * need to use gpiochip_get_data() to get their local state containers back
2651 2652 2653 2654 2655
 * 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.
 *
L
Linus Walleij 已提交
2656 2657
 * This function will handle two cell:ed simple IRQs and assumes all
 * the pins on the gpiochip can generate a unique IRQ. Everything else
2658 2659
 * need to be open coded.
 */
2660
int gpiochip_irqchip_add_key(struct gpio_chip *gc,
2661 2662 2663 2664
			     struct irq_chip *irqchip,
			     unsigned int first_irq,
			     irq_flow_handler_t handler,
			     unsigned int type,
2665
			     bool threaded,
2666 2667
			     struct lock_class_key *lock_key,
			     struct lock_class_key *request_key)
2668 2669 2670
{
	struct device_node *of_node;

2671
	if (!gc || !irqchip)
2672 2673
		return -EINVAL;

2674
	if (!gc->parent) {
2675 2676 2677
		pr_err("missing gpiochip .dev parent pointer\n");
		return -EINVAL;
	}
2678 2679
	gc->irq.threaded = threaded;
	of_node = gc->parent->of_node;
2680 2681
#ifdef CONFIG_OF_GPIO
	/*
2682
	 * If the gpiochip has an assigned OF node this takes precedence
2683
	 * FIXME: get rid of this and use gc->parent->of_node
2684
	 * everywhere
2685
	 */
2686 2687
	if (gc->of_node)
		of_node = gc->of_node;
2688
#endif
2689
	/*
2690
	 * Specifying a default trigger is a terrible idea if DT or ACPI is
2691 2692 2693 2694
	 * used to configure the interrupts, as you may end-up with
	 * conflicting triggers. Tell the user, and reset to NONE.
	 */
	if (WARN(of_node && type != IRQ_TYPE_NONE,
2695
		 "%pOF: Ignoring %d default trigger\n", of_node, type))
2696
		type = IRQ_TYPE_NONE;
2697 2698
	if (has_acpi_companion(gc->parent) && type != IRQ_TYPE_NONE) {
		acpi_handle_warn(ACPI_HANDLE(gc->parent),
2699 2700 2701
				 "Ignoring %d default trigger\n", type);
		type = IRQ_TYPE_NONE;
	}
2702

2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713
	gc->irq.chip = irqchip;
	gc->irq.handler = handler;
	gc->irq.default_type = type;
	gc->to_irq = gpiochip_to_irq;
	gc->irq.lock_key = lock_key;
	gc->irq.request_key = request_key;
	gc->irq.domain = irq_domain_add_simple(of_node,
					gc->ngpio, first_irq,
					&gpiochip_domain_ops, gc);
	if (!gc->irq.domain) {
		gc->irq.chip = NULL;
2714 2715
		return -EINVAL;
	}
2716

2717
	gpiochip_set_irq_hooks(gc);
2718

2719
	acpi_gpiochip_request_interrupts(gc);
2720

2721 2722
	return 0;
}
2723
EXPORT_SYMBOL_GPL(gpiochip_irqchip_add_key);
2724 2725 2726

#else /* CONFIG_GPIOLIB_IRQCHIP */

2727
static inline int gpiochip_add_irqchip(struct gpio_chip *gc,
2728 2729
				       struct lock_class_key *lock_key,
				       struct lock_class_key *request_key)
2730 2731 2732
{
	return 0;
}
2733
static void gpiochip_irqchip_remove(struct gpio_chip *gc) {}
2734

2735
static inline int gpiochip_irqchip_init_hw(struct gpio_chip *gc)
2736 2737 2738 2739
{
	return 0;
}

2740
static inline int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gc)
2741 2742 2743
{
	return 0;
}
2744
static inline void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gc)
2745
{ }
2746 2747 2748

#endif /* CONFIG_GPIOLIB_IRQCHIP */

2749 2750
/**
 * gpiochip_generic_request() - request the gpio function for a pin
2751
 * @gc: the gpiochip owning the GPIO
2752 2753
 * @offset: the offset of the GPIO to request for GPIO function
 */
2754
int gpiochip_generic_request(struct gpio_chip *gc, unsigned offset)
2755
{
2756
#ifdef CONFIG_PINCTRL
2757
	if (list_empty(&gc->gpiodev->pin_ranges))
2758 2759
		return 0;
#endif
2760

2761
	return pinctrl_gpio_request(gc->gpiodev->base + offset);
2762 2763 2764 2765 2766
}
EXPORT_SYMBOL_GPL(gpiochip_generic_request);

/**
 * gpiochip_generic_free() - free the gpio function from a pin
2767
 * @gc: the gpiochip to request the gpio function for
2768 2769
 * @offset: the offset of the GPIO to free from GPIO function
 */
2770
void gpiochip_generic_free(struct gpio_chip *gc, unsigned offset)
2771
{
2772
	pinctrl_gpio_free(gc->gpiodev->base + offset);
2773 2774 2775
}
EXPORT_SYMBOL_GPL(gpiochip_generic_free);

2776 2777
/**
 * gpiochip_generic_config() - apply configuration for a pin
2778
 * @gc: the gpiochip owning the GPIO
2779 2780 2781
 * @offset: the offset of the GPIO to apply the configuration
 * @config: the configuration to be applied
 */
2782
int gpiochip_generic_config(struct gpio_chip *gc, unsigned offset,
2783 2784
			    unsigned long config)
{
2785
	return pinctrl_gpio_set_config(gc->gpiodev->base + offset, config);
2786 2787 2788
}
EXPORT_SYMBOL_GPL(gpiochip_generic_config);

2789
#ifdef CONFIG_PINCTRL
2790

2791 2792
/**
 * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping
2793
 * @gc: the gpiochip to add the range for
2794
 * @pctldev: the pin controller to map to
2795 2796
 * @gpio_offset: the start offset in the current gpio_chip number space
 * @pin_group: name of the pin group inside the pin controller
2797 2798 2799 2800 2801
 *
 * Calling this function directly from a DeviceTree-supported
 * pinctrl driver is DEPRECATED. Please see Section 2.1 of
 * Documentation/devicetree/bindings/gpio/gpio.txt on how to
 * bind pinctrl and gpio drivers via the "gpio-ranges" property.
2802
 */
2803
int gpiochip_add_pingroup_range(struct gpio_chip *gc,
2804 2805 2806 2807
			struct pinctrl_dev *pctldev,
			unsigned int gpio_offset, const char *pin_group)
{
	struct gpio_pin_range *pin_range;
2808
	struct gpio_device *gdev = gc->gpiodev;
2809 2810 2811 2812
	int ret;

	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
	if (!pin_range) {
2813
		chip_err(gc, "failed to allocate pin ranges\n");
2814 2815 2816 2817 2818
		return -ENOMEM;
	}

	/* Use local offset as range ID */
	pin_range->range.id = gpio_offset;
2819 2820
	pin_range->range.gc = gc;
	pin_range->range.name = gc->label;
2821
	pin_range->range.base = gdev->base + gpio_offset;
2822 2823 2824 2825 2826
	pin_range->pctldev = pctldev;

	ret = pinctrl_get_group_pins(pctldev, pin_group,
					&pin_range->range.pins,
					&pin_range->range.npins);
2827 2828
	if (ret < 0) {
		kfree(pin_range);
2829
		return ret;
2830
	}
2831 2832 2833

	pinctrl_add_gpio_range(pctldev, &pin_range->range);

2834
	chip_dbg(gc, "created GPIO range %d->%d ==> %s PINGRP %s\n",
2835
		 gpio_offset, gpio_offset + pin_range->range.npins - 1,
2836 2837
		 pinctrl_dev_get_devname(pctldev), pin_group);

2838
	list_add_tail(&pin_range->node, &gdev->pin_ranges);
2839 2840 2841 2842 2843

	return 0;
}
EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);

2844 2845
/**
 * gpiochip_add_pin_range() - add a range for GPIO <-> pin mapping
2846
 * @gc: the gpiochip to add the range for
T
Thierry Reding 已提交
2847
 * @pinctl_name: the dev_name() of the pin controller to map to
2848 2849
 * @gpio_offset: the start offset in the current gpio_chip number space
 * @pin_offset: the start offset in the pin controller number space
2850 2851
 * @npins: the number of pins from the offset of each pin space (GPIO and
 *	pin controller) to accumulate in this range
T
Thierry Reding 已提交
2852 2853 2854
 *
 * Returns:
 * 0 on success, or a negative error-code on failure.
2855 2856 2857 2858 2859
 *
 * Calling this function directly from a DeviceTree-supported
 * pinctrl driver is DEPRECATED. Please see Section 2.1 of
 * Documentation/devicetree/bindings/gpio/gpio.txt on how to
 * bind pinctrl and gpio drivers via the "gpio-ranges" property.
2860
 */
2861
int gpiochip_add_pin_range(struct gpio_chip *gc, const char *pinctl_name,
2862
			   unsigned int gpio_offset, unsigned int pin_offset,
2863
			   unsigned int npins)
2864 2865
{
	struct gpio_pin_range *pin_range;
2866
	struct gpio_device *gdev = gc->gpiodev;
2867
	int ret;
2868

2869
	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
2870
	if (!pin_range) {
2871
		chip_err(gc, "failed to allocate pin ranges\n");
2872
		return -ENOMEM;
2873 2874
	}

2875
	/* Use local offset as range ID */
2876
	pin_range->range.id = gpio_offset;
2877 2878
	pin_range->range.gc = gc;
	pin_range->range.name = gc->label;
2879
	pin_range->range.base = gdev->base + gpio_offset;
2880
	pin_range->range.pin_base = pin_offset;
2881
	pin_range->range.npins = npins;
L
Linus Walleij 已提交
2882
	pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
2883
			&pin_range->range);
2884
	if (IS_ERR(pin_range->pctldev)) {
2885
		ret = PTR_ERR(pin_range->pctldev);
2886
		chip_err(gc, "could not create pin range\n");
2887
		kfree(pin_range);
2888
		return ret;
2889
	}
2890
	chip_dbg(gc, "created GPIO range %d->%d ==> %s PIN %d->%d\n",
2891
		 gpio_offset, gpio_offset + npins - 1,
2892 2893
		 pinctl_name,
		 pin_offset, pin_offset + npins - 1);
2894

2895
	list_add_tail(&pin_range->node, &gdev->pin_ranges);
2896 2897

	return 0;
2898
}
2899
EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
2900

2901 2902
/**
 * gpiochip_remove_pin_ranges() - remove all the GPIO <-> pin mappings
2903
 * @gc: the chip to remove all the mappings for
2904
 */
2905
void gpiochip_remove_pin_ranges(struct gpio_chip *gc)
2906 2907
{
	struct gpio_pin_range *pin_range, *tmp;
2908
	struct gpio_device *gdev = gc->gpiodev;
2909

2910
	list_for_each_entry_safe(pin_range, tmp, &gdev->pin_ranges, node) {
2911 2912 2913
		list_del(&pin_range->node);
		pinctrl_remove_gpio_range(pin_range->pctldev,
				&pin_range->range);
2914
		kfree(pin_range);
2915 2916
	}
}
2917 2918 2919
EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);

#endif /* CONFIG_PINCTRL */
2920

2921 2922 2923 2924
/* 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.
 */
2925
static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
2926
{
2927
	struct gpio_chip	*gc = desc->gdev->chip;
2928
	int			ret;
2929
	unsigned long		flags;
2930
	unsigned		offset;
2931

2932 2933 2934 2935 2936 2937
	if (label) {
		label = kstrdup_const(label, GFP_KERNEL);
		if (!label)
			return -ENOMEM;
	}

2938 2939
	spin_lock_irqsave(&gpio_lock, flags);

2940
	/* NOTE:  gpio_request() can be called in early boot,
D
David Brownell 已提交
2941
	 * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
2942 2943 2944 2945
	 */

	if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
		desc_set_label(desc, label ? : "?");
2946
		ret = 0;
2947
	} else {
2948
		kfree_const(label);
2949
		ret = -EBUSY;
M
Magnus Damm 已提交
2950
		goto done;
D
David Brownell 已提交
2951 2952
	}

2953 2954
	if (gc->request) {
		/* gc->request may sleep */
D
David Brownell 已提交
2955
		spin_unlock_irqrestore(&gpio_lock, flags);
2956
		offset = gpio_chip_hwgpio(desc);
2957 2958
		if (gpiochip_line_is_valid(gc, offset))
			ret = gc->request(gc, offset);
2959
		else
2960
			ret = -EINVAL;
D
David Brownell 已提交
2961 2962
		spin_lock_irqsave(&gpio_lock, flags);

2963
		if (ret < 0) {
D
David Brownell 已提交
2964
			desc_set_label(desc, NULL);
2965
			kfree_const(label);
D
David Brownell 已提交
2966
			clear_bit(FLAG_REQUESTED, &desc->flags);
2967
			goto done;
D
David Brownell 已提交
2968
		}
2969
	}
2970 2971
	if (gc->get_direction) {
		/* gc->get_direction may sleep */
2972
		spin_unlock_irqrestore(&gpio_lock, flags);
2973
		gpiod_get_direction(desc);
2974 2975
		spin_lock_irqsave(&gpio_lock, flags);
	}
2976 2977
done:
	spin_unlock_irqrestore(&gpio_lock, flags);
2978 2979
	atomic_notifier_call_chain(&desc->gdev->notifier,
				   GPIOLINE_CHANGED_REQUESTED, desc);
2980
	return ret;
2981 2982
}

2983 2984 2985
/*
 * This descriptor validation needs to be inserted verbatim into each
 * function taking a descriptor, so we need to use a preprocessor
2986 2987
 * macro to avoid endless duplication. If the desc is NULL it is an
 * optional GPIO and calls should just bail out.
2988
 */
2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008
static int validate_desc(const struct gpio_desc *desc, const char *func)
{
	if (!desc)
		return 0;
	if (IS_ERR(desc)) {
		pr_warn("%s: invalid GPIO (errorpointer)\n", func);
		return PTR_ERR(desc);
	}
	if (!desc->gdev) {
		pr_warn("%s: invalid GPIO (no device)\n", func);
		return -EINVAL;
	}
	if (!desc->gdev->chip) {
		dev_warn(&desc->gdev->dev,
			 "%s: backing chip is gone\n", func);
		return 0;
	}
	return 1;
}

3009
#define VALIDATE_DESC(desc) do { \
3010 3011 3012 3013
	int __valid = validate_desc(desc, __func__); \
	if (__valid <= 0) \
		return __valid; \
	} while (0)
3014 3015

#define VALIDATE_DESC_VOID(desc) do { \
3016 3017
	int __valid = validate_desc(desc, __func__); \
	if (__valid <= 0) \
3018
		return; \
3019
	} while (0)
3020

3021
int gpiod_request(struct gpio_desc *desc, const char *label)
3022
{
3023
	int ret = -EPROBE_DEFER;
3024
	struct gpio_device *gdev;
3025

3026 3027
	VALIDATE_DESC(desc);
	gdev = desc->gdev;
3028

3029
	if (try_module_get(gdev->owner)) {
3030 3031
		ret = gpiod_request_commit(desc, label);
		if (ret < 0)
3032
			module_put(gdev->owner);
3033 3034
		else
			get_device(&gdev->dev);
3035 3036
	}

3037 3038
	if (ret)
		gpiod_dbg(desc, "%s: status %d\n", __func__, ret);
3039

3040
	return ret;
3041
}
3042

3043
static bool gpiod_free_commit(struct gpio_desc *desc)
3044
{
3045
	bool			ret = false;
3046
	unsigned long		flags;
3047
	struct gpio_chip	*gc;
3048

3049 3050
	might_sleep();

3051
	gpiod_unexport(desc);
D
David Brownell 已提交
3052

3053 3054
	spin_lock_irqsave(&gpio_lock, flags);

3055 3056 3057
	gc = desc->gdev->chip;
	if (gc && test_bit(FLAG_REQUESTED, &desc->flags)) {
		if (gc->free) {
D
David Brownell 已提交
3058
			spin_unlock_irqrestore(&gpio_lock, flags);
3059 3060
			might_sleep_if(gc->can_sleep);
			gc->free(gc, gpio_chip_hwgpio(desc));
D
David Brownell 已提交
3061 3062
			spin_lock_irqsave(&gpio_lock, flags);
		}
3063
		kfree_const(desc->label);
3064
		desc_set_label(desc, NULL);
3065
		clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
D
David Brownell 已提交
3066
		clear_bit(FLAG_REQUESTED, &desc->flags);
3067
		clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
3068
		clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
3069 3070
		clear_bit(FLAG_PULL_UP, &desc->flags);
		clear_bit(FLAG_PULL_DOWN, &desc->flags);
3071
		clear_bit(FLAG_BIAS_DISABLE, &desc->flags);
B
Benoit Parrot 已提交
3072
		clear_bit(FLAG_IS_HOGGED, &desc->flags);
3073 3074 3075
#ifdef CONFIG_OF_DYNAMIC
		desc->hog = NULL;
#endif
3076 3077
		ret = true;
	}
3078 3079

	spin_unlock_irqrestore(&gpio_lock, flags);
3080 3081 3082
	atomic_notifier_call_chain(&desc->gdev->notifier,
				   GPIOLINE_CHANGED_RELEASED, desc);

3083 3084 3085
	return ret;
}

3086
void gpiod_free(struct gpio_desc *desc)
3087
{
3088
	if (desc && desc->gdev && gpiod_free_commit(desc)) {
3089
		module_put(desc->gdev->owner);
3090 3091
		put_device(&desc->gdev->dev);
	} else {
3092
		WARN_ON(extra_checks);
3093
	}
3094
}
3095

3096 3097
/**
 * gpiochip_is_requested - return string iff signal was requested
3098
 * @gc: controller managing the signal
3099 3100 3101
 * @offset: of signal within controller's 0..(ngpio - 1) range
 *
 * Returns NULL if the GPIO is not currently requested, else a string.
3102 3103
 * The string returned is the label passed to gpio_request(); if none has been
 * passed it is a meaningless, non-NULL constant.
3104 3105 3106 3107 3108
 *
 * 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.
 */
3109
const char *gpiochip_is_requested(struct gpio_chip *gc, unsigned offset)
3110
{
3111
	struct gpio_desc *desc;
3112

3113
	if (offset >= gc->ngpio)
3114
		return NULL;
3115

3116
	desc = gpiochip_get_desc(gc, offset);
3117 3118
	if (IS_ERR(desc))
		return NULL;
3119

3120
	if (test_bit(FLAG_REQUESTED, &desc->flags) == 0)
3121
		return NULL;
3122
	return desc->label;
3123 3124 3125
}
EXPORT_SYMBOL_GPL(gpiochip_is_requested);

3126 3127
/**
 * gpiochip_request_own_desc - Allow GPIO chip to request its own descriptor
3128
 * @gc: GPIO chip
T
Thierry Reding 已提交
3129
 * @hwnum: hardware number of the GPIO for which to request the descriptor
3130
 * @label: label for the GPIO
3131 3132 3133 3134 3135
 * @lflags: lookup flags for this GPIO or 0 if default, this can be used to
 * specify things like line inversion semantics with the machine flags
 * such as GPIO_OUT_LOW
 * @dflags: descriptor request flags for this GPIO or 0 if default, this
 * can be used to specify consumer semantics such as open drain
3136 3137 3138 3139 3140 3141
 *
 * 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).
T
Thierry Reding 已提交
3142 3143 3144 3145
 *
 * Returns:
 * A pointer to the GPIO descriptor, or an ERR_PTR()-encoded negative error
 * code on failure.
3146
 */
3147
struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc,
3148
					    unsigned int hwnum,
3149
					    const char *label,
3150 3151
					    enum gpio_lookup_flags lflags,
					    enum gpiod_flags dflags)
3152
{
3153
	struct gpio_desc *desc = gpiochip_get_desc(gc, hwnum);
3154
	int ret;
3155

3156
	if (IS_ERR(desc)) {
3157
		chip_err(gc, "failed to get GPIO descriptor\n");
3158 3159 3160
		return desc;
	}

3161 3162 3163
	ret = gpiod_request_commit(desc, label);
	if (ret < 0)
		return ERR_PTR(ret);
3164

3165 3166
	ret = gpiod_configure_flags(desc, label, lflags, dflags);
	if (ret) {
3167
		chip_err(gc, "setup of own GPIO %s failed\n", label);
3168
		gpiod_free_commit(desc);
3169
		return ERR_PTR(ret);
3170 3171
	}

3172
	return desc;
3173
}
3174
EXPORT_SYMBOL_GPL(gpiochip_request_own_desc);
3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185

/**
 * 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)
3186
		gpiod_free_commit(desc);
3187
}
3188
EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
3189

3190 3191
/*
 * Drivers MUST set GPIO direction before making get/set calls.  In
3192 3193 3194 3195 3196 3197 3198 3199
 * 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.
 */

3200
static int gpio_do_set_config(struct gpio_chip *gc, unsigned int offset,
3201
			      unsigned long config)
3202
{
3203 3204
	if (!gc->set_config)
		return -ENOTSUPP;
3205

3206
	return gc->set_config(gc, offset, config);
3207 3208
}

3209
static int gpio_set_config(struct gpio_desc *desc, enum pin_config_param mode)
3210
{
3211
	struct gpio_chip *gc = desc->gdev->chip;
3212
	unsigned long config;
3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224
	unsigned arg;

	switch (mode) {
	case PIN_CONFIG_BIAS_PULL_DOWN:
	case PIN_CONFIG_BIAS_PULL_UP:
		arg = 1;
		break;

	default:
		arg = 0;
	}

3225
	config = PIN_CONF_PACKED(mode, arg);
3226
	return gpio_do_set_config(gc, gpio_chip_hwgpio(desc), config);
3227 3228
}

3229
static int gpio_set_bias(struct gpio_desc *desc)
3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241
{
	int bias = 0;
	int ret = 0;

	if (test_bit(FLAG_BIAS_DISABLE, &desc->flags))
		bias = PIN_CONFIG_BIAS_DISABLE;
	else if (test_bit(FLAG_PULL_UP, &desc->flags))
		bias = PIN_CONFIG_BIAS_PULL_UP;
	else if (test_bit(FLAG_PULL_DOWN, &desc->flags))
		bias = PIN_CONFIG_BIAS_PULL_DOWN;

	if (bias) {
3242
		ret = gpio_set_config(desc, bias);
3243 3244 3245 3246 3247 3248
		if (ret != -ENOTSUPP)
			return ret;
	}
	return 0;
}

3249 3250 3251 3252 3253 3254 3255 3256 3257 3258
/**
 * 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)
3259
{
3260
	struct gpio_chip	*gc;
3261
	int			ret = 0;
3262

3263
	VALIDATE_DESC(desc);
3264
	gc = desc->gdev->chip;
3265

3266 3267 3268 3269 3270
	/*
	 * It is legal to have no .get() and .direction_input() specified if
	 * the chip is output-only, but you can't specify .direction_input()
	 * and not support the .get() operation, that doesn't make sense.
	 */
3271
	if (!gc->get && gc->direction_input) {
3272
		gpiod_warn(desc,
3273 3274
			   "%s: missing get() but have direction_input()\n",
			   __func__);
3275 3276 3277
		return -EIO;
	}

3278 3279 3280 3281 3282 3283
	/*
	 * If we have a .direction_input() callback, things are simple,
	 * just call it. Else we are some input-only chip so try to check the
	 * direction (if .get_direction() is supported) else we silently
	 * assume we are in input mode after this.
	 */
3284 3285 3286 3287
	if (gc->direction_input) {
		ret = gc->direction_input(gc, gpio_chip_hwgpio(desc));
	} else if (gc->get_direction &&
		  (gc->get_direction(gc, gpio_chip_hwgpio(desc)) != 1)) {
3288
		gpiod_warn(desc,
3289 3290
			   "%s: missing direction_input() operation and line is output\n",
			   __func__);
3291 3292
		return -EIO;
	}
3293
	if (ret == 0) {
3294
		clear_bit(FLAG_IS_OUT, &desc->flags);
3295
		ret = gpio_set_bias(desc);
3296
	}
3297

3298
	trace_gpio_direction(desc_to_gpio(desc), 1, ret);
3299

3300
	return ret;
3301
}
3302
EXPORT_SYMBOL_GPL(gpiod_direction_input);
3303

3304
static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
3305
{
3306
	struct gpio_chip *gc = desc->gdev->chip;
3307
	int val = !!value;
3308
	int ret = 0;
3309

3310 3311 3312 3313 3314
	/*
	 * It's OK not to specify .direction_output() if the gpiochip is
	 * output-only, but if there is then not even a .set() operation it
	 * is pretty tricky to drive the output line.
	 */
3315
	if (!gc->set && !gc->direction_output) {
3316
		gpiod_warn(desc,
3317 3318
			   "%s: missing set() and direction_output() operations\n",
			   __func__);
3319 3320 3321
		return -EIO;
	}

3322 3323 3324
	if (gc->direction_output) {
		ret = gc->direction_output(gc, gpio_chip_hwgpio(desc), val);
	} else {
3325
		/* Check that we are in output mode if we can */
3326 3327 3328 3329 3330 3331 3332
		if (gc->get_direction &&
		    gc->get_direction(gc, gpio_chip_hwgpio(desc))) {
			gpiod_warn(desc,
				"%s: missing direction_output() operation\n",
				__func__);
			return -EIO;
		}
3333 3334 3335 3336
		/*
		 * If we can't actively set the direction, we are some
		 * output-only chip, so just drive the output as desired.
		 */
3337 3338 3339
		gc->set(gc, gpio_chip_hwgpio(desc), val);
	}

3340
	if (!ret)
3341
		set_bit(FLAG_IS_OUT, &desc->flags);
3342
	trace_gpio_value(desc_to_gpio(desc), 0, val);
3343 3344
	trace_gpio_direction(desc_to_gpio(desc), 0, ret);
	return ret;
3345
}
3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359

/**
 * gpiod_direction_output_raw - set the GPIO direction to output
 * @desc:	GPIO to set to output
 * @value:	initial output value of the GPIO
 *
 * Set the direction of the passed GPIO to output, such as gpiod_set_value() can
 * be called safely on it. The initial value of the output must be specified
 * as raw value on the physical line without regard for the ACTIVE_LOW status.
 *
 * Return 0 in case of success, else an error code.
 */
int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
{
3360
	VALIDATE_DESC(desc);
3361
	return gpiod_direction_output_raw_commit(desc, value);
3362 3363 3364 3365
}
EXPORT_SYMBOL_GPL(gpiod_direction_output_raw);

/**
3366
 * gpiod_direction_output - set the GPIO direction to output
3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378
 * @desc:	GPIO to set to output
 * @value:	initial output value of the GPIO
 *
 * Set the direction of the passed GPIO to output, such as gpiod_set_value() can
 * be called safely on it. The initial value of the output must be specified
 * as the logical value of the GPIO, i.e. taking its ACTIVE_LOW status into
 * account.
 *
 * Return 0 in case of success, else an error code.
 */
int gpiod_direction_output(struct gpio_desc *desc, int value)
{
3379 3380
	int ret;

3381
	VALIDATE_DESC(desc);
3382 3383
	if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
		value = !value;
3384 3385
	else
		value = !!value;
3386

3387 3388 3389
	/* GPIOs used for enabled IRQs shall not be set as output */
	if (test_bit(FLAG_USED_AS_IRQ, &desc->flags) &&
	    test_bit(FLAG_IRQ_IS_ENABLED, &desc->flags)) {
3390 3391 3392 3393 3394 3395 3396 3397
		gpiod_err(desc,
			  "%s: tried to set a GPIO tied to an IRQ as output\n",
			  __func__);
		return -EIO;
	}

	if (test_bit(FLAG_OPEN_DRAIN, &desc->flags)) {
		/* First see if we can enable open drain in hardware */
3398
		ret = gpio_set_config(desc, PIN_CONFIG_DRIVE_OPEN_DRAIN);
3399 3400 3401
		if (!ret)
			goto set_output_value;
		/* Emulate open drain by not actively driving the line high */
3402 3403 3404 3405
		if (value) {
			ret = gpiod_direction_input(desc);
			goto set_output_flag;
		}
3406 3407
	}
	else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags)) {
3408
		ret = gpio_set_config(desc, PIN_CONFIG_DRIVE_OPEN_SOURCE);
3409 3410 3411
		if (!ret)
			goto set_output_value;
		/* Emulate open source by not actively driving the line low */
3412 3413 3414 3415
		if (!value) {
			ret = gpiod_direction_input(desc);
			goto set_output_flag;
		}
3416
	} else {
3417
		gpio_set_config(desc, PIN_CONFIG_DRIVE_PUSH_PULL);
3418 3419 3420
	}

set_output_value:
3421
	ret = gpio_set_bias(desc);
3422 3423
	if (ret)
		return ret;
3424
	return gpiod_direction_output_raw_commit(desc, value);
3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435

set_output_flag:
	/*
	 * When emulating open-source or open-drain functionalities by not
	 * actively driving the line (setting mode to input) we still need to
	 * set the IS_OUT flag or otherwise we won't be able to set the line
	 * value anymore.
	 */
	if (ret == 0)
		set_bit(FLAG_IS_OUT, &desc->flags);
	return ret;
3436
}
3437
EXPORT_SYMBOL_GPL(gpiod_direction_output);
3438

3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449
/**
 * gpiod_set_config - sets @config for a GPIO
 * @desc: descriptor of the GPIO for which to set the configuration
 * @config: Same packed config format as generic pinconf
 *
 * Returns:
 * 0 on success, %-ENOTSUPP if the controller doesn't support setting the
 * configuration.
 */
int gpiod_set_config(struct gpio_desc *desc, unsigned long config)
{
3450
	struct gpio_chip *gc;
3451 3452

	VALIDATE_DESC(desc);
3453
	gc = desc->gdev->chip;
3454

3455
	return gpio_do_set_config(gc, gpio_chip_hwgpio(desc), config);
3456 3457 3458
}
EXPORT_SYMBOL_GPL(gpiod_set_config);

3459
/**
T
Thierry Reding 已提交
3460 3461 3462
 * gpiod_set_debounce - sets @debounce time for a GPIO
 * @desc: descriptor of the GPIO for which to set debounce time
 * @debounce: debounce time in microseconds
3463
 *
T
Thierry Reding 已提交
3464 3465 3466
 * Returns:
 * 0 on success, %-ENOTSUPP if the controller doesn't support setting the
 * debounce time.
3467
 */
3468
int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
3469
{
3470
	unsigned long config;
3471

3472
	config = pinconf_to_config_packed(PIN_CONFIG_INPUT_DEBOUNCE, debounce);
3473
	return gpiod_set_config(desc, config);
3474
}
3475
EXPORT_SYMBOL_GPL(gpiod_set_debounce);
3476

3477 3478 3479 3480 3481 3482 3483 3484 3485 3486
/**
 * gpiod_set_transitory - Lose or retain GPIO state on suspend or reset
 * @desc: descriptor of the GPIO for which to configure persistence
 * @transitory: True to lose state on suspend or reset, false for persistence
 *
 * Returns:
 * 0 on success, otherwise a negative error code.
 */
int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
{
3487
	struct gpio_chip *gc;
3488 3489 3490 3491
	unsigned long packed;
	int gpio;
	int rc;

3492
	VALIDATE_DESC(desc);
3493 3494 3495 3496
	/*
	 * Handle FLAG_TRANSITORY first, enabling queries to gpiolib for
	 * persistence state.
	 */
3497
	assign_bit(FLAG_TRANSITORY, &desc->flags, transitory);
3498 3499

	/* If the driver supports it, set the persistence state now */
3500 3501
	gc = desc->gdev->chip;
	if (!gc->set_config)
3502 3503 3504 3505 3506
		return 0;

	packed = pinconf_to_config_packed(PIN_CONFIG_PERSIST_STATE,
					  !transitory);
	gpio = gpio_chip_hwgpio(desc);
3507
	rc = gpio_do_set_config(gc, gpio, packed);
3508 3509 3510 3511 3512 3513 3514 3515 3516 3517
	if (rc == -ENOTSUPP) {
		dev_dbg(&desc->gdev->dev, "Persistence not supported for GPIO %d\n",
				gpio);
		return 0;
	}

	return rc;
}
EXPORT_SYMBOL_GPL(gpiod_set_transitory);

3518 3519 3520 3521 3522 3523 3524
/**
 * gpiod_is_active_low - test whether a GPIO is active-low or not
 * @desc: the gpio descriptor to test
 *
 * Returns 1 if the GPIO is active-low, 0 otherwise.
 */
int gpiod_is_active_low(const struct gpio_desc *desc)
3525
{
3526
	VALIDATE_DESC(desc);
3527
	return test_bit(FLAG_ACTIVE_LOW, &desc->flags);
3528
}
3529
EXPORT_SYMBOL_GPL(gpiod_is_active_low);
3530

3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541
/**
 * gpiod_toggle_active_low - toggle whether a GPIO is active-low or not
 * @desc: the gpio descriptor to change
 */
void gpiod_toggle_active_low(struct gpio_desc *desc)
{
	VALIDATE_DESC_VOID(desc);
	change_bit(FLAG_ACTIVE_LOW, &desc->flags);
}
EXPORT_SYMBOL_GPL(gpiod_toggle_active_low);

3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563
/* I/O calls are only valid after configuration completed; the relevant
 * "is this a valid GPIO" error checks should already have been done.
 *
 * "Get" operations are often inlinable as reading a pin value register,
 * and masking the relevant bit in that register.
 *
 * When "set" operations are inlinable, they involve writing that mask to
 * one register to set a low value, or a different register to set it high.
 * Otherwise locking is needed, so there may be little value to inlining.
 *
 *------------------------------------------------------------------------
 *
 * IMPORTANT!!!  The hot paths -- get/set value -- assume that callers
 * have requested the GPIO.  That can include implicit requesting by
 * a direction setting call.  Marking a gpio as requested locks its chip
 * in memory, guaranteeing that these table lookups need no more locking
 * and that gpiochip_remove() will fail.
 *
 * REVISIT when debugging, consider adding some instrumentation to ensure
 * that the GPIO was actually requested.
 */

3564
static int gpiod_get_raw_value_commit(const struct gpio_desc *desc)
3565
{
3566
	struct gpio_chip	*gc;
3567
	int offset;
3568
	int value;
3569

3570
	gc = desc->gdev->chip;
3571
	offset = gpio_chip_hwgpio(desc);
3572
	value = gc->get ? gc->get(gc, offset) : -EIO;
3573
	value = value < 0 ? value : !!value;
3574
	trace_gpio_value(desc_to_gpio(desc), 1, value);
3575
	return value;
3576
}
3577

3578
static int gpio_chip_get_multiple(struct gpio_chip *gc,
3579 3580
				  unsigned long *mask, unsigned long *bits)
{
3581 3582 3583
	if (gc->get_multiple) {
		return gc->get_multiple(gc, mask, bits);
	} else if (gc->get) {
3584 3585
		int i, value;

3586 3587
		for_each_set_bit(i, mask, gc->ngpio) {
			value = gc->get(gc, i);
3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599
			if (value < 0)
				return value;
			__assign_bit(i, bits, value);
		}
		return 0;
	}
	return -EIO;
}

int gpiod_get_array_value_complex(bool raw, bool can_sleep,
				  unsigned int array_size,
				  struct gpio_desc **desc_array,
3600
				  struct gpio_array *array_info,
3601
				  unsigned long *value_bitmap)
3602
{
3603
	int ret, i = 0;
3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615

	/*
	 * Validate array_info against desc_array and its size.
	 * It should immediately follow desc_array if both
	 * have been obtained from the same gpiod_get_array() call.
	 */
	if (array_info && array_info->desc == desc_array &&
	    array_size <= array_info->size &&
	    (void *)array_info == desc_array + array_info->size) {
		if (!can_sleep)
			WARN_ON(array_info->chip->can_sleep);

3616
		ret = gpio_chip_get_multiple(array_info->chip,
3617 3618
					     array_info->get_mask,
					     value_bitmap);
3619 3620
		if (ret)
			return ret;
3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632

		if (!raw && !bitmap_empty(array_info->invert_mask, array_size))
			bitmap_xor(value_bitmap, value_bitmap,
				   array_info->invert_mask, array_size);

		if (bitmap_full(array_info->get_mask, array_size))
			return 0;

		i = find_first_zero_bit(array_info->get_mask, array_size);
	} else {
		array_info = NULL;
	}
3633 3634

	while (i < array_size) {
3635
		struct gpio_chip *gc = desc_array[i]->gdev->chip;
L
Laura Abbott 已提交
3636 3637
		unsigned long fastpath[2 * BITS_TO_LONGS(FASTPATH_NGPIO)];
		unsigned long *mask, *bits;
3638 3639
		int first, j, ret;

3640
		if (likely(gc->ngpio <= FASTPATH_NGPIO)) {
L
Laura Abbott 已提交
3641 3642
			mask = fastpath;
		} else {
3643
			mask = kmalloc_array(2 * BITS_TO_LONGS(gc->ngpio),
L
Laura Abbott 已提交
3644 3645 3646 3647 3648 3649
					   sizeof(*mask),
					   can_sleep ? GFP_KERNEL : GFP_ATOMIC);
			if (!mask)
				return -ENOMEM;
		}

3650 3651
		bits = mask + BITS_TO_LONGS(gc->ngpio);
		bitmap_zero(mask, gc->ngpio);
L
Laura Abbott 已提交
3652

3653
		if (!can_sleep)
3654
			WARN_ON(gc->can_sleep);
3655 3656 3657 3658 3659 3660 3661 3662 3663

		/* collect all inputs belonging to the same chip */
		first = i;
		do {
			const struct gpio_desc *desc = desc_array[i];
			int hwgpio = gpio_chip_hwgpio(desc);

			__set_bit(hwgpio, mask);
			i++;
3664 3665

			if (array_info)
3666 3667
				i = find_next_zero_bit(array_info->get_mask,
						       array_size, i);
3668
		} while ((i < array_size) &&
3669
			 (desc_array[i]->gdev->chip == gc));
3670

3671
		ret = gpio_chip_get_multiple(gc, mask, bits);
L
Laura Abbott 已提交
3672 3673 3674
		if (ret) {
			if (mask != fastpath)
				kfree(mask);
3675
			return ret;
L
Laura Abbott 已提交
3676
		}
3677

3678
		for (j = first; j < i; ) {
3679 3680 3681 3682 3683 3684
			const struct gpio_desc *desc = desc_array[j];
			int hwgpio = gpio_chip_hwgpio(desc);
			int value = test_bit(hwgpio, bits);

			if (!raw && test_bit(FLAG_ACTIVE_LOW, &desc->flags))
				value = !value;
3685
			__assign_bit(j, value_bitmap, value);
3686
			trace_gpio_value(desc_to_gpio(desc), 1, value);
3687
			j++;
3688 3689

			if (array_info)
3690 3691
				j = find_next_zero_bit(array_info->get_mask, i,
						       j);
3692
		}
L
Laura Abbott 已提交
3693 3694 3695

		if (mask != fastpath)
			kfree(mask);
3696 3697 3698 3699
	}
	return 0;
}

3700
/**
3701 3702
 * gpiod_get_raw_value() - return a gpio's raw value
 * @desc: gpio whose value will be returned
3703
 *
3704
 * Return the GPIO's raw value, i.e. the value of the physical line disregarding
3705
 * its ACTIVE_LOW status, or negative errno on failure.
3706
 *
3707
 * This function can be called from contexts where we cannot sleep, and will
3708
 * complain if the GPIO chip functions potentially sleep.
3709
 */
3710
int gpiod_get_raw_value(const struct gpio_desc *desc)
3711
{
3712
	VALIDATE_DESC(desc);
3713
	/* Should be using gpiod_get_raw_value_cansleep() */
3714
	WARN_ON(desc->gdev->chip->can_sleep);
3715
	return gpiod_get_raw_value_commit(desc);
3716
}
3717
EXPORT_SYMBOL_GPL(gpiod_get_raw_value);
3718

3719 3720 3721 3722 3723
/**
 * gpiod_get_value() - return a gpio's value
 * @desc: gpio whose value will be returned
 *
 * Return the GPIO's logical value, i.e. taking the ACTIVE_LOW status into
3724
 * account, or negative errno on failure.
3725
 *
3726
 * This function can be called from contexts where we cannot sleep, and will
3727 3728 3729
 * complain if the GPIO chip functions potentially sleep.
 */
int gpiod_get_value(const struct gpio_desc *desc)
3730
{
3731
	int value;
3732 3733

	VALIDATE_DESC(desc);
3734
	/* Should be using gpiod_get_value_cansleep() */
3735
	WARN_ON(desc->gdev->chip->can_sleep);
3736

3737
	value = gpiod_get_raw_value_commit(desc);
3738 3739 3740
	if (value < 0)
		return value;

3741 3742 3743 3744
	if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
		value = !value;

	return value;
3745
}
3746
EXPORT_SYMBOL_GPL(gpiod_get_value);
3747

3748 3749
/**
 * gpiod_get_raw_array_value() - read raw values from an array of GPIOs
3750
 * @array_size: number of elements in the descriptor array / value bitmap
3751
 * @desc_array: array of GPIO descriptors whose values will be read
3752
 * @array_info: information on applicability of fast bitmap processing path
3753
 * @value_bitmap: bitmap to store the read values
3754 3755 3756 3757 3758
 *
 * Read the raw values of the GPIOs, i.e. the values of the physical lines
 * without regard for their ACTIVE_LOW status.  Return 0 in case of success,
 * else an error code.
 *
3759
 * This function can be called from contexts where we cannot sleep,
3760 3761 3762
 * and it will complain if the GPIO chip functions potentially sleep.
 */
int gpiod_get_raw_array_value(unsigned int array_size,
3763
			      struct gpio_desc **desc_array,
3764
			      struct gpio_array *array_info,
3765
			      unsigned long *value_bitmap)
3766 3767 3768 3769
{
	if (!desc_array)
		return -EINVAL;
	return gpiod_get_array_value_complex(true, false, array_size,
3770 3771
					     desc_array, array_info,
					     value_bitmap);
3772 3773 3774 3775 3776
}
EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value);

/**
 * gpiod_get_array_value() - read values from an array of GPIOs
3777
 * @array_size: number of elements in the descriptor array / value bitmap
3778
 * @desc_array: array of GPIO descriptors whose values will be read
3779
 * @array_info: information on applicability of fast bitmap processing path
3780
 * @value_bitmap: bitmap to store the read values
3781 3782 3783 3784
 *
 * Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
 * into account.  Return 0 in case of success, else an error code.
 *
3785
 * This function can be called from contexts where we cannot sleep,
3786 3787 3788
 * and it will complain if the GPIO chip functions potentially sleep.
 */
int gpiod_get_array_value(unsigned int array_size,
3789
			  struct gpio_desc **desc_array,
3790
			  struct gpio_array *array_info,
3791
			  unsigned long *value_bitmap)
3792 3793 3794 3795
{
	if (!desc_array)
		return -EINVAL;
	return gpiod_get_array_value_complex(false, false, array_size,
3796 3797
					     desc_array, array_info,
					     value_bitmap);
3798 3799 3800
}
EXPORT_SYMBOL_GPL(gpiod_get_array_value);

3801
/*
3802
 *  gpio_set_open_drain_value_commit() - Set the open drain gpio's value.
3803
 * @desc: gpio descriptor whose state need to be set.
3804
 * @value: Non-zero for setting it HIGH otherwise it will set to LOW.
3805
 */
3806
static void gpio_set_open_drain_value_commit(struct gpio_desc *desc, bool value)
3807
{
3808
	int ret = 0;
3809
	struct gpio_chip *gc = desc->gdev->chip;
3810 3811
	int offset = gpio_chip_hwgpio(desc);

3812
	if (value) {
3813
		ret = gc->direction_input(gc, offset);
3814
	} else {
3815
		ret = gc->direction_output(gc, offset, 0);
3816
		if (!ret)
3817
			set_bit(FLAG_IS_OUT, &desc->flags);
3818
	}
3819 3820
	trace_gpio_direction(desc_to_gpio(desc), value, ret);
	if (ret < 0)
3821 3822
		gpiod_err(desc,
			  "%s: Error in set_value for open drain err %d\n",
3823
			  __func__, ret);
3824 3825
}

3826
/*
3827 3828
 *  _gpio_set_open_source_value() - Set the open source gpio's value.
 * @desc: gpio descriptor whose state need to be set.
3829
 * @value: Non-zero for setting it HIGH otherwise it will set to LOW.
3830
 */
3831
static void gpio_set_open_source_value_commit(struct gpio_desc *desc, bool value)
3832
{
3833
	int ret = 0;
3834
	struct gpio_chip *gc = desc->gdev->chip;
3835 3836
	int offset = gpio_chip_hwgpio(desc);

3837
	if (value) {
3838
		ret = gc->direction_output(gc, offset, 1);
3839
		if (!ret)
3840
			set_bit(FLAG_IS_OUT, &desc->flags);
3841
	} else {
3842
		ret = gc->direction_input(gc, offset);
3843
	}
3844 3845
	trace_gpio_direction(desc_to_gpio(desc), !value, ret);
	if (ret < 0)
3846 3847
		gpiod_err(desc,
			  "%s: Error in set_value for open source err %d\n",
3848
			  __func__, ret);
3849 3850
}

3851
static void gpiod_set_raw_value_commit(struct gpio_desc *desc, bool value)
3852
{
3853
	struct gpio_chip	*gc;
3854

3855
	gc = desc->gdev->chip;
3856
	trace_gpio_value(desc_to_gpio(desc), 0, value);
3857
	gc->set(gc, gpio_chip_hwgpio(desc), value);
3858 3859
}

3860 3861 3862 3863
/*
 * set multiple outputs on the same chip;
 * use the chip's set_multiple function if available;
 * otherwise set the outputs sequentially;
3864
 * @chip: the GPIO chip we operate on
3865 3866 3867 3868 3869
 * @mask: bit mask array; one bit per output; BITS_PER_LONG bits per word
 *        defines which outputs are to be changed
 * @bits: bit value array; one bit per output; BITS_PER_LONG bits per word
 *        defines the values the outputs specified by mask are to be set to
 */
3870
static void gpio_chip_set_multiple(struct gpio_chip *gc,
3871 3872
				   unsigned long *mask, unsigned long *bits)
{
3873 3874
	if (gc->set_multiple) {
		gc->set_multiple(gc, mask, bits);
3875
	} else {
3876 3877 3878
		unsigned int i;

		/* set outputs if the corresponding mask bit is set */
3879 3880
		for_each_set_bit(i, mask, gc->ngpio)
			gc->set(gc, i, test_bit(i, bits));
3881 3882 3883
	}
}

L
Laura Abbott 已提交
3884
int gpiod_set_array_value_complex(bool raw, bool can_sleep,
3885 3886 3887 3888
				  unsigned int array_size,
				  struct gpio_desc **desc_array,
				  struct gpio_array *array_info,
				  unsigned long *value_bitmap)
3889 3890 3891
{
	int i = 0;

3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917
	/*
	 * Validate array_info against desc_array and its size.
	 * It should immediately follow desc_array if both
	 * have been obtained from the same gpiod_get_array() call.
	 */
	if (array_info && array_info->desc == desc_array &&
	    array_size <= array_info->size &&
	    (void *)array_info == desc_array + array_info->size) {
		if (!can_sleep)
			WARN_ON(array_info->chip->can_sleep);

		if (!raw && !bitmap_empty(array_info->invert_mask, array_size))
			bitmap_xor(value_bitmap, value_bitmap,
				   array_info->invert_mask, array_size);

		gpio_chip_set_multiple(array_info->chip, array_info->set_mask,
				       value_bitmap);

		if (bitmap_full(array_info->set_mask, array_size))
			return 0;

		i = find_first_zero_bit(array_info->set_mask, array_size);
	} else {
		array_info = NULL;
	}

3918
	while (i < array_size) {
3919
		struct gpio_chip *gc = desc_array[i]->gdev->chip;
L
Laura Abbott 已提交
3920 3921
		unsigned long fastpath[2 * BITS_TO_LONGS(FASTPATH_NGPIO)];
		unsigned long *mask, *bits;
3922 3923
		int count = 0;

3924
		if (likely(gc->ngpio <= FASTPATH_NGPIO)) {
L
Laura Abbott 已提交
3925 3926
			mask = fastpath;
		} else {
3927
			mask = kmalloc_array(2 * BITS_TO_LONGS(gc->ngpio),
L
Laura Abbott 已提交
3928 3929 3930 3931 3932 3933
					   sizeof(*mask),
					   can_sleep ? GFP_KERNEL : GFP_ATOMIC);
			if (!mask)
				return -ENOMEM;
		}

3934 3935
		bits = mask + BITS_TO_LONGS(gc->ngpio);
		bitmap_zero(mask, gc->ngpio);
L
Laura Abbott 已提交
3936

D
Daniel Lockyer 已提交
3937
		if (!can_sleep)
3938
			WARN_ON(gc->can_sleep);
D
Daniel Lockyer 已提交
3939

3940 3941 3942
		do {
			struct gpio_desc *desc = desc_array[i];
			int hwgpio = gpio_chip_hwgpio(desc);
3943
			int value = test_bit(i, value_bitmap);
3944

3945 3946 3947 3948 3949 3950 3951 3952
			/*
			 * Pins applicable for fast input but not for
			 * fast output processing may have been already
			 * inverted inside the fast path, skip them.
			 */
			if (!raw && !(array_info &&
			    test_bit(i, array_info->invert_mask)) &&
			    test_bit(FLAG_ACTIVE_LOW, &desc->flags))
3953 3954 3955 3956 3957 3958
				value = !value;
			trace_gpio_value(desc_to_gpio(desc), 0, value);
			/*
			 * collect all normal outputs belonging to the same chip
			 * open drain and open source outputs are set individually
			 */
3959
			if (test_bit(FLAG_OPEN_DRAIN, &desc->flags) && !raw) {
3960
				gpio_set_open_drain_value_commit(desc, value);
3961
			} else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags) && !raw) {
3962
				gpio_set_open_source_value_commit(desc, value);
3963 3964
			} else {
				__set_bit(hwgpio, mask);
3965
				__assign_bit(hwgpio, bits, value);
3966 3967 3968
				count++;
			}
			i++;
3969 3970

			if (array_info)
3971 3972
				i = find_next_zero_bit(array_info->set_mask,
						       array_size, i);
3973
		} while ((i < array_size) &&
3974
			 (desc_array[i]->gdev->chip == gc));
3975
		/* push collected bits to outputs */
D
Daniel Lockyer 已提交
3976
		if (count != 0)
3977
			gpio_chip_set_multiple(gc, mask, bits);
L
Laura Abbott 已提交
3978 3979 3980

		if (mask != fastpath)
			kfree(mask);
3981
	}
L
Laura Abbott 已提交
3982
	return 0;
3983 3984
}

3985
/**
3986 3987
 * gpiod_set_raw_value() - assign a gpio's raw value
 * @desc: gpio whose value will be assigned
3988 3989
 * @value: value to assign
 *
3990 3991 3992
 * Set the raw value of the GPIO, i.e. the value of its physical line without
 * regard for its ACTIVE_LOW status.
 *
3993
 * This function can be called from contexts where we cannot sleep, and will
3994
 * complain if the GPIO chip functions potentially sleep.
3995
 */
3996
void gpiod_set_raw_value(struct gpio_desc *desc, int value)
3997
{
3998
	VALIDATE_DESC_VOID(desc);
3999
	/* Should be using gpiod_set_raw_value_cansleep() */
4000
	WARN_ON(desc->gdev->chip->can_sleep);
4001
	gpiod_set_raw_value_commit(desc, value);
4002
}
4003
EXPORT_SYMBOL_GPL(gpiod_set_raw_value);
4004

4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025
/**
 * gpiod_set_value_nocheck() - set a GPIO line value without checking
 * @desc: the descriptor to set the value on
 * @value: value to set
 *
 * This sets the value of a GPIO line backing a descriptor, applying
 * different semantic quirks like active low and open drain/source
 * handling.
 */
static void gpiod_set_value_nocheck(struct gpio_desc *desc, int value)
{
	if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
		value = !value;
	if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
		gpio_set_open_drain_value_commit(desc, value);
	else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
		gpio_set_open_source_value_commit(desc, value);
	else
		gpiod_set_raw_value_commit(desc, value);
}

4026
/**
4027 4028 4029 4030
 * gpiod_set_value() - assign a gpio's value
 * @desc: gpio whose value will be assigned
 * @value: value to assign
 *
4031 4032
 * Set the logical value of the GPIO, i.e. taking its ACTIVE_LOW,
 * OPEN_DRAIN and OPEN_SOURCE flags into account.
4033
 *
4034
 * This function can be called from contexts where we cannot sleep, and will
4035
 * complain if the GPIO chip functions potentially sleep.
4036
 */
4037
void gpiod_set_value(struct gpio_desc *desc, int value)
4038
{
4039
	VALIDATE_DESC_VOID(desc);
4040
	/* Should be using gpiod_set_value_cansleep() */
4041
	WARN_ON(desc->gdev->chip->can_sleep);
4042
	gpiod_set_value_nocheck(desc, value);
4043
}
4044
EXPORT_SYMBOL_GPL(gpiod_set_value);
4045

4046
/**
4047
 * gpiod_set_raw_array_value() - assign values to an array of GPIOs
4048
 * @array_size: number of elements in the descriptor array / value bitmap
4049
 * @desc_array: array of GPIO descriptors whose values will be assigned
4050
 * @array_info: information on applicability of fast bitmap processing path
4051
 * @value_bitmap: bitmap of values to assign
4052 4053 4054 4055
 *
 * Set the raw values of the GPIOs, i.e. the values of the physical lines
 * without regard for their ACTIVE_LOW status.
 *
4056
 * This function can be called from contexts where we cannot sleep, and will
4057 4058
 * complain if the GPIO chip functions potentially sleep.
 */
L
Laura Abbott 已提交
4059
int gpiod_set_raw_array_value(unsigned int array_size,
4060 4061 4062
			      struct gpio_desc **desc_array,
			      struct gpio_array *array_info,
			      unsigned long *value_bitmap)
4063 4064
{
	if (!desc_array)
L
Laura Abbott 已提交
4065 4066
		return -EINVAL;
	return gpiod_set_array_value_complex(true, false, array_size,
4067
					desc_array, array_info, value_bitmap);
4068
}
4069
EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value);
4070 4071

/**
4072
 * gpiod_set_array_value() - assign values to an array of GPIOs
4073
 * @array_size: number of elements in the descriptor array / value bitmap
4074
 * @desc_array: array of GPIO descriptors whose values will be assigned
4075
 * @array_info: information on applicability of fast bitmap processing path
4076
 * @value_bitmap: bitmap of values to assign
4077 4078 4079 4080
 *
 * Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
 * into account.
 *
4081
 * This function can be called from contexts where we cannot sleep, and will
4082 4083
 * complain if the GPIO chip functions potentially sleep.
 */
4084 4085 4086 4087
int gpiod_set_array_value(unsigned int array_size,
			  struct gpio_desc **desc_array,
			  struct gpio_array *array_info,
			  unsigned long *value_bitmap)
4088 4089
{
	if (!desc_array)
4090 4091 4092 4093
		return -EINVAL;
	return gpiod_set_array_value_complex(false, false, array_size,
					     desc_array, array_info,
					     value_bitmap);
4094
}
4095
EXPORT_SYMBOL_GPL(gpiod_set_array_value);
4096

4097
/**
4098 4099
 * gpiod_cansleep() - report whether gpio value access may sleep
 * @desc: gpio to check
4100 4101
 *
 */
4102
int gpiod_cansleep(const struct gpio_desc *desc)
4103
{
4104 4105
	VALIDATE_DESC(desc);
	return desc->gdev->chip->can_sleep;
4106
}
4107
EXPORT_SYMBOL_GPL(gpiod_cansleep);
4108

4109 4110 4111 4112 4113
/**
 * gpiod_set_consumer_name() - set the consumer name for the descriptor
 * @desc: gpio to set the consumer name on
 * @name: the new consumer name
 */
4114
int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name)
4115
{
4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126
	VALIDATE_DESC(desc);
	if (name) {
		name = kstrdup_const(name, GFP_KERNEL);
		if (!name)
			return -ENOMEM;
	}

	kfree_const(desc->label);
	desc_set_label(desc, name);

	return 0;
4127 4128 4129
}
EXPORT_SYMBOL_GPL(gpiod_set_consumer_name);

D
David Brownell 已提交
4130
/**
4131 4132
 * gpiod_to_irq() - return the IRQ corresponding to a GPIO
 * @desc: gpio whose IRQ will be returned (already requested)
D
David Brownell 已提交
4133
 *
4134 4135
 * Return the IRQ corresponding to the passed GPIO, or an error code in case of
 * error.
D
David Brownell 已提交
4136
 */
4137
int gpiod_to_irq(const struct gpio_desc *desc)
D
David Brownell 已提交
4138
{
4139
	struct gpio_chip *gc;
4140
	int offset;
D
David Brownell 已提交
4141

4142 4143 4144 4145 4146
	/*
	 * Cannot VALIDATE_DESC() here as gpiod_to_irq() consumer semantics
	 * requires this function to not return zero on an invalid descriptor
	 * but rather a negative error number.
	 */
4147
	if (!desc || IS_ERR(desc) || !desc->gdev || !desc->gdev->chip)
4148 4149
		return -EINVAL;

4150
	gc = desc->gdev->chip;
4151
	offset = gpio_chip_hwgpio(desc);
4152 4153
	if (gc->to_irq) {
		int retirq = gc->to_irq(gc, offset);
4154 4155 4156 4157 4158 4159 4160 4161

		/* Zero means NO_IRQ */
		if (!retirq)
			return -ENXIO;

		return retirq;
	}
	return -ENXIO;
D
David Brownell 已提交
4162
}
4163
EXPORT_SYMBOL_GPL(gpiod_to_irq);
D
David Brownell 已提交
4164

4165
/**
4166
 * gpiochip_lock_as_irq() - lock a GPIO to be used as IRQ
4167
 * @gc: the chip the GPIO to lock belongs to
4168
 * @offset: the offset of the GPIO to lock as IRQ
4169 4170
 *
 * This is used directly by GPIO drivers that want to lock down
4171
 * a certain GPIO line to be used for IRQs.
4172
 */
4173
int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset)
4174
{
4175 4176
	struct gpio_desc *desc;

4177
	desc = gpiochip_get_desc(gc, offset);
4178 4179 4180
	if (IS_ERR(desc))
		return PTR_ERR(desc);

4181 4182 4183 4184
	/*
	 * If it's fast: flush the direction setting if something changed
	 * behind our back
	 */
4185
	if (!gc->can_sleep && gc->get_direction) {
4186
		int dir = gpiod_get_direction(desc);
4187

4188
		if (dir < 0) {
4189
			chip_err(gc, "%s: cannot get GPIO direction\n",
4190 4191 4192
				 __func__);
			return dir;
		}
4193
	}
4194

4195
	if (test_bit(FLAG_IS_OUT, &desc->flags)) {
4196
		chip_err(gc,
4197 4198
			 "%s: tried to flag a GPIO set as output for IRQ\n",
			 __func__);
4199 4200 4201
		return -EIO;
	}

4202
	set_bit(FLAG_USED_AS_IRQ, &desc->flags);
4203
	set_bit(FLAG_IRQ_IS_ENABLED, &desc->flags);
4204 4205 4206 4207 4208 4209 4210 4211 4212

	/*
	 * If the consumer has not set up a label (such as when the
	 * IRQ is referenced from .to_irq()) we set up a label here
	 * so it is clear this is used as an interrupt.
	 */
	if (!desc->label)
		desc_set_label(desc, "interrupt");

4213
	return 0;
4214
}
4215
EXPORT_SYMBOL_GPL(gpiochip_lock_as_irq);
4216

4217
/**
4218
 * gpiochip_unlock_as_irq() - unlock a GPIO used as IRQ
4219
 * @gc: the chip the GPIO to lock belongs to
4220
 * @offset: the offset of the GPIO to lock as IRQ
4221 4222 4223
 *
 * This is used directly by GPIO drivers that want to indicate
 * that a certain GPIO is no longer used exclusively for IRQ.
4224
 */
4225
void gpiochip_unlock_as_irq(struct gpio_chip *gc, unsigned int offset)
4226
{
4227 4228
	struct gpio_desc *desc;

4229
	desc = gpiochip_get_desc(gc, offset);
4230
	if (IS_ERR(desc))
4231
		return;
4232

4233
	clear_bit(FLAG_USED_AS_IRQ, &desc->flags);
4234
	clear_bit(FLAG_IRQ_IS_ENABLED, &desc->flags);
4235 4236 4237 4238

	/* If we only had this marking, erase it */
	if (desc->label && !strcmp(desc->label, "interrupt"))
		desc_set_label(desc, NULL);
4239
}
4240
EXPORT_SYMBOL_GPL(gpiochip_unlock_as_irq);
4241

4242
void gpiochip_disable_irq(struct gpio_chip *gc, unsigned int offset)
4243
{
4244
	struct gpio_desc *desc = gpiochip_get_desc(gc, offset);
4245 4246 4247 4248 4249 4250 4251

	if (!IS_ERR(desc) &&
	    !WARN_ON(!test_bit(FLAG_USED_AS_IRQ, &desc->flags)))
		clear_bit(FLAG_IRQ_IS_ENABLED, &desc->flags);
}
EXPORT_SYMBOL_GPL(gpiochip_disable_irq);

4252
void gpiochip_enable_irq(struct gpio_chip *gc, unsigned int offset)
4253
{
4254
	struct gpio_desc *desc = gpiochip_get_desc(gc, offset);
4255 4256 4257 4258 4259 4260 4261 4262 4263

	if (!IS_ERR(desc) &&
	    !WARN_ON(!test_bit(FLAG_USED_AS_IRQ, &desc->flags))) {
		WARN_ON(test_bit(FLAG_IS_OUT, &desc->flags));
		set_bit(FLAG_IRQ_IS_ENABLED, &desc->flags);
	}
}
EXPORT_SYMBOL_GPL(gpiochip_enable_irq);

4264
bool gpiochip_line_is_irq(struct gpio_chip *gc, unsigned int offset)
4265
{
4266
	if (offset >= gc->ngpio)
4267 4268
		return false;

4269
	return test_bit(FLAG_USED_AS_IRQ, &gc->gpiodev->descs[offset].flags);
4270 4271 4272
}
EXPORT_SYMBOL_GPL(gpiochip_line_is_irq);

4273
int gpiochip_reqres_irq(struct gpio_chip *gc, unsigned int offset)
4274 4275 4276
{
	int ret;

4277
	if (!try_module_get(gc->gpiodev->owner))
4278 4279
		return -ENODEV;

4280
	ret = gpiochip_lock_as_irq(gc, offset);
4281
	if (ret) {
4282 4283
		chip_err(gc, "unable to lock HW IRQ %u for IRQ\n", offset);
		module_put(gc->gpiodev->owner);
4284 4285 4286 4287 4288 4289
		return ret;
	}
	return 0;
}
EXPORT_SYMBOL_GPL(gpiochip_reqres_irq);

4290
void gpiochip_relres_irq(struct gpio_chip *gc, unsigned int offset)
4291
{
4292 4293
	gpiochip_unlock_as_irq(gc, offset);
	module_put(gc->gpiodev->owner);
4294 4295 4296
}
EXPORT_SYMBOL_GPL(gpiochip_relres_irq);

4297
bool gpiochip_line_is_open_drain(struct gpio_chip *gc, unsigned int offset)
4298
{
4299
	if (offset >= gc->ngpio)
4300 4301
		return false;

4302
	return test_bit(FLAG_OPEN_DRAIN, &gc->gpiodev->descs[offset].flags);
4303 4304 4305
}
EXPORT_SYMBOL_GPL(gpiochip_line_is_open_drain);

4306
bool gpiochip_line_is_open_source(struct gpio_chip *gc, unsigned int offset)
4307
{
4308
	if (offset >= gc->ngpio)
4309 4310
		return false;

4311
	return test_bit(FLAG_OPEN_SOURCE, &gc->gpiodev->descs[offset].flags);
4312 4313 4314
}
EXPORT_SYMBOL_GPL(gpiochip_line_is_open_source);

4315
bool gpiochip_line_is_persistent(struct gpio_chip *gc, unsigned int offset)
4316
{
4317
	if (offset >= gc->ngpio)
4318 4319
		return false;

4320
	return !test_bit(FLAG_TRANSITORY, &gc->gpiodev->descs[offset].flags);
4321 4322 4323
}
EXPORT_SYMBOL_GPL(gpiochip_line_is_persistent);

4324 4325 4326 4327 4328
/**
 * gpiod_get_raw_value_cansleep() - return a gpio's raw value
 * @desc: gpio whose value will be returned
 *
 * Return the GPIO's raw value, i.e. the value of the physical line disregarding
4329
 * its ACTIVE_LOW status, or negative errno on failure.
4330 4331
 *
 * This function is to be called from contexts that can sleep.
4332
 */
4333
int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
4334 4335
{
	might_sleep_if(extra_checks);
4336
	VALIDATE_DESC(desc);
4337
	return gpiod_get_raw_value_commit(desc);
4338
}
4339
EXPORT_SYMBOL_GPL(gpiod_get_raw_value_cansleep);
4340

4341 4342 4343 4344 4345
/**
 * gpiod_get_value_cansleep() - return a gpio's value
 * @desc: gpio whose value will be returned
 *
 * Return the GPIO's logical value, i.e. taking the ACTIVE_LOW status into
4346
 * account, or negative errno on failure.
4347 4348 4349 4350
 *
 * This function is to be called from contexts that can sleep.
 */
int gpiod_get_value_cansleep(const struct gpio_desc *desc)
4351
{
4352
	int value;
4353 4354

	might_sleep_if(extra_checks);
4355
	VALIDATE_DESC(desc);
4356
	value = gpiod_get_raw_value_commit(desc);
4357 4358 4359
	if (value < 0)
		return value;

4360 4361 4362
	if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
		value = !value;

4363
	return value;
4364
}
4365
EXPORT_SYMBOL_GPL(gpiod_get_value_cansleep);
4366

4367 4368
/**
 * gpiod_get_raw_array_value_cansleep() - read raw values from an array of GPIOs
4369
 * @array_size: number of elements in the descriptor array / value bitmap
4370
 * @desc_array: array of GPIO descriptors whose values will be read
4371
 * @array_info: information on applicability of fast bitmap processing path
4372
 * @value_bitmap: bitmap to store the read values
4373 4374 4375 4376 4377 4378 4379 4380 4381
 *
 * Read the raw values of the GPIOs, i.e. the values of the physical lines
 * without regard for their ACTIVE_LOW status.  Return 0 in case of success,
 * else an error code.
 *
 * This function is to be called from contexts that can sleep.
 */
int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
				       struct gpio_desc **desc_array,
4382
				       struct gpio_array *array_info,
4383
				       unsigned long *value_bitmap)
4384 4385 4386 4387 4388
{
	might_sleep_if(extra_checks);
	if (!desc_array)
		return -EINVAL;
	return gpiod_get_array_value_complex(true, true, array_size,
4389 4390
					     desc_array, array_info,
					     value_bitmap);
4391 4392 4393 4394 4395
}
EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value_cansleep);

/**
 * gpiod_get_array_value_cansleep() - read values from an array of GPIOs
4396
 * @array_size: number of elements in the descriptor array / value bitmap
4397
 * @desc_array: array of GPIO descriptors whose values will be read
4398
 * @array_info: information on applicability of fast bitmap processing path
4399
 * @value_bitmap: bitmap to store the read values
4400 4401 4402 4403 4404 4405 4406 4407
 *
 * Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
 * into account.  Return 0 in case of success, else an error code.
 *
 * This function is to be called from contexts that can sleep.
 */
int gpiod_get_array_value_cansleep(unsigned int array_size,
				   struct gpio_desc **desc_array,
4408
				   struct gpio_array *array_info,
4409
				   unsigned long *value_bitmap)
4410 4411 4412 4413 4414
{
	might_sleep_if(extra_checks);
	if (!desc_array)
		return -EINVAL;
	return gpiod_get_array_value_complex(false, true, array_size,
4415 4416
					     desc_array, array_info,
					     value_bitmap);
4417 4418 4419
}
EXPORT_SYMBOL_GPL(gpiod_get_array_value_cansleep);

4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430
/**
 * gpiod_set_raw_value_cansleep() - assign a gpio's raw value
 * @desc: gpio whose value will be assigned
 * @value: value to assign
 *
 * Set the raw value of the GPIO, i.e. the value of its physical line without
 * regard for its ACTIVE_LOW status.
 *
 * This function is to be called from contexts that can sleep.
 */
void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)
4431
{
4432
	might_sleep_if(extra_checks);
4433
	VALIDATE_DESC_VOID(desc);
4434
	gpiod_set_raw_value_commit(desc, value);
4435
}
4436
EXPORT_SYMBOL_GPL(gpiod_set_raw_value_cansleep);
4437

4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448
/**
 * gpiod_set_value_cansleep() - assign a gpio's value
 * @desc: gpio whose value will be assigned
 * @value: value to assign
 *
 * Set the logical value of the GPIO, i.e. taking its ACTIVE_LOW status into
 * account
 *
 * This function is to be called from contexts that can sleep.
 */
void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
4449 4450
{
	might_sleep_if(extra_checks);
4451
	VALIDATE_DESC_VOID(desc);
4452
	gpiod_set_value_nocheck(desc, value);
4453
}
4454
EXPORT_SYMBOL_GPL(gpiod_set_value_cansleep);
4455

4456
/**
4457
 * gpiod_set_raw_array_value_cansleep() - assign values to an array of GPIOs
4458
 * @array_size: number of elements in the descriptor array / value bitmap
4459
 * @desc_array: array of GPIO descriptors whose values will be assigned
4460
 * @array_info: information on applicability of fast bitmap processing path
4461
 * @value_bitmap: bitmap of values to assign
4462 4463 4464 4465 4466 4467
 *
 * Set the raw values of the GPIOs, i.e. the values of the physical lines
 * without regard for their ACTIVE_LOW status.
 *
 * This function is to be called from contexts that can sleep.
 */
L
Laura Abbott 已提交
4468
int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
4469 4470 4471
				       struct gpio_desc **desc_array,
				       struct gpio_array *array_info,
				       unsigned long *value_bitmap)
4472 4473 4474
{
	might_sleep_if(extra_checks);
	if (!desc_array)
L
Laura Abbott 已提交
4475 4476
		return -EINVAL;
	return gpiod_set_array_value_complex(true, true, array_size, desc_array,
4477
				      array_info, value_bitmap);
4478
}
4479
EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value_cansleep);
4480

4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497
/**
 * gpiod_add_lookup_tables() - register GPIO device consumers
 * @tables: list of tables of consumers to register
 * @n: number of tables in the list
 */
void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n)
{
	unsigned int i;

	mutex_lock(&gpio_lookup_lock);

	for (i = 0; i < n; i++)
		list_add_tail(&tables[i]->list, &gpio_lookup_list);

	mutex_unlock(&gpio_lookup_lock);
}

4498
/**
4499
 * gpiod_set_array_value_cansleep() - assign values to an array of GPIOs
4500
 * @array_size: number of elements in the descriptor array / value bitmap
4501
 * @desc_array: array of GPIO descriptors whose values will be assigned
4502
 * @array_info: information on applicability of fast bitmap processing path
4503
 * @value_bitmap: bitmap of values to assign
4504 4505 4506 4507 4508 4509
 *
 * Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
 * into account.
 *
 * This function is to be called from contexts that can sleep.
 */
4510 4511 4512 4513
int gpiod_set_array_value_cansleep(unsigned int array_size,
				   struct gpio_desc **desc_array,
				   struct gpio_array *array_info,
				   unsigned long *value_bitmap)
4514 4515 4516
{
	might_sleep_if(extra_checks);
	if (!desc_array)
4517 4518 4519 4520
		return -EINVAL;
	return gpiod_set_array_value_complex(false, true, array_size,
					     desc_array, array_info,
					     value_bitmap);
4521
}
4522
EXPORT_SYMBOL_GPL(gpiod_set_array_value_cansleep);
4523

4524
/**
4525 4526
 * gpiod_add_lookup_table() - register GPIO device consumers
 * @table: table of consumers to register
4527
 */
4528
void gpiod_add_lookup_table(struct gpiod_lookup_table *table)
4529 4530 4531
{
	mutex_lock(&gpio_lookup_lock);

4532
	list_add_tail(&table->list, &gpio_lookup_list);
4533 4534 4535

	mutex_unlock(&gpio_lookup_lock);
}
4536
EXPORT_SYMBOL_GPL(gpiod_add_lookup_table);
4537

4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549
/**
 * gpiod_remove_lookup_table() - unregister GPIO device consumers
 * @table: table of consumers to unregister
 */
void gpiod_remove_lookup_table(struct gpiod_lookup_table *table)
{
	mutex_lock(&gpio_lookup_lock);

	list_del(&table->list);

	mutex_unlock(&gpio_lookup_lock);
}
4550
EXPORT_SYMBOL_GPL(gpiod_remove_lookup_table);
4551

4552 4553 4554 4555 4556 4557
/**
 * gpiod_add_hogs() - register a set of GPIO hogs from machine code
 * @hogs: table of gpio hog entries with a zeroed sentinel at the end
 */
void gpiod_add_hogs(struct gpiod_hog *hogs)
{
4558
	struct gpio_chip *gc;
4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569
	struct gpiod_hog *hog;

	mutex_lock(&gpio_machine_hogs_mutex);

	for (hog = &hogs[0]; hog->chip_label; hog++) {
		list_add_tail(&hog->list, &gpio_machine_hogs);

		/*
		 * The chip may have been registered earlier, so check if it
		 * exists and, if so, try to hog the line now.
		 */
4570 4571 4572
		gc = find_chip_by_name(hog->chip_label);
		if (gc)
			gpiochip_machine_hog(gc, hog);
4573 4574 4575 4576 4577 4578
	}

	mutex_unlock(&gpio_machine_hogs_mutex);
}
EXPORT_SYMBOL_GPL(gpiod_add_hogs);

4579
static struct gpiod_lookup_table *gpiod_find_lookup_table(struct device *dev)
4580 4581
{
	const char *dev_id = dev ? dev_name(dev) : NULL;
4582
	struct gpiod_lookup_table *table;
4583 4584 4585

	mutex_lock(&gpio_lookup_lock);

4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603
	list_for_each_entry(table, &gpio_lookup_list, list) {
		if (table->dev_id && dev_id) {
			/*
			 * Valid strings on both ends, must be identical to have
			 * a match
			 */
			if (!strcmp(table->dev_id, dev_id))
				goto found;
		} else {
			/*
			 * One of the pointers is NULL, so both must be to have
			 * a match
			 */
			if (dev_id == table->dev_id)
				goto found;
		}
	}
	table = NULL;
4604

4605 4606 4607 4608
found:
	mutex_unlock(&gpio_lookup_lock);
	return table;
}
4609

4610
static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
4611
				    unsigned int idx, unsigned long *flags)
4612
{
4613
	struct gpio_desc *desc = ERR_PTR(-ENOENT);
4614 4615
	struct gpiod_lookup_table *table;
	struct gpiod_lookup *p;
4616

4617 4618 4619
	table = gpiod_find_lookup_table(dev);
	if (!table)
		return desc;
4620

4621
	for (p = &table->table[0]; p->chip_label; p++) {
4622
		struct gpio_chip *gc;
4623

4624
		/* idx must always match exactly */
4625 4626 4627
		if (p->idx != idx)
			continue;

4628 4629 4630
		/* If the lookup entry has a con_id, require exact match */
		if (p->con_id && (!con_id || strcmp(p->con_id, con_id)))
			continue;
4631

4632
		gc = find_chip_by_name(p->chip_label);
4633

4634
		if (!gc) {
4635 4636 4637 4638 4639 4640 4641 4642 4643 4644
			/*
			 * As the lookup table indicates a chip with
			 * p->chip_label should exist, assume it may
			 * still appear later and let the interested
			 * consumer be probed again or let the Deferred
			 * Probe infrastructure handle the error.
			 */
			dev_warn(dev, "cannot find GPIO chip %s, deferring\n",
				 p->chip_label);
			return ERR_PTR(-EPROBE_DEFER);
4645
		}
4646

4647
		if (gc->ngpio <= p->chip_hwnum) {
4648
			dev_err(dev,
4649
				"requested GPIO %u (%u) is out of range [0..%u] for chip %s\n",
4650 4651
				idx, p->chip_hwnum, gc->ngpio - 1,
				gc->label);
4652
			return ERR_PTR(-EINVAL);
4653 4654
		}

4655
		desc = gpiochip_get_desc(gc, p->chip_hwnum);
4656
		*flags = p->flags;
4657

4658
		return desc;
4659 4660 4661 4662 4663
	}

	return desc;
}

4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684
static int platform_gpio_count(struct device *dev, const char *con_id)
{
	struct gpiod_lookup_table *table;
	struct gpiod_lookup *p;
	unsigned int count = 0;

	table = gpiod_find_lookup_table(dev);
	if (!table)
		return -ENOENT;

	for (p = &table->table[0]; p->chip_label; p++) {
		if ((con_id && p->con_id && !strcmp(con_id, p->con_id)) ||
		    (!con_id && !p->con_id))
			count++;
	}
	if (!count)
		return -ENOENT;

	return count;
}

4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732
/**
 * fwnode_gpiod_get_index - obtain a GPIO from firmware node
 * @fwnode:	handle of the firmware node
 * @con_id:	function within the GPIO consumer
 * @index:	index of the GPIO to obtain for the consumer
 * @flags:	GPIO initialization flags
 * @label:	label to attach to the requested GPIO
 *
 * This function can be used for drivers that get their configuration
 * from opaque firmware.
 *
 * The function properly finds the corresponding GPIO using whatever is the
 * underlying firmware interface and then makes sure that the GPIO
 * descriptor is requested before it is returned to the caller.
 *
 * Returns:
 * On successful request the GPIO pin is configured in accordance with
 * provided @flags.
 *
 * In case of error an ERR_PTR() is returned.
 */
struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
					 const char *con_id, int index,
					 enum gpiod_flags flags,
					 const char *label)
{
	struct gpio_desc *desc;
	char prop_name[32]; /* 32 is max size of property name */
	unsigned int i;

	for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
		if (con_id)
			snprintf(prop_name, sizeof(prop_name), "%s-%s",
					    con_id, gpio_suffixes[i]);
		else
			snprintf(prop_name, sizeof(prop_name), "%s",
					    gpio_suffixes[i]);

		desc = fwnode_get_named_gpiod(fwnode, prop_name, index, flags,
					      label);
		if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT))
			break;
	}

	return desc;
}
EXPORT_SYMBOL_GPL(fwnode_gpiod_get_index);

4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743
/**
 * gpiod_count - return the number of GPIOs associated with a device / function
 *		or -ENOENT if no GPIO has been assigned to the requested function
 * @dev:	GPIO consumer, can be NULL for system-global GPIOs
 * @con_id:	function within the GPIO consumer
 */
int gpiod_count(struct device *dev, const char *con_id)
{
	int count = -ENOENT;

	if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
L
Linus Walleij 已提交
4744
		count = of_gpio_get_count(dev, con_id);
4745 4746 4747 4748 4749 4750 4751 4752 4753 4754
	else if (IS_ENABLED(CONFIG_ACPI) && dev && ACPI_HANDLE(dev))
		count = acpi_gpio_count(dev, con_id);

	if (count < 0)
		count = platform_gpio_count(dev, con_id);

	return count;
}
EXPORT_SYMBOL_GPL(gpiod_count);

4755
/**
4756
 * gpiod_get - obtain a GPIO for a given GPIO function
4757
 * @dev:	GPIO consumer, can be NULL for system-global GPIOs
4758
 * @con_id:	function within the GPIO consumer
4759
 * @flags:	optional GPIO initialization flags
4760 4761
 *
 * Return the GPIO descriptor corresponding to the function con_id of device
4762
 * dev, -ENOENT if no GPIO has been assigned to the requested function, or
4763
 * another IS_ERR() code if an error occurred while trying to acquire the GPIO.
4764
 */
4765
struct gpio_desc *__must_check gpiod_get(struct device *dev, const char *con_id,
4766
					 enum gpiod_flags flags)
4767
{
4768
	return gpiod_get_index(dev, con_id, 0, flags);
4769
}
4770
EXPORT_SYMBOL_GPL(gpiod_get);
4771

4772 4773 4774 4775
/**
 * gpiod_get_optional - obtain an optional GPIO for a given GPIO function
 * @dev: GPIO consumer, can be NULL for system-global GPIOs
 * @con_id: function within the GPIO consumer
4776
 * @flags: optional GPIO initialization flags
4777 4778 4779 4780 4781
 *
 * This is equivalent to gpiod_get(), except that when no GPIO was assigned to
 * the requested function it will return NULL. This is convenient for drivers
 * that need to handle optional GPIOs.
 */
4782
struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
4783 4784
						  const char *con_id,
						  enum gpiod_flags flags)
4785
{
4786
	return gpiod_get_index_optional(dev, con_id, 0, flags);
4787
}
4788
EXPORT_SYMBOL_GPL(gpiod_get_optional);
4789

B
Benoit Parrot 已提交
4790 4791 4792 4793 4794

/**
 * gpiod_configure_flags - helper function to configure a given GPIO
 * @desc:	gpio whose value will be assigned
 * @con_id:	function within the GPIO consumer
4795 4796
 * @lflags:	bitmask of gpio_lookup_flags GPIO_* values - returned from
 *		of_find_gpio() or of_get_gpio_hog()
B
Benoit Parrot 已提交
4797 4798 4799 4800 4801 4802
 * @dflags:	gpiod_flags - optional GPIO initialization flags
 *
 * Return 0 on success, -ENOENT if no GPIO has been assigned to the
 * requested function and/or index, or another IS_ERR() code if an error
 * occurred while trying to acquire the GPIO.
 */
4803
int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id,
4804
		unsigned long lflags, enum gpiod_flags dflags)
B
Benoit Parrot 已提交
4805
{
4806
	int ret;
B
Benoit Parrot 已提交
4807

4808 4809
	if (lflags & GPIO_ACTIVE_LOW)
		set_bit(FLAG_ACTIVE_LOW, &desc->flags);
4810

4811 4812
	if (lflags & GPIO_OPEN_DRAIN)
		set_bit(FLAG_OPEN_DRAIN, &desc->flags);
4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824
	else if (dflags & GPIOD_FLAGS_BIT_OPEN_DRAIN) {
		/*
		 * This enforces open drain mode from the consumer side.
		 * This is necessary for some busses like I2C, but the lookup
		 * should *REALLY* have specified them as open drain in the
		 * first place, so print a little warning here.
		 */
		set_bit(FLAG_OPEN_DRAIN, &desc->flags);
		gpiod_warn(desc,
			   "enforced open drain please flag it properly in DT/ACPI DSDT/board file\n");
	}

4825 4826
	if (lflags & GPIO_OPEN_SOURCE)
		set_bit(FLAG_OPEN_SOURCE, &desc->flags);
4827

4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838
	if ((lflags & GPIO_PULL_UP) && (lflags & GPIO_PULL_DOWN)) {
		gpiod_err(desc,
			  "both pull-up and pull-down enabled, invalid configuration\n");
		return -EINVAL;
	}

	if (lflags & GPIO_PULL_UP)
		set_bit(FLAG_PULL_UP, &desc->flags);
	else if (lflags & GPIO_PULL_DOWN)
		set_bit(FLAG_PULL_DOWN, &desc->flags);

4839 4840 4841
	ret = gpiod_set_transitory(desc, (lflags & GPIO_TRANSITORY));
	if (ret < 0)
		return ret;
4842

B
Benoit Parrot 已提交
4843 4844 4845 4846 4847 4848 4849 4850
	/* No particular flag request, return here... */
	if (!(dflags & GPIOD_FLAGS_BIT_DIR_SET)) {
		pr_debug("no flags found for %s\n", con_id);
		return 0;
	}

	/* Process flags */
	if (dflags & GPIOD_FLAGS_BIT_DIR_OUT)
4851
		ret = gpiod_direction_output(desc,
4852
				!!(dflags & GPIOD_FLAGS_BIT_DIR_VAL));
B
Benoit Parrot 已提交
4853
	else
4854
		ret = gpiod_direction_input(desc);
B
Benoit Parrot 已提交
4855

4856
	return ret;
B
Benoit Parrot 已提交
4857 4858
}

4859 4860
/**
 * gpiod_get_index - obtain a GPIO from a multi-index GPIO function
4861
 * @dev:	GPIO consumer, can be NULL for system-global GPIOs
4862 4863
 * @con_id:	function within the GPIO consumer
 * @idx:	index of the GPIO to obtain in the consumer
4864
 * @flags:	optional GPIO initialization flags
4865 4866 4867 4868
 *
 * This variant of gpiod_get() allows to access GPIOs other than the first
 * defined one for functions that define several GPIOs.
 *
4869 4870
 * Return a valid GPIO descriptor, -ENOENT if no GPIO has been assigned to the
 * requested function and/or index, or another IS_ERR() code if an error
4871
 * occurred while trying to acquire the GPIO.
4872
 */
4873
struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
4874
					       const char *con_id,
4875 4876
					       unsigned int idx,
					       enum gpiod_flags flags)
4877
{
4878
	unsigned long lookupflags = GPIO_LOOKUP_FLAGS_DEFAULT;
4879
	struct gpio_desc *desc = NULL;
4880
	int ret;
L
Linus Walleij 已提交
4881 4882
	/* Maybe we have a device name, maybe not */
	const char *devname = dev ? dev_name(dev) : "?";
4883 4884 4885

	dev_dbg(dev, "GPIO lookup for consumer %s\n", con_id);

4886 4887 4888 4889 4890 4891 4892
	if (dev) {
		/* Using device tree? */
		if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
			dev_dbg(dev, "using device tree for GPIO lookup\n");
			desc = of_find_gpio(dev, con_id, idx, &lookupflags);
		} else if (ACPI_COMPANION(dev)) {
			dev_dbg(dev, "using ACPI for GPIO lookup\n");
4893
			desc = acpi_find_gpio(dev, con_id, idx, &flags, &lookupflags);
4894
		}
4895 4896 4897 4898 4899 4900
	}

	/*
	 * Either we are not using DT or ACPI, or their lookup did not return
	 * a result. In that case, use platform lookup as a fallback.
	 */
4901
	if (!desc || desc == ERR_PTR(-ENOENT)) {
4902
		dev_dbg(dev, "using lookup tables for GPIO lookup\n");
4903
		desc = gpiod_find(dev, con_id, idx, &lookupflags);
4904 4905 4906
	}

	if (IS_ERR(desc)) {
4907
		dev_dbg(dev, "No GPIO consumer %s found\n", con_id);
4908 4909 4910
		return desc;
	}

L
Linus Walleij 已提交
4911 4912 4913 4914
	/*
	 * If a connection label was passed use that, else attempt to use
	 * the device name as label
	 */
4915 4916 4917
	ret = gpiod_request(desc, con_id ? con_id : devname);
	if (ret < 0) {
		if (ret == -EBUSY && flags & GPIOD_FLAGS_BIT_NONEXCLUSIVE) {
4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929
			/*
			 * This happens when there are several consumers for
			 * the same GPIO line: we just return here without
			 * further initialization. It is a bit if a hack.
			 * This is necessary to support fixed regulators.
			 *
			 * FIXME: Make this more sane and safe.
			 */
			dev_info(dev, "nonexclusive access to GPIO for %s\n",
				 con_id ? con_id : devname);
			return desc;
		} else {
4930
			return ERR_PTR(ret);
4931 4932
		}
	}
4933

4934
	ret = gpiod_configure_flags(desc, con_id, lookupflags, flags);
4935
	if (ret < 0) {
4936
		dev_dbg(dev, "setup of GPIO %s failed\n", con_id);
4937 4938 4939 4940 4941 4942
		gpiod_put(desc);
		return ERR_PTR(ret);
	}

	return desc;
}
4943
EXPORT_SYMBOL_GPL(gpiod_get_index);
4944

4945 4946 4947 4948
/**
 * fwnode_get_named_gpiod - obtain a GPIO from firmware node
 * @fwnode:	handle of the firmware node
 * @propname:	name of the firmware property representing the GPIO
4949
 * @index:	index of the GPIO to obtain for the consumer
4950
 * @dflags:	GPIO initialization flags
T
Thierry Reding 已提交
4951
 * @label:	label to attach to the requested GPIO
4952 4953
 *
 * This function can be used for drivers that get their configuration
4954
 * from opaque firmware.
4955
 *
4956
 * The function properly finds the corresponding GPIO using whatever is the
4957 4958 4959
 * underlying firmware interface and then makes sure that the GPIO
 * descriptor is requested before it is returned to the caller.
 *
T
Thierry Reding 已提交
4960
 * Returns:
4961
 * On successful request the GPIO pin is configured in accordance with
4962 4963
 * provided @dflags.
 *
4964 4965 4966
 * In case of error an ERR_PTR() is returned.
 */
struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
4967
					 const char *propname, int index,
4968 4969
					 enum gpiod_flags dflags,
					 const char *label)
4970
{
4971
	unsigned long lflags = GPIO_LOOKUP_FLAGS_DEFAULT;
4972 4973 4974 4975 4976 4977 4978
	struct gpio_desc *desc = ERR_PTR(-ENODEV);
	int ret;

	if (!fwnode)
		return ERR_PTR(-EINVAL);

	if (is_of_node(fwnode)) {
4979 4980 4981 4982 4983
		desc = gpiod_get_from_of_node(to_of_node(fwnode),
					      propname, index,
					      dflags,
					      label);
		return desc;
4984 4985 4986
	} else if (is_acpi_node(fwnode)) {
		struct acpi_gpio_info info;

4987
		desc = acpi_node_get_gpiod(fwnode, propname, index, &info);
4988 4989
		if (IS_ERR(desc))
			return desc;
4990

4991
		acpi_gpio_update_gpiod_flags(&dflags, &info);
4992
		acpi_gpio_update_gpiod_lookup_flags(&lflags, &info);
4993
	}
4994

4995
	/* Currently only ACPI takes this path */
4996
	ret = gpiod_request(desc, label);
4997 4998 4999
	if (ret)
		return ERR_PTR(ret);

5000 5001 5002 5003
	ret = gpiod_configure_flags(desc, propname, lflags, dflags);
	if (ret < 0) {
		gpiod_put(desc);
		return ERR_PTR(ret);
5004 5005
	}

5006 5007 5008 5009
	return desc;
}
EXPORT_SYMBOL_GPL(fwnode_get_named_gpiod);

5010 5011 5012 5013 5014 5015
/**
 * gpiod_get_index_optional - obtain an optional GPIO from a multi-index GPIO
 *                            function
 * @dev: GPIO consumer, can be NULL for system-global GPIOs
 * @con_id: function within the GPIO consumer
 * @index: index of the GPIO to obtain in the consumer
5016
 * @flags: optional GPIO initialization flags
5017 5018 5019 5020 5021
 *
 * This is equivalent to gpiod_get_index(), except that when no GPIO with the
 * specified index was assigned to the requested function it will return NULL.
 * This is convenient for drivers that need to handle optional GPIOs.
 */
5022
struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
5023
							const char *con_id,
5024 5025
							unsigned int index,
							enum gpiod_flags flags)
5026 5027 5028
{
	struct gpio_desc *desc;

5029
	desc = gpiod_get_index(dev, con_id, index, flags);
5030 5031 5032 5033 5034 5035 5036
	if (IS_ERR(desc)) {
		if (PTR_ERR(desc) == -ENOENT)
			return NULL;
	}

	return desc;
}
5037
EXPORT_SYMBOL_GPL(gpiod_get_index_optional);
5038

B
Benoit Parrot 已提交
5039 5040 5041 5042
/**
 * gpiod_hog - Hog the specified GPIO desc given the provided flags
 * @desc:	gpio whose value will be assigned
 * @name:	gpio line name
5043 5044
 * @lflags:	bitmask of gpio_lookup_flags GPIO_* values - returned from
 *		of_find_gpio() or of_get_gpio_hog()
B
Benoit Parrot 已提交
5045 5046 5047 5048 5049
 * @dflags:	gpiod_flags - optional GPIO initialization flags
 */
int gpiod_hog(struct gpio_desc *desc, const char *name,
	      unsigned long lflags, enum gpiod_flags dflags)
{
5050
	struct gpio_chip *gc;
B
Benoit Parrot 已提交
5051 5052
	struct gpio_desc *local_desc;
	int hwnum;
5053
	int ret;
B
Benoit Parrot 已提交
5054

5055
	gc = gpiod_to_chip(desc);
B
Benoit Parrot 已提交
5056 5057
	hwnum = gpio_chip_hwgpio(desc);

5058
	local_desc = gpiochip_request_own_desc(gc, hwnum, name,
5059
					       lflags, dflags);
B
Benoit Parrot 已提交
5060
	if (IS_ERR(local_desc)) {
5061
		ret = PTR_ERR(local_desc);
5062
		pr_err("requesting hog GPIO %s (chip %s, offset %d) failed, %d\n",
5063
		       name, gc->label, hwnum, ret);
5064
		return ret;
B
Benoit Parrot 已提交
5065 5066 5067 5068 5069 5070 5071
	}

	/* Mark GPIO as hogged so it can be identified and removed later */
	set_bit(FLAG_IS_HOGGED, &desc->flags);

	pr_info("GPIO line %d (%s) hogged as %s%s\n",
		desc_to_gpio(desc), name,
5072 5073 5074
		(dflags & GPIOD_FLAGS_BIT_DIR_OUT) ? "output" : "input",
		(dflags & GPIOD_FLAGS_BIT_DIR_OUT) ?
		  (dflags & GPIOD_FLAGS_BIT_DIR_VAL) ? "/high" : "/low" : "");
B
Benoit Parrot 已提交
5075 5076 5077 5078 5079 5080

	return 0;
}

/**
 * gpiochip_free_hogs - Scan gpio-controller chip and release GPIO hog
5081
 * @gc:	gpio chip to act on
B
Benoit Parrot 已提交
5082
 */
5083
static void gpiochip_free_hogs(struct gpio_chip *gc)
B
Benoit Parrot 已提交
5084 5085 5086
{
	int id;

5087 5088 5089
	for (id = 0; id < gc->ngpio; id++) {
		if (test_bit(FLAG_IS_HOGGED, &gc->gpiodev->descs[id].flags))
			gpiochip_free_own_desc(&gc->gpiodev->descs[id]);
B
Benoit Parrot 已提交
5090 5091 5092
	}
}

5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110
/**
 * gpiod_get_array - obtain multiple GPIOs from a multi-index GPIO function
 * @dev:	GPIO consumer, can be NULL for system-global GPIOs
 * @con_id:	function within the GPIO consumer
 * @flags:	optional GPIO initialization flags
 *
 * This function acquires all the GPIOs defined under a given function.
 *
 * Return a struct gpio_descs containing an array of descriptors, -ENOENT if
 * no GPIO has been assigned to the requested function, or another IS_ERR()
 * code if an error occurred while trying to acquire the GPIOs.
 */
struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
						const char *con_id,
						enum gpiod_flags flags)
{
	struct gpio_desc *desc;
	struct gpio_descs *descs;
5111
	struct gpio_array *array_info = NULL;
5112
	struct gpio_chip *gc;
5113
	int count, bitmap_size;
5114 5115 5116 5117 5118

	count = gpiod_count(dev, con_id);
	if (count < 0)
		return ERR_PTR(count);

5119
	descs = kzalloc(struct_size(descs, desc, count), GFP_KERNEL);
5120 5121 5122 5123 5124 5125 5126 5127 5128
	if (!descs)
		return ERR_PTR(-ENOMEM);

	for (descs->ndescs = 0; descs->ndescs < count; ) {
		desc = gpiod_get_index(dev, con_id, descs->ndescs, flags);
		if (IS_ERR(desc)) {
			gpiod_put_array(descs);
			return ERR_CAST(desc);
		}
5129

5130
		descs->desc[descs->ndescs] = desc;
5131

5132
		gc = gpiod_to_chip(desc);
5133
		/*
5134 5135
		 * If pin hardware number of array member 0 is also 0, select
		 * its chip as a candidate for fast bitmap processing path.
5136
		 */
5137
		if (descs->ndescs == 0 && gpio_chip_hwgpio(desc) == 0) {
5138 5139
			struct gpio_descs *array;

5140 5141
			bitmap_size = BITS_TO_LONGS(gc->ngpio > count ?
						    gc->ngpio : count);
5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163

			array = kzalloc(struct_size(descs, desc, count) +
					struct_size(array_info, invert_mask,
					3 * bitmap_size), GFP_KERNEL);
			if (!array) {
				gpiod_put_array(descs);
				return ERR_PTR(-ENOMEM);
			}

			memcpy(array, descs,
			       struct_size(descs, desc, descs->ndescs + 1));
			kfree(descs);

			descs = array;
			array_info = (void *)(descs->desc + count);
			array_info->get_mask = array_info->invert_mask +
						  bitmap_size;
			array_info->set_mask = array_info->get_mask +
						  bitmap_size;

			array_info->desc = descs->desc;
			array_info->size = count;
5164
			array_info->chip = gc;
5165 5166 5167 5168 5169 5170
			bitmap_set(array_info->get_mask, descs->ndescs,
				   count - descs->ndescs);
			bitmap_set(array_info->set_mask, descs->ndescs,
				   count - descs->ndescs);
			descs->info = array_info;
		}
5171
		/* Unmark array members which don't belong to the 'fast' chip */
5172
		if (array_info && array_info->chip != gc) {
5173 5174
			__clear_bit(descs->ndescs, array_info->get_mask);
			__clear_bit(descs->ndescs, array_info->set_mask);
5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194
		}
		/*
		 * Detect array members which belong to the 'fast' chip
		 * but their pins are not in hardware order.
		 */
		else if (array_info &&
			   gpio_chip_hwgpio(desc) != descs->ndescs) {
			/*
			 * Don't use fast path if all array members processed so
			 * far belong to the same chip as this one but its pin
			 * hardware number is different from its array index.
			 */
			if (bitmap_full(array_info->get_mask, descs->ndescs)) {
				array_info = NULL;
			} else {
				__clear_bit(descs->ndescs,
					    array_info->get_mask);
				__clear_bit(descs->ndescs,
					    array_info->set_mask);
			}
5195 5196
		} else if (array_info) {
			/* Exclude open drain or open source from fast output */
5197 5198
			if (gpiochip_line_is_open_drain(gc, descs->ndescs) ||
			    gpiochip_line_is_open_source(gc, descs->ndescs))
5199 5200 5201 5202 5203 5204 5205 5206
				__clear_bit(descs->ndescs,
					    array_info->set_mask);
			/* Identify 'fast' pins which require invertion */
			if (gpiod_is_active_low(desc))
				__set_bit(descs->ndescs,
					  array_info->invert_mask);
		}

5207 5208
		descs->ndescs++;
	}
5209 5210 5211 5212 5213 5214
	if (array_info)
		dev_dbg(dev,
			"GPIO array info: chip=%s, size=%d, get_mask=%lx, set_mask=%lx, invert_mask=%lx\n",
			array_info->chip->label, array_info->size,
			*array_info->get_mask, *array_info->set_mask,
			*array_info->invert_mask);
5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235
	return descs;
}
EXPORT_SYMBOL_GPL(gpiod_get_array);

/**
 * gpiod_get_array_optional - obtain multiple GPIOs from a multi-index GPIO
 *                            function
 * @dev:	GPIO consumer, can be NULL for system-global GPIOs
 * @con_id:	function within the GPIO consumer
 * @flags:	optional GPIO initialization flags
 *
 * This is equivalent to gpiod_get_array(), except that when no GPIO was
 * assigned to the requested function it will return NULL.
 */
struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
							const char *con_id,
							enum gpiod_flags flags)
{
	struct gpio_descs *descs;

	descs = gpiod_get_array(dev, con_id, flags);
5236
	if (PTR_ERR(descs) == -ENOENT)
5237 5238 5239 5240 5241 5242
		return NULL;

	return descs;
}
EXPORT_SYMBOL_GPL(gpiod_get_array_optional);

5243 5244 5245 5246 5247 5248 5249 5250
/**
 * gpiod_put - dispose of a GPIO descriptor
 * @desc:	GPIO descriptor to dispose of
 *
 * No descriptor can be used after gpiod_put() has been called on it.
 */
void gpiod_put(struct gpio_desc *desc)
{
5251 5252
	if (desc)
		gpiod_free(desc);
5253
}
5254
EXPORT_SYMBOL_GPL(gpiod_put);
5255

5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270
/**
 * gpiod_put_array - dispose of multiple GPIO descriptors
 * @descs:	struct gpio_descs containing an array of descriptors
 */
void gpiod_put_array(struct gpio_descs *descs)
{
	unsigned int i;

	for (i = 0; i < descs->ndescs; i++)
		gpiod_put(descs->desc[i]);

	kfree(descs);
}
EXPORT_SYMBOL_GPL(gpiod_put_array);

5271 5272 5273 5274 5275
static int __init gpiolib_dev_init(void)
{
	int ret;

	/* Register GPIO sysfs bus */
5276
	ret = bus_register(&gpio_bus_type);
5277 5278 5279 5280 5281
	if (ret < 0) {
		pr_err("gpiolib: could not register GPIO bus type\n");
		return ret;
	}

5282
	ret = alloc_chrdev_region(&gpio_devt, 0, GPIO_DEV_MAX, GPIOCHIP_NAME);
5283 5284 5285
	if (ret < 0) {
		pr_err("gpiolib: failed to allocate char dev region\n");
		bus_unregister(&gpio_bus_type);
5286
		return ret;
5287
	}
5288 5289 5290 5291 5292 5293 5294

	gpiolib_initialized = true;
	gpiochip_setup_devs();

	if (IS_ENABLED(CONFIG_OF_DYNAMIC))
		WARN_ON(of_reconfig_notifier_register(&gpio_of_notifier));

5295 5296 5297 5298
	return ret;
}
core_initcall(gpiolib_dev_init);

5299 5300
#ifdef CONFIG_DEBUG_FS

5301
static void gpiolib_dbg_show(struct seq_file *s, struct gpio_device *gdev)
5302 5303
{
	unsigned		i;
5304
	struct gpio_chip	*gc = gdev->chip;
5305 5306
	unsigned		gpio = gdev->base;
	struct gpio_desc	*gdesc = &gdev->descs[0];
5307 5308 5309
	bool			is_out;
	bool			is_irq;
	bool			active_low;
5310

5311
	for (i = 0; i < gdev->ngpio; i++, gpio++, gdesc++) {
5312 5313 5314 5315 5316
		if (!test_bit(FLAG_REQUESTED, &gdesc->flags)) {
			if (gdesc->name) {
				seq_printf(s, " gpio-%-3d (%-20.20s)\n",
					   gpio, gdesc->name);
			}
5317
			continue;
5318
		}
5319

5320
		gpiod_get_direction(gdesc);
5321
		is_out = test_bit(FLAG_IS_OUT, &gdesc->flags);
5322
		is_irq = test_bit(FLAG_USED_AS_IRQ, &gdesc->flags);
5323 5324
		active_low = test_bit(FLAG_ACTIVE_LOW, &gdesc->flags);
		seq_printf(s, " gpio-%-3d (%-20.20s|%-20.20s) %s %s %s%s",
5325
			gpio, gdesc->name ? gdesc->name : "", gdesc->label,
5326
			is_out ? "out" : "in ",
5327
			gc->get ? (gc->get(gc, i) ? "hi" : "lo") : "?  ",
5328 5329
			is_irq ? "IRQ " : "",
			active_low ? "ACTIVE LOW" : "");
5330 5331 5332 5333
		seq_printf(s, "\n");
	}
}

5334
static void *gpiolib_seq_start(struct seq_file *s, loff_t *pos)
5335
{
5336
	unsigned long flags;
5337
	struct gpio_device *gdev = NULL;
5338
	loff_t index = *pos;
5339

5340
	s->private = "";
5341

5342
	spin_lock_irqsave(&gpio_lock, flags);
5343
	list_for_each_entry(gdev, &gpio_devices, list)
5344 5345
		if (index-- == 0) {
			spin_unlock_irqrestore(&gpio_lock, flags);
5346
			return gdev;
5347
		}
5348
	spin_unlock_irqrestore(&gpio_lock, flags);
5349

5350
	return NULL;
5351 5352 5353 5354
}

static void *gpiolib_seq_next(struct seq_file *s, void *v, loff_t *pos)
{
5355
	unsigned long flags;
5356
	struct gpio_device *gdev = v;
5357 5358
	void *ret = NULL;

5359
	spin_lock_irqsave(&gpio_lock, flags);
5360
	if (list_is_last(&gdev->list, &gpio_devices))
5361 5362
		ret = NULL;
	else
5363
		ret = list_entry(gdev->list.next, struct gpio_device, list);
5364
	spin_unlock_irqrestore(&gpio_lock, flags);
5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377

	s->private = "\n";
	++*pos;

	return ret;
}

static void gpiolib_seq_stop(struct seq_file *s, void *v)
{
}

static int gpiolib_seq_show(struct seq_file *s, void *v)
{
5378
	struct gpio_device *gdev = v;
5379
	struct gpio_chip *gc = gdev->chip;
5380 5381
	struct device *parent;

5382
	if (!gc) {
5383 5384 5385 5386
		seq_printf(s, "%s%s: (dangling chip)", (char *)s->private,
			   dev_name(&gdev->dev));
		return 0;
	}
5387

5388 5389
	seq_printf(s, "%s%s: GPIOs %d-%d", (char *)s->private,
		   dev_name(&gdev->dev),
5390
		   gdev->base, gdev->base + gdev->ngpio - 1);
5391
	parent = gc->parent;
5392 5393 5394 5395
	if (parent)
		seq_printf(s, ", parent: %s/%s",
			   parent->bus ? parent->bus->name : "no-bus",
			   dev_name(parent));
5396 5397 5398
	if (gc->label)
		seq_printf(s, ", %s", gc->label);
	if (gc->can_sleep)
5399 5400 5401
		seq_printf(s, ", can sleep");
	seq_printf(s, ":\n");

5402 5403
	if (gc->dbg_show)
		gc->dbg_show(s, gc);
5404
	else
5405
		gpiolib_dbg_show(s, gdev);
5406

5407 5408 5409
	return 0;
}

5410 5411 5412 5413 5414 5415 5416
static const struct seq_operations gpiolib_seq_ops = {
	.start = gpiolib_seq_start,
	.next = gpiolib_seq_next,
	.stop = gpiolib_seq_stop,
	.show = gpiolib_seq_show,
};

5417 5418
static int gpiolib_open(struct inode *inode, struct file *file)
{
5419
	return seq_open(file, &gpiolib_seq_ops);
5420 5421
}

5422
static const struct file_operations gpiolib_operations = {
5423
	.owner		= THIS_MODULE,
5424 5425 5426
	.open		= gpiolib_open,
	.read		= seq_read,
	.llseek		= seq_lseek,
5427
	.release	= seq_release,
5428 5429 5430 5431 5432
};

static int __init gpiolib_debugfs_init(void)
{
	/* /sys/kernel/debug/gpio */
5433 5434
	debugfs_create_file("gpio", S_IFREG | S_IRUGO, NULL, NULL,
			    &gpiolib_operations);
5435 5436 5437 5438 5439
	return 0;
}
subsys_initcall(gpiolib_debugfs_init);

#endif	/* DEBUG_FS */