]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
iio: imu: st_lsm6dsx: add support to multiple devices with the same settings
authorLorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Sun, 29 Jan 2017 10:49:24 +0000 (11:49 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sat, 4 Feb 2017 12:22:51 +0000 (12:22 +0000)
Add capability to support multiple devices with the same
st_lsm6dsx_settings like LSM6DSM/LSM6DSL

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c

index 69deafe1c10d481bacb1fd7d1c96d3129b1198b5..2c1bb9e58d019dfeafbcf6331733557ebf247da2 100644 (file)
@@ -20,6 +20,7 @@
 enum st_lsm6dsx_hw_id {
        ST_LSM6DS3_ID,
        ST_LSM6DSM_ID,
+       ST_LSM6DSX_MAX_ID,
 };
 
 #define ST_LSM6DSX_CHAN_SIZE           2
@@ -50,7 +51,7 @@ struct st_lsm6dsx_reg {
 struct st_lsm6dsx_settings {
        u8 wai;
        u16 max_fifo_size;
-       enum st_lsm6dsx_hw_id id;
+       enum st_lsm6dsx_hw_id id[ST_LSM6DSX_MAX_ID];
 };
 
 enum st_lsm6dsx_sensor_id {
index c92ddcc190e22a49f10e01be70cf926e301659bf..499e60af8fa7f1876575003d8d4c093dcc8d3391 100644 (file)
 #define ST_LSM6DSX_REG_GYRO_OUT_Y_L_ADDR       0x24
 #define ST_LSM6DSX_REG_GYRO_OUT_Z_L_ADDR       0x26
 
-#define ST_LSM6DS3_WHOAMI                      0x69
-#define ST_LSM6DSM_WHOAMI                      0x6a
-
-#define ST_LSM6DS3_MAX_FIFO_SIZE               8192
-#define ST_LSM6DSM_MAX_FIFO_SIZE               4096
-
 #define ST_LSM6DSX_ACC_FS_2G_GAIN              IIO_G_TO_M_S_2(61)
 #define ST_LSM6DSX_ACC_FS_4G_GAIN              IIO_G_TO_M_S_2(122)
 #define ST_LSM6DSX_ACC_FS_8G_GAIN              IIO_G_TO_M_S_2(244)
@@ -164,14 +158,18 @@ static const struct st_lsm6dsx_fs_table_entry st_lsm6dsx_fs_table[] = {
 
 static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
        {
-               .wai = ST_LSM6DS3_WHOAMI,
-               .max_fifo_size = ST_LSM6DS3_MAX_FIFO_SIZE,
-               .id = ST_LSM6DS3_ID,
+               .wai = 0x69,
+               .max_fifo_size = 8192,
+               .id = {
+                       [0] = ST_LSM6DS3_ID,
+               },
        },
        {
-               .wai = ST_LSM6DSM_WHOAMI,
-               .max_fifo_size = ST_LSM6DSM_MAX_FIFO_SIZE,
-               .id = ST_LSM6DSM_ID,
+               .wai = 0x6a,
+               .max_fifo_size = 4096,
+               .id = {
+                       [0] = ST_LSM6DSM_ID,
+               },
        },
 };
 
@@ -241,11 +239,15 @@ out:
 
 static int st_lsm6dsx_check_whoami(struct st_lsm6dsx_hw *hw, int id)
 {
-       int err, i;
+       int err, i, j;
        u8 data;
 
        for (i = 0; i < ARRAY_SIZE(st_lsm6dsx_sensor_settings); i++) {
-               if (id == st_lsm6dsx_sensor_settings[i].id)
+               for (j = 0; j < ST_LSM6DSX_MAX_ID; j++) {
+                       if (id == st_lsm6dsx_sensor_settings[i].id[j])
+                               break;
+               }
+               if (j < ST_LSM6DSX_MAX_ID)
                        break;
        }