aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/hid-input.c
diff options
context:
space:
mode:
authorMichel Daenzer <michel@tungstengraphics.com>2007-10-24 10:30:37 -0400
committerJiri Kosina <jkosina@suse.cz>2008-01-28 08:51:19 -0500
commita45d82d19a6c2a717bcc33cff243199b77fa0082 (patch)
treec0a9a9e4010ae1e09bc3a7dec4c8a890e2949f96 /drivers/hid/hid-input.c
parent81e1a875505f2963f4d22f7e7ade39d764755f9b (diff)
HID: Add support for Apple aluminum USB keyboards.
Reuse the existing quirks for Apple laptop USB keyboards. Signed-off-by: Michel Daenzer <michel@tungstengraphics.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/hid-input.c')
-rw-r--r--drivers/hid/hid-input.c24
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
104static 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
104static struct hidinput_key_translation powerbook_fn_keys[] = { 120static 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