diff options
Diffstat (limited to 'drivers/media/IR/ir-raw-event.c')
-rw-r--r-- | drivers/media/IR/ir-raw-event.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/media/IR/ir-raw-event.c b/drivers/media/IR/ir-raw-event.c index 9c71ac858923..0ae55433cef9 100644 --- a/drivers/media/IR/ir-raw-event.c +++ b/drivers/media/IR/ir-raw-event.c | |||
@@ -17,6 +17,13 @@ | |||
17 | /* Define the max number of bit transitions per IR keycode */ | 17 | /* Define the max number of bit transitions per IR keycode */ |
18 | #define MAX_IR_EVENT_SIZE 256 | 18 | #define MAX_IR_EVENT_SIZE 256 |
19 | 19 | ||
20 | static void ir_keyup_timer(unsigned long data) | ||
21 | { | ||
22 | struct input_dev *input_dev = (struct input_dev *)data; | ||
23 | |||
24 | ir_keyup(input_dev); | ||
25 | } | ||
26 | |||
20 | int ir_raw_event_register(struct input_dev *input_dev) | 27 | int ir_raw_event_register(struct input_dev *input_dev) |
21 | { | 28 | { |
22 | struct ir_input_dev *ir = input_get_drvdata(input_dev); | 29 | struct ir_input_dev *ir = input_get_drvdata(input_dev); |
@@ -27,6 +34,11 @@ int ir_raw_event_register(struct input_dev *input_dev) | |||
27 | size = sizeof(struct ir_raw_event) * MAX_IR_EVENT_SIZE * 2; | 34 | size = sizeof(struct ir_raw_event) * MAX_IR_EVENT_SIZE * 2; |
28 | size = roundup_pow_of_two(size); | 35 | size = roundup_pow_of_two(size); |
29 | 36 | ||
37 | init_timer(&ir->raw->timer_keyup); | ||
38 | ir->raw->timer_keyup.function = ir_keyup_timer; | ||
39 | ir->raw->timer_keyup.data = (unsigned long)input_dev; | ||
40 | set_bit(EV_REP, input_dev->evbit); | ||
41 | |||
30 | rc = kfifo_alloc(&ir->raw->kfifo, size, GFP_KERNEL); | 42 | rc = kfifo_alloc(&ir->raw->kfifo, size, GFP_KERNEL); |
31 | 43 | ||
32 | return rc; | 44 | return rc; |
@@ -40,6 +52,8 @@ void ir_raw_event_unregister(struct input_dev *input_dev) | |||
40 | if (!ir->raw) | 52 | if (!ir->raw) |
41 | return; | 53 | return; |
42 | 54 | ||
55 | del_timer_sync(&ir->raw->timer_keyup); | ||
56 | |||
43 | kfifo_free(&ir->raw->kfifo); | 57 | kfifo_free(&ir->raw->kfifo); |
44 | kfree(ir->raw); | 58 | kfree(ir->raw); |
45 | ir->raw = NULL; | 59 | ir->raw = NULL; |