iio: imu: st_lsm6dsx: add support to ISM330IS
authorLorenzo Bianconi <lorenzo@kernel.org>
Thu, 24 Nov 2022 08:49:27 +0000 (09:49 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 24 Nov 2022 19:23:23 +0000 (19:23 +0000)
Add support to STM ISM330IS (accelerometer and gyroscope) Mems sensor.
The ISM330IS sensor can use LSM6DSO16IS as fallback device since it
implements all the ISM330IS features currently implemented in
st_lsm6dsx.

Datasheet: https://www.st.com/resource/en/datasheet/ism330is.pdf
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://lore.kernel.org/r/4cd1614060e06f49cd92f5930d8fd40117c07920.1669279604.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_core.c
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c

index 0096035..f666084 100644 (file)
@@ -13,8 +13,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, the accelerometer/gyroscope
-         of lsm9ds1 and lsm6dst.
+         lsm6dsv, lsm6dsv16x, lsm6dso16is, ism330is, 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 abf14a2..5b6f195 100644 (file)
@@ -36,6 +36,7 @@
 #define ST_LSM6DSV_DEV_NAME    "lsm6dsv"
 #define ST_LSM6DSV16X_DEV_NAME "lsm6dsv16x"
 #define ST_LSM6DSO16IS_DEV_NAME        "lsm6dso16is"
+#define ST_ISM330IS_DEV_NAME   "ism330is"
 
 enum st_lsm6dsx_hw_id {
        ST_LSM6DS3_ID,
@@ -59,6 +60,7 @@ enum st_lsm6dsx_hw_id {
        ST_LSM6DSV_ID,
        ST_LSM6DSV16X_ID,
        ST_LSM6DSO16IS_ID,
+       ST_ISM330IS_ID,
        ST_LSM6DSX_MAX_ID,
 };
 
index 57a79bf..3f6060c 100644 (file)
@@ -27,7 +27,7 @@
  *   - FIFO size: 4KB
  *
  * - LSM6DSO/LSM6DSOX/ASM330LHH/ASM330LHHX/LSM6DSR/ISM330DHCX/LSM6DST/LSM6DSOP/
- *   LSM6DSTX/LSM6DSO16IS:
+ *   LSM6DSTX/LSM6DSO16IS/ISM330IS:
  *   - Accelerometer/Gyroscope supported ODR [Hz]: 12.5, 26, 52, 104, 208, 416,
  *     833
  *   - Accelerometer supported full-scale [g]: +-2/+-4/+-8/+-16
@@ -1393,7 +1393,11 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .hw_id = ST_LSM6DSO16IS_ID,
                                .name = ST_LSM6DSO16IS_DEV_NAME,
                                .wai = 0x22,
-                       },
+                       }, {
+                               .hw_id = ST_ISM330IS_ID,
+                               .name = ST_ISM330IS_DEV_NAME,
+                               .wai = 0x22,
+                       }
                },
                .channels = {
                        [ST_LSM6DSX_ID_ACC] = {
index c34ccc8..df5f609 100644 (file)
@@ -121,6 +121,10 @@ static const struct of_device_id st_lsm6dsx_i2c_of_match[] = {
                .compatible = "st,lsm6dso16is",
                .data = (void *)ST_LSM6DSO16IS_ID,
        },
+       {
+               .compatible = "st,ism330is",
+               .data = (void *)ST_ISM330IS_ID,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, st_lsm6dsx_i2c_of_match);
@@ -147,6 +151,7 @@ static const struct i2c_device_id st_lsm6dsx_i2c_id_table[] = {
        { ST_LSM6DSV_DEV_NAME, ST_LSM6DSV_ID },
        { ST_LSM6DSV16X_DEV_NAME, ST_LSM6DSV16X_ID },
        { ST_LSM6DSO16IS_DEV_NAME, ST_LSM6DSO16IS_ID },
+       { ST_ISM330IS_DEV_NAME, ST_ISM330IS_ID },
        {},
 };
 MODULE_DEVICE_TABLE(i2c, st_lsm6dsx_i2c_id_table);
index 24d5e51..974584b 100644 (file)
@@ -121,6 +121,10 @@ static const struct of_device_id st_lsm6dsx_spi_of_match[] = {
                .compatible = "st,lsm6dso16is",
                .data = (void *)ST_LSM6DSO16IS_ID,
        },
+       {
+               .compatible = "st,ism330is",
+               .data = (void *)ST_ISM330IS_ID,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, st_lsm6dsx_spi_of_match);
@@ -147,6 +151,7 @@ static const struct spi_device_id st_lsm6dsx_spi_id_table[] = {
        { ST_LSM6DSV_DEV_NAME, ST_LSM6DSV_ID },
        { ST_LSM6DSV16X_DEV_NAME, ST_LSM6DSV16X_ID },
        { ST_LSM6DSO16IS_DEV_NAME, ST_LSM6DSO16IS_ID },
+       { ST_ISM330IS_DEV_NAME, ST_ISM330IS_ID },
        {},
 };
 MODULE_DEVICE_TABLE(spi, st_lsm6dsx_spi_id_table);