[PATCH v3 2/2] iio: imu: st_lsm6dsx: Add ACPI ID SMOCF05 for LSM6DS3TR-C

From: Jared Wuerzburger

Date: Sun Sep 27 2026 - 18:07:47 EST


From: Samuel Dionne-Riel <samuel@xxxxxxxxxxxxxxx>

The Minisforum V3 and V3 SE tablets declare their ST LSM6DS3TR-C IMU in
the DSDT with the hardware ID SMOCF05 instead of SMO8B30, so the driver
never binds and the accelerometer and gyroscope are missing. The
Windows driver (version 1.0.4.3) binds the LSM6DS3TR-C to both IDs.

Relevant part of the DSDT, identical on both models (full excerpt in
the cover letter):

Scope (_SB.I2CD) { Device (STS) {
Name (_HID, EisaId ("SMOCF05"))
Name (_CID, EisaId ("SMOCF05"))
_CRS: I2cSerialBusV2 (0x006A, ..., "\\_SB.I2CD") vendor data "SLA0"
I2cSerialBusV2 (0x006A, ..., "\\_SB.I2CD") vendor data "SLG0"
GpioInt (Edge, ActiveHigh, ..., "\\_SB.GPIO") { 9 } "SLA0"
Method (SLA0): "-1 0 0", "0 -1 0", "0 0 -1"
Method (SLG0): "1 0 0", "0 1 0", "0 0 1"
} }

Both I2C resources describe the same address, and the driver uses the
first one. The vendor-specific SLA0/SLG0 mount matrices are not parsed
here; the accelerometer orientation is handled in userspace through
the systemd hwdb, as for SMOCF00.

Tested on:
- V3 SE (Ryzen 7 7735U, BIOS 1.03) with this change.
- V3 (Ryzen 7 8840U, BIOS 1.06), kernel 7.2.7, with this change and
the stock firmware tables. The driver binds to i2c-SMOCF05:00, the
WHO_AM_I check passes (0x6a), and both lsm6ds3tr-c_accel and
lsm6ds3tr-c_gyro are registered. Screen auto-rotation works with
iio-sensor-proxy (checked with the device renamed to SMO8B30 via a
DSDT override, i.e. the same ST_LSM6DS3TRC_ID driver data).

Link: https://github.com/mudkipme/awesome-minisforum-v3/issues/2
Signed-off-by: Samuel Dionne-Riel <samuel@xxxxxxxxxxxxxxx>
[Jared Wuerzburger: rewrote the changelog with the DSDT excerpt and test
results, dropped the mount matrix patch from the series]
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Jared Wuerzburger <jwuerz@xxxxxxxxx>
---
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c
index fbf4e4ecc..5def1d01b 100644
--- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c
+++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c
@@ -145,6 +145,7 @@ MODULE_DEVICE_TABLE(of, st_lsm6dsx_i2c_of_match);
static const struct acpi_device_id st_lsm6dsx_i2c_acpi_match[] = {
{ "SMO8B30", ST_LSM6DS3TRC_ID },
{ "SMOCF00", ST_LSM6DSO_ID },
+ { "SMOCF05", ST_LSM6DS3TRC_ID },
{ }
};
MODULE_DEVICE_TABLE(acpi, st_lsm6dsx_i2c_acpi_match);
--
2.55.0