xref: /openbmc/linux/drivers/gpio/gpiolib-cdev.c (revision 29c37341)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include <linux/anon_inodes.h>
4 #include <linux/bitmap.h>
5 #include <linux/cdev.h>
6 #include <linux/compat.h>
7 #include <linux/device.h>
8 #include <linux/err.h>
9 #include <linux/file.h>
10 #include <linux/gpio.h>
11 #include <linux/gpio/driver.h>
12 #include <linux/interrupt.h>
13 #include <linux/irqreturn.h>
14 #include <linux/kernel.h>
15 #include <linux/kfifo.h>
16 #include <linux/module.h>
17 #include <linux/pinctrl/consumer.h>
18 #include <linux/poll.h>
19 #include <linux/spinlock.h>
20 #include <linux/timekeeping.h>
21 #include <linux/uaccess.h>
22 #include <uapi/linux/gpio.h>
23 
24 #include "gpiolib.h"
25 #include "gpiolib-cdev.h"
26 
27 /* Character device interface to GPIO.
28  *
29  * The GPIO character device, /dev/gpiochipN, provides userspace an
30  * interface to gpiolib GPIOs via ioctl()s.
31  */
32 
33 /*
34  * GPIO line handle management
35  */
36 
37 /**
38  * struct linehandle_state - contains the state of a userspace handle
39  * @gdev: the GPIO device the handle pertains to
40  * @label: consumer label used to tag descriptors
41  * @descs: the GPIO descriptors held by this handle
42  * @num_descs: the number of descriptors held in the descs array
43  */
44 struct linehandle_state {
45 	struct gpio_device *gdev;
46 	const char *label;
47 	struct gpio_desc *descs[GPIOHANDLES_MAX];
48 	u32 num_descs;
49 };
50 
51 #define GPIOHANDLE_REQUEST_VALID_FLAGS \
52 	(GPIOHANDLE_REQUEST_INPUT | \
53 	GPIOHANDLE_REQUEST_OUTPUT | \
54 	GPIOHANDLE_REQUEST_ACTIVE_LOW | \
55 	GPIOHANDLE_REQUEST_BIAS_PULL_UP | \
56 	GPIOHANDLE_REQUEST_BIAS_PULL_DOWN | \
57 	GPIOHANDLE_REQUEST_BIAS_DISABLE | \
58 	GPIOHANDLE_REQUEST_OPEN_DRAIN | \
59 	GPIOHANDLE_REQUEST_OPEN_SOURCE)
60 
61 static int linehandle_validate_flags(u32 flags)
62 {
63 	/* Return an error if an unknown flag is set */
64 	if (flags & ~GPIOHANDLE_REQUEST_VALID_FLAGS)
65 		return -EINVAL;
66 
67 	/*
68 	 * Do not allow both INPUT & OUTPUT flags to be set as they are
69 	 * contradictory.
70 	 */
71 	if ((flags & GPIOHANDLE_REQUEST_INPUT) &&
72 	    (flags & GPIOHANDLE_REQUEST_OUTPUT))
73 		return -EINVAL;
74 
75 	/*
76 	 * Do not allow OPEN_SOURCE & OPEN_DRAIN flags in a single request. If
77 	 * the hardware actually supports enabling both at the same time the
78 	 * electrical result would be disastrous.
79 	 */
80 	if ((flags & GPIOHANDLE_REQUEST_OPEN_DRAIN) &&
81 	    (flags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
82 		return -EINVAL;
83 
84 	/* OPEN_DRAIN and OPEN_SOURCE flags only make sense for output mode. */
85 	if (!(flags & GPIOHANDLE_REQUEST_OUTPUT) &&
86 	    ((flags & GPIOHANDLE_REQUEST_OPEN_DRAIN) ||
87 	     (flags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
88 		return -EINVAL;
89 
90 	/* Bias flags only allowed for input or output mode. */
91 	if (!((flags & GPIOHANDLE_REQUEST_INPUT) ||
92 	      (flags & GPIOHANDLE_REQUEST_OUTPUT)) &&
93 	    ((flags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
94 	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
95 	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
96 		return -EINVAL;
97 
98 	/* Only one bias flag can be set. */
99 	if (((flags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
100 	     (flags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
101 		       GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
102 	    ((flags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
103 	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
104 		return -EINVAL;
105 
106 	return 0;
107 }
108 
109 static void linehandle_flags_to_desc_flags(u32 lflags, unsigned long *flagsp)
110 {
111 	assign_bit(FLAG_ACTIVE_LOW, flagsp,
112 		   lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW);
113 	assign_bit(FLAG_OPEN_DRAIN, flagsp,
114 		   lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN);
115 	assign_bit(FLAG_OPEN_SOURCE, flagsp,
116 		   lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE);
117 	assign_bit(FLAG_PULL_UP, flagsp,
118 		   lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP);
119 	assign_bit(FLAG_PULL_DOWN, flagsp,
120 		   lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN);
121 	assign_bit(FLAG_BIAS_DISABLE, flagsp,
122 		   lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE);
123 }
124 
125 static long linehandle_set_config(struct linehandle_state *lh,
126 				  void __user *ip)
127 {
128 	struct gpiohandle_config gcnf;
129 	struct gpio_desc *desc;
130 	int i, ret;
131 	u32 lflags;
132 
133 	if (copy_from_user(&gcnf, ip, sizeof(gcnf)))
134 		return -EFAULT;
135 
136 	lflags = gcnf.flags;
137 	ret = linehandle_validate_flags(lflags);
138 	if (ret)
139 		return ret;
140 
141 	for (i = 0; i < lh->num_descs; i++) {
142 		desc = lh->descs[i];
143 		linehandle_flags_to_desc_flags(gcnf.flags, &desc->flags);
144 
145 		/*
146 		 * Lines have to be requested explicitly for input
147 		 * or output, else the line will be treated "as is".
148 		 */
149 		if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {
150 			int val = !!gcnf.default_values[i];
151 
152 			ret = gpiod_direction_output(desc, val);
153 			if (ret)
154 				return ret;
155 		} else if (lflags & GPIOHANDLE_REQUEST_INPUT) {
156 			ret = gpiod_direction_input(desc);
157 			if (ret)
158 				return ret;
159 		}
160 
161 		blocking_notifier_call_chain(&desc->gdev->notifier,
162 					     GPIOLINE_CHANGED_CONFIG, desc);
163 	}
164 	return 0;
165 }
166 
167 static long linehandle_ioctl(struct file *file, unsigned int cmd,
168 			     unsigned long arg)
169 {
170 	struct linehandle_state *lh = file->private_data;
171 	void __user *ip = (void __user *)arg;
172 	struct gpiohandle_data ghd;
173 	DECLARE_BITMAP(vals, GPIOHANDLES_MAX);
174 	int i;
175 
176 	if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) {
177 		/* NOTE: It's ok to read values of output lines. */
178 		int ret = gpiod_get_array_value_complex(false,
179 							true,
180 							lh->num_descs,
181 							lh->descs,
182 							NULL,
183 							vals);
184 		if (ret)
185 			return ret;
186 
187 		memset(&ghd, 0, sizeof(ghd));
188 		for (i = 0; i < lh->num_descs; i++)
189 			ghd.values[i] = test_bit(i, vals);
190 
191 		if (copy_to_user(ip, &ghd, sizeof(ghd)))
192 			return -EFAULT;
193 
194 		return 0;
195 	} else if (cmd == GPIOHANDLE_SET_LINE_VALUES_IOCTL) {
196 		/*
197 		 * All line descriptors were created at once with the same
198 		 * flags so just check if the first one is really output.
199 		 */
200 		if (!test_bit(FLAG_IS_OUT, &lh->descs[0]->flags))
201 			return -EPERM;
202 
203 		if (copy_from_user(&ghd, ip, sizeof(ghd)))
204 			return -EFAULT;
205 
206 		/* Clamp all values to [0,1] */
207 		for (i = 0; i < lh->num_descs; i++)
208 			__assign_bit(i, vals, ghd.values[i]);
209 
210 		/* Reuse the array setting function */
211 		return gpiod_set_array_value_complex(false,
212 						     true,
213 						     lh->num_descs,
214 						     lh->descs,
215 						     NULL,
216 						     vals);
217 	} else if (cmd == GPIOHANDLE_SET_CONFIG_IOCTL) {
218 		return linehandle_set_config(lh, ip);
219 	}
220 	return -EINVAL;
221 }
222 
223 #ifdef CONFIG_COMPAT
224 static long linehandle_ioctl_compat(struct file *file, unsigned int cmd,
225 				    unsigned long arg)
226 {
227 	return linehandle_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
228 }
229 #endif
230 
231 static void linehandle_free(struct linehandle_state *lh)
232 {
233 	int i;
234 
235 	for (i = 0; i < lh->num_descs; i++)
236 		if (lh->descs[i])
237 			gpiod_free(lh->descs[i]);
238 	kfree(lh->label);
239 	put_device(&lh->gdev->dev);
240 	kfree(lh);
241 }
242 
243 static int linehandle_release(struct inode *inode, struct file *file)
244 {
245 	linehandle_free(file->private_data);
246 	return 0;
247 }
248 
249 static const struct file_operations linehandle_fileops = {
250 	.release = linehandle_release,
251 	.owner = THIS_MODULE,
252 	.llseek = noop_llseek,
253 	.unlocked_ioctl = linehandle_ioctl,
254 #ifdef CONFIG_COMPAT
255 	.compat_ioctl = linehandle_ioctl_compat,
256 #endif
257 };
258 
259 static int linehandle_create(struct gpio_device *gdev, void __user *ip)
260 {
261 	struct gpiohandle_request handlereq;
262 	struct linehandle_state *lh;
263 	struct file *file;
264 	int fd, i, ret;
265 	u32 lflags;
266 
267 	if (copy_from_user(&handlereq, ip, sizeof(handlereq)))
268 		return -EFAULT;
269 	if ((handlereq.lines == 0) || (handlereq.lines > GPIOHANDLES_MAX))
270 		return -EINVAL;
271 
272 	lflags = handlereq.flags;
273 
274 	ret = linehandle_validate_flags(lflags);
275 	if (ret)
276 		return ret;
277 
278 	lh = kzalloc(sizeof(*lh), GFP_KERNEL);
279 	if (!lh)
280 		return -ENOMEM;
281 	lh->gdev = gdev;
282 	get_device(&gdev->dev);
283 
284 	/* Make sure this is terminated */
285 	handlereq.consumer_label[sizeof(handlereq.consumer_label)-1] = '\0';
286 	if (strlen(handlereq.consumer_label)) {
287 		lh->label = kstrdup(handlereq.consumer_label,
288 				    GFP_KERNEL);
289 		if (!lh->label) {
290 			ret = -ENOMEM;
291 			goto out_free_lh;
292 		}
293 	}
294 
295 	lh->num_descs = handlereq.lines;
296 
297 	/* Request each GPIO */
298 	for (i = 0; i < handlereq.lines; i++) {
299 		u32 offset = handlereq.lineoffsets[i];
300 		struct gpio_desc *desc = gpiochip_get_desc(gdev->chip, offset);
301 
302 		if (IS_ERR(desc)) {
303 			ret = PTR_ERR(desc);
304 			goto out_free_lh;
305 		}
306 
307 		ret = gpiod_request(desc, lh->label);
308 		if (ret)
309 			goto out_free_lh;
310 		lh->descs[i] = desc;
311 		linehandle_flags_to_desc_flags(handlereq.flags, &desc->flags);
312 
313 		ret = gpiod_set_transitory(desc, false);
314 		if (ret < 0)
315 			goto out_free_lh;
316 
317 		/*
318 		 * Lines have to be requested explicitly for input
319 		 * or output, else the line will be treated "as is".
320 		 */
321 		if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {
322 			int val = !!handlereq.default_values[i];
323 
324 			ret = gpiod_direction_output(desc, val);
325 			if (ret)
326 				goto out_free_lh;
327 		} else if (lflags & GPIOHANDLE_REQUEST_INPUT) {
328 			ret = gpiod_direction_input(desc);
329 			if (ret)
330 				goto out_free_lh;
331 		}
332 
333 		blocking_notifier_call_chain(&desc->gdev->notifier,
334 					     GPIOLINE_CHANGED_REQUESTED, desc);
335 
336 		dev_dbg(&gdev->dev, "registered chardev handle for line %d\n",
337 			offset);
338 	}
339 
340 	fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC);
341 	if (fd < 0) {
342 		ret = fd;
343 		goto out_free_lh;
344 	}
345 
346 	file = anon_inode_getfile("gpio-linehandle",
347 				  &linehandle_fileops,
348 				  lh,
349 				  O_RDONLY | O_CLOEXEC);
350 	if (IS_ERR(file)) {
351 		ret = PTR_ERR(file);
352 		goto out_put_unused_fd;
353 	}
354 
355 	handlereq.fd = fd;
356 	if (copy_to_user(ip, &handlereq, sizeof(handlereq))) {
357 		/*
358 		 * fput() will trigger the release() callback, so do not go onto
359 		 * the regular error cleanup path here.
360 		 */
361 		fput(file);
362 		put_unused_fd(fd);
363 		return -EFAULT;
364 	}
365 
366 	fd_install(fd, file);
367 
368 	dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n",
369 		lh->num_descs);
370 
371 	return 0;
372 
373 out_put_unused_fd:
374 	put_unused_fd(fd);
375 out_free_lh:
376 	linehandle_free(lh);
377 	return ret;
378 }
379 
380 /*
381  * GPIO line event management
382  */
383 
384 /**
385  * struct lineevent_state - contains the state of a userspace event
386  * @gdev: the GPIO device the event pertains to
387  * @label: consumer label used to tag descriptors
388  * @desc: the GPIO descriptor held by this event
389  * @eflags: the event flags this line was requested with
390  * @irq: the interrupt that trigger in response to events on this GPIO
391  * @wait: wait queue that handles blocking reads of events
392  * @events: KFIFO for the GPIO events
393  * @timestamp: cache for the timestamp storing it between hardirq
394  * and IRQ thread, used to bring the timestamp close to the actual
395  * event
396  */
397 struct lineevent_state {
398 	struct gpio_device *gdev;
399 	const char *label;
400 	struct gpio_desc *desc;
401 	u32 eflags;
402 	int irq;
403 	wait_queue_head_t wait;
404 	DECLARE_KFIFO(events, struct gpioevent_data, 16);
405 	u64 timestamp;
406 };
407 
408 #define GPIOEVENT_REQUEST_VALID_FLAGS \
409 	(GPIOEVENT_REQUEST_RISING_EDGE | \
410 	GPIOEVENT_REQUEST_FALLING_EDGE)
411 
412 static __poll_t lineevent_poll(struct file *file,
413 			       struct poll_table_struct *wait)
414 {
415 	struct lineevent_state *le = file->private_data;
416 	__poll_t events = 0;
417 
418 	poll_wait(file, &le->wait, wait);
419 
420 	if (!kfifo_is_empty_spinlocked_noirqsave(&le->events, &le->wait.lock))
421 		events = EPOLLIN | EPOLLRDNORM;
422 
423 	return events;
424 }
425 
426 
427 static ssize_t lineevent_read(struct file *file,
428 			      char __user *buf,
429 			      size_t count,
430 			      loff_t *f_ps)
431 {
432 	struct lineevent_state *le = file->private_data;
433 	struct gpioevent_data ge;
434 	ssize_t bytes_read = 0;
435 	int ret;
436 
437 	if (count < sizeof(ge))
438 		return -EINVAL;
439 
440 	do {
441 		spin_lock(&le->wait.lock);
442 		if (kfifo_is_empty(&le->events)) {
443 			if (bytes_read) {
444 				spin_unlock(&le->wait.lock);
445 				return bytes_read;
446 			}
447 
448 			if (file->f_flags & O_NONBLOCK) {
449 				spin_unlock(&le->wait.lock);
450 				return -EAGAIN;
451 			}
452 
453 			ret = wait_event_interruptible_locked(le->wait,
454 					!kfifo_is_empty(&le->events));
455 			if (ret) {
456 				spin_unlock(&le->wait.lock);
457 				return ret;
458 			}
459 		}
460 
461 		ret = kfifo_out(&le->events, &ge, 1);
462 		spin_unlock(&le->wait.lock);
463 		if (ret != 1) {
464 			/*
465 			 * This should never happen - we were holding the lock
466 			 * from the moment we learned the fifo is no longer
467 			 * empty until now.
468 			 */
469 			ret = -EIO;
470 			break;
471 		}
472 
473 		if (copy_to_user(buf + bytes_read, &ge, sizeof(ge)))
474 			return -EFAULT;
475 		bytes_read += sizeof(ge);
476 	} while (count >= bytes_read + sizeof(ge));
477 
478 	return bytes_read;
479 }
480 
481 static void lineevent_free(struct lineevent_state *le)
482 {
483 	if (le->irq)
484 		free_irq(le->irq, le);
485 	if (le->desc)
486 		gpiod_free(le->desc);
487 	kfree(le->label);
488 	put_device(&le->gdev->dev);
489 	kfree(le);
490 }
491 
492 static int lineevent_release(struct inode *inode, struct file *file)
493 {
494 	lineevent_free(file->private_data);
495 	return 0;
496 }
497 
498 static long lineevent_ioctl(struct file *file, unsigned int cmd,
499 			    unsigned long arg)
500 {
501 	struct lineevent_state *le = file->private_data;
502 	void __user *ip = (void __user *)arg;
503 	struct gpiohandle_data ghd;
504 
505 	/*
506 	 * We can get the value for an event line but not set it,
507 	 * because it is input by definition.
508 	 */
509 	if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) {
510 		int val;
511 
512 		memset(&ghd, 0, sizeof(ghd));
513 
514 		val = gpiod_get_value_cansleep(le->desc);
515 		if (val < 0)
516 			return val;
517 		ghd.values[0] = val;
518 
519 		if (copy_to_user(ip, &ghd, sizeof(ghd)))
520 			return -EFAULT;
521 
522 		return 0;
523 	}
524 	return -EINVAL;
525 }
526 
527 #ifdef CONFIG_COMPAT
528 static long lineevent_ioctl_compat(struct file *file, unsigned int cmd,
529 				   unsigned long arg)
530 {
531 	return lineevent_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
532 }
533 #endif
534 
535 static const struct file_operations lineevent_fileops = {
536 	.release = lineevent_release,
537 	.read = lineevent_read,
538 	.poll = lineevent_poll,
539 	.owner = THIS_MODULE,
540 	.llseek = noop_llseek,
541 	.unlocked_ioctl = lineevent_ioctl,
542 #ifdef CONFIG_COMPAT
543 	.compat_ioctl = lineevent_ioctl_compat,
544 #endif
545 };
546 
547 static irqreturn_t lineevent_irq_thread(int irq, void *p)
548 {
549 	struct lineevent_state *le = p;
550 	struct gpioevent_data ge;
551 	int ret;
552 
553 	/* Do not leak kernel stack to userspace */
554 	memset(&ge, 0, sizeof(ge));
555 
556 	/*
557 	 * We may be running from a nested threaded interrupt in which case
558 	 * we didn't get the timestamp from lineevent_irq_handler().
559 	 */
560 	if (!le->timestamp)
561 		ge.timestamp = ktime_get_ns();
562 	else
563 		ge.timestamp = le->timestamp;
564 
565 	if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE
566 	    && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
567 		int level = gpiod_get_value_cansleep(le->desc);
568 
569 		if (level)
570 			/* Emit low-to-high event */
571 			ge.id = GPIOEVENT_EVENT_RISING_EDGE;
572 		else
573 			/* Emit high-to-low event */
574 			ge.id = GPIOEVENT_EVENT_FALLING_EDGE;
575 	} else if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE) {
576 		/* Emit low-to-high event */
577 		ge.id = GPIOEVENT_EVENT_RISING_EDGE;
578 	} else if (le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
579 		/* Emit high-to-low event */
580 		ge.id = GPIOEVENT_EVENT_FALLING_EDGE;
581 	} else {
582 		return IRQ_NONE;
583 	}
584 
585 	ret = kfifo_in_spinlocked_noirqsave(&le->events, &ge,
586 					    1, &le->wait.lock);
587 	if (ret)
588 		wake_up_poll(&le->wait, EPOLLIN);
589 	else
590 		pr_debug_ratelimited("event FIFO is full - event dropped\n");
591 
592 	return IRQ_HANDLED;
593 }
594 
595 static irqreturn_t lineevent_irq_handler(int irq, void *p)
596 {
597 	struct lineevent_state *le = p;
598 
599 	/*
600 	 * Just store the timestamp in hardirq context so we get it as
601 	 * close in time as possible to the actual event.
602 	 */
603 	le->timestamp = ktime_get_ns();
604 
605 	return IRQ_WAKE_THREAD;
606 }
607 
608 static int lineevent_create(struct gpio_device *gdev, void __user *ip)
609 {
610 	struct gpioevent_request eventreq;
611 	struct lineevent_state *le;
612 	struct gpio_desc *desc;
613 	struct file *file;
614 	u32 offset;
615 	u32 lflags;
616 	u32 eflags;
617 	int fd;
618 	int ret;
619 	int irq, irqflags = 0;
620 
621 	if (copy_from_user(&eventreq, ip, sizeof(eventreq)))
622 		return -EFAULT;
623 
624 	offset = eventreq.lineoffset;
625 	lflags = eventreq.handleflags;
626 	eflags = eventreq.eventflags;
627 
628 	desc = gpiochip_get_desc(gdev->chip, offset);
629 	if (IS_ERR(desc))
630 		return PTR_ERR(desc);
631 
632 	/* Return an error if a unknown flag is set */
633 	if ((lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) ||
634 	    (eflags & ~GPIOEVENT_REQUEST_VALID_FLAGS))
635 		return -EINVAL;
636 
637 	/* This is just wrong: we don't look for events on output lines */
638 	if ((lflags & GPIOHANDLE_REQUEST_OUTPUT) ||
639 	    (lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN) ||
640 	    (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
641 		return -EINVAL;
642 
643 	/* Only one bias flag can be set. */
644 	if (((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
645 	     (lflags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
646 			GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
647 	    ((lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
648 	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
649 		return -EINVAL;
650 
651 	le = kzalloc(sizeof(*le), GFP_KERNEL);
652 	if (!le)
653 		return -ENOMEM;
654 	le->gdev = gdev;
655 	get_device(&gdev->dev);
656 
657 	/* Make sure this is terminated */
658 	eventreq.consumer_label[sizeof(eventreq.consumer_label)-1] = '\0';
659 	if (strlen(eventreq.consumer_label)) {
660 		le->label = kstrdup(eventreq.consumer_label,
661 				    GFP_KERNEL);
662 		if (!le->label) {
663 			ret = -ENOMEM;
664 			goto out_free_le;
665 		}
666 	}
667 
668 	ret = gpiod_request(desc, le->label);
669 	if (ret)
670 		goto out_free_le;
671 	le->desc = desc;
672 	le->eflags = eflags;
673 
674 	linehandle_flags_to_desc_flags(lflags, &desc->flags);
675 
676 	ret = gpiod_direction_input(desc);
677 	if (ret)
678 		goto out_free_le;
679 
680 	blocking_notifier_call_chain(&desc->gdev->notifier,
681 				     GPIOLINE_CHANGED_REQUESTED, desc);
682 
683 	irq = gpiod_to_irq(desc);
684 	if (irq <= 0) {
685 		ret = -ENODEV;
686 		goto out_free_le;
687 	}
688 	le->irq = irq;
689 
690 	if (eflags & GPIOEVENT_REQUEST_RISING_EDGE)
691 		irqflags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
692 			IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING;
693 	if (eflags & GPIOEVENT_REQUEST_FALLING_EDGE)
694 		irqflags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
695 			IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING;
696 	irqflags |= IRQF_ONESHOT;
697 
698 	INIT_KFIFO(le->events);
699 	init_waitqueue_head(&le->wait);
700 
701 	/* Request a thread to read the events */
702 	ret = request_threaded_irq(le->irq,
703 				   lineevent_irq_handler,
704 				   lineevent_irq_thread,
705 				   irqflags,
706 				   le->label,
707 				   le);
708 	if (ret)
709 		goto out_free_le;
710 
711 	fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC);
712 	if (fd < 0) {
713 		ret = fd;
714 		goto out_free_le;
715 	}
716 
717 	file = anon_inode_getfile("gpio-event",
718 				  &lineevent_fileops,
719 				  le,
720 				  O_RDONLY | O_CLOEXEC);
721 	if (IS_ERR(file)) {
722 		ret = PTR_ERR(file);
723 		goto out_put_unused_fd;
724 	}
725 
726 	eventreq.fd = fd;
727 	if (copy_to_user(ip, &eventreq, sizeof(eventreq))) {
728 		/*
729 		 * fput() will trigger the release() callback, so do not go onto
730 		 * the regular error cleanup path here.
731 		 */
732 		fput(file);
733 		put_unused_fd(fd);
734 		return -EFAULT;
735 	}
736 
737 	fd_install(fd, file);
738 
739 	return 0;
740 
741 out_put_unused_fd:
742 	put_unused_fd(fd);
743 out_free_le:
744 	lineevent_free(le);
745 	return ret;
746 }
747 
748 static void gpio_desc_to_lineinfo(struct gpio_desc *desc,
749 				  struct gpioline_info *info)
750 {
751 	struct gpio_chip *gc = desc->gdev->chip;
752 	bool ok_for_pinctrl;
753 	unsigned long flags;
754 
755 	/*
756 	 * This function takes a mutex so we must check this before taking
757 	 * the spinlock.
758 	 *
759 	 * FIXME: find a non-racy way to retrieve this information. Maybe a
760 	 * lock common to both frameworks?
761 	 */
762 	ok_for_pinctrl =
763 		pinctrl_gpio_can_use_line(gc->base + info->line_offset);
764 
765 	spin_lock_irqsave(&gpio_lock, flags);
766 
767 	if (desc->name) {
768 		strncpy(info->name, desc->name, sizeof(info->name));
769 		info->name[sizeof(info->name) - 1] = '\0';
770 	} else {
771 		info->name[0] = '\0';
772 	}
773 
774 	if (desc->label) {
775 		strncpy(info->consumer, desc->label, sizeof(info->consumer));
776 		info->consumer[sizeof(info->consumer) - 1] = '\0';
777 	} else {
778 		info->consumer[0] = '\0';
779 	}
780 
781 	/*
782 	 * Userspace only need to know that the kernel is using this GPIO so
783 	 * it can't use it.
784 	 */
785 	info->flags = 0;
786 	if (test_bit(FLAG_REQUESTED, &desc->flags) ||
787 	    test_bit(FLAG_IS_HOGGED, &desc->flags) ||
788 	    test_bit(FLAG_USED_AS_IRQ, &desc->flags) ||
789 	    test_bit(FLAG_EXPORT, &desc->flags) ||
790 	    test_bit(FLAG_SYSFS, &desc->flags) ||
791 	    !ok_for_pinctrl)
792 		info->flags |= GPIOLINE_FLAG_KERNEL;
793 	if (test_bit(FLAG_IS_OUT, &desc->flags))
794 		info->flags |= GPIOLINE_FLAG_IS_OUT;
795 	if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
796 		info->flags |= GPIOLINE_FLAG_ACTIVE_LOW;
797 	if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
798 		info->flags |= (GPIOLINE_FLAG_OPEN_DRAIN |
799 				GPIOLINE_FLAG_IS_OUT);
800 	if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
801 		info->flags |= (GPIOLINE_FLAG_OPEN_SOURCE |
802 				GPIOLINE_FLAG_IS_OUT);
803 	if (test_bit(FLAG_BIAS_DISABLE, &desc->flags))
804 		info->flags |= GPIOLINE_FLAG_BIAS_DISABLE;
805 	if (test_bit(FLAG_PULL_DOWN, &desc->flags))
806 		info->flags |= GPIOLINE_FLAG_BIAS_PULL_DOWN;
807 	if (test_bit(FLAG_PULL_UP, &desc->flags))
808 		info->flags |= GPIOLINE_FLAG_BIAS_PULL_UP;
809 
810 	spin_unlock_irqrestore(&gpio_lock, flags);
811 }
812 
813 struct gpio_chardev_data {
814 	struct gpio_device *gdev;
815 	wait_queue_head_t wait;
816 	DECLARE_KFIFO(events, struct gpioline_info_changed, 32);
817 	struct notifier_block lineinfo_changed_nb;
818 	unsigned long *watched_lines;
819 };
820 
821 /*
822  * gpio_ioctl() - ioctl handler for the GPIO chardev
823  */
824 static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
825 {
826 	struct gpio_chardev_data *cdev = file->private_data;
827 	struct gpio_device *gdev = cdev->gdev;
828 	struct gpio_chip *gc = gdev->chip;
829 	void __user *ip = (void __user *)arg;
830 	struct gpio_desc *desc;
831 	__u32 offset;
832 
833 	/* We fail any subsequent ioctl():s when the chip is gone */
834 	if (!gc)
835 		return -ENODEV;
836 
837 	/* Fill in the struct and pass to userspace */
838 	if (cmd == GPIO_GET_CHIPINFO_IOCTL) {
839 		struct gpiochip_info chipinfo;
840 
841 		memset(&chipinfo, 0, sizeof(chipinfo));
842 
843 		strncpy(chipinfo.name, dev_name(&gdev->dev),
844 			sizeof(chipinfo.name));
845 		chipinfo.name[sizeof(chipinfo.name)-1] = '\0';
846 		strncpy(chipinfo.label, gdev->label,
847 			sizeof(chipinfo.label));
848 		chipinfo.label[sizeof(chipinfo.label)-1] = '\0';
849 		chipinfo.lines = gdev->ngpio;
850 		if (copy_to_user(ip, &chipinfo, sizeof(chipinfo)))
851 			return -EFAULT;
852 		return 0;
853 	} else if (cmd == GPIO_GET_LINEINFO_IOCTL) {
854 		struct gpioline_info lineinfo;
855 
856 		if (copy_from_user(&lineinfo, ip, sizeof(lineinfo)))
857 			return -EFAULT;
858 
859 		/* this doubles as a range check on line_offset */
860 		desc = gpiochip_get_desc(gc, lineinfo.line_offset);
861 		if (IS_ERR(desc))
862 			return PTR_ERR(desc);
863 
864 		gpio_desc_to_lineinfo(desc, &lineinfo);
865 
866 		if (copy_to_user(ip, &lineinfo, sizeof(lineinfo)))
867 			return -EFAULT;
868 		return 0;
869 	} else if (cmd == GPIO_GET_LINEHANDLE_IOCTL) {
870 		return linehandle_create(gdev, ip);
871 	} else if (cmd == GPIO_GET_LINEEVENT_IOCTL) {
872 		return lineevent_create(gdev, ip);
873 	} else if (cmd == GPIO_GET_LINEINFO_WATCH_IOCTL) {
874 		struct gpioline_info lineinfo;
875 
876 		if (copy_from_user(&lineinfo, ip, sizeof(lineinfo)))
877 			return -EFAULT;
878 
879 		/* this doubles as a range check on line_offset */
880 		desc = gpiochip_get_desc(gc, lineinfo.line_offset);
881 		if (IS_ERR(desc))
882 			return PTR_ERR(desc);
883 
884 		if (test_and_set_bit(lineinfo.line_offset, cdev->watched_lines))
885 			return -EBUSY;
886 
887 		gpio_desc_to_lineinfo(desc, &lineinfo);
888 
889 		if (copy_to_user(ip, &lineinfo, sizeof(lineinfo))) {
890 			clear_bit(lineinfo.line_offset, cdev->watched_lines);
891 			return -EFAULT;
892 		}
893 
894 		return 0;
895 	} else if (cmd == GPIO_GET_LINEINFO_UNWATCH_IOCTL) {
896 		if (copy_from_user(&offset, ip, sizeof(offset)))
897 			return -EFAULT;
898 
899 		if (offset >= cdev->gdev->ngpio)
900 			return -EINVAL;
901 
902 		if (!test_and_clear_bit(offset, cdev->watched_lines))
903 			return -EBUSY;
904 
905 		return 0;
906 	}
907 	return -EINVAL;
908 }
909 
910 #ifdef CONFIG_COMPAT
911 static long gpio_ioctl_compat(struct file *file, unsigned int cmd,
912 			      unsigned long arg)
913 {
914 	return gpio_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
915 }
916 #endif
917 
918 static struct gpio_chardev_data *
919 to_gpio_chardev_data(struct notifier_block *nb)
920 {
921 	return container_of(nb, struct gpio_chardev_data, lineinfo_changed_nb);
922 }
923 
924 static int lineinfo_changed_notify(struct notifier_block *nb,
925 				   unsigned long action, void *data)
926 {
927 	struct gpio_chardev_data *cdev = to_gpio_chardev_data(nb);
928 	struct gpioline_info_changed chg;
929 	struct gpio_desc *desc = data;
930 	int ret;
931 
932 	if (!test_bit(gpio_chip_hwgpio(desc), cdev->watched_lines))
933 		return NOTIFY_DONE;
934 
935 	memset(&chg, 0, sizeof(chg));
936 	chg.info.line_offset = gpio_chip_hwgpio(desc);
937 	chg.event_type = action;
938 	chg.timestamp = ktime_get_ns();
939 	gpio_desc_to_lineinfo(desc, &chg.info);
940 
941 	ret = kfifo_in_spinlocked(&cdev->events, &chg, 1, &cdev->wait.lock);
942 	if (ret)
943 		wake_up_poll(&cdev->wait, EPOLLIN);
944 	else
945 		pr_debug_ratelimited("lineinfo event FIFO is full - event dropped\n");
946 
947 	return NOTIFY_OK;
948 }
949 
950 static __poll_t lineinfo_watch_poll(struct file *file,
951 				    struct poll_table_struct *pollt)
952 {
953 	struct gpio_chardev_data *cdev = file->private_data;
954 	__poll_t events = 0;
955 
956 	poll_wait(file, &cdev->wait, pollt);
957 
958 	if (!kfifo_is_empty_spinlocked_noirqsave(&cdev->events,
959 						 &cdev->wait.lock))
960 		events = EPOLLIN | EPOLLRDNORM;
961 
962 	return events;
963 }
964 
965 static ssize_t lineinfo_watch_read(struct file *file, char __user *buf,
966 				   size_t count, loff_t *off)
967 {
968 	struct gpio_chardev_data *cdev = file->private_data;
969 	struct gpioline_info_changed event;
970 	ssize_t bytes_read = 0;
971 	int ret;
972 
973 	if (count < sizeof(event))
974 		return -EINVAL;
975 
976 	do {
977 		spin_lock(&cdev->wait.lock);
978 		if (kfifo_is_empty(&cdev->events)) {
979 			if (bytes_read) {
980 				spin_unlock(&cdev->wait.lock);
981 				return bytes_read;
982 			}
983 
984 			if (file->f_flags & O_NONBLOCK) {
985 				spin_unlock(&cdev->wait.lock);
986 				return -EAGAIN;
987 			}
988 
989 			ret = wait_event_interruptible_locked(cdev->wait,
990 					!kfifo_is_empty(&cdev->events));
991 			if (ret) {
992 				spin_unlock(&cdev->wait.lock);
993 				return ret;
994 			}
995 		}
996 
997 		ret = kfifo_out(&cdev->events, &event, 1);
998 		spin_unlock(&cdev->wait.lock);
999 		if (ret != 1) {
1000 			ret = -EIO;
1001 			break;
1002 			/* We should never get here. See lineevent_read(). */
1003 		}
1004 
1005 		if (copy_to_user(buf + bytes_read, &event, sizeof(event)))
1006 			return -EFAULT;
1007 		bytes_read += sizeof(event);
1008 	} while (count >= bytes_read + sizeof(event));
1009 
1010 	return bytes_read;
1011 }
1012 
1013 /**
1014  * gpio_chrdev_open() - open the chardev for ioctl operations
1015  * @inode: inode for this chardev
1016  * @file: file struct for storing private data
1017  * Returns 0 on success
1018  */
1019 static int gpio_chrdev_open(struct inode *inode, struct file *file)
1020 {
1021 	struct gpio_device *gdev = container_of(inode->i_cdev,
1022 						struct gpio_device, chrdev);
1023 	struct gpio_chardev_data *cdev;
1024 	int ret = -ENOMEM;
1025 
1026 	/* Fail on open if the backing gpiochip is gone */
1027 	if (!gdev->chip)
1028 		return -ENODEV;
1029 
1030 	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
1031 	if (!cdev)
1032 		return -ENOMEM;
1033 
1034 	cdev->watched_lines = bitmap_zalloc(gdev->chip->ngpio, GFP_KERNEL);
1035 	if (!cdev->watched_lines)
1036 		goto out_free_cdev;
1037 
1038 	init_waitqueue_head(&cdev->wait);
1039 	INIT_KFIFO(cdev->events);
1040 	cdev->gdev = gdev;
1041 
1042 	cdev->lineinfo_changed_nb.notifier_call = lineinfo_changed_notify;
1043 	ret = blocking_notifier_chain_register(&gdev->notifier,
1044 					       &cdev->lineinfo_changed_nb);
1045 	if (ret)
1046 		goto out_free_bitmap;
1047 
1048 	get_device(&gdev->dev);
1049 	file->private_data = cdev;
1050 
1051 	ret = nonseekable_open(inode, file);
1052 	if (ret)
1053 		goto out_unregister_notifier;
1054 
1055 	return ret;
1056 
1057 out_unregister_notifier:
1058 	blocking_notifier_chain_unregister(&gdev->notifier,
1059 					   &cdev->lineinfo_changed_nb);
1060 out_free_bitmap:
1061 	bitmap_free(cdev->watched_lines);
1062 out_free_cdev:
1063 	kfree(cdev);
1064 	return ret;
1065 }
1066 
1067 /**
1068  * gpio_chrdev_release() - close chardev after ioctl operations
1069  * @inode: inode for this chardev
1070  * @file: file struct for storing private data
1071  * Returns 0 on success
1072  */
1073 static int gpio_chrdev_release(struct inode *inode, struct file *file)
1074 {
1075 	struct gpio_chardev_data *cdev = file->private_data;
1076 	struct gpio_device *gdev = cdev->gdev;
1077 
1078 	bitmap_free(cdev->watched_lines);
1079 	blocking_notifier_chain_unregister(&gdev->notifier,
1080 					   &cdev->lineinfo_changed_nb);
1081 	put_device(&gdev->dev);
1082 	kfree(cdev);
1083 
1084 	return 0;
1085 }
1086 
1087 static const struct file_operations gpio_fileops = {
1088 	.release = gpio_chrdev_release,
1089 	.open = gpio_chrdev_open,
1090 	.poll = lineinfo_watch_poll,
1091 	.read = lineinfo_watch_read,
1092 	.owner = THIS_MODULE,
1093 	.llseek = no_llseek,
1094 	.unlocked_ioctl = gpio_ioctl,
1095 #ifdef CONFIG_COMPAT
1096 	.compat_ioctl = gpio_ioctl_compat,
1097 #endif
1098 };
1099 
1100 int gpiolib_cdev_register(struct gpio_device *gdev, dev_t devt)
1101 {
1102 	int ret;
1103 
1104 	cdev_init(&gdev->chrdev, &gpio_fileops);
1105 	gdev->chrdev.owner = THIS_MODULE;
1106 	gdev->dev.devt = MKDEV(MAJOR(devt), gdev->id);
1107 
1108 	ret = cdev_device_add(&gdev->chrdev, &gdev->dev);
1109 	if (ret)
1110 		return ret;
1111 
1112 	chip_dbg(gdev->chip, "added GPIO chardev (%d:%d)\n",
1113 		 MAJOR(devt), gdev->id);
1114 
1115 	return 0;
1116 }
1117 
1118 void gpiolib_cdev_unregister(struct gpio_device *gdev)
1119 {
1120 	cdev_device_del(&gdev->chrdev, &gdev->dev);
1121 }
1122