mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
iio: accel: adxl380: Introduce helper function for activity detection
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> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
a99b000f92
commit
fabae75587
|
|
@ -232,14 +232,35 @@ 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)
|
||||
return ret;
|
||||
|
||||
*enabled = FIELD_GET(ADXL380_ACT_EN_MSK, act_inact_ctl) ||
|
||||
FIELD_GET(ADXL380_INACT_EN_MSK, act_inact_ctl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
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 +269,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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user