1 // SPDX-License-Identifier: GPL-2.0
3 #include <linux/anon_inodes.h>
4 #include <linux/atomic.h>
5 #include <linux/bitmap.h>
6 #include <linux/build_bug.h>
7 #include <linux/cdev.h>
8 #include <linux/compat.h>
9 #include <linux/compiler.h>
10 #include <linux/device.h>
11 #include <linux/err.h>
12 #include <linux/file.h>
13 #include <linux/gpio.h>
14 #include <linux/gpio/driver.h>
15 #include <linux/interrupt.h>
16 #include <linux/irqreturn.h>
17 #include <linux/kernel.h>
18 #include <linux/kfifo.h>
19 #include <linux/module.h>
20 #include <linux/mutex.h>
21 #include <linux/pinctrl/consumer.h>
22 #include <linux/poll.h>
23 #include <linux/spinlock.h>
24 #include <linux/timekeeping.h>
25 #include <linux/uaccess.h>
26 #include <linux/workqueue.h>
27 #include <uapi/linux/gpio.h>
30 #include "gpiolib-cdev.h"
33 * Array sizes must ensure 64-bit alignment and not create holes in the
36 static_assert(IS_ALIGNED(GPIO_V2_LINES_MAX
, 2));
37 static_assert(IS_ALIGNED(GPIO_MAX_NAME_SIZE
, 8));
40 * Check that uAPI structs are 64-bit aligned for 32/64-bit compatibility
42 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_attribute
), 8));
43 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_config_attribute
), 8));
44 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_config
), 8));
45 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_request
), 8));
46 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_info
), 8));
47 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_info_changed
), 8));
48 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_event
), 8));
49 static_assert(IS_ALIGNED(sizeof(struct gpio_v2_line_values
), 8));
51 /* Character device interface to GPIO.
53 * The GPIO character device, /dev/gpiochipN, provides userspace an
54 * interface to gpiolib GPIOs via ioctl()s.
58 * GPIO line handle management
61 #ifdef CONFIG_GPIO_CDEV_V1
63 * struct linehandle_state - contains the state of a userspace handle
64 * @gdev: the GPIO device the handle pertains to
65 * @label: consumer label used to tag descriptors
66 * @descs: the GPIO descriptors held by this handle
67 * @num_descs: the number of descriptors held in the descs array
69 struct linehandle_state
{
70 struct gpio_device
*gdev
;
72 struct gpio_desc
*descs
[GPIOHANDLES_MAX
];
76 #define GPIOHANDLE_REQUEST_VALID_FLAGS \
77 (GPIOHANDLE_REQUEST_INPUT | \
78 GPIOHANDLE_REQUEST_OUTPUT | \
79 GPIOHANDLE_REQUEST_ACTIVE_LOW | \
80 GPIOHANDLE_REQUEST_BIAS_PULL_UP | \
81 GPIOHANDLE_REQUEST_BIAS_PULL_DOWN | \
82 GPIOHANDLE_REQUEST_BIAS_DISABLE | \
83 GPIOHANDLE_REQUEST_OPEN_DRAIN | \
84 GPIOHANDLE_REQUEST_OPEN_SOURCE)
86 static int linehandle_validate_flags(u32 flags
)
88 /* Return an error if an unknown flag is set */
89 if (flags
& ~GPIOHANDLE_REQUEST_VALID_FLAGS
)
93 * Do not allow both INPUT & OUTPUT flags to be set as they are
96 if ((flags
& GPIOHANDLE_REQUEST_INPUT
) &&
97 (flags
& GPIOHANDLE_REQUEST_OUTPUT
))
101 * Do not allow OPEN_SOURCE & OPEN_DRAIN flags in a single request. If
102 * the hardware actually supports enabling both at the same time the
103 * electrical result would be disastrous.
105 if ((flags
& GPIOHANDLE_REQUEST_OPEN_DRAIN
) &&
106 (flags
& GPIOHANDLE_REQUEST_OPEN_SOURCE
))
109 /* OPEN_DRAIN and OPEN_SOURCE flags only make sense for output mode. */
110 if (!(flags
& GPIOHANDLE_REQUEST_OUTPUT
) &&
111 ((flags
& GPIOHANDLE_REQUEST_OPEN_DRAIN
) ||
112 (flags
& GPIOHANDLE_REQUEST_OPEN_SOURCE
)))
115 /* Bias flags only allowed for input or output mode. */
116 if (!((flags
& GPIOHANDLE_REQUEST_INPUT
) ||
117 (flags
& GPIOHANDLE_REQUEST_OUTPUT
)) &&
118 ((flags
& GPIOHANDLE_REQUEST_BIAS_DISABLE
) ||
119 (flags
& GPIOHANDLE_REQUEST_BIAS_PULL_UP
) ||
120 (flags
& GPIOHANDLE_REQUEST_BIAS_PULL_DOWN
)))
123 /* Only one bias flag can be set. */
124 if (((flags
& GPIOHANDLE_REQUEST_BIAS_DISABLE
) &&
125 (flags
& (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN
|
126 GPIOHANDLE_REQUEST_BIAS_PULL_UP
))) ||
127 ((flags
& GPIOHANDLE_REQUEST_BIAS_PULL_DOWN
) &&
128 (flags
& GPIOHANDLE_REQUEST_BIAS_PULL_UP
)))
134 static void linehandle_flags_to_desc_flags(u32 lflags
, unsigned long *flagsp
)
136 assign_bit(FLAG_ACTIVE_LOW
, flagsp
,
137 lflags
& GPIOHANDLE_REQUEST_ACTIVE_LOW
);
138 assign_bit(FLAG_OPEN_DRAIN
, flagsp
,
139 lflags
& GPIOHANDLE_REQUEST_OPEN_DRAIN
);
140 assign_bit(FLAG_OPEN_SOURCE
, flagsp
,
141 lflags
& GPIOHANDLE_REQUEST_OPEN_SOURCE
);
142 assign_bit(FLAG_PULL_UP
, flagsp
,
143 lflags
& GPIOHANDLE_REQUEST_BIAS_PULL_UP
);
144 assign_bit(FLAG_PULL_DOWN
, flagsp
,
145 lflags
& GPIOHANDLE_REQUEST_BIAS_PULL_DOWN
);
146 assign_bit(FLAG_BIAS_DISABLE
, flagsp
,
147 lflags
& GPIOHANDLE_REQUEST_BIAS_DISABLE
);
150 static long linehandle_set_config(struct linehandle_state
*lh
,
153 struct gpiohandle_config gcnf
;
154 struct gpio_desc
*desc
;
158 if (copy_from_user(&gcnf
, ip
, sizeof(gcnf
)))
162 ret
= linehandle_validate_flags(lflags
);
166 for (i
= 0; i
< lh
->num_descs
; i
++) {
168 linehandle_flags_to_desc_flags(gcnf
.flags
, &desc
->flags
);
171 * Lines have to be requested explicitly for input
172 * or output, else the line will be treated "as is".
174 if (lflags
& GPIOHANDLE_REQUEST_OUTPUT
) {
175 int val
= !!gcnf
.default_values
[i
];
177 ret
= gpiod_direction_output(desc
, val
);
180 } else if (lflags
& GPIOHANDLE_REQUEST_INPUT
) {
181 ret
= gpiod_direction_input(desc
);
186 blocking_notifier_call_chain(&desc
->gdev
->notifier
,
187 GPIO_V2_LINE_CHANGED_CONFIG
,
193 static long linehandle_ioctl(struct file
*file
, unsigned int cmd
,
196 struct linehandle_state
*lh
= file
->private_data
;
197 void __user
*ip
= (void __user
*)arg
;
198 struct gpiohandle_data ghd
;
199 DECLARE_BITMAP(vals
, GPIOHANDLES_MAX
);
202 if (cmd
== GPIOHANDLE_GET_LINE_VALUES_IOCTL
) {
203 /* NOTE: It's ok to read values of output lines. */
204 int ret
= gpiod_get_array_value_complex(false,
213 memset(&ghd
, 0, sizeof(ghd
));
214 for (i
= 0; i
< lh
->num_descs
; i
++)
215 ghd
.values
[i
] = test_bit(i
, vals
);
217 if (copy_to_user(ip
, &ghd
, sizeof(ghd
)))
221 } else if (cmd
== GPIOHANDLE_SET_LINE_VALUES_IOCTL
) {
223 * All line descriptors were created at once with the same
224 * flags so just check if the first one is really output.
226 if (!test_bit(FLAG_IS_OUT
, &lh
->descs
[0]->flags
))
229 if (copy_from_user(&ghd
, ip
, sizeof(ghd
)))
232 /* Clamp all values to [0,1] */
233 for (i
= 0; i
< lh
->num_descs
; i
++)
234 __assign_bit(i
, vals
, ghd
.values
[i
]);
236 /* Reuse the array setting function */
237 return gpiod_set_array_value_complex(false,
243 } else if (cmd
== GPIOHANDLE_SET_CONFIG_IOCTL
) {
244 return linehandle_set_config(lh
, ip
);
250 static long linehandle_ioctl_compat(struct file
*file
, unsigned int cmd
,
253 return linehandle_ioctl(file
, cmd
, (unsigned long)compat_ptr(arg
));
257 static void linehandle_free(struct linehandle_state
*lh
)
261 for (i
= 0; i
< lh
->num_descs
; i
++)
263 gpiod_free(lh
->descs
[i
]);
265 put_device(&lh
->gdev
->dev
);
269 static int linehandle_release(struct inode
*inode
, struct file
*file
)
271 linehandle_free(file
->private_data
);
275 static const struct file_operations linehandle_fileops
= {
276 .release
= linehandle_release
,
277 .owner
= THIS_MODULE
,
278 .llseek
= noop_llseek
,
279 .unlocked_ioctl
= linehandle_ioctl
,
281 .compat_ioctl
= linehandle_ioctl_compat
,
285 static int linehandle_create(struct gpio_device
*gdev
, void __user
*ip
)
287 struct gpiohandle_request handlereq
;
288 struct linehandle_state
*lh
;
293 if (copy_from_user(&handlereq
, ip
, sizeof(handlereq
)))
295 if ((handlereq
.lines
== 0) || (handlereq
.lines
> GPIOHANDLES_MAX
))
298 lflags
= handlereq
.flags
;
300 ret
= linehandle_validate_flags(lflags
);
304 lh
= kzalloc(sizeof(*lh
), GFP_KERNEL
);
308 get_device(&gdev
->dev
);
310 if (handlereq
.consumer_label
[0] != '\0') {
311 /* label is only initialized if consumer_label is set */
312 lh
->label
= kstrndup(handlereq
.consumer_label
,
313 sizeof(handlereq
.consumer_label
) - 1,
321 lh
->num_descs
= handlereq
.lines
;
323 /* Request each GPIO */
324 for (i
= 0; i
< handlereq
.lines
; i
++) {
325 u32 offset
= handlereq
.lineoffsets
[i
];
326 struct gpio_desc
*desc
= gpiochip_get_desc(gdev
->chip
, offset
);
333 ret
= gpiod_request(desc
, lh
->label
);
337 linehandle_flags_to_desc_flags(handlereq
.flags
, &desc
->flags
);
339 ret
= gpiod_set_transitory(desc
, false);
344 * Lines have to be requested explicitly for input
345 * or output, else the line will be treated "as is".
347 if (lflags
& GPIOHANDLE_REQUEST_OUTPUT
) {
348 int val
= !!handlereq
.default_values
[i
];
350 ret
= gpiod_direction_output(desc
, val
);
353 } else if (lflags
& GPIOHANDLE_REQUEST_INPUT
) {
354 ret
= gpiod_direction_input(desc
);
359 blocking_notifier_call_chain(&desc
->gdev
->notifier
,
360 GPIO_V2_LINE_CHANGED_REQUESTED
, desc
);
362 dev_dbg(&gdev
->dev
, "registered chardev handle for line %d\n",
366 fd
= get_unused_fd_flags(O_RDONLY
| O_CLOEXEC
);
372 file
= anon_inode_getfile("gpio-linehandle",
375 O_RDONLY
| O_CLOEXEC
);
378 goto out_put_unused_fd
;
382 if (copy_to_user(ip
, &handlereq
, sizeof(handlereq
))) {
384 * fput() will trigger the release() callback, so do not go onto
385 * the regular error cleanup path here.
392 fd_install(fd
, file
);
394 dev_dbg(&gdev
->dev
, "registered chardev handle for %d lines\n",
405 #endif /* CONFIG_GPIO_CDEV_V1 */
408 * struct line - contains the state of a requested line
409 * @desc: the GPIO descriptor for this line.
410 * @req: the corresponding line request
411 * @irq: the interrupt triggered in response to events on this GPIO
412 * @eflags: the edge flags, GPIO_V2_LINE_FLAG_EDGE_RISING and/or
413 * GPIO_V2_LINE_FLAG_EDGE_FALLING, indicating the edge detection applied
414 * @timestamp_ns: cache for the timestamp storing it between hardirq and
415 * IRQ thread, used to bring the timestamp close to the actual event
416 * @req_seqno: the seqno for the current edge event in the sequence of
417 * events for the corresponding line request. This is drawn from the @req.
418 * @line_seqno: the seqno for the current edge event in the sequence of
419 * events for this line.
420 * @work: the worker that implements software debouncing
421 * @sw_debounced: flag indicating if the software debouncer is active
422 * @level: the current debounced physical level of the line
425 struct gpio_desc
*desc
;
427 * -- edge detector specific fields --
432 * eflags is set by edge_detector_setup(), edge_detector_stop() and
433 * edge_detector_update(), which are themselves mutually exclusive,
434 * and is accessed by edge_irq_thread() and debounce_work_func(),
435 * which can both live with a slightly stale value.
439 * timestamp_ns and req_seqno are accessed only by
440 * edge_irq_handler() and edge_irq_thread(), which are themselves
441 * mutually exclusive, so no additional protection is necessary.
446 * line_seqno is accessed by either edge_irq_thread() or
447 * debounce_work_func(), which are themselves mutually exclusive,
448 * so no additional protection is necessary.
452 * -- debouncer specific fields --
454 struct delayed_work work
;
456 * sw_debounce is accessed by linereq_set_config(), which is the
457 * only setter, and linereq_get_values(), which can live with a
458 * slightly stale value.
460 unsigned int sw_debounced
;
462 * level is accessed by debounce_work_func(), which is the only
463 * setter, and linereq_get_values() which can live with a slightly
470 * struct linereq - contains the state of a userspace line request
471 * @gdev: the GPIO device the line request pertains to
472 * @label: consumer label used to tag GPIO descriptors
473 * @num_lines: the number of lines in the lines array
474 * @wait: wait queue that handles blocking reads of events
475 * @event_buffer_size: the number of elements allocated in @events
476 * @events: KFIFO for the GPIO events
477 * @seqno: the sequence number for edge events generated on all lines in
478 * this line request. Note that this is not used when @num_lines is 1, as
479 * the line_seqno is then the same and is cheaper to calculate.
480 * @config_mutex: mutex for serializing ioctl() calls to ensure consistency
481 * of configuration, particularly multi-step accesses to desc flags.
482 * @lines: the lines held by this line request, with @num_lines elements.
485 struct gpio_device
*gdev
;
488 wait_queue_head_t wait
;
489 u32 event_buffer_size
;
490 DECLARE_KFIFO_PTR(events
, struct gpio_v2_line_event
);
492 struct mutex config_mutex
;
496 #define GPIO_V2_LINE_BIAS_FLAGS \
497 (GPIO_V2_LINE_FLAG_BIAS_PULL_UP | \
498 GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN | \
499 GPIO_V2_LINE_FLAG_BIAS_DISABLED)
501 #define GPIO_V2_LINE_DIRECTION_FLAGS \
502 (GPIO_V2_LINE_FLAG_INPUT | \
503 GPIO_V2_LINE_FLAG_OUTPUT)
505 #define GPIO_V2_LINE_DRIVE_FLAGS \
506 (GPIO_V2_LINE_FLAG_OPEN_DRAIN | \
507 GPIO_V2_LINE_FLAG_OPEN_SOURCE)
509 #define GPIO_V2_LINE_EDGE_FLAGS \
510 (GPIO_V2_LINE_FLAG_EDGE_RISING | \
511 GPIO_V2_LINE_FLAG_EDGE_FALLING)
513 #define GPIO_V2_LINE_FLAG_EDGE_BOTH GPIO_V2_LINE_EDGE_FLAGS
515 #define GPIO_V2_LINE_VALID_FLAGS \
516 (GPIO_V2_LINE_FLAG_ACTIVE_LOW | \
517 GPIO_V2_LINE_DIRECTION_FLAGS | \
518 GPIO_V2_LINE_DRIVE_FLAGS | \
519 GPIO_V2_LINE_EDGE_FLAGS | \
520 GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME | \
521 GPIO_V2_LINE_BIAS_FLAGS)
523 static void linereq_put_event(struct linereq
*lr
,
524 struct gpio_v2_line_event
*le
)
526 bool overflow
= false;
528 spin_lock(&lr
->wait
.lock
);
529 if (kfifo_is_full(&lr
->events
)) {
531 kfifo_skip(&lr
->events
);
533 kfifo_in(&lr
->events
, le
, 1);
534 spin_unlock(&lr
->wait
.lock
);
536 wake_up_poll(&lr
->wait
, EPOLLIN
);
538 pr_debug_ratelimited("event FIFO is full - event dropped\n");
541 static u64
line_event_timestamp(struct line
*line
)
543 if (test_bit(FLAG_EVENT_CLOCK_REALTIME
, &line
->desc
->flags
))
544 return ktime_get_real_ns();
546 return ktime_get_ns();
549 static irqreturn_t
edge_irq_thread(int irq
, void *p
)
551 struct line
*line
= p
;
552 struct linereq
*lr
= line
->req
;
553 struct gpio_v2_line_event le
;
556 /* Do not leak kernel stack to userspace */
557 memset(&le
, 0, sizeof(le
));
559 if (line
->timestamp_ns
) {
560 le
.timestamp_ns
= line
->timestamp_ns
;
563 * We may be running from a nested threaded interrupt in
564 * which case we didn't get the timestamp from
565 * edge_irq_handler().
567 le
.timestamp_ns
= line_event_timestamp(line
);
568 if (lr
->num_lines
!= 1)
569 line
->req_seqno
= atomic_inc_return(&lr
->seqno
);
571 line
->timestamp_ns
= 0;
573 eflags
= READ_ONCE(line
->eflags
);
574 if (eflags
== GPIO_V2_LINE_FLAG_EDGE_BOTH
) {
575 int level
= gpiod_get_value_cansleep(line
->desc
);
578 /* Emit low-to-high event */
579 le
.id
= GPIO_V2_LINE_EVENT_RISING_EDGE
;
581 /* Emit high-to-low event */
582 le
.id
= GPIO_V2_LINE_EVENT_FALLING_EDGE
;
583 } else if (eflags
== GPIO_V2_LINE_FLAG_EDGE_RISING
) {
584 /* Emit low-to-high event */
585 le
.id
= GPIO_V2_LINE_EVENT_RISING_EDGE
;
586 } else if (eflags
== GPIO_V2_LINE_FLAG_EDGE_FALLING
) {
587 /* Emit high-to-low event */
588 le
.id
= GPIO_V2_LINE_EVENT_FALLING_EDGE
;
593 le
.line_seqno
= line
->line_seqno
;
594 le
.seqno
= (lr
->num_lines
== 1) ? le
.line_seqno
: line
->req_seqno
;
595 le
.offset
= gpio_chip_hwgpio(line
->desc
);
597 linereq_put_event(lr
, &le
);
602 static irqreturn_t
edge_irq_handler(int irq
, void *p
)
604 struct line
*line
= p
;
605 struct linereq
*lr
= line
->req
;
608 * Just store the timestamp in hardirq context so we get it as
609 * close in time as possible to the actual event.
611 line
->timestamp_ns
= line_event_timestamp(line
);
613 if (lr
->num_lines
!= 1)
614 line
->req_seqno
= atomic_inc_return(&lr
->seqno
);
616 return IRQ_WAKE_THREAD
;
620 * returns the current debounced logical value.
622 static bool debounced_value(struct line
*line
)
627 * minor race - debouncer may be stopped here, so edge_detector_stop()
628 * must leave the value unchanged so the following will read the level
629 * from when the debouncer was last running.
631 value
= READ_ONCE(line
->level
);
633 if (test_bit(FLAG_ACTIVE_LOW
, &line
->desc
->flags
))
639 static irqreturn_t
debounce_irq_handler(int irq
, void *p
)
641 struct line
*line
= p
;
643 mod_delayed_work(system_wq
, &line
->work
,
644 usecs_to_jiffies(READ_ONCE(line
->desc
->debounce_period_us
)));
649 static void debounce_work_func(struct work_struct
*work
)
651 struct gpio_v2_line_event le
;
652 struct line
*line
= container_of(work
, struct line
, work
.work
);
657 level
= gpiod_get_raw_value_cansleep(line
->desc
);
659 pr_debug_ratelimited("debouncer failed to read line value\n");
663 if (READ_ONCE(line
->level
) == level
)
666 WRITE_ONCE(line
->level
, level
);
668 /* -- edge detection -- */
669 eflags
= READ_ONCE(line
->eflags
);
673 /* switch from physical level to logical - if they differ */
674 if (test_bit(FLAG_ACTIVE_LOW
, &line
->desc
->flags
))
677 /* ignore edges that are not being monitored */
678 if (((eflags
== GPIO_V2_LINE_FLAG_EDGE_RISING
) && !level
) ||
679 ((eflags
== GPIO_V2_LINE_FLAG_EDGE_FALLING
) && level
))
682 /* Do not leak kernel stack to userspace */
683 memset(&le
, 0, sizeof(le
));
686 le
.timestamp_ns
= line_event_timestamp(line
);
687 le
.offset
= gpio_chip_hwgpio(line
->desc
);
689 le
.line_seqno
= line
->line_seqno
;
690 le
.seqno
= (lr
->num_lines
== 1) ?
691 le
.line_seqno
: atomic_inc_return(&lr
->seqno
);
694 /* Emit low-to-high event */
695 le
.id
= GPIO_V2_LINE_EVENT_RISING_EDGE
;
697 /* Emit high-to-low event */
698 le
.id
= GPIO_V2_LINE_EVENT_FALLING_EDGE
;
700 linereq_put_event(lr
, &le
);
703 static int debounce_setup(struct line
*line
,
704 unsigned int debounce_period_us
)
706 unsigned long irqflags
;
710 ret
= gpiod_set_debounce(line
->desc
, debounce_period_us
);
712 WRITE_ONCE(line
->desc
->debounce_period_us
, debounce_period_us
);
715 if (ret
!= -ENOTSUPP
)
718 if (debounce_period_us
) {
719 /* setup software debounce */
720 level
= gpiod_get_raw_value_cansleep(line
->desc
);
724 irq
= gpiod_to_irq(line
->desc
);
728 WRITE_ONCE(line
->level
, level
);
729 irqflags
= IRQF_TRIGGER_FALLING
| IRQF_TRIGGER_RISING
;
730 ret
= request_irq(irq
, debounce_irq_handler
, irqflags
,
731 line
->req
->label
, line
);
735 WRITE_ONCE(line
->sw_debounced
, 1);
741 static bool gpio_v2_line_config_debounced(struct gpio_v2_line_config
*lc
,
742 unsigned int line_idx
)
745 u64 mask
= BIT_ULL(line_idx
);
747 for (i
= 0; i
< lc
->num_attrs
; i
++) {
748 if ((lc
->attrs
[i
].attr
.id
== GPIO_V2_LINE_ATTR_ID_DEBOUNCE
) &&
749 (lc
->attrs
[i
].mask
& mask
))
755 static u32
gpio_v2_line_config_debounce_period(struct gpio_v2_line_config
*lc
,
756 unsigned int line_idx
)
759 u64 mask
= BIT_ULL(line_idx
);
761 for (i
= 0; i
< lc
->num_attrs
; i
++) {
762 if ((lc
->attrs
[i
].attr
.id
== GPIO_V2_LINE_ATTR_ID_DEBOUNCE
) &&
763 (lc
->attrs
[i
].mask
& mask
))
764 return lc
->attrs
[i
].attr
.debounce_period_us
;
769 static void edge_detector_stop(struct line
*line
)
772 free_irq(line
->irq
, line
);
776 cancel_delayed_work_sync(&line
->work
);
777 WRITE_ONCE(line
->sw_debounced
, 0);
778 WRITE_ONCE(line
->eflags
, 0);
779 /* do not change line->level - see comment in debounced_value() */
782 static int edge_detector_setup(struct line
*line
,
783 struct gpio_v2_line_config
*lc
,
784 unsigned int line_idx
,
787 u32 debounce_period_us
;
788 unsigned long irqflags
= 0;
791 if (eflags
&& !kfifo_initialized(&line
->req
->events
)) {
792 ret
= kfifo_alloc(&line
->req
->events
,
793 line
->req
->event_buffer_size
, GFP_KERNEL
);
797 WRITE_ONCE(line
->eflags
, eflags
);
798 if (gpio_v2_line_config_debounced(lc
, line_idx
)) {
799 debounce_period_us
= gpio_v2_line_config_debounce_period(lc
, line_idx
);
800 ret
= debounce_setup(line
, debounce_period_us
);
803 WRITE_ONCE(line
->desc
->debounce_period_us
, debounce_period_us
);
806 /* detection disabled or sw debouncer will provide edge detection */
807 if (!eflags
|| READ_ONCE(line
->sw_debounced
))
810 irq
= gpiod_to_irq(line
->desc
);
814 if (eflags
& GPIO_V2_LINE_FLAG_EDGE_RISING
)
815 irqflags
|= test_bit(FLAG_ACTIVE_LOW
, &line
->desc
->flags
) ?
816 IRQF_TRIGGER_FALLING
: IRQF_TRIGGER_RISING
;
817 if (eflags
& GPIO_V2_LINE_FLAG_EDGE_FALLING
)
818 irqflags
|= test_bit(FLAG_ACTIVE_LOW
, &line
->desc
->flags
) ?
819 IRQF_TRIGGER_RISING
: IRQF_TRIGGER_FALLING
;
820 irqflags
|= IRQF_ONESHOT
;
822 /* Request a thread to read the events */
823 ret
= request_threaded_irq(irq
, edge_irq_handler
, edge_irq_thread
,
824 irqflags
, line
->req
->label
, line
);
832 static int edge_detector_update(struct line
*line
,
833 struct gpio_v2_line_config
*lc
,
834 unsigned int line_idx
,
835 u64 eflags
, bool polarity_change
)
837 unsigned int debounce_period_us
=
838 gpio_v2_line_config_debounce_period(lc
, line_idx
);
840 if ((READ_ONCE(line
->eflags
) == eflags
) && !polarity_change
&&
841 (READ_ONCE(line
->desc
->debounce_period_us
) == debounce_period_us
))
844 /* sw debounced and still will be...*/
845 if (debounce_period_us
&& READ_ONCE(line
->sw_debounced
)) {
846 WRITE_ONCE(line
->eflags
, eflags
);
847 WRITE_ONCE(line
->desc
->debounce_period_us
, debounce_period_us
);
851 /* reconfiguring edge detection or sw debounce being disabled */
852 if ((line
->irq
&& !READ_ONCE(line
->sw_debounced
)) ||
853 (!debounce_period_us
&& READ_ONCE(line
->sw_debounced
)))
854 edge_detector_stop(line
);
856 return edge_detector_setup(line
, lc
, line_idx
, eflags
);
859 static u64
gpio_v2_line_config_flags(struct gpio_v2_line_config
*lc
,
860 unsigned int line_idx
)
863 u64 mask
= BIT_ULL(line_idx
);
865 for (i
= 0; i
< lc
->num_attrs
; i
++) {
866 if ((lc
->attrs
[i
].attr
.id
== GPIO_V2_LINE_ATTR_ID_FLAGS
) &&
867 (lc
->attrs
[i
].mask
& mask
))
868 return lc
->attrs
[i
].attr
.flags
;
873 static int gpio_v2_line_config_output_value(struct gpio_v2_line_config
*lc
,
874 unsigned int line_idx
)
877 u64 mask
= BIT_ULL(line_idx
);
879 for (i
= 0; i
< lc
->num_attrs
; i
++) {
880 if ((lc
->attrs
[i
].attr
.id
== GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES
) &&
881 (lc
->attrs
[i
].mask
& mask
))
882 return !!(lc
->attrs
[i
].attr
.values
& mask
);
887 static int gpio_v2_line_flags_validate(u64 flags
)
889 /* Return an error if an unknown flag is set */
890 if (flags
& ~GPIO_V2_LINE_VALID_FLAGS
)
894 * Do not allow both INPUT and OUTPUT flags to be set as they are
897 if ((flags
& GPIO_V2_LINE_FLAG_INPUT
) &&
898 (flags
& GPIO_V2_LINE_FLAG_OUTPUT
))
901 /* Edge detection requires explicit input. */
902 if ((flags
& GPIO_V2_LINE_EDGE_FLAGS
) &&
903 !(flags
& GPIO_V2_LINE_FLAG_INPUT
))
907 * Do not allow OPEN_SOURCE and OPEN_DRAIN flags in a single
908 * request. If the hardware actually supports enabling both at the
909 * same time the electrical result would be disastrous.
911 if ((flags
& GPIO_V2_LINE_FLAG_OPEN_DRAIN
) &&
912 (flags
& GPIO_V2_LINE_FLAG_OPEN_SOURCE
))
915 /* Drive requires explicit output direction. */
916 if ((flags
& GPIO_V2_LINE_DRIVE_FLAGS
) &&
917 !(flags
& GPIO_V2_LINE_FLAG_OUTPUT
))
920 /* Bias requires explicit direction. */
921 if ((flags
& GPIO_V2_LINE_BIAS_FLAGS
) &&
922 !(flags
& GPIO_V2_LINE_DIRECTION_FLAGS
))
925 /* Only one bias flag can be set. */
926 if (((flags
& GPIO_V2_LINE_FLAG_BIAS_DISABLED
) &&
927 (flags
& (GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN
|
928 GPIO_V2_LINE_FLAG_BIAS_PULL_UP
))) ||
929 ((flags
& GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN
) &&
930 (flags
& GPIO_V2_LINE_FLAG_BIAS_PULL_UP
)))
936 static int gpio_v2_line_config_validate(struct gpio_v2_line_config
*lc
,
937 unsigned int num_lines
)
943 if (lc
->num_attrs
> GPIO_V2_LINE_NUM_ATTRS_MAX
)
946 if (memchr_inv(lc
->padding
, 0, sizeof(lc
->padding
)))
949 for (i
= 0; i
< num_lines
; i
++) {
950 flags
= gpio_v2_line_config_flags(lc
, i
);
951 ret
= gpio_v2_line_flags_validate(flags
);
955 /* debounce requires explicit input */
956 if (gpio_v2_line_config_debounced(lc
, i
) &&
957 !(flags
& GPIO_V2_LINE_FLAG_INPUT
))
963 static void gpio_v2_line_config_flags_to_desc_flags(u64 flags
,
964 unsigned long *flagsp
)
966 assign_bit(FLAG_ACTIVE_LOW
, flagsp
,
967 flags
& GPIO_V2_LINE_FLAG_ACTIVE_LOW
);
969 if (flags
& GPIO_V2_LINE_FLAG_OUTPUT
)
970 set_bit(FLAG_IS_OUT
, flagsp
);
971 else if (flags
& GPIO_V2_LINE_FLAG_INPUT
)
972 clear_bit(FLAG_IS_OUT
, flagsp
);
974 assign_bit(FLAG_EDGE_RISING
, flagsp
,
975 flags
& GPIO_V2_LINE_FLAG_EDGE_RISING
);
976 assign_bit(FLAG_EDGE_FALLING
, flagsp
,
977 flags
& GPIO_V2_LINE_FLAG_EDGE_FALLING
);
979 assign_bit(FLAG_OPEN_DRAIN
, flagsp
,
980 flags
& GPIO_V2_LINE_FLAG_OPEN_DRAIN
);
981 assign_bit(FLAG_OPEN_SOURCE
, flagsp
,
982 flags
& GPIO_V2_LINE_FLAG_OPEN_SOURCE
);
984 assign_bit(FLAG_PULL_UP
, flagsp
,
985 flags
& GPIO_V2_LINE_FLAG_BIAS_PULL_UP
);
986 assign_bit(FLAG_PULL_DOWN
, flagsp
,
987 flags
& GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN
);
988 assign_bit(FLAG_BIAS_DISABLE
, flagsp
,
989 flags
& GPIO_V2_LINE_FLAG_BIAS_DISABLED
);
991 assign_bit(FLAG_EVENT_CLOCK_REALTIME
, flagsp
,
992 flags
& GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME
);
995 static long linereq_get_values(struct linereq
*lr
, void __user
*ip
)
997 struct gpio_v2_line_values lv
;
998 DECLARE_BITMAP(vals
, GPIO_V2_LINES_MAX
);
999 struct gpio_desc
**descs
;
1000 unsigned int i
, didx
, num_get
;
1004 /* NOTE: It's ok to read values of output lines. */
1005 if (copy_from_user(&lv
, ip
, sizeof(lv
)))
1008 for (num_get
= 0, i
= 0; i
< lr
->num_lines
; i
++) {
1009 if (lv
.mask
& BIT_ULL(i
)) {
1011 descs
= &lr
->lines
[i
].desc
;
1019 descs
= kmalloc_array(num_get
, sizeof(*descs
), GFP_KERNEL
);
1022 for (didx
= 0, i
= 0; i
< lr
->num_lines
; i
++) {
1023 if (lv
.mask
& BIT_ULL(i
)) {
1024 descs
[didx
] = lr
->lines
[i
].desc
;
1029 ret
= gpiod_get_array_value_complex(false, true, num_get
,
1038 for (didx
= 0, i
= 0; i
< lr
->num_lines
; i
++) {
1039 if (lv
.mask
& BIT_ULL(i
)) {
1040 if (lr
->lines
[i
].sw_debounced
)
1041 val
= debounced_value(&lr
->lines
[i
]);
1043 val
= test_bit(didx
, vals
);
1045 lv
.bits
|= BIT_ULL(i
);
1050 if (copy_to_user(ip
, &lv
, sizeof(lv
)))
1056 static long linereq_set_values_unlocked(struct linereq
*lr
,
1057 struct gpio_v2_line_values
*lv
)
1059 DECLARE_BITMAP(vals
, GPIO_V2_LINES_MAX
);
1060 struct gpio_desc
**descs
;
1061 unsigned int i
, didx
, num_set
;
1064 bitmap_zero(vals
, GPIO_V2_LINES_MAX
);
1065 for (num_set
= 0, i
= 0; i
< lr
->num_lines
; i
++) {
1066 if (lv
->mask
& BIT_ULL(i
)) {
1067 if (!test_bit(FLAG_IS_OUT
, &lr
->lines
[i
].desc
->flags
))
1069 if (lv
->bits
& BIT_ULL(i
))
1070 __set_bit(num_set
, vals
);
1072 descs
= &lr
->lines
[i
].desc
;
1079 /* build compacted desc array and values */
1080 descs
= kmalloc_array(num_set
, sizeof(*descs
), GFP_KERNEL
);
1083 for (didx
= 0, i
= 0; i
< lr
->num_lines
; i
++) {
1084 if (lv
->mask
& BIT_ULL(i
)) {
1085 descs
[didx
] = lr
->lines
[i
].desc
;
1090 ret
= gpiod_set_array_value_complex(false, true, num_set
,
1098 static long linereq_set_values(struct linereq
*lr
, void __user
*ip
)
1100 struct gpio_v2_line_values lv
;
1103 if (copy_from_user(&lv
, ip
, sizeof(lv
)))
1106 mutex_lock(&lr
->config_mutex
);
1108 ret
= linereq_set_values_unlocked(lr
, &lv
);
1110 mutex_unlock(&lr
->config_mutex
);
1115 static long linereq_set_config_unlocked(struct linereq
*lr
,
1116 struct gpio_v2_line_config
*lc
)
1118 struct gpio_desc
*desc
;
1121 bool polarity_change
;
1124 for (i
= 0; i
< lr
->num_lines
; i
++) {
1125 desc
= lr
->lines
[i
].desc
;
1126 flags
= gpio_v2_line_config_flags(lc
, i
);
1128 (!!test_bit(FLAG_ACTIVE_LOW
, &desc
->flags
) !=
1129 ((flags
& GPIO_V2_LINE_FLAG_ACTIVE_LOW
) != 0));
1131 gpio_v2_line_config_flags_to_desc_flags(flags
, &desc
->flags
);
1133 * Lines have to be requested explicitly for input
1134 * or output, else the line will be treated "as is".
1136 if (flags
& GPIO_V2_LINE_FLAG_OUTPUT
) {
1137 int val
= gpio_v2_line_config_output_value(lc
, i
);
1139 edge_detector_stop(&lr
->lines
[i
]);
1140 ret
= gpiod_direction_output(desc
, val
);
1143 } else if (flags
& GPIO_V2_LINE_FLAG_INPUT
) {
1144 ret
= gpiod_direction_input(desc
);
1148 ret
= edge_detector_update(&lr
->lines
[i
], lc
, i
,
1149 flags
& GPIO_V2_LINE_EDGE_FLAGS
,
1155 blocking_notifier_call_chain(&desc
->gdev
->notifier
,
1156 GPIO_V2_LINE_CHANGED_CONFIG
,
1162 static long linereq_set_config(struct linereq
*lr
, void __user
*ip
)
1164 struct gpio_v2_line_config lc
;
1167 if (copy_from_user(&lc
, ip
, sizeof(lc
)))
1170 ret
= gpio_v2_line_config_validate(&lc
, lr
->num_lines
);
1174 mutex_lock(&lr
->config_mutex
);
1176 ret
= linereq_set_config_unlocked(lr
, &lc
);
1178 mutex_unlock(&lr
->config_mutex
);
1183 static long linereq_ioctl(struct file
*file
, unsigned int cmd
,
1186 struct linereq
*lr
= file
->private_data
;
1187 void __user
*ip
= (void __user
*)arg
;
1189 if (cmd
== GPIO_V2_LINE_GET_VALUES_IOCTL
)
1190 return linereq_get_values(lr
, ip
);
1191 else if (cmd
== GPIO_V2_LINE_SET_VALUES_IOCTL
)
1192 return linereq_set_values(lr
, ip
);
1193 else if (cmd
== GPIO_V2_LINE_SET_CONFIG_IOCTL
)
1194 return linereq_set_config(lr
, ip
);
1199 #ifdef CONFIG_COMPAT
1200 static long linereq_ioctl_compat(struct file
*file
, unsigned int cmd
,
1203 return linereq_ioctl(file
, cmd
, (unsigned long)compat_ptr(arg
));
1207 static __poll_t
linereq_poll(struct file
*file
,
1208 struct poll_table_struct
*wait
)
1210 struct linereq
*lr
= file
->private_data
;
1211 __poll_t events
= 0;
1213 poll_wait(file
, &lr
->wait
, wait
);
1215 if (!kfifo_is_empty_spinlocked_noirqsave(&lr
->events
,
1217 events
= EPOLLIN
| EPOLLRDNORM
;
1222 static ssize_t
linereq_read(struct file
*file
,
1227 struct linereq
*lr
= file
->private_data
;
1228 struct gpio_v2_line_event le
;
1229 ssize_t bytes_read
= 0;
1232 if (count
< sizeof(le
))
1236 spin_lock(&lr
->wait
.lock
);
1237 if (kfifo_is_empty(&lr
->events
)) {
1239 spin_unlock(&lr
->wait
.lock
);
1243 if (file
->f_flags
& O_NONBLOCK
) {
1244 spin_unlock(&lr
->wait
.lock
);
1248 ret
= wait_event_interruptible_locked(lr
->wait
,
1249 !kfifo_is_empty(&lr
->events
));
1251 spin_unlock(&lr
->wait
.lock
);
1256 ret
= kfifo_out(&lr
->events
, &le
, 1);
1257 spin_unlock(&lr
->wait
.lock
);
1260 * This should never happen - we were holding the
1261 * lock from the moment we learned the fifo is no
1262 * longer empty until now.
1268 if (copy_to_user(buf
+ bytes_read
, &le
, sizeof(le
)))
1270 bytes_read
+= sizeof(le
);
1271 } while (count
>= bytes_read
+ sizeof(le
));
1276 static void linereq_free(struct linereq
*lr
)
1280 for (i
= 0; i
< lr
->num_lines
; i
++) {
1281 edge_detector_stop(&lr
->lines
[i
]);
1282 if (lr
->lines
[i
].desc
)
1283 gpiod_free(lr
->lines
[i
].desc
);
1285 kfifo_free(&lr
->events
);
1287 put_device(&lr
->gdev
->dev
);
1291 static int linereq_release(struct inode
*inode
, struct file
*file
)
1293 struct linereq
*lr
= file
->private_data
;
1299 static const struct file_operations line_fileops
= {
1300 .release
= linereq_release
,
1301 .read
= linereq_read
,
1302 .poll
= linereq_poll
,
1303 .owner
= THIS_MODULE
,
1304 .llseek
= noop_llseek
,
1305 .unlocked_ioctl
= linereq_ioctl
,
1306 #ifdef CONFIG_COMPAT
1307 .compat_ioctl
= linereq_ioctl_compat
,
1311 static int linereq_create(struct gpio_device
*gdev
, void __user
*ip
)
1313 struct gpio_v2_line_request ulr
;
1314 struct gpio_v2_line_config
*lc
;
1321 if (copy_from_user(&ulr
, ip
, sizeof(ulr
)))
1324 if ((ulr
.num_lines
== 0) || (ulr
.num_lines
> GPIO_V2_LINES_MAX
))
1327 if (memchr_inv(ulr
.padding
, 0, sizeof(ulr
.padding
)))
1331 ret
= gpio_v2_line_config_validate(lc
, ulr
.num_lines
);
1335 lr
= kzalloc(struct_size(lr
, lines
, ulr
.num_lines
), GFP_KERNEL
);
1340 get_device(&gdev
->dev
);
1342 for (i
= 0; i
< ulr
.num_lines
; i
++) {
1343 lr
->lines
[i
].req
= lr
;
1344 WRITE_ONCE(lr
->lines
[i
].sw_debounced
, 0);
1345 INIT_DELAYED_WORK(&lr
->lines
[i
].work
, debounce_work_func
);
1348 if (ulr
.consumer
[0] != '\0') {
1349 /* label is only initialized if consumer is set */
1350 lr
->label
= kstrndup(ulr
.consumer
, sizeof(ulr
.consumer
) - 1,
1354 goto out_free_linereq
;
1358 mutex_init(&lr
->config_mutex
);
1359 init_waitqueue_head(&lr
->wait
);
1360 lr
->event_buffer_size
= ulr
.event_buffer_size
;
1361 if (lr
->event_buffer_size
== 0)
1362 lr
->event_buffer_size
= ulr
.num_lines
* 16;
1363 else if (lr
->event_buffer_size
> GPIO_V2_LINES_MAX
* 16)
1364 lr
->event_buffer_size
= GPIO_V2_LINES_MAX
* 16;
1366 atomic_set(&lr
->seqno
, 0);
1367 lr
->num_lines
= ulr
.num_lines
;
1369 /* Request each GPIO */
1370 for (i
= 0; i
< ulr
.num_lines
; i
++) {
1371 u32 offset
= ulr
.offsets
[i
];
1372 struct gpio_desc
*desc
= gpiochip_get_desc(gdev
->chip
, offset
);
1375 ret
= PTR_ERR(desc
);
1376 goto out_free_linereq
;
1379 ret
= gpiod_request(desc
, lr
->label
);
1381 goto out_free_linereq
;
1383 lr
->lines
[i
].desc
= desc
;
1384 flags
= gpio_v2_line_config_flags(lc
, i
);
1385 gpio_v2_line_config_flags_to_desc_flags(flags
, &desc
->flags
);
1387 ret
= gpiod_set_transitory(desc
, false);
1389 goto out_free_linereq
;
1392 * Lines have to be requested explicitly for input
1393 * or output, else the line will be treated "as is".
1395 if (flags
& GPIO_V2_LINE_FLAG_OUTPUT
) {
1396 int val
= gpio_v2_line_config_output_value(lc
, i
);
1398 ret
= gpiod_direction_output(desc
, val
);
1400 goto out_free_linereq
;
1401 } else if (flags
& GPIO_V2_LINE_FLAG_INPUT
) {
1402 ret
= gpiod_direction_input(desc
);
1404 goto out_free_linereq
;
1406 ret
= edge_detector_setup(&lr
->lines
[i
], lc
, i
,
1407 flags
& GPIO_V2_LINE_EDGE_FLAGS
);
1409 goto out_free_linereq
;
1412 blocking_notifier_call_chain(&desc
->gdev
->notifier
,
1413 GPIO_V2_LINE_CHANGED_REQUESTED
, desc
);
1415 dev_dbg(&gdev
->dev
, "registered chardev handle for line %d\n",
1419 fd
= get_unused_fd_flags(O_RDONLY
| O_CLOEXEC
);
1422 goto out_free_linereq
;
1425 file
= anon_inode_getfile("gpio-line", &line_fileops
, lr
,
1426 O_RDONLY
| O_CLOEXEC
);
1428 ret
= PTR_ERR(file
);
1429 goto out_put_unused_fd
;
1433 if (copy_to_user(ip
, &ulr
, sizeof(ulr
))) {
1435 * fput() will trigger the release() callback, so do not go onto
1436 * the regular error cleanup path here.
1443 fd_install(fd
, file
);
1445 dev_dbg(&gdev
->dev
, "registered chardev handle for %d lines\n",
1457 #ifdef CONFIG_GPIO_CDEV_V1
1460 * GPIO line event management
1464 * struct lineevent_state - contains the state of a userspace event
1465 * @gdev: the GPIO device the event pertains to
1466 * @label: consumer label used to tag descriptors
1467 * @desc: the GPIO descriptor held by this event
1468 * @eflags: the event flags this line was requested with
1469 * @irq: the interrupt that trigger in response to events on this GPIO
1470 * @wait: wait queue that handles blocking reads of events
1471 * @events: KFIFO for the GPIO events
1472 * @timestamp: cache for the timestamp storing it between hardirq
1473 * and IRQ thread, used to bring the timestamp close to the actual
1476 struct lineevent_state
{
1477 struct gpio_device
*gdev
;
1479 struct gpio_desc
*desc
;
1482 wait_queue_head_t wait
;
1483 DECLARE_KFIFO(events
, struct gpioevent_data
, 16);
1487 #define GPIOEVENT_REQUEST_VALID_FLAGS \
1488 (GPIOEVENT_REQUEST_RISING_EDGE | \
1489 GPIOEVENT_REQUEST_FALLING_EDGE)
1491 static __poll_t
lineevent_poll(struct file
*file
,
1492 struct poll_table_struct
*wait
)
1494 struct lineevent_state
*le
= file
->private_data
;
1495 __poll_t events
= 0;
1497 poll_wait(file
, &le
->wait
, wait
);
1499 if (!kfifo_is_empty_spinlocked_noirqsave(&le
->events
, &le
->wait
.lock
))
1500 events
= EPOLLIN
| EPOLLRDNORM
;
1505 struct compat_gpioeevent_data
{
1506 compat_u64 timestamp
;
1510 static ssize_t
lineevent_read(struct file
*file
,
1515 struct lineevent_state
*le
= file
->private_data
;
1516 struct gpioevent_data ge
;
1517 ssize_t bytes_read
= 0;
1522 * When compatible system call is being used the struct gpioevent_data,
1523 * in case of at least ia32, has different size due to the alignment
1524 * differences. Because we have first member 64 bits followed by one of
1525 * 32 bits there is no gap between them. The only difference is the
1526 * padding at the end of the data structure. Hence, we calculate the
1527 * actual sizeof() and pass this as an argument to copy_to_user() to
1528 * drop unneeded bytes from the output.
1530 if (compat_need_64bit_alignment_fixup())
1531 ge_size
= sizeof(struct compat_gpioeevent_data
);
1533 ge_size
= sizeof(struct gpioevent_data
);
1534 if (count
< ge_size
)
1538 spin_lock(&le
->wait
.lock
);
1539 if (kfifo_is_empty(&le
->events
)) {
1541 spin_unlock(&le
->wait
.lock
);
1545 if (file
->f_flags
& O_NONBLOCK
) {
1546 spin_unlock(&le
->wait
.lock
);
1550 ret
= wait_event_interruptible_locked(le
->wait
,
1551 !kfifo_is_empty(&le
->events
));
1553 spin_unlock(&le
->wait
.lock
);
1558 ret
= kfifo_out(&le
->events
, &ge
, 1);
1559 spin_unlock(&le
->wait
.lock
);
1562 * This should never happen - we were holding the lock
1563 * from the moment we learned the fifo is no longer
1570 if (copy_to_user(buf
+ bytes_read
, &ge
, ge_size
))
1572 bytes_read
+= ge_size
;
1573 } while (count
>= bytes_read
+ ge_size
);
1578 static void lineevent_free(struct lineevent_state
*le
)
1581 free_irq(le
->irq
, le
);
1583 gpiod_free(le
->desc
);
1585 put_device(&le
->gdev
->dev
);
1589 static int lineevent_release(struct inode
*inode
, struct file
*file
)
1591 lineevent_free(file
->private_data
);
1595 static long lineevent_ioctl(struct file
*file
, unsigned int cmd
,
1598 struct lineevent_state
*le
= file
->private_data
;
1599 void __user
*ip
= (void __user
*)arg
;
1600 struct gpiohandle_data ghd
;
1603 * We can get the value for an event line but not set it,
1604 * because it is input by definition.
1606 if (cmd
== GPIOHANDLE_GET_LINE_VALUES_IOCTL
) {
1609 memset(&ghd
, 0, sizeof(ghd
));
1611 val
= gpiod_get_value_cansleep(le
->desc
);
1614 ghd
.values
[0] = val
;
1616 if (copy_to_user(ip
, &ghd
, sizeof(ghd
)))
1624 #ifdef CONFIG_COMPAT
1625 static long lineevent_ioctl_compat(struct file
*file
, unsigned int cmd
,
1628 return lineevent_ioctl(file
, cmd
, (unsigned long)compat_ptr(arg
));
1632 static const struct file_operations lineevent_fileops
= {
1633 .release
= lineevent_release
,
1634 .read
= lineevent_read
,
1635 .poll
= lineevent_poll
,
1636 .owner
= THIS_MODULE
,
1637 .llseek
= noop_llseek
,
1638 .unlocked_ioctl
= lineevent_ioctl
,
1639 #ifdef CONFIG_COMPAT
1640 .compat_ioctl
= lineevent_ioctl_compat
,
1644 static irqreturn_t
lineevent_irq_thread(int irq
, void *p
)
1646 struct lineevent_state
*le
= p
;
1647 struct gpioevent_data ge
;
1650 /* Do not leak kernel stack to userspace */
1651 memset(&ge
, 0, sizeof(ge
));
1654 * We may be running from a nested threaded interrupt in which case
1655 * we didn't get the timestamp from lineevent_irq_handler().
1658 ge
.timestamp
= ktime_get_ns();
1660 ge
.timestamp
= le
->timestamp
;
1662 if (le
->eflags
& GPIOEVENT_REQUEST_RISING_EDGE
1663 && le
->eflags
& GPIOEVENT_REQUEST_FALLING_EDGE
) {
1664 int level
= gpiod_get_value_cansleep(le
->desc
);
1667 /* Emit low-to-high event */
1668 ge
.id
= GPIOEVENT_EVENT_RISING_EDGE
;
1670 /* Emit high-to-low event */
1671 ge
.id
= GPIOEVENT_EVENT_FALLING_EDGE
;
1672 } else if (le
->eflags
& GPIOEVENT_REQUEST_RISING_EDGE
) {
1673 /* Emit low-to-high event */
1674 ge
.id
= GPIOEVENT_EVENT_RISING_EDGE
;
1675 } else if (le
->eflags
& GPIOEVENT_REQUEST_FALLING_EDGE
) {
1676 /* Emit high-to-low event */
1677 ge
.id
= GPIOEVENT_EVENT_FALLING_EDGE
;
1682 ret
= kfifo_in_spinlocked_noirqsave(&le
->events
, &ge
,
1685 wake_up_poll(&le
->wait
, EPOLLIN
);
1687 pr_debug_ratelimited("event FIFO is full - event dropped\n");
1692 static irqreturn_t
lineevent_irq_handler(int irq
, void *p
)
1694 struct lineevent_state
*le
= p
;
1697 * Just store the timestamp in hardirq context so we get it as
1698 * close in time as possible to the actual event.
1700 le
->timestamp
= ktime_get_ns();
1702 return IRQ_WAKE_THREAD
;
1705 static int lineevent_create(struct gpio_device
*gdev
, void __user
*ip
)
1707 struct gpioevent_request eventreq
;
1708 struct lineevent_state
*le
;
1709 struct gpio_desc
*desc
;
1716 int irq
, irqflags
= 0;
1718 if (copy_from_user(&eventreq
, ip
, sizeof(eventreq
)))
1721 offset
= eventreq
.lineoffset
;
1722 lflags
= eventreq
.handleflags
;
1723 eflags
= eventreq
.eventflags
;
1725 desc
= gpiochip_get_desc(gdev
->chip
, offset
);
1727 return PTR_ERR(desc
);
1729 /* Return an error if a unknown flag is set */
1730 if ((lflags
& ~GPIOHANDLE_REQUEST_VALID_FLAGS
) ||
1731 (eflags
& ~GPIOEVENT_REQUEST_VALID_FLAGS
))
1734 /* This is just wrong: we don't look for events on output lines */
1735 if ((lflags
& GPIOHANDLE_REQUEST_OUTPUT
) ||
1736 (lflags
& GPIOHANDLE_REQUEST_OPEN_DRAIN
) ||
1737 (lflags
& GPIOHANDLE_REQUEST_OPEN_SOURCE
))
1740 /* Only one bias flag can be set. */
1741 if (((lflags
& GPIOHANDLE_REQUEST_BIAS_DISABLE
) &&
1742 (lflags
& (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN
|
1743 GPIOHANDLE_REQUEST_BIAS_PULL_UP
))) ||
1744 ((lflags
& GPIOHANDLE_REQUEST_BIAS_PULL_DOWN
) &&
1745 (lflags
& GPIOHANDLE_REQUEST_BIAS_PULL_UP
)))
1748 le
= kzalloc(sizeof(*le
), GFP_KERNEL
);
1752 get_device(&gdev
->dev
);
1754 if (eventreq
.consumer_label
[0] != '\0') {
1755 /* label is only initialized if consumer_label is set */
1756 le
->label
= kstrndup(eventreq
.consumer_label
,
1757 sizeof(eventreq
.consumer_label
) - 1,
1765 ret
= gpiod_request(desc
, le
->label
);
1769 le
->eflags
= eflags
;
1771 linehandle_flags_to_desc_flags(lflags
, &desc
->flags
);
1773 ret
= gpiod_direction_input(desc
);
1777 blocking_notifier_call_chain(&desc
->gdev
->notifier
,
1778 GPIO_V2_LINE_CHANGED_REQUESTED
, desc
);
1780 irq
= gpiod_to_irq(desc
);
1787 if (eflags
& GPIOEVENT_REQUEST_RISING_EDGE
)
1788 irqflags
|= test_bit(FLAG_ACTIVE_LOW
, &desc
->flags
) ?
1789 IRQF_TRIGGER_FALLING
: IRQF_TRIGGER_RISING
;
1790 if (eflags
& GPIOEVENT_REQUEST_FALLING_EDGE
)
1791 irqflags
|= test_bit(FLAG_ACTIVE_LOW
, &desc
->flags
) ?
1792 IRQF_TRIGGER_RISING
: IRQF_TRIGGER_FALLING
;
1793 irqflags
|= IRQF_ONESHOT
;
1795 INIT_KFIFO(le
->events
);
1796 init_waitqueue_head(&le
->wait
);
1798 /* Request a thread to read the events */
1799 ret
= request_threaded_irq(le
->irq
,
1800 lineevent_irq_handler
,
1801 lineevent_irq_thread
,
1808 fd
= get_unused_fd_flags(O_RDONLY
| O_CLOEXEC
);
1814 file
= anon_inode_getfile("gpio-event",
1817 O_RDONLY
| O_CLOEXEC
);
1819 ret
= PTR_ERR(file
);
1820 goto out_put_unused_fd
;
1824 if (copy_to_user(ip
, &eventreq
, sizeof(eventreq
))) {
1826 * fput() will trigger the release() callback, so do not go onto
1827 * the regular error cleanup path here.
1834 fd_install(fd
, file
);
1845 static void gpio_v2_line_info_to_v1(struct gpio_v2_line_info
*info_v2
,
1846 struct gpioline_info
*info_v1
)
1848 u64 flagsv2
= info_v2
->flags
;
1850 memcpy(info_v1
->name
, info_v2
->name
, sizeof(info_v1
->name
));
1851 memcpy(info_v1
->consumer
, info_v2
->consumer
, sizeof(info_v1
->consumer
));
1852 info_v1
->line_offset
= info_v2
->offset
;
1855 if (flagsv2
& GPIO_V2_LINE_FLAG_USED
)
1856 info_v1
->flags
|= GPIOLINE_FLAG_KERNEL
;
1858 if (flagsv2
& GPIO_V2_LINE_FLAG_OUTPUT
)
1859 info_v1
->flags
|= GPIOLINE_FLAG_IS_OUT
;
1861 if (flagsv2
& GPIO_V2_LINE_FLAG_ACTIVE_LOW
)
1862 info_v1
->flags
|= GPIOLINE_FLAG_ACTIVE_LOW
;
1864 if (flagsv2
& GPIO_V2_LINE_FLAG_OPEN_DRAIN
)
1865 info_v1
->flags
|= GPIOLINE_FLAG_OPEN_DRAIN
;
1866 if (flagsv2
& GPIO_V2_LINE_FLAG_OPEN_SOURCE
)
1867 info_v1
->flags
|= GPIOLINE_FLAG_OPEN_SOURCE
;
1869 if (flagsv2
& GPIO_V2_LINE_FLAG_BIAS_PULL_UP
)
1870 info_v1
->flags
|= GPIOLINE_FLAG_BIAS_PULL_UP
;
1871 if (flagsv2
& GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN
)
1872 info_v1
->flags
|= GPIOLINE_FLAG_BIAS_PULL_DOWN
;
1873 if (flagsv2
& GPIO_V2_LINE_FLAG_BIAS_DISABLED
)
1874 info_v1
->flags
|= GPIOLINE_FLAG_BIAS_DISABLE
;
1877 static void gpio_v2_line_info_changed_to_v1(
1878 struct gpio_v2_line_info_changed
*lic_v2
,
1879 struct gpioline_info_changed
*lic_v1
)
1881 gpio_v2_line_info_to_v1(&lic_v2
->info
, &lic_v1
->info
);
1882 lic_v1
->timestamp
= lic_v2
->timestamp_ns
;
1883 lic_v1
->event_type
= lic_v2
->event_type
;
1886 #endif /* CONFIG_GPIO_CDEV_V1 */
1888 static void gpio_desc_to_lineinfo(struct gpio_desc
*desc
,
1889 struct gpio_v2_line_info
*info
)
1891 struct gpio_chip
*gc
= desc
->gdev
->chip
;
1892 bool ok_for_pinctrl
;
1893 unsigned long flags
;
1894 u32 debounce_period_us
;
1895 unsigned int num_attrs
= 0;
1897 memset(info
, 0, sizeof(*info
));
1898 info
->offset
= gpio_chip_hwgpio(desc
);
1901 * This function takes a mutex so we must check this before taking
1904 * FIXME: find a non-racy way to retrieve this information. Maybe a
1905 * lock common to both frameworks?
1908 pinctrl_gpio_can_use_line(gc
->base
+ info
->offset
);
1910 spin_lock_irqsave(&gpio_lock
, flags
);
1913 strscpy(info
->name
, desc
->name
, sizeof(info
->name
));
1916 strscpy(info
->consumer
, desc
->label
, sizeof(info
->consumer
));
1919 * Userspace only need to know that the kernel is using this GPIO so
1923 if (test_bit(FLAG_REQUESTED
, &desc
->flags
) ||
1924 test_bit(FLAG_IS_HOGGED
, &desc
->flags
) ||
1925 test_bit(FLAG_USED_AS_IRQ
, &desc
->flags
) ||
1926 test_bit(FLAG_EXPORT
, &desc
->flags
) ||
1927 test_bit(FLAG_SYSFS
, &desc
->flags
) ||
1928 !gpiochip_line_is_valid(gc
, info
->offset
) ||
1930 info
->flags
|= GPIO_V2_LINE_FLAG_USED
;
1932 if (test_bit(FLAG_IS_OUT
, &desc
->flags
))
1933 info
->flags
|= GPIO_V2_LINE_FLAG_OUTPUT
;
1935 info
->flags
|= GPIO_V2_LINE_FLAG_INPUT
;
1937 if (test_bit(FLAG_ACTIVE_LOW
, &desc
->flags
))
1938 info
->flags
|= GPIO_V2_LINE_FLAG_ACTIVE_LOW
;
1940 if (test_bit(FLAG_OPEN_DRAIN
, &desc
->flags
))
1941 info
->flags
|= GPIO_V2_LINE_FLAG_OPEN_DRAIN
;
1942 if (test_bit(FLAG_OPEN_SOURCE
, &desc
->flags
))
1943 info
->flags
|= GPIO_V2_LINE_FLAG_OPEN_SOURCE
;
1945 if (test_bit(FLAG_BIAS_DISABLE
, &desc
->flags
))
1946 info
->flags
|= GPIO_V2_LINE_FLAG_BIAS_DISABLED
;
1947 if (test_bit(FLAG_PULL_DOWN
, &desc
->flags
))
1948 info
->flags
|= GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN
;
1949 if (test_bit(FLAG_PULL_UP
, &desc
->flags
))
1950 info
->flags
|= GPIO_V2_LINE_FLAG_BIAS_PULL_UP
;
1952 if (test_bit(FLAG_EDGE_RISING
, &desc
->flags
))
1953 info
->flags
|= GPIO_V2_LINE_FLAG_EDGE_RISING
;
1954 if (test_bit(FLAG_EDGE_FALLING
, &desc
->flags
))
1955 info
->flags
|= GPIO_V2_LINE_FLAG_EDGE_FALLING
;
1957 if (test_bit(FLAG_EVENT_CLOCK_REALTIME
, &desc
->flags
))
1958 info
->flags
|= GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME
;
1960 debounce_period_us
= READ_ONCE(desc
->debounce_period_us
);
1961 if (debounce_period_us
) {
1962 info
->attrs
[num_attrs
].id
= GPIO_V2_LINE_ATTR_ID_DEBOUNCE
;
1963 info
->attrs
[num_attrs
].debounce_period_us
= debounce_period_us
;
1966 info
->num_attrs
= num_attrs
;
1968 spin_unlock_irqrestore(&gpio_lock
, flags
);
1971 struct gpio_chardev_data
{
1972 struct gpio_device
*gdev
;
1973 wait_queue_head_t wait
;
1974 DECLARE_KFIFO(events
, struct gpio_v2_line_info_changed
, 32);
1975 struct notifier_block lineinfo_changed_nb
;
1976 unsigned long *watched_lines
;
1977 #ifdef CONFIG_GPIO_CDEV_V1
1978 atomic_t watch_abi_version
;
1982 #ifdef CONFIG_GPIO_CDEV_V1
1984 * returns 0 if the versions match, else the previously selected ABI version
1986 static int lineinfo_ensure_abi_version(struct gpio_chardev_data
*cdata
,
1987 unsigned int version
)
1989 int abiv
= atomic_cmpxchg(&cdata
->watch_abi_version
, 0, version
);
1991 if (abiv
== version
)
1998 static int lineinfo_get(struct gpio_chardev_data
*cdev
, void __user
*ip
,
2001 struct gpio_desc
*desc
;
2002 struct gpio_v2_line_info lineinfo
;
2004 if (copy_from_user(&lineinfo
, ip
, sizeof(lineinfo
)))
2007 if (memchr_inv(lineinfo
.padding
, 0, sizeof(lineinfo
.padding
)))
2010 desc
= gpiochip_get_desc(cdev
->gdev
->chip
, lineinfo
.offset
);
2012 return PTR_ERR(desc
);
2015 #ifdef CONFIG_GPIO_CDEV_V1
2016 if (lineinfo_ensure_abi_version(cdev
, 2))
2019 if (test_and_set_bit(lineinfo
.offset
, cdev
->watched_lines
))
2022 gpio_desc_to_lineinfo(desc
, &lineinfo
);
2024 if (copy_to_user(ip
, &lineinfo
, sizeof(lineinfo
))) {
2026 clear_bit(lineinfo
.offset
, cdev
->watched_lines
);
2034 * gpio_ioctl() - ioctl handler for the GPIO chardev
2036 static long gpio_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
2038 struct gpio_chardev_data
*cdev
= file
->private_data
;
2039 struct gpio_device
*gdev
= cdev
->gdev
;
2040 struct gpio_chip
*gc
= gdev
->chip
;
2041 void __user
*ip
= (void __user
*)arg
;
2044 /* We fail any subsequent ioctl():s when the chip is gone */
2048 /* Fill in the struct and pass to userspace */
2049 if (cmd
== GPIO_GET_CHIPINFO_IOCTL
) {
2050 struct gpiochip_info chipinfo
;
2052 memset(&chipinfo
, 0, sizeof(chipinfo
));
2054 strscpy(chipinfo
.name
, dev_name(&gdev
->dev
),
2055 sizeof(chipinfo
.name
));
2056 strscpy(chipinfo
.label
, gdev
->label
,
2057 sizeof(chipinfo
.label
));
2058 chipinfo
.lines
= gdev
->ngpio
;
2059 if (copy_to_user(ip
, &chipinfo
, sizeof(chipinfo
)))
2062 #ifdef CONFIG_GPIO_CDEV_V1
2063 } else if (cmd
== GPIO_GET_LINEINFO_IOCTL
) {
2064 struct gpio_desc
*desc
;
2065 struct gpioline_info lineinfo
;
2066 struct gpio_v2_line_info lineinfo_v2
;
2068 if (copy_from_user(&lineinfo
, ip
, sizeof(lineinfo
)))
2071 /* this doubles as a range check on line_offset */
2072 desc
= gpiochip_get_desc(gc
, lineinfo
.line_offset
);
2074 return PTR_ERR(desc
);
2076 gpio_desc_to_lineinfo(desc
, &lineinfo_v2
);
2077 gpio_v2_line_info_to_v1(&lineinfo_v2
, &lineinfo
);
2079 if (copy_to_user(ip
, &lineinfo
, sizeof(lineinfo
)))
2082 } else if (cmd
== GPIO_GET_LINEHANDLE_IOCTL
) {
2083 return linehandle_create(gdev
, ip
);
2084 } else if (cmd
== GPIO_GET_LINEEVENT_IOCTL
) {
2085 return lineevent_create(gdev
, ip
);
2086 } else if (cmd
== GPIO_GET_LINEINFO_WATCH_IOCTL
) {
2087 struct gpio_desc
*desc
;
2088 struct gpioline_info lineinfo
;
2089 struct gpio_v2_line_info lineinfo_v2
;
2091 if (copy_from_user(&lineinfo
, ip
, sizeof(lineinfo
)))
2094 /* this doubles as a range check on line_offset */
2095 desc
= gpiochip_get_desc(gc
, lineinfo
.line_offset
);
2097 return PTR_ERR(desc
);
2099 if (lineinfo_ensure_abi_version(cdev
, 1))
2102 if (test_and_set_bit(lineinfo
.line_offset
, cdev
->watched_lines
))
2105 gpio_desc_to_lineinfo(desc
, &lineinfo_v2
);
2106 gpio_v2_line_info_to_v1(&lineinfo_v2
, &lineinfo
);
2108 if (copy_to_user(ip
, &lineinfo
, sizeof(lineinfo
))) {
2109 clear_bit(lineinfo
.line_offset
, cdev
->watched_lines
);
2114 #endif /* CONFIG_GPIO_CDEV_V1 */
2115 } else if (cmd
== GPIO_V2_GET_LINEINFO_IOCTL
||
2116 cmd
== GPIO_V2_GET_LINEINFO_WATCH_IOCTL
) {
2117 return lineinfo_get(cdev
, ip
,
2118 cmd
== GPIO_V2_GET_LINEINFO_WATCH_IOCTL
);
2119 } else if (cmd
== GPIO_V2_GET_LINE_IOCTL
) {
2120 return linereq_create(gdev
, ip
);
2121 } else if (cmd
== GPIO_GET_LINEINFO_UNWATCH_IOCTL
) {
2122 if (copy_from_user(&offset
, ip
, sizeof(offset
)))
2125 if (offset
>= cdev
->gdev
->ngpio
)
2128 if (!test_and_clear_bit(offset
, cdev
->watched_lines
))
2136 #ifdef CONFIG_COMPAT
2137 static long gpio_ioctl_compat(struct file
*file
, unsigned int cmd
,
2140 return gpio_ioctl(file
, cmd
, (unsigned long)compat_ptr(arg
));
2144 static struct gpio_chardev_data
*
2145 to_gpio_chardev_data(struct notifier_block
*nb
)
2147 return container_of(nb
, struct gpio_chardev_data
, lineinfo_changed_nb
);
2150 static int lineinfo_changed_notify(struct notifier_block
*nb
,
2151 unsigned long action
, void *data
)
2153 struct gpio_chardev_data
*cdev
= to_gpio_chardev_data(nb
);
2154 struct gpio_v2_line_info_changed chg
;
2155 struct gpio_desc
*desc
= data
;
2158 if (!test_bit(gpio_chip_hwgpio(desc
), cdev
->watched_lines
))
2161 memset(&chg
, 0, sizeof(chg
));
2162 chg
.event_type
= action
;
2163 chg
.timestamp_ns
= ktime_get_ns();
2164 gpio_desc_to_lineinfo(desc
, &chg
.info
);
2166 ret
= kfifo_in_spinlocked(&cdev
->events
, &chg
, 1, &cdev
->wait
.lock
);
2168 wake_up_poll(&cdev
->wait
, EPOLLIN
);
2170 pr_debug_ratelimited("lineinfo event FIFO is full - event dropped\n");
2175 static __poll_t
lineinfo_watch_poll(struct file
*file
,
2176 struct poll_table_struct
*pollt
)
2178 struct gpio_chardev_data
*cdev
= file
->private_data
;
2179 __poll_t events
= 0;
2181 poll_wait(file
, &cdev
->wait
, pollt
);
2183 if (!kfifo_is_empty_spinlocked_noirqsave(&cdev
->events
,
2185 events
= EPOLLIN
| EPOLLRDNORM
;
2190 static ssize_t
lineinfo_watch_read(struct file
*file
, char __user
*buf
,
2191 size_t count
, loff_t
*off
)
2193 struct gpio_chardev_data
*cdev
= file
->private_data
;
2194 struct gpio_v2_line_info_changed event
;
2195 ssize_t bytes_read
= 0;
2199 #ifndef CONFIG_GPIO_CDEV_V1
2200 event_size
= sizeof(struct gpio_v2_line_info_changed
);
2201 if (count
< event_size
)
2206 spin_lock(&cdev
->wait
.lock
);
2207 if (kfifo_is_empty(&cdev
->events
)) {
2209 spin_unlock(&cdev
->wait
.lock
);
2213 if (file
->f_flags
& O_NONBLOCK
) {
2214 spin_unlock(&cdev
->wait
.lock
);
2218 ret
= wait_event_interruptible_locked(cdev
->wait
,
2219 !kfifo_is_empty(&cdev
->events
));
2221 spin_unlock(&cdev
->wait
.lock
);
2225 #ifdef CONFIG_GPIO_CDEV_V1
2226 /* must be after kfifo check so watch_abi_version is set */
2227 if (atomic_read(&cdev
->watch_abi_version
) == 2)
2228 event_size
= sizeof(struct gpio_v2_line_info_changed
);
2230 event_size
= sizeof(struct gpioline_info_changed
);
2231 if (count
< event_size
) {
2232 spin_unlock(&cdev
->wait
.lock
);
2236 ret
= kfifo_out(&cdev
->events
, &event
, 1);
2237 spin_unlock(&cdev
->wait
.lock
);
2241 /* We should never get here. See lineevent_read(). */
2244 #ifdef CONFIG_GPIO_CDEV_V1
2245 if (event_size
== sizeof(struct gpio_v2_line_info_changed
)) {
2246 if (copy_to_user(buf
+ bytes_read
, &event
, event_size
))
2249 struct gpioline_info_changed event_v1
;
2251 gpio_v2_line_info_changed_to_v1(&event
, &event_v1
);
2252 if (copy_to_user(buf
+ bytes_read
, &event_v1
,
2257 if (copy_to_user(buf
+ bytes_read
, &event
, event_size
))
2260 bytes_read
+= event_size
;
2261 } while (count
>= bytes_read
+ sizeof(event
));
2267 * gpio_chrdev_open() - open the chardev for ioctl operations
2268 * @inode: inode for this chardev
2269 * @file: file struct for storing private data
2270 * Returns 0 on success
2272 static int gpio_chrdev_open(struct inode
*inode
, struct file
*file
)
2274 struct gpio_device
*gdev
= container_of(inode
->i_cdev
,
2275 struct gpio_device
, chrdev
);
2276 struct gpio_chardev_data
*cdev
;
2279 /* Fail on open if the backing gpiochip is gone */
2283 cdev
= kzalloc(sizeof(*cdev
), GFP_KERNEL
);
2287 cdev
->watched_lines
= bitmap_zalloc(gdev
->chip
->ngpio
, GFP_KERNEL
);
2288 if (!cdev
->watched_lines
)
2291 init_waitqueue_head(&cdev
->wait
);
2292 INIT_KFIFO(cdev
->events
);
2295 cdev
->lineinfo_changed_nb
.notifier_call
= lineinfo_changed_notify
;
2296 ret
= blocking_notifier_chain_register(&gdev
->notifier
,
2297 &cdev
->lineinfo_changed_nb
);
2299 goto out_free_bitmap
;
2301 get_device(&gdev
->dev
);
2302 file
->private_data
= cdev
;
2304 ret
= nonseekable_open(inode
, file
);
2306 goto out_unregister_notifier
;
2310 out_unregister_notifier
:
2311 blocking_notifier_chain_unregister(&gdev
->notifier
,
2312 &cdev
->lineinfo_changed_nb
);
2314 bitmap_free(cdev
->watched_lines
);
2321 * gpio_chrdev_release() - close chardev after ioctl operations
2322 * @inode: inode for this chardev
2323 * @file: file struct for storing private data
2324 * Returns 0 on success
2326 static int gpio_chrdev_release(struct inode
*inode
, struct file
*file
)
2328 struct gpio_chardev_data
*cdev
= file
->private_data
;
2329 struct gpio_device
*gdev
= cdev
->gdev
;
2331 bitmap_free(cdev
->watched_lines
);
2332 blocking_notifier_chain_unregister(&gdev
->notifier
,
2333 &cdev
->lineinfo_changed_nb
);
2334 put_device(&gdev
->dev
);
2340 static const struct file_operations gpio_fileops
= {
2341 .release
= gpio_chrdev_release
,
2342 .open
= gpio_chrdev_open
,
2343 .poll
= lineinfo_watch_poll
,
2344 .read
= lineinfo_watch_read
,
2345 .owner
= THIS_MODULE
,
2346 .llseek
= no_llseek
,
2347 .unlocked_ioctl
= gpio_ioctl
,
2348 #ifdef CONFIG_COMPAT
2349 .compat_ioctl
= gpio_ioctl_compat
,
2353 int gpiolib_cdev_register(struct gpio_device
*gdev
, dev_t devt
)
2357 cdev_init(&gdev
->chrdev
, &gpio_fileops
);
2358 gdev
->chrdev
.owner
= THIS_MODULE
;
2359 gdev
->dev
.devt
= MKDEV(MAJOR(devt
), gdev
->id
);
2361 ret
= cdev_device_add(&gdev
->chrdev
, &gdev
->dev
);
2365 chip_dbg(gdev
->chip
, "added GPIO chardev (%d:%d)\n",
2366 MAJOR(devt
), gdev
->id
);
2371 void gpiolib_cdev_unregister(struct gpio_device
*gdev
)
2373 cdev_device_del(&gdev
->chrdev
, &gdev
->dev
);