Commit 67fe00d8 authored by Jiri Kosina's avatar Jiri Kosina

Merge branch 'for-5.4/multitouch' into for-linus

- support for the Smart Tech panel, from Benjamin Tissoires

- hid-multitouch is no longer filtering mice node creation,
  from Benjamin Tissoires
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parents 08115756 69ecd44d
...@@ -68,6 +68,7 @@ MODULE_LICENSE("GPL"); ...@@ -68,6 +68,7 @@ MODULE_LICENSE("GPL");
#define MT_QUIRK_STICKY_FINGERS BIT(16) #define MT_QUIRK_STICKY_FINGERS BIT(16)
#define MT_QUIRK_ASUS_CUSTOM_UP BIT(17) #define MT_QUIRK_ASUS_CUSTOM_UP BIT(17)
#define MT_QUIRK_WIN8_PTP_BUTTONS BIT(18) #define MT_QUIRK_WIN8_PTP_BUTTONS BIT(18)
#define MT_QUIRK_SEPARATE_APP_REPORT BIT(19)
#define MT_INPUTMODE_TOUCHSCREEN 0x02 #define MT_INPUTMODE_TOUCHSCREEN 0x02
#define MT_INPUTMODE_TOUCHPAD 0x03 #define MT_INPUTMODE_TOUCHPAD 0x03
...@@ -103,6 +104,7 @@ struct mt_usages { ...@@ -103,6 +104,7 @@ struct mt_usages {
struct mt_application { struct mt_application {
struct list_head list; struct list_head list;
unsigned int application; unsigned int application;
unsigned int report_id;
struct list_head mt_usages; /* mt usages list */ struct list_head mt_usages; /* mt usages list */
__s32 quirks; __s32 quirks;
...@@ -203,6 +205,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app); ...@@ -203,6 +205,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
#define MT_CLS_VTL 0x0110 #define MT_CLS_VTL 0x0110
#define MT_CLS_GOOGLE 0x0111 #define MT_CLS_GOOGLE 0x0111
#define MT_CLS_RAZER_BLADE_STEALTH 0x0112 #define MT_CLS_RAZER_BLADE_STEALTH 0x0112
#define MT_CLS_SMART_TECH 0x0113
#define MT_DEFAULT_MAXCONTACT 10 #define MT_DEFAULT_MAXCONTACT 10
#define MT_MAX_MAXCONTACT 250 #define MT_MAX_MAXCONTACT 250
...@@ -263,7 +266,8 @@ static const struct mt_class mt_classes[] = { ...@@ -263,7 +266,8 @@ static const struct mt_class mt_classes[] = {
MT_QUIRK_HOVERING | MT_QUIRK_HOVERING |
MT_QUIRK_CONTACT_CNT_ACCURATE | MT_QUIRK_CONTACT_CNT_ACCURATE |
MT_QUIRK_STICKY_FINGERS | MT_QUIRK_STICKY_FINGERS |
MT_QUIRK_WIN8_PTP_BUTTONS }, MT_QUIRK_WIN8_PTP_BUTTONS,
.export_all_inputs = true },
{ .name = MT_CLS_EXPORT_ALL_INPUTS, { .name = MT_CLS_EXPORT_ALL_INPUTS,
.quirks = MT_QUIRK_ALWAYS_VALID | .quirks = MT_QUIRK_ALWAYS_VALID |
MT_QUIRK_CONTACT_CNT_ACCURATE, MT_QUIRK_CONTACT_CNT_ACCURATE,
...@@ -353,6 +357,12 @@ static const struct mt_class mt_classes[] = { ...@@ -353,6 +357,12 @@ static const struct mt_class mt_classes[] = {
MT_QUIRK_CONTACT_CNT_ACCURATE | MT_QUIRK_CONTACT_CNT_ACCURATE |
MT_QUIRK_WIN8_PTP_BUTTONS, MT_QUIRK_WIN8_PTP_BUTTONS,
}, },
{ .name = MT_CLS_SMART_TECH,
.quirks = MT_QUIRK_ALWAYS_VALID |
MT_QUIRK_IGNORE_DUPLICATES |
MT_QUIRK_CONTACT_CNT_ACCURATE |
MT_QUIRK_SEPARATE_APP_REPORT,
},
{ } { }
}; };
...@@ -509,8 +519,9 @@ static struct mt_usages *mt_allocate_usage(struct hid_device *hdev, ...@@ -509,8 +519,9 @@ static struct mt_usages *mt_allocate_usage(struct hid_device *hdev,
} }
static struct mt_application *mt_allocate_application(struct mt_device *td, static struct mt_application *mt_allocate_application(struct mt_device *td,
unsigned int application) struct hid_report *report)
{ {
unsigned int application = report->application;
struct mt_application *mt_application; struct mt_application *mt_application;
mt_application = devm_kzalloc(&td->hdev->dev, sizeof(*mt_application), mt_application = devm_kzalloc(&td->hdev->dev, sizeof(*mt_application),
...@@ -535,6 +546,7 @@ static struct mt_application *mt_allocate_application(struct mt_device *td, ...@@ -535,6 +546,7 @@ static struct mt_application *mt_allocate_application(struct mt_device *td,
mt_application->scantime = DEFAULT_ZERO; mt_application->scantime = DEFAULT_ZERO;
mt_application->raw_cc = DEFAULT_ZERO; mt_application->raw_cc = DEFAULT_ZERO;
mt_application->quirks = td->mtclass.quirks; mt_application->quirks = td->mtclass.quirks;
mt_application->report_id = report->id;
list_add_tail(&mt_application->list, &td->applications); list_add_tail(&mt_application->list, &td->applications);
...@@ -542,19 +554,23 @@ static struct mt_application *mt_allocate_application(struct mt_device *td, ...@@ -542,19 +554,23 @@ static struct mt_application *mt_allocate_application(struct mt_device *td,
} }
static struct mt_application *mt_find_application(struct mt_device *td, static struct mt_application *mt_find_application(struct mt_device *td,
unsigned int application) struct hid_report *report)
{ {
unsigned int application = report->application;
struct mt_application *tmp, *mt_application = NULL; struct mt_application *tmp, *mt_application = NULL;
list_for_each_entry(tmp, &td->applications, list) { list_for_each_entry(tmp, &td->applications, list) {
if (application == tmp->application) { if (application == tmp->application) {
mt_application = tmp; if (!(td->mtclass.quirks & MT_QUIRK_SEPARATE_APP_REPORT) ||
break; tmp->report_id == report->id) {
mt_application = tmp;
break;
}
} }
} }
if (!mt_application) if (!mt_application)
mt_application = mt_allocate_application(td, application); mt_application = mt_allocate_application(td, report);
return mt_application; return mt_application;
} }
...@@ -571,7 +587,7 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td, ...@@ -571,7 +587,7 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
return NULL; return NULL;
rdata->report = report; rdata->report = report;
rdata->application = mt_find_application(td, report->application); rdata->application = mt_find_application(td, report);
if (!rdata->application) { if (!rdata->application) {
devm_kfree(&td->hdev->dev, rdata); devm_kfree(&td->hdev->dev, rdata);
...@@ -1561,6 +1577,9 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi) ...@@ -1561,6 +1577,9 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
case HID_VD_ASUS_CUSTOM_MEDIA_KEYS: case HID_VD_ASUS_CUSTOM_MEDIA_KEYS:
suffix = "Custom Media Keys"; suffix = "Custom Media Keys";
break; break;
case HID_DG_PEN:
suffix = "Stylus";
break;
default: default:
suffix = "UNKNOWN"; suffix = "UNKNOWN";
break; break;
...@@ -2022,6 +2041,10 @@ static const struct hid_device_id mt_devices[] = { ...@@ -2022,6 +2041,10 @@ static const struct hid_device_id mt_devices[] = {
HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
USB_VENDOR_ID_SYNAPTICS, 0x8323) }, USB_VENDOR_ID_SYNAPTICS, 0x8323) },
/* Smart Tech panels */
{ .driver_data = MT_CLS_SMART_TECH,
MT_USB_DEVICE(0x0b8c, 0x0092)},
/* Stantum panels */ /* Stantum panels */
{ .driver_data = MT_CLS_CONFIDENCE, { .driver_data = MT_CLS_CONFIDENCE,
MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment