1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * by Artur Lipowski <alipowski@interia.pl>
8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
10 #include <linux/module.h>
11 #include <linux/mutex.h>
12 #include <linux/device.h>
13 #include <linux/file.h>
14 #include <linux/idr.h>
15 #include <linux/poll.h>
16 #include <linux/sched.h>
17 #include <linux/wait.h>
19 #include "rc-core-priv.h"
20 #include <uapi/linux/lirc.h>
22 #define LIRCBUF_SIZE 1024
24 static dev_t lirc_base_dev
;
26 /* Used to keep track of allocated lirc devices */
27 static DEFINE_IDA(lirc_ida
);
29 /* Only used for sysfs but defined to void otherwise */
30 static struct class *lirc_class
;
33 * ir_lirc_raw_event() - Send raw IR data to lirc to be relayed to userspace
35 * @dev: the struct rc_dev descriptor of the device
36 * @ev: the struct ir_raw_event descriptor of the pulse/space
38 void ir_lirc_raw_event(struct rc_dev
*dev
, struct ir_raw_event ev
)
47 * Userspace expects a long space event before the start of
48 * the signal to use as a sync. This may be done with repeat
49 * packets and normal samples. But if a reset has been sent
50 * then we assume that a long time has passed, so we send a
51 * space with the maximum time value.
53 sample
= LIRC_SPACE(LIRC_VALUE_MASK
);
54 dev_dbg(&dev
->dev
, "delivering reset sync space to lirc_dev\n");
57 } else if (ev
.carrier_report
) {
58 sample
= LIRC_FREQUENCY(ev
.carrier
);
59 dev_dbg(&dev
->dev
, "carrier report (freq: %d)\n", sample
);
62 } else if (ev
.timeout
) {
66 dev
->gap_start
= ktime_get();
68 dev
->gap_duration
= ev
.duration
;
70 sample
= LIRC_TIMEOUT(ev
.duration
/ 1000);
71 dev_dbg(&dev
->dev
, "timeout report (duration: %d)\n", sample
);
76 dev
->gap_duration
+= ktime_to_ns(ktime_sub(ktime_get(),
79 /* Convert to ms and cap by LIRC_VALUE_MASK */
80 do_div(dev
->gap_duration
, 1000);
81 dev
->gap_duration
= min_t(u64
, dev
->gap_duration
,
84 spin_lock_irqsave(&dev
->lirc_fh_lock
, flags
);
85 list_for_each_entry(fh
, &dev
->lirc_fh
, list
)
87 LIRC_SPACE(dev
->gap_duration
));
88 spin_unlock_irqrestore(&dev
->lirc_fh_lock
, flags
);
92 sample
= ev
.pulse
? LIRC_PULSE(ev
.duration
/ 1000) :
93 LIRC_SPACE(ev
.duration
/ 1000);
94 dev_dbg(&dev
->dev
, "delivering %uus %s to lirc_dev\n",
95 TO_US(ev
.duration
), TO_STR(ev
.pulse
));
99 * bpf does not care about the gap generated above; that exists
100 * for backwards compatibility
102 lirc_bpf_run(dev
, sample
);
104 spin_lock_irqsave(&dev
->lirc_fh_lock
, flags
);
105 list_for_each_entry(fh
, &dev
->lirc_fh
, list
) {
106 if (LIRC_IS_TIMEOUT(sample
) && !fh
->send_timeout_reports
)
108 if (kfifo_put(&fh
->rawir
, sample
))
109 wake_up_poll(&fh
->wait_poll
, EPOLLIN
| EPOLLRDNORM
);
111 spin_unlock_irqrestore(&dev
->lirc_fh_lock
, flags
);
115 * ir_lirc_scancode_event() - Send scancode data to lirc to be relayed to
116 * userspace. This can be called in atomic context.
117 * @dev: the struct rc_dev descriptor of the device
118 * @lsc: the struct lirc_scancode describing the decoded scancode
120 void ir_lirc_scancode_event(struct rc_dev
*dev
, struct lirc_scancode
*lsc
)
125 lsc
->timestamp
= ktime_get_ns();
127 spin_lock_irqsave(&dev
->lirc_fh_lock
, flags
);
128 list_for_each_entry(fh
, &dev
->lirc_fh
, list
) {
129 if (kfifo_put(&fh
->scancodes
, *lsc
))
130 wake_up_poll(&fh
->wait_poll
, EPOLLIN
| EPOLLRDNORM
);
132 spin_unlock_irqrestore(&dev
->lirc_fh_lock
, flags
);
134 EXPORT_SYMBOL_GPL(ir_lirc_scancode_event
);
136 static int ir_lirc_open(struct inode
*inode
, struct file
*file
)
138 struct rc_dev
*dev
= container_of(inode
->i_cdev
, struct rc_dev
,
140 struct lirc_fh
*fh
= kzalloc(sizeof(*fh
), GFP_KERNEL
);
147 get_device(&dev
->dev
);
149 if (!dev
->registered
) {
154 if (dev
->driver_type
== RC_DRIVER_IR_RAW
) {
155 if (kfifo_alloc(&fh
->rawir
, MAX_IR_EVENT_SIZE
, GFP_KERNEL
)) {
161 if (dev
->driver_type
!= RC_DRIVER_IR_RAW_TX
) {
162 if (kfifo_alloc(&fh
->scancodes
, 32, GFP_KERNEL
)) {
168 fh
->send_mode
= LIRC_MODE_PULSE
;
170 fh
->send_timeout_reports
= true;
172 if (dev
->driver_type
== RC_DRIVER_SCANCODE
)
173 fh
->rec_mode
= LIRC_MODE_SCANCODE
;
175 fh
->rec_mode
= LIRC_MODE_MODE2
;
177 retval
= rc_open(dev
);
181 init_waitqueue_head(&fh
->wait_poll
);
183 file
->private_data
= fh
;
184 spin_lock_irqsave(&dev
->lirc_fh_lock
, flags
);
185 list_add(&fh
->list
, &dev
->lirc_fh
);
186 spin_unlock_irqrestore(&dev
->lirc_fh_lock
, flags
);
188 stream_open(inode
, file
);
192 if (dev
->driver_type
!= RC_DRIVER_IR_RAW_TX
)
193 kfifo_free(&fh
->scancodes
);
195 if (dev
->driver_type
== RC_DRIVER_IR_RAW
)
196 kfifo_free(&fh
->rawir
);
199 put_device(&dev
->dev
);
204 static int ir_lirc_close(struct inode
*inode
, struct file
*file
)
206 struct lirc_fh
*fh
= file
->private_data
;
207 struct rc_dev
*dev
= fh
->rc
;
210 spin_lock_irqsave(&dev
->lirc_fh_lock
, flags
);
212 spin_unlock_irqrestore(&dev
->lirc_fh_lock
, flags
);
214 if (dev
->driver_type
== RC_DRIVER_IR_RAW
)
215 kfifo_free(&fh
->rawir
);
216 if (dev
->driver_type
!= RC_DRIVER_IR_RAW_TX
)
217 kfifo_free(&fh
->scancodes
);
221 put_device(&dev
->dev
);
226 static ssize_t
ir_lirc_transmit_ir(struct file
*file
, const char __user
*buf
,
227 size_t n
, loff_t
*ppos
)
229 struct lirc_fh
*fh
= file
->private_data
;
230 struct rc_dev
*dev
= fh
->rc
;
232 struct ir_raw_event
*raw
= NULL
;
237 unsigned int duration
= 0; /* signal duration in us */
240 ret
= mutex_lock_interruptible(&dev
->lock
);
244 if (!dev
->registered
) {
254 if (fh
->send_mode
== LIRC_MODE_SCANCODE
) {
255 struct lirc_scancode scan
;
257 if (n
!= sizeof(scan
)) {
262 if (copy_from_user(&scan
, buf
, sizeof(scan
))) {
267 if (scan
.flags
|| scan
.keycode
|| scan
.timestamp
) {
272 /* We only have encoders for 32-bit protocols. */
273 if (scan
.scancode
> U32_MAX
||
274 !rc_validate_scancode(scan
.rc_proto
, scan
.scancode
)) {
279 raw
= kmalloc_array(LIRCBUF_SIZE
, sizeof(*raw
), GFP_KERNEL
);
285 ret
= ir_raw_encode_scancode(scan
.rc_proto
, scan
.scancode
,
292 txbuf
= kmalloc_array(count
, sizeof(unsigned int), GFP_KERNEL
);
298 for (i
= 0; i
< count
; i
++)
299 /* Convert from NS to US */
300 txbuf
[i
] = DIV_ROUND_UP(raw
[i
].duration
, 1000);
302 if (dev
->s_tx_carrier
) {
303 int carrier
= ir_raw_encode_carrier(scan
.rc_proto
);
306 dev
->s_tx_carrier(dev
, carrier
);
309 if (n
< sizeof(unsigned int) || n
% sizeof(unsigned int)) {
314 count
= n
/ sizeof(unsigned int);
315 if (count
> LIRCBUF_SIZE
|| count
% 2 == 0) {
320 txbuf
= memdup_user(buf
, n
);
322 ret
= PTR_ERR(txbuf
);
327 for (i
= 0; i
< count
; i
++) {
328 if (txbuf
[i
] > IR_MAX_DURATION
/ 1000 - duration
|| !txbuf
[i
]) {
333 duration
+= txbuf
[i
];
338 ret
= dev
->tx_ir(dev
, txbuf
, count
);
344 mutex_unlock(&dev
->lock
);
347 * The lircd gap calculation expects the write function to
348 * wait for the actual IR signal to be transmitted before
351 towait
= ktime_us_delta(ktime_add_us(start
, duration
),
354 set_current_state(TASK_INTERRUPTIBLE
);
355 schedule_timeout(usecs_to_jiffies(towait
));
364 mutex_unlock(&dev
->lock
);
368 static long ir_lirc_ioctl(struct file
*file
, unsigned int cmd
,
371 struct lirc_fh
*fh
= file
->private_data
;
372 struct rc_dev
*dev
= fh
->rc
;
373 u32 __user
*argp
= (u32 __user
*)(arg
);
377 if (_IOC_DIR(cmd
) & _IOC_WRITE
) {
378 ret
= get_user(val
, argp
);
383 ret
= mutex_lock_interruptible(&dev
->lock
);
387 if (!dev
->registered
) {
393 case LIRC_GET_FEATURES
:
394 if (dev
->driver_type
== RC_DRIVER_SCANCODE
)
395 val
|= LIRC_CAN_REC_SCANCODE
;
397 if (dev
->driver_type
== RC_DRIVER_IR_RAW
) {
398 val
|= LIRC_CAN_REC_MODE2
;
399 if (dev
->rx_resolution
)
400 val
|= LIRC_CAN_GET_REC_RESOLUTION
;
404 val
|= LIRC_CAN_SEND_PULSE
;
406 val
|= LIRC_CAN_SET_TRANSMITTER_MASK
;
407 if (dev
->s_tx_carrier
)
408 val
|= LIRC_CAN_SET_SEND_CARRIER
;
409 if (dev
->s_tx_duty_cycle
)
410 val
|= LIRC_CAN_SET_SEND_DUTY_CYCLE
;
413 if (dev
->s_rx_carrier_range
)
414 val
|= LIRC_CAN_SET_REC_CARRIER
|
415 LIRC_CAN_SET_REC_CARRIER_RANGE
;
417 if (dev
->s_learning_mode
)
418 val
|= LIRC_CAN_USE_WIDEBAND_RECEIVER
;
420 if (dev
->s_carrier_report
)
421 val
|= LIRC_CAN_MEASURE_CARRIER
;
423 if (dev
->max_timeout
)
424 val
|= LIRC_CAN_SET_REC_TIMEOUT
;
429 case LIRC_GET_REC_MODE
:
430 if (dev
->driver_type
== RC_DRIVER_IR_RAW_TX
)
436 case LIRC_SET_REC_MODE
:
437 switch (dev
->driver_type
) {
438 case RC_DRIVER_IR_RAW_TX
:
441 case RC_DRIVER_SCANCODE
:
442 if (val
!= LIRC_MODE_SCANCODE
)
445 case RC_DRIVER_IR_RAW
:
446 if (!(val
== LIRC_MODE_MODE2
||
447 val
== LIRC_MODE_SCANCODE
))
456 case LIRC_GET_SEND_MODE
:
463 case LIRC_SET_SEND_MODE
:
466 else if (!(val
== LIRC_MODE_PULSE
|| val
== LIRC_MODE_SCANCODE
))
473 case LIRC_SET_TRANSMITTER_MASK
:
477 ret
= dev
->s_tx_mask(dev
, val
);
480 case LIRC_SET_SEND_CARRIER
:
481 if (!dev
->s_tx_carrier
)
484 ret
= dev
->s_tx_carrier(dev
, val
);
487 case LIRC_SET_SEND_DUTY_CYCLE
:
488 if (!dev
->s_tx_duty_cycle
)
490 else if (val
<= 0 || val
>= 100)
493 ret
= dev
->s_tx_duty_cycle(dev
, val
);
497 case LIRC_SET_REC_CARRIER
:
498 if (!dev
->s_rx_carrier_range
)
503 ret
= dev
->s_rx_carrier_range(dev
, fh
->carrier_low
,
507 case LIRC_SET_REC_CARRIER_RANGE
:
508 if (!dev
->s_rx_carrier_range
)
513 fh
->carrier_low
= val
;
516 case LIRC_GET_REC_RESOLUTION
:
517 if (!dev
->rx_resolution
)
520 val
= dev
->rx_resolution
/ 1000;
523 case LIRC_SET_WIDEBAND_RECEIVER
:
524 if (!dev
->s_learning_mode
)
527 ret
= dev
->s_learning_mode(dev
, !!val
);
530 case LIRC_SET_MEASURE_CARRIER_MODE
:
531 if (!dev
->s_carrier_report
)
534 ret
= dev
->s_carrier_report(dev
, !!val
);
537 /* Generic timeout support */
538 case LIRC_GET_MIN_TIMEOUT
:
539 if (!dev
->max_timeout
)
542 val
= DIV_ROUND_UP(dev
->min_timeout
, 1000);
545 case LIRC_GET_MAX_TIMEOUT
:
546 if (!dev
->max_timeout
)
549 val
= dev
->max_timeout
/ 1000;
552 case LIRC_SET_REC_TIMEOUT
:
553 if (!dev
->max_timeout
) {
555 } else if (val
> U32_MAX
/ 1000) {
556 /* Check for multiply overflow */
559 u32 tmp
= val
* 1000;
561 if (tmp
< dev
->min_timeout
|| tmp
> dev
->max_timeout
)
563 else if (dev
->s_timeout
)
564 ret
= dev
->s_timeout(dev
, tmp
);
570 case LIRC_GET_REC_TIMEOUT
:
574 val
= DIV_ROUND_UP(dev
->timeout
, 1000);
577 case LIRC_SET_REC_TIMEOUT_REPORTS
:
578 if (dev
->driver_type
!= RC_DRIVER_IR_RAW
)
581 fh
->send_timeout_reports
= !!val
;
588 if (!ret
&& _IOC_DIR(cmd
) & _IOC_READ
)
589 ret
= put_user(val
, argp
);
592 mutex_unlock(&dev
->lock
);
596 static __poll_t
ir_lirc_poll(struct file
*file
, struct poll_table_struct
*wait
)
598 struct lirc_fh
*fh
= file
->private_data
;
599 struct rc_dev
*rcdev
= fh
->rc
;
602 poll_wait(file
, &fh
->wait_poll
, wait
);
604 if (!rcdev
->registered
) {
605 events
= EPOLLHUP
| EPOLLERR
;
606 } else if (rcdev
->driver_type
!= RC_DRIVER_IR_RAW_TX
) {
607 if (fh
->rec_mode
== LIRC_MODE_SCANCODE
&&
608 !kfifo_is_empty(&fh
->scancodes
))
609 events
= EPOLLIN
| EPOLLRDNORM
;
611 if (fh
->rec_mode
== LIRC_MODE_MODE2
&&
612 !kfifo_is_empty(&fh
->rawir
))
613 events
= EPOLLIN
| EPOLLRDNORM
;
619 static ssize_t
ir_lirc_read_mode2(struct file
*file
, char __user
*buffer
,
622 struct lirc_fh
*fh
= file
->private_data
;
623 struct rc_dev
*rcdev
= fh
->rc
;
627 if (length
< sizeof(unsigned int) || length
% sizeof(unsigned int))
631 if (kfifo_is_empty(&fh
->rawir
)) {
632 if (file
->f_flags
& O_NONBLOCK
)
635 ret
= wait_event_interruptible(fh
->wait_poll
,
636 !kfifo_is_empty(&fh
->rawir
) ||
642 if (!rcdev
->registered
)
645 ret
= mutex_lock_interruptible(&rcdev
->lock
);
648 ret
= kfifo_to_user(&fh
->rawir
, buffer
, length
, &copied
);
649 mutex_unlock(&rcdev
->lock
);
652 } while (copied
== 0);
657 static ssize_t
ir_lirc_read_scancode(struct file
*file
, char __user
*buffer
,
660 struct lirc_fh
*fh
= file
->private_data
;
661 struct rc_dev
*rcdev
= fh
->rc
;
665 if (length
< sizeof(struct lirc_scancode
) ||
666 length
% sizeof(struct lirc_scancode
))
670 if (kfifo_is_empty(&fh
->scancodes
)) {
671 if (file
->f_flags
& O_NONBLOCK
)
674 ret
= wait_event_interruptible(fh
->wait_poll
,
675 !kfifo_is_empty(&fh
->scancodes
) ||
681 if (!rcdev
->registered
)
684 ret
= mutex_lock_interruptible(&rcdev
->lock
);
687 ret
= kfifo_to_user(&fh
->scancodes
, buffer
, length
, &copied
);
688 mutex_unlock(&rcdev
->lock
);
691 } while (copied
== 0);
696 static ssize_t
ir_lirc_read(struct file
*file
, char __user
*buffer
,
697 size_t length
, loff_t
*ppos
)
699 struct lirc_fh
*fh
= file
->private_data
;
700 struct rc_dev
*rcdev
= fh
->rc
;
702 if (rcdev
->driver_type
== RC_DRIVER_IR_RAW_TX
)
705 if (!rcdev
->registered
)
708 if (fh
->rec_mode
== LIRC_MODE_MODE2
)
709 return ir_lirc_read_mode2(file
, buffer
, length
);
710 else /* LIRC_MODE_SCANCODE */
711 return ir_lirc_read_scancode(file
, buffer
, length
);
714 static const struct file_operations lirc_fops
= {
715 .owner
= THIS_MODULE
,
716 .write
= ir_lirc_transmit_ir
,
717 .unlocked_ioctl
= ir_lirc_ioctl
,
718 .compat_ioctl
= compat_ptr_ioctl
,
719 .read
= ir_lirc_read
,
720 .poll
= ir_lirc_poll
,
721 .open
= ir_lirc_open
,
722 .release
= ir_lirc_close
,
726 static void lirc_release_device(struct device
*ld
)
728 struct rc_dev
*rcdev
= container_of(ld
, struct rc_dev
, lirc_dev
);
730 put_device(&rcdev
->dev
);
733 int ir_lirc_register(struct rc_dev
*dev
)
735 const char *rx_type
, *tx_type
;
738 minor
= ida_simple_get(&lirc_ida
, 0, RC_DEV_MAX
, GFP_KERNEL
);
742 device_initialize(&dev
->lirc_dev
);
743 dev
->lirc_dev
.class = lirc_class
;
744 dev
->lirc_dev
.parent
= &dev
->dev
;
745 dev
->lirc_dev
.release
= lirc_release_device
;
746 dev
->lirc_dev
.devt
= MKDEV(MAJOR(lirc_base_dev
), minor
);
747 dev_set_name(&dev
->lirc_dev
, "lirc%d", minor
);
749 INIT_LIST_HEAD(&dev
->lirc_fh
);
750 spin_lock_init(&dev
->lirc_fh_lock
);
752 cdev_init(&dev
->lirc_cdev
, &lirc_fops
);
754 err
= cdev_device_add(&dev
->lirc_cdev
, &dev
->lirc_dev
);
758 get_device(&dev
->dev
);
760 switch (dev
->driver_type
) {
761 case RC_DRIVER_SCANCODE
:
762 rx_type
= "scancode";
764 case RC_DRIVER_IR_RAW
:
777 dev_info(&dev
->dev
, "lirc_dev: driver %s registered at minor = %d, %s receiver, %s transmitter",
778 dev
->driver_name
, minor
, rx_type
, tx_type
);
783 ida_simple_remove(&lirc_ida
, minor
);
787 void ir_lirc_unregister(struct rc_dev
*dev
)
792 dev_dbg(&dev
->dev
, "lirc_dev: driver %s unregistered from minor = %d\n",
793 dev
->driver_name
, MINOR(dev
->lirc_dev
.devt
));
795 spin_lock_irqsave(&dev
->lirc_fh_lock
, flags
);
796 list_for_each_entry(fh
, &dev
->lirc_fh
, list
)
797 wake_up_poll(&fh
->wait_poll
, EPOLLHUP
| EPOLLERR
);
798 spin_unlock_irqrestore(&dev
->lirc_fh_lock
, flags
);
800 cdev_device_del(&dev
->lirc_cdev
, &dev
->lirc_dev
);
801 ida_simple_remove(&lirc_ida
, MINOR(dev
->lirc_dev
.devt
));
804 int __init
lirc_dev_init(void)
808 lirc_class
= class_create(THIS_MODULE
, "lirc");
809 if (IS_ERR(lirc_class
)) {
810 pr_err("class_create failed\n");
811 return PTR_ERR(lirc_class
);
814 retval
= alloc_chrdev_region(&lirc_base_dev
, 0, RC_DEV_MAX
,
817 class_destroy(lirc_class
);
818 pr_err("alloc_chrdev_region failed\n");
822 pr_debug("IR Remote Control driver registered, major %d\n",
823 MAJOR(lirc_base_dev
));
828 void __exit
lirc_dev_exit(void)
830 class_destroy(lirc_class
);
831 unregister_chrdev_region(lirc_base_dev
, RC_DEV_MAX
);
834 struct rc_dev
*rc_dev_get_from_fd(int fd
)
836 struct fd f
= fdget(fd
);
841 return ERR_PTR(-EBADF
);
843 if (f
.file
->f_op
!= &lirc_fops
) {
845 return ERR_PTR(-EINVAL
);
848 fh
= f
.file
->private_data
;
851 get_device(&dev
->dev
);
857 MODULE_ALIAS("lirc_dev");