@@ -40,13 +40,16 @@ static void ir_raw_event_work(struct work_struct *work)
struct ir_raw_event_ctrl *raw =
container_of(work, struct ir_raw_event_ctrl, rx_work);
+ mutex_lock(&ir_raw_handler_lock);
+
while (kfifo_out(&raw->kfifo, &ev, sizeof(ev)) == sizeof(ev)) {
- mutex_lock(&ir_raw_handler_lock);
list_for_each_entry(handler, &ir_raw_handler_list, list)
handler->decode(raw->input_dev, ev);
- mutex_unlock(&ir_raw_handler_lock);
raw->prev_ev = ev;
}
+
+ mutex_unlock(&ir_raw_handler_lock);
+
}
/**