Skip to content

Commit 019e129

Browse files
author
Jiri Kosina
committed
Merge branches 'for-3.19/hid-report-len', 'for-3.19/i2c-hid', 'for-3.19/lenovo', 'for-3.19/logitech', 'for-3.19/microsoft', 'for-3.19/plantronics', 'for-3.19/rmi', 'for-3.19/sony' and 'for-3.19/wacom' into for-linus
10 parents 3ee420b + dabb05c + 6296f4a + c87d92b + f486d9d + be3b163 + a45c30e + cabd9b5 + 68a49e5 + 601a22f commit 019e129

22 files changed

+2086
-391
lines changed

drivers/hid/Kconfig

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,13 +371,25 @@ config HID_LOGITECH_DJ
371371
tristate "Logitech Unifying receivers full support"
372372
depends on HIDRAW
373373
depends on HID_LOGITECH
374+
select HID_LOGITECH_HIDPP
374375
---help---
375376
Say Y if you want support for Logitech Unifying receivers and devices.
376377
Unifying receivers are capable of pairing up to 6 Logitech compliant
377378
devices to the same receiver. Without this driver it will be handled by
378379
generic USB_HID driver and all incoming events will be multiplexed
379380
into a single mouse and a single keyboard device.
380381

382+
config HID_LOGITECH_HIDPP
383+
tristate "Logitech HID++ devices support"
384+
depends on HID_LOGITECH
385+
---help---
386+
Support for Logitech devices relyingon the HID++ Logitech specification
387+
388+
Say Y if you want support for Logitech devices relying on the HID++
389+
specification. Such devices are the various Logitech Touchpads (T650,
390+
T651, TK820), some mice (Zone Touch mouse), or even keyboards (Solar
391+
Keayboard).
392+
381393
config LOGITECH_FF
382394
bool "Logitech force feedback support"
383395
depends on HID_LOGITECH
@@ -613,6 +625,13 @@ config HID_PICOLCD_CIR
613625
---help---
614626
Provide access to PicoLCD's CIR interface via remote control (LIRC).
615627

628+
config HID_PLANTRONICS
629+
tristate "Plantronics USB HID Driver"
630+
default !EXPERT
631+
depends on HID
632+
---help---
633+
Provides HID support for Plantronics telephony devices.
634+
616635
config HID_PRIMAX
617636
tristate "Primax non-fully HID-compliant devices"
618637
depends on HID

drivers/hid/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ obj-$(CONFIG_HID_LCPOWER) += hid-lcpower.o
6363
obj-$(CONFIG_HID_LENOVO) += hid-lenovo.o
6464
obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o
6565
obj-$(CONFIG_HID_LOGITECH_DJ) += hid-logitech-dj.o
66+
obj-$(CONFIG_HID_LOGITECH_HIDPP) += hid-logitech-hidpp.o
6667
obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o
6768
obj-$(CONFIG_HID_MICROSOFT) += hid-microsoft.o
6869
obj-$(CONFIG_HID_MONTEREY) += hid-monterey.o
@@ -94,6 +95,7 @@ ifdef CONFIG_DEBUG_FS
9495
hid-picolcd-y += hid-picolcd_debugfs.o
9596
endif
9697

98+
obj-$(CONFIG_HID_PLANTRONICS) += hid-plantronics.o
9799
obj-$(CONFIG_HID_PRIMAX) += hid-primax.o
98100
obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o hid-roccat-common.o \
99101
hid-roccat-arvo.o hid-roccat-isku.o hid-roccat-kone.o \

drivers/hid/hid-core.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,11 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type)
702702
if (((parser->global.usage_page << 16) == HID_UP_SENSOR) &&
703703
type == HID_COLLECTION_PHYSICAL)
704704
hid->group = HID_GROUP_SENSOR_HUB;
705+
706+
if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
707+
hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 &&
708+
hid->group == HID_GROUP_MULTITOUCH)
709+
hid->group = HID_GROUP_GENERIC;
705710
}
706711

707712
static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)
@@ -1277,12 +1282,6 @@ void hid_output_report(struct hid_report *report, __u8 *data)
12771282
}
12781283
EXPORT_SYMBOL_GPL(hid_output_report);
12791284

1280-
static int hid_report_len(struct hid_report *report)
1281-
{
1282-
/* equivalent to DIV_ROUND_UP(report->size, 8) + !!(report->id > 0) */
1283-
return ((report->size - 1) >> 3) + 1 + (report->id > 0);
1284-
}
1285-
12861285
/*
12871286
* Allocator for buffer that is going to be passed to hid_output_report()
12881287
*/
@@ -1819,6 +1818,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
18191818
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
18201819
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) },
18211820
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
1821+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651) },
18221822
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) },
18231823
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) },
18241824
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) },
@@ -1859,6 +1859,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
18591859
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
18601860
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
18611861
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
1862+
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3) },
18621863
{ HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
18631864
{ HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
18641865
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
@@ -1884,6 +1885,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
18841885
{ HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
18851886
{ HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) },
18861887
{ HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
1888+
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
18871889
{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
18881890
#if IS_ENABLED(CONFIG_HID_ROCCAT)
18891891
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
@@ -1912,6 +1914,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
19121914
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
19131915
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
19141916
{ HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
1917+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) },
19151918
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
19161919
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
19171920
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },

drivers/hid/hid-ids.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,7 @@
579579

580580
#define USB_VENDOR_ID_LOGITECH 0x046d
581581
#define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e
582+
#define USB_DEVICE_ID_LOGITECH_T651 0xb00c
582583
#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
583584
#define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST 0xc110
584585
#define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
@@ -651,6 +652,7 @@
651652
#define USB_DEVICE_ID_MS_SURFACE_PRO_2 0x0799
652653
#define USB_DEVICE_ID_MS_TOUCH_COVER_2 0x07a7
653654
#define USB_DEVICE_ID_MS_TYPE_COVER_2 0x07a9
655+
#define USB_DEVICE_ID_MS_TYPE_COVER_3 0x07dc
654656

655657
#define USB_VENDOR_ID_MOJO 0x8282
656658
#define USB_DEVICE_ID_RETRO_ADAPTER 0x3201
@@ -718,6 +720,8 @@
718720
#define USB_DEVICE_ID_ORTEK_PKB1700 0x1700
719721
#define USB_DEVICE_ID_ORTEK_WKB2000 0x2000
720722

723+
#define USB_VENDOR_ID_PLANTRONICS 0x047f
724+
721725
#define USB_VENDOR_ID_PANASONIC 0x04da
722726
#define USB_DEVICE_ID_PANABOARD_UBT780 0x1044
723727
#define USB_DEVICE_ID_PANABOARD_UBT880 0x104d
@@ -815,6 +819,9 @@
815819
#define USB_VENDOR_ID_SKYCABLE 0x1223
816820
#define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07
817821

822+
#define USB_VENDOR_ID_SMK 0x0609
823+
#define USB_DEVICE_ID_SMK_PS3_BDREMOTE 0x0306
824+
818825
#define USB_VENDOR_ID_SONY 0x054c
819826
#define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
820827
#define USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE 0x0374
@@ -933,6 +940,9 @@
933940
#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004
934941
#define USB_DEVICE_ID_VERNIER_LCSPEC 0x0006
935942

943+
#define USB_VENDOR_ID_VTL 0x0306
944+
#define USB_DEVICE_ID_VTL_MULTITOUCH_FF3F 0xff3f
945+
936946
#define USB_VENDOR_ID_WACOM 0x056a
937947
#define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH 0x81
938948
#define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH 0x00BD

drivers/hid/hid-input.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1215,7 +1215,7 @@ static void hidinput_led_worker(struct work_struct *work)
12151215
return hid->ll_driver->request(hid, report, HID_REQ_SET_REPORT);
12161216

12171217
/* fall back to generic raw-output-report */
1218-
len = ((report->size - 1) >> 3) + 1 + (report->id > 0);
1218+
len = hid_report_len(report);
12191219
buf = hid_alloc_report_buf(report, GFP_KERNEL);
12201220
if (!buf)
12211221
return;

drivers/hid/hid-lenovo.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ static int lenovo_input_mapping_cptkbd(struct hid_device *hdev,
6262
/* HID_UP_LNVENDOR = USB, HID_UP_MSVENDOR = BT */
6363
if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR ||
6464
(usage->hid & HID_USAGE_PAGE) == HID_UP_LNVENDOR) {
65-
set_bit(EV_REP, hi->input->evbit);
6665
switch (usage->hid & HID_USAGE) {
6766
case 0x00f1: /* Fn-F4: Mic mute */
6867
map_key_clear(KEY_MICMUTE);
@@ -85,13 +84,13 @@ static int lenovo_input_mapping_cptkbd(struct hid_device *hdev,
8584
case 0x00f8: /* Fn-F11: View open applications (3 boxes) */
8685
map_key_clear(KEY_SCALE);
8786
return 1;
88-
case 0x00fa: /* Fn-Esc: Fn-lock toggle */
89-
map_key_clear(KEY_FN_ESC);
90-
return 1;
91-
case 0x00fb: /* Fn-F12: Open My computer (6 boxes) USB-only */
87+
case 0x00f9: /* Fn-F12: Open My computer (6 boxes) USB-only */
9288
/* NB: This mapping is invented in raw_event below */
9389
map_key_clear(KEY_FILE);
9490
return 1;
91+
case 0x00fa: /* Fn-Esc: Fn-lock toggle */
92+
map_key_clear(KEY_FN_ESC);
93+
return 1;
9594
}
9695
}
9796

@@ -207,8 +206,8 @@ static int lenovo_raw_event(struct hid_device *hdev,
207206
&& data[0] == 0x15
208207
&& data[1] == 0x94
209208
&& data[2] == 0x01)) {
210-
data[1] = 0x0;
211-
data[2] = 0x4;
209+
data[1] = 0x00;
210+
data[2] = 0x01;
212211
}
213212

214213
return 0;

0 commit comments

Comments
 (0)