Lines Matching refs:le
692 struct lineevent_state *le = filep->private_data; in lineevent_poll() local
695 poll_wait(filep, &le->wait, wait); in lineevent_poll()
697 if (!kfifo_is_empty(&le->events)) in lineevent_poll()
709 struct lineevent_state *le = filep->private_data; in lineevent_read() local
717 if (kfifo_is_empty(&le->events)) { in lineevent_read()
721 ret = wait_event_interruptible(le->wait, in lineevent_read()
722 !kfifo_is_empty(&le->events)); in lineevent_read()
727 if (mutex_lock_interruptible(&le->read_lock)) in lineevent_read()
729 ret = kfifo_to_user(&le->events, buf, count, &copied); in lineevent_read()
730 mutex_unlock(&le->read_lock); in lineevent_read()
751 struct lineevent_state *le = filep->private_data; in lineevent_release() local
752 struct gpio_device *gdev = le->gdev; in lineevent_release()
754 free_irq(le->irq, le); in lineevent_release()
755 gpiod_free(le->desc); in lineevent_release()
756 kfree(le->label); in lineevent_release()
757 kfree(le); in lineevent_release()
765 struct lineevent_state *le = filep->private_data; in lineevent_ioctl() local
778 val = gpiod_get_value_cansleep(le->desc); in lineevent_ioctl()
813 struct lineevent_state *le = p; in lineevent_irq_thread() local
820 ge.timestamp = le->timestamp; in lineevent_irq_thread()
821 level = gpiod_get_value_cansleep(le->desc); in lineevent_irq_thread()
823 if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE in lineevent_irq_thread()
824 && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { in lineevent_irq_thread()
831 } else if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE && level) { in lineevent_irq_thread()
834 } else if (le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE && !level) { in lineevent_irq_thread()
841 ret = kfifo_put(&le->events, ge); in lineevent_irq_thread()
843 wake_up_poll(&le->wait, EPOLLIN); in lineevent_irq_thread()
850 struct lineevent_state *le = p; in lineevent_irq_handler() local
856 le->timestamp = ktime_get_real_ns(); in lineevent_irq_handler()
864 struct lineevent_state *le; in lineevent_create() local
877 le = kzalloc(sizeof(*le), GFP_KERNEL); in lineevent_create()
878 if (!le) in lineevent_create()
880 le->gdev = gdev; in lineevent_create()
886 le->label = kstrdup(eventreq.consumer_label, in lineevent_create()
888 if (!le->label) { in lineevent_create()
917 ret = gpiod_request(desc, le->label); in lineevent_create()
920 le->desc = desc; in lineevent_create()
921 le->eflags = eflags; in lineevent_create()
934 le->irq = gpiod_to_irq(desc); in lineevent_create()
935 if (le->irq <= 0) { in lineevent_create()
947 INIT_KFIFO(le->events); in lineevent_create()
948 init_waitqueue_head(&le->wait); in lineevent_create()
949 mutex_init(&le->read_lock); in lineevent_create()
952 ret = request_threaded_irq(le->irq, in lineevent_create()
956 le->label, in lineevent_create()
957 le); in lineevent_create()
969 le, in lineevent_create()
994 free_irq(le->irq, le); in lineevent_create()
996 gpiod_free(le->desc); in lineevent_create()
998 kfree(le->label); in lineevent_create()
1000 kfree(le); in lineevent_create()