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

From: Jonathan Cameron

Date: Sun Oct 18 2026 - 22:07:41 EST


On Mon, 28 Sep 2026 16:06:48 -0500
Jared Wuerzburger <jwuerz@xxxxxxxxx> wrote:

> 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.
>
> The device has two I2C resources for the same address; the I2C core
> uses the first one.
>
> The vendor-specific SLA0/SLG0 matrix methods in the DSDT are not parsed,
> because SLA0 is not usable as a mount matrix as it is. Its X and Y signs
> are right, but it also negates Z. It follows the Windows sensor
> convention, which reports Z = -1g with the screen facing up, while
> iio-sensor-proxy uses the same X and Y signs but expects Z = +1g in that
> posture. Applied as a mount matrix, SLA0 gives correct screen rotation,
> but iio-sensor-proxy reports the tilt inverted. The actual mounting is a
> plain 180 degree rotation about Z (-1 0 0; 0 -1 0; 0 0 1), with which
> orientation and tilt are both right. As for SMOCF00, the matrix is
> therefore provided by the systemd hwdb instead.
>
> 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 and tilt work
> with iio-sensor-proxy and the matrix above (checked with the device
> renamed to SMO8B30 via a DSDT override, i.e. the same
> ST_LSM6DS3TRC_ID driver data).
>
> Closes: https://github.com/mudkipme/awesome-minisforum-v3/issues/2
> Signed-off-by: Samuel Dionne-Riel <samuel@xxxxxxxxxxxxxxx>
> [Jared Wuerzburger: rewrote the changelog with test results and the
> mount matrix rationale, converted the entry to C99 initializers,
> dropped the mount matrix patch]
> Assisted-by: LLM
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx>
> Signed-off-by: Jared Wuerzburger <jwuerz@xxxxxxxxx>
> ---
>
> Notes:
> Jonathan, the full DSDT excerpt is in the cover letter; a Link: to the
> series (or b4 shazam -M) would keep it reachable from the commit.

Ah. I was working backwards in time today and applied a patch equivalent
to your patch 1 from someone else. So just this one applied on top
of that.

Sorry about that! I tend to work backwards when I'm way behind as
a lot of older threads have already resolved themselves :)

Thanks,

Jonathan

>
> 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 c4097ce2bf..11e5ec3798 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[] = {
> { .id = "SMO8B30", .driver_data = ST_LSM6DS3TRC_ID },
> { .id = "SMOCF00", .driver_data = ST_LSM6DSO_ID },
> + { .id = "SMOCF05", .driver_data = ST_LSM6DS3TRC_ID },
> { }
> };
> MODULE_DEVICE_TABLE(acpi, st_lsm6dsx_i2c_acpi_match);