HID: multitouch: Get the contact ID from HID_DG_TRANSDUCER_INDEX fields in case of Apple Touch Bar
In Apple Touch Bar, the contact ID is contained in fields with the HID_DG_TRANSDUCER_INDEX usage rather than HID_DG_CONTACTID, thus differing from the HID spec. Add a quirk for the same. Acked-by: Benjamin Tissoires <bentiss@kernel.org> Signed-off-by: Kerem Karabay <kekrby@gmail.com> Co-developed-by: Aditya Garg <gargaditya08@live.com> Signed-off-by: Aditya Garg <gargaditya08@live.com> Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
committed by
Jiri Kosina
parent
2043ae9019
commit
f41d736acc
@@ -73,6 +73,7 @@ MODULE_LICENSE("GPL");
|
||||
#define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)
|
||||
#define MT_QUIRK_DISABLE_WAKEUP BIT(21)
|
||||
#define MT_QUIRK_ORIENTATION_INVERT BIT(22)
|
||||
#define MT_QUIRK_APPLE_TOUCHBAR BIT(23)
|
||||
|
||||
#define MT_INPUTMODE_TOUCHSCREEN 0x02
|
||||
#define MT_INPUTMODE_TOUCHPAD 0x03
|
||||
@@ -625,6 +626,7 @@ static struct mt_application *mt_find_application(struct mt_device *td,
|
||||
static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
|
||||
struct hid_report *report)
|
||||
{
|
||||
struct mt_class *cls = &td->mtclass;
|
||||
struct mt_report_data *rdata;
|
||||
struct hid_field *field;
|
||||
int r, n;
|
||||
@@ -649,7 +651,11 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
|
||||
|
||||
if (field->logical == HID_DG_FINGER || td->hdev->group != HID_GROUP_MULTITOUCH_WIN_8) {
|
||||
for (n = 0; n < field->report_count; n++) {
|
||||
if (field->usage[n].hid == HID_DG_CONTACTID) {
|
||||
unsigned int hid = field->usage[n].hid;
|
||||
|
||||
if (hid == HID_DG_CONTACTID ||
|
||||
(cls->quirks & MT_QUIRK_APPLE_TOUCHBAR &&
|
||||
hid == HID_DG_TRANSDUCER_INDEX)) {
|
||||
rdata->is_mt_collection = true;
|
||||
break;
|
||||
}
|
||||
@@ -827,6 +833,14 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
||||
EV_KEY, BTN_TOUCH);
|
||||
MT_STORE_FIELD(tip_state);
|
||||
return 1;
|
||||
case HID_DG_TRANSDUCER_INDEX:
|
||||
/*
|
||||
* Contact ID in case of Apple Touch Bars is contained
|
||||
* in fields with HID_DG_TRANSDUCER_INDEX usage.
|
||||
*/
|
||||
if (!(cls->quirks & MT_QUIRK_APPLE_TOUCHBAR))
|
||||
return 0;
|
||||
fallthrough;
|
||||
case HID_DG_CONTACTID:
|
||||
MT_STORE_FIELD(contactid);
|
||||
app->touches_by_report++;
|
||||
|
||||
Reference in New Issue
Block a user