Changes: - SAM: - Update DTX driver state after resume. - Add DTX Documentation, misc. fixes, and cleanup. - IPTS: This implements a new and refined UAPI interface that should improve stability during suspend and move some responsibility into userspace, making the driver simpler. It also fixes some sleep issues due to improper shutdown of the device. Shortlog: 0a4a44c Add missing include 31ae03d Improve error handling of ipts_control_* functions 287dea0 Prevent lockups if stop is called from the receiver thread b737a9c On remove, wait until CLEAR_MEM_WINDOW returned. c5b66a5 Add GET_DEVICE_READY ioctl af0f84a Seperate UAPI initialization and device probing 4ae7674 Patch the MEI bus to allow sending commands on remove 27772bc Just a few refactorings... Links: - SAM:af4bb01042
- IPTS:0a4a44c2a9
- kernel:6e8bb10ad8
71 lines
2.4 KiB
Diff
71 lines
2.4 KiB
Diff
From ccc695a9170dc8469d8637568129d4ed8780448c Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Wed, 14 Oct 2020 16:41:58 +0200
|
|
Subject: [PATCH] i2c: core: Restore acpi_walk_dep_device_list() getting called
|
|
after registering the ACPI i2c devs
|
|
|
|
Commit 21653a4181ff ("i2c: core: Call i2c_acpi_install_space_handler()
|
|
before i2c_acpi_register_devices()")'s intention was to only move the
|
|
acpi_install_address_space_handler() call to the point before where
|
|
the ACPI declared i2c-children of the adapter where instantiated by
|
|
i2c_acpi_register_devices().
|
|
|
|
But i2c_acpi_install_space_handler() had a call to
|
|
acpi_walk_dep_device_list() hidden (that is I missed it) at the end
|
|
of it, so as an unwanted side-effect now acpi_walk_dep_device_list()
|
|
was also being called before i2c_acpi_register_devices().
|
|
|
|
Move the acpi_walk_dep_device_list() call to the end of
|
|
i2c_acpi_register_devices(), so that it is once again called *after*
|
|
the i2c_client-s hanging of the adapter have been created.
|
|
|
|
This fixes the Microsoft Surface Go 2 hanging at boot.
|
|
|
|
Fixes: 21653a4181ff ("i2c: core: Call i2c_acpi_install_space_handler() before i2c_acpi_register_devices()")
|
|
Suggested-by: Maximilian Luz <luzmaximilian@gmail.com>
|
|
Reported-and-tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
---
|
|
drivers/i2c/i2c-core-acpi.c | 11 ++++++++++-
|
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c
|
|
index 60b9cb51d5f7..72f7305ab3fc 100644
|
|
--- a/drivers/i2c/i2c-core-acpi.c
|
|
+++ b/drivers/i2c/i2c-core-acpi.c
|
|
@@ -264,6 +264,7 @@ static acpi_status i2c_acpi_add_device(acpi_handle handle, u32 level,
|
|
void i2c_acpi_register_devices(struct i2c_adapter *adap)
|
|
{
|
|
acpi_status status;
|
|
+ acpi_handle handle;
|
|
|
|
if (!has_acpi_companion(&adap->dev))
|
|
return;
|
|
@@ -274,6 +275,15 @@ void i2c_acpi_register_devices(struct i2c_adapter *adap)
|
|
adap, NULL);
|
|
if (ACPI_FAILURE(status))
|
|
dev_warn(&adap->dev, "failed to enumerate I2C slaves\n");
|
|
+
|
|
+ if (!adap->dev.parent)
|
|
+ return;
|
|
+
|
|
+ handle = ACPI_HANDLE(adap->dev.parent);
|
|
+ if (!handle)
|
|
+ return;
|
|
+
|
|
+ acpi_walk_dep_device_list(handle);
|
|
}
|
|
|
|
const struct acpi_device_id *
|
|
@@ -764,7 +774,6 @@ int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
|
|
return -ENOMEM;
|
|
}
|
|
|
|
- acpi_walk_dep_device_list(handle);
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
2.28.0
|
|
|