iio: imu: st_lsm6dsx: add support to ASM330LHB
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 6 Mar 2023 11:08:00 +0000 (12:08 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 12 Mar 2023 15:56:44 +0000 (15:56 +0000)
Add support to STM ASM330LHB (acc + gyro) automotive Mems sensor.
The ASM330LHB sensor can use ASM330LHH as fallback device since it
implements all the ASM330LHB features currently implemented in
st_lsm6dsx.

Datasheet: https://www.st.com/resource/en/datasheet/asm330lhb.pdf
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://lore.kernel.org/r/a1d675457da7aa9e979d8cabea410e942e015e71.1678100533.git.lorenzo@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/st_lsm6dsx/Kconfig
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c

index 8c16cdacf2f212bba2a6d0c07a707299779c2c14..5865a295a4df36ecbd4b3bf9d2f3c563ba29592a 100644 (file)
@@ -14,8 +14,8 @@ config IIO_ST_LSM6DSX
          sensor. Supported devices: lsm6ds3, lsm6ds3h, lsm6dsl, lsm6dsm,
          ism330dlc, lsm6dso, lsm6dsox, asm330lhh, asm330lhhx, lsm6dsr,
          lsm6ds3tr-c, ism330dhcx, lsm6dsrx, lsm6ds0, lsm6dsop, lsm6dstx,
-         lsm6dsv, lsm6dsv16x, lsm6dso16is, ism330is, lsm6dst and the
-         accelerometer/gyroscope of lsm9ds1.
+         lsm6dsv, lsm6dsv16x, lsm6dso16is, ism330is, asm330lhb, lsm6dst
+         and the accelerometer/gyroscope of lsm9ds1.
 
          To compile this driver as a module, choose M here: the module
          will be called st_lsm6dsx.
index 8e119d78730ba46151ff2ce783e07ffb75ae93a4..9dfe4917a386ce0469397451866c7ec359c05faf 100644 (file)
@@ -37,6 +37,7 @@
 #define ST_LSM6DSV16X_DEV_NAME "lsm6dsv16x"
 #define ST_LSM6DSO16IS_DEV_NAME        "lsm6dso16is"
 #define ST_ISM330IS_DEV_NAME   "ism330is"
+#define ST_ASM330LHB_DEV_NAME  "asm330lhb"
 
 enum st_lsm6dsx_hw_id {
        ST_LSM6DS3_ID,
@@ -61,6 +62,7 @@ enum st_lsm6dsx_hw_id {
        ST_LSM6DSV16X_ID,
        ST_LSM6DSO16IS_ID,
        ST_ISM330IS_ID,
+       ST_ASM330LHB_ID,
        ST_LSM6DSX_MAX_ID,
 };
 
index f6c11d6fb0b0f940a72e0f1deeaa6e3f70192172..066fe561c5e88dcc435a4e4bbea0a66c8536394c 100644 (file)
@@ -15,7 +15,7 @@
  * value of the decimation factor and ODR set for each FIFO data set.
  *
  * LSM6DSO/LSM6DSOX/ASM330LHH/ASM330LHHX/LSM6DSR/LSM6DSRX/ISM330DHCX/
- * LSM6DST/LSM6DSOP/LSM6DSTX/LSM6DSV:
+ * LSM6DST/LSM6DSOP/LSM6DSTX/LSM6DSV/ASM330LHB:
  * The FIFO buffer can be configured to store data from gyroscope and
  * accelerometer. Each sample is queued with a tag (1B) indicating data
  * source (gyroscope, accelerometer, hw timer).
index 966df6ffe874057ec0f96de48ef6916c38405a55..455e5edd3a80b062c03081799b58a80531095c90 100644 (file)
@@ -1032,6 +1032,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .hw_id = ST_LSM6DSOP_ID,
                                .name = ST_LSM6DSOP_DEV_NAME,
                                .wai = 0x6c,
+                       }, {
+                               .hw_id = ST_ASM330LHB_ID,
+                               .name = ST_ASM330LHB_DEV_NAME,
+                               .wai = 0x6b,
                        },
                },
                .channels = {
index df5f609252600a7908ccfeed9b8e143a500101e8..ccdc4ceffd8547c0f9be18baf1d97743e8edd345 100644 (file)
@@ -125,6 +125,10 @@ static const struct of_device_id st_lsm6dsx_i2c_of_match[] = {
                .compatible = "st,ism330is",
                .data = (void *)ST_ISM330IS_ID,
        },
+       {
+               .compatible = "st,asm330lhb",
+               .data = (void *)ST_ASM330LHB_ID,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, st_lsm6dsx_i2c_of_match);
@@ -152,6 +156,7 @@ static const struct i2c_device_id st_lsm6dsx_i2c_id_table[] = {
        { ST_LSM6DSV16X_DEV_NAME, ST_LSM6DSV16X_ID },
        { ST_LSM6DSO16IS_DEV_NAME, ST_LSM6DSO16IS_ID },
        { ST_ISM330IS_DEV_NAME, ST_ISM330IS_ID },
+       { ST_ASM330LHB_DEV_NAME, ST_ASM330LHB_ID },
        {},
 };
 MODULE_DEVICE_TABLE(i2c, st_lsm6dsx_i2c_id_table);
index 974584bda875ea2d44a9c578247523023669609f..f56c170c41a9ded6aa06568a0eca493c9d766f5d 100644 (file)
@@ -125,6 +125,10 @@ static const struct of_device_id st_lsm6dsx_spi_of_match[] = {
                .compatible = "st,ism330is",
                .data = (void *)ST_ISM330IS_ID,
        },
+       {
+               .compatible = "st,asm330lhb",
+               .data = (void *)ST_ASM330LHB_ID,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, st_lsm6dsx_spi_of_match);
@@ -152,6 +156,7 @@ static const struct spi_device_id st_lsm6dsx_spi_id_table[] = {
        { ST_LSM6DSV16X_DEV_NAME, ST_LSM6DSV16X_ID },
        { ST_LSM6DSO16IS_DEV_NAME, ST_LSM6DSO16IS_ID },
        { ST_ISM330IS_DEV_NAME, ST_ISM330IS_ID },
+       { ST_ASM330LHB_DEV_NAME, ST_ASM330LHB_ID },
        {},
 };
 MODULE_DEVICE_TABLE(spi, st_lsm6dsx_spi_id_table);