diff options
author | Maxim Levitsky <maximlevitsky@gmail.com> | 2010-07-31 10:59:15 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-08 22:42:59 -0400 |
commit | 510fcb70ff375b0cec6638fcfafdf36233690bfc (patch) | |
tree | 7bed17c4061ce4af6acc1a9445ad7ae3da80b3b6 | |
parent | ade321c5b8a0e4d40c0f3b73bf0d2579850028d0 (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.h | 4 | ||||
-rw-r--r-- | drivers/media/IR/ir-lirc-codec.c | 14 | ||||
-rw-r--r-- | drivers/media/IR/ir-raw-event.c | 3 |
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 @@ | |||
32 | static int ir_lirc_decode(struct input_dev *input_dev, struct ir_raw_event ev) | 32 | static 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 | ||
231 | lirc_register_failed: | 233 | lirc_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 | ||