mbox series

[v3,0/6] iio: st_sensors: Add lsm303d support

Message ID 20230415231130.115094-1-mail@mariushoch.de (mailing list archive)
Headers show
Series iio: st_sensors: Add lsm303d support | expand

Message

Marius Hoch April 15, 2023, 11:11 p.m. UTC
Hi!

This patch series adds support for the LSM303D accelerometer and
magnetometer. As the LSM303D is basically, as far as I can tell,
the LSM9DS0 without gyroscope, we can easily re-use its definitions.

This was tested on a Lenovo Yoga Tablet 2 1051-F.

Cheers,
Marius

Changes in v3:
Simplified the ACPI tables in the LSM9DS0 IMU driver, per Jonathan Cameron.

Marius Hoch (6):
  iio: accel: st_accel: Add LSM303D
  iio: magnetometer: st_accel: Add LSM303D
  iio: st_sensors: Add lsm303d support to the LSM9DS0 IMU driver
  iio: st_sensors: Add ACPI support for lsm303d to the LSM9DS0 IMU
    driver
  iio: Comment that the LSM303D also has the Magnetometer DRDY
  dt-bindings: iio: st-sensors: Add LSM303D accelerometer+magnetometer

 .../devicetree/bindings/iio/st,st-sensors.yaml       |  1 +
 drivers/iio/accel/st_accel_core.c                    |  1 +
 drivers/iio/imu/st_lsm9ds0/Kconfig                   |  3 ++-
 drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_i2c.c          | 12 ++++++++++++
 drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_spi.c          | 12 ++++++++++++
 drivers/iio/magnetometer/st_magn_core.c              |  1 +
 include/linux/iio/common/st_sensors.h                |  1 +
 include/linux/platform_data/st_sensors_pdata.h       |  2 +-
 8 files changed, 31 insertions(+), 2 deletions(-)


base-commit: e62252bc55b6d4eddc6c2bdbf95a448180d6a08d

Comments

Hans de Goede April 16, 2023, 8:19 p.m. UTC | #1
Hi Marius,

On 4/16/23 01:11, Marius Hoch wrote:
> Hi!
> 
> This patch series adds support for the LSM303D accelerometer and
> magnetometer. As the LSM303D is basically, as far as I can tell,
> the LSM9DS0 without gyroscope, we can easily re-use its definitions.
> 
> This was tested on a Lenovo Yoga Tablet 2 1051-F.

Thank you for your work on this. I have had this on my own todo list
since 2020 at least and I did not realize that Andy already added ST IMU
support in 2021 so this just needed some extra device-ids :)

I have tested this successfully on the following models:

Lenovo Yoga Tablet 2 851F (Windows version 8")

This version needs an accel-mount-matrix quick in hwdb since it has
a portrait screen rather then a landscape screen (so 90° rotated):
https://github.com/systemd/systemd/pull/27295
Note I've made sure that this quirk only applies to the 851 and not to the 1051.

Lenovo Yoga Tablet 2  830F (Android version 8")

Since the ACPI tables are broken in the Android BIOS these need
a patch to x86-android-tablets to instantiate the i2c_client
for the sensor, I'm still finalizing this patch and I'll submit
it upstream when its finished.

Tested-by: Hans de Goede <hansg@kernel.org>

Regards,

Hans


p.s.

1: I noticed that auto-screen rotation using iio-sensor-proxy is quite slow
so I wrote a patch to fix this :)   :
https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/merge_requests/366

2: There are some other unsupported sensors on these models too,
perhaps you are interested in adding support for these too?

Here are my personal notes on this:
 -Light sensor should work with drivers/iio/light/al3320a.c
  https://github.com/JideTechnology/remixos-kernel/commit/c52d55b4bd907e87b7b115b3943219f3e089a77a

 -MXM1120 HALL sensor, have datasheet, measures angle of kickstand thingie, use
  for SW_TABLET_MODE. Do a pdx86 driver just for the Tab 2 which checks that the
  kick stand is out *and* the BT keyboard is paired, in that case report
  SW_TABLET_MODE=0, in all other cases report SW_TABLET_MODE=1 ??
  For the commit msg:
  Datasheet available here: http://haechitech.com/tech-support/
  Requires creating an account, once you have an account you can immediately download
  the provided datasheets (or let me know if you want me to email you a copy)

Especially the light sensor should be an easy win and light sensors
are already supported in e.g. iio-sensor-proxy










> Changes in v3:
> Simplified the ACPI tables in the LSM9DS0 IMU driver, per Jonathan Cameron.
> 
> Marius Hoch (6):
>   iio: accel: st_accel: Add LSM303D
>   iio: magnetometer: st_accel: Add LSM303D
>   iio: st_sensors: Add lsm303d support to the LSM9DS0 IMU driver
>   iio: st_sensors: Add ACPI support for lsm303d to the LSM9DS0 IMU
>     driver
>   iio: Comment that the LSM303D also has the Magnetometer DRDY
>   dt-bindings: iio: st-sensors: Add LSM303D accelerometer+magnetometer
> 
>  .../devicetree/bindings/iio/st,st-sensors.yaml       |  1 +
>  drivers/iio/accel/st_accel_core.c                    |  1 +
>  drivers/iio/imu/st_lsm9ds0/Kconfig                   |  3 ++-
>  drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_i2c.c          | 12 ++++++++++++
>  drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_spi.c          | 12 ++++++++++++
>  drivers/iio/magnetometer/st_magn_core.c              |  1 +
>  include/linux/iio/common/st_sensors.h                |  1 +
>  include/linux/platform_data/st_sensors_pdata.h       |  2 +-
>  8 files changed, 31 insertions(+), 2 deletions(-)
> 
> 
> base-commit: e62252bc55b6d4eddc6c2bdbf95a448180d6a08d
Marius Hoch April 20, 2023, 5:21 p.m. UTC | #2
Hi Hans,

On 16/04/2023 22:19, Hans de Goede wrote:
> Hi Marius,
>
> On 4/16/23 01:11, Marius Hoch wrote:
>> Hi!
>>
>> This patch series adds support for the LSM303D accelerometer and
>> magnetometer. As the LSM303D is basically, as far as I can tell,
>> the LSM9DS0 without gyroscope, we can easily re-use its definitions.
>>
>> This was tested on a Lenovo Yoga Tablet 2 1051-F.
> Thank you for your work on this. I have had this on my own todo list
> since 2020 at least and I did not realize that Andy already added ST IMU
> support in 2021 so this just needed some extra device-ids :)
>
> I have tested this successfully on the following models:
>
> Lenovo Yoga Tablet 2 851F (Windows version 8")
>
> This version needs an accel-mount-matrix quick in hwdb since it has
> a portrait screen rather then a landscape screen (so 90° rotated):
> https://github.com/systemd/systemd/pull/27295
> Note I've made sure that this quirk only applies to the 851 and not to the 1051.
>
> Lenovo Yoga Tablet 2  830F (Android version 8")
>
> Since the ACPI tables are broken in the Android BIOS these need
> a patch to x86-android-tablets to instantiate the i2c_client
> for the sensor, I'm still finalizing this patch and I'll submit
> it upstream when its finished.
>
> Tested-by: Hans de Goede <hansg@kernel.org>
>
> Regards,
>
> Hans
>
>
> p.s.
>
> 1: I noticed that auto-screen rotation using iio-sensor-proxy is quite slow
> so I wrote a patch to fix this :)   :
> https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/merge_requests/366
Nice, that should make rotating fast (well, as fast these devices can 
handle).
>
> 2: There are some other unsupported sensors on these models too,
> perhaps you are interested in adding support for these too?
>
> Here are my personal notes on this:
>   -Light sensor should work with drivers/iio/light/al3320a.c
>    https://github.com/JideTechnology/remixos-kernel/commit/c52d55b4bd907e87b7b115b3943219f3e089a77a
That indeed worked like a charm, I'll post the patch later today.
>
>   -MXM1120 HALL sensor, have datasheet, measures angle of kickstand thingie, use
>    for SW_TABLET_MODE. Do a pdx86 driver just for the Tab 2 which checks that the
>    kick stand is out *and* the BT keyboard is paired, in that case report
>    SW_TABLET_MODE=0, in all other cases report SW_TABLET_MODE=1 ??
>    For the commit msg:
>    Datasheet available here: http://haechitech.com/tech-support/
>    Requires creating an account, once you have an account you can immediately download
>    the provided datasheets (or let me know if you want me to email you a copy)
Thanks for the pointers, that sounds like a nice little project. I'll 
give it a shot :)
>
> Especially the light sensor should be an easy win and light sensors
> are already supported in e.g. iio-sensor-proxy

Cheers,
Marius
>
>
>
>
>
>
>
>
>
>> Changes in v3:
>> Simplified the ACPI tables in the LSM9DS0 IMU driver, per Jonathan Cameron.
>>
>> Marius Hoch (6):
>>    iio: accel: st_accel: Add LSM303D
>>    iio: magnetometer: st_accel: Add LSM303D
>>    iio: st_sensors: Add lsm303d support to the LSM9DS0 IMU driver
>>    iio: st_sensors: Add ACPI support for lsm303d to the LSM9DS0 IMU
>>      driver
>>    iio: Comment that the LSM303D also has the Magnetometer DRDY
>>    dt-bindings: iio: st-sensors: Add LSM303D accelerometer+magnetometer
>>
>>   .../devicetree/bindings/iio/st,st-sensors.yaml       |  1 +
>>   drivers/iio/accel/st_accel_core.c                    |  1 +
>>   drivers/iio/imu/st_lsm9ds0/Kconfig                   |  3 ++-
>>   drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_i2c.c          | 12 ++++++++++++
>>   drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_spi.c          | 12 ++++++++++++
>>   drivers/iio/magnetometer/st_magn_core.c              |  1 +
>>   include/linux/iio/common/st_sensors.h                |  1 +
>>   include/linux/platform_data/st_sensors_pdata.h       |  2 +-
>>   8 files changed, 31 insertions(+), 2 deletions(-)
>>
>>
>> base-commit: e62252bc55b6d4eddc6c2bdbf95a448180d6a08d
Hans de Goede April 21, 2023, 7:55 a.m. UTC | #3
Hi Marius,

On 4/16/23 22:19, Hans de Goede wrote:

<snip>

> 2: There are some other unsupported sensors on these models too,
> perhaps you are interested in adding support for these too?
> 
> Here are my personal notes on this:
>  -Light sensor should work with drivers/iio/light/al3320a.c
>   https://github.com/JideTechnology/remixos-kernel/commit/c52d55b4bd907e87b7b115b3943219f3e089a77a
> 
>  -MXM1120 HALL sensor, have datasheet, measures angle of kickstand thingie, use
>   for SW_TABLET_MODE. Do a pdx86 driver just for the Tab 2 which checks that the
>   kick stand is out *and* the BT keyboard is paired, in that case report
>   SW_TABLET_MODE=0, in all other cases report SW_TABLET_MODE=1 ??
>   For the commit msg:
>   Datasheet available here: http://haechitech.com/tech-support/
>   Requires creating an account, once you have an account you can immediately download
>   the provided datasheets (or let me know if you want me to email you a copy)

A quick follow up on this, since you said you were going to take a look.

I think with the way bluetooth works under Linux, with a bunch of the work
being done in userspace that figuring out if the BT keyboard is paired is
not going to work in kernelspace. So I think the best we can do here is
simply export the angle of the kickstand as an iio angle sensor.

Regards,

Hans