Commit fcfacfd3594d5d2fa99fb5e7d33dee3904b1a156

Authored by Jiri Slaby
Committed by Jiri Kosina
1 parent 1f243e302c

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

... ... @@ -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
... ... @@ -13,6 +13,9 @@
13 13 #ifdef CONFIG_HID_CHERRY_MODULE
14 14 HID_COMPAT_CALL_DRIVER(cherry);
15 15 #endif
  16 +#ifdef CONFIG_HID_CHICONY_MODULE
  17 + HID_COMPAT_CALL_DRIVER(chicony);
  18 +#endif
16 19 #ifdef CONFIG_HID_CYPRESS_MODULE
17 20 HID_COMPAT_CALL_DRIVER(cypress);
18 21 #endif
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