Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID updates from Jiri Kosina: "This contains fixes for two devices by Jiri Slaby and Xianhan Yu, new device IDs for MacBook Pro 10,2 from Dirk Hohndel and generic multitouch code fix from Alan Cox." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: HID: Add support for the MacBook Pro 10,2 keyboard / touchpad HID: multitouch: fix maxcontacts problem on GeneralTouch HID: multitouch: put the case in the right switch statement HID: microsoft: fix invalid rdesc for 3k kbd
This commit is contained in:
@@ -522,6 +522,12 @@ static const struct hid_device_id apple_devices[] = {
|
|||||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
|
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
|
||||||
.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
|
.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI),
|
||||||
|
.driver_data = APPLE_HAS_FN },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO),
|
||||||
|
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS),
|
||||||
|
.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
|
||||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
|
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
|
||||||
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
|
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
|
||||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
|
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
|
||||||
|
@@ -1532,6 +1532,9 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) },
|
||||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
|
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
|
||||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
|
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
|
||||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
|
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
|
||||||
@@ -2139,6 +2142,9 @@ static const struct hid_device_id hid_mouse_ignore_list[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
|
||||||
{ }
|
{ }
|
||||||
|
@@ -118,6 +118,9 @@
|
|||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI 0x0252
|
#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI 0x0252
|
||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO 0x0253
|
#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO 0x0253
|
||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS 0x0254
|
#define USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS 0x0254
|
||||||
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI 0x0259
|
||||||
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO 0x025a
|
||||||
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS 0x025b
|
||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI 0x0249
|
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI 0x0249
|
||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO 0x024a
|
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO 0x024a
|
||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS 0x024b
|
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS 0x024b
|
||||||
|
@@ -28,22 +28,30 @@
|
|||||||
#define MS_RDESC 0x08
|
#define MS_RDESC 0x08
|
||||||
#define MS_NOGET 0x10
|
#define MS_NOGET 0x10
|
||||||
#define MS_DUPLICATE_USAGES 0x20
|
#define MS_DUPLICATE_USAGES 0x20
|
||||||
|
#define MS_RDESC_3K 0x40
|
||||||
|
|
||||||
/*
|
|
||||||
* Microsoft Wireless Desktop Receiver (Model 1028) has
|
|
||||||
* 'Usage Min/Max' where it ought to have 'Physical Min/Max'
|
|
||||||
*/
|
|
||||||
static __u8 *ms_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
static __u8 *ms_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||||
unsigned int *rsize)
|
unsigned int *rsize)
|
||||||
{
|
{
|
||||||
unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
|
unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Microsoft Wireless Desktop Receiver (Model 1028) has
|
||||||
|
* 'Usage Min/Max' where it ought to have 'Physical Min/Max'
|
||||||
|
*/
|
||||||
if ((quirks & MS_RDESC) && *rsize == 571 && rdesc[557] == 0x19 &&
|
if ((quirks & MS_RDESC) && *rsize == 571 && rdesc[557] == 0x19 &&
|
||||||
rdesc[559] == 0x29) {
|
rdesc[559] == 0x29) {
|
||||||
hid_info(hdev, "fixing up Microsoft Wireless Receiver Model 1028 report descriptor\n");
|
hid_info(hdev, "fixing up Microsoft Wireless Receiver Model 1028 report descriptor\n");
|
||||||
rdesc[557] = 0x35;
|
rdesc[557] = 0x35;
|
||||||
rdesc[559] = 0x45;
|
rdesc[559] = 0x45;
|
||||||
}
|
}
|
||||||
|
/* the same as above (s/usage/physical/) */
|
||||||
|
if ((quirks & MS_RDESC_3K) && *rsize == 106 &&
|
||||||
|
!memcmp((char []){ 0x19, 0x00, 0x29, 0xff },
|
||||||
|
&rdesc[94], 4)) {
|
||||||
|
rdesc[94] = 0x35;
|
||||||
|
rdesc[96] = 0x45;
|
||||||
|
}
|
||||||
return rdesc;
|
return rdesc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +200,7 @@ static const struct hid_device_id ms_devices[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB),
|
||||||
.driver_data = MS_PRESENTER },
|
.driver_data = MS_PRESENTER },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K),
|
||||||
.driver_data = MS_ERGONOMY },
|
.driver_data = MS_ERGONOMY | MS_RDESC_3K },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0),
|
||||||
.driver_data = MS_NOGET },
|
.driver_data = MS_NOGET },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500),
|
||||||
|
@@ -210,8 +210,7 @@ static struct mt_class mt_classes[] = {
|
|||||||
},
|
},
|
||||||
{ .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
|
{ .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
|
||||||
.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
|
.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
|
||||||
MT_QUIRK_SLOT_IS_CONTACTNUMBER,
|
MT_QUIRK_SLOT_IS_CONTACTNUMBER
|
||||||
.maxcontacts = 10
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{ .name = MT_CLS_FLATFROG,
|
{ .name = MT_CLS_FLATFROG,
|
||||||
@@ -421,11 +420,11 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|||||||
* contact max are global to the report */
|
* contact max are global to the report */
|
||||||
td->last_field_index = field->index;
|
td->last_field_index = field->index;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
case HID_DG_TOUCH:
|
case HID_DG_TOUCH:
|
||||||
/* Legacy devices use TIPSWITCH and not TOUCH.
|
/* Legacy devices use TIPSWITCH and not TOUCH.
|
||||||
* Let's just ignore this field. */
|
* Let's just ignore this field. */
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
/* let hid-input decide for the others */
|
/* let hid-input decide for the others */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@@ -84,6 +84,10 @@
|
|||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262
|
||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263
|
||||||
#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264
|
||||||
|
/* MacbookPro10,2 (unibody, October 2012) */
|
||||||
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI 0x0259
|
||||||
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO 0x025a
|
||||||
|
#define USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS 0x025b
|
||||||
|
|
||||||
#define BCM5974_DEVICE(prod) { \
|
#define BCM5974_DEVICE(prod) { \
|
||||||
.match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
|
.match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
|
||||||
@@ -137,6 +141,10 @@ static const struct usb_device_id bcm5974_table[] = {
|
|||||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI),
|
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI),
|
||||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ISO),
|
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ISO),
|
||||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
|
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
|
||||||
|
/* MacbookPro10,2 */
|
||||||
|
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI),
|
||||||
|
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO),
|
||||||
|
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS),
|
||||||
/* Terminating entry */
|
/* Terminating entry */
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
@@ -379,6 +387,19 @@ static const struct bcm5974_config bcm5974_config_table[] = {
|
|||||||
{ SN_COORD, -150, 6730 },
|
{ SN_COORD, -150, 6730 },
|
||||||
{ SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
|
{ SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI,
|
||||||
|
USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO,
|
||||||
|
USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS,
|
||||||
|
HAS_INTEGRATED_BUTTON,
|
||||||
|
0x84, sizeof(struct bt_data),
|
||||||
|
0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
|
||||||
|
{ SN_PRESSURE, 0, 300 },
|
||||||
|
{ SN_WIDTH, 0, 2048 },
|
||||||
|
{ SN_COORD, -4750, 5280 },
|
||||||
|
{ SN_COORD, -150, 6730 },
|
||||||
|
{ SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
|
||||||
|
},
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user