Re: [PATCH 1/1] Add 10EC5280 to bmi160_i2c ACPI IDs to allow binding on some devices

From: Jonathan Cameron
Date: Mon Feb 05 2024 - 05:02:38 EST


On Sun, 4 Feb 2024 18:53:42 +0100
Jesus Miguel Gonzalez Herrero <jesusmgh@xxxxxxxxx> wrote:

> Hello Mr. Cameron
>
> First of all thank you for reviewing the patch.
>
> And I most definitely agree with you and Mr. Shevchenko: this absolutely
> is a firmware bug that manufacturers should fix. For this reason some
> people started talks with affected manufacturers to change it. In my
> case it was with GPD, together with some others, including some which
> historically had a more direct line with them. This was finally dismissed
> as WONTFIX, since their main focus is Windows and their driver supports
> the ID, so the end result of those conversations is a lack of a fixed
> firmware, and a surplus of frustration.
>
> As far as I know people have been in talks with Aya too, and I do not
> know the status of conversations with Lenovo or other manufacturers. I
> do not know of any conversation with Realtek, besides what was mentioned
> in those emails you linked to from 2021.
>
> I will amend the patch to include a big disclaimer and the reason as
> a comment in the code, and send it again in reply to this message. I
> don't think I'd go as far as tainting the kernel, but I'm not opposed,
> happy anyway if the IMU finally becomes usable, and VERY far from any
> expertise whatsoever concerning kernel development!
>
> Here is the relevant extract from the DSDT of my GPD Win Max 2 (AMD
> 6800U model) with the latest firmware 1.05 installed.

Great - This is exactly the info that should support such a patch like this.

Include the blob below and a statement that GPD have refused to fix due
to the windows driver in the patch description and I'm fine with taking this.

I may see if I can dig out a Lenovo contact as they are big enough and
have been around long enough to know better... (big company mess however
I'm sure...)

Jonathan


>
>     Scope (_SB.I2CC) {
>         Device (BMA2) {
>             Name (_ADR, Zero)  // _ADR: Address Name (_HID, "10EC5280")
>             // _HID: Hardware ID Name (_CID, "10EC5280")  // _CID:
>             Compatible ID Name (_DDN, "Accelerometer")  // _DDN: DOS
>             Device Name Name (_UID, One)  // _UID: Unique ID Method
>             (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings {
>                 Name (RBUF, ResourceTemplate () {
>                     I2cSerialBusV2 (0x0069, ControllerInitiated,
>                     0x00061A80,
>                         AddressingMode7Bit, "\\_SB.I2CC", 0x00,
>                         ResourceConsumer, , Exclusive, )
>                 }) Return (RBUF) /* \_SB_.I2CC.BMA2._CRS.RBUF */
>             }
>
>             OperationRegion (CMS2, SystemIO, 0x72, 0x02) Field (CMS2,
>             ByteAcc, NoLock, Preserve) {
>                 IND2,   8, DAT2,   8
>             }
>
>             IndexField (IND2, DAT2, ByteAcc, NoLock, Preserve) {
>                 Offset (0x74), BACS,   32
>             }
>
>             Method (ROMS, 0, NotSerialized) {
>                 Name (RBUF, Package (0x03) {
>                     "0 -1 0", "-1 0 0", "0 0 1"
>                 }) Return (RBUF) /* \_SB_.I2CC.BMA2.ROMS.RBUF */
>             }
>
>             Method (CALS, 1, NotSerialized) {
>                 Local0 = Arg0 If (((Local0 == Zero) || (Local0 ==
>                 Ones))) {
>                     Return (Local0)
>                 } Else {
>                     BACS = Local0
>                 }
>             }
>
>             Method (_STA, 0, NotSerialized)  // _STA: Status {
>                 Return (0x0F)
>             }
>         }
>     }
>
> Thank you for taking this into consideration!
>
> Jesus Gonzalez
>
>
>
> On 04/02/2024 15:00, Jonathan Cameron wrote:
> > On Fri, 2 Feb 2024 18:30:41 +0100
> > Jesus Gonzalez <jesusmgh@xxxxxxxxx> wrote:
> >
> >> "10EC5280" is used by several manufacturers like Lenovo, GPD, or AYA (and
> >> probably others) in their ACPI table as the ID for the bmi160 IMU. This
> >> means the bmi160_i2c driver won't bind to it, and the IMU is unavailable
> >> to the user. Manufacturers have been approached on several occasions to
> >> try getting a BIOS with a fixed ID, mostly without actual positive
> >> results, and since affected devices are already a few years old, this is
> >> not expected to change. This patch enables using the bmi160_i2c driver for
> >> the bmi160 IMU on these devices.
> > Hi Jesus,
> >
> > https://lore.kernel.org/lkml/CAHp75Vct-AXnU7QQmdE7nyYZT-=n=p67COPLiiZTet7z7snL-g@xxxxxxxxxxxxxx/
> > Lays out what Andy (and for that matter I) consider necessary for such
> > a patch.
> >
> > In short, we want to see devices called out here - with a DSDT section.
> > + a clear comment in the code.
> >
> > The big problem here is this tramples on Realtech's ID space. It's not just
> > a made up code (incidentally the BMI0160 isn't valid either),
> > it's a valid code but for an entirely different (PCI) device.
> >
> > So we need as much info as possible in the patch description and the driver
> > itself to justify carrying this. Tempting to add a firmware bug taint on
> > it as well but that might scare people :)
> >
> > Jonathan
> >
> >
> >> Signed-off-by: Jesus Gonzalez <jesusmgh@xxxxxxxxx>
> >> ---
> >> A device-specific transformation matrix can then be provided in a second
> >> step through udev hwdb.
> >>
> >> This has been discussed before in 2021, see here:
> >> https://lore.kernel.org/lkml/CACAwPwYQHRcrabw9=0tvenPzAcwwW1pTaR6a+AEWBF9Hqf_wXQ@xxxxxxxxxxxxxx/
> >>
> >> Lenovo, as an example of a big manufacturer, is also using this ID:
> >> https://www.reddit.com/r/linux/comments/r6f9de/comment/hr8bdfs/?context=3
> >>
> >> At least some discussions with GPD took place on the GPD server Discord,
> >> for which I can provide proof on demand via screenshot (if not accessible
> >> directly).
> >>
> >> I have read the patch submission instructions and followed them to the
> >> best of my knowledge. Still, this is my first kernel patch submission,
> >> so I'd be glad if you could please point out any mistakes. Thank you!
> >>
> >>
> >> drivers/iio/imu/bmi160/bmi160_spi.c | 1 +
> >> 1 file changed, 1 insertion(+)
> >>
> >> diff --git a/drivers/iio/imu/bmi160/bmi160_spi.c b/drivers/iio/imu/bmi160/bmi160_spi.c
> >> index 8b573ea99af2..0874c37c6670 100644
> >> --- a/drivers/iio/imu/bmi160/bmi160_spi.c
> >> +++ b/drivers/iio/imu/bmi160/bmi160_spi.c
> >> @@ -41,6 +41,7 @@ MODULE_DEVICE_TABLE(spi, bmi160_spi_id);
> >>
> >> static const struct acpi_device_id bmi160_acpi_match[] = {
> >> {"BMI0160", 0},
> >> + {"10EC5280", 0},
> >> { },
> >> };
> >> MODULE_DEVICE_TABLE(acpi, bmi160_acpi_match);
>