Commit fcfacfd3594d5d2fa99fb5e7d33dee3904b1a156
Committed by
Jiri Kosina
1 parent
1f243e302c
Exists in
master
and in
7 other branches
HID: move chicony quirks
Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Showing 7 changed files with 95 additions and 30 deletions Side-by-side Diff
drivers/hid/Kconfig
... | ... | @@ -110,6 +110,13 @@ |
110 | 110 | ---help--- |
111 | 111 | Support for Cherry Cymotion. |
112 | 112 | |
113 | +config HID_CHICONY | |
114 | + tristate "Chicony" | |
115 | + default m | |
116 | + depends on USB_HID | |
117 | + ---help--- | |
118 | + Support for Chicony Tactical pad. | |
119 | + | |
113 | 120 | config HID_CYPRESS |
114 | 121 | tristate "Cypress" |
115 | 122 | default m |
drivers/hid/Makefile
... | ... | @@ -15,6 +15,7 @@ |
15 | 15 | obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o |
16 | 16 | obj-$(CONFIG_HID_APPLE) += hid-apple.o |
17 | 17 | obj-$(CONFIG_HID_CHERRY) += hid-cherry.o |
18 | +obj-$(CONFIG_HID_CHICONY) += hid-chicony.o | |
18 | 19 | obj-$(CONFIG_HID_CYPRESS) += hid-cypress.o |
19 | 20 | obj-$(CONFIG_HID_EZKEY) += hid-ezkey.o |
20 | 21 | obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o |
drivers/hid/hid-chicony.c
1 | +/* | |
2 | + * HID driver for some chicony "special" devices | |
3 | + * | |
4 | + * Copyright (c) 1999 Andreas Gal | |
5 | + * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz> | |
6 | + * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc | |
7 | + * Copyright (c) 2006-2007 Jiri Kosina | |
8 | + * Copyright (c) 2007 Paul Walmsley | |
9 | + * Copyright (c) 2008 Jiri Slaby | |
10 | + */ | |
11 | + | |
12 | +/* | |
13 | + * This program is free software; you can redistribute it and/or modify it | |
14 | + * under the terms of the GNU General Public License as published by the Free | |
15 | + * Software Foundation; either version 2 of the License, or (at your option) | |
16 | + * any later version. | |
17 | + */ | |
18 | + | |
19 | +#include <linux/device.h> | |
20 | +#include <linux/input.h> | |
21 | +#include <linux/hid.h> | |
22 | +#include <linux/module.h> | |
23 | + | |
24 | +#include "hid-ids.h" | |
25 | + | |
26 | +#define ch_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \ | |
27 | + EV_KEY, (c)) | |
28 | +static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |
29 | + struct hid_field *field, struct hid_usage *usage, | |
30 | + unsigned long **bit, int *max) | |
31 | +{ | |
32 | + if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR) | |
33 | + return 0; | |
34 | + | |
35 | + set_bit(EV_REP, hi->input->evbit); | |
36 | + switch (usage->hid & HID_USAGE) { | |
37 | + case 0xff01: ch_map_key_clear(BTN_1); break; | |
38 | + case 0xff02: ch_map_key_clear(BTN_2); break; | |
39 | + case 0xff03: ch_map_key_clear(BTN_3); break; | |
40 | + case 0xff04: ch_map_key_clear(BTN_4); break; | |
41 | + case 0xff05: ch_map_key_clear(BTN_5); break; | |
42 | + case 0xff06: ch_map_key_clear(BTN_6); break; | |
43 | + case 0xff07: ch_map_key_clear(BTN_7); break; | |
44 | + case 0xff08: ch_map_key_clear(BTN_8); break; | |
45 | + case 0xff09: ch_map_key_clear(BTN_9); break; | |
46 | + case 0xff0a: ch_map_key_clear(BTN_A); break; | |
47 | + case 0xff0b: ch_map_key_clear(BTN_B); break; | |
48 | + default: | |
49 | + return 0; | |
50 | + } | |
51 | + return 1; | |
52 | +} | |
53 | + | |
54 | +static const struct hid_device_id ch_devices[] = { | |
55 | + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) }, | |
56 | + { } | |
57 | +}; | |
58 | +MODULE_DEVICE_TABLE(hid, ch_devices); | |
59 | + | |
60 | +static struct hid_driver ch_driver = { | |
61 | + .name = "chicony", | |
62 | + .id_table = ch_devices, | |
63 | + .input_mapping = ch_input_mapping, | |
64 | +}; | |
65 | + | |
66 | +static int ch_init(void) | |
67 | +{ | |
68 | + return hid_register_driver(&ch_driver); | |
69 | +} | |
70 | + | |
71 | +static void ch_exit(void) | |
72 | +{ | |
73 | + hid_unregister_driver(&ch_driver); | |
74 | +} | |
75 | + | |
76 | +module_init(ch_init); | |
77 | +module_exit(ch_exit); | |
78 | +MODULE_LICENSE("GPL"); | |
79 | + | |
80 | +HID_COMPAT_LOAD_DRIVER(chicony); |
drivers/hid/hid-core.c
... | ... | @@ -1165,6 +1165,7 @@ |
1165 | 1165 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, |
1166 | 1166 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, |
1167 | 1167 | { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) }, |
1168 | + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) }, | |
1168 | 1169 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) }, |
1169 | 1170 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) }, |
1170 | 1171 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) }, |
drivers/hid/hid-dummy.c
drivers/hid/hid-ids.h
... | ... | @@ -108,6 +108,9 @@ |
108 | 108 | #define USB_VENDOR_ID_CHIC 0x05fe |
109 | 109 | #define USB_DEVICE_ID_CHIC_GAMEPAD 0x0014 |
110 | 110 | |
111 | +#define USB_VENDOR_ID_CHICONY 0x04f2 | |
112 | +#define USB_DEVICE_ID_CHICONY_TACTICAL_PAD 0x0418 | |
113 | + | |
111 | 114 | #define USB_VENDOR_ID_CIDC 0x1677 |
112 | 115 | |
113 | 116 | #define USB_VENDOR_ID_CMEDIA 0x0d8c |
drivers/hid/hid-input-quirks.c
... | ... | @@ -58,31 +58,6 @@ |
58 | 58 | return 1; |
59 | 59 | } |
60 | 60 | |
61 | -static int quirk_chicony_tactical_pad(struct hid_usage *usage, | |
62 | - struct hid_input *hidinput, unsigned long **bit, int *max) | |
63 | -{ | |
64 | - if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR) | |
65 | - return 0; | |
66 | - | |
67 | - set_bit(EV_REP, hidinput->input->evbit); | |
68 | - switch (usage->hid & HID_USAGE) { | |
69 | - case 0xff01: map_key_clear(BTN_1); break; | |
70 | - case 0xff02: map_key_clear(BTN_2); break; | |
71 | - case 0xff03: map_key_clear(BTN_3); break; | |
72 | - case 0xff04: map_key_clear(BTN_4); break; | |
73 | - case 0xff05: map_key_clear(BTN_5); break; | |
74 | - case 0xff06: map_key_clear(BTN_6); break; | |
75 | - case 0xff07: map_key_clear(BTN_7); break; | |
76 | - case 0xff08: map_key_clear(BTN_8); break; | |
77 | - case 0xff09: map_key_clear(BTN_9); break; | |
78 | - case 0xff0a: map_key_clear(BTN_A); break; | |
79 | - case 0xff0b: map_key_clear(BTN_B); break; | |
80 | - default: | |
81 | - return 0; | |
82 | - } | |
83 | - return 1; | |
84 | -} | |
85 | - | |
86 | 61 | static int quirk_petalynx_remote(struct hid_usage *usage, |
87 | 62 | struct hid_input *hidinput, unsigned long **bit, int *max) |
88 | 63 | { |
... | ... | @@ -132,9 +107,6 @@ |
132 | 107 | #define VENDOR_ID_BELKIN 0x1020 |
133 | 108 | #define DEVICE_ID_BELKIN_WIRELESS_KEYBOARD 0x0006 |
134 | 109 | |
135 | -#define VENDOR_ID_CHICONY 0x04f2 | |
136 | -#define DEVICE_ID_CHICONY_TACTICAL_PAD 0x0418 | |
137 | - | |
138 | 110 | #define VENDOR_ID_GYRATION 0x0c16 |
139 | 111 | #define DEVICE_ID_GYRATION_REMOTE 0x0002 |
140 | 112 | |
... | ... | @@ -151,8 +123,6 @@ |
151 | 123 | int *); |
152 | 124 | } hid_input_blacklist[] = { |
153 | 125 | { VENDOR_ID_BELKIN, DEVICE_ID_BELKIN_WIRELESS_KEYBOARD, quirk_belkin_wkbd }, |
154 | - | |
155 | - { VENDOR_ID_CHICONY, DEVICE_ID_CHICONY_TACTICAL_PAD, quirk_chicony_tactical_pad }, | |
156 | 126 | |
157 | 127 | { VENDOR_ID_GYRATION, DEVICE_ID_GYRATION_REMOTE, quirk_gyration_remote }, |
158 | 128 |