diff options
Diffstat (limited to 'drivers/media/dvb/ttpci/av7110_ir.c')
-rw-r--r-- | drivers/media/dvb/ttpci/av7110_ir.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/drivers/media/dvb/ttpci/av7110_ir.c b/drivers/media/dvb/ttpci/av7110_ir.c index 357a3728ec68..f5e59fc924af 100644 --- a/drivers/media/dvb/ttpci/av7110_ir.c +++ b/drivers/media/dvb/ttpci/av7110_ir.c | |||
@@ -15,7 +15,7 @@ | |||
15 | 15 | ||
16 | static int av_cnt; | 16 | static int av_cnt; |
17 | static struct av7110 *av_list[4]; | 17 | static struct av7110 *av_list[4]; |
18 | static struct input_dev input_dev; | 18 | static struct input_dev *input_dev; |
19 | 19 | ||
20 | static u16 key_map [256] = { | 20 | static u16 key_map [256] = { |
21 | KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, | 21 | KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, |
@@ -43,10 +43,10 @@ static u16 key_map [256] = { | |||
43 | 43 | ||
44 | static void av7110_emit_keyup(unsigned long data) | 44 | static void av7110_emit_keyup(unsigned long data) |
45 | { | 45 | { |
46 | if (!data || !test_bit(data, input_dev.key)) | 46 | if (!data || !test_bit(data, input_dev->key)) |
47 | return; | 47 | return; |
48 | 48 | ||
49 | input_event(&input_dev, EV_KEY, data, !!0); | 49 | input_event(input_dev, EV_KEY, data, !!0); |
50 | } | 50 | } |
51 | 51 | ||
52 | 52 | ||
@@ -112,13 +112,13 @@ static void av7110_emit_key(unsigned long parm) | |||
112 | if (timer_pending(&keyup_timer)) { | 112 | if (timer_pending(&keyup_timer)) { |
113 | del_timer(&keyup_timer); | 113 | del_timer(&keyup_timer); |
114 | if (keyup_timer.data != keycode || new_toggle != old_toggle) { | 114 | if (keyup_timer.data != keycode || new_toggle != old_toggle) { |
115 | input_event(&input_dev, EV_KEY, keyup_timer.data, !!0); | 115 | input_event(input_dev, EV_KEY, keyup_timer.data, !!0); |
116 | input_event(&input_dev, EV_KEY, keycode, !0); | 116 | input_event(input_dev, EV_KEY, keycode, !0); |
117 | } else | 117 | } else |
118 | input_event(&input_dev, EV_KEY, keycode, 2); | 118 | input_event(input_dev, EV_KEY, keycode, 2); |
119 | 119 | ||
120 | } else | 120 | } else |
121 | input_event(&input_dev, EV_KEY, keycode, !0); | 121 | input_event(input_dev, EV_KEY, keycode, !0); |
122 | 122 | ||
123 | keyup_timer.expires = jiffies + UP_TIMEOUT; | 123 | keyup_timer.expires = jiffies + UP_TIMEOUT; |
124 | keyup_timer.data = keycode; | 124 | keyup_timer.data = keycode; |
@@ -132,13 +132,13 @@ static void input_register_keys(void) | |||
132 | { | 132 | { |
133 | int i; | 133 | int i; |
134 | 134 | ||
135 | memset(input_dev.keybit, 0, sizeof(input_dev.keybit)); | 135 | memset(input_dev->keybit, 0, sizeof(input_dev->keybit)); |
136 | 136 | ||
137 | for (i = 0; i < sizeof(key_map) / sizeof(key_map[0]); i++) { | 137 | for (i = 0; i < ARRAY_SIZE(key_map); i++) { |
138 | if (key_map[i] > KEY_MAX) | 138 | if (key_map[i] > KEY_MAX) |
139 | key_map[i] = 0; | 139 | key_map[i] = 0; |
140 | else if (key_map[i] > KEY_RESERVED) | 140 | else if (key_map[i] > KEY_RESERVED) |
141 | set_bit(key_map[i], input_dev.keybit); | 141 | set_bit(key_map[i], input_dev->keybit); |
142 | } | 142 | } |
143 | } | 143 | } |
144 | 144 | ||
@@ -216,12 +216,17 @@ int __init av7110_ir_init(struct av7110 *av7110) | |||
216 | init_timer(&keyup_timer); | 216 | init_timer(&keyup_timer); |
217 | keyup_timer.data = 0; | 217 | keyup_timer.data = 0; |
218 | 218 | ||
219 | input_dev.name = "DVB on-card IR receiver"; | 219 | input_dev = input_allocate_device(); |
220 | set_bit(EV_KEY, input_dev.evbit); | 220 | if (!input_dev) |
221 | set_bit(EV_REP, input_dev.evbit); | 221 | return -ENOMEM; |
222 | |||
223 | input_dev->name = "DVB on-card IR receiver"; | ||
224 | |||
225 | set_bit(EV_KEY, input_dev->evbit); | ||
226 | set_bit(EV_REP, input_dev->evbit); | ||
222 | input_register_keys(); | 227 | input_register_keys(); |
223 | input_register_device(&input_dev); | 228 | input_register_device(input_dev); |
224 | input_dev.timer.function = input_repeat_key; | 229 | input_dev->timer.function = input_repeat_key; |
225 | 230 | ||
226 | e = create_proc_entry("av7110_ir", S_IFREG | S_IRUGO | S_IWUSR, NULL); | 231 | e = create_proc_entry("av7110_ir", S_IFREG | S_IRUGO | S_IWUSR, NULL); |
227 | if (e) { | 232 | if (e) { |
@@ -256,7 +261,7 @@ void __exit av7110_ir_exit(struct av7110 *av7110) | |||
256 | if (av_cnt == 1) { | 261 | if (av_cnt == 1) { |
257 | del_timer_sync(&keyup_timer); | 262 | del_timer_sync(&keyup_timer); |
258 | remove_proc_entry("av7110_ir", NULL); | 263 | remove_proc_entry("av7110_ir", NULL); |
259 | input_unregister_device(&input_dev); | 264 | input_unregister_device(input_dev); |
260 | } | 265 | } |
261 | 266 | ||
262 | av_cnt--; | 267 | av_cnt--; |