Lines Matching refs:le

701 			      struct gpio_v2_line_event *le)  in linereq_put_event()  argument
710 kfifo_in(&lr->events, le, 1); in linereq_put_event()
760 struct gpio_v2_line_event le; in process_hw_ts_thread() local
770 memset(&le, 0, sizeof(le)); in process_hw_ts_thread()
772 le.timestamp_ns = line->timestamp_ns; in process_hw_ts_thread()
784 le.id = line_event_id(level); in process_hw_ts_thread()
787 le.id = GPIO_V2_LINE_EVENT_RISING_EDGE; in process_hw_ts_thread()
790 le.id = GPIO_V2_LINE_EVENT_FALLING_EDGE; in process_hw_ts_thread()
795 le.line_seqno = line->line_seqno; in process_hw_ts_thread()
796 le.seqno = (lr->num_lines == 1) ? le.line_seqno : line->req_seqno; in process_hw_ts_thread()
797 le.offset = gpio_chip_hwgpio(line->desc); in process_hw_ts_thread()
799 linereq_put_event(lr, &le); in process_hw_ts_thread()
879 struct gpio_v2_line_event le; in edge_irq_thread() local
882 memset(&le, 0, sizeof(le)); in edge_irq_thread()
885 le.timestamp_ns = line->timestamp_ns; in edge_irq_thread()
892 le.timestamp_ns = line_event_timestamp(line); in edge_irq_thread()
900 le.id = line_event_id(gpiod_get_value_cansleep(line->desc)); in edge_irq_thread()
903 le.id = GPIO_V2_LINE_EVENT_RISING_EDGE; in edge_irq_thread()
906 le.id = GPIO_V2_LINE_EVENT_FALLING_EDGE; in edge_irq_thread()
912 le.line_seqno = line->line_seqno; in edge_irq_thread()
913 le.seqno = (lr->num_lines == 1) ? le.line_seqno : line->req_seqno; in edge_irq_thread()
914 le.offset = gpio_chip_hwgpio(line->desc); in edge_irq_thread()
916 linereq_put_event(lr, &le); in edge_irq_thread()
970 struct gpio_v2_line_event le; in debounce_work_func() local
1008 memset(&le, 0, sizeof(le)); in debounce_work_func()
1011 le.timestamp_ns = line_event_timestamp(line); in debounce_work_func()
1012 le.offset = gpio_chip_hwgpio(line->desc); in debounce_work_func()
1020 le.line_seqno = line->line_seqno; in debounce_work_func()
1021 le.seqno = (lr->num_lines == 1) ? in debounce_work_func()
1022 le.line_seqno : atomic_add_return(diff_seqno, &lr->seqno); in debounce_work_func()
1027 le.line_seqno = line->line_seqno; in debounce_work_func()
1028 le.seqno = (lr->num_lines == 1) ? in debounce_work_func()
1029 le.line_seqno : atomic_inc_return(&lr->seqno); in debounce_work_func()
1032 le.id = line_event_id(level); in debounce_work_func()
1034 linereq_put_event(lr, &le); in debounce_work_func()
1624 struct gpio_v2_line_event le; in linereq_read() local
1633 if (count < sizeof(le)) in linereq_read()
1651 if (kfifo_out(&lr->events, &le, 1) != 1) { in linereq_read()
1662 if (copy_to_user(buf + bytes_read, &le, sizeof(le))) in linereq_read()
1664 bytes_read += sizeof(le); in linereq_read()
1665 } while (count >= bytes_read + sizeof(le)); in linereq_read()
1926 struct lineevent_state *le = file->private_data; in lineevent_poll() local
1929 guard(srcu)(&le->gdev->srcu); in lineevent_poll()
1931 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_poll()
1934 poll_wait(file, &le->wait, wait); in lineevent_poll()
1936 if (!kfifo_is_empty_spinlocked_noirqsave(&le->events, &le->wait.lock)) in lineevent_poll()
1945 struct lineevent_state *le = container_of(nb, struct lineevent_state, in lineevent_unregistered_notify() local
1948 wake_up_poll(&le->wait, EPOLLIN | EPOLLERR); in lineevent_unregistered_notify()
1961 struct lineevent_state *le = file->private_data; in lineevent_read() local
1967 guard(srcu)(&le->gdev->srcu); in lineevent_read()
1969 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_read()
1989 scoped_guard(spinlock, &le->wait.lock) { in lineevent_read()
1990 if (kfifo_is_empty(&le->events)) { in lineevent_read()
1997 ret = wait_event_interruptible_locked(le->wait, in lineevent_read()
1998 !kfifo_is_empty(&le->events)); in lineevent_read()
2003 if (kfifo_out(&le->events, &ge, 1) != 1) { in lineevent_read()
2022 static void lineevent_free(struct lineevent_state *le) in lineevent_free() argument
2024 if (le->device_unregistered_nb.notifier_call) in lineevent_free()
2025 blocking_notifier_chain_unregister(&le->gdev->device_notifier, in lineevent_free()
2026 &le->device_unregistered_nb); in lineevent_free()
2027 if (le->irq) in lineevent_free()
2028 free_irq_label(free_irq(le->irq, le)); in lineevent_free()
2029 if (le->desc) in lineevent_free()
2030 gpiod_free(le->desc); in lineevent_free()
2031 kfree(le->label); in lineevent_free()
2032 gpio_device_put(le->gdev); in lineevent_free()
2033 kfree(le); in lineevent_free()
2045 struct lineevent_state *le = file->private_data; in lineevent_ioctl() local
2049 guard(srcu)(&le->gdev->srcu); in lineevent_ioctl()
2051 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_ioctl()
2063 val = gpiod_get_value_cansleep(le->desc); in lineevent_ioctl()
2098 struct lineevent_state *le = p; in lineevent_irq_thread() local
2109 if (!le->timestamp) in lineevent_irq_thread()
2112 ge.timestamp = le->timestamp; in lineevent_irq_thread()
2114 if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE in lineevent_irq_thread()
2115 && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { in lineevent_irq_thread()
2116 int level = gpiod_get_value_cansleep(le->desc); in lineevent_irq_thread()
2124 } else if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE) { in lineevent_irq_thread()
2127 } else if (le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { in lineevent_irq_thread()
2134 ret = kfifo_in_spinlocked_noirqsave(&le->events, &ge, in lineevent_irq_thread()
2135 1, &le->wait.lock); in lineevent_irq_thread()
2137 wake_up_poll(&le->wait, EPOLLIN); in lineevent_irq_thread()
2146 struct lineevent_state *le = p; in lineevent_irq_handler() local
2152 le->timestamp = ktime_get_ns(); in lineevent_irq_handler()
2160 struct lineevent_state *le; in lineevent_create() local
2201 le = kzalloc(sizeof(*le), GFP_KERNEL); in lineevent_create()
2202 if (!le) in lineevent_create()
2204 le->gdev = gpio_device_get(gdev); in lineevent_create()
2208 le->label = kstrndup(eventreq.consumer_label, in lineevent_create()
2211 if (!le->label) { in lineevent_create()
2217 ret = gpiod_request_user(desc, le->label); in lineevent_create()
2220 le->desc = desc; in lineevent_create()
2221 le->eflags = eflags; in lineevent_create()
2245 INIT_KFIFO(le->events); in lineevent_create()
2246 init_waitqueue_head(&le->wait); in lineevent_create()
2248 le->device_unregistered_nb.notifier_call = lineevent_unregistered_notify; in lineevent_create()
2250 &le->device_unregistered_nb); in lineevent_create()
2254 label = make_irq_label(le->label); in lineevent_create()
2266 le); in lineevent_create()
2272 le->irq = irq; in lineevent_create()
2282 le, in lineevent_create()
2307 lineevent_free(le); in lineevent_create()