[PATCH v2 2/3] iio: accel: adxl380: Introduce helper function for activity detection

Francesco Lavra posted 3 patches 3 weeks, 3 days ago
[PATCH v2 2/3] iio: accel: adxl380: Introduce helper function for activity detection
Posted by Francesco Lavra 3 weeks, 3 days ago
Motion detection functionalities (such as activity and inactivity
detection) are only available when the chip is in a low-power mode; this
affects the available sampling frequency values.
In preparation for adding support for a new frequency value, introduce a
helper function that checks whether activity/inactivity detection is
currently enabled; this function will be reused in a future commit to
determine what frequency values are available at any given time.
No functional changes.

Signed-off-by: Francesco Lavra <flavra@baylibre.com>
---
 drivers/iio/accel/adxl380.c | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/drivers/iio/accel/adxl380.c b/drivers/iio/accel/adxl380.c
index bbf1f88ca781..b99458a5eae3 100644
--- a/drivers/iio/accel/adxl380.c
+++ b/drivers/iio/accel/adxl380.c
@@ -232,14 +232,33 @@ bool adxl380_readable_noinc_reg(struct device *dev, unsigned int reg)
 }
 EXPORT_SYMBOL_NS_GPL(adxl380_readable_noinc_reg, "IIO_ADXL380");
 
+static int adxl380_act_inact_enabled(struct adxl380_state *st, bool *enabled)
+{
+	unsigned int act_inact_ctl;
+	int ret;
+
+	if (!st->chip_info->has_low_power) {
+		*enabled = false;
+		return 0;
+	}
+
+	ret = regmap_read(st->regmap, ADXL380_ACT_INACT_CTL_REG, &act_inact_ctl);
+	if (!ret)
+		*enabled = FIELD_GET(ADXL380_ACT_EN_MSK, act_inact_ctl) ||
+			   FIELD_GET(ADXL380_INACT_EN_MSK, act_inact_ctl);
+
+	return ret;
+}
+
 static int adxl380_set_measure_en(struct adxl380_state *st, bool en)
 {
 	int ret;
-	unsigned int act_inact_ctl;
 	u8 op_mode = ADXL380_OP_MODE_STANDBY;
 
 	if (en) {
-		ret = regmap_read(st->regmap, ADXL380_ACT_INACT_CTL_REG, &act_inact_ctl);
+		bool act_inact_enabled;
+
+		ret = adxl380_act_inact_enabled(st, &act_inact_enabled);
 		if (ret)
 			return ret;
 
@@ -248,9 +267,7 @@ static int adxl380_set_measure_en(struct adxl380_state *st, bool en)
 		 * mode and for devices that support low power modes. Otherwise
 		 * go straight to measure mode (same bits as ADXL380_OP_MODE_HP).
 		 */
-		if (st->chip_info->has_low_power &&
-		    (FIELD_GET(ADXL380_ACT_EN_MSK, act_inact_ctl) ||
-		     FIELD_GET(ADXL380_INACT_EN_MSK, act_inact_ctl)))
+		if (act_inact_enabled)
 			op_mode = ADXL380_OP_MODE_VLP;
 		else
 			op_mode = ADXL380_OP_MODE_HP;
-- 
2.39.5
Re: [PATCH v2 2/3] iio: accel: adxl380: Introduce helper function for activity detection
Posted by Andy Shevchenko 3 weeks, 3 days ago
On Thu, Jan 15, 2026 at 06:53:49PM +0100, Francesco Lavra wrote:
> Motion detection functionalities (such as activity and inactivity
> detection) are only available when the chip is in a low-power mode; this
> affects the available sampling frequency values.
> In preparation for adding support for a new frequency value, introduce a
> helper function that checks whether activity/inactivity detection is
> currently enabled; this function will be reused in a future commit to
> determine what frequency values are available at any given time.
> No functional changes.

...

> +static int adxl380_act_inact_enabled(struct adxl380_state *st, bool *enabled)
> +{
> +	unsigned int act_inact_ctl;
> +	int ret;
> +
> +	if (!st->chip_info->has_low_power) {
> +		*enabled = false;
> +		return 0;
> +	}
> +
> +	ret = regmap_read(st->regmap, ADXL380_ACT_INACT_CTL_REG, &act_inact_ctl);

> +	if (!ret)

What's wrong with the standard pattern?

	if (ret)
		return ret;

> +		*enabled = FIELD_GET(ADXL380_ACT_EN_MSK, act_inact_ctl) ||
> +			   FIELD_GET(ADXL380_INACT_EN_MSK, act_inact_ctl);
> +
> +	return ret;

	return 0;

> +}


-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH v2 2/3] iio: accel: adxl380: Introduce helper function for activity detection
Posted by Jonathan Cameron 3 weeks, 2 days ago
On Thu, 15 Jan 2026 22:28:05 +0200
Andy Shevchenko <andriy.shevchenko@intel.com> wrote:

> On Thu, Jan 15, 2026 at 06:53:49PM +0100, Francesco Lavra wrote:
> > Motion detection functionalities (such as activity and inactivity
> > detection) are only available when the chip is in a low-power mode; this
> > affects the available sampling frequency values.
> > In preparation for adding support for a new frequency value, introduce a
> > helper function that checks whether activity/inactivity detection is
> > currently enabled; this function will be reused in a future commit to
> > determine what frequency values are available at any given time.
> > No functional changes.  
> 
> ...
> 
> > +static int adxl380_act_inact_enabled(struct adxl380_state *st, bool *enabled)
> > +{
> > +	unsigned int act_inact_ctl;
> > +	int ret;
> > +
> > +	if (!st->chip_info->has_low_power) {
> > +		*enabled = false;
> > +		return 0;
> > +	}
> > +
> > +	ret = regmap_read(st->regmap, ADXL380_ACT_INACT_CTL_REG, &act_inact_ctl);  
> 
> > +	if (!ret)  
> 
> What's wrong with the standard pattern?
> 
> 	if (ret)
> 		return ret;
> 
> > +		*enabled = FIELD_GET(ADXL380_ACT_EN_MSK, act_inact_ctl) ||
> > +			   FIELD_GET(ADXL380_INACT_EN_MSK, act_inact_ctl);
> > +
> > +	return ret;  
> 
> 	return 0;
> 
Fully agreed. Whilst it's a tiny bit longer, it is a lot more consistent
to always handle errors out of line and good flow inline.

Jonathan

> > +}  
> 
>