aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/rc/lirc_dev.c
diff options
context:
space:
mode:
authorSean Young <sean@mess.org>2017-09-23 10:41:13 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2017-12-14 10:35:16 -0500
commita60d64b15c20d178ba3a9bc3a542492b4ddeea70 (patch)
tree8b5e5086384e7868ce0357a2b5002a67ccfe0c63 /drivers/media/rc/lirc_dev.c
parent0d39ab0b628b38acf83506d36e9ec969055698df (diff)
media: lirc: lirc interface should not be a raw decoder
The lirc user interface exists as a raw decoder, which does not make much sense for transmit-only devices. In addition, we want to have lirc char devices for devices which do not use raw IR, i.e. scancode only devices. Note that rc-code, lirc_dev, ir-lirc-codec are now calling functions of each other, so they've been merged into one module rc-core to avoid circular dependencies. Since ir-lirc-codec no longer exists as separate codec module, there is no need for RC_DRIVER_IR_RAW_TX type drivers to call ir_raw_event_register(). Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/rc/lirc_dev.c')
-rw-r--r--drivers/media/rc/lirc_dev.c47
1 files changed, 13 insertions, 34 deletions
diff --git a/drivers/media/rc/lirc_dev.c b/drivers/media/rc/lirc_dev.c
index ef7e915dc9a2..3cc95deaa84e 100644
--- a/drivers/media/rc/lirc_dev.c
+++ b/drivers/media/rc/lirc_dev.c
@@ -26,7 +26,7 @@
26#include <linux/cdev.h> 26#include <linux/cdev.h>
27#include <linux/idr.h> 27#include <linux/idr.h>
28 28
29#include <media/rc-core.h> 29#include "rc-core-priv.h"
30#include <media/lirc.h> 30#include <media/lirc.h>
31#include <media/lirc_dev.h> 31#include <media/lirc_dev.h>
32 32
@@ -236,7 +236,7 @@ int lirc_dev_fop_open(struct inode *inode, struct file *file)
236 236
237 d->open++; 237 d->open++;
238 238
239 lirc_init_pdata(inode, file); 239 file->private_data = d->rdev;
240 nonseekable_open(inode, file); 240 nonseekable_open(inode, file);
241 mutex_unlock(&d->mutex); 241 mutex_unlock(&d->mutex);
242 242
@@ -250,11 +250,12 @@ EXPORT_SYMBOL(lirc_dev_fop_open);
250 250
251int lirc_dev_fop_close(struct inode *inode, struct file *file) 251int lirc_dev_fop_close(struct inode *inode, struct file *file)
252{ 252{
253 struct lirc_dev *d = file->private_data; 253 struct rc_dev *rcdev = file->private_data;
254 struct lirc_dev *d = rcdev->lirc_dev;
254 255
255 mutex_lock(&d->mutex); 256 mutex_lock(&d->mutex);
256 257
257 rc_close(d->rdev); 258 rc_close(rcdev);
258 d->open--; 259 d->open--;
259 260
260 mutex_unlock(&d->mutex); 261 mutex_unlock(&d->mutex);
@@ -265,7 +266,8 @@ EXPORT_SYMBOL(lirc_dev_fop_close);
265 266
266unsigned int lirc_dev_fop_poll(struct file *file, poll_table *wait) 267unsigned int lirc_dev_fop_poll(struct file *file, poll_table *wait)
267{ 268{
268 struct lirc_dev *d = file->private_data; 269 struct rc_dev *rcdev = file->private_data;
270 struct lirc_dev *d = rcdev->lirc_dev;
269 unsigned int ret; 271 unsigned int ret;
270 272
271 if (!d->attached) 273 if (!d->attached)
@@ -290,7 +292,8 @@ EXPORT_SYMBOL(lirc_dev_fop_poll);
290 292
291long lirc_dev_fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 293long lirc_dev_fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
292{ 294{
293 struct lirc_dev *d = file->private_data; 295 struct rc_dev *rcdev = file->private_data;
296 struct lirc_dev *d = rcdev->lirc_dev;
294 __u32 mode; 297 __u32 mode;
295 int result; 298 int result;
296 299
@@ -349,7 +352,8 @@ ssize_t lirc_dev_fop_read(struct file *file,
349 size_t length, 352 size_t length,
350 loff_t *ppos) 353 loff_t *ppos)
351{ 354{
352 struct lirc_dev *d = file->private_data; 355 struct rc_dev *rcdev = file->private_data;
356 struct lirc_dev *d = rcdev->lirc_dev;
353 unsigned char *buf; 357 unsigned char *buf;
354 int ret, written = 0; 358 int ret, written = 0;
355 DECLARE_WAITQUEUE(wait, current); 359 DECLARE_WAITQUEUE(wait, current);
@@ -448,24 +452,7 @@ out_unlocked:
448} 452}
449EXPORT_SYMBOL(lirc_dev_fop_read); 453EXPORT_SYMBOL(lirc_dev_fop_read);
450 454
451void lirc_init_pdata(struct inode *inode, struct file *file) 455int __init lirc_dev_init(void)
452{
453 struct lirc_dev *d = container_of(inode->i_cdev, struct lirc_dev, cdev);
454
455 file->private_data = d;
456}
457EXPORT_SYMBOL(lirc_init_pdata);
458
459void *lirc_get_pdata(struct file *file)
460{
461 struct lirc_dev *d = file->private_data;
462
463 return d->data;
464}
465EXPORT_SYMBOL(lirc_get_pdata);
466
467
468static int __init lirc_dev_init(void)
469{ 456{
470 int retval; 457 int retval;
471 458
@@ -489,16 +476,8 @@ static int __init lirc_dev_init(void)
489 return 0; 476 return 0;
490} 477}
491 478
492static void __exit lirc_dev_exit(void) 479void __exit lirc_dev_exit(void)
493{ 480{
494 class_destroy(lirc_class); 481 class_destroy(lirc_class);
495 unregister_chrdev_region(lirc_base_dev, LIRC_MAX_DEVICES); 482 unregister_chrdev_region(lirc_base_dev, LIRC_MAX_DEVICES);
496 pr_info("module unloaded\n");
497} 483}
498
499module_init(lirc_dev_init);
500module_exit(lirc_dev_exit);
501
502MODULE_DESCRIPTION("LIRC base driver module");
503MODULE_AUTHOR("Artur Lipowski");
504MODULE_LICENSE("GPL");