Skip to content

Commit 817a312

Browse files
author
Jiri Kosina
committed
Merge branches 'for-4.1/upstream-fixes', 'for-4.2/upstream' and 'for-4.2/logitech' into for-linus
Conflicts: drivers/hid/hid-logitech-hidpp.c
3 parents 7250dc3 + 74a3e0c + 8a09b4f commit 817a312

File tree

18 files changed

+589
-248
lines changed

18 files changed

+589
-248
lines changed

Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
What: /sys/module/hid_logitech/drivers/hid:logitech/<dev>/range.
1+
What: /sys/bus/hid/drivers/logitech/<dev>/range
22
Date: July 2011
33
KernelVersion: 3.2
4-
Contact: Michal Malý <madcatxster@gmail.com>
4+
Contact: Michal Malý <madcatxster@devoid-pointer.net>
55
Description: Display minimum, maximum and current range of the steering
66
wheel. Writing a value within min and max boundaries sets the
77
range of the wheel.
88

99
What: /sys/bus/hid/drivers/logitech/<dev>/alternate_modes
1010
Date: Feb 2015
1111
KernelVersion: 4.1
12-
Contact: Michal Malý <madcatxster@gmail.com>
12+
Contact: Michal Malý <madcatxster@devoid-pointer.net>
1313
Description: Displays a set of alternate modes supported by a wheel. Each
1414
mode is listed as follows:
1515
Tag: Mode Name
@@ -45,7 +45,7 @@ Description: Displays a set of alternate modes supported by a wheel. Each
4545
What: /sys/bus/hid/drivers/logitech/<dev>/real_id
4646
Date: Feb 2015
4747
KernelVersion: 4.1
48-
Contact: Michal Malý <madcatxster@gmail.com>
48+
Contact: Michal Malý <madcatxster@devoid-pointer.net>
4949
Description: Displays the real model of the wheel regardless of any
5050
alternate mode the wheel might be switched to.
5151
It is a read-only value.

drivers/hid/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o
2424
obj-$(CONFIG_HID_ACRUX) += hid-axff.o
2525
obj-$(CONFIG_HID_APPLE) += hid-apple.o
2626
obj-$(CONFIG_HID_APPLEIR) += hid-appleir.o
27-
obj-$(CONFIG_HID_AUREAL) += hid-aureal.o
27+
obj-$(CONFIG_HID_AUREAL) += hid-aureal.o
2828
obj-$(CONFIG_HID_BELKIN) += hid-belkin.o
2929
obj-$(CONFIG_HID_BETOP_FF) += hid-betopff.o
3030
obj-$(CONFIG_HID_CHERRY) += hid-cherry.o
@@ -46,12 +46,12 @@ obj-$(CONFIG_HID_ICADE) += hid-icade.o
4646
obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o
4747
obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o
4848
obj-$(CONFIG_HID_KYE) += hid-kye.o
49-
obj-$(CONFIG_HID_LCPOWER) += hid-lcpower.o
49+
obj-$(CONFIG_HID_LCPOWER) += hid-lcpower.o
5050
obj-$(CONFIG_HID_LENOVO) += hid-lenovo.o
5151
obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o
5252
obj-$(CONFIG_HID_LOGITECH_DJ) += hid-logitech-dj.o
5353
obj-$(CONFIG_HID_LOGITECH_HIDPP) += hid-logitech-hidpp.o
54-
obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o
54+
obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o
5555
obj-$(CONFIG_HID_MICROSOFT) += hid-microsoft.o
5656
obj-$(CONFIG_HID_MONTEREY) += hid-monterey.o
5757
obj-$(CONFIG_HID_MULTITOUCH) += hid-multitouch.o

drivers/hid/hid-core.c

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,8 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type)
706706

707707
if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
708708
(hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 ||
709-
hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3_JP) &&
709+
hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3_JP ||
710+
hid->product == USB_DEVICE_ID_MS_POWER_COVER) &&
710711
hid->group == HID_GROUP_MULTITOUCH)
711712
hid->group = HID_GROUP_GENERIC;
712713

@@ -1061,13 +1062,13 @@ static u32 s32ton(__s32 value, unsigned n)
10611062
* Search linux-kernel and linux-usb-devel archives for "hid-core extract".
10621063
*/
10631064

1064-
static __u32 extract(const struct hid_device *hid, __u8 *report,
1065+
__u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
10651066
unsigned offset, unsigned n)
10661067
{
10671068
u64 x;
10681069

10691070
if (n > 32)
1070-
hid_warn(hid, "extract() called with n (%d) > 32! (%s)\n",
1071+
hid_warn(hid, "hid_field_extract() called with n (%d) > 32! (%s)\n",
10711072
n, current->comm);
10721073

10731074
report += offset >> 3; /* adjust byte index */
@@ -1076,6 +1077,7 @@ static __u32 extract(const struct hid_device *hid, __u8 *report,
10761077
x = (x >> offset) & ((1ULL << n) - 1); /* extract bit field */
10771078
return (u32) x;
10781079
}
1080+
EXPORT_SYMBOL_GPL(hid_field_extract);
10791081

10801082
/*
10811083
* "implement" : set bits in a little endian bit stream.
@@ -1221,9 +1223,9 @@ static void hid_input_field(struct hid_device *hid, struct hid_field *field,
12211223
for (n = 0; n < count; n++) {
12221224

12231225
value[n] = min < 0 ?
1224-
snto32(extract(hid, data, offset + n * size, size),
1225-
size) :
1226-
extract(hid, data, offset + n * size, size);
1226+
snto32(hid_field_extract(hid, data, offset + n * size,
1227+
size), size) :
1228+
hid_field_extract(hid, data, offset + n * size, size);
12271229

12281230
/* Ignore report if ErrorRollOver */
12291231
if (!(field->flags & HID_MAIN_ITEM_VARIABLE) &&
@@ -1901,6 +1903,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
19011903
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
19021904
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3) },
19031905
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3_JP) },
1906+
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) },
19041907
{ HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
19051908
{ HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
19061909
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
@@ -2265,14 +2268,6 @@ static const struct hid_device_id hid_ignore_list[] = {
22652268
{ HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) },
22662269
{ HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) },
22672270
{ HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0004) },
2268-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30) },
2269-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30) },
2270-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT) },
2271-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_16_16_IF_KIT) },
2272-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_8_8_8_IF_KIT) },
2273-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_7_IF_KIT) },
2274-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT) },
2275-
{ HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_PHIDGET_MOTORCONTROL) },
22762271
{ HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_SUPER_Q2) },
22772272
{ HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_GOGOPEN) },
22782273
{ HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_PENPOWER) },
@@ -2399,14 +2394,6 @@ static const struct hid_device_id hid_ignore_list[] = {
23992394
{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WTP) },
24002395
{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) },
24012396
#endif
2402-
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) },
2403-
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) },
2404-
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
2405-
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) },
2406-
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) },
2407-
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20) },
2408-
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) },
2409-
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) },
24102397
{ HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
24112398
{ HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) },
24122399
{ }

drivers/hid/hid-cypress.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,9 @@ static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
4141

4242
for (i = 0; i < *rsize - 4; i++)
4343
if (rdesc[i] == 0x29 && rdesc[i + 2] == 0x19) {
44-
__u8 tmp;
45-
4644
rdesc[i] = 0x19;
4745
rdesc[i + 2] = 0x29;
48-
tmp = rdesc[i + 3];
49-
rdesc[i + 3] = rdesc[i + 1];
50-
rdesc[i + 1] = tmp;
46+
swap(rdesc[i + 3], rdesc[i + 1]);
5147
}
5248
return rdesc;
5349
}

drivers/hid/hid-ids.h

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -364,16 +364,6 @@
364364
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A 0x010a
365365
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100
366366

367-
#define USB_VENDOR_ID_GLAB 0x06c2
368-
#define USB_DEVICE_ID_4_PHIDGETSERVO_30 0x0038
369-
#define USB_DEVICE_ID_1_PHIDGETSERVO_30 0x0039
370-
#define USB_DEVICE_ID_0_0_4_IF_KIT 0x0040
371-
#define USB_DEVICE_ID_0_16_16_IF_KIT 0x0044
372-
#define USB_DEVICE_ID_8_8_8_IF_KIT 0x0045
373-
#define USB_DEVICE_ID_0_8_7_IF_KIT 0x0051
374-
#define USB_DEVICE_ID_0_8_8_IF_KIT 0x0053
375-
#define USB_DEVICE_ID_PHIDGET_MOTORCONTROL 0x0058
376-
377367
#define USB_VENDOR_ID_GOODTOUCH 0x1aad
378368
#define USB_DEVICE_ID_GOODTOUCH_000f 0x000f
379369

@@ -674,6 +664,7 @@
674664
#define USB_DEVICE_ID_MS_TYPE_COVER_2 0x07a9
675665
#define USB_DEVICE_ID_MS_TYPE_COVER_3 0x07dc
676666
#define USB_DEVICE_ID_MS_TYPE_COVER_3_JP 0x07dd
667+
#define USB_DEVICE_ID_MS_POWER_COVER 0x07da
677668

678669
#define USB_VENDOR_ID_MOJO 0x8282
679670
#define USB_DEVICE_ID_RETRO_ADAPTER 0x3201
@@ -959,13 +950,6 @@
959950
#define USB_DEVICE_ID_VELLEMAN_K8061_FIRST 0x8061
960951
#define USB_DEVICE_ID_VELLEMAN_K8061_LAST 0x8068
961952

962-
#define USB_VENDOR_ID_VERNIER 0x08f7
963-
#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001
964-
#define USB_DEVICE_ID_VERNIER_GOTEMP 0x0002
965-
#define USB_DEVICE_ID_VERNIER_SKIP 0x0003
966-
#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004
967-
#define USB_DEVICE_ID_VERNIER_LCSPEC 0x0006
968-
969953
#define USB_VENDOR_ID_VTL 0x0306
970954
#define USB_DEVICE_ID_VTL_MULTITOUCH_FF3F 0xff3f
971955

@@ -984,9 +968,6 @@
984968

985969
#define USB_VENDOR_ID_WISEGROUP 0x0925
986970
#define USB_DEVICE_ID_SMARTJOY_PLUS 0x0005
987-
#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101
988-
#define USB_DEVICE_ID_4_PHIDGETSERVO_20 0x8104
989-
#define USB_DEVICE_ID_8_8_4_IF_KIT 0x8201
990971
#define USB_DEVICE_ID_SUPER_JOY_BOX_3 0x8888
991972
#define USB_DEVICE_ID_QUAD_USB_JOYPAD 0x8800
992973
#define USB_DEVICE_ID_DUAL_USB_JOYPAD 0x8866
@@ -1040,4 +1021,11 @@
10401021
#define USB_VENDOR_ID_RISO_KAGAKU 0x1294 /* Riso Kagaku Corp. */
10411022
#define USB_DEVICE_ID_RI_KA_WEBMAIL 0x1320 /* Webmail Notifier */
10421023

1024+
#define USB_VENDOR_ID_MULTIPLE_1781 0x1781
1025+
#define USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD 0x0a8d
1026+
1027+
#define USB_VENDOR_ID_DRACAL_RAPHNET 0x289b
1028+
#define USB_DEVICE_ID_RAPHNET_2NES2SNES 0x0002
1029+
#define USB_DEVICE_ID_RAPHNET_4NES4SNES 0x0003
1030+
10431031
#endif

drivers/hid/hid-input.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1157,7 +1157,8 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
11571157
return;
11581158

11591159
/* report the usage code as scancode if the key status has changed */
1160-
if (usage->type == EV_KEY && !!test_bit(usage->code, input->key) != value)
1160+
if (usage->type == EV_KEY &&
1161+
(!test_bit(usage->code, input->key)) == value)
11611162
input_event(input, EV_MSC, MSC_SCAN, usage->hid);
11621163

11631164
input_event(input, usage->type, usage->code, value);

drivers/hid/hid-lenovo.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,8 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev)
599599
GFP_KERNEL);
600600
if (data_pointer == NULL) {
601601
hid_err(hdev, "Could not allocate memory for driver data\n");
602-
return -ENOMEM;
602+
ret = -ENOMEM;
603+
goto err;
603604
}
604605

605606
// set same default values as windows driver
@@ -610,7 +611,8 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev)
610611
name_micmute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL);
611612
if (name_mute == NULL || name_micmute == NULL) {
612613
hid_err(hdev, "Could not allocate memory for led data\n");
613-
return -ENOMEM;
614+
ret = -ENOMEM;
615+
goto err;
614616
}
615617
snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev));
616618
snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev));
@@ -634,6 +636,9 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev)
634636
lenovo_features_set_tpkbd(hdev);
635637

636638
return 0;
639+
err:
640+
sysfs_remove_group(&hdev->dev.kobj, &lenovo_attr_group_tpkbd);
641+
return ret;
637642
}
638643

639644
static int lenovo_probe_cptkbd(struct hid_device *hdev)

drivers/hid/hid-lg.c

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,8 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
700700
/* insert a little delay of 10 jiffies ~ 40ms */
701701
wait_queue_head_t wait;
702702
init_waitqueue_head (&wait);
703-
wait_event_interruptible_timeout(wait, 0, 10);
703+
wait_event_interruptible_timeout(wait, 0,
704+
msecs_to_jiffies(40));
704705

705706
/* Select random Address */
706707
buf[1] = 0xB2;
@@ -712,13 +713,16 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
712713
}
713714

714715
if (drv_data->quirks & LG_FF)
715-
lgff_init(hdev);
716-
if (drv_data->quirks & LG_FF2)
717-
lg2ff_init(hdev);
718-
if (drv_data->quirks & LG_FF3)
719-
lg3ff_init(hdev);
720-
if (drv_data->quirks & LG_FF4)
721-
lg4ff_init(hdev);
716+
ret = lgff_init(hdev);
717+
else if (drv_data->quirks & LG_FF2)
718+
ret = lg2ff_init(hdev);
719+
else if (drv_data->quirks & LG_FF3)
720+
ret = lg3ff_init(hdev);
721+
else if (drv_data->quirks & LG_FF4)
722+
ret = lg4ff_init(hdev);
723+
724+
if (ret)
725+
goto err_free;
722726

723727
return 0;
724728
err_free:
@@ -731,8 +735,8 @@ static void lg_remove(struct hid_device *hdev)
731735
struct lg_drv_data *drv_data = hid_get_drvdata(hdev);
732736
if (drv_data->quirks & LG_FF4)
733737
lg4ff_deinit(hdev);
734-
735-
hid_hw_stop(hdev);
738+
else
739+
hid_hw_stop(hdev);
736740
kfree(drv_data);
737741
}
738742

0 commit comments

Comments
 (0)