root/drivers/media/rc/lirc_dev.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ir_lirc_raw_event
  2. ir_lirc_scancode_event
  3. ir_lirc_open
  4. ir_lirc_close
  5. ir_lirc_transmit_ir
  6. ir_lirc_ioctl
  7. ir_lirc_poll
  8. ir_lirc_read_mode2
  9. ir_lirc_read_scancode
  10. ir_lirc_read
  11. lirc_release_device
  12. ir_lirc_register
  13. ir_lirc_unregister
  14. lirc_dev_init
  15. lirc_dev_exit
  16. rc_dev_get_from_fd

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

/* [<][>][^][v][top][bottom][index][help] */