]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iio: accel: iis328dq: fix gain values
authorMarkus Koeniger <markus.koeniger@liebherr.com>
Wed, 7 Jan 2026 15:32:18 +0000 (16:32 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 11 Jan 2026 12:00:08 +0000 (12:00 +0000)
The sensors IIS328DQ and H3LIS331DL share one configuration but
H3LIS331DL has different gain parameters, configs therefore
need to be split up.
The gain parameters for the IIS328DQ are 0.98, 1.95 and 3.91,
depending on the selected measurement range.

See sensor manuals, chapter 2.1 "mechanical characteristics",
parameter "Sensitivity".

Datasheet: https://www.st.com/resource/en/datasheet/iis328dq.pdf
Datasheet: https://www.st.com/resource/en/datasheet/h3lis331dl.pdf
Fixes: 46e33707fe95 ("iio: accel: add support for IIS328DQ variant")
Reviewed-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
Signed-off-by: Markus Koeniger <markus.koeniger@liebherr.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/st_accel_core.c

index a7961c610ed203d039bbf298c8883031a578fb0b..1a9447c81b0f703e2914d6d32814f879844bc864 100644 (file)
@@ -517,7 +517,6 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
                .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
                .sensors_supported = {
                        [0] = H3LIS331DL_ACCEL_DEV_NAME,
-                       [1] = IIS328DQ_ACCEL_DEV_NAME,
                },
                .ch = (struct iio_chan_spec *)st_accel_12bit_channels,
                .odr = {
@@ -584,6 +583,77 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
                .multi_read_bit = true,
                .bootime = 2,
        },
+       {
+               .wai = 0x32,
+               .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
+               .sensors_supported = {
+                       [0] = IIS328DQ_ACCEL_DEV_NAME,
+               },
+               .ch = (struct iio_chan_spec *)st_accel_12bit_channels,
+               .odr = {
+                       .addr = 0x20,
+                       .mask = 0x18,
+                       .odr_avl = {
+                               { .hz = 50, .value = 0x00, },
+                               { .hz = 100, .value = 0x01, },
+                               { .hz = 400, .value = 0x02, },
+                               { .hz = 1000, .value = 0x03, },
+                       },
+               },
+               .pw = {
+                       .addr = 0x20,
+                       .mask = 0x20,
+                       .value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE,
+                       .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
+               },
+               .enable_axis = {
+                       .addr = ST_SENSORS_DEFAULT_AXIS_ADDR,
+                       .mask = ST_SENSORS_DEFAULT_AXIS_MASK,
+               },
+               .fs = {
+                       .addr = 0x23,
+                       .mask = 0x30,
+                       .fs_avl = {
+                               [0] = {
+                                       .num = ST_ACCEL_FS_AVL_100G,
+                                       .value = 0x00,
+                                       .gain = IIO_G_TO_M_S_2(980),
+                               },
+                               [1] = {
+                                       .num = ST_ACCEL_FS_AVL_200G,
+                                       .value = 0x01,
+                                       .gain = IIO_G_TO_M_S_2(1950),
+                               },
+                               [2] = {
+                                       .num = ST_ACCEL_FS_AVL_400G,
+                                       .value = 0x03,
+                                       .gain = IIO_G_TO_M_S_2(3910),
+                               },
+                       },
+               },
+               .bdu = {
+                       .addr = 0x23,
+                       .mask = 0x80,
+               },
+               .drdy_irq = {
+                       .int1 = {
+                               .addr = 0x22,
+                               .mask = 0x02,
+                       },
+                       .int2 = {
+                               .addr = 0x22,
+                               .mask = 0x10,
+                       },
+                       .addr_ihl = 0x22,
+                       .mask_ihl = 0x80,
+               },
+               .sim = {
+                       .addr = 0x23,
+                       .value = BIT(0),
+               },
+               .multi_read_bit = true,
+               .bootime = 2,
+       },
        {
                /* No WAI register present */
                .sensors_supported = {