123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- From 7075cd222eea9ec651ec36a05e41061f4fc5757b Mon Sep 17 00:00:00 2001
- From: Maximilian Luz <luzmaximilian@gmail.com>
- Date: Sun, 10 Oct 2021 01:27:17 +0200
- Subject: [PATCH] platform/surface: aggregator_registry: Add support for
- Surface Laptop Studio
- Add support for the Surface Laptop Studio.
- In contrast to previous Surface Laptop models, this one has its HID
- devices attached to target ID 1 (instead of 2). It also has a couple
- more of them, including a new notifier for when the pen is stashed /
- taken out of its place, a "Sys Control" device, and two other
- unidentified HID devices with unknown usages.
- Battery and performance profile interfaces remain the same.
- Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
- Patchset: surface-sam
- ---
- .../surface/surface_aggregator_registry.c | 54 +++++++++++++++++++
- 1 file changed, 54 insertions(+)
- diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
- index 4428c4330229..1679811eff50 100644
- --- a/drivers/platform/surface/surface_aggregator_registry.c
- +++ b/drivers/platform/surface/surface_aggregator_registry.c
- @@ -77,6 +77,42 @@ static const struct software_node ssam_node_bas_dtx = {
- .parent = &ssam_node_root,
- };
-
- +/* HID keyboard (TID1). */
- +static const struct software_node ssam_node_hid_tid1_keyboard = {
- + .name = "ssam:01:15:01:01:00",
- + .parent = &ssam_node_root,
- +};
- +
- +/* HID pen stash (TID1; pen taken / stashed away evens). */
- +static const struct software_node ssam_node_hid_tid1_penstash = {
- + .name = "ssam:01:15:01:02:00",
- + .parent = &ssam_node_root,
- +};
- +
- +/* HID touchpad (TID1). */
- +static const struct software_node ssam_node_hid_tid1_touchpad = {
- + .name = "ssam:01:15:01:03:00",
- + .parent = &ssam_node_root,
- +};
- +
- +/* HID device instance 6 (TID1, unknown HID device). */
- +static const struct software_node ssam_node_hid_tid1_iid6 = {
- + .name = "ssam:01:15:01:06:00",
- + .parent = &ssam_node_root,
- +};
- +
- +/* HID device instance 7 (TID1, unknown HID device). */
- +static const struct software_node ssam_node_hid_tid1_iid7 = {
- + .name = "ssam:01:15:01:07:00",
- + .parent = &ssam_node_root,
- +};
- +
- +/* HID system controls (TID1). */
- +static const struct software_node ssam_node_hid_tid1_sysctrl = {
- + .name = "ssam:01:15:01:08:00",
- + .parent = &ssam_node_root,
- +};
- +
- /* HID keyboard. */
- static const struct software_node ssam_node_hid_main_keyboard = {
- .name = "ssam:01:15:02:01:00",
- @@ -159,6 +195,21 @@ static const struct software_node *ssam_node_group_sl3[] = {
- NULL,
- };
-
- +/* Devices for Surface Laptop Studio. */
- +static const struct software_node *ssam_node_group_sls[] = {
- + &ssam_node_root,
- + &ssam_node_bat_ac,
- + &ssam_node_bat_main,
- + &ssam_node_tmp_pprof,
- + &ssam_node_hid_tid1_keyboard,
- + &ssam_node_hid_tid1_penstash,
- + &ssam_node_hid_tid1_touchpad,
- + &ssam_node_hid_tid1_iid6,
- + &ssam_node_hid_tid1_iid7,
- + &ssam_node_hid_tid1_sysctrl,
- + NULL,
- +};
- +
- /* Devices for Surface Laptop Go. */
- static const struct software_node *ssam_node_group_slg1[] = {
- &ssam_node_root,
- @@ -507,6 +558,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
- /* Surface Laptop Go 1 */
- { "MSHW0118", (unsigned long)ssam_node_group_slg1 },
-
- + /* Surface Laptop Studio */
- + { "MSHW0123", (unsigned long)ssam_node_group_sls },
- +
- { },
- };
- MODULE_DEVICE_TABLE(acpi, ssam_platform_hub_match);
- --
- 2.33.0
- From 5e7bd7d6ce73a75e25aedd826dbe4ba8ef80028e Mon Sep 17 00:00:00 2001
- From: Maximilian Luz <luzmaximilian@gmail.com>
- Date: Sun, 10 Oct 2021 15:07:42 +0200
- Subject: [PATCH] HID: surface-hid: Use correct event registry for managing HID
- events
- Fix a timeout error caused by using the wrong registry for some devices,
- preventing the driver to probe and manage events correctly.
- Until now, we have only ever seen the REG-category registry being used
- on devices addressed with target ID 2. In fact, we have only ever seen
- Surface Aggregator Module (SAM) HID devices with target ID 2. For those
- devices, the registry also has to be addressed with target ID 2.
- Some devices, like the new Surface Laptop Studio, however, address their
- HID devices on target ID 1. As a result of this, any target ID 2
- commands time out. This includes event management commands addressed to
- the target ID 2 REG-category registry. For these devices, the registry
- has to be addressed via target ID 1 instead.
- We therefore assume that the target ID of the registry to be used
- depends on the target ID of the respective device. Implement this
- accordingly.
- Fixes: b05ff1002a5c1 ("HID: Add support for Surface Aggregator Module HID transport")
- Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
- Patchset: surface-sam
- ---
- drivers/hid/surface-hid/surface_hid.c | 2 +-
- include/linux/surface_aggregator/controller.h | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
- diff --git a/drivers/hid/surface-hid/surface_hid.c b/drivers/hid/surface-hid/surface_hid.c
- index a3a70e4f3f6c..daa452367c0b 100644
- --- a/drivers/hid/surface-hid/surface_hid.c
- +++ b/drivers/hid/surface-hid/surface_hid.c
- @@ -209,7 +209,7 @@ static int surface_hid_probe(struct ssam_device *sdev)
-
- shid->notif.base.priority = 1;
- shid->notif.base.fn = ssam_hid_event_fn;
- - shid->notif.event.reg = SSAM_EVENT_REGISTRY_REG;
- + shid->notif.event.reg = SSAM_EVENT_REGISTRY_REG(sdev->uid.target);
- shid->notif.event.id.target_category = sdev->uid.category;
- shid->notif.event.id.instance = sdev->uid.instance;
- shid->notif.event.mask = SSAM_EVENT_MASK_STRICT;
- diff --git a/include/linux/surface_aggregator/controller.h b/include/linux/surface_aggregator/controller.h
- index 068e1982ad37..74bfdffaf7b0 100644
- --- a/include/linux/surface_aggregator/controller.h
- +++ b/include/linux/surface_aggregator/controller.h
- @@ -792,8 +792,8 @@ enum ssam_event_mask {
- #define SSAM_EVENT_REGISTRY_KIP \
- SSAM_EVENT_REGISTRY(SSAM_SSH_TC_KIP, 0x02, 0x27, 0x28)
-
- -#define SSAM_EVENT_REGISTRY_REG \
- - SSAM_EVENT_REGISTRY(SSAM_SSH_TC_REG, 0x02, 0x01, 0x02)
- +#define SSAM_EVENT_REGISTRY_REG(tid)\
- + SSAM_EVENT_REGISTRY(SSAM_SSH_TC_REG, tid, 0x01, 0x02)
-
- /**
- * enum ssam_event_notifier_flags - Flags for event notifiers.
- --
- 2.33.0
- From 8f79ffa11f64ee32c97642d4149f5b6e02ec8e68 Mon Sep 17 00:00:00 2001
- From: Maximilian Luz <luzmaximilian@gmail.com>
- Date: Sun, 10 Oct 2021 19:48:10 +0200
- Subject: [PATCH] HID: surface-hid: Allow driver matching for target ID 1
- devices
- Until now we have only ever seen HID devices with target ID 2. The new
- Surface Laptop Studio however uses HID devices with target ID 1. Allow
- matching this driver to those as well.
- Fixes: b05ff1002a5c1 ("HID: Add support for Surface Aggregator Module HID transport")
- Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
- Patchset: surface-sam
- ---
- drivers/hid/surface-hid/surface_hid.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- diff --git a/drivers/hid/surface-hid/surface_hid.c b/drivers/hid/surface-hid/surface_hid.c
- index daa452367c0b..d4aa8c81903a 100644
- --- a/drivers/hid/surface-hid/surface_hid.c
- +++ b/drivers/hid/surface-hid/surface_hid.c
- @@ -230,7 +230,7 @@ static void surface_hid_remove(struct ssam_device *sdev)
- }
-
- static const struct ssam_device_id surface_hid_match[] = {
- - { SSAM_SDEV(HID, 0x02, SSAM_ANY_IID, 0x00) },
- + { SSAM_SDEV(HID, SSAM_ANY_TID, SSAM_ANY_IID, 0x00) },
- { },
- };
- MODULE_DEVICE_TABLE(ssam, surface_hid_match);
- --
- 2.33.0
|