iio: imu: st_lsm6dsx: export max num of slave devices in st_lsm6dsx_shub_settings
authorLorenzo Bianconi <lorenzo@kernel.org>
Sat, 14 Dec 2019 16:52:54 +0000 (17:52 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 29 Dec 2019 15:20:06 +0000 (15:20 +0000)
Export max number of slave devices supported by the i2c master
controller in st_lsm6dsx_shub_settings data structure.
This is a preliminary patch to support i2c master controller
on lsm6dsm sensors

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
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
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c

index f1189eef6e372c1947d54cb46349c08d1558511d..140e4c6971f37f1bb393b08fb02cb6762ed474f3 100644 (file)
@@ -176,6 +176,7 @@ struct st_lsm6dsx_hw_ts_settings {
  * @pullup_en: i2c controller pull-up register info (addr + mask).
  * @aux_sens: aux sensor register info (addr + mask).
  * @wr_once: write_once register info (addr + mask).
+ * @num_ext_dev: max number of slave devices.
  * @shub_out: sensor hub first output register info.
  * @slv0_addr: slave0 address in secondary page.
  * @dw_slv0_addr: slave0 write register address in secondary page.
@@ -187,6 +188,7 @@ struct st_lsm6dsx_shub_settings {
        struct st_lsm6dsx_reg pullup_en;
        struct st_lsm6dsx_reg aux_sens;
        struct st_lsm6dsx_reg wr_once;
+       u8 num_ext_dev;
        u8 shub_out;
        u8 slv0_addr;
        u8 dw_slv0_addr;
index 95d7eb1d9cdb4c25c4786bcd097267a55cf92bd4..91dc9796add794f1f361c5e1c96168c21522355e 100644 (file)
@@ -883,6 +883,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .addr = 0x14,
                                .mask = BIT(6),
                        },
+                       .num_ext_dev = 3,
                        .shub_out = 0x02,
                        .slv0_addr = 0x15,
                        .dw_slv0_addr = 0x21,
@@ -1257,6 +1258,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
                                .addr = 0x14,
                                .mask = BIT(6),
                        },
+                       .num_ext_dev = 3,
                        .shub_out = 0x02,
                        .slv0_addr = 0x15,
                        .dw_slv0_addr = 0x21,
index fa5d1001a46c91a94cf5b41dd0bae7c5b219563a..5684e663d0aa98ff15d8243fabb4ff00c36a674d 100644 (file)
@@ -30,7 +30,6 @@
 
 #include "st_lsm6dsx.h"
 
-#define ST_LSM6DSX_MAX_SLV_NUM                 3
 #define ST_LSM6DSX_SLV_ADDR(n, base)           ((base) + (n) * 3)
 #define ST_LSM6DSX_SLV_SUB_ADDR(n, base)       ((base) + 1 + (n) * 3)
 #define ST_LSM6DSX_SLV_CONFIG(n, base)         ((base) + 2 + (n) * 3)
@@ -770,7 +769,7 @@ int st_lsm6dsx_shub_probe(struct st_lsm6dsx_hw *hw, const char *name)
                if (err < 0)
                        return err;
 
-               if (++num_ext_dev >= ST_LSM6DSX_MAX_SLV_NUM)
+               if (++num_ext_dev >= hw->settings->shub_settings.num_ext_dev)
                        break;
                id++;
        }