]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
iio: imu: st_lsm6dsx: enable LIR for sensor events
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 11 Sep 2019 06:50:03 +0000 (08:50 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 15 Sep 2019 10:56:25 +0000 (11:56 +0100)
Enable Latched interrupt by default for sensor events

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Tested-by: Sean Nyekjaer <sean@geanix.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c

index 80e42c7dbcbe63039f4d23ed363799c75a1d9698..cb5316488f310f8c3eb0fbef43359f618e8ed030 100644 (file)
@@ -215,6 +215,7 @@ struct st_lsm6dsx_ext_dev_settings {
  * @fs_table: Hw sensors gain table (gain + val).
  * @decimator: List of decimator 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.
  * @ts_settings: Hw timer related settings.
  * @shub_settings: i2c controller related settings.
@@ -237,6 +238,7 @@ struct st_lsm6dsx_settings {
        struct st_lsm6dsx_fs_table_entry fs_table[2];
        struct st_lsm6dsx_reg decimator[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_hw_ts_settings ts_settings;
        struct st_lsm6dsx_shub_settings shub_settings;
index 2d34955601368870cb8ee931600a67146c5bb3e7..a208da865efe982a8c535fbf428e51d1a136872c 100644 (file)
@@ -237,6 +237,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .mask = GENMASK(5, 3),
                        },
                },
+               .lir = {
+                       .addr = 0x58,
+                       .mask = BIT(0),
+               },
                .fifo_ops = {
                        .update_fifo = st_lsm6dsx_update_fifo,
                        .read_fifo = st_lsm6dsx_read_fifo,
@@ -349,6 +353,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .mask = GENMASK(5, 3),
                        },
                },
+               .lir = {
+                       .addr = 0x58,
+                       .mask = BIT(0),
+               },
                .fifo_ops = {
                        .update_fifo = st_lsm6dsx_update_fifo,
                        .read_fifo = st_lsm6dsx_read_fifo,
@@ -470,6 +478,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .mask = GENMASK(5, 3),
                        },
                },
+               .lir = {
+                       .addr = 0x58,
+                       .mask = BIT(0),
+               },
                .fifo_ops = {
                        .update_fifo = st_lsm6dsx_update_fifo,
                        .read_fifo = st_lsm6dsx_read_fifo,
@@ -585,6 +597,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .mask = GENMASK(7, 4),
                        },
                },
+               .lir = {
+                       .addr = 0x56,
+                       .mask = BIT(0),
+               },
                .fifo_ops = {
                        .update_fifo = st_lsm6dsx_update_fifo,
                        .read_fifo = st_lsm6dsx_read_tagged_fifo,
@@ -715,6 +731,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .mask = GENMASK(7, 4),
                        },
                },
+               .lir = {
+                       .addr = 0x56,
+                       .mask = BIT(0),
+               },
                .fifo_ops = {
                        .update_fifo = st_lsm6dsx_update_fifo,
                        .read_fifo = st_lsm6dsx_read_tagged_fifo,
@@ -822,6 +842,10 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .mask = GENMASK(7, 4),
                        },
                },
+               .lir = {
+                       .addr = 0x56,
+                       .mask = BIT(0),
+               },
                .fifo_ops = {
                        .update_fifo = st_lsm6dsx_update_fifo,
                        .read_fifo = st_lsm6dsx_read_tagged_fifo,
@@ -1416,6 +1440,17 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
        if (err < 0)
                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);
        if (err < 0)
                return err;