diff options
-rw-r--r-- | drivers/media/rc/fintek-cir.c | 11 | ||||
-rw-r--r-- | drivers/media/rc/iguanair.c | 7 | ||||
-rw-r--r-- | drivers/media/rc/ir-raw.c | 6 | ||||
-rw-r--r-- | drivers/media/rc/mceusb.c | 10 | ||||
-rw-r--r-- | drivers/media/rc/ttusbir.c | 19 |
5 files changed, 37 insertions, 16 deletions
diff --git a/drivers/media/rc/fintek-cir.c b/drivers/media/rc/fintek-cir.c index ab30c64f8124..52fd7696b1ba 100644 --- a/drivers/media/rc/fintek-cir.c +++ b/drivers/media/rc/fintek-cir.c | |||
@@ -295,6 +295,7 @@ static void fintek_process_rx_ir_data(struct fintek_dev *fintek) | |||
295 | { | 295 | { |
296 | DEFINE_IR_RAW_EVENT(rawir); | 296 | DEFINE_IR_RAW_EVENT(rawir); |
297 | u8 sample; | 297 | u8 sample; |
298 | bool event = false; | ||
298 | int i; | 299 | int i; |
299 | 300 | ||
300 | for (i = 0; i < fintek->pkts; i++) { | 301 | for (i = 0; i < fintek->pkts; i++) { |
@@ -332,7 +333,9 @@ static void fintek_process_rx_ir_data(struct fintek_dev *fintek) | |||
332 | fit_dbg("Storing %s with duration %d", | 333 | fit_dbg("Storing %s with duration %d", |
333 | rawir.pulse ? "pulse" : "space", | 334 | rawir.pulse ? "pulse" : "space", |
334 | rawir.duration); | 335 | rawir.duration); |
335 | ir_raw_event_store_with_filter(fintek->rdev, &rawir); | 336 | if (ir_raw_event_store_with_filter(fintek->rdev, |
337 | &rawir)) | ||
338 | event = true; | ||
336 | break; | 339 | break; |
337 | } | 340 | } |
338 | 341 | ||
@@ -342,8 +345,10 @@ static void fintek_process_rx_ir_data(struct fintek_dev *fintek) | |||
342 | 345 | ||
343 | fintek->pkts = 0; | 346 | fintek->pkts = 0; |
344 | 347 | ||
345 | fit_dbg("Calling ir_raw_event_handle"); | 348 | if (event) { |
346 | ir_raw_event_handle(fintek->rdev); | 349 | fit_dbg("Calling ir_raw_event_handle"); |
350 | ir_raw_event_handle(fintek->rdev); | ||
351 | } | ||
347 | } | 352 | } |
348 | 353 | ||
349 | /* copy data from hardware rx register into driver buffer */ | 354 | /* copy data from hardware rx register into driver buffer */ |
diff --git a/drivers/media/rc/iguanair.c b/drivers/media/rc/iguanair.c index 6a09c2e53753..66ba23738601 100644 --- a/drivers/media/rc/iguanair.c +++ b/drivers/media/rc/iguanair.c | |||
@@ -134,6 +134,7 @@ static void process_ir_data(struct iguanair *ir, unsigned len) | |||
134 | } else if (len >= 7) { | 134 | } else if (len >= 7) { |
135 | DEFINE_IR_RAW_EVENT(rawir); | 135 | DEFINE_IR_RAW_EVENT(rawir); |
136 | unsigned i; | 136 | unsigned i; |
137 | bool event = false; | ||
137 | 138 | ||
138 | init_ir_raw_event(&rawir); | 139 | init_ir_raw_event(&rawir); |
139 | 140 | ||
@@ -147,10 +148,12 @@ static void process_ir_data(struct iguanair *ir, unsigned len) | |||
147 | RX_RESOLUTION; | 148 | RX_RESOLUTION; |
148 | } | 149 | } |
149 | 150 | ||
150 | ir_raw_event_store_with_filter(ir->rc, &rawir); | 151 | if (ir_raw_event_store_with_filter(ir->rc, &rawir)) |
152 | event = true; | ||
151 | } | 153 | } |
152 | 154 | ||
153 | ir_raw_event_handle(ir->rc); | 155 | if (event) |
156 | ir_raw_event_handle(ir->rc); | ||
154 | } | 157 | } |
155 | } | 158 | } |
156 | 159 | ||
diff --git a/drivers/media/rc/ir-raw.c b/drivers/media/rc/ir-raw.c index a82025121345..97dc8d13b06b 100644 --- a/drivers/media/rc/ir-raw.c +++ b/drivers/media/rc/ir-raw.c | |||
@@ -157,7 +157,9 @@ EXPORT_SYMBOL_GPL(ir_raw_event_store_edge); | |||
157 | * This routine (which may be called from an interrupt context) works | 157 | * This routine (which may be called from an interrupt context) works |
158 | * in similar manner to ir_raw_event_store_edge. | 158 | * in similar manner to ir_raw_event_store_edge. |
159 | * This routine is intended for devices with limited internal buffer | 159 | * This routine is intended for devices with limited internal buffer |
160 | * It automerges samples of same type, and handles timeouts | 160 | * It automerges samples of same type, and handles timeouts. Returns non-zero |
161 | * if the event was added, and zero if the event was ignored due to idle | ||
162 | * processing. | ||
161 | */ | 163 | */ |
162 | int ir_raw_event_store_with_filter(struct rc_dev *dev, struct ir_raw_event *ev) | 164 | int ir_raw_event_store_with_filter(struct rc_dev *dev, struct ir_raw_event *ev) |
163 | { | 165 | { |
@@ -184,7 +186,7 @@ int ir_raw_event_store_with_filter(struct rc_dev *dev, struct ir_raw_event *ev) | |||
184 | dev->raw->this_ev.duration >= dev->timeout) | 186 | dev->raw->this_ev.duration >= dev->timeout) |
185 | ir_raw_event_set_idle(dev, true); | 187 | ir_raw_event_set_idle(dev, true); |
186 | 188 | ||
187 | return 0; | 189 | return 1; |
188 | } | 190 | } |
189 | EXPORT_SYMBOL_GPL(ir_raw_event_store_with_filter); | 191 | EXPORT_SYMBOL_GPL(ir_raw_event_store_with_filter); |
190 | 192 | ||
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c index f38d9a8c6880..d289fd42729f 100644 --- a/drivers/media/rc/mceusb.c +++ b/drivers/media/rc/mceusb.c | |||
@@ -974,6 +974,7 @@ static void mceusb_handle_command(struct mceusb_dev *ir, int index) | |||
974 | static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) | 974 | static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) |
975 | { | 975 | { |
976 | DEFINE_IR_RAW_EVENT(rawir); | 976 | DEFINE_IR_RAW_EVENT(rawir); |
977 | bool event = false; | ||
977 | int i = 0; | 978 | int i = 0; |
978 | 979 | ||
979 | /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ | 980 | /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ |
@@ -1004,7 +1005,8 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) | |||
1004 | rawir.pulse ? "pulse" : "space", | 1005 | rawir.pulse ? "pulse" : "space", |
1005 | rawir.duration); | 1006 | rawir.duration); |
1006 | 1007 | ||
1007 | ir_raw_event_store_with_filter(ir->rc, &rawir); | 1008 | if (ir_raw_event_store_with_filter(ir->rc, &rawir)) |
1009 | event = true; | ||
1008 | break; | 1010 | break; |
1009 | case CMD_DATA: | 1011 | case CMD_DATA: |
1010 | ir->rem--; | 1012 | ir->rem--; |
@@ -1032,8 +1034,10 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) | |||
1032 | if (ir->parser_state != CMD_HEADER && !ir->rem) | 1034 | if (ir->parser_state != CMD_HEADER && !ir->rem) |
1033 | ir->parser_state = CMD_HEADER; | 1035 | ir->parser_state = CMD_HEADER; |
1034 | } | 1036 | } |
1035 | mce_dbg(ir->dev, "processed IR data, calling ir_raw_event_handle\n"); | 1037 | if (event) { |
1036 | ir_raw_event_handle(ir->rc); | 1038 | mce_dbg(ir->dev, "processed IR data, calling ir_raw_event_handle\n"); |
1039 | ir_raw_event_handle(ir->rc); | ||
1040 | } | ||
1037 | } | 1041 | } |
1038 | 1042 | ||
1039 | static void mceusb_dev_recv(struct urb *urb) | 1043 | static void mceusb_dev_recv(struct urb *urb) |
diff --git a/drivers/media/rc/ttusbir.c b/drivers/media/rc/ttusbir.c index 71f03acabac8..1aee57fd2f32 100644 --- a/drivers/media/rc/ttusbir.c +++ b/drivers/media/rc/ttusbir.c | |||
@@ -121,8 +121,9 @@ static void ttusbir_bulk_complete(struct urb *urb) | |||
121 | */ | 121 | */ |
122 | static void ttusbir_process_ir_data(struct ttusbir *tt, uint8_t *buf) | 122 | static void ttusbir_process_ir_data(struct ttusbir *tt, uint8_t *buf) |
123 | { | 123 | { |
124 | struct ir_raw_event rawir; | ||
124 | unsigned i, v, b; | 125 | unsigned i, v, b; |
125 | DEFINE_IR_RAW_EVENT(rawir); | 126 | bool event = false; |
126 | 127 | ||
127 | init_ir_raw_event(&rawir); | 128 | init_ir_raw_event(&rawir); |
128 | 129 | ||
@@ -132,12 +133,14 @@ static void ttusbir_process_ir_data(struct ttusbir *tt, uint8_t *buf) | |||
132 | case 0xfe: | 133 | case 0xfe: |
133 | rawir.pulse = false; | 134 | rawir.pulse = false; |
134 | rawir.duration = NS_PER_BYTE; | 135 | rawir.duration = NS_PER_BYTE; |
135 | ir_raw_event_store_with_filter(tt->rc, &rawir); | 136 | if (ir_raw_event_store_with_filter(tt->rc, &rawir)) |
137 | event = true; | ||
136 | break; | 138 | break; |
137 | case 0: | 139 | case 0: |
138 | rawir.pulse = true; | 140 | rawir.pulse = true; |
139 | rawir.duration = NS_PER_BYTE; | 141 | rawir.duration = NS_PER_BYTE; |
140 | ir_raw_event_store_with_filter(tt->rc, &rawir); | 142 | if (ir_raw_event_store_with_filter(tt->rc, &rawir)) |
143 | event = true; | ||
141 | break; | 144 | break; |
142 | default: | 145 | default: |
143 | /* one edge per byte */ | 146 | /* one edge per byte */ |
@@ -150,16 +153,20 @@ static void ttusbir_process_ir_data(struct ttusbir *tt, uint8_t *buf) | |||
150 | } | 153 | } |
151 | 154 | ||
152 | rawir.duration = NS_PER_BIT * (8 - b); | 155 | rawir.duration = NS_PER_BIT * (8 - b); |
153 | ir_raw_event_store_with_filter(tt->rc, &rawir); | 156 | if (ir_raw_event_store_with_filter(tt->rc, &rawir)) |
157 | event = true; | ||
154 | 158 | ||
155 | rawir.pulse = !rawir.pulse; | 159 | rawir.pulse = !rawir.pulse; |
156 | rawir.duration = NS_PER_BIT * b; | 160 | rawir.duration = NS_PER_BIT * b; |
157 | ir_raw_event_store_with_filter(tt->rc, &rawir); | 161 | if (ir_raw_event_store_with_filter(tt->rc, &rawir)) |
162 | event = true; | ||
158 | break; | 163 | break; |
159 | } | 164 | } |
160 | } | 165 | } |
161 | 166 | ||
162 | ir_raw_event_handle(tt->rc); | 167 | /* don't wakeup when there's nothing to do */ |
168 | if (event) | ||
169 | ir_raw_event_handle(tt->rc); | ||
163 | } | 170 | } |
164 | 171 | ||
165 | static void ttusbir_urb_complete(struct urb *urb) | 172 | static void ttusbir_urb_complete(struct urb *urb) |