aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/rc/mceusb.c
diff options
context:
space:
mode:
authorSean Young <sean@mess.org>2012-08-13 07:59:47 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-08-13 15:19:12 -0400
commitb83bfd1b0127b0963fcac39280280e365e7e04d8 (patch)
tree3a7d76ffb8844af1ce9ffb5299d6f2726699c3e5 /drivers/media/rc/mceusb.c
parent0938069fa08970f1c898970c1331a029efe9a1ce (diff)
[media] rc: do not wake up rc thread unless there is something to do
The TechnoTrend USB IR Receiver sends 125 ISO URBs per second, even when there is no IR activity. Reduce the number of wake ups from the other drivers too. This saves about 0.25ms/s on a 2.4GHz Core 2 according to powertop. Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/rc/mceusb.c')
-rw-r--r--drivers/media/rc/mceusb.c10
1 files changed, 7 insertions, 3 deletions
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)
974static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) 974static 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
1039static void mceusb_dev_recv(struct urb *urb) 1043static void mceusb_dev_recv(struct urb *urb)