aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxim Levitsky <maximlevitsky@gmail.com>2010-07-31 10:59:15 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-08-08 22:42:59 -0400
commit510fcb70ff375b0cec6638fcfafdf36233690bfc (patch)
tree7bed17c4061ce4af6acc1a9445ad7ae3da80b3b6
parentade321c5b8a0e4d40c0f3b73bf0d2579850028d0 (diff)
V4L/DVB: IR: minor fixes
* lirc: Don't propagate reset event to userspace * lirc: Remove strange logic from lirc that would make first sample always be pulse * Make TO_US macro actualy print what it should. Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/IR/ir-core-priv.h4
-rw-r--r--drivers/media/IR/ir-lirc-codec.c14
-rw-r--r--drivers/media/IR/ir-raw-event.c3
3 files changed, 12 insertions, 9 deletions
diff --git a/drivers/media/IR/ir-core-priv.h b/drivers/media/IR/ir-core-priv.h
index babd52061bc3..dc26e2beeefb 100644
--- a/drivers/media/IR/ir-core-priv.h
+++ b/drivers/media/IR/ir-core-priv.h
@@ -76,7 +76,6 @@ struct ir_raw_event_ctrl {
76 struct lirc_codec { 76 struct lirc_codec {
77 struct ir_input_dev *ir_dev; 77 struct ir_input_dev *ir_dev;
78 struct lirc_driver *drv; 78 struct lirc_driver *drv;
79 int lircdata;
80 } lirc; 79 } lirc;
81}; 80};
82 81
@@ -104,10 +103,9 @@ static inline void decrease_duration(struct ir_raw_event *ev, unsigned duration)
104 ev->duration -= duration; 103 ev->duration -= duration;
105} 104}
106 105
107#define TO_US(duration) (((duration) + 500) / 1000) 106#define TO_US(duration) DIV_ROUND_CLOSEST((duration), 1000)
108#define TO_STR(is_pulse) ((is_pulse) ? "pulse" : "space") 107#define TO_STR(is_pulse) ((is_pulse) ? "pulse" : "space")
109#define IS_RESET(ev) (ev.duration == 0) 108#define IS_RESET(ev) (ev.duration == 0)
110
111/* 109/*
112 * Routines from ir-sysfs.c - Meant to be called only internally inside 110 * Routines from ir-sysfs.c - Meant to be called only internally inside
113 * ir-core 111 * ir-core
diff --git a/drivers/media/IR/ir-lirc-codec.c b/drivers/media/IR/ir-lirc-codec.c
index 3ba482d96c4b..8ca01fd67139 100644
--- a/drivers/media/IR/ir-lirc-codec.c
+++ b/drivers/media/IR/ir-lirc-codec.c
@@ -32,6 +32,7 @@
32static int ir_lirc_decode(struct input_dev *input_dev, struct ir_raw_event ev) 32static int ir_lirc_decode(struct input_dev *input_dev, struct ir_raw_event ev)
33{ 33{
34 struct ir_input_dev *ir_dev = input_get_drvdata(input_dev); 34 struct ir_input_dev *ir_dev = input_get_drvdata(input_dev);
35 int sample;
35 36
36 if (!(ir_dev->raw->enabled_protocols & IR_TYPE_LIRC)) 37 if (!(ir_dev->raw->enabled_protocols & IR_TYPE_LIRC))
37 return 0; 38 return 0;
@@ -39,18 +40,21 @@ static int ir_lirc_decode(struct input_dev *input_dev, struct ir_raw_event ev)
39 if (!ir_dev->raw->lirc.drv || !ir_dev->raw->lirc.drv->rbuf) 40 if (!ir_dev->raw->lirc.drv || !ir_dev->raw->lirc.drv->rbuf)
40 return -EINVAL; 41 return -EINVAL;
41 42
43 if (IS_RESET(ev))
44 return 0;
45
42 IR_dprintk(2, "LIRC data transfer started (%uus %s)\n", 46 IR_dprintk(2, "LIRC data transfer started (%uus %s)\n",
43 TO_US(ev.duration), TO_STR(ev.pulse)); 47 TO_US(ev.duration), TO_STR(ev.pulse));
44 48
45 ir_dev->raw->lirc.lircdata += ev.duration / 1000; 49
50 sample = ev.duration / 1000;
46 if (ev.pulse) 51 if (ev.pulse)
47 ir_dev->raw->lirc.lircdata |= PULSE_BIT; 52 sample |= PULSE_BIT;
48 53
49 lirc_buffer_write(ir_dev->raw->lirc.drv->rbuf, 54 lirc_buffer_write(ir_dev->raw->lirc.drv->rbuf,
50 (unsigned char *) &ir_dev->raw->lirc.lircdata); 55 (unsigned char *) &sample);
51 wake_up(&ir_dev->raw->lirc.drv->rbuf->wait_poll); 56 wake_up(&ir_dev->raw->lirc.drv->rbuf->wait_poll);
52 57
53 ir_dev->raw->lirc.lircdata = 0;
54 58
55 return 0; 59 return 0;
56} 60}
@@ -224,8 +228,6 @@ static int ir_lirc_register(struct input_dev *input_dev)
224 228
225 ir_dev->raw->lirc.drv = drv; 229 ir_dev->raw->lirc.drv = drv;
226 ir_dev->raw->lirc.ir_dev = ir_dev; 230 ir_dev->raw->lirc.ir_dev = ir_dev;
227 ir_dev->raw->lirc.lircdata = PULSE_MASK;
228
229 return 0; 231 return 0;
230 232
231lirc_register_failed: 233lirc_register_failed:
diff --git a/drivers/media/IR/ir-raw-event.c b/drivers/media/IR/ir-raw-event.c
index 6f192ef31db1..51f65daa086b 100644
--- a/drivers/media/IR/ir-raw-event.c
+++ b/drivers/media/IR/ir-raw-event.c
@@ -66,6 +66,9 @@ int ir_raw_event_store(struct input_dev *input_dev, struct ir_raw_event *ev)
66 if (!ir->raw) 66 if (!ir->raw)
67 return -EINVAL; 67 return -EINVAL;
68 68
69 IR_dprintk(2, "sample: (05%dus %s)\n",
70 TO_US(ev->duration), TO_STR(ev->pulse));
71
69 if (kfifo_in(&ir->raw->kfifo, ev, sizeof(*ev)) != sizeof(*ev)) 72 if (kfifo_in(&ir->raw->kfifo, ev, sizeof(*ev)) != sizeof(*ev))
70 return -ENOMEM; 73 return -ENOMEM;
71 74