iio: accel: st_accel: add support for LIS2DS12
authorKaustabh Chakraborty <kauschluss@disroot.org>
Sat, 22 Jun 2024 12:33:45 +0000 (18:03 +0530)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 25 Jun 2024 20:04:49 +0000 (21:04 +0100)
Define sensor settings for LIS2DS12 by STMicroelectronics (WhoAmI 0x43)
and add support in the I2C and SPI drivers.

Datasheet: https://www.st.com/resource/en/datasheet/lis2ds12.pdf
Signed-off-by: Kaustabh Chakraborty <kauschluss@disroot.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://patch.msgid.link/20240622123520.39253-1-kauschluss@disroot.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/st_accel.h
drivers/iio/accel/st_accel_core.c
drivers/iio/accel/st_accel_i2c.c
drivers/iio/accel/st_accel_spi.c

index e7525615712b55e4af5c402ea8ab1550e21b73ea..2659f536cef6085d073d70d876aa4536b957670b 100644 (file)
@@ -35,6 +35,7 @@
 #define LIS3DHH_ACCEL_DEV_NAME         "lis3dhh"
 #define LIS3DE_ACCEL_DEV_NAME          "lis3de"
 #define LIS2DE12_ACCEL_DEV_NAME                "lis2de12"
+#define LIS2DS12_ACCEL_DEV_NAME                "lis2ds12"
 #define LIS2HH12_ACCEL_DEV_NAME                "lis2hh12"
 #define LIS302DL_ACCEL_DEV_NAME                "lis302dl"
 #define LSM303C_ACCEL_DEV_NAME         "lsm303c_accel"
index d2104e14e2559d58616fe048a67c13703fac73f1..0e371efbda705f4273631ad6be73456e8a56c37a 100644 (file)
@@ -925,6 +925,87 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
                .multi_read_bit = true,
                .bootime = 2,
        },
+       {
+               .wai = 0x43,
+               .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
+               .sensors_supported = {
+                       [0] = LIS2DS12_ACCEL_DEV_NAME,
+               },
+               .ch = (struct iio_chan_spec *)st_accel_16bit_channels,
+               .odr = {
+                       .addr = 0x20,
+                       .mask = 0xf0,
+                       .odr_avl = {
+                               { .hz = 10, .value = 0x01, },
+                               { .hz = 50, .value = 0x02, },
+                               { .hz = 100, .value = 0x03, },
+                               { .hz = 200, .value = 0x04, },
+                               { .hz = 400, .value = 0x05, },
+                               { .hz = 800, .value = 0x06, },
+                       },
+               },
+               .pw = {
+                       .addr = 0x20,
+                       .mask = 0xf0,
+                       .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
+               },
+               .enable_axis = {
+                       .addr = ST_SENSORS_DEFAULT_AXIS_ADDR,
+                       .mask = ST_SENSORS_DEFAULT_AXIS_MASK,
+               },
+               .fs = {
+                       .addr = 0x20,
+                       .mask = 0x0c,
+                       .fs_avl = {
+                               [0] = {
+                                       .num = ST_ACCEL_FS_AVL_2G,
+                                       .value = 0x00,
+                                       .gain = IIO_G_TO_M_S_2(61),
+                               },
+                               [1] = {
+                                       .num = ST_ACCEL_FS_AVL_4G,
+                                       .value = 0x02,
+                                       .gain = IIO_G_TO_M_S_2(122),
+                               },
+                               [2] = {
+                                       .num = ST_ACCEL_FS_AVL_8G,
+                                       .value = 0x03,
+                                       .gain = IIO_G_TO_M_S_2(244),
+                               },
+                               [3] = {
+                                       .num = ST_ACCEL_FS_AVL_16G,
+                                       .value = 0x01,
+                                       .gain = IIO_G_TO_M_S_2(488),
+                               },
+                       },
+               },
+               .bdu = {
+                       .addr = 0x20,
+                       .mask = 0x01,
+               },
+               .drdy_irq = {
+                       .int1 = {
+                               .addr = 0x23,
+                               .mask = 0x01,
+                       },
+                       .int2 = {
+                               .addr = 0x24,
+                               .mask = 0x01,
+                       },
+                       .addr_ihl = 0x22,
+                       .mask_ihl = 0x02,
+                       .stat_drdy = {
+                               .addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+                               .mask = 0x01,
+                       },
+               },
+               .sim = {
+                       .addr = 0x21,
+                       .value = BIT(0),
+               },
+               .multi_read_bit = true,
+               .bootime = 2,
+       },
        {
                .wai = 0x41,
                .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
index fd374987112158cd51f6e08614e830cc426fb662..329a4d6fb2ec0b10121daea088e102b681760a75 100644 (file)
@@ -102,6 +102,10 @@ static const struct of_device_id st_accel_of_match[] = {
                .compatible = "st,lis2de12",
                .data = LIS2DE12_ACCEL_DEV_NAME,
        },
+       {
+               .compatible = "st,lis2ds12",
+               .data = LIS2DS12_ACCEL_DEV_NAME,
+       },
        {
                .compatible = "st,lis2hh12",
                .data = LIS2HH12_ACCEL_DEV_NAME,
@@ -154,6 +158,7 @@ static const struct i2c_device_id st_accel_id_table[] = {
        { LIS2DW12_ACCEL_DEV_NAME },
        { LIS3DE_ACCEL_DEV_NAME },
        { LIS2DE12_ACCEL_DEV_NAME },
+       { LIS2DS12_ACCEL_DEV_NAME },
        { LIS2HH12_ACCEL_DEV_NAME },
        { LIS302DL_ACCEL_DEV_NAME },
        { LSM303C_ACCEL_DEV_NAME },
index f72a24f4532229eee24b12b9194fde969849b434..825adab371059d4a1bc0d376403aca0868a34e72 100644 (file)
@@ -64,6 +64,10 @@ static const struct of_device_id st_accel_of_match[] = {
                .compatible = "st,lis2dh12-accel",
                .data = LIS2DH12_ACCEL_DEV_NAME,
        },
+       {
+               .compatible = "st,lis2ds12",
+               .data = LIS2DS12_ACCEL_DEV_NAME,
+       },
        {
                .compatible = "st,lis3l02dq",
                .data = LIS3L02DQ_ACCEL_DEV_NAME,
@@ -151,6 +155,7 @@ static const struct spi_device_id st_accel_id_table[] = {
        { LSM330_ACCEL_DEV_NAME },
        { LSM303AGR_ACCEL_DEV_NAME },
        { LIS2DH12_ACCEL_DEV_NAME },
+       { LIS2DS12_ACCEL_DEV_NAME },
        { LIS3L02DQ_ACCEL_DEV_NAME },
        { LNG2DM_ACCEL_DEV_NAME },
        { H3LIS331DL_ACCEL_DEV_NAME },