blob: e300b81008af38c0af2f11a47f09fc4383d9dc0b [file] [log] [blame]
Greg Kroah-Hartmanc81c8b62008-03-06 21:30:23 -08001#include "firesat.h"
2#include "firesat-rc.h"
3
4#include <linux/input.h>
5
6static u16 firesat_irtable[] = {
7 KEY_ESC,
8 KEY_F9,
9 KEY_1,
10 KEY_2,
11 KEY_3,
12 KEY_4,
13 KEY_5,
14 KEY_6,
15 KEY_7,
16 KEY_8,
17 KEY_9,
18 KEY_I,
19 KEY_0,
20 KEY_ENTER,
21 KEY_RED,
22 KEY_UP,
23 KEY_GREEN,
24 KEY_F10,
25 KEY_SPACE,
26 KEY_F11,
27 KEY_YELLOW,
28 KEY_DOWN,
29 KEY_BLUE,
30 KEY_Z,
31 KEY_P,
32 KEY_PAGEDOWN,
33 KEY_LEFT,
34 KEY_W,
35 KEY_RIGHT,
36 KEY_P,
37 KEY_M,
38 KEY_R,
39 KEY_V,
40 KEY_C,
41 0
42};
43
44static struct input_dev firesat_idev;
45
46int firesat_register_rc(void)
47{
48 int index;
49
50 memset(&firesat_idev, 0, sizeof(firesat_idev));
51
52 firesat_idev.evbit[0] = BIT(EV_KEY);
53
54 for (index = 0; firesat_irtable[index] != 0; index++)
55 set_bit(firesat_irtable[index], firesat_idev.keybit);
56
57 return input_register_device(&firesat_idev);
58}
59
60int firesat_unregister_rc(void)
61{
62 input_unregister_device(&firesat_idev);
63 return 0;
64}
65
66int firesat_got_remotecontrolcode(u16 code)
67{
68 u16 keycode;
69
70 if (code > 0x4500 && code < 0x4520)
71 keycode = firesat_irtable[code - 0x4501];
72 else if (code > 0x453f && code < 0x4543)
73 keycode = firesat_irtable[code - 0x4521];
74 else {
75 printk(KERN_DEBUG "%s: invalid key code 0x%04x\n", __func__,
76 code);
77 return -EINVAL;
78 }
79
80 input_report_key(&firesat_idev, keycode, 1);
81 input_report_key(&firesat_idev, keycode, 0);
82
83 return 0;
84}