[PATCH 1/2] iio: accel: adxl380: Store sampling frequency index in odr struct member

Francesco Lavra posted 2 patches 1 month ago
There is a newer version of this series
[PATCH 1/2] iio: accel: adxl380: Store sampling frequency index in odr struct member
Posted by Francesco Lavra 1 month ago
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>
---
 drivers/iio/accel/adxl380.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/iio/accel/adxl380.c b/drivers/iio/accel/adxl380.c
index ce3643c5deb8..bbf1f88ca781 100644
--- a/drivers/iio/accel/adxl380.c
+++ b/drivers/iio/accel/adxl380.c
@@ -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;
-- 
2.39.5
Re: [PATCH 1/2] iio: accel: adxl380: Store sampling frequency index in odr struct member
Posted by Nuno Sá 1 month ago
On Wed, 2026-01-07 at 13:35 +0100, Francesco Lavra wrote:
> 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>

>  drivers/iio/accel/adxl380.c | 13 ++-----------
>  1 file changed, 2 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/iio/accel/adxl380.c b/drivers/iio/accel/adxl380.c
> index ce3643c5deb8..bbf1f88ca781 100644
> --- a/drivers/iio/accel/adxl380.c
> +++ b/drivers/iio/accel/adxl380.c
> @@ -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;