lirc_dev.c (18049B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * LIRC base driver 4 * 5 * by Artur Lipowski <alipowski@interia.pl> 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 9 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> 18 19#include "rc-core-priv.h" 20#include <uapi/linux/lirc.h> 21 22#define LIRCBUF_SIZE 1024 23 24static dev_t lirc_base_dev; 25 26/* Used to keep track of allocated lirc devices */ 27static DEFINE_IDA(lirc_ida); 28 29/* Only used for sysfs but defined to void otherwise */ 30static struct class *lirc_class; 31 32/** 33 * lirc_raw_event() - Send raw IR data to lirc to be relayed to userspace 34 * 35 * @dev: the struct rc_dev descriptor of the device 36 * @ev: the struct ir_raw_event descriptor of the pulse/space 37 */ 38void lirc_raw_event(struct rc_dev *dev, struct ir_raw_event ev) 39{ 40 unsigned long flags; 41 struct lirc_fh *fh; 42 int sample; 43 44 /* Receiver overflow, data missing */ 45 if (ev.overflow) { 46 /* 47 * Send lirc overflow message. This message is unknown to 48 * lircd, but it will interpret this as a long space as 49 * long as the value is set to high value. This resets its 50 * decoder state. 51 */ 52 sample = LIRC_OVERFLOW(LIRC_VALUE_MASK); 53 dev_dbg(&dev->dev, "delivering overflow to lirc_dev\n"); 54 55 /* Carrier reports */ 56 } else if (ev.carrier_report) { 57 sample = LIRC_FREQUENCY(ev.carrier); 58 dev_dbg(&dev->dev, "carrier report (freq: %d)\n", sample); 59 60 /* Packet end */ 61 } else if (ev.timeout) { 62 dev->gap_start = ktime_get(); 63 64 sample = LIRC_TIMEOUT(ev.duration); 65 dev_dbg(&dev->dev, "timeout report (duration: %d)\n", sample); 66 67 /* Normal sample */ 68 } else { 69 if (dev->gap_start) { 70 u64 duration = ktime_us_delta(ktime_get(), 71 dev->gap_start); 72 73 /* Cap by LIRC_VALUE_MASK */ 74 duration = min_t(u64, duration, LIRC_VALUE_MASK); 75 76 spin_lock_irqsave(&dev->lirc_fh_lock, flags); 77 list_for_each_entry(fh, &dev->lirc_fh, list) 78 kfifo_put(&fh->rawir, LIRC_SPACE(duration)); 79 spin_unlock_irqrestore(&dev->lirc_fh_lock, flags); 80 dev->gap_start = 0; 81 } 82 83 sample = ev.pulse ? LIRC_PULSE(ev.duration) : 84 LIRC_SPACE(ev.duration); 85 dev_dbg(&dev->dev, "delivering %uus %s to lirc_dev\n", 86 ev.duration, TO_STR(ev.pulse)); 87 } 88 89 /* 90 * bpf does not care about the gap generated above; that exists 91 * for backwards compatibility 92 */ 93 lirc_bpf_run(dev, sample); 94 95 spin_lock_irqsave(&dev->lirc_fh_lock, flags); 96 list_for_each_entry(fh, &dev->lirc_fh, list) { 97 if (kfifo_put(&fh->rawir, sample)) 98 wake_up_poll(&fh->wait_poll, EPOLLIN | EPOLLRDNORM); 99 } 100 spin_unlock_irqrestore(&dev->lirc_fh_lock, flags); 101} 102 103/** 104 * lirc_scancode_event() - Send scancode data to lirc to be relayed to 105 * userspace. This can be called in atomic context. 106 * @dev: the struct rc_dev descriptor of the device 107 * @lsc: the struct lirc_scancode describing the decoded scancode 108 */ 109void lirc_scancode_event(struct rc_dev *dev, struct lirc_scancode *lsc) 110{ 111 unsigned long flags; 112 struct lirc_fh *fh; 113 114 lsc->timestamp = ktime_get_ns(); 115 116 spin_lock_irqsave(&dev->lirc_fh_lock, flags); 117 list_for_each_entry(fh, &dev->lirc_fh, list) { 118 if (kfifo_put(&fh->scancodes, *lsc)) 119 wake_up_poll(&fh->wait_poll, EPOLLIN | EPOLLRDNORM); 120 } 121 spin_unlock_irqrestore(&dev->lirc_fh_lock, flags); 122} 123EXPORT_SYMBOL_GPL(lirc_scancode_event); 124 125static int lirc_open(struct inode *inode, struct file *file) 126{ 127 struct rc_dev *dev = container_of(inode->i_cdev, struct rc_dev, 128 lirc_cdev); 129 struct lirc_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL); 130 unsigned long flags; 131 int retval; 132 133 if (!fh) 134 return -ENOMEM; 135 136 get_device(&dev->dev); 137 138 if (!dev->registered) { 139 retval = -ENODEV; 140 goto out_fh; 141 } 142 143 if (dev->driver_type == RC_DRIVER_IR_RAW) { 144 if (kfifo_alloc(&fh->rawir, MAX_IR_EVENT_SIZE, GFP_KERNEL)) { 145 retval = -ENOMEM; 146 goto out_fh; 147 } 148 } 149 150 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) { 151 if (kfifo_alloc(&fh->scancodes, 32, GFP_KERNEL)) { 152 retval = -ENOMEM; 153 goto out_rawir; 154 } 155 } 156 157 fh->send_mode = LIRC_MODE_PULSE; 158 fh->rc = dev; 159 160 if (dev->driver_type == RC_DRIVER_SCANCODE) 161 fh->rec_mode = LIRC_MODE_SCANCODE; 162 else 163 fh->rec_mode = LIRC_MODE_MODE2; 164 165 retval = rc_open(dev); 166 if (retval) 167 goto out_kfifo; 168 169 init_waitqueue_head(&fh->wait_poll); 170 171 file->private_data = fh; 172 spin_lock_irqsave(&dev->lirc_fh_lock, flags); 173 list_add(&fh->list, &dev->lirc_fh); 174 spin_unlock_irqrestore(&dev->lirc_fh_lock, flags); 175 176 stream_open(inode, file); 177 178 return 0; 179out_kfifo: 180 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) 181 kfifo_free(&fh->scancodes); 182out_rawir: 183 if (dev->driver_type == RC_DRIVER_IR_RAW) 184 kfifo_free(&fh->rawir); 185out_fh: 186 kfree(fh); 187 put_device(&dev->dev); 188 189 return retval; 190} 191 192static int lirc_close(struct inode *inode, struct file *file) 193{ 194 struct lirc_fh *fh = file->private_data; 195 struct rc_dev *dev = fh->rc; 196 unsigned long flags; 197 198 spin_lock_irqsave(&dev->lirc_fh_lock, flags); 199 list_del(&fh->list); 200 spin_unlock_irqrestore(&dev->lirc_fh_lock, flags); 201 202 if (dev->driver_type == RC_DRIVER_IR_RAW) 203 kfifo_free(&fh->rawir); 204 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) 205 kfifo_free(&fh->scancodes); 206 kfree(fh); 207 208 rc_close(dev); 209 put_device(&dev->dev); 210 211 return 0; 212} 213 214static ssize_t lirc_transmit(struct file *file, const char __user *buf, 215 size_t n, loff_t *ppos) 216{ 217 struct lirc_fh *fh = file->private_data; 218 struct rc_dev *dev = fh->rc; 219 unsigned int *txbuf; 220 struct ir_raw_event *raw = NULL; 221 ssize_t ret; 222 size_t count; 223 ktime_t start; 224 s64 towait; 225 unsigned int duration = 0; /* signal duration in us */ 226 int i; 227 228 ret = mutex_lock_interruptible(&dev->lock); 229 if (ret) 230 return ret; 231 232 if (!dev->registered) { 233 ret = -ENODEV; 234 goto out_unlock; 235 } 236 237 if (!dev->tx_ir) { 238 ret = -EINVAL; 239 goto out_unlock; 240 } 241 242 if (fh->send_mode == LIRC_MODE_SCANCODE) { 243 struct lirc_scancode scan; 244 245 if (n != sizeof(scan)) { 246 ret = -EINVAL; 247 goto out_unlock; 248 } 249 250 if (copy_from_user(&scan, buf, sizeof(scan))) { 251 ret = -EFAULT; 252 goto out_unlock; 253 } 254 255 if (scan.flags || scan.keycode || scan.timestamp || 256 scan.rc_proto > RC_PROTO_MAX) { 257 ret = -EINVAL; 258 goto out_unlock; 259 } 260 261 /* We only have encoders for 32-bit protocols. */ 262 if (scan.scancode > U32_MAX || 263 !rc_validate_scancode(scan.rc_proto, scan.scancode)) { 264 ret = -EINVAL; 265 goto out_unlock; 266 } 267 268 raw = kmalloc_array(LIRCBUF_SIZE, sizeof(*raw), GFP_KERNEL); 269 if (!raw) { 270 ret = -ENOMEM; 271 goto out_unlock; 272 } 273 274 ret = ir_raw_encode_scancode(scan.rc_proto, scan.scancode, 275 raw, LIRCBUF_SIZE); 276 if (ret < 0) 277 goto out_kfree_raw; 278 279 count = ret; 280 281 txbuf = kmalloc_array(count, sizeof(unsigned int), GFP_KERNEL); 282 if (!txbuf) { 283 ret = -ENOMEM; 284 goto out_kfree_raw; 285 } 286 287 for (i = 0; i < count; i++) 288 txbuf[i] = raw[i].duration; 289 290 if (dev->s_tx_carrier) { 291 int carrier = ir_raw_encode_carrier(scan.rc_proto); 292 293 if (carrier > 0) 294 dev->s_tx_carrier(dev, carrier); 295 } 296 } else { 297 if (n < sizeof(unsigned int) || n % sizeof(unsigned int)) { 298 ret = -EINVAL; 299 goto out_unlock; 300 } 301 302 count = n / sizeof(unsigned int); 303 if (count > LIRCBUF_SIZE || count % 2 == 0) { 304 ret = -EINVAL; 305 goto out_unlock; 306 } 307 308 txbuf = memdup_user(buf, n); 309 if (IS_ERR(txbuf)) { 310 ret = PTR_ERR(txbuf); 311 goto out_unlock; 312 } 313 } 314 315 for (i = 0; i < count; i++) { 316 if (txbuf[i] > IR_MAX_DURATION - duration || !txbuf[i]) { 317 ret = -EINVAL; 318 goto out_kfree; 319 } 320 321 duration += txbuf[i]; 322 } 323 324 start = ktime_get(); 325 326 ret = dev->tx_ir(dev, txbuf, count); 327 if (ret < 0) 328 goto out_kfree; 329 330 kfree(txbuf); 331 kfree(raw); 332 mutex_unlock(&dev->lock); 333 334 /* 335 * The lircd gap calculation expects the write function to 336 * wait for the actual IR signal to be transmitted before 337 * returning. 338 */ 339 towait = ktime_us_delta(ktime_add_us(start, duration), 340 ktime_get()); 341 if (towait > 0) { 342 set_current_state(TASK_INTERRUPTIBLE); 343 schedule_timeout(usecs_to_jiffies(towait)); 344 } 345 346 return n; 347out_kfree: 348 kfree(txbuf); 349out_kfree_raw: 350 kfree(raw); 351out_unlock: 352 mutex_unlock(&dev->lock); 353 return ret; 354} 355 356static long lirc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 357{ 358 struct lirc_fh *fh = file->private_data; 359 struct rc_dev *dev = fh->rc; 360 u32 __user *argp = (u32 __user *)(arg); 361 u32 val = 0; 362 int ret; 363 364 if (_IOC_DIR(cmd) & _IOC_WRITE) { 365 ret = get_user(val, argp); 366 if (ret) 367 return ret; 368 } 369 370 ret = mutex_lock_interruptible(&dev->lock); 371 if (ret) 372 return ret; 373 374 if (!dev->registered) { 375 ret = -ENODEV; 376 goto out; 377 } 378 379 switch (cmd) { 380 case LIRC_GET_FEATURES: 381 if (dev->driver_type == RC_DRIVER_SCANCODE) 382 val |= LIRC_CAN_REC_SCANCODE; 383 384 if (dev->driver_type == RC_DRIVER_IR_RAW) { 385 val |= LIRC_CAN_REC_MODE2; 386 if (dev->rx_resolution) 387 val |= LIRC_CAN_GET_REC_RESOLUTION; 388 } 389 390 if (dev->tx_ir) { 391 val |= LIRC_CAN_SEND_PULSE; 392 if (dev->s_tx_mask) 393 val |= LIRC_CAN_SET_TRANSMITTER_MASK; 394 if (dev->s_tx_carrier) 395 val |= LIRC_CAN_SET_SEND_CARRIER; 396 if (dev->s_tx_duty_cycle) 397 val |= LIRC_CAN_SET_SEND_DUTY_CYCLE; 398 } 399 400 if (dev->s_rx_carrier_range) 401 val |= LIRC_CAN_SET_REC_CARRIER | 402 LIRC_CAN_SET_REC_CARRIER_RANGE; 403 404 if (dev->s_wideband_receiver) 405 val |= LIRC_CAN_USE_WIDEBAND_RECEIVER; 406 407 if (dev->s_carrier_report) 408 val |= LIRC_CAN_MEASURE_CARRIER; 409 410 if (dev->max_timeout) 411 val |= LIRC_CAN_SET_REC_TIMEOUT; 412 413 break; 414 415 /* mode support */ 416 case LIRC_GET_REC_MODE: 417 if (dev->driver_type == RC_DRIVER_IR_RAW_TX) 418 ret = -ENOTTY; 419 else 420 val = fh->rec_mode; 421 break; 422 423 case LIRC_SET_REC_MODE: 424 switch (dev->driver_type) { 425 case RC_DRIVER_IR_RAW_TX: 426 ret = -ENOTTY; 427 break; 428 case RC_DRIVER_SCANCODE: 429 if (val != LIRC_MODE_SCANCODE) 430 ret = -EINVAL; 431 break; 432 case RC_DRIVER_IR_RAW: 433 if (!(val == LIRC_MODE_MODE2 || 434 val == LIRC_MODE_SCANCODE)) 435 ret = -EINVAL; 436 break; 437 } 438 439 if (!ret) 440 fh->rec_mode = val; 441 break; 442 443 case LIRC_GET_SEND_MODE: 444 if (!dev->tx_ir) 445 ret = -ENOTTY; 446 else 447 val = fh->send_mode; 448 break; 449 450 case LIRC_SET_SEND_MODE: 451 if (!dev->tx_ir) 452 ret = -ENOTTY; 453 else if (!(val == LIRC_MODE_PULSE || val == LIRC_MODE_SCANCODE)) 454 ret = -EINVAL; 455 else 456 fh->send_mode = val; 457 break; 458 459 /* TX settings */ 460 case LIRC_SET_TRANSMITTER_MASK: 461 if (!dev->s_tx_mask) 462 ret = -ENOTTY; 463 else 464 ret = dev->s_tx_mask(dev, val); 465 break; 466 467 case LIRC_SET_SEND_CARRIER: 468 if (!dev->s_tx_carrier) 469 ret = -ENOTTY; 470 else 471 ret = dev->s_tx_carrier(dev, val); 472 break; 473 474 case LIRC_SET_SEND_DUTY_CYCLE: 475 if (!dev->s_tx_duty_cycle) 476 ret = -ENOTTY; 477 else if (val <= 0 || val >= 100) 478 ret = -EINVAL; 479 else 480 ret = dev->s_tx_duty_cycle(dev, val); 481 break; 482 483 /* RX settings */ 484 case LIRC_SET_REC_CARRIER: 485 if (!dev->s_rx_carrier_range) 486 ret = -ENOTTY; 487 else if (val <= 0) 488 ret = -EINVAL; 489 else 490 ret = dev->s_rx_carrier_range(dev, fh->carrier_low, 491 val); 492 break; 493 494 case LIRC_SET_REC_CARRIER_RANGE: 495 if (!dev->s_rx_carrier_range) 496 ret = -ENOTTY; 497 else if (val <= 0) 498 ret = -EINVAL; 499 else 500 fh->carrier_low = val; 501 break; 502 503 case LIRC_GET_REC_RESOLUTION: 504 if (!dev->rx_resolution) 505 ret = -ENOTTY; 506 else 507 val = dev->rx_resolution; 508 break; 509 510 case LIRC_SET_WIDEBAND_RECEIVER: 511 if (!dev->s_wideband_receiver) 512 ret = -ENOTTY; 513 else 514 ret = dev->s_wideband_receiver(dev, !!val); 515 break; 516 517 case LIRC_SET_MEASURE_CARRIER_MODE: 518 if (!dev->s_carrier_report) 519 ret = -ENOTTY; 520 else 521 ret = dev->s_carrier_report(dev, !!val); 522 break; 523 524 /* Generic timeout support */ 525 case LIRC_GET_MIN_TIMEOUT: 526 if (!dev->max_timeout) 527 ret = -ENOTTY; 528 else 529 val = dev->min_timeout; 530 break; 531 532 case LIRC_GET_MAX_TIMEOUT: 533 if (!dev->max_timeout) 534 ret = -ENOTTY; 535 else 536 val = dev->max_timeout; 537 break; 538 539 case LIRC_SET_REC_TIMEOUT: 540 if (!dev->max_timeout) { 541 ret = -ENOTTY; 542 } else { 543 if (val < dev->min_timeout || val > dev->max_timeout) 544 ret = -EINVAL; 545 else if (dev->s_timeout) 546 ret = dev->s_timeout(dev, val); 547 else 548 dev->timeout = val; 549 } 550 break; 551 552 case LIRC_GET_REC_TIMEOUT: 553 if (!dev->timeout) 554 ret = -ENOTTY; 555 else 556 val = dev->timeout; 557 break; 558 559 case LIRC_SET_REC_TIMEOUT_REPORTS: 560 if (dev->driver_type != RC_DRIVER_IR_RAW) 561 ret = -ENOTTY; 562 break; 563 564 default: 565 ret = -ENOTTY; 566 } 567 568 if (!ret && _IOC_DIR(cmd) & _IOC_READ) 569 ret = put_user(val, argp); 570 571out: 572 mutex_unlock(&dev->lock); 573 return ret; 574} 575 576static __poll_t lirc_poll(struct file *file, struct poll_table_struct *wait) 577{ 578 struct lirc_fh *fh = file->private_data; 579 struct rc_dev *rcdev = fh->rc; 580 __poll_t events = 0; 581 582 poll_wait(file, &fh->wait_poll, wait); 583 584 if (!rcdev->registered) { 585 events = EPOLLHUP | EPOLLERR; 586 } else if (rcdev->driver_type != RC_DRIVER_IR_RAW_TX) { 587 if (fh->rec_mode == LIRC_MODE_SCANCODE && 588 !kfifo_is_empty(&fh->scancodes)) 589 events = EPOLLIN | EPOLLRDNORM; 590 591 if (fh->rec_mode == LIRC_MODE_MODE2 && 592 !kfifo_is_empty(&fh->rawir)) 593 events = EPOLLIN | EPOLLRDNORM; 594 } 595 596 return events; 597} 598 599static ssize_t lirc_read_mode2(struct file *file, char __user *buffer, 600 size_t length) 601{ 602 struct lirc_fh *fh = file->private_data; 603 struct rc_dev *rcdev = fh->rc; 604 unsigned int copied; 605 int ret; 606 607 if (length < sizeof(unsigned int) || length % sizeof(unsigned int)) 608 return -EINVAL; 609 610 do { 611 if (kfifo_is_empty(&fh->rawir)) { 612 if (file->f_flags & O_NONBLOCK) 613 return -EAGAIN; 614 615 ret = wait_event_interruptible(fh->wait_poll, 616 !kfifo_is_empty(&fh->rawir) || 617 !rcdev->registered); 618 if (ret) 619 return ret; 620 } 621 622 if (!rcdev->registered) 623 return -ENODEV; 624 625 ret = mutex_lock_interruptible(&rcdev->lock); 626 if (ret) 627 return ret; 628 ret = kfifo_to_user(&fh->rawir, buffer, length, &copied); 629 mutex_unlock(&rcdev->lock); 630 if (ret) 631 return ret; 632 } while (copied == 0); 633 634 return copied; 635} 636 637static ssize_t lirc_read_scancode(struct file *file, char __user *buffer, 638 size_t length) 639{ 640 struct lirc_fh *fh = file->private_data; 641 struct rc_dev *rcdev = fh->rc; 642 unsigned int copied; 643 int ret; 644 645 if (length < sizeof(struct lirc_scancode) || 646 length % sizeof(struct lirc_scancode)) 647 return -EINVAL; 648 649 do { 650 if (kfifo_is_empty(&fh->scancodes)) { 651 if (file->f_flags & O_NONBLOCK) 652 return -EAGAIN; 653 654 ret = wait_event_interruptible(fh->wait_poll, 655 !kfifo_is_empty(&fh->scancodes) || 656 !rcdev->registered); 657 if (ret) 658 return ret; 659 } 660 661 if (!rcdev->registered) 662 return -ENODEV; 663 664 ret = mutex_lock_interruptible(&rcdev->lock); 665 if (ret) 666 return ret; 667 ret = kfifo_to_user(&fh->scancodes, buffer, length, &copied); 668 mutex_unlock(&rcdev->lock); 669 if (ret) 670 return ret; 671 } while (copied == 0); 672 673 return copied; 674} 675 676static ssize_t lirc_read(struct file *file, char __user *buffer, size_t length, 677 loff_t *ppos) 678{ 679 struct lirc_fh *fh = file->private_data; 680 struct rc_dev *rcdev = fh->rc; 681 682 if (rcdev->driver_type == RC_DRIVER_IR_RAW_TX) 683 return -EINVAL; 684 685 if (!rcdev->registered) 686 return -ENODEV; 687 688 if (fh->rec_mode == LIRC_MODE_MODE2) 689 return lirc_read_mode2(file, buffer, length); 690 else /* LIRC_MODE_SCANCODE */ 691 return lirc_read_scancode(file, buffer, length); 692} 693 694static const struct file_operations lirc_fops = { 695 .owner = THIS_MODULE, 696 .write = lirc_transmit, 697 .unlocked_ioctl = lirc_ioctl, 698 .compat_ioctl = compat_ptr_ioctl, 699 .read = lirc_read, 700 .poll = lirc_poll, 701 .open = lirc_open, 702 .release = lirc_close, 703 .llseek = no_llseek, 704}; 705 706static void lirc_release_device(struct device *ld) 707{ 708 struct rc_dev *rcdev = container_of(ld, struct rc_dev, lirc_dev); 709 710 put_device(&rcdev->dev); 711} 712 713int lirc_register(struct rc_dev *dev) 714{ 715 const char *rx_type, *tx_type; 716 int err, minor; 717 718 minor = ida_simple_get(&lirc_ida, 0, RC_DEV_MAX, GFP_KERNEL); 719 if (minor < 0) 720 return minor; 721 722 device_initialize(&dev->lirc_dev); 723 dev->lirc_dev.class = lirc_class; 724 dev->lirc_dev.parent = &dev->dev; 725 dev->lirc_dev.release = lirc_release_device; 726 dev->lirc_dev.devt = MKDEV(MAJOR(lirc_base_dev), minor); 727 dev_set_name(&dev->lirc_dev, "lirc%d", minor); 728 729 INIT_LIST_HEAD(&dev->lirc_fh); 730 spin_lock_init(&dev->lirc_fh_lock); 731 732 cdev_init(&dev->lirc_cdev, &lirc_fops); 733 734 err = cdev_device_add(&dev->lirc_cdev, &dev->lirc_dev); 735 if (err) 736 goto out_ida; 737 738 get_device(&dev->dev); 739 740 switch (dev->driver_type) { 741 case RC_DRIVER_SCANCODE: 742 rx_type = "scancode"; 743 break; 744 case RC_DRIVER_IR_RAW: 745 rx_type = "raw IR"; 746 break; 747 default: 748 rx_type = "no"; 749 break; 750 } 751 752 if (dev->tx_ir) 753 tx_type = "raw IR"; 754 else 755 tx_type = "no"; 756 757 dev_info(&dev->dev, "lirc_dev: driver %s registered at minor = %d, %s receiver, %s transmitter", 758 dev->driver_name, minor, rx_type, tx_type); 759 760 return 0; 761 762out_ida: 763 ida_simple_remove(&lirc_ida, minor); 764 return err; 765} 766 767void lirc_unregister(struct rc_dev *dev) 768{ 769 unsigned long flags; 770 struct lirc_fh *fh; 771 772 dev_dbg(&dev->dev, "lirc_dev: driver %s unregistered from minor = %d\n", 773 dev->driver_name, MINOR(dev->lirc_dev.devt)); 774 775 spin_lock_irqsave(&dev->lirc_fh_lock, flags); 776 list_for_each_entry(fh, &dev->lirc_fh, list) 777 wake_up_poll(&fh->wait_poll, EPOLLHUP | EPOLLERR); 778 spin_unlock_irqrestore(&dev->lirc_fh_lock, flags); 779 780 cdev_device_del(&dev->lirc_cdev, &dev->lirc_dev); 781 ida_simple_remove(&lirc_ida, MINOR(dev->lirc_dev.devt)); 782} 783 784int __init lirc_dev_init(void) 785{ 786 int retval; 787 788 lirc_class = class_create(THIS_MODULE, "lirc"); 789 if (IS_ERR(lirc_class)) { 790 pr_err("class_create failed\n"); 791 return PTR_ERR(lirc_class); 792 } 793 794 retval = alloc_chrdev_region(&lirc_base_dev, 0, RC_DEV_MAX, "lirc"); 795 if (retval) { 796 class_destroy(lirc_class); 797 pr_err("alloc_chrdev_region failed\n"); 798 return retval; 799 } 800 801 pr_debug("IR Remote Control driver registered, major %d\n", 802 MAJOR(lirc_base_dev)); 803 804 return 0; 805} 806 807void __exit lirc_dev_exit(void) 808{ 809 class_destroy(lirc_class); 810 unregister_chrdev_region(lirc_base_dev, RC_DEV_MAX); 811} 812 813struct rc_dev *rc_dev_get_from_fd(int fd) 814{ 815 struct fd f = fdget(fd); 816 struct lirc_fh *fh; 817 struct rc_dev *dev; 818 819 if (!f.file) 820 return ERR_PTR(-EBADF); 821 822 if (f.file->f_op != &lirc_fops) { 823 fdput(f); 824 return ERR_PTR(-EINVAL); 825 } 826 827 fh = f.file->private_data; 828 dev = fh->rc; 829 830 get_device(&dev->dev); 831 fdput(f); 832 833 return dev; 834} 835 836MODULE_ALIAS("lirc_dev");