diff options
Diffstat (limited to 'drivers/hid/hid-input.c')
-rw-r--r-- | drivers/hid/hid-input.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 85803f183fcc..8c4c908177fa 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -101,6 +101,22 @@ struct hidinput_key_translation { | |||
101 | 101 | ||
102 | #define APPLE_FLAG_FKEY 0x01 | 102 | #define APPLE_FLAG_FKEY 0x01 |
103 | 103 | ||
104 | static struct hidinput_key_translation apple_fn_keys[] = { | ||
105 | { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY }, | ||
106 | { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY }, | ||
107 | { KEY_F3, KEY_CYCLEWINDOWS, APPLE_FLAG_FKEY }, /* Exposé */ | ||
108 | { KEY_F4, KEY_FN_F4, APPLE_FLAG_FKEY }, /* Dashboard */ | ||
109 | { KEY_F5, KEY_FN_F5 }, | ||
110 | { KEY_F6, KEY_FN_F6 }, | ||
111 | { KEY_F7, KEY_BACK, APPLE_FLAG_FKEY }, | ||
112 | { KEY_F8, KEY_PLAYPAUSE, APPLE_FLAG_FKEY }, | ||
113 | { KEY_F9, KEY_FORWARD, APPLE_FLAG_FKEY }, | ||
114 | { KEY_F10, KEY_MUTE, APPLE_FLAG_FKEY }, | ||
115 | { KEY_F11, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY }, | ||
116 | { KEY_F12, KEY_VOLUMEUP, APPLE_FLAG_FKEY }, | ||
117 | { } | ||
118 | }; | ||
119 | |||
104 | static struct hidinput_key_translation powerbook_fn_keys[] = { | 120 | static struct hidinput_key_translation powerbook_fn_keys[] = { |
105 | { KEY_BACKSPACE, KEY_DELETE }, | 121 | { KEY_BACKSPACE, KEY_DELETE }, |
106 | { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY }, | 122 | { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY }, |
@@ -178,7 +194,10 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, | |||
178 | if (hid_apple_fnmode) { | 194 | if (hid_apple_fnmode) { |
179 | int do_translate; | 195 | int do_translate; |
180 | 196 | ||
181 | trans = find_translation(powerbook_fn_keys, usage->code); | 197 | trans = find_translation((hid->product < 0x220 || |
198 | hid->product >= 0x300) ? | ||
199 | powerbook_fn_keys : apple_fn_keys, | ||
200 | usage->code); | ||
182 | if (trans) { | 201 | if (trans) { |
183 | if (test_bit(usage->code, hid->apple_pressed_fn)) | 202 | if (test_bit(usage->code, hid->apple_pressed_fn)) |
184 | do_translate = 1; | 203 | do_translate = 1; |
@@ -236,6 +255,9 @@ static void hidinput_apple_setup(struct input_dev *input) | |||
236 | set_bit(KEY_NUMLOCK, input->keybit); | 255 | set_bit(KEY_NUMLOCK, input->keybit); |
237 | 256 | ||
238 | /* Enable all needed keys */ | 257 | /* Enable all needed keys */ |
258 | for (trans = apple_fn_keys; trans->from; trans++) | ||
259 | set_bit(trans->to, input->keybit); | ||
260 | |||
239 | for (trans = powerbook_fn_keys; trans->from; trans++) | 261 | for (trans = powerbook_fn_keys; trans->from; trans++) |
240 | set_bit(trans->to, input->keybit); | 262 | set_bit(trans->to, input->keybit); |
241 | 263 | ||