diff options
Diffstat (limited to 'drivers/hid/hid-lenovo.c')
-rw-r--r-- | drivers/hid/hid-lenovo.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/hid/hid-lenovo.c b/drivers/hid/hid-lenovo.c index 1ac4ff4d57a6..643b6eb54442 100644 --- a/drivers/hid/hid-lenovo.c +++ b/drivers/hid/hid-lenovo.c | |||
@@ -6,6 +6,17 @@ | |||
6 | * | 6 | * |
7 | * Copyright (c) 2012 Bernhard Seibold | 7 | * Copyright (c) 2012 Bernhard Seibold |
8 | * Copyright (c) 2014 Jamie Lentin <jm@lentin.co.uk> | 8 | * Copyright (c) 2014 Jamie Lentin <jm@lentin.co.uk> |
9 | * | ||
10 | * Linux IBM/Lenovo Scrollpoint mouse driver: | ||
11 | * - IBM Scrollpoint III | ||
12 | * - IBM Scrollpoint Pro | ||
13 | * - IBM Scrollpoint Optical | ||
14 | * - IBM Scrollpoint Optical 800dpi | ||
15 | * - IBM Scrollpoint Optical 800dpi Pro | ||
16 | * - Lenovo Scrollpoint Optical | ||
17 | * | ||
18 | * Copyright (c) 2012 Peter De Wachter <pdewacht@gmail.com> | ||
19 | * Copyright (c) 2018 Peter Ganzhorn <peter.ganzhorn@gmail.com> | ||
9 | */ | 20 | */ |
10 | 21 | ||
11 | /* | 22 | /* |
@@ -160,6 +171,17 @@ static int lenovo_input_mapping_cptkbd(struct hid_device *hdev, | |||
160 | return 0; | 171 | return 0; |
161 | } | 172 | } |
162 | 173 | ||
174 | static int lenovo_input_mapping_scrollpoint(struct hid_device *hdev, | ||
175 | struct hid_input *hi, struct hid_field *field, | ||
176 | struct hid_usage *usage, unsigned long **bit, int *max) | ||
177 | { | ||
178 | if (usage->hid == HID_GD_Z) { | ||
179 | hid_map_usage(hi, usage, bit, max, EV_REL, REL_HWHEEL); | ||
180 | return 1; | ||
181 | } | ||
182 | return 0; | ||
183 | } | ||
184 | |||
163 | static int lenovo_input_mapping(struct hid_device *hdev, | 185 | static int lenovo_input_mapping(struct hid_device *hdev, |
164 | struct hid_input *hi, struct hid_field *field, | 186 | struct hid_input *hi, struct hid_field *field, |
165 | struct hid_usage *usage, unsigned long **bit, int *max) | 187 | struct hid_usage *usage, unsigned long **bit, int *max) |
@@ -172,6 +194,14 @@ static int lenovo_input_mapping(struct hid_device *hdev, | |||
172 | case USB_DEVICE_ID_LENOVO_CBTKBD: | 194 | case USB_DEVICE_ID_LENOVO_CBTKBD: |
173 | return lenovo_input_mapping_cptkbd(hdev, hi, field, | 195 | return lenovo_input_mapping_cptkbd(hdev, hi, field, |
174 | usage, bit, max); | 196 | usage, bit, max); |
197 | case USB_DEVICE_ID_IBM_SCROLLPOINT_III: | ||
198 | case USB_DEVICE_ID_IBM_SCROLLPOINT_PRO: | ||
199 | case USB_DEVICE_ID_IBM_SCROLLPOINT_OPTICAL: | ||
200 | case USB_DEVICE_ID_IBM_SCROLLPOINT_800DPI_OPTICAL: | ||
201 | case USB_DEVICE_ID_IBM_SCROLLPOINT_800DPI_OPTICAL_PRO: | ||
202 | case USB_DEVICE_ID_LENOVO_SCROLLPOINT_OPTICAL: | ||
203 | return lenovo_input_mapping_scrollpoint(hdev, hi, field, | ||
204 | usage, bit, max); | ||
175 | default: | 205 | default: |
176 | return 0; | 206 | return 0; |
177 | } | 207 | } |
@@ -883,6 +913,12 @@ static const struct hid_device_id lenovo_devices[] = { | |||
883 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) }, | 913 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) }, |
884 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) }, | 914 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) }, |
885 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) }, | 915 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) }, |
916 | { HID_USB_DEVICE(USB_VENDOR_ID_IBM, USB_DEVICE_ID_IBM_SCROLLPOINT_III) }, | ||
917 | { HID_USB_DEVICE(USB_VENDOR_ID_IBM, USB_DEVICE_ID_IBM_SCROLLPOINT_PRO) }, | ||
918 | { HID_USB_DEVICE(USB_VENDOR_ID_IBM, USB_DEVICE_ID_IBM_SCROLLPOINT_OPTICAL) }, | ||
919 | { HID_USB_DEVICE(USB_VENDOR_ID_IBM, USB_DEVICE_ID_IBM_SCROLLPOINT_800DPI_OPTICAL) }, | ||
920 | { HID_USB_DEVICE(USB_VENDOR_ID_IBM, USB_DEVICE_ID_IBM_SCROLLPOINT_800DPI_OPTICAL_PRO) }, | ||
921 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_SCROLLPOINT_OPTICAL) }, | ||
886 | { } | 922 | { } |
887 | }; | 923 | }; |
888 | 924 | ||