Commit 9db02d32 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Jonathan Cameron

iio: imu: st_lsm6dsx: enable LIR for sensor events

Enable Latched interrupt by default for sensor events
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Tested-by: default avatarSean Nyekjaer <sean@geanix.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent c270bbf7
...@@ -215,6 +215,7 @@ struct st_lsm6dsx_ext_dev_settings { ...@@ -215,6 +215,7 @@ struct st_lsm6dsx_ext_dev_settings {
* @fs_table: Hw sensors gain table (gain + val). * @fs_table: Hw sensors gain table (gain + val).
* @decimator: List of decimator register info (addr + mask). * @decimator: List of decimator register info (addr + mask).
* @batch: List of FIFO batching register info (addr + mask). * @batch: List of FIFO batching register info (addr + mask).
* @lir: Latched interrupt register info (addr + mask).
* @fifo_ops: Sensor hw FIFO parameters. * @fifo_ops: Sensor hw FIFO parameters.
* @ts_settings: Hw timer related settings. * @ts_settings: Hw timer related settings.
* @shub_settings: i2c controller related settings. * @shub_settings: i2c controller related settings.
...@@ -237,6 +238,7 @@ struct st_lsm6dsx_settings { ...@@ -237,6 +238,7 @@ struct st_lsm6dsx_settings {
struct st_lsm6dsx_fs_table_entry fs_table[2]; struct st_lsm6dsx_fs_table_entry fs_table[2];
struct st_lsm6dsx_reg decimator[ST_LSM6DSX_MAX_ID]; struct st_lsm6dsx_reg decimator[ST_LSM6DSX_MAX_ID];
struct st_lsm6dsx_reg batch[ST_LSM6DSX_MAX_ID]; struct st_lsm6dsx_reg batch[ST_LSM6DSX_MAX_ID];
struct st_lsm6dsx_reg lir;
struct st_lsm6dsx_fifo_ops fifo_ops; struct st_lsm6dsx_fifo_ops fifo_ops;
struct st_lsm6dsx_hw_ts_settings ts_settings; struct st_lsm6dsx_hw_ts_settings ts_settings;
struct st_lsm6dsx_shub_settings shub_settings; struct st_lsm6dsx_shub_settings shub_settings;
......
...@@ -237,6 +237,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -237,6 +237,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
.mask = GENMASK(5, 3), .mask = GENMASK(5, 3),
}, },
}, },
.lir = {
.addr = 0x58,
.mask = BIT(0),
},
.fifo_ops = { .fifo_ops = {
.update_fifo = st_lsm6dsx_update_fifo, .update_fifo = st_lsm6dsx_update_fifo,
.read_fifo = st_lsm6dsx_read_fifo, .read_fifo = st_lsm6dsx_read_fifo,
...@@ -349,6 +353,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -349,6 +353,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
.mask = GENMASK(5, 3), .mask = GENMASK(5, 3),
}, },
}, },
.lir = {
.addr = 0x58,
.mask = BIT(0),
},
.fifo_ops = { .fifo_ops = {
.update_fifo = st_lsm6dsx_update_fifo, .update_fifo = st_lsm6dsx_update_fifo,
.read_fifo = st_lsm6dsx_read_fifo, .read_fifo = st_lsm6dsx_read_fifo,
...@@ -470,6 +478,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -470,6 +478,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
.mask = GENMASK(5, 3), .mask = GENMASK(5, 3),
}, },
}, },
.lir = {
.addr = 0x58,
.mask = BIT(0),
},
.fifo_ops = { .fifo_ops = {
.update_fifo = st_lsm6dsx_update_fifo, .update_fifo = st_lsm6dsx_update_fifo,
.read_fifo = st_lsm6dsx_read_fifo, .read_fifo = st_lsm6dsx_read_fifo,
...@@ -585,6 +597,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -585,6 +597,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
.mask = GENMASK(7, 4), .mask = GENMASK(7, 4),
}, },
}, },
.lir = {
.addr = 0x56,
.mask = BIT(0),
},
.fifo_ops = { .fifo_ops = {
.update_fifo = st_lsm6dsx_update_fifo, .update_fifo = st_lsm6dsx_update_fifo,
.read_fifo = st_lsm6dsx_read_tagged_fifo, .read_fifo = st_lsm6dsx_read_tagged_fifo,
...@@ -715,6 +731,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -715,6 +731,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
.mask = GENMASK(7, 4), .mask = GENMASK(7, 4),
}, },
}, },
.lir = {
.addr = 0x56,
.mask = BIT(0),
},
.fifo_ops = { .fifo_ops = {
.update_fifo = st_lsm6dsx_update_fifo, .update_fifo = st_lsm6dsx_update_fifo,
.read_fifo = st_lsm6dsx_read_tagged_fifo, .read_fifo = st_lsm6dsx_read_tagged_fifo,
...@@ -822,6 +842,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -822,6 +842,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
.mask = GENMASK(7, 4), .mask = GENMASK(7, 4),
}, },
}, },
.lir = {
.addr = 0x56,
.mask = BIT(0),
},
.fifo_ops = { .fifo_ops = {
.update_fifo = st_lsm6dsx_update_fifo, .update_fifo = st_lsm6dsx_update_fifo,
.read_fifo = st_lsm6dsx_read_tagged_fifo, .read_fifo = st_lsm6dsx_read_tagged_fifo,
...@@ -1416,6 +1440,17 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) ...@@ -1416,6 +1440,17 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
if (err < 0) if (err < 0)
return err; return err;
/* enable Latched interrupts for device events */
if (hw->settings->lir.addr) {
unsigned int data;
data = ST_LSM6DSX_SHIFT_VAL(1, hw->settings->lir.mask);
err = regmap_update_bits(hw->regmap, hw->settings->lir.addr,
hw->settings->lir.mask, data);
if (err < 0)
return err;
}
err = st_lsm6dsx_init_shub(hw); err = st_lsm6dsx_init_shub(hw);
if (err < 0) if (err < 0)
return err; return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment