diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-14 12:49:16 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-14 12:49:16 -0500 |
commit | e7de369050534025b33aab1033358bf47a577e4d (patch) | |
tree | fed44f469923690b98f9de2c87e6d1de76f71dc9 /drivers/usb | |
parent | 87530db5ec7d519c7ba334e414307c5130ae2da8 (diff) | |
parent | eab9edd27f7ceaad6b57085817d63287bda15190 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/input/Kconfig | 10 | ||||
-rw-r--r-- | drivers/usb/input/hid-core.c | 30 | ||||
-rw-r--r-- | drivers/usb/input/hid-input.c | 179 | ||||
-rw-r--r-- | drivers/usb/input/hid.h | 30 | ||||
-rw-r--r-- | drivers/usb/input/pid.c | 2 | ||||
-rw-r--r-- | drivers/usb/input/wacom.c | 14 |
6 files changed, 243 insertions, 22 deletions
diff --git a/drivers/usb/input/Kconfig b/drivers/usb/input/Kconfig index 509dd0a04c54..5246b35301de 100644 --- a/drivers/usb/input/Kconfig +++ b/drivers/usb/input/Kconfig | |||
@@ -37,6 +37,16 @@ config USB_HIDINPUT | |||
37 | 37 | ||
38 | If unsure, say Y. | 38 | If unsure, say Y. |
39 | 39 | ||
40 | config USB_HIDINPUT_POWERBOOK | ||
41 | bool "Enable support for iBook/PowerBook special keys" | ||
42 | default n | ||
43 | depends on USB_HIDINPUT | ||
44 | help | ||
45 | Say Y here if you want support for the special keys (Fn, Numlock) on | ||
46 | Apple iBooks and PowerBooks. | ||
47 | |||
48 | If unsure, say N. | ||
49 | |||
40 | config HID_FF | 50 | config HID_FF |
41 | bool "Force feedback support (EXPERIMENTAL)" | 51 | bool "Force feedback support (EXPERIMENTAL)" |
42 | depends on USB_HIDINPUT && EXPERIMENTAL | 52 | depends on USB_HIDINPUT && EXPERIMENTAL |
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c index 5f52979af1c7..a91e72c41415 100644 --- a/drivers/usb/input/hid-core.c +++ b/drivers/usb/input/hid-core.c | |||
@@ -1450,6 +1450,9 @@ void hid_init_reports(struct hid_device *hid) | |||
1450 | #define USB_VENDOR_ID_APPLE 0x05ac | 1450 | #define USB_VENDOR_ID_APPLE 0x05ac |
1451 | #define USB_DEVICE_ID_APPLE_POWERMOUSE 0x0304 | 1451 | #define USB_DEVICE_ID_APPLE_POWERMOUSE 0x0304 |
1452 | 1452 | ||
1453 | #define USB_VENDOR_ID_CHERRY 0x046a | ||
1454 | #define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023 | ||
1455 | |||
1453 | /* | 1456 | /* |
1454 | * Alphabetically sorted blacklist by quirk type. | 1457 | * Alphabetically sorted blacklist by quirk type. |
1455 | */ | 1458 | */ |
@@ -1580,6 +1583,16 @@ static const struct hid_blacklist { | |||
1580 | { USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD, HID_QUIRK_BADPAD }, | 1583 | { USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD, HID_QUIRK_BADPAD }, |
1581 | { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD }, | 1584 | { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD }, |
1582 | 1585 | ||
1586 | { USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION, HID_QUIRK_CYMOTION }, | ||
1587 | |||
1588 | { USB_VENDOR_ID_APPLE, 0x020E, HID_QUIRK_POWERBOOK_HAS_FN }, | ||
1589 | { USB_VENDOR_ID_APPLE, 0x020F, HID_QUIRK_POWERBOOK_HAS_FN }, | ||
1590 | { USB_VENDOR_ID_APPLE, 0x0214, HID_QUIRK_POWERBOOK_HAS_FN }, | ||
1591 | { USB_VENDOR_ID_APPLE, 0x0215, HID_QUIRK_POWERBOOK_HAS_FN }, | ||
1592 | { USB_VENDOR_ID_APPLE, 0x0216, HID_QUIRK_POWERBOOK_HAS_FN }, | ||
1593 | { USB_VENDOR_ID_APPLE, 0x030A, HID_QUIRK_POWERBOOK_HAS_FN }, | ||
1594 | { USB_VENDOR_ID_APPLE, 0x030B, HID_QUIRK_POWERBOOK_HAS_FN }, | ||
1595 | |||
1583 | { 0, 0 } | 1596 | { 0, 0 } |
1584 | }; | 1597 | }; |
1585 | 1598 | ||
@@ -1626,6 +1639,20 @@ static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid) | |||
1626 | usb_buffer_free(dev, hid->bufsize, hid->ctrlbuf, hid->ctrlbuf_dma); | 1639 | usb_buffer_free(dev, hid->bufsize, hid->ctrlbuf, hid->ctrlbuf_dma); |
1627 | } | 1640 | } |
1628 | 1641 | ||
1642 | /* | ||
1643 | * Cherry Cymotion keyboard have an invalid HID report descriptor, | ||
1644 | * that needs fixing before we can parse it. | ||
1645 | */ | ||
1646 | |||
1647 | static void hid_fixup_cymotion_descriptor(char *rdesc, int rsize) | ||
1648 | { | ||
1649 | if (rsize >= 17 && rdesc[11] == 0x3c && rdesc[12] == 0x02) { | ||
1650 | info("Fixing up Cherry Cymotion report descriptor"); | ||
1651 | rdesc[11] = rdesc[16] = 0xff; | ||
1652 | rdesc[12] = rdesc[17] = 0x03; | ||
1653 | } | ||
1654 | } | ||
1655 | |||
1629 | static struct hid_device *usb_hid_configure(struct usb_interface *intf) | 1656 | static struct hid_device *usb_hid_configure(struct usb_interface *intf) |
1630 | { | 1657 | { |
1631 | struct usb_host_interface *interface = intf->cur_altsetting; | 1658 | struct usb_host_interface *interface = intf->cur_altsetting; |
@@ -1673,6 +1700,9 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf) | |||
1673 | return NULL; | 1700 | return NULL; |
1674 | } | 1701 | } |
1675 | 1702 | ||
1703 | if ((quirks & HID_QUIRK_CYMOTION)) | ||
1704 | hid_fixup_cymotion_descriptor(rdesc, rsize); | ||
1705 | |||
1676 | #ifdef DEBUG_DATA | 1706 | #ifdef DEBUG_DATA |
1677 | printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n); | 1707 | printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n); |
1678 | for (n = 0; n < rsize; n++) | 1708 | for (n = 0; n < rsize; n++) |
diff --git a/drivers/usb/input/hid-input.c b/drivers/usb/input/hid-input.c index 192a03b28971..cb0d80f49252 100644 --- a/drivers/usb/input/hid-input.c +++ b/drivers/usb/input/hid-input.c | |||
@@ -73,6 +73,160 @@ static const struct { | |||
73 | #define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0) | 73 | #define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0) |
74 | #define map_ff_effect(c) do { set_bit(c, input->ffbit); } while (0) | 74 | #define map_ff_effect(c) do { set_bit(c, input->ffbit); } while (0) |
75 | 75 | ||
76 | #ifdef CONFIG_USB_HIDINPUT_POWERBOOK | ||
77 | |||
78 | struct hidinput_key_translation { | ||
79 | u16 from; | ||
80 | u16 to; | ||
81 | u8 flags; | ||
82 | }; | ||
83 | |||
84 | #define POWERBOOK_FLAG_FKEY 0x01 | ||
85 | |||
86 | static struct hidinput_key_translation powerbook_fn_keys[] = { | ||
87 | { KEY_BACKSPACE, KEY_DELETE }, | ||
88 | { KEY_F1, KEY_BRIGHTNESSDOWN, POWERBOOK_FLAG_FKEY }, | ||
89 | { KEY_F2, KEY_BRIGHTNESSUP, POWERBOOK_FLAG_FKEY }, | ||
90 | { KEY_F3, KEY_MUTE, POWERBOOK_FLAG_FKEY }, | ||
91 | { KEY_F4, KEY_VOLUMEDOWN, POWERBOOK_FLAG_FKEY }, | ||
92 | { KEY_F5, KEY_VOLUMEUP, POWERBOOK_FLAG_FKEY }, | ||
93 | { KEY_F6, KEY_NUMLOCK, POWERBOOK_FLAG_FKEY }, | ||
94 | { KEY_F7, KEY_SWITCHVIDEOMODE, POWERBOOK_FLAG_FKEY }, | ||
95 | { KEY_F8, KEY_KBDILLUMTOGGLE, POWERBOOK_FLAG_FKEY }, | ||
96 | { KEY_F9, KEY_KBDILLUMDOWN, POWERBOOK_FLAG_FKEY }, | ||
97 | { KEY_F10, KEY_KBDILLUMUP, POWERBOOK_FLAG_FKEY }, | ||
98 | { KEY_UP, KEY_PAGEUP }, | ||
99 | { KEY_DOWN, KEY_PAGEDOWN }, | ||
100 | { KEY_LEFT, KEY_HOME }, | ||
101 | { KEY_RIGHT, KEY_END }, | ||
102 | { } | ||
103 | }; | ||
104 | |||
105 | static struct hidinput_key_translation powerbook_numlock_keys[] = { | ||
106 | { KEY_J, KEY_KP1 }, | ||
107 | { KEY_K, KEY_KP2 }, | ||
108 | { KEY_L, KEY_KP3 }, | ||
109 | { KEY_U, KEY_KP4 }, | ||
110 | { KEY_I, KEY_KP5 }, | ||
111 | { KEY_O, KEY_KP6 }, | ||
112 | { KEY_7, KEY_KP7 }, | ||
113 | { KEY_8, KEY_KP8 }, | ||
114 | { KEY_9, KEY_KP9 }, | ||
115 | { KEY_M, KEY_KP0 }, | ||
116 | { KEY_DOT, KEY_KPDOT }, | ||
117 | { KEY_SLASH, KEY_KPPLUS }, | ||
118 | { KEY_SEMICOLON, KEY_KPMINUS }, | ||
119 | { KEY_P, KEY_KPASTERISK }, | ||
120 | { KEY_MINUS, KEY_KPEQUAL }, | ||
121 | { KEY_0, KEY_KPSLASH }, | ||
122 | { KEY_F6, KEY_NUMLOCK }, | ||
123 | { KEY_KPENTER, KEY_KPENTER }, | ||
124 | { KEY_BACKSPACE, KEY_BACKSPACE }, | ||
125 | { } | ||
126 | }; | ||
127 | |||
128 | static int usbhid_pb_fnmode = 1; | ||
129 | module_param_named(pb_fnmode, usbhid_pb_fnmode, int, 0644); | ||
130 | MODULE_PARM_DESC(pb_fnmode, | ||
131 | "Mode of fn key on PowerBooks (0 = disabled, 1 = fkeyslast, 2 = fkeysfirst)"); | ||
132 | |||
133 | static struct hidinput_key_translation *find_translation(struct hidinput_key_translation *table, u16 from) | ||
134 | { | ||
135 | struct hidinput_key_translation *trans; | ||
136 | |||
137 | /* Look for the translation */ | ||
138 | for (trans = table; trans->from; trans++) | ||
139 | if (trans->from == from) | ||
140 | return trans; | ||
141 | |||
142 | return NULL; | ||
143 | } | ||
144 | |||
145 | static int hidinput_pb_event(struct hid_device *hid, struct input_dev *input, | ||
146 | struct hid_usage *usage, __s32 value) | ||
147 | { | ||
148 | struct hidinput_key_translation *trans; | ||
149 | |||
150 | if (usage->code == KEY_FN) { | ||
151 | if (value) hid->quirks |= HID_QUIRK_POWERBOOK_FN_ON; | ||
152 | else hid->quirks &= ~HID_QUIRK_POWERBOOK_FN_ON; | ||
153 | |||
154 | input_event(input, usage->type, usage->code, value); | ||
155 | |||
156 | return 1; | ||
157 | } | ||
158 | |||
159 | if (usbhid_pb_fnmode) { | ||
160 | int do_translate; | ||
161 | |||
162 | trans = find_translation(powerbook_fn_keys, usage->code); | ||
163 | if (trans) { | ||
164 | if (test_bit(usage->code, hid->pb_pressed_fn)) | ||
165 | do_translate = 1; | ||
166 | else if (trans->flags & POWERBOOK_FLAG_FKEY) | ||
167 | do_translate = | ||
168 | (usbhid_pb_fnmode == 2 && (hid->quirks & HID_QUIRK_POWERBOOK_FN_ON)) || | ||
169 | (usbhid_pb_fnmode == 1 && !(hid->quirks & HID_QUIRK_POWERBOOK_FN_ON)); | ||
170 | else | ||
171 | do_translate = (hid->quirks & HID_QUIRK_POWERBOOK_FN_ON); | ||
172 | |||
173 | if (do_translate) { | ||
174 | if (value) | ||
175 | set_bit(usage->code, hid->pb_pressed_fn); | ||
176 | else | ||
177 | clear_bit(usage->code, hid->pb_pressed_fn); | ||
178 | |||
179 | input_event(input, usage->type, trans->to, value); | ||
180 | |||
181 | return 1; | ||
182 | } | ||
183 | } | ||
184 | |||
185 | if (test_bit(usage->code, hid->pb_pressed_numlock) || | ||
186 | test_bit(LED_NUML, input->led)) { | ||
187 | trans = find_translation(powerbook_numlock_keys, usage->code); | ||
188 | |||
189 | if (trans) { | ||
190 | if (value) | ||
191 | set_bit(usage->code, hid->pb_pressed_numlock); | ||
192 | else | ||
193 | clear_bit(usage->code, hid->pb_pressed_numlock); | ||
194 | |||
195 | input_event(input, usage->type, trans->to, value); | ||
196 | } | ||
197 | |||
198 | return 1; | ||
199 | } | ||
200 | } | ||
201 | |||
202 | return 0; | ||
203 | } | ||
204 | |||
205 | static void hidinput_pb_setup(struct input_dev *input) | ||
206 | { | ||
207 | struct hidinput_key_translation *trans; | ||
208 | |||
209 | set_bit(KEY_NUMLOCK, input->keybit); | ||
210 | |||
211 | /* Enable all needed keys */ | ||
212 | for (trans = powerbook_fn_keys; trans->from; trans++) | ||
213 | set_bit(trans->to, input->keybit); | ||
214 | |||
215 | for (trans = powerbook_numlock_keys; trans->from; trans++) | ||
216 | set_bit(trans->to, input->keybit); | ||
217 | } | ||
218 | #else | ||
219 | static inline int hidinput_pb_event(struct hid_device *hid, struct input_dev *input, | ||
220 | struct hid_usage *usage, __s32 value) | ||
221 | { | ||
222 | return 0; | ||
223 | } | ||
224 | |||
225 | static inline void hidinput_pb_setup(struct input_dev *input) | ||
226 | { | ||
227 | } | ||
228 | #endif | ||
229 | |||
76 | static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field, | 230 | static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field, |
77 | struct hid_usage *usage) | 231 | struct hid_usage *usage) |
78 | { | 232 | { |
@@ -135,8 +289,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
135 | case HID_UP_SIMULATION: | 289 | case HID_UP_SIMULATION: |
136 | 290 | ||
137 | switch (usage->hid & 0xffff) { | 291 | switch (usage->hid & 0xffff) { |
138 | case 0xba: map_abs(ABS_RUDDER); break; | 292 | case 0xba: map_abs(ABS_RUDDER); break; |
139 | case 0xbb: map_abs(ABS_THROTTLE); break; | 293 | case 0xbb: map_abs(ABS_THROTTLE); break; |
294 | case 0xc4: map_abs(ABS_GAS); break; | ||
295 | case 0xc5: map_abs(ABS_BRAKE); break; | ||
296 | case 0xc8: map_abs(ABS_WHEEL); break; | ||
140 | default: goto ignore; | 297 | default: goto ignore; |
141 | } | 298 | } |
142 | break; | 299 | break; |
@@ -289,11 +446,19 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
289 | case 0x226: map_key_clear(KEY_STOP); break; | 446 | case 0x226: map_key_clear(KEY_STOP); break; |
290 | case 0x227: map_key_clear(KEY_REFRESH); break; | 447 | case 0x227: map_key_clear(KEY_REFRESH); break; |
291 | case 0x22a: map_key_clear(KEY_BOOKMARKS); break; | 448 | case 0x22a: map_key_clear(KEY_BOOKMARKS); break; |
449 | case 0x233: map_key_clear(KEY_SCROLLUP); break; | ||
450 | case 0x234: map_key_clear(KEY_SCROLLDOWN); break; | ||
292 | case 0x238: map_rel(REL_HWHEEL); break; | 451 | case 0x238: map_rel(REL_HWHEEL); break; |
293 | case 0x279: map_key_clear(KEY_REDO); break; | 452 | case 0x279: map_key_clear(KEY_REDO); break; |
294 | case 0x289: map_key_clear(KEY_REPLY); break; | 453 | case 0x289: map_key_clear(KEY_REPLY); break; |
295 | case 0x28b: map_key_clear(KEY_FORWARDMAIL); break; | 454 | case 0x28b: map_key_clear(KEY_FORWARDMAIL); break; |
296 | case 0x28c: map_key_clear(KEY_SEND); break; | 455 | case 0x28c: map_key_clear(KEY_SEND); break; |
456 | |||
457 | /* Reported on a Cherry Cymotion keyboard */ | ||
458 | case 0x301: map_key_clear(KEY_PROG1); break; | ||
459 | case 0x302: map_key_clear(KEY_PROG2); break; | ||
460 | case 0x303: map_key_clear(KEY_PROG3); break; | ||
461 | |||
297 | default: goto ignore; | 462 | default: goto ignore; |
298 | } | 463 | } |
299 | break; | 464 | break; |
@@ -325,7 +490,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
325 | 490 | ||
326 | set_bit(EV_REP, input->evbit); | 491 | set_bit(EV_REP, input->evbit); |
327 | switch(usage->hid & HID_USAGE) { | 492 | switch(usage->hid & HID_USAGE) { |
328 | case 0x003: map_key_clear(KEY_FN); break; | 493 | case 0x003: |
494 | /* The fn key on Apple PowerBooks */ | ||
495 | map_key_clear(KEY_FN); | ||
496 | hidinput_pb_setup(input); | ||
497 | break; | ||
498 | |||
329 | default: goto ignore; | 499 | default: goto ignore; |
330 | } | 500 | } |
331 | break; | 501 | break; |
@@ -482,6 +652,9 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct | |||
482 | return; | 652 | return; |
483 | } | 653 | } |
484 | 654 | ||
655 | if ((hid->quirks & HID_QUIRK_POWERBOOK_HAS_FN) && hidinput_pb_event(hid, input, usage, value)) | ||
656 | return; | ||
657 | |||
485 | if (usage->hat_min < usage->hat_max || usage->hat_dir) { | 658 | if (usage->hat_min < usage->hat_max || usage->hat_dir) { |
486 | int hat_dir = usage->hat_dir; | 659 | int hat_dir = usage->hat_dir; |
487 | if (!hat_dir) | 660 | if (!hat_dir) |
@@ -524,7 +697,7 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct | |||
524 | return; | 697 | return; |
525 | } | 698 | } |
526 | 699 | ||
527 | if((usage->type == EV_KEY) && (usage->code == 0)) /* Key 0 is "unassigned", not KEY_UNKNOWN */ | 700 | if ((usage->type == EV_KEY) && (usage->code == 0)) /* Key 0 is "unassigned", not KEY_UNKNOWN */ |
528 | return; | 701 | return; |
529 | 702 | ||
530 | input_event(input, usage->type, usage->code, value); | 703 | input_event(input, usage->type, usage->code, value); |
diff --git a/drivers/usb/input/hid.h b/drivers/usb/input/hid.h index ee48a2276104..8b0d4346ce9c 100644 --- a/drivers/usb/input/hid.h +++ b/drivers/usb/input/hid.h | |||
@@ -235,17 +235,20 @@ struct hid_item { | |||
235 | * HID device quirks. | 235 | * HID device quirks. |
236 | */ | 236 | */ |
237 | 237 | ||
238 | #define HID_QUIRK_INVERT 0x001 | 238 | #define HID_QUIRK_INVERT 0x00000001 |
239 | #define HID_QUIRK_NOTOUCH 0x002 | 239 | #define HID_QUIRK_NOTOUCH 0x00000002 |
240 | #define HID_QUIRK_IGNORE 0x004 | 240 | #define HID_QUIRK_IGNORE 0x00000004 |
241 | #define HID_QUIRK_NOGET 0x008 | 241 | #define HID_QUIRK_NOGET 0x00000008 |
242 | #define HID_QUIRK_HIDDEV 0x010 | 242 | #define HID_QUIRK_HIDDEV 0x00000010 |
243 | #define HID_QUIRK_BADPAD 0x020 | 243 | #define HID_QUIRK_BADPAD 0x00000020 |
244 | #define HID_QUIRK_MULTI_INPUT 0x040 | 244 | #define HID_QUIRK_MULTI_INPUT 0x00000040 |
245 | #define HID_QUIRK_2WHEEL_MOUSE_HACK_7 0x080 | 245 | #define HID_QUIRK_2WHEEL_MOUSE_HACK_7 0x00000080 |
246 | #define HID_QUIRK_2WHEEL_MOUSE_HACK_5 0x100 | 246 | #define HID_QUIRK_2WHEEL_MOUSE_HACK_5 0x00000100 |
247 | #define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x200 | 247 | #define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x00000200 |
248 | #define HID_QUIRK_2WHEEL_POWERMOUSE 0x400 | 248 | #define HID_QUIRK_2WHEEL_POWERMOUSE 0x00000400 |
249 | #define HID_QUIRK_CYMOTION 0x00000800 | ||
250 | #define HID_QUIRK_POWERBOOK_HAS_FN 0x00001000 | ||
251 | #define HID_QUIRK_POWERBOOK_FN_ON 0x00002000 | ||
249 | 252 | ||
250 | /* | 253 | /* |
251 | * This is the global environment of the parser. This information is | 254 | * This is the global environment of the parser. This information is |
@@ -431,6 +434,11 @@ struct hid_device { /* device report descriptor */ | |||
431 | void (*ff_exit)(struct hid_device*); /* Called by hid_exit_ff(hid) */ | 434 | void (*ff_exit)(struct hid_device*); /* Called by hid_exit_ff(hid) */ |
432 | int (*ff_event)(struct hid_device *hid, struct input_dev *input, | 435 | int (*ff_event)(struct hid_device *hid, struct input_dev *input, |
433 | unsigned int type, unsigned int code, int value); | 436 | unsigned int type, unsigned int code, int value); |
437 | |||
438 | #ifdef CONFIG_USB_HIDINPUT_POWERBOOK | ||
439 | unsigned long pb_pressed_fn[NBITS(KEY_MAX)]; | ||
440 | unsigned long pb_pressed_numlock[NBITS(KEY_MAX)]; | ||
441 | #endif | ||
434 | }; | 442 | }; |
435 | 443 | ||
436 | #define HID_GLOBAL_STACK_SIZE 4 | 444 | #define HID_GLOBAL_STACK_SIZE 4 |
diff --git a/drivers/usb/input/pid.c b/drivers/usb/input/pid.c index 19e015d171aa..d9d9f656b8c9 100644 --- a/drivers/usb/input/pid.c +++ b/drivers/usb/input/pid.c | |||
@@ -259,7 +259,7 @@ static int hid_pid_upload_effect(struct input_dev *dev, | |||
259 | int hid_pid_init(struct hid_device *hid) | 259 | int hid_pid_init(struct hid_device *hid) |
260 | { | 260 | { |
261 | struct hid_ff_pid *private; | 261 | struct hid_ff_pid *private; |
262 | struct hid_input *hidinput = list_entry(&hid->inputs, struct hid_input, list); | 262 | struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list); |
263 | struct input_dev *input_dev = hidinput->input; | 263 | struct input_dev *input_dev = hidinput->input; |
264 | 264 | ||
265 | private = hid->ff_private = kzalloc(sizeof(struct hid_ff_pid), GFP_KERNEL); | 265 | private = hid->ff_private = kzalloc(sizeof(struct hid_ff_pid), GFP_KERNEL); |
diff --git a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c index 48df4cfd5a42..d3e15df9e815 100644 --- a/drivers/usb/input/wacom.c +++ b/drivers/usb/input/wacom.c | |||
@@ -95,7 +95,7 @@ MODULE_LICENSE(DRIVER_LICENSE); | |||
95 | enum { | 95 | enum { |
96 | PENPARTNER = 0, | 96 | PENPARTNER = 0, |
97 | GRAPHIRE, | 97 | GRAPHIRE, |
98 | G4, | 98 | WACOM_G4, |
99 | PL, | 99 | PL, |
100 | INTUOS, | 100 | INTUOS, |
101 | INTUOS3, | 101 | INTUOS3, |
@@ -373,7 +373,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs) | |||
373 | 373 | ||
374 | case 2: /* Mouse with wheel */ | 374 | case 2: /* Mouse with wheel */ |
375 | input_report_key(dev, BTN_MIDDLE, data[1] & 0x04); | 375 | input_report_key(dev, BTN_MIDDLE, data[1] & 0x04); |
376 | if (wacom->features->type == G4) { | 376 | if (wacom->features->type == WACOM_G4) { |
377 | rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03); | 377 | rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03); |
378 | input_report_rel(dev, REL_WHEEL, rw); | 378 | input_report_rel(dev, REL_WHEEL, rw); |
379 | } else | 379 | } else |
@@ -385,7 +385,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs) | |||
385 | id = CURSOR_DEVICE_ID; | 385 | id = CURSOR_DEVICE_ID; |
386 | input_report_key(dev, BTN_LEFT, data[1] & 0x01); | 386 | input_report_key(dev, BTN_LEFT, data[1] & 0x01); |
387 | input_report_key(dev, BTN_RIGHT, data[1] & 0x02); | 387 | input_report_key(dev, BTN_RIGHT, data[1] & 0x02); |
388 | if (wacom->features->type == G4) | 388 | if (wacom->features->type == WACOM_G4) |
389 | input_report_abs(dev, ABS_DISTANCE, data[6]); | 389 | input_report_abs(dev, ABS_DISTANCE, data[6]); |
390 | else | 390 | else |
391 | input_report_abs(dev, ABS_DISTANCE, data[7]); | 391 | input_report_abs(dev, ABS_DISTANCE, data[7]); |
@@ -410,7 +410,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs) | |||
410 | input_sync(dev); | 410 | input_sync(dev); |
411 | 411 | ||
412 | /* send pad data */ | 412 | /* send pad data */ |
413 | if (wacom->features->type == G4) { | 413 | if (wacom->features->type == WACOM_G4) { |
414 | /* fist time sending pad data */ | 414 | /* fist time sending pad data */ |
415 | if (wacom->tool[1] != BTN_TOOL_FINGER) { | 415 | if (wacom->tool[1] != BTN_TOOL_FINGER) { |
416 | wacom->id[1] = 0; | 416 | wacom->id[1] = 0; |
@@ -713,8 +713,8 @@ static struct wacom_features wacom_features[] = { | |||
713 | { "Wacom Graphire2 5x7", 8, 13918, 10206, 511, 32, GRAPHIRE, wacom_graphire_irq }, | 713 | { "Wacom Graphire2 5x7", 8, 13918, 10206, 511, 32, GRAPHIRE, wacom_graphire_irq }, |
714 | { "Wacom Graphire3", 8, 10208, 7424, 511, 32, GRAPHIRE, wacom_graphire_irq }, | 714 | { "Wacom Graphire3", 8, 10208, 7424, 511, 32, GRAPHIRE, wacom_graphire_irq }, |
715 | { "Wacom Graphire3 6x8", 8, 16704, 12064, 511, 32, GRAPHIRE, wacom_graphire_irq }, | 715 | { "Wacom Graphire3 6x8", 8, 16704, 12064, 511, 32, GRAPHIRE, wacom_graphire_irq }, |
716 | { "Wacom Graphire4 4x5", 8, 10208, 7424, 511, 32, G4, wacom_graphire_irq }, | 716 | { "Wacom Graphire4 4x5", 8, 10208, 7424, 511, 32, WACOM_G4, wacom_graphire_irq }, |
717 | { "Wacom Graphire4 6x8", 8, 16704, 12064, 511, 32, G4, wacom_graphire_irq }, | 717 | { "Wacom Graphire4 6x8", 8, 16704, 12064, 511, 32, WACOM_G4, wacom_graphire_irq }, |
718 | { "Wacom Volito", 8, 5104, 3712, 511, 32, GRAPHIRE, wacom_graphire_irq }, | 718 | { "Wacom Volito", 8, 5104, 3712, 511, 32, GRAPHIRE, wacom_graphire_irq }, |
719 | { "Wacom PenStation2", 8, 3250, 2320, 255, 32, GRAPHIRE, wacom_graphire_irq }, | 719 | { "Wacom PenStation2", 8, 3250, 2320, 255, 32, GRAPHIRE, wacom_graphire_irq }, |
720 | { "Wacom Volito2 4x5", 8, 5104, 3712, 511, 32, GRAPHIRE, wacom_graphire_irq }, | 720 | { "Wacom Volito2 4x5", 8, 5104, 3712, 511, 32, GRAPHIRE, wacom_graphire_irq }, |
@@ -859,7 +859,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
859 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0); | 859 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0); |
860 | 860 | ||
861 | switch (wacom->features->type) { | 861 | switch (wacom->features->type) { |
862 | case G4: | 862 | case WACOM_G4: |
863 | input_dev->evbit[0] |= BIT(EV_MSC); | 863 | input_dev->evbit[0] |= BIT(EV_MSC); |
864 | input_dev->mscbit[0] |= BIT(MSC_SERIAL); | 864 | input_dev->mscbit[0] |= BIT(MSC_SERIAL); |
865 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_FINGER); | 865 | input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_FINGER); |