You've already forked linux-t2-patches
mirror of
https://github.com/t2linux/linux-t2-patches.git
synced 2026-04-30 13:52:11 -07:00
65 lines
2.4 KiB
Diff
65 lines
2.4 KiB
Diff
From 18bed33b3b1180a8af8a52dcf544b67b61786e89 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Ronald=20Tschal=C3=A4r?= <ronald@innovation.ch>
|
|
Date: Sat, 27 Feb 2021 17:26:39 -0800
|
|
Subject: [PATCH 01/13] HID: Recognize sensors with application collections
|
|
too.
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
According to HUTRR39 logical sensor devices may be nested inside
|
|
physical collections or may be specified in multiple top-level
|
|
application collections (see page 59, strategies 1 and 2). However,
|
|
the current code was only recognizing those with physical collections.
|
|
|
|
This issue turned up in recent MacBook Pro's which define the ALS in
|
|
a top-level application collection.
|
|
|
|
Signed-off-by: Ronald Tschalär <ronald@innovation.ch>
|
|
---
|
|
drivers/hid/hid-core.c | 3 ++-
|
|
drivers/hid/hid-sensor-hub.c | 6 ++++--
|
|
2 files changed, 6 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
|
|
index b7f5566e338d..8fcd663b10e2 100644
|
|
--- a/drivers/hid/hid-core.c
|
|
+++ b/drivers/hid/hid-core.c
|
|
@@ -804,7 +804,8 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type)
|
|
int i;
|
|
|
|
if (((parser->global.usage_page << 16) == HID_UP_SENSOR) &&
|
|
- type == HID_COLLECTION_PHYSICAL)
|
|
+ (type == HID_COLLECTION_PHYSICAL ||
|
|
+ type == HID_COLLECTION_APPLICATION))
|
|
hid->group = HID_GROUP_SENSOR_HUB;
|
|
|
|
if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
|
|
diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
|
|
index 6abd3e2a9094..d03dc4ca095f 100644
|
|
--- a/drivers/hid/hid-sensor-hub.c
|
|
+++ b/drivers/hid/hid-sensor-hub.c
|
|
@@ -397,7 +397,8 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
|
|
for (i = 0; i < report->maxfield; ++i) {
|
|
field = report->field[i];
|
|
if (field->maxusage) {
|
|
- if (field->physical == usage_id &&
|
|
+ if ((field->physical == usage_id ||
|
|
+ field->application == usage_id) &&
|
|
(field->logical == attr_usage_id ||
|
|
field->usage[0].hid ==
|
|
attr_usage_id) &&
|
|
@@ -506,7 +507,8 @@ static int sensor_hub_raw_event(struct hid_device *hdev,
|
|
collection->usage);
|
|
|
|
callback = sensor_hub_get_callback(hdev,
|
|
- report->field[i]->physical,
|
|
+ report->field[i]->physical ?:
|
|
+ report->field[i]->application,
|
|
report->field[i]->usage[0].collection_index,
|
|
&hsdev, &priv);
|
|
if (!callback) {
|
|
--
|
|
2.38.1
|
|
|