]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: accel: adxl380: Store sampling frequency index in odr struct member
authorFrancesco Lavra <flavra@baylibre.com>
Thu, 15 Jan 2026 17:53:48 +0000 (18:53 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Fri, 16 Jan 2026 19:38:31 +0000 (19:38 +0000)
The ADXL380 driver assumes that acceleration samples are always retrieved
via the high-performance DSM signal path; as a result, the sampling
frequency value depends exclusively on the decimation filter settings in
the TRIG_CFG register.
In preparation for adding support for sampling frequency values that rely
on the low-power SAR signal path (on which the decimation filters are not
supported), use the (currently unused) 'odr' member of struct adxl380_state
to store the sampling frequency value, and when userspace requests the
current frequency value, retrieve it from the struct instead of calculating
it from the decimation filter settings.

Signed-off-by: Francesco Lavra <flavra@baylibre.com>
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/adxl380.c

index 6d5f1a0d51e97636799f5d5bae8908007dbdad42..28caa88d7c328dce82b4230dec564718c5a0a56d 100644 (file)
@@ -417,17 +417,7 @@ static int adxl380_read_chn(struct adxl380_state *st, u8 addr)
 
 static int adxl380_get_odr(struct adxl380_state *st, int *odr)
 {
-       int ret;
-       unsigned int trig_cfg, odr_idx;
-
-       ret = regmap_read(st->regmap, ADXL380_TRIG_CFG_REG, &trig_cfg);
-       if (ret)
-               return ret;
-
-       odr_idx = (FIELD_GET(ADXL380_TRIG_CFG_SINC_RATE_MSK, trig_cfg) << 1) |
-                 (FIELD_GET(ADXL380_TRIG_CFG_DEC_2X_MSK, trig_cfg) & 1);
-
-       *odr = st->chip_info->samp_freq_tbl[odr_idx];
+       *odr = st->chip_info->samp_freq_tbl[st->odr];
 
        return 0;
 }
@@ -500,6 +490,7 @@ static int adxl380_set_odr(struct adxl380_state *st, u8 odr)
        if (ret)
                return ret;
 
+       st->odr = odr;
        ret = adxl380_set_measure_en(st, true);
        if (ret)
                return ret;