|
@@ -148,6 +148,7 @@ static void mt_post_parse(struct mt_device *td);
|
|
/* reserved 0x0011 */
|
|
/* reserved 0x0011 */
|
|
#define MT_CLS_WIN_8 0x0012
|
|
#define MT_CLS_WIN_8 0x0012
|
|
#define MT_CLS_EXPORT_ALL_INPUTS 0x0013
|
|
#define MT_CLS_EXPORT_ALL_INPUTS 0x0013
|
|
|
|
+#define MT_CLS_WIN_8_DUAL 0x0014
|
|
|
|
|
|
/* vendor specific classes */
|
|
/* vendor specific classes */
|
|
#define MT_CLS_3M 0x0101
|
|
#define MT_CLS_3M 0x0101
|
|
@@ -217,6 +218,12 @@ static struct mt_class mt_classes[] = {
|
|
.quirks = MT_QUIRK_ALWAYS_VALID |
|
|
.quirks = MT_QUIRK_ALWAYS_VALID |
|
|
MT_QUIRK_CONTACT_CNT_ACCURATE,
|
|
MT_QUIRK_CONTACT_CNT_ACCURATE,
|
|
.export_all_inputs = true },
|
|
.export_all_inputs = true },
|
|
|
|
+ { .name = MT_CLS_WIN_8_DUAL,
|
|
|
|
+ .quirks = MT_QUIRK_ALWAYS_VALID |
|
|
|
|
+ MT_QUIRK_IGNORE_DUPLICATES |
|
|
|
|
+ MT_QUIRK_HOVERING |
|
|
|
|
+ MT_QUIRK_CONTACT_CNT_ACCURATE,
|
|
|
|
+ .export_all_inputs = true },
|
|
|
|
|
|
/*
|
|
/*
|
|
* vendor specific classes
|
|
* vendor specific classes
|
|
@@ -512,7 +519,8 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|
mt_store_field(usage, td, hi);
|
|
mt_store_field(usage, td, hi);
|
|
return 1;
|
|
return 1;
|
|
case HID_DG_CONFIDENCE:
|
|
case HID_DG_CONFIDENCE:
|
|
- if (cls->name == MT_CLS_WIN_8 &&
|
|
|
|
|
|
+ if ((cls->name == MT_CLS_WIN_8 ||
|
|
|
|
+ cls->name == MT_CLS_WIN_8_DUAL) &&
|
|
field->application == HID_DG_TOUCHPAD)
|
|
field->application == HID_DG_TOUCHPAD)
|
|
cls->quirks |= MT_QUIRK_CONFIDENCE;
|
|
cls->quirks |= MT_QUIRK_CONFIDENCE;
|
|
mt_store_field(usage, td, hi);
|
|
mt_store_field(usage, td, hi);
|
|
@@ -579,7 +587,8 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|
* MS PTP spec says that external buttons left and right have
|
|
* MS PTP spec says that external buttons left and right have
|
|
* usages 2 and 3.
|
|
* usages 2 and 3.
|
|
*/
|
|
*/
|
|
- if (cls->name == MT_CLS_WIN_8 &&
|
|
|
|
|
|
+ if ((cls->name == MT_CLS_WIN_8 ||
|
|
|
|
+ cls->name == MT_CLS_WIN_8_DUAL) &&
|
|
field->application == HID_DG_TOUCHPAD &&
|
|
field->application == HID_DG_TOUCHPAD &&
|
|
(usage->hid & HID_USAGE) > 1)
|
|
(usage->hid & HID_USAGE) > 1)
|
|
code--;
|
|
code--;
|
|
@@ -1290,6 +1299,16 @@ static const struct hid_device_id mt_devices[] = {
|
|
MT_USB_DEVICE(USB_VENDOR_ID_3M,
|
|
MT_USB_DEVICE(USB_VENDOR_ID_3M,
|
|
USB_DEVICE_ID_3M3266) },
|
|
USB_DEVICE_ID_3M3266) },
|
|
|
|
|
|
|
|
+ /* Alps devices */
|
|
|
|
+ { .driver_data = MT_CLS_WIN_8_DUAL,
|
|
|
|
+ HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
|
|
|
+ USB_VENDOR_ID_ALPS_JP,
|
|
|
|
+ HID_DEVICE_ID_ALPS_U1_DUAL_PTP) },
|
|
|
|
+ { .driver_data = MT_CLS_WIN_8_DUAL,
|
|
|
|
+ HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
|
|
|
+ USB_VENDOR_ID_ALPS_JP,
|
|
|
|
+ HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) },
|
|
|
|
+
|
|
/* Anton devices */
|
|
/* Anton devices */
|
|
{ .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
|
|
{ .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
|
|
MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
|
|
MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
|