All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit
@ 2019-11-18 10:34 Jean-Baptiste Maneyrol
  2019-11-18 10:34 ` [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support Jean-Baptiste Maneyrol
  2019-11-23 16:18 ` [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit Jonathan Cameron
  0 siblings, 2 replies; 8+ messages in thread
From: Jean-Baptiste Maneyrol @ 2019-11-18 10:34 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, Jean-Baptiste Maneyrol

Temperature should be reported in milli-degrees, not degrees. Fix
scale values to use the correct unit.
Fix round-up offset value for MPU6050 and add the values for
MPU6500 family (different from MPU6050).

Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
---
 drivers/iio/imu/inv_mpu6050/inv_mpu_core.c | 23 +++++++++++-----------
 drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  | 16 +++++++++++----
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index 23c0557891a0..268240644adf 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -117,6 +117,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6050,
 		.config = &chip_config_6050,
 		.fifo_size = 1024,
+		.temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_MPU6500_WHOAMI_VALUE,
@@ -124,6 +125,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6500,
 		.config = &chip_config_6050,
 		.fifo_size = 512,
+		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_MPU6515_WHOAMI_VALUE,
@@ -131,6 +133,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6500,
 		.config = &chip_config_6050,
 		.fifo_size = 512,
+		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_MPU6000_WHOAMI_VALUE,
@@ -138,6 +141,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6050,
 		.config = &chip_config_6050,
 		.fifo_size = 1024,
+		.temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_MPU9150_WHOAMI_VALUE,
@@ -145,6 +149,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6050,
 		.config = &chip_config_6050,
 		.fifo_size = 1024,
+		.temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_MPU9250_WHOAMI_VALUE,
@@ -152,6 +157,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6500,
 		.config = &chip_config_6050,
 		.fifo_size = 512,
+		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_MPU9255_WHOAMI_VALUE,
@@ -159,6 +165,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6500,
 		.config = &chip_config_6050,
 		.fifo_size = 512,
+		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_ICM20608_WHOAMI_VALUE,
@@ -166,6 +173,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_6500,
 		.config = &chip_config_6050,
 		.fifo_size = 512,
+		.temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
 	},
 	{
 		.whoami = INV_ICM20602_WHOAMI_VALUE,
@@ -173,6 +181,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
 		.reg = &reg_set_icm20602,
 		.config = &chip_config_6050,
 		.fifo_size = 1008,
+		.temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
 	},
 };
 
@@ -481,12 +490,8 @@ inv_mpu6050_read_raw(struct iio_dev *indio_dev,
 
 			return IIO_VAL_INT_PLUS_MICRO;
 		case IIO_TEMP:
-			*val = 0;
-			if (st->chip_type == INV_ICM20602)
-				*val2 = INV_ICM20602_TEMP_SCALE;
-			else
-				*val2 = INV_MPU6050_TEMP_SCALE;
-
+			*val = st->hw->temp.scale / 1000000;
+			*val2 = st->hw->temp.scale % 1000000;
 			return IIO_VAL_INT_PLUS_MICRO;
 		case IIO_MAGN:
 			return inv_mpu_magn_get_scale(st, chan, val, val2);
@@ -496,11 +501,7 @@ inv_mpu6050_read_raw(struct iio_dev *indio_dev,
 	case IIO_CHAN_INFO_OFFSET:
 		switch (chan->type) {
 		case IIO_TEMP:
-			if (st->chip_type == INV_ICM20602)
-				*val = INV_ICM20602_TEMP_OFFSET;
-			else
-				*val = INV_MPU6050_TEMP_OFFSET;
-
+			*val = st->hw->temp.offset;
 			return IIO_VAL_INT;
 		default:
 			return -EINVAL;
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
index f1fb7b6bdab1..b096e010d4ee 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
@@ -107,6 +107,7 @@ struct inv_mpu6050_chip_config {
  *  @reg:   register map of the chip.
  *  @config:    configuration of the chip.
  *  @fifo_size:	size of the FIFO in bytes.
+ *  @temp:	offset and scale to apply to raw temperature.
  */
 struct inv_mpu6050_hw {
 	u8 whoami;
@@ -114,6 +115,10 @@ struct inv_mpu6050_hw {
 	const struct inv_mpu6050_reg_map *reg;
 	const struct inv_mpu6050_chip_config *config;
 	size_t fifo_size;
+	struct {
+		int offset;
+		int scale;
+	} temp;
 };
 
 /*
@@ -279,16 +284,19 @@ struct inv_mpu6050_state {
 #define INV_MPU6050_REG_UP_TIME_MIN          5000
 #define INV_MPU6050_REG_UP_TIME_MAX          10000
 
-#define INV_MPU6050_TEMP_OFFSET	             12421
-#define INV_MPU6050_TEMP_SCALE               2941
+#define INV_MPU6050_TEMP_OFFSET	             12420
+#define INV_MPU6050_TEMP_SCALE               2941176
 #define INV_MPU6050_MAX_GYRO_FS_PARAM        3
 #define INV_MPU6050_MAX_ACCL_FS_PARAM        3
 #define INV_MPU6050_THREE_AXIS               3
 #define INV_MPU6050_GYRO_CONFIG_FSR_SHIFT    3
 #define INV_MPU6050_ACCL_CONFIG_FSR_SHIFT    3
 
-#define INV_ICM20602_TEMP_OFFSET	     8170
-#define INV_ICM20602_TEMP_SCALE		     3060
+#define INV_MPU6500_TEMP_OFFSET              7011
+#define INV_MPU6500_TEMP_SCALE               2995178
+
+#define INV_ICM20608_TEMP_OFFSET	     8170
+#define INV_ICM20608_TEMP_SCALE		     3059976
 
 /* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */
 #define INV_MPU6050_OUTPUT_DATA_SIZE         32
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
  2019-11-18 10:34 [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit Jean-Baptiste Maneyrol
@ 2019-11-18 10:34 ` Jean-Baptiste Maneyrol
  2019-11-23 16:22   ` Jonathan Cameron
  2019-11-23 16:18 ` [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit Jonathan Cameron
  1 sibling, 1 reply; 8+ messages in thread
From: Jean-Baptiste Maneyrol @ 2019-11-18 10:34 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, Jean-Baptiste Maneyrol

Add support of temperature data in fifo for all chips.
Enable unification of scan elements for icm20602.
Add macros for generating scan elements with and without temp.

Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
---
 drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    | 194 +++++++-----------
 drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h     |  22 +-
 drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    |   6 +-
 drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c |   3 +
 4 files changed, 84 insertions(+), 141 deletions(-)

diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index 268240644adf..7c2f6951364d 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -104,6 +104,7 @@ static const struct inv_mpu6050_chip_config chip_config_6050 = {
 	.divider = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE),
 	.gyro_fifo_enable = false,
 	.accl_fifo_enable = false,
+	.temp_fifo_enable = false,
 	.magn_fifo_enable = false,
 	.accl_fs = INV_MPU6050_FS_02G,
 	.user_ctrl = 0,
@@ -856,19 +857,27 @@ static const struct iio_chan_spec_ext_info inv_ext_info[] = {
 		.ext_info = inv_ext_info,                             \
 	}
 
+#define INV_MPU6050_TEMP_CHAN(_index)				\
+	{							\
+		.type = IIO_TEMP,				\
+		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)	\
+				| BIT(IIO_CHAN_INFO_OFFSET)	\
+				| BIT(IIO_CHAN_INFO_SCALE),	\
+		.scan_index = _index,				\
+		.scan_type = {					\
+			.sign = 's',				\
+			.realbits = 16,				\
+			.storagebits = 16,			\
+			.shift = 0,				\
+			.endianness = IIO_BE,			\
+		},						\
+	}
+
 static const struct iio_chan_spec inv_mpu_channels[] = {
 	IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),
-	/*
-	 * Note that temperature should only be via polled reading only,
-	 * not the final scan elements output.
-	 */
-	{
-		.type = IIO_TEMP,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
-				| BIT(IIO_CHAN_INFO_OFFSET)
-				| BIT(IIO_CHAN_INFO_SCALE),
-		.scan_index = -1,
-	},
+
+	INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),
+
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),
@@ -878,22 +887,31 @@ static const struct iio_chan_spec inv_mpu_channels[] = {
 	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z),
 };
 
+#define INV_MPU6050_SCAN_MASK_3AXIS_ACCEL	\
+	(BIT(INV_MPU6050_SCAN_ACCL_X)		\
+	| BIT(INV_MPU6050_SCAN_ACCL_Y)		\
+	| BIT(INV_MPU6050_SCAN_ACCL_Z))
+
+#define INV_MPU6050_SCAN_MASK_3AXIS_GYRO	\
+	(BIT(INV_MPU6050_SCAN_GYRO_X)		\
+	| BIT(INV_MPU6050_SCAN_GYRO_Y)		\
+	| BIT(INV_MPU6050_SCAN_GYRO_Z))
+
+#define INV_MPU6050_SCAN_MASK_TEMP		(BIT(INV_MPU6050_SCAN_TEMP))
+
+/* generate scan mask and a duplicate with temperature enabled */
+#define INV_MPU6050_SCAN_MASK_DUP_TEMP(_mask)	\
+	(_mask),				\
+	(_mask) | INV_MPU6050_SCAN_MASK_TEMP
+
 static const unsigned long inv_mpu_scan_masks[] = {
 	/* 3-axis accel */
-	BIT(INV_MPU6050_SCAN_ACCL_X)
-		| BIT(INV_MPU6050_SCAN_ACCL_Y)
-		| BIT(INV_MPU6050_SCAN_ACCL_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),
 	/* 3-axis gyro */
-	BIT(INV_MPU6050_SCAN_GYRO_X)
-		| BIT(INV_MPU6050_SCAN_GYRO_Y)
-		| BIT(INV_MPU6050_SCAN_GYRO_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
 	/* 6-axis accel + gyro */
-	BIT(INV_MPU6050_SCAN_ACCL_X)
-		| BIT(INV_MPU6050_SCAN_ACCL_Y)
-		| BIT(INV_MPU6050_SCAN_ACCL_Z)
-		| BIT(INV_MPU6050_SCAN_GYRO_X)
-		| BIT(INV_MPU6050_SCAN_GYRO_Y)
-		| BIT(INV_MPU6050_SCAN_GYRO_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
+			| INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
 	0,
 };
 
@@ -917,17 +935,9 @@ static const unsigned long inv_mpu_scan_masks[] = {
 
 static const struct iio_chan_spec inv_mpu9150_channels[] = {
 	IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),
-	/*
-	 * Note that temperature should only be via polled reading only,
-	 * not the final scan elements output.
-	 */
-	{
-		.type = IIO_TEMP,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
-				| BIT(IIO_CHAN_INFO_OFFSET)
-				| BIT(IIO_CHAN_INFO_SCALE),
-		.scan_index = -1,
-	},
+
+	INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),
+
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),
@@ -944,17 +954,9 @@ static const struct iio_chan_spec inv_mpu9150_channels[] = {
 
 static const struct iio_chan_spec inv_mpu9250_channels[] = {
 	IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),
-	/*
-	 * Note that temperature should only be via polled reading only,
-	 * not the final scan elements output.
-	 */
-	{
-		.type = IIO_TEMP,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
-				| BIT(IIO_CHAN_INFO_OFFSET)
-				| BIT(IIO_CHAN_INFO_SCALE),
-		.scan_index = -1,
-	},
+
+	INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),
+
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),
 	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),
@@ -969,98 +971,42 @@ static const struct iio_chan_spec inv_mpu9250_channels[] = {
 	INV_MPU9X50_MAGN_CHAN(IIO_MOD_Z, 16, INV_MPU9X50_SCAN_MAGN_Z),
 };
 
+#define INV_MPU9X50_SCAN_MASK_3AXIS_MAGN	\
+	(BIT(INV_MPU9X50_SCAN_MAGN_X)		\
+	| BIT(INV_MPU9X50_SCAN_MAGN_Y)		\
+	| BIT(INV_MPU9X50_SCAN_MAGN_Z))
+
 static const unsigned long inv_mpu9x50_scan_masks[] = {
 	/* 3-axis accel */
-	BIT(INV_MPU6050_SCAN_ACCL_X)
-		| BIT(INV_MPU6050_SCAN_ACCL_Y)
-		| BIT(INV_MPU6050_SCAN_ACCL_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),
 	/* 3-axis gyro */
-	BIT(INV_MPU6050_SCAN_GYRO_X)
-		| BIT(INV_MPU6050_SCAN_GYRO_Y)
-		| BIT(INV_MPU6050_SCAN_GYRO_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
 	/* 3-axis magn */
-	BIT(INV_MPU9X50_SCAN_MAGN_X)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
 	/* 6-axis accel + gyro */
-	BIT(INV_MPU6050_SCAN_ACCL_X)
-		| BIT(INV_MPU6050_SCAN_ACCL_Y)
-		| BIT(INV_MPU6050_SCAN_ACCL_Z)
-		| BIT(INV_MPU6050_SCAN_GYRO_X)
-		| BIT(INV_MPU6050_SCAN_GYRO_Y)
-		| BIT(INV_MPU6050_SCAN_GYRO_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
+			| INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
 	/* 6-axis accel + magn */
-	BIT(INV_MPU6050_SCAN_ACCL_X)
-		| BIT(INV_MPU6050_SCAN_ACCL_Y)
-		| BIT(INV_MPU6050_SCAN_ACCL_Z)
-		| BIT(INV_MPU9X50_SCAN_MAGN_X)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
+			| INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
 	/* 6-axis gyro + magn */
-	BIT(INV_MPU6050_SCAN_GYRO_X)
-		| BIT(INV_MPU6050_SCAN_GYRO_Y)
-		| BIT(INV_MPU6050_SCAN_GYRO_Z)
-		| BIT(INV_MPU9X50_SCAN_MAGN_X)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO
+			| INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
 	/* 9-axis accel + gyro + magn */
-	BIT(INV_MPU6050_SCAN_ACCL_X)
-		| BIT(INV_MPU6050_SCAN_ACCL_Y)
-		| BIT(INV_MPU6050_SCAN_ACCL_Z)
-		| BIT(INV_MPU6050_SCAN_GYRO_X)
-		| BIT(INV_MPU6050_SCAN_GYRO_Y)
-		| BIT(INV_MPU6050_SCAN_GYRO_Z)
-		| BIT(INV_MPU9X50_SCAN_MAGN_X)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
-		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
+	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
+			| INV_MPU6050_SCAN_MASK_3AXIS_GYRO
+			| INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
 	0,
 };
 
-static const struct iio_chan_spec inv_icm20602_channels[] = {
-	IIO_CHAN_SOFT_TIMESTAMP(INV_ICM20602_SCAN_TIMESTAMP),
-	{
-		.type = IIO_TEMP,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
-				| BIT(IIO_CHAN_INFO_OFFSET)
-				| BIT(IIO_CHAN_INFO_SCALE),
-		.scan_index = INV_ICM20602_SCAN_TEMP,
-		.scan_type = {
-				.sign = 's',
-				.realbits = 16,
-				.storagebits = 16,
-				.shift = 0,
-				.endianness = IIO_BE,
-			     },
-	},
-
-	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_ICM20602_SCAN_GYRO_X),
-	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_ICM20602_SCAN_GYRO_Y),
-	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_ICM20602_SCAN_GYRO_Z),
-
-	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Y, INV_ICM20602_SCAN_ACCL_Y),
-	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_X, INV_ICM20602_SCAN_ACCL_X),
-	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_ICM20602_SCAN_ACCL_Z),
-};
-
 static const unsigned long inv_icm20602_scan_masks[] = {
 	/* 3-axis accel + temp (mandatory) */
-	BIT(INV_ICM20602_SCAN_ACCL_X)
-		| BIT(INV_ICM20602_SCAN_ACCL_Y)
-		| BIT(INV_ICM20602_SCAN_ACCL_Z)
-		| BIT(INV_ICM20602_SCAN_TEMP),
+	INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_TEMP,
 	/* 3-axis gyro + temp (mandatory) */
-	BIT(INV_ICM20602_SCAN_GYRO_X)
-		| BIT(INV_ICM20602_SCAN_GYRO_Y)
-		| BIT(INV_ICM20602_SCAN_GYRO_Z)
-		| BIT(INV_ICM20602_SCAN_TEMP),
+	INV_MPU6050_SCAN_MASK_3AXIS_GYRO | INV_MPU6050_SCAN_MASK_TEMP,
 	/* 6-axis accel + gyro + temp (mandatory) */
-	BIT(INV_ICM20602_SCAN_ACCL_X)
-		| BIT(INV_ICM20602_SCAN_ACCL_Y)
-		| BIT(INV_ICM20602_SCAN_ACCL_Z)
-		| BIT(INV_ICM20602_SCAN_GYRO_X)
-		| BIT(INV_ICM20602_SCAN_GYRO_Y)
-		| BIT(INV_ICM20602_SCAN_GYRO_Z)
-		| BIT(INV_ICM20602_SCAN_TEMP),
+	INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_3AXIS_GYRO
+			| INV_MPU6050_SCAN_MASK_TEMP,
 	0,
 };
 
@@ -1363,8 +1309,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,
 		indio_dev->available_scan_masks = inv_mpu9x50_scan_masks;
 		break;
 	case INV_ICM20602:
-		indio_dev->channels = inv_icm20602_channels;
-		indio_dev->num_channels = ARRAY_SIZE(inv_icm20602_channels);
+		indio_dev->channels = inv_mpu_channels;
+		indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels);
 		indio_dev->available_scan_masks = inv_icm20602_scan_masks;
 		break;
 	default:
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
index b096e010d4ee..6158fca7f70e 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
@@ -86,6 +86,7 @@ enum inv_devices {
  *  @accl_fs:		accel full scale range.
  *  @accl_fifo_enable:	enable accel data output
  *  @gyro_fifo_enable:	enable gyro data output
+ *  @temp_fifo_enable:	enable temp data output
  *  @magn_fifo_enable:	enable magn data output
  *  @divider:		chip sample rate divider (sample rate divider - 1)
  */
@@ -95,6 +96,7 @@ struct inv_mpu6050_chip_config {
 	unsigned int accl_fs:2;
 	unsigned int accl_fifo_enable:1;
 	unsigned int gyro_fifo_enable:1;
+	unsigned int temp_fifo_enable:1;
 	unsigned int magn_fifo_enable:1;
 	u8 divider;
 	u8 user_ctrl;
@@ -184,6 +186,7 @@ struct inv_mpu6050_state {
 #define INV_MPU6050_BIT_SLAVE_2             0x04
 #define INV_MPU6050_BIT_ACCEL_OUT           0x08
 #define INV_MPU6050_BITS_GYRO_OUT           0x70
+#define INV_MPU6050_BIT_TEMP_OUT            0x80
 
 #define INV_MPU6050_REG_I2C_MST_CTRL        0x24
 #define INV_MPU6050_BITS_I2C_MST_CLK_400KHZ 0x0D
@@ -268,8 +271,8 @@ struct inv_mpu6050_state {
 /* MPU9X50 9-axis magnetometer */
 #define INV_MPU9X50_BYTES_MAGN               7
 
-/* ICM20602 FIFO samples include temperature readings */
-#define INV_ICM20602_BYTES_PER_TEMP_SENSOR   2
+/* FIFO temperature sample size */
+#define INV_MPU6050_BYTES_PER_TEMP_SENSOR   2
 
 /* mpu6500 registers */
 #define INV_MPU6500_REG_ACCEL_CONFIG_2      0x1D
@@ -298,7 +301,7 @@ struct inv_mpu6050_state {
 #define INV_ICM20608_TEMP_OFFSET	     8170
 #define INV_ICM20608_TEMP_SCALE		     3059976
 
-/* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */
+/* 6 + 6 + 2 + 7 (for MPU9x50) = 21 round up to 24 and plus 8 */
 #define INV_MPU6050_OUTPUT_DATA_SIZE         32
 
 #define INV_MPU6050_REG_INT_PIN_CFG	0x37
@@ -344,6 +347,7 @@ enum inv_mpu6050_scan {
 	INV_MPU6050_SCAN_ACCL_X,
 	INV_MPU6050_SCAN_ACCL_Y,
 	INV_MPU6050_SCAN_ACCL_Z,
+	INV_MPU6050_SCAN_TEMP,
 	INV_MPU6050_SCAN_GYRO_X,
 	INV_MPU6050_SCAN_GYRO_Y,
 	INV_MPU6050_SCAN_GYRO_Z,
@@ -355,18 +359,6 @@ enum inv_mpu6050_scan {
 	INV_MPU9X50_SCAN_TIMESTAMP,
 };
 
-/* scan element definition for ICM20602, which includes temperature */
-enum inv_icm20602_scan {
-	INV_ICM20602_SCAN_ACCL_X,
-	INV_ICM20602_SCAN_ACCL_Y,
-	INV_ICM20602_SCAN_ACCL_Z,
-	INV_ICM20602_SCAN_TEMP,
-	INV_ICM20602_SCAN_GYRO_X,
-	INV_ICM20602_SCAN_GYRO_Y,
-	INV_ICM20602_SCAN_GYRO_Z,
-	INV_ICM20602_SCAN_TIMESTAMP,
-};
-
 enum inv_mpu6050_filter_e {
 	INV_MPU6050_FILTER_256HZ_NOLPF2 = 0,
 	INV_MPU6050_FILTER_188HZ,
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
index 10d16ec5104b..3755577dc449 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
@@ -142,6 +142,8 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
 		d |= INV_MPU6050_BITS_GYRO_OUT;
 	if (st->chip_config.accl_fifo_enable)
 		d |= INV_MPU6050_BIT_ACCEL_OUT;
+	if (st->chip_config.temp_fifo_enable)
+		d |= INV_MPU6050_BIT_TEMP_OUT;
 	if (st->chip_config.magn_fifo_enable)
 		d |= INV_MPU6050_BIT_SLAVE_0;
 	result = regmap_write(st->map, st->reg->fifo_en, d);
@@ -200,8 +202,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
 	if (st->chip_config.gyro_fifo_enable)
 		bytes_per_datum += INV_MPU6050_BYTES_PER_3AXIS_SENSOR;
 
-	if (st->chip_type == INV_ICM20602)
-		bytes_per_datum += INV_ICM20602_BYTES_PER_TEMP_SENSOR;
+	if (st->chip_config.temp_fifo_enable)
+		bytes_per_datum += INV_MPU6050_BYTES_PER_TEMP_SENSOR;
 
 	if (st->chip_config.magn_fifo_enable)
 		bytes_per_datum += INV_MPU9X50_BYTES_MAGN;
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
index a9c75bc62f18..5199fe790c30 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
@@ -24,6 +24,9 @@ static void inv_scan_query_mpu6050(struct iio_dev *indio_dev)
 			 indio_dev->active_scan_mask) ||
 		test_bit(INV_MPU6050_SCAN_ACCL_Z,
 			 indio_dev->active_scan_mask);
+
+	st->chip_config.temp_fifo_enable =
+		test_bit(INV_MPU6050_SCAN_TEMP, indio_dev->active_scan_mask);
 }
 
 static void inv_scan_query_mpu9x50(struct iio_dev *indio_dev)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit
  2019-11-18 10:34 [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit Jean-Baptiste Maneyrol
  2019-11-18 10:34 ` [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support Jean-Baptiste Maneyrol
@ 2019-11-23 16:18 ` Jonathan Cameron
  1 sibling, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2019-11-23 16:18 UTC (permalink / raw)
  To: Jean-Baptiste Maneyrol; +Cc: linux-iio

On Mon, 18 Nov 2019 11:34:05 +0100
Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> wrote:

> Temperature should be reported in milli-degrees, not degrees. Fix
> scale values to use the correct unit.
> Fix round-up offset value for MPU6050 and add the values for
> MPU6500 family (different from MPU6050).
> 
> Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
Hi.

This is combining several different things, but I can see that it
isn't easy to separate them out so I'll take it as is.

However, we need some information on how to backport this?
I'm guessing it won't be clean to do as the different parts
were added over time.  Perhaps a fixes tag for now to the latest
change that affects this code, then look at backporting relevant
parts by hand.

Thanks,

Jonathan


> ---
>  drivers/iio/imu/inv_mpu6050/inv_mpu_core.c | 23 +++++++++++-----------
>  drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  | 16 +++++++++++----
>  2 files changed, 24 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
> index 23c0557891a0..268240644adf 100644
> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
> @@ -117,6 +117,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6050,
>  		.config = &chip_config_6050,
>  		.fifo_size = 1024,
> +		.temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_MPU6500_WHOAMI_VALUE,
> @@ -124,6 +125,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6500,
>  		.config = &chip_config_6050,
>  		.fifo_size = 512,
> +		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_MPU6515_WHOAMI_VALUE,
> @@ -131,6 +133,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6500,
>  		.config = &chip_config_6050,
>  		.fifo_size = 512,
> +		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_MPU6000_WHOAMI_VALUE,
> @@ -138,6 +141,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6050,
>  		.config = &chip_config_6050,
>  		.fifo_size = 1024,
> +		.temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_MPU9150_WHOAMI_VALUE,
> @@ -145,6 +149,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6050,
>  		.config = &chip_config_6050,
>  		.fifo_size = 1024,
> +		.temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_MPU9250_WHOAMI_VALUE,
> @@ -152,6 +157,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6500,
>  		.config = &chip_config_6050,
>  		.fifo_size = 512,
> +		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_MPU9255_WHOAMI_VALUE,
> @@ -159,6 +165,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6500,
>  		.config = &chip_config_6050,
>  		.fifo_size = 512,
> +		.temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_ICM20608_WHOAMI_VALUE,
> @@ -166,6 +173,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_6500,
>  		.config = &chip_config_6050,
>  		.fifo_size = 512,
> +		.temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
>  	},
>  	{
>  		.whoami = INV_ICM20602_WHOAMI_VALUE,
> @@ -173,6 +181,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
>  		.reg = &reg_set_icm20602,
>  		.config = &chip_config_6050,
>  		.fifo_size = 1008,
> +		.temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
>  	},
>  };
>  
> @@ -481,12 +490,8 @@ inv_mpu6050_read_raw(struct iio_dev *indio_dev,
>  
>  			return IIO_VAL_INT_PLUS_MICRO;
>  		case IIO_TEMP:
> -			*val = 0;
> -			if (st->chip_type == INV_ICM20602)
> -				*val2 = INV_ICM20602_TEMP_SCALE;
> -			else
> -				*val2 = INV_MPU6050_TEMP_SCALE;
> -
> +			*val = st->hw->temp.scale / 1000000;
> +			*val2 = st->hw->temp.scale % 1000000;
>  			return IIO_VAL_INT_PLUS_MICRO;
>  		case IIO_MAGN:
>  			return inv_mpu_magn_get_scale(st, chan, val, val2);
> @@ -496,11 +501,7 @@ inv_mpu6050_read_raw(struct iio_dev *indio_dev,
>  	case IIO_CHAN_INFO_OFFSET:
>  		switch (chan->type) {
>  		case IIO_TEMP:
> -			if (st->chip_type == INV_ICM20602)
> -				*val = INV_ICM20602_TEMP_OFFSET;
> -			else
> -				*val = INV_MPU6050_TEMP_OFFSET;
> -
> +			*val = st->hw->temp.offset;
>  			return IIO_VAL_INT;
>  		default:
>  			return -EINVAL;
> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
> index f1fb7b6bdab1..b096e010d4ee 100644
> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
> @@ -107,6 +107,7 @@ struct inv_mpu6050_chip_config {
>   *  @reg:   register map of the chip.
>   *  @config:    configuration of the chip.
>   *  @fifo_size:	size of the FIFO in bytes.
> + *  @temp:	offset and scale to apply to raw temperature.
>   */
>  struct inv_mpu6050_hw {
>  	u8 whoami;
> @@ -114,6 +115,10 @@ struct inv_mpu6050_hw {
>  	const struct inv_mpu6050_reg_map *reg;
>  	const struct inv_mpu6050_chip_config *config;
>  	size_t fifo_size;
> +	struct {
> +		int offset;
> +		int scale;
> +	} temp;
>  };
>  
>  /*
> @@ -279,16 +284,19 @@ struct inv_mpu6050_state {
>  #define INV_MPU6050_REG_UP_TIME_MIN          5000
>  #define INV_MPU6050_REG_UP_TIME_MAX          10000
>  
> -#define INV_MPU6050_TEMP_OFFSET	             12421
> -#define INV_MPU6050_TEMP_SCALE               2941
> +#define INV_MPU6050_TEMP_OFFSET	             12420
> +#define INV_MPU6050_TEMP_SCALE               2941176
>  #define INV_MPU6050_MAX_GYRO_FS_PARAM        3
>  #define INV_MPU6050_MAX_ACCL_FS_PARAM        3
>  #define INV_MPU6050_THREE_AXIS               3
>  #define INV_MPU6050_GYRO_CONFIG_FSR_SHIFT    3
>  #define INV_MPU6050_ACCL_CONFIG_FSR_SHIFT    3
>  
> -#define INV_ICM20602_TEMP_OFFSET	     8170
> -#define INV_ICM20602_TEMP_SCALE		     3060
> +#define INV_MPU6500_TEMP_OFFSET              7011
> +#define INV_MPU6500_TEMP_SCALE               2995178
> +
> +#define INV_ICM20608_TEMP_OFFSET	     8170
> +#define INV_ICM20608_TEMP_SCALE		     3059976
>  
>  /* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */
>  #define INV_MPU6050_OUTPUT_DATA_SIZE         32


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
  2019-11-18 10:34 ` [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support Jean-Baptiste Maneyrol
@ 2019-11-23 16:22   ` Jonathan Cameron
       [not found]     ` <MN2PR12MB33739BF5EA2C9E402EDF4684C4430@MN2PR12MB3373.namprd12.prod.outlook.com>
  0 siblings, 1 reply; 8+ messages in thread
From: Jonathan Cameron @ 2019-11-23 16:22 UTC (permalink / raw)
  To: Jean-Baptiste Maneyrol; +Cc: linux-iio

On Mon, 18 Nov 2019 11:34:06 +0100
Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> wrote:

> Add support of temperature data in fifo for all chips.
> Enable unification of scan elements for icm20602.
> Add macros for generating scan elements with and without temp.
> 
> Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
Looks fine to me. I'll pick up once we've worked out what
we are doing with patch 1.

Remind me if I seem to have lost it.

Thanks,

Jonathan

> ---
>  drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    | 194 +++++++-----------
>  drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h     |  22 +-
>  drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    |   6 +-
>  drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c |   3 +
>  4 files changed, 84 insertions(+), 141 deletions(-)
> 
> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
> index 268240644adf..7c2f6951364d 100644
> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
> @@ -104,6 +104,7 @@ static const struct inv_mpu6050_chip_config chip_config_6050 = {
>  	.divider = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE),
>  	.gyro_fifo_enable = false,
>  	.accl_fifo_enable = false,
> +	.temp_fifo_enable = false,
>  	.magn_fifo_enable = false,
>  	.accl_fs = INV_MPU6050_FS_02G,
>  	.user_ctrl = 0,
> @@ -856,19 +857,27 @@ static const struct iio_chan_spec_ext_info inv_ext_info[] = {
>  		.ext_info = inv_ext_info,                             \
>  	}
>  
> +#define INV_MPU6050_TEMP_CHAN(_index)				\
> +	{							\
> +		.type = IIO_TEMP,				\
> +		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)	\
> +				| BIT(IIO_CHAN_INFO_OFFSET)	\
> +				| BIT(IIO_CHAN_INFO_SCALE),	\
> +		.scan_index = _index,				\
> +		.scan_type = {					\
> +			.sign = 's',				\
> +			.realbits = 16,				\
> +			.storagebits = 16,			\
> +			.shift = 0,				\
> +			.endianness = IIO_BE,			\
> +		},						\
> +	}
> +
>  static const struct iio_chan_spec inv_mpu_channels[] = {
>  	IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),
> -	/*
> -	 * Note that temperature should only be via polled reading only,
> -	 * not the final scan elements output.
> -	 */
> -	{
> -		.type = IIO_TEMP,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
> -				| BIT(IIO_CHAN_INFO_OFFSET)
> -				| BIT(IIO_CHAN_INFO_SCALE),
> -		.scan_index = -1,
> -	},
> +
> +	INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),
> +
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),
> @@ -878,22 +887,31 @@ static const struct iio_chan_spec inv_mpu_channels[] = {
>  	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z),
>  };
>  
> +#define INV_MPU6050_SCAN_MASK_3AXIS_ACCEL	\
> +	(BIT(INV_MPU6050_SCAN_ACCL_X)		\
> +	| BIT(INV_MPU6050_SCAN_ACCL_Y)		\
> +	| BIT(INV_MPU6050_SCAN_ACCL_Z))
> +
> +#define INV_MPU6050_SCAN_MASK_3AXIS_GYRO	\
> +	(BIT(INV_MPU6050_SCAN_GYRO_X)		\
> +	| BIT(INV_MPU6050_SCAN_GYRO_Y)		\
> +	| BIT(INV_MPU6050_SCAN_GYRO_Z))
> +
> +#define INV_MPU6050_SCAN_MASK_TEMP		(BIT(INV_MPU6050_SCAN_TEMP))
> +
> +/* generate scan mask and a duplicate with temperature enabled */
> +#define INV_MPU6050_SCAN_MASK_DUP_TEMP(_mask)	\
> +	(_mask),				\
> +	(_mask) | INV_MPU6050_SCAN_MASK_TEMP
> +
>  static const unsigned long inv_mpu_scan_masks[] = {
>  	/* 3-axis accel */
> -	BIT(INV_MPU6050_SCAN_ACCL_X)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Y)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),
>  	/* 3-axis gyro */
> -	BIT(INV_MPU6050_SCAN_GYRO_X)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Y)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
>  	/* 6-axis accel + gyro */
> -	BIT(INV_MPU6050_SCAN_ACCL_X)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Y)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Z)
> -		| BIT(INV_MPU6050_SCAN_GYRO_X)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Y)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
> +			| INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
>  	0,
>  };
>  
> @@ -917,17 +935,9 @@ static const unsigned long inv_mpu_scan_masks[] = {
>  
>  static const struct iio_chan_spec inv_mpu9150_channels[] = {
>  	IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),
> -	/*
> -	 * Note that temperature should only be via polled reading only,
> -	 * not the final scan elements output.
> -	 */
> -	{
> -		.type = IIO_TEMP,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
> -				| BIT(IIO_CHAN_INFO_OFFSET)
> -				| BIT(IIO_CHAN_INFO_SCALE),
> -		.scan_index = -1,
> -	},
> +
> +	INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),
> +
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),
> @@ -944,17 +954,9 @@ static const struct iio_chan_spec inv_mpu9150_channels[] = {
>  
>  static const struct iio_chan_spec inv_mpu9250_channels[] = {
>  	IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),
> -	/*
> -	 * Note that temperature should only be via polled reading only,
> -	 * not the final scan elements output.
> -	 */
> -	{
> -		.type = IIO_TEMP,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
> -				| BIT(IIO_CHAN_INFO_OFFSET)
> -				| BIT(IIO_CHAN_INFO_SCALE),
> -		.scan_index = -1,
> -	},
> +
> +	INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),
> +
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),
>  	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),
> @@ -969,98 +971,42 @@ static const struct iio_chan_spec inv_mpu9250_channels[] = {
>  	INV_MPU9X50_MAGN_CHAN(IIO_MOD_Z, 16, INV_MPU9X50_SCAN_MAGN_Z),
>  };
>  
> +#define INV_MPU9X50_SCAN_MASK_3AXIS_MAGN	\
> +	(BIT(INV_MPU9X50_SCAN_MAGN_X)		\
> +	| BIT(INV_MPU9X50_SCAN_MAGN_Y)		\
> +	| BIT(INV_MPU9X50_SCAN_MAGN_Z))
> +
>  static const unsigned long inv_mpu9x50_scan_masks[] = {
>  	/* 3-axis accel */
> -	BIT(INV_MPU6050_SCAN_ACCL_X)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Y)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),
>  	/* 3-axis gyro */
> -	BIT(INV_MPU6050_SCAN_GYRO_X)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Y)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
>  	/* 3-axis magn */
> -	BIT(INV_MPU9X50_SCAN_MAGN_X)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
>  	/* 6-axis accel + gyro */
> -	BIT(INV_MPU6050_SCAN_ACCL_X)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Y)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Z)
> -		| BIT(INV_MPU6050_SCAN_GYRO_X)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Y)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
> +			| INV_MPU6050_SCAN_MASK_3AXIS_GYRO),
>  	/* 6-axis accel + magn */
> -	BIT(INV_MPU6050_SCAN_ACCL_X)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Y)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Z)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_X)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
> +			| INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
>  	/* 6-axis gyro + magn */
> -	BIT(INV_MPU6050_SCAN_GYRO_X)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Y)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Z)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_X)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO
> +			| INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
>  	/* 9-axis accel + gyro + magn */
> -	BIT(INV_MPU6050_SCAN_ACCL_X)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Y)
> -		| BIT(INV_MPU6050_SCAN_ACCL_Z)
> -		| BIT(INV_MPU6050_SCAN_GYRO_X)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Y)
> -		| BIT(INV_MPU6050_SCAN_GYRO_Z)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_X)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Y)
> -		| BIT(INV_MPU9X50_SCAN_MAGN_Z),
> +	INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL
> +			| INV_MPU6050_SCAN_MASK_3AXIS_GYRO
> +			| INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),
>  	0,
>  };
>  
> -static const struct iio_chan_spec inv_icm20602_channels[] = {
> -	IIO_CHAN_SOFT_TIMESTAMP(INV_ICM20602_SCAN_TIMESTAMP),
> -	{
> -		.type = IIO_TEMP,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
> -				| BIT(IIO_CHAN_INFO_OFFSET)
> -				| BIT(IIO_CHAN_INFO_SCALE),
> -		.scan_index = INV_ICM20602_SCAN_TEMP,
> -		.scan_type = {
> -				.sign = 's',
> -				.realbits = 16,
> -				.storagebits = 16,
> -				.shift = 0,
> -				.endianness = IIO_BE,
> -			     },
> -	},
> -
> -	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_ICM20602_SCAN_GYRO_X),
> -	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_ICM20602_SCAN_GYRO_Y),
> -	INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_ICM20602_SCAN_GYRO_Z),
> -
> -	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Y, INV_ICM20602_SCAN_ACCL_Y),
> -	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_X, INV_ICM20602_SCAN_ACCL_X),
> -	INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_ICM20602_SCAN_ACCL_Z),
> -};
> -
>  static const unsigned long inv_icm20602_scan_masks[] = {
>  	/* 3-axis accel + temp (mandatory) */
> -	BIT(INV_ICM20602_SCAN_ACCL_X)
> -		| BIT(INV_ICM20602_SCAN_ACCL_Y)
> -		| BIT(INV_ICM20602_SCAN_ACCL_Z)
> -		| BIT(INV_ICM20602_SCAN_TEMP),
> +	INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_TEMP,
>  	/* 3-axis gyro + temp (mandatory) */
> -	BIT(INV_ICM20602_SCAN_GYRO_X)
> -		| BIT(INV_ICM20602_SCAN_GYRO_Y)
> -		| BIT(INV_ICM20602_SCAN_GYRO_Z)
> -		| BIT(INV_ICM20602_SCAN_TEMP),
> +	INV_MPU6050_SCAN_MASK_3AXIS_GYRO | INV_MPU6050_SCAN_MASK_TEMP,
>  	/* 6-axis accel + gyro + temp (mandatory) */
> -	BIT(INV_ICM20602_SCAN_ACCL_X)
> -		| BIT(INV_ICM20602_SCAN_ACCL_Y)
> -		| BIT(INV_ICM20602_SCAN_ACCL_Z)
> -		| BIT(INV_ICM20602_SCAN_GYRO_X)
> -		| BIT(INV_ICM20602_SCAN_GYRO_Y)
> -		| BIT(INV_ICM20602_SCAN_GYRO_Z)
> -		| BIT(INV_ICM20602_SCAN_TEMP),
> +	INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_3AXIS_GYRO
> +			| INV_MPU6050_SCAN_MASK_TEMP,
>  	0,
>  };
>  
> @@ -1363,8 +1309,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,
>  		indio_dev->available_scan_masks = inv_mpu9x50_scan_masks;
>  		break;
>  	case INV_ICM20602:
> -		indio_dev->channels = inv_icm20602_channels;
> -		indio_dev->num_channels = ARRAY_SIZE(inv_icm20602_channels);
> +		indio_dev->channels = inv_mpu_channels;
> +		indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels);
>  		indio_dev->available_scan_masks = inv_icm20602_scan_masks;
>  		break;
>  	default:
> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
> index b096e010d4ee..6158fca7f70e 100644
> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
> @@ -86,6 +86,7 @@ enum inv_devices {
>   *  @accl_fs:		accel full scale range.
>   *  @accl_fifo_enable:	enable accel data output
>   *  @gyro_fifo_enable:	enable gyro data output
> + *  @temp_fifo_enable:	enable temp data output
>   *  @magn_fifo_enable:	enable magn data output
>   *  @divider:		chip sample rate divider (sample rate divider - 1)
>   */
> @@ -95,6 +96,7 @@ struct inv_mpu6050_chip_config {
>  	unsigned int accl_fs:2;
>  	unsigned int accl_fifo_enable:1;
>  	unsigned int gyro_fifo_enable:1;
> +	unsigned int temp_fifo_enable:1;
>  	unsigned int magn_fifo_enable:1;
>  	u8 divider;
>  	u8 user_ctrl;
> @@ -184,6 +186,7 @@ struct inv_mpu6050_state {
>  #define INV_MPU6050_BIT_SLAVE_2             0x04
>  #define INV_MPU6050_BIT_ACCEL_OUT           0x08
>  #define INV_MPU6050_BITS_GYRO_OUT           0x70
> +#define INV_MPU6050_BIT_TEMP_OUT            0x80
>  
>  #define INV_MPU6050_REG_I2C_MST_CTRL        0x24
>  #define INV_MPU6050_BITS_I2C_MST_CLK_400KHZ 0x0D
> @@ -268,8 +271,8 @@ struct inv_mpu6050_state {
>  /* MPU9X50 9-axis magnetometer */
>  #define INV_MPU9X50_BYTES_MAGN               7
>  
> -/* ICM20602 FIFO samples include temperature readings */
> -#define INV_ICM20602_BYTES_PER_TEMP_SENSOR   2
> +/* FIFO temperature sample size */
> +#define INV_MPU6050_BYTES_PER_TEMP_SENSOR   2
>  
>  /* mpu6500 registers */
>  #define INV_MPU6500_REG_ACCEL_CONFIG_2      0x1D
> @@ -298,7 +301,7 @@ struct inv_mpu6050_state {
>  #define INV_ICM20608_TEMP_OFFSET	     8170
>  #define INV_ICM20608_TEMP_SCALE		     3059976
>  
> -/* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */
> +/* 6 + 6 + 2 + 7 (for MPU9x50) = 21 round up to 24 and plus 8 */
>  #define INV_MPU6050_OUTPUT_DATA_SIZE         32
>  
>  #define INV_MPU6050_REG_INT_PIN_CFG	0x37
> @@ -344,6 +347,7 @@ enum inv_mpu6050_scan {
>  	INV_MPU6050_SCAN_ACCL_X,
>  	INV_MPU6050_SCAN_ACCL_Y,
>  	INV_MPU6050_SCAN_ACCL_Z,
> +	INV_MPU6050_SCAN_TEMP,
>  	INV_MPU6050_SCAN_GYRO_X,
>  	INV_MPU6050_SCAN_GYRO_Y,
>  	INV_MPU6050_SCAN_GYRO_Z,
> @@ -355,18 +359,6 @@ enum inv_mpu6050_scan {
>  	INV_MPU9X50_SCAN_TIMESTAMP,
>  };
>  
> -/* scan element definition for ICM20602, which includes temperature */
> -enum inv_icm20602_scan {
> -	INV_ICM20602_SCAN_ACCL_X,
> -	INV_ICM20602_SCAN_ACCL_Y,
> -	INV_ICM20602_SCAN_ACCL_Z,
> -	INV_ICM20602_SCAN_TEMP,
> -	INV_ICM20602_SCAN_GYRO_X,
> -	INV_ICM20602_SCAN_GYRO_Y,
> -	INV_ICM20602_SCAN_GYRO_Z,
> -	INV_ICM20602_SCAN_TIMESTAMP,
> -};
> -
>  enum inv_mpu6050_filter_e {
>  	INV_MPU6050_FILTER_256HZ_NOLPF2 = 0,
>  	INV_MPU6050_FILTER_188HZ,
> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
> index 10d16ec5104b..3755577dc449 100644
> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
> @@ -142,6 +142,8 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
>  		d |= INV_MPU6050_BITS_GYRO_OUT;
>  	if (st->chip_config.accl_fifo_enable)
>  		d |= INV_MPU6050_BIT_ACCEL_OUT;
> +	if (st->chip_config.temp_fifo_enable)
> +		d |= INV_MPU6050_BIT_TEMP_OUT;
>  	if (st->chip_config.magn_fifo_enable)
>  		d |= INV_MPU6050_BIT_SLAVE_0;
>  	result = regmap_write(st->map, st->reg->fifo_en, d);
> @@ -200,8 +202,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
>  	if (st->chip_config.gyro_fifo_enable)
>  		bytes_per_datum += INV_MPU6050_BYTES_PER_3AXIS_SENSOR;
>  
> -	if (st->chip_type == INV_ICM20602)
> -		bytes_per_datum += INV_ICM20602_BYTES_PER_TEMP_SENSOR;
> +	if (st->chip_config.temp_fifo_enable)
> +		bytes_per_datum += INV_MPU6050_BYTES_PER_TEMP_SENSOR;
>  
>  	if (st->chip_config.magn_fifo_enable)
>  		bytes_per_datum += INV_MPU9X50_BYTES_MAGN;
> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
> index a9c75bc62f18..5199fe790c30 100644
> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
> @@ -24,6 +24,9 @@ static void inv_scan_query_mpu6050(struct iio_dev *indio_dev)
>  			 indio_dev->active_scan_mask) ||
>  		test_bit(INV_MPU6050_SCAN_ACCL_Z,
>  			 indio_dev->active_scan_mask);
> +
> +	st->chip_config.temp_fifo_enable =
> +		test_bit(INV_MPU6050_SCAN_TEMP, indio_dev->active_scan_mask);
>  }
>  
>  static void inv_scan_query_mpu9x50(struct iio_dev *indio_dev)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
       [not found]     ` <MN2PR12MB33739BF5EA2C9E402EDF4684C4430@MN2PR12MB3373.namprd12.prod.outlook.com>
@ 2019-12-24  9:17       ` Jean-Baptiste Maneyrol
  2019-12-30 16:26         ` Jonathan Cameron
  0 siblings, 1 reply; 8+ messages in thread
From: Jean-Baptiste Maneyrol @ 2019-12-24  9:17 UTC (permalink / raw)
  To: Jonathan Cameron, linux-iio

Hi Jonathan,

any news about my 2nd patch ("[PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support") now that the 1st is included inside fixes-togreg branch?

The 1st one is still not yet available inside testing branch.
Should I resend it now or wait for testing to be in sync with fixes-togreg?

Thanks,
JB






From: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>

Sent: Monday, December 2, 2019 14:50

To: Jonathan Cameron <jic23@kernel.org>

Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support

 


Hi Jonathan,



just a reminder for not forgetting this patch now that the first is in fixes-togreg branch.



Thanks,

JB





From: Jonathan Cameron <jic23@kernel.org>



Sent: Saturday, November 23, 2019 17:22



To: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>



Cc: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>



Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support



 





 CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.







On Mon, 18 Nov 2019 11:34:06 +0100



Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> wrote:







> Add support of temperature data in fifo for all chips.



> Enable unification of scan elements for icm20602.



> Add macros for generating scan elements with and without temp.



> 



> Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>



Looks fine to me. I'll pick up once we've worked out what



we are doing with patch 1.







Remind me if I seem to have lost it.







Thanks,







Jonathan







> ---



>  drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    | 194 +++++++-----------



>  drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h     |  22 +-



>  drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    |   6 +-



>  drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c |   3 +



>  4 files changed, 84 insertions(+), 141 deletions(-)



> 



> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c



> index 268240644adf..7c2f6951364d 100644



> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c



> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c



> @@ -104,6 +104,7 @@ static const struct inv_mpu6050_chip_config chip_config_6050 = {



>        .divider = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE),



>        .gyro_fifo_enable = false,



>        .accl_fifo_enable = false,



> +     .temp_fifo_enable = false,



>        .magn_fifo_enable = false,



>        .accl_fs = INV_MPU6050_FS_02G,



>        .user_ctrl = 0,



> @@ -856,19 +857,27 @@ static const struct iio_chan_spec_ext_info inv_ext_info[] = {



>                .ext_info = inv_ext_info,                             \



>        }






> +#define INV_MPU6050_TEMP_CHAN(_index)                                \



> +     {                                                       \



> +             .type = IIO_TEMP,                               \



> +             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    \



> +                             | BIT(IIO_CHAN_INFO_OFFSET)     \



> +                             | BIT(IIO_CHAN_INFO_SCALE),     \



> +             .scan_index = _index,                           \



> +             .scan_type = {                                  \



> +                     .sign = 's',                            \



> +                     .realbits = 16,                         \



> +                     .storagebits = 16,                      \



> +                     .shift = 0,                             \



> +                     .endianness = IIO_BE,                   \



> +             },                                              \



> +     }



> +



>  static const struct iio_chan_spec inv_mpu_channels[] = {



>        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),



> -     /*



> -      * Note that temperature should only be via polled reading only,



> -      * not the final scan elements output.



> -      */



> -     {



> -             .type = IIO_TEMP,



> -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)



> -                             | BIT(IIO_CHAN_INFO_OFFSET)



> -                             | BIT(IIO_CHAN_INFO_SCALE),



> -             .scan_index = -1,



> -     },



> +



> +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),



> +



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),



> @@ -878,22 +887,31 @@ static const struct iio_chan_spec inv_mpu_channels[] = {



>        INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z),



>  };






> +#define INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    \



> +     (BIT(INV_MPU6050_SCAN_ACCL_X)           \



> +     | BIT(INV_MPU6050_SCAN_ACCL_Y)          \



> +     | BIT(INV_MPU6050_SCAN_ACCL_Z))



> +



> +#define INV_MPU6050_SCAN_MASK_3AXIS_GYRO     \



> +     (BIT(INV_MPU6050_SCAN_GYRO_X)           \



> +     | BIT(INV_MPU6050_SCAN_GYRO_Y)          \



> +     | BIT(INV_MPU6050_SCAN_GYRO_Z))



> +



> +#define INV_MPU6050_SCAN_MASK_TEMP           (BIT(INV_MPU6050_SCAN_TEMP))



> +



> +/* generate scan mask and a duplicate with temperature enabled */



> +#define INV_MPU6050_SCAN_MASK_DUP_TEMP(_mask)        \



> +     (_mask),                                \



> +     (_mask) | INV_MPU6050_SCAN_MASK_TEMP



> +



>  static const unsigned long inv_mpu_scan_masks[] = {



>        /* 3-axis accel */



> -     BIT(INV_MPU6050_SCAN_ACCL_X)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Y)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),



>        /* 3-axis gyro */



> -     BIT(INV_MPU6050_SCAN_GYRO_X)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Y)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),



>        /* 6-axis accel + gyro */



> -     BIT(INV_MPU6050_SCAN_ACCL_X)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Y)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Z)



> -             | BIT(INV_MPU6050_SCAN_GYRO_X)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Y)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL



> +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),



>        0,



>  };






> @@ -917,17 +935,9 @@ static const unsigned long inv_mpu_scan_masks[] = {






>  static const struct iio_chan_spec inv_mpu9150_channels[] = {



>        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),



> -     /*



> -      * Note that temperature should only be via polled reading only,



> -      * not the final scan elements output.



> -      */



> -     {



> -             .type = IIO_TEMP,



> -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)



> -                             | BIT(IIO_CHAN_INFO_OFFSET)



> -                             | BIT(IIO_CHAN_INFO_SCALE),



> -             .scan_index = -1,



> -     },



> +



> +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),



> +



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),



> @@ -944,17 +954,9 @@ static const struct iio_chan_spec inv_mpu9150_channels[] = {






>  static const struct iio_chan_spec inv_mpu9250_channels[] = {



>        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),



> -     /*



> -      * Note that temperature should only be via polled reading only,



> -      * not the final scan elements output.



> -      */



> -     {



> -             .type = IIO_TEMP,



> -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)



> -                             | BIT(IIO_CHAN_INFO_OFFSET)



> -                             | BIT(IIO_CHAN_INFO_SCALE),



> -             .scan_index = -1,



> -     },



> +



> +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),



> +



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),



>        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),



> @@ -969,98 +971,42 @@ static const struct iio_chan_spec inv_mpu9250_channels[] = {



>        INV_MPU9X50_MAGN_CHAN(IIO_MOD_Z, 16, INV_MPU9X50_SCAN_MAGN_Z),



>  };






> +#define INV_MPU9X50_SCAN_MASK_3AXIS_MAGN     \



> +     (BIT(INV_MPU9X50_SCAN_MAGN_X)           \



> +     | BIT(INV_MPU9X50_SCAN_MAGN_Y)          \



> +     | BIT(INV_MPU9X50_SCAN_MAGN_Z))



> +



>  static const unsigned long inv_mpu9x50_scan_masks[] = {



>        /* 3-axis accel */



> -     BIT(INV_MPU6050_SCAN_ACCL_X)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Y)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),



>        /* 3-axis gyro */



> -     BIT(INV_MPU6050_SCAN_GYRO_X)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Y)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),



>        /* 3-axis magn */



> -     BIT(INV_MPU9X50_SCAN_MAGN_X)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),



>        /* 6-axis accel + gyro */



> -     BIT(INV_MPU6050_SCAN_ACCL_X)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Y)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Z)



> -             | BIT(INV_MPU6050_SCAN_GYRO_X)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Y)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL



> +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),



>        /* 6-axis accel + magn */



> -     BIT(INV_MPU6050_SCAN_ACCL_X)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Y)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Z)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_X)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL



> +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),



>        /* 6-axis gyro + magn */



> -     BIT(INV_MPU6050_SCAN_GYRO_X)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Y)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Z)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_X)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO



> +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),



>        /* 9-axis accel + gyro + magn */



> -     BIT(INV_MPU6050_SCAN_ACCL_X)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Y)



> -             | BIT(INV_MPU6050_SCAN_ACCL_Z)



> -             | BIT(INV_MPU6050_SCAN_GYRO_X)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Y)



> -             | BIT(INV_MPU6050_SCAN_GYRO_Z)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_X)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)



> -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),



> +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL



> +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO



> +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),



>        0,



>  };






> -static const struct iio_chan_spec inv_icm20602_channels[] = {



> -     IIO_CHAN_SOFT_TIMESTAMP(INV_ICM20602_SCAN_TIMESTAMP),



> -     {



> -             .type = IIO_TEMP,



> -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)



> -                             | BIT(IIO_CHAN_INFO_OFFSET)



> -                             | BIT(IIO_CHAN_INFO_SCALE),



> -             .scan_index = INV_ICM20602_SCAN_TEMP,



> -             .scan_type = {



> -                             .sign = 's',



> -                             .realbits = 16,



> -                             .storagebits = 16,



> -                             .shift = 0,



> -                             .endianness = IIO_BE,



> -                          },



> -     },



> -



> -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_ICM20602_SCAN_GYRO_X),



> -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_ICM20602_SCAN_GYRO_Y),



> -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_ICM20602_SCAN_GYRO_Z),



> -



> -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Y, INV_ICM20602_SCAN_ACCL_Y),



> -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_X, INV_ICM20602_SCAN_ACCL_X),



> -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_ICM20602_SCAN_ACCL_Z),



> -};



> -



>  static const unsigned long inv_icm20602_scan_masks[] = {



>        /* 3-axis accel + temp (mandatory) */



> -     BIT(INV_ICM20602_SCAN_ACCL_X)



> -             | BIT(INV_ICM20602_SCAN_ACCL_Y)



> -             | BIT(INV_ICM20602_SCAN_ACCL_Z)



> -             | BIT(INV_ICM20602_SCAN_TEMP),



> +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_TEMP,



>        /* 3-axis gyro + temp (mandatory) */



> -     BIT(INV_ICM20602_SCAN_GYRO_X)



> -             | BIT(INV_ICM20602_SCAN_GYRO_Y)



> -             | BIT(INV_ICM20602_SCAN_GYRO_Z)



> -             | BIT(INV_ICM20602_SCAN_TEMP),



> +     INV_MPU6050_SCAN_MASK_3AXIS_GYRO | INV_MPU6050_SCAN_MASK_TEMP,



>        /* 6-axis accel + gyro + temp (mandatory) */



> -     BIT(INV_ICM20602_SCAN_ACCL_X)



> -             | BIT(INV_ICM20602_SCAN_ACCL_Y)



> -             | BIT(INV_ICM20602_SCAN_ACCL_Z)



> -             | BIT(INV_ICM20602_SCAN_GYRO_X)



> -             | BIT(INV_ICM20602_SCAN_GYRO_Y)



> -             | BIT(INV_ICM20602_SCAN_GYRO_Z)



> -             | BIT(INV_ICM20602_SCAN_TEMP),



> +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_3AXIS_GYRO



> +                     | INV_MPU6050_SCAN_MASK_TEMP,



>        0,



>  };






> @@ -1363,8 +1309,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,



>                indio_dev->available_scan_masks = inv_mpu9x50_scan_masks;



>                break;



>        case INV_ICM20602:



> -             indio_dev->channels = inv_icm20602_channels;



> -             indio_dev->num_channels = ARRAY_SIZE(inv_icm20602_channels);



> +             indio_dev->channels = inv_mpu_channels;



> +             indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels);



>                indio_dev->available_scan_masks = inv_icm20602_scan_masks;



>                break;



>        default:



> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h



> index b096e010d4ee..6158fca7f70e 100644



> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h



> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h



> @@ -86,6 +86,7 @@ enum inv_devices {



>   *  @accl_fs:                accel full scale range.



>   *  @accl_fifo_enable:       enable accel data output



>   *  @gyro_fifo_enable:       enable gyro data output



> + *  @temp_fifo_enable:       enable temp data output



>   *  @magn_fifo_enable:       enable magn data output



>   *  @divider:                chip sample rate divider (sample rate divider - 1)



>   */



> @@ -95,6 +96,7 @@ struct inv_mpu6050_chip_config {



>        unsigned int accl_fs:2;



>        unsigned int accl_fifo_enable:1;



>        unsigned int gyro_fifo_enable:1;



> +     unsigned int temp_fifo_enable:1;



>        unsigned int magn_fifo_enable:1;



>        u8 divider;



>        u8 user_ctrl;



> @@ -184,6 +186,7 @@ struct inv_mpu6050_state {



>  #define INV_MPU6050_BIT_SLAVE_2             0x04



>  #define INV_MPU6050_BIT_ACCEL_OUT           0x08



>  #define INV_MPU6050_BITS_GYRO_OUT           0x70



> +#define INV_MPU6050_BIT_TEMP_OUT            0x80






>  #define INV_MPU6050_REG_I2C_MST_CTRL        0x24



>  #define INV_MPU6050_BITS_I2C_MST_CLK_400KHZ 0x0D



> @@ -268,8 +271,8 @@ struct inv_mpu6050_state {



>  /* MPU9X50 9-axis magnetometer */



>  #define INV_MPU9X50_BYTES_MAGN               7






> -/* ICM20602 FIFO samples include temperature readings */



> -#define INV_ICM20602_BYTES_PER_TEMP_SENSOR   2



> +/* FIFO temperature sample size */



> +#define INV_MPU6050_BYTES_PER_TEMP_SENSOR   2






>  /* mpu6500 registers */



>  #define INV_MPU6500_REG_ACCEL_CONFIG_2      0x1D



> @@ -298,7 +301,7 @@ struct inv_mpu6050_state {



>  #define INV_ICM20608_TEMP_OFFSET          8170



>  #define INV_ICM20608_TEMP_SCALE                   3059976






> -/* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */



> +/* 6 + 6 + 2 + 7 (for MPU9x50) = 21 round up to 24 and plus 8 */



>  #define INV_MPU6050_OUTPUT_DATA_SIZE         32






>  #define INV_MPU6050_REG_INT_PIN_CFG  0x37



> @@ -344,6 +347,7 @@ enum inv_mpu6050_scan {



>        INV_MPU6050_SCAN_ACCL_X,



>        INV_MPU6050_SCAN_ACCL_Y,



>        INV_MPU6050_SCAN_ACCL_Z,



> +     INV_MPU6050_SCAN_TEMP,



>        INV_MPU6050_SCAN_GYRO_X,



>        INV_MPU6050_SCAN_GYRO_Y,



>        INV_MPU6050_SCAN_GYRO_Z,



> @@ -355,18 +359,6 @@ enum inv_mpu6050_scan {



>        INV_MPU9X50_SCAN_TIMESTAMP,



>  };






> -/* scan element definition for ICM20602, which includes temperature */



> -enum inv_icm20602_scan {



> -     INV_ICM20602_SCAN_ACCL_X,



> -     INV_ICM20602_SCAN_ACCL_Y,



> -     INV_ICM20602_SCAN_ACCL_Z,



> -     INV_ICM20602_SCAN_TEMP,



> -     INV_ICM20602_SCAN_GYRO_X,



> -     INV_ICM20602_SCAN_GYRO_Y,



> -     INV_ICM20602_SCAN_GYRO_Z,



> -     INV_ICM20602_SCAN_TIMESTAMP,



> -};



> -



>  enum inv_mpu6050_filter_e {



>        INV_MPU6050_FILTER_256HZ_NOLPF2 = 0,



>        INV_MPU6050_FILTER_188HZ,



> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c



> index 10d16ec5104b..3755577dc449 100644



> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c



> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c



> @@ -142,6 +142,8 @@ int inv_reset_fifo(struct iio_dev *indio_dev)



>                d |= INV_MPU6050_BITS_GYRO_OUT;



>        if (st->chip_config.accl_fifo_enable)



>                d |= INV_MPU6050_BIT_ACCEL_OUT;



> +     if (st->chip_config.temp_fifo_enable)



> +             d |= INV_MPU6050_BIT_TEMP_OUT;



>        if (st->chip_config.magn_fifo_enable)



>                d |= INV_MPU6050_BIT_SLAVE_0;



>        result = regmap_write(st->map, st->reg->fifo_en, d);



> @@ -200,8 +202,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)



>        if (st->chip_config.gyro_fifo_enable)



>                bytes_per_datum += INV_MPU6050_BYTES_PER_3AXIS_SENSOR;






> -     if (st->chip_type == INV_ICM20602)



> -             bytes_per_datum += INV_ICM20602_BYTES_PER_TEMP_SENSOR;



> +     if (st->chip_config.temp_fifo_enable)



> +             bytes_per_datum += INV_MPU6050_BYTES_PER_TEMP_SENSOR;






>        if (st->chip_config.magn_fifo_enable)



>                bytes_per_datum += INV_MPU9X50_BYTES_MAGN;



> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c



> index a9c75bc62f18..5199fe790c30 100644



> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c



> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c



> @@ -24,6 +24,9 @@ static void inv_scan_query_mpu6050(struct iio_dev *indio_dev)



>                         indio_dev->active_scan_mask) ||



>                test_bit(INV_MPU6050_SCAN_ACCL_Z,



>                         indio_dev->active_scan_mask);



> +



> +     st->chip_config.temp_fifo_enable =



> +             test_bit(INV_MPU6050_SCAN_TEMP, indio_dev->active_scan_mask);



>  }






>  static void inv_scan_query_mpu9x50(struct iio_dev *indio_dev)








^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
  2019-12-24  9:17       ` Jean-Baptiste Maneyrol
@ 2019-12-30 16:26         ` Jonathan Cameron
  2020-01-14  9:22           ` Jean-Baptiste Maneyrol
  0 siblings, 1 reply; 8+ messages in thread
From: Jonathan Cameron @ 2019-12-30 16:26 UTC (permalink / raw)
  To: Jean-Baptiste Maneyrol; +Cc: linux-iio

On Tue, 24 Dec 2019 09:17:05 +0000
Jean-Baptiste Maneyrol <JManeyrol@invensense.com> wrote:

> Hi Jonathan,
> 
> any news about my 2nd patch ("[PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support") now that the 1st is included inside fixes-togreg branch?
> 
> The 1st one is still not yet available inside testing branch.
> Should I resend it now or wait for testing to be in sync with fixes-togreg?
I have it flagged in my email so in theory at least I will grab it
without a resend.  I think I'll do a pull request for togreg later this
week and after that I should be fine applying this.

Things got a bit slowed down for the holidays :)  Too easy to put
things off to tomorrow!

Jonathan

> 
> Thanks,
> JB
> 
> 
> 
> 
> 
> 
> From: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>
> 
> Sent: Monday, December 2, 2019 14:50
> 
> To: Jonathan Cameron <jic23@kernel.org>
> 
> Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
> 
>  
> 
> 
> Hi Jonathan,
> 
> 
> 
> just a reminder for not forgetting this patch now that the first is in fixes-togreg branch.
> 
> 
> 
> Thanks,
> 
> JB
> 
> 
> 
> 
> 
> From: Jonathan Cameron <jic23@kernel.org>
> 
> 
> 
> Sent: Saturday, November 23, 2019 17:22
> 
> 
> 
> To: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>
> 
> 
> 
> Cc: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>
> 
> 
> 
> Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
> 
> 
> 
>  
> 
> 
> 
> 
> 
>  CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> 
> 
> 
> 
> 
> 
> On Mon, 18 Nov 2019 11:34:06 +0100
> 
> 
> 
> Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> wrote:
> 
> 
> 
> 
> 
> 
> 
> > Add support of temperature data in fifo for all chips.  
> 
> 
> 
> > Enable unification of scan elements for icm20602.  
> 
> 
> 
> > Add macros for generating scan elements with and without temp.  
> 
> 
> 
> >   
> 
> 
> 
> > Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>  
> 
> 
> 
> Looks fine to me. I'll pick up once we've worked out what
> 
> 
> 
> we are doing with patch 1.
> 
> 
> 
> 
> 
> 
> 
> Remind me if I seem to have lost it.
> 
> 
> 
> 
> 
> 
> 
> Thanks,
> 
> 
> 
> 
> 
> 
> 
> Jonathan
> 
> 
> 
> 
> 
> 
> 
> > ---  
> 
> 
> 
> >  drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    | 194 +++++++-----------  
> 
> 
> 
> >  drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h     |  22 +-  
> 
> 
> 
> >  drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    |   6 +-  
> 
> 
> 
> >  drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c |   3 +  
> 
> 
> 
> >  4 files changed, 84 insertions(+), 141 deletions(-)  
> 
> 
> 
> >   
> 
> 
> 
> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c  
> 
> 
> 
> > index 268240644adf..7c2f6951364d 100644  
> 
> 
> 
> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c  
> 
> 
> 
> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c  
> 
> 
> 
> > @@ -104,6 +104,7 @@ static const struct inv_mpu6050_chip_config chip_config_6050 = {  
> 
> 
> 
> >        .divider = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE),  
> 
> 
> 
> >        .gyro_fifo_enable = false,  
> 
> 
> 
> >        .accl_fifo_enable = false,  
> 
> 
> 
> > +     .temp_fifo_enable = false,  
> 
> 
> 
> >        .magn_fifo_enable = false,  
> 
> 
> 
> >        .accl_fs = INV_MPU6050_FS_02G,  
> 
> 
> 
> >        .user_ctrl = 0,  
> 
> 
> 
> > @@ -856,19 +857,27 @@ static const struct iio_chan_spec_ext_info inv_ext_info[] = {  
> 
> 
> 
> >                .ext_info = inv_ext_info,                             \  
> 
> 
> 
> >        }  
> 
> 
> 
> >    
> 
> 
> 
> > +#define INV_MPU6050_TEMP_CHAN(_index)                                \  
> 
> 
> 
> > +     {                                                       \  
> 
> 
> 
> > +             .type = IIO_TEMP,                               \  
> 
> 
> 
> > +             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    \  
> 
> 
> 
> > +                             | BIT(IIO_CHAN_INFO_OFFSET)     \  
> 
> 
> 
> > +                             | BIT(IIO_CHAN_INFO_SCALE),     \  
> 
> 
> 
> > +             .scan_index = _index,                           \  
> 
> 
> 
> > +             .scan_type = {                                  \  
> 
> 
> 
> > +                     .sign = 's',                            \  
> 
> 
> 
> > +                     .realbits = 16,                         \  
> 
> 
> 
> > +                     .storagebits = 16,                      \  
> 
> 
> 
> > +                     .shift = 0,                             \  
> 
> 
> 
> > +                     .endianness = IIO_BE,                   \  
> 
> 
> 
> > +             },                                              \  
> 
> 
> 
> > +     }  
> 
> 
> 
> > +  
> 
> 
> 
> >  static const struct iio_chan_spec inv_mpu_channels[] = {  
> 
> 
> 
> >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),  
> 
> 
> 
> > -     /*  
> 
> 
> 
> > -      * Note that temperature should only be via polled reading only,  
> 
> 
> 
> > -      * not the final scan elements output.  
> 
> 
> 
> > -      */  
> 
> 
> 
> > -     {  
> 
> 
> 
> > -             .type = IIO_TEMP,  
> 
> 
> 
> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_SCALE),  
> 
> 
> 
> > -             .scan_index = -1,  
> 
> 
> 
> > -     },  
> 
> 
> 
> > +  
> 
> 
> 
> > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),  
> 
> 
> 
> > +  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),  
> 
> 
> 
> > @@ -878,22 +887,31 @@ static const struct iio_chan_spec inv_mpu_channels[] = {  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z),  
> 
> 
> 
> >  };  
> 
> 
> 
> >    
> 
> 
> 
> > +#define INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    \  
> 
> 
> 
> > +     (BIT(INV_MPU6050_SCAN_ACCL_X)           \  
> 
> 
> 
> > +     | BIT(INV_MPU6050_SCAN_ACCL_Y)          \  
> 
> 
> 
> > +     | BIT(INV_MPU6050_SCAN_ACCL_Z))  
> 
> 
> 
> > +  
> 
> 
> 
> > +#define INV_MPU6050_SCAN_MASK_3AXIS_GYRO     \  
> 
> 
> 
> > +     (BIT(INV_MPU6050_SCAN_GYRO_X)           \  
> 
> 
> 
> > +     | BIT(INV_MPU6050_SCAN_GYRO_Y)          \  
> 
> 
> 
> > +     | BIT(INV_MPU6050_SCAN_GYRO_Z))  
> 
> 
> 
> > +  
> 
> 
> 
> > +#define INV_MPU6050_SCAN_MASK_TEMP           (BIT(INV_MPU6050_SCAN_TEMP))  
> 
> 
> 
> > +  
> 
> 
> 
> > +/* generate scan mask and a duplicate with temperature enabled */  
> 
> 
> 
> > +#define INV_MPU6050_SCAN_MASK_DUP_TEMP(_mask)        \  
> 
> 
> 
> > +     (_mask),                                \  
> 
> 
> 
> > +     (_mask) | INV_MPU6050_SCAN_MASK_TEMP  
> 
> 
> 
> > +  
> 
> 
> 
> >  static const unsigned long inv_mpu_scan_masks[] = {  
> 
> 
> 
> >        /* 3-axis accel */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),  
> 
> 
> 
> >        /* 3-axis gyro */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  
> 
> 
> 
> >        /* 6-axis accel + gyro */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  
> 
> 
> 
> > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  
> 
> 
> 
> >        0,  
> 
> 
> 
> >  };  
> 
> 
> 
> >    
> 
> 
> 
> > @@ -917,17 +935,9 @@ static const unsigned long inv_mpu_scan_masks[] = {  
> 
> 
> 
> >    
> 
> 
> 
> >  static const struct iio_chan_spec inv_mpu9150_channels[] = {  
> 
> 
> 
> >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),  
> 
> 
> 
> > -     /*  
> 
> 
> 
> > -      * Note that temperature should only be via polled reading only,  
> 
> 
> 
> > -      * not the final scan elements output.  
> 
> 
> 
> > -      */  
> 
> 
> 
> > -     {  
> 
> 
> 
> > -             .type = IIO_TEMP,  
> 
> 
> 
> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_SCALE),  
> 
> 
> 
> > -             .scan_index = -1,  
> 
> 
> 
> > -     },  
> 
> 
> 
> > +  
> 
> 
> 
> > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),  
> 
> 
> 
> > +  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),  
> 
> 
> 
> > @@ -944,17 +954,9 @@ static const struct iio_chan_spec inv_mpu9150_channels[] = {  
> 
> 
> 
> >    
> 
> 
> 
> >  static const struct iio_chan_spec inv_mpu9250_channels[] = {  
> 
> 
> 
> >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),  
> 
> 
> 
> > -     /*  
> 
> 
> 
> > -      * Note that temperature should only be via polled reading only,  
> 
> 
> 
> > -      * not the final scan elements output.  
> 
> 
> 
> > -      */  
> 
> 
> 
> > -     {  
> 
> 
> 
> > -             .type = IIO_TEMP,  
> 
> 
> 
> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_SCALE),  
> 
> 
> 
> > -             .scan_index = -1,  
> 
> 
> 
> > -     },  
> 
> 
> 
> > +  
> 
> 
> 
> > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),  
> 
> 
> 
> > +  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),  
> 
> 
> 
> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),  
> 
> 
> 
> > @@ -969,98 +971,42 @@ static const struct iio_chan_spec inv_mpu9250_channels[] = {  
> 
> 
> 
> >        INV_MPU9X50_MAGN_CHAN(IIO_MOD_Z, 16, INV_MPU9X50_SCAN_MAGN_Z),  
> 
> 
> 
> >  };  
> 
> 
> 
> >    
> 
> 
> 
> > +#define INV_MPU9X50_SCAN_MASK_3AXIS_MAGN     \  
> 
> 
> 
> > +     (BIT(INV_MPU9X50_SCAN_MAGN_X)           \  
> 
> 
> 
> > +     | BIT(INV_MPU9X50_SCAN_MAGN_Y)          \  
> 
> 
> 
> > +     | BIT(INV_MPU9X50_SCAN_MAGN_Z))  
> 
> 
> 
> > +  
> 
> 
> 
> >  static const unsigned long inv_mpu9x50_scan_masks[] = {  
> 
> 
> 
> >        /* 3-axis accel */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),  
> 
> 
> 
> >        /* 3-axis gyro */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  
> 
> 
> 
> >        /* 3-axis magn */  
> 
> 
> 
> > -     BIT(INV_MPU9X50_SCAN_MAGN_X)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  
> 
> 
> 
> >        /* 6-axis accel + gyro */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  
> 
> 
> 
> > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  
> 
> 
> 
> >        /* 6-axis accel + magn */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  
> 
> 
> 
> > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  
> 
> 
> 
> >        /* 6-axis gyro + magn */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO  
> 
> 
> 
> > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  
> 
> 
> 
> >        /* 9-axis accel + gyro + magn */  
> 
> 
> 
> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  
> 
> 
> 
> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  
> 
> 
> 
> > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO  
> 
> 
> 
> > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  
> 
> 
> 
> >        0,  
> 
> 
> 
> >  };  
> 
> 
> 
> >    
> 
> 
> 
> > -static const struct iio_chan_spec inv_icm20602_channels[] = {  
> 
> 
> 
> > -     IIO_CHAN_SOFT_TIMESTAMP(INV_ICM20602_SCAN_TIMESTAMP),  
> 
> 
> 
> > -     {  
> 
> 
> 
> > -             .type = IIO_TEMP,  
> 
> 
> 
> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  
> 
> 
> 
> > -                             | BIT(IIO_CHAN_INFO_SCALE),  
> 
> 
> 
> > -             .scan_index = INV_ICM20602_SCAN_TEMP,  
> 
> 
> 
> > -             .scan_type = {  
> 
> 
> 
> > -                             .sign = 's',  
> 
> 
> 
> > -                             .realbits = 16,  
> 
> 
> 
> > -                             .storagebits = 16,  
> 
> 
> 
> > -                             .shift = 0,  
> 
> 
> 
> > -                             .endianness = IIO_BE,  
> 
> 
> 
> > -                          },  
> 
> 
> 
> > -     },  
> 
> 
> 
> > -  
> 
> 
> 
> > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_ICM20602_SCAN_GYRO_X),  
> 
> 
> 
> > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_ICM20602_SCAN_GYRO_Y),  
> 
> 
> 
> > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_ICM20602_SCAN_GYRO_Z),  
> 
> 
> 
> > -  
> 
> 
> 
> > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Y, INV_ICM20602_SCAN_ACCL_Y),  
> 
> 
> 
> > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_X, INV_ICM20602_SCAN_ACCL_X),  
> 
> 
> 
> > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_ICM20602_SCAN_ACCL_Z),  
> 
> 
> 
> > -};  
> 
> 
> 
> > -  
> 
> 
> 
> >  static const unsigned long inv_icm20602_scan_masks[] = {  
> 
> 
> 
> >        /* 3-axis accel + temp (mandatory) */  
> 
> 
> 
> > -     BIT(INV_ICM20602_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_ACCL_Z)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_TEMP),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_TEMP,  
> 
> 
> 
> >        /* 3-axis gyro + temp (mandatory) */  
> 
> 
> 
> > -     BIT(INV_ICM20602_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_GYRO_Z)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_TEMP),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_3AXIS_GYRO | INV_MPU6050_SCAN_MASK_TEMP,  
> 
> 
> 
> >        /* 6-axis accel + gyro + temp (mandatory) */  
> 
> 
> 
> > -     BIT(INV_ICM20602_SCAN_ACCL_X)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_ACCL_Y)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_ACCL_Z)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_GYRO_X)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_GYRO_Y)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_GYRO_Z)  
> 
> 
> 
> > -             | BIT(INV_ICM20602_SCAN_TEMP),  
> 
> 
> 
> > +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_3AXIS_GYRO  
> 
> 
> 
> > +                     | INV_MPU6050_SCAN_MASK_TEMP,  
> 
> 
> 
> >        0,  
> 
> 
> 
> >  };  
> 
> 
> 
> >    
> 
> 
> 
> > @@ -1363,8 +1309,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,  
> 
> 
> 
> >                indio_dev->available_scan_masks = inv_mpu9x50_scan_masks;  
> 
> 
> 
> >                break;  
> 
> 
> 
> >        case INV_ICM20602:  
> 
> 
> 
> > -             indio_dev->channels = inv_icm20602_channels;  
> 
> 
> 
> > -             indio_dev->num_channels = ARRAY_SIZE(inv_icm20602_channels);  
> 
> 
> 
> > +             indio_dev->channels = inv_mpu_channels;  
> 
> 
> 
> > +             indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels);  
> 
> 
> 
> >                indio_dev->available_scan_masks = inv_icm20602_scan_masks;  
> 
> 
> 
> >                break;  
> 
> 
> 
> >        default:  
> 
> 
> 
> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  
> 
> 
> 
> > index b096e010d4ee..6158fca7f70e 100644  
> 
> 
> 
> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  
> 
> 
> 
> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  
> 
> 
> 
> > @@ -86,6 +86,7 @@ enum inv_devices {  
> 
> 
> 
> >   *  @accl_fs:                accel full scale range.  
> 
> 
> 
> >   *  @accl_fifo_enable:       enable accel data output  
> 
> 
> 
> >   *  @gyro_fifo_enable:       enable gyro data output  
> 
> 
> 
> > + *  @temp_fifo_enable:       enable temp data output  
> 
> 
> 
> >   *  @magn_fifo_enable:       enable magn data output  
> 
> 
> 
> >   *  @divider:                chip sample rate divider (sample rate divider - 1)  
> 
> 
> 
> >   */  
> 
> 
> 
> > @@ -95,6 +96,7 @@ struct inv_mpu6050_chip_config {  
> 
> 
> 
> >        unsigned int accl_fs:2;  
> 
> 
> 
> >        unsigned int accl_fifo_enable:1;  
> 
> 
> 
> >        unsigned int gyro_fifo_enable:1;  
> 
> 
> 
> > +     unsigned int temp_fifo_enable:1;  
> 
> 
> 
> >        unsigned int magn_fifo_enable:1;  
> 
> 
> 
> >        u8 divider;  
> 
> 
> 
> >        u8 user_ctrl;  
> 
> 
> 
> > @@ -184,6 +186,7 @@ struct inv_mpu6050_state {  
> 
> 
> 
> >  #define INV_MPU6050_BIT_SLAVE_2             0x04  
> 
> 
> 
> >  #define INV_MPU6050_BIT_ACCEL_OUT           0x08  
> 
> 
> 
> >  #define INV_MPU6050_BITS_GYRO_OUT           0x70  
> 
> 
> 
> > +#define INV_MPU6050_BIT_TEMP_OUT            0x80  
> 
> 
> 
> >    
> 
> 
> 
> >  #define INV_MPU6050_REG_I2C_MST_CTRL        0x24  
> 
> 
> 
> >  #define INV_MPU6050_BITS_I2C_MST_CLK_400KHZ 0x0D  
> 
> 
> 
> > @@ -268,8 +271,8 @@ struct inv_mpu6050_state {  
> 
> 
> 
> >  /* MPU9X50 9-axis magnetometer */  
> 
> 
> 
> >  #define INV_MPU9X50_BYTES_MAGN               7  
> 
> 
> 
> >    
> 
> 
> 
> > -/* ICM20602 FIFO samples include temperature readings */  
> 
> 
> 
> > -#define INV_ICM20602_BYTES_PER_TEMP_SENSOR   2  
> 
> 
> 
> > +/* FIFO temperature sample size */  
> 
> 
> 
> > +#define INV_MPU6050_BYTES_PER_TEMP_SENSOR   2  
> 
> 
> 
> >    
> 
> 
> 
> >  /* mpu6500 registers */  
> 
> 
> 
> >  #define INV_MPU6500_REG_ACCEL_CONFIG_2      0x1D  
> 
> 
> 
> > @@ -298,7 +301,7 @@ struct inv_mpu6050_state {  
> 
> 
> 
> >  #define INV_ICM20608_TEMP_OFFSET          8170  
> 
> 
> 
> >  #define INV_ICM20608_TEMP_SCALE                   3059976  
> 
> 
> 
> >    
> 
> 
> 
> > -/* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */  
> 
> 
> 
> > +/* 6 + 6 + 2 + 7 (for MPU9x50) = 21 round up to 24 and plus 8 */  
> 
> 
> 
> >  #define INV_MPU6050_OUTPUT_DATA_SIZE         32  
> 
> 
> 
> >    
> 
> 
> 
> >  #define INV_MPU6050_REG_INT_PIN_CFG  0x37  
> 
> 
> 
> > @@ -344,6 +347,7 @@ enum inv_mpu6050_scan {  
> 
> 
> 
> >        INV_MPU6050_SCAN_ACCL_X,  
> 
> 
> 
> >        INV_MPU6050_SCAN_ACCL_Y,  
> 
> 
> 
> >        INV_MPU6050_SCAN_ACCL_Z,  
> 
> 
> 
> > +     INV_MPU6050_SCAN_TEMP,  
> 
> 
> 
> >        INV_MPU6050_SCAN_GYRO_X,  
> 
> 
> 
> >        INV_MPU6050_SCAN_GYRO_Y,  
> 
> 
> 
> >        INV_MPU6050_SCAN_GYRO_Z,  
> 
> 
> 
> > @@ -355,18 +359,6 @@ enum inv_mpu6050_scan {  
> 
> 
> 
> >        INV_MPU9X50_SCAN_TIMESTAMP,  
> 
> 
> 
> >  };  
> 
> 
> 
> >    
> 
> 
> 
> > -/* scan element definition for ICM20602, which includes temperature */  
> 
> 
> 
> > -enum inv_icm20602_scan {  
> 
> 
> 
> > -     INV_ICM20602_SCAN_ACCL_X,  
> 
> 
> 
> > -     INV_ICM20602_SCAN_ACCL_Y,  
> 
> 
> 
> > -     INV_ICM20602_SCAN_ACCL_Z,  
> 
> 
> 
> > -     INV_ICM20602_SCAN_TEMP,  
> 
> 
> 
> > -     INV_ICM20602_SCAN_GYRO_X,  
> 
> 
> 
> > -     INV_ICM20602_SCAN_GYRO_Y,  
> 
> 
> 
> > -     INV_ICM20602_SCAN_GYRO_Z,  
> 
> 
> 
> > -     INV_ICM20602_SCAN_TIMESTAMP,  
> 
> 
> 
> > -};  
> 
> 
> 
> > -  
> 
> 
> 
> >  enum inv_mpu6050_filter_e {  
> 
> 
> 
> >        INV_MPU6050_FILTER_256HZ_NOLPF2 = 0,  
> 
> 
> 
> >        INV_MPU6050_FILTER_188HZ,  
> 
> 
> 
> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c  
> 
> 
> 
> > index 10d16ec5104b..3755577dc449 100644  
> 
> 
> 
> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c  
> 
> 
> 
> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c  
> 
> 
> 
> > @@ -142,6 +142,8 @@ int inv_reset_fifo(struct iio_dev *indio_dev)  
> 
> 
> 
> >                d |= INV_MPU6050_BITS_GYRO_OUT;  
> 
> 
> 
> >        if (st->chip_config.accl_fifo_enable)  
> 
> 
> 
> >                d |= INV_MPU6050_BIT_ACCEL_OUT;  
> 
> 
> 
> > +     if (st->chip_config.temp_fifo_enable)  
> 
> 
> 
> > +             d |= INV_MPU6050_BIT_TEMP_OUT;  
> 
> 
> 
> >        if (st->chip_config.magn_fifo_enable)  
> 
> 
> 
> >                d |= INV_MPU6050_BIT_SLAVE_0;  
> 
> 
> 
> >        result = regmap_write(st->map, st->reg->fifo_en, d);  
> 
> 
> 
> > @@ -200,8 +202,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)  
> 
> 
> 
> >        if (st->chip_config.gyro_fifo_enable)  
> 
> 
> 
> >                bytes_per_datum += INV_MPU6050_BYTES_PER_3AXIS_SENSOR;  
> 
> 
> 
> >    
> 
> 
> 
> > -     if (st->chip_type == INV_ICM20602)  
> 
> 
> 
> > -             bytes_per_datum += INV_ICM20602_BYTES_PER_TEMP_SENSOR;  
> 
> 
> 
> > +     if (st->chip_config.temp_fifo_enable)  
> 
> 
> 
> > +             bytes_per_datum += INV_MPU6050_BYTES_PER_TEMP_SENSOR;  
> 
> 
> 
> >    
> 
> 
> 
> >        if (st->chip_config.magn_fifo_enable)  
> 
> 
> 
> >                bytes_per_datum += INV_MPU9X50_BYTES_MAGN;  
> 
> 
> 
> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c  
> 
> 
> 
> > index a9c75bc62f18..5199fe790c30 100644  
> 
> 
> 
> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c  
> 
> 
> 
> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c  
> 
> 
> 
> > @@ -24,6 +24,9 @@ static void inv_scan_query_mpu6050(struct iio_dev *indio_dev)  
> 
> 
> 
> >                         indio_dev->active_scan_mask) ||  
> 
> 
> 
> >                test_bit(INV_MPU6050_SCAN_ACCL_Z,  
> 
> 
> 
> >                         indio_dev->active_scan_mask);  
> 
> 
> 
> > +  
> 
> 
> 
> > +     st->chip_config.temp_fifo_enable =  
> 
> 
> 
> > +             test_bit(INV_MPU6050_SCAN_TEMP, indio_dev->active_scan_mask);  
> 
> 
> 
> >  }  
> 
> 
> 
> >    
> 
> 
> 
> >  static void inv_scan_query_mpu9x50(struct iio_dev *indio_dev)  
> 
> 
> 
> 
> 
> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
  2019-12-30 16:26         ` Jonathan Cameron
@ 2020-01-14  9:22           ` Jean-Baptiste Maneyrol
  2020-01-18 11:10             ` Jonathan Cameron
  0 siblings, 1 reply; 8+ messages in thread
From: Jean-Baptiste Maneyrol @ 2020-01-14  9:22 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio

Hi Jonathan,

a kind reminder about this patch still waiting. Now testing branch is ready for it to be applied.

I've got a good number of other patches just waiting for this one to be accepted before sending.

Thanks,
JB


From: Jonathan Cameron <jic23@kernel.org>

Sent: Monday, December 30, 2019 17:26

To: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>

Cc: linux-iio <linux-iio@vger.kernel.org>

Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support

 


 CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.



On Tue, 24 Dec 2019 09:17:05 +0000

Jean-Baptiste Maneyrol <JManeyrol@invensense.com> wrote:



> Hi Jonathan,

> 

> any news about my 2nd patch ("[PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support") now that the 1st is included inside fixes-togreg branch?

> 

> The 1st one is still not yet available inside testing branch.

> Should I resend it now or wait for testing to be in sync with fixes-togreg?

I have it flagged in my email so in theory at least I will grab it

without a resend.  I think I'll do a pull request for togreg later this

week and after that I should be fine applying this.



Things got a bit slowed down for the holidays :)  Too easy to put

things off to tomorrow!



Jonathan



> 

> Thanks,

> JB

> 

> 

> 

> 

> 

> 

> From: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>

> 

> Sent: Monday, December 2, 2019 14:50

> 

> To: Jonathan Cameron <jic23@kernel.org>

> 

> Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support

> 

>  

> 

> 

> Hi Jonathan,

> 

> 

> 

> just a reminder for not forgetting this patch now that the first is in fixes-togreg branch.

> 

> 

> 

> Thanks,

> 

> JB

> 

> 

> 

> 

> 

> From: Jonathan Cameron <jic23@kernel.org>

> 

> 

> 

> Sent: Saturday, November 23, 2019 17:22

> 

> 

> 

> To: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>

> 

> 

> 

> Cc: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>

> 

> 

> 

> Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support

> 

> 

> 

>  

> 

> 

> 

> 

> 

>  CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.

> 

> 

> 

> 

> 

> 

> 

> On Mon, 18 Nov 2019 11:34:06 +0100

> 

> 

> 

> Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> wrote:

> 

> 

> 

> 

> 

> 

> 

> > Add support of temperature data in fifo for all chips.  

> 

> 

> 

> > Enable unification of scan elements for icm20602.  

> 

> 

> 

> > Add macros for generating scan elements with and without temp.  

> 

> 

> 

> >   

> 

> 

> 

> > Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>  

> 

> 

> 

> Looks fine to me. I'll pick up once we've worked out what

> 

> 

> 

> we are doing with patch 1.

> 

> 

> 

> 

> 

> 

> 

> Remind me if I seem to have lost it.

> 

> 

> 

> 

> 

> 

> 

> Thanks,

> 

> 

> 

> 

> 

> 

> 

> Jonathan

> 

> 

> 

> 

> 

> 

> 

> > ---  

> 

> 

> 

> >  drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    | 194 +++++++-----------  

> 

> 

> 

> >  drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h     |  22 +-  

> 

> 

> 

> >  drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    |   6 +-  

> 

> 

> 

> >  drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c |   3 +  

> 

> 

> 

> >  4 files changed, 84 insertions(+), 141 deletions(-)  

> 

> 

> 

> >   

> 

> 

> 

> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c 


> 

> 

> 

> > index 268240644adf..7c2f6951364d 100644  

> 

> 

> 

> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c  

> 

> 

> 

> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c  

> 

> 

> 

> > @@ -104,6 +104,7 @@ static const struct inv_mpu6050_chip_config chip_config_6050 = { 


> 

> 

> 

> >        .divider = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE), 


> 

> 

> 

> >        .gyro_fifo_enable = false,  

> 

> 

> 

> >        .accl_fifo_enable = false,  

> 

> 

> 

> > +     .temp_fifo_enable = false,  

> 

> 

> 

> >        .magn_fifo_enable = false,  

> 

> 

> 

> >        .accl_fs = INV_MPU6050_FS_02G,  

> 

> 

> 

> >        .user_ctrl = 0,  

> 

> 

> 

> > @@ -856,19 +857,27 @@ static const struct iio_chan_spec_ext_info inv_ext_info[] = { 


> 

> 

> 

> >                .ext_info = inv_ext_info,                             \  

> 

> 

> 

> >        }  

> 

> 

> 

> >    

> 

> 

> 

> > +#define INV_MPU6050_TEMP_CHAN(_index)                                \  

> 

> 

> 

> > +     {                                                       \  

> 

> 

> 

> > +             .type = IIO_TEMP,                               \  

> 

> 

> 

> > +             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    \  

> 

> 

> 

> > +                             | BIT(IIO_CHAN_INFO_OFFSET)     \  

> 

> 

> 

> > +                             | BIT(IIO_CHAN_INFO_SCALE),     \  

> 

> 

> 

> > +             .scan_index = _index,                           \  

> 

> 

> 

> > +             .scan_type = {                                  \  

> 

> 

> 

> > +                     .sign = 's',                            \  

> 

> 

> 

> > +                     .realbits = 16,                         \  

> 

> 

> 

> > +                     .storagebits = 16,                      \  

> 

> 

> 

> > +                     .shift = 0,                             \  

> 

> 

> 

> > +                     .endianness = IIO_BE,                   \  

> 

> 

> 

> > +             },                                              \  

> 

> 

> 

> > +     }  

> 

> 

> 

> > +  

> 

> 

> 

> >  static const struct iio_chan_spec inv_mpu_channels[] = {  

> 

> 

> 

> >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),  

> 

> 

> 

> > -     /*  

> 

> 

> 

> > -      * Note that temperature should only be via polled reading only,  

> 

> 

> 

> > -      * not the final scan elements output.  

> 

> 

> 

> > -      */  

> 

> 

> 

> > -     {  

> 

> 

> 

> > -             .type = IIO_TEMP,  

> 

> 

> 

> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_SCALE),  

> 

> 

> 

> > -             .scan_index = -1,  

> 

> 

> 

> > -     },  

> 

> 

> 

> > +  

> 

> 

> 

> > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),  

> 

> 

> 

> > +  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),  

> 

> 

> 

> > @@ -878,22 +887,31 @@ static const struct iio_chan_spec inv_mpu_channels[] = { 


> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z),  

> 

> 

> 

> >  };  

> 

> 

> 

> >    

> 

> 

> 

> > +#define INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    \  

> 

> 

> 

> > +     (BIT(INV_MPU6050_SCAN_ACCL_X)           \  

> 

> 

> 

> > +     | BIT(INV_MPU6050_SCAN_ACCL_Y)          \  

> 

> 

> 

> > +     | BIT(INV_MPU6050_SCAN_ACCL_Z))  

> 

> 

> 

> > +  

> 

> 

> 

> > +#define INV_MPU6050_SCAN_MASK_3AXIS_GYRO     \  

> 

> 

> 

> > +     (BIT(INV_MPU6050_SCAN_GYRO_X)           \  

> 

> 

> 

> > +     | BIT(INV_MPU6050_SCAN_GYRO_Y)          \  

> 

> 

> 

> > +     | BIT(INV_MPU6050_SCAN_GYRO_Z))  

> 

> 

> 

> > +  

> 

> 

> 

> > +#define INV_MPU6050_SCAN_MASK_TEMP           (BIT(INV_MPU6050_SCAN_TEMP))  

> 

> 

> 

> > +  

> 

> 

> 

> > +/* generate scan mask and a duplicate with temperature enabled */  

> 

> 

> 

> > +#define INV_MPU6050_SCAN_MASK_DUP_TEMP(_mask)        \  

> 

> 

> 

> > +     (_mask),                                \  

> 

> 

> 

> > +     (_mask) | INV_MPU6050_SCAN_MASK_TEMP  

> 

> 

> 

> > +  

> 

> 

> 

> >  static const unsigned long inv_mpu_scan_masks[] = {  

> 

> 

> 

> >        /* 3-axis accel */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),  

> 

> 

> 

> >        /* 3-axis gyro */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  

> 

> 

> 

> >        /* 6-axis accel + gyro */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  

> 

> 

> 

> > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  

> 

> 

> 

> >        0,  

> 

> 

> 

> >  };  

> 

> 

> 

> >    

> 

> 

> 

> > @@ -917,17 +935,9 @@ static const unsigned long inv_mpu_scan_masks[] = {  

> 

> 

> 

> >    

> 

> 

> 

> >  static const struct iio_chan_spec inv_mpu9150_channels[] = {  

> 

> 

> 

> >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),  

> 

> 

> 

> > -     /*  

> 

> 

> 

> > -      * Note that temperature should only be via polled reading only,  

> 

> 

> 

> > -      * not the final scan elements output.  

> 

> 

> 

> > -      */  

> 

> 

> 

> > -     {  

> 

> 

> 

> > -             .type = IIO_TEMP,  

> 

> 

> 

> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_SCALE),  

> 

> 

> 

> > -             .scan_index = -1,  

> 

> 

> 

> > -     },  

> 

> 

> 

> > +  

> 

> 

> 

> > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),  

> 

> 

> 

> > +  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),  

> 

> 

> 

> > @@ -944,17 +954,9 @@ static const struct iio_chan_spec inv_mpu9150_channels[] = { 


> 

> 

> 

> >    

> 

> 

> 

> >  static const struct iio_chan_spec inv_mpu9250_channels[] = {  

> 

> 

> 

> >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),  

> 

> 

> 

> > -     /*  

> 

> 

> 

> > -      * Note that temperature should only be via polled reading only,  

> 

> 

> 

> > -      * not the final scan elements output.  

> 

> 

> 

> > -      */  

> 

> 

> 

> > -     {  

> 

> 

> 

> > -             .type = IIO_TEMP,  

> 

> 

> 

> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_SCALE),  

> 

> 

> 

> > -             .scan_index = -1,  

> 

> 

> 

> > -     },  

> 

> 

> 

> > +  

> 

> 

> 

> > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),  

> 

> 

> 

> > +  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),  

> 

> 

> 

> >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),  

> 

> 

> 

> > @@ -969,98 +971,42 @@ static const struct iio_chan_spec inv_mpu9250_channels[] = { 


> 

> 

> 

> >        INV_MPU9X50_MAGN_CHAN(IIO_MOD_Z, 16, INV_MPU9X50_SCAN_MAGN_Z),  

> 

> 

> 

> >  };  

> 

> 

> 

> >    

> 

> 

> 

> > +#define INV_MPU9X50_SCAN_MASK_3AXIS_MAGN     \  

> 

> 

> 

> > +     (BIT(INV_MPU9X50_SCAN_MAGN_X)           \  

> 

> 

> 

> > +     | BIT(INV_MPU9X50_SCAN_MAGN_Y)          \  

> 

> 

> 

> > +     | BIT(INV_MPU9X50_SCAN_MAGN_Z))  

> 

> 

> 

> > +  

> 

> 

> 

> >  static const unsigned long inv_mpu9x50_scan_masks[] = {  

> 

> 

> 

> >        /* 3-axis accel */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),  

> 

> 

> 

> >        /* 3-axis gyro */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  

> 

> 

> 

> >        /* 3-axis magn */  

> 

> 

> 

> > -     BIT(INV_MPU9X50_SCAN_MAGN_X)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  

> 

> 

> 

> >        /* 6-axis accel + gyro */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  

> 

> 

> 

> > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),  

> 

> 

> 

> >        /* 6-axis accel + magn */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  

> 

> 

> 

> > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  

> 

> 

> 

> >        /* 6-axis gyro + magn */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO  

> 

> 

> 

> > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  

> 

> 

> 

> >        /* 9-axis accel + gyro + magn */  

> 

> 

> 

> > -     BIT(INV_MPU6050_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU6050_SCAN_GYRO_Z)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)  

> 

> 

> 

> > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL  

> 

> 

> 

> > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO  

> 

> 

> 

> > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),  

> 

> 

> 

> >        0,  

> 

> 

> 

> >  };  

> 

> 

> 

> >    

> 

> 

> 

> > -static const struct iio_chan_spec inv_icm20602_channels[] = {  

> 

> 

> 

> > -     IIO_CHAN_SOFT_TIMESTAMP(INV_ICM20602_SCAN_TIMESTAMP),  

> 

> 

> 

> > -     {  

> 

> 

> 

> > -             .type = IIO_TEMP,  

> 

> 

> 

> > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_OFFSET)  

> 

> 

> 

> > -                             | BIT(IIO_CHAN_INFO_SCALE),  

> 

> 

> 

> > -             .scan_index = INV_ICM20602_SCAN_TEMP,  

> 

> 

> 

> > -             .scan_type = {  

> 

> 

> 

> > -                             .sign = 's',  

> 

> 

> 

> > -                             .realbits = 16,  

> 

> 

> 

> > -                             .storagebits = 16,  

> 

> 

> 

> > -                             .shift = 0,  

> 

> 

> 

> > -                             .endianness = IIO_BE,  

> 

> 

> 

> > -                          },  

> 

> 

> 

> > -     },  

> 

> 

> 

> > -  

> 

> 

> 

> > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_ICM20602_SCAN_GYRO_X),  

> 

> 

> 

> > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_ICM20602_SCAN_GYRO_Y),  

> 

> 

> 

> > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_ICM20602_SCAN_GYRO_Z),  

> 

> 

> 

> > -  

> 

> 

> 

> > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Y, INV_ICM20602_SCAN_ACCL_Y),  

> 

> 

> 

> > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_X, INV_ICM20602_SCAN_ACCL_X),  

> 

> 

> 

> > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_ICM20602_SCAN_ACCL_Z),  

> 

> 

> 

> > -};  

> 

> 

> 

> > -  

> 

> 

> 

> >  static const unsigned long inv_icm20602_scan_masks[] = {  

> 

> 

> 

> >        /* 3-axis accel + temp (mandatory) */  

> 

> 

> 

> > -     BIT(INV_ICM20602_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_ACCL_Z)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_TEMP),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_TEMP,  

> 

> 

> 

> >        /* 3-axis gyro + temp (mandatory) */  

> 

> 

> 

> > -     BIT(INV_ICM20602_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_GYRO_Z)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_TEMP),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_3AXIS_GYRO | INV_MPU6050_SCAN_MASK_TEMP,  

> 

> 

> 

> >        /* 6-axis accel + gyro + temp (mandatory) */  

> 

> 

> 

> > -     BIT(INV_ICM20602_SCAN_ACCL_X)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_ACCL_Y)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_ACCL_Z)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_GYRO_X)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_GYRO_Y)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_GYRO_Z)  

> 

> 

> 

> > -             | BIT(INV_ICM20602_SCAN_TEMP),  

> 

> 

> 

> > +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_3AXIS_GYRO  

> 

> 

> 

> > +                     | INV_MPU6050_SCAN_MASK_TEMP,  

> 

> 

> 

> >        0,  

> 

> 

> 

> >  };  

> 

> 

> 

> >    

> 

> 

> 

> > @@ -1363,8 +1309,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name, 


> 

> 

> 

> >                indio_dev->available_scan_masks = inv_mpu9x50_scan_masks;  

> 

> 

> 

> >                break;  

> 

> 

> 

> >        case INV_ICM20602:  

> 

> 

> 

> > -             indio_dev->channels = inv_icm20602_channels;  

> 

> 

> 

> > -             indio_dev->num_channels = ARRAY_SIZE(inv_icm20602_channels);  

> 

> 

> 

> > +             indio_dev->channels = inv_mpu_channels;  

> 

> 

> 

> > +             indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels);  

> 

> 

> 

> >                indio_dev->available_scan_masks = inv_icm20602_scan_masks;  

> 

> 

> 

> >                break;  

> 

> 

> 

> >        default:  

> 

> 

> 

> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h 


> 

> 

> 

> > index b096e010d4ee..6158fca7f70e 100644  

> 

> 

> 

> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  

> 

> 

> 

> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  

> 

> 

> 

> > @@ -86,6 +86,7 @@ enum inv_devices {  

> 

> 

> 

> >   *  @accl_fs:                accel full scale range.  

> 

> 

> 

> >   *  @accl_fifo_enable:       enable accel data output  

> 

> 

> 

> >   *  @gyro_fifo_enable:       enable gyro data output  

> 

> 

> 

> > + *  @temp_fifo_enable:       enable temp data output  

> 

> 

> 

> >   *  @magn_fifo_enable:       enable magn data output  

> 

> 

> 

> >   *  @divider:                chip sample rate divider (sample rate divider - 1) 


> 

> 

> 

> >   */  

> 

> 

> 

> > @@ -95,6 +96,7 @@ struct inv_mpu6050_chip_config {  

> 

> 

> 

> >        unsigned int accl_fs:2;  

> 

> 

> 

> >        unsigned int accl_fifo_enable:1;  

> 

> 

> 

> >        unsigned int gyro_fifo_enable:1;  

> 

> 

> 

> > +     unsigned int temp_fifo_enable:1;  

> 

> 

> 

> >        unsigned int magn_fifo_enable:1;  

> 

> 

> 

> >        u8 divider;  

> 

> 

> 

> >        u8 user_ctrl;  

> 

> 

> 

> > @@ -184,6 +186,7 @@ struct inv_mpu6050_state {  

> 

> 

> 

> >  #define INV_MPU6050_BIT_SLAVE_2             0x04  

> 

> 

> 

> >  #define INV_MPU6050_BIT_ACCEL_OUT           0x08  

> 

> 

> 

> >  #define INV_MPU6050_BITS_GYRO_OUT           0x70  

> 

> 

> 

> > +#define INV_MPU6050_BIT_TEMP_OUT            0x80  

> 

> 

> 

> >    

> 

> 

> 

> >  #define INV_MPU6050_REG_I2C_MST_CTRL        0x24  

> 

> 

> 

> >  #define INV_MPU6050_BITS_I2C_MST_CLK_400KHZ 0x0D  

> 

> 

> 

> > @@ -268,8 +271,8 @@ struct inv_mpu6050_state {  

> 

> 

> 

> >  /* MPU9X50 9-axis magnetometer */  

> 

> 

> 

> >  #define INV_MPU9X50_BYTES_MAGN               7  

> 

> 

> 

> >    

> 

> 

> 

> > -/* ICM20602 FIFO samples include temperature readings */  

> 

> 

> 

> > -#define INV_ICM20602_BYTES_PER_TEMP_SENSOR   2  

> 

> 

> 

> > +/* FIFO temperature sample size */  

> 

> 

> 

> > +#define INV_MPU6050_BYTES_PER_TEMP_SENSOR   2  

> 

> 

> 

> >    

> 

> 

> 

> >  /* mpu6500 registers */  

> 

> 

> 

> >  #define INV_MPU6500_REG_ACCEL_CONFIG_2      0x1D  

> 

> 

> 

> > @@ -298,7 +301,7 @@ struct inv_mpu6050_state {  

> 

> 

> 

> >  #define INV_ICM20608_TEMP_OFFSET          8170  

> 

> 

> 

> >  #define INV_ICM20608_TEMP_SCALE                   3059976  

> 

> 

> 

> >    

> 

> 

> 

> > -/* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */  

> 

> 

> 

> > +/* 6 + 6 + 2 + 7 (for MPU9x50) = 21 round up to 24 and plus 8 */  

> 

> 

> 

> >  #define INV_MPU6050_OUTPUT_DATA_SIZE         32  

> 

> 

> 

> >    

> 

> 

> 

> >  #define INV_MPU6050_REG_INT_PIN_CFG  0x37  

> 

> 

> 

> > @@ -344,6 +347,7 @@ enum inv_mpu6050_scan {  

> 

> 

> 

> >        INV_MPU6050_SCAN_ACCL_X,  

> 

> 

> 

> >        INV_MPU6050_SCAN_ACCL_Y,  

> 

> 

> 

> >        INV_MPU6050_SCAN_ACCL_Z,  

> 

> 

> 

> > +     INV_MPU6050_SCAN_TEMP,  

> 

> 

> 

> >        INV_MPU6050_SCAN_GYRO_X,  

> 

> 

> 

> >        INV_MPU6050_SCAN_GYRO_Y,  

> 

> 

> 

> >        INV_MPU6050_SCAN_GYRO_Z,  

> 

> 

> 

> > @@ -355,18 +359,6 @@ enum inv_mpu6050_scan {  

> 

> 

> 

> >        INV_MPU9X50_SCAN_TIMESTAMP,  

> 

> 

> 

> >  };  

> 

> 

> 

> >    

> 

> 

> 

> > -/* scan element definition for ICM20602, which includes temperature */  

> 

> 

> 

> > -enum inv_icm20602_scan {  

> 

> 

> 

> > -     INV_ICM20602_SCAN_ACCL_X,  

> 

> 

> 

> > -     INV_ICM20602_SCAN_ACCL_Y,  

> 

> 

> 

> > -     INV_ICM20602_SCAN_ACCL_Z,  

> 

> 

> 

> > -     INV_ICM20602_SCAN_TEMP,  

> 

> 

> 

> > -     INV_ICM20602_SCAN_GYRO_X,  

> 

> 

> 

> > -     INV_ICM20602_SCAN_GYRO_Y,  

> 

> 

> 

> > -     INV_ICM20602_SCAN_GYRO_Z,  

> 

> 

> 

> > -     INV_ICM20602_SCAN_TIMESTAMP,  

> 

> 

> 

> > -};  

> 

> 

> 

> > -  

> 

> 

> 

> >  enum inv_mpu6050_filter_e {  

> 

> 

> 

> >        INV_MPU6050_FILTER_256HZ_NOLPF2 = 0,  

> 

> 

> 

> >        INV_MPU6050_FILTER_188HZ,  

> 

> 

> 

> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c 


> 

> 

> 

> > index 10d16ec5104b..3755577dc449 100644  

> 

> 

> 

> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c  

> 

> 

> 

> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c  

> 

> 

> 

> > @@ -142,6 +142,8 @@ int inv_reset_fifo(struct iio_dev *indio_dev)  

> 

> 

> 

> >                d |= INV_MPU6050_BITS_GYRO_OUT;  

> 

> 

> 

> >        if (st->chip_config.accl_fifo_enable)  

> 

> 

> 

> >                d |= INV_MPU6050_BIT_ACCEL_OUT;  

> 

> 

> 

> > +     if (st->chip_config.temp_fifo_enable)  

> 

> 

> 

> > +             d |= INV_MPU6050_BIT_TEMP_OUT;  

> 

> 

> 

> >        if (st->chip_config.magn_fifo_enable)  

> 

> 

> 

> >                d |= INV_MPU6050_BIT_SLAVE_0;  

> 

> 

> 

> >        result = regmap_write(st->map, st->reg->fifo_en, d);  

> 

> 

> 

> > @@ -200,8 +202,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)  

> 

> 

> 

> >        if (st->chip_config.gyro_fifo_enable)  

> 

> 

> 

> >                bytes_per_datum += INV_MPU6050_BYTES_PER_3AXIS_SENSOR;  

> 

> 

> 

> >    

> 

> 

> 

> > -     if (st->chip_type == INV_ICM20602)  

> 

> 

> 

> > -             bytes_per_datum += INV_ICM20602_BYTES_PER_TEMP_SENSOR;  

> 

> 

> 

> > +     if (st->chip_config.temp_fifo_enable)  

> 

> 

> 

> > +             bytes_per_datum += INV_MPU6050_BYTES_PER_TEMP_SENSOR;  

> 

> 

> 

> >    

> 

> 

> 

> >        if (st->chip_config.magn_fifo_enable)  

> 

> 

> 

> >                bytes_per_datum += INV_MPU9X50_BYTES_MAGN;  

> 

> 

> 

> > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c 


> 

> 

> 

> > index a9c75bc62f18..5199fe790c30 100644  

> 

> 

> 

> > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c  

> 

> 

> 

> > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c  

> 

> 

> 

> > @@ -24,6 +24,9 @@ static void inv_scan_query_mpu6050(struct iio_dev *indio_dev) 


> 

> 

> 

> >                         indio_dev->active_scan_mask) ||  

> 

> 

> 

> >                test_bit(INV_MPU6050_SCAN_ACCL_Z,  

> 

> 

> 

> >                         indio_dev->active_scan_mask);  

> 

> 

> 

> > +  

> 

> 

> 

> > +     st->chip_config.temp_fifo_enable =  

> 

> 

> 

> > +             test_bit(INV_MPU6050_SCAN_TEMP, indio_dev->active_scan_mask);  

> 

> 

> 

> >  }  

> 

> 

> 

> >    

> 

> 

> 

> >  static void inv_scan_query_mpu9x50(struct iio_dev *indio_dev)  

> 

> 

> 

> 

> 

> 

> 




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
  2020-01-14  9:22           ` Jean-Baptiste Maneyrol
@ 2020-01-18 11:10             ` Jonathan Cameron
  0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2020-01-18 11:10 UTC (permalink / raw)
  To: Jean-Baptiste Maneyrol; +Cc: linux-iio

On Tue, 14 Jan 2020 09:22:59 +0000
Jean-Baptiste Maneyrol <JManeyrol@invensense.com> wrote:

> Hi Jonathan,
> 
> a kind reminder about this patch still waiting. Now testing branch is ready for it to be applied.
> 
> I've got a good number of other patches just waiting for this one to be accepted before sending.
Applied to the togreg branch of iio.git and pushed out as testing.

For some reason I got confused and thought there was still a question on patch 1
so kept ignoring patch 2 despite having applied patch 1.

Sorry about that.

Jonathan

> 
> Thanks,
> JB
> 
> 
> From: Jonathan Cameron <jic23@kernel.org>
> 
> Sent: Monday, December 30, 2019 17:26
> 
> To: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>
> 
> Cc: linux-iio <linux-iio@vger.kernel.org>
> 
> Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support
> 
>  
> 
> 
>  CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> 
> 
> On Tue, 24 Dec 2019 09:17:05 +0000
> 
> Jean-Baptiste Maneyrol <JManeyrol@invensense.com> wrote:
> 
> 
> 
> > Hi Jonathan,  
> 
> >   
> 
> > any news about my 2nd patch ("[PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support") now that the 1st is included inside fixes-togreg branch?  
> 
> >   
> 
> > The 1st one is still not yet available inside testing branch.  
> 
> > Should I resend it now or wait for testing to be in sync with fixes-togreg?  
> 
> I have it flagged in my email so in theory at least I will grab it
> 
> without a resend.  I think I'll do a pull request for togreg later this
> 
> week and after that I should be fine applying this.
> 
> 
> 
> Things got a bit slowed down for the holidays :)  Too easy to put
> 
> things off to tomorrow!
> 
> 
> 
> Jonathan
> 
> 
> 
> >   
> 
> > Thanks,  
> 
> > JB  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > From: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>  
> 
> >   
> 
> > Sent: Monday, December 2, 2019 14:50  
> 
> >   
> 
> > To: Jonathan Cameron <jic23@kernel.org>  
> 
> >   
> 
> > Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support  
> 
> >   
> 
> >    
> 
> >   
> 
> >   
> 
> > Hi Jonathan,  
> 
> >   
> 
> >   
> 
> >   
> 
> > just a reminder for not forgetting this patch now that the first is in fixes-togreg branch.  
> 
> >   
> 
> >   
> 
> >   
> 
> > Thanks,  
> 
> >   
> 
> > JB  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > From: Jonathan Cameron <jic23@kernel.org>  
> 
> >   
> 
> >   
> 
> >   
> 
> > Sent: Saturday, November 23, 2019 17:22  
> 
> >   
> 
> >   
> 
> >   
> 
> > To: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>  
> 
> >   
> 
> >   
> 
> >   
> 
> > Cc: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>  
> 
> >   
> 
> >   
> 
> >   
> 
> > Subject: Re: [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support  
> 
> >   
> 
> >   
> 
> >   
> 
> >    
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >  CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > On Mon, 18 Nov 2019 11:34:06 +0100  
> 
> >   
> 
> >   
> 
> >   
> 
> > Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> wrote:  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > > Add support of temperature data in fifo for all chips.    
> 
> >   
> 
> >   
> 
> >   
> 
> > > Enable unification of scan elements for icm20602.    
> 
> >   
> 
> >   
> 
> >   
> 
> > > Add macros for generating scan elements with and without temp.    
> 
> >   
> 
> >   
> 
> >   
> 
> > >     
> 
> >   
> 
> >   
> 
> >   
> 
> > > Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>    
> 
> >   
> 
> >   
> 
> >   
> 
> > Looks fine to me. I'll pick up once we've worked out what  
> 
> >   
> 
> >   
> 
> >   
> 
> > we are doing with patch 1.  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > Remind me if I seem to have lost it.  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > Thanks,  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > Jonathan  
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> > > ---    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    | 194 +++++++-----------    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h     |  22 +-    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    |   6 +-    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c |   3 +    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  4 files changed, 84 insertions(+), 141 deletions(-)    
> 
> >   
> 
> >   
> 
> >   
> 
> > >     
> 
> >   
> 
> >   
> 
> >   
> 
> > > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > > index 268240644adf..7c2f6951364d 100644    
> 
> >   
> 
> >   
> 
> >   
> 
> > > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -104,6 +104,7 @@ static const struct inv_mpu6050_chip_config chip_config_6050 = {   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >        .divider = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE),   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >        .gyro_fifo_enable = false,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        .accl_fifo_enable = false,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     .temp_fifo_enable = false,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        .magn_fifo_enable = false,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        .accl_fs = INV_MPU6050_FS_02G,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        .user_ctrl = 0,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -856,19 +857,27 @@ static const struct iio_chan_spec_ext_info inv_ext_info[] = {   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >                .ext_info = inv_ext_info,                             \    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        }    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU6050_TEMP_CHAN(_index)                                \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     {                                                       \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             .type = IIO_TEMP,                               \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                             | BIT(IIO_CHAN_INFO_OFFSET)     \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                             | BIT(IIO_CHAN_INFO_SCALE),     \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             .scan_index = _index,                           \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             .scan_type = {                                  \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     .sign = 's',                            \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     .realbits = 16,                         \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     .storagebits = 16,                      \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     .shift = 0,                             \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     .endianness = IIO_BE,                   \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             },                                              \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     }    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  static const struct iio_chan_spec inv_mpu_channels[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     /*    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      * Note that temperature should only be via polled reading only,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      * not the final scan elements output.    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     {    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .type = IIO_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_OFFSET)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_SCALE),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .scan_index = -1,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     },    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -878,22 +887,31 @@ static const struct iio_chan_spec inv_mpu_channels[] = {   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  };    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     (BIT(INV_MPU6050_SCAN_ACCL_X)           \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     | BIT(INV_MPU6050_SCAN_ACCL_Y)          \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     | BIT(INV_MPU6050_SCAN_ACCL_Z))    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU6050_SCAN_MASK_3AXIS_GYRO     \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     (BIT(INV_MPU6050_SCAN_GYRO_X)           \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     | BIT(INV_MPU6050_SCAN_GYRO_Y)          \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     | BIT(INV_MPU6050_SCAN_GYRO_Z))    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU6050_SCAN_MASK_TEMP           (BIT(INV_MPU6050_SCAN_TEMP))    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +/* generate scan mask and a duplicate with temperature enabled */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU6050_SCAN_MASK_DUP_TEMP(_mask)        \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     (_mask),                                \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     (_mask) | INV_MPU6050_SCAN_MASK_TEMP    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  static const unsigned long inv_mpu_scan_masks[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 3-axis accel */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 3-axis gyro */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 6-axis accel + gyro */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        0,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  };    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -917,17 +935,9 @@ static const unsigned long inv_mpu_scan_masks[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > >  static const struct iio_chan_spec inv_mpu9150_channels[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     /*    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      * Note that temperature should only be via polled reading only,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      * not the final scan elements output.    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     {    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .type = IIO_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_OFFSET)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_SCALE),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .scan_index = -1,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     },    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -944,17 +954,9 @@ static const struct iio_chan_spec inv_mpu9150_channels[] = {   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > >  static const struct iio_chan_spec inv_mpu9250_channels[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU9X50_SCAN_TIMESTAMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     /*    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      * Note that temperature should only be via polled reading only,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      * not the final scan elements output.    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -      */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     {    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .type = IIO_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_OFFSET)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_SCALE),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .scan_index = -1,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     },    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_TEMP_CHAN(INV_MPU6050_SCAN_TEMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -969,98 +971,42 @@ static const struct iio_chan_spec inv_mpu9250_channels[] = {   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU9X50_MAGN_CHAN(IIO_MOD_Z, 16, INV_MPU9X50_SCAN_MAGN_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  };    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU9X50_SCAN_MASK_3AXIS_MAGN     \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     (BIT(INV_MPU9X50_SCAN_MAGN_X)           \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     | BIT(INV_MPU9X50_SCAN_MAGN_Y)          \    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     | BIT(INV_MPU9X50_SCAN_MAGN_Z))    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  static const unsigned long inv_mpu9x50_scan_masks[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 3-axis accel */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 3-axis gyro */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 3-axis magn */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU9X50_SCAN_MAGN_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 6-axis accel + gyro */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 6-axis accel + magn */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 6-axis gyro + magn */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_GYRO    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 9-axis accel + gyro + magn */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_MPU6050_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_ACCL_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU6050_SCAN_GYRO_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_MPU9X50_SCAN_MAGN_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_DUP_TEMP(INV_MPU6050_SCAN_MASK_3AXIS_ACCEL    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     | INV_MPU6050_SCAN_MASK_3AXIS_GYRO    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     | INV_MPU9X50_SCAN_MASK_3AXIS_MAGN),    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        0,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  };    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > -static const struct iio_chan_spec inv_icm20602_channels[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     IIO_CHAN_SOFT_TIMESTAMP(INV_ICM20602_SCAN_TIMESTAMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     {    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .type = IIO_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_OFFSET)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             | BIT(IIO_CHAN_INFO_SCALE),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .scan_index = INV_ICM20602_SCAN_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             .scan_type = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             .sign = 's',    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             .realbits = 16,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             .storagebits = 16,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             .shift = 0,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                             .endianness = IIO_BE,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -                          },    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     },    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_ICM20602_SCAN_GYRO_X),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_ICM20602_SCAN_GYRO_Y),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_ICM20602_SCAN_GYRO_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Y, INV_ICM20602_SCAN_ACCL_Y),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_X, INV_ICM20602_SCAN_ACCL_X),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_ICM20602_SCAN_ACCL_Z),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -};    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  static const unsigned long inv_icm20602_scan_masks[] = {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 3-axis accel + temp (mandatory) */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_ICM20602_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_ACCL_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_TEMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 3-axis gyro + temp (mandatory) */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_ICM20602_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_GYRO_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_TEMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_3AXIS_GYRO | INV_MPU6050_SCAN_MASK_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        /* 6-axis accel + gyro + temp (mandatory) */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     BIT(INV_ICM20602_SCAN_ACCL_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_ACCL_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_ACCL_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_GYRO_X)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_GYRO_Y)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_GYRO_Z)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             | BIT(INV_ICM20602_SCAN_TEMP),    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_MASK_3AXIS_ACCEL | INV_MPU6050_SCAN_MASK_3AXIS_GYRO    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +                     | INV_MPU6050_SCAN_MASK_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        0,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  };    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -1363,8 +1309,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >                indio_dev->available_scan_masks = inv_mpu9x50_scan_masks;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                break;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        case INV_ICM20602:    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             indio_dev->channels = inv_icm20602_channels;    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             indio_dev->num_channels = ARRAY_SIZE(inv_icm20602_channels);    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             indio_dev->channels = inv_mpu_channels;    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels);    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                indio_dev->available_scan_masks = inv_icm20602_scan_masks;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                break;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        default:    
> 
> >   
> 
> >   
> 
> >   
> 
> > > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > > index b096e010d4ee..6158fca7f70e 100644    
> 
> >   
> 
> >   
> 
> >   
> 
> > > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -86,6 +86,7 @@ enum inv_devices {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >   *  @accl_fs:                accel full scale range.    
> 
> >   
> 
> >   
> 
> >   
> 
> > >   *  @accl_fifo_enable:       enable accel data output    
> 
> >   
> 
> >   
> 
> >   
> 
> > >   *  @gyro_fifo_enable:       enable gyro data output    
> 
> >   
> 
> >   
> 
> >   
> 
> > > + *  @temp_fifo_enable:       enable temp data output    
> 
> >   
> 
> >   
> 
> >   
> 
> > >   *  @magn_fifo_enable:       enable magn data output    
> 
> >   
> 
> >   
> 
> >   
> 
> > >   *  @divider:                chip sample rate divider (sample rate divider - 1)   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >   */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -95,6 +96,7 @@ struct inv_mpu6050_chip_config {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        unsigned int accl_fs:2;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        unsigned int accl_fifo_enable:1;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        unsigned int gyro_fifo_enable:1;    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     unsigned int temp_fifo_enable:1;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        unsigned int magn_fifo_enable:1;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        u8 divider;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        u8 user_ctrl;    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -184,6 +186,7 @@ struct inv_mpu6050_state {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6050_BIT_SLAVE_2             0x04    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6050_BIT_ACCEL_OUT           0x08    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6050_BITS_GYRO_OUT           0x70    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU6050_BIT_TEMP_OUT            0x80    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6050_REG_I2C_MST_CTRL        0x24    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6050_BITS_I2C_MST_CLK_400KHZ 0x0D    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -268,8 +271,8 @@ struct inv_mpu6050_state {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  /* MPU9X50 9-axis magnetometer */    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU9X50_BYTES_MAGN               7    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > -/* ICM20602 FIFO samples include temperature readings */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -#define INV_ICM20602_BYTES_PER_TEMP_SENSOR   2    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +/* FIFO temperature sample size */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +#define INV_MPU6050_BYTES_PER_TEMP_SENSOR   2    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > >  /* mpu6500 registers */    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6500_REG_ACCEL_CONFIG_2      0x1D    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -298,7 +301,7 @@ struct inv_mpu6050_state {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_ICM20608_TEMP_OFFSET          8170    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_ICM20608_TEMP_SCALE                   3059976    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > -/* 6 + 6 + 7 (for MPU9x50) = 19 round up to 24 and plus 8 */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +/* 6 + 6 + 2 + 7 (for MPU9x50) = 21 round up to 24 and plus 8 */    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6050_OUTPUT_DATA_SIZE         32    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > >  #define INV_MPU6050_REG_INT_PIN_CFG  0x37    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -344,6 +347,7 @@ enum inv_mpu6050_scan {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_SCAN_ACCL_X,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_SCAN_ACCL_Y,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_SCAN_ACCL_Z,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     INV_MPU6050_SCAN_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_SCAN_GYRO_X,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_SCAN_GYRO_Y,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_SCAN_GYRO_Z,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -355,18 +359,6 @@ enum inv_mpu6050_scan {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU9X50_SCAN_TIMESTAMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  };    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > -/* scan element definition for ICM20602, which includes temperature */    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -enum inv_icm20602_scan {    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_ACCL_X,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_ACCL_Y,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_ACCL_Z,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_TEMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_GYRO_X,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_GYRO_Y,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_GYRO_Z,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     INV_ICM20602_SCAN_TIMESTAMP,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -};    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  enum inv_mpu6050_filter_e {    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_FILTER_256HZ_NOLPF2 = 0,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        INV_MPU6050_FILTER_188HZ,    
> 
> >   
> 
> >   
> 
> >   
> 
> > > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > > index 10d16ec5104b..3755577dc449 100644    
> 
> >   
> 
> >   
> 
> >   
> 
> > > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -142,6 +142,8 @@ int inv_reset_fifo(struct iio_dev *indio_dev)    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                d |= INV_MPU6050_BITS_GYRO_OUT;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        if (st->chip_config.accl_fifo_enable)    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                d |= INV_MPU6050_BIT_ACCEL_OUT;    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     if (st->chip_config.temp_fifo_enable)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             d |= INV_MPU6050_BIT_TEMP_OUT;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        if (st->chip_config.magn_fifo_enable)    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                d |= INV_MPU6050_BIT_SLAVE_0;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        result = regmap_write(st->map, st->reg->fifo_en, d);    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -200,8 +202,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)    
> 
> >   
> 
> >   
> 
> >   
> 
> > >        if (st->chip_config.gyro_fifo_enable)    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                bytes_per_datum += INV_MPU6050_BYTES_PER_3AXIS_SENSOR;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > > -     if (st->chip_type == INV_ICM20602)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > -             bytes_per_datum += INV_ICM20602_BYTES_PER_TEMP_SENSOR;    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     if (st->chip_config.temp_fifo_enable)    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             bytes_per_datum += INV_MPU6050_BYTES_PER_TEMP_SENSOR;    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > >        if (st->chip_config.magn_fifo_enable)    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                bytes_per_datum += INV_MPU9X50_BYTES_MAGN;    
> 
> >   
> 
> >   
> 
> >   
> 
> > > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > > index a9c75bc62f18..5199fe790c30 100644    
> 
> >   
> 
> >   
> 
> >   
> 
> > > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c    
> 
> >   
> 
> >   
> 
> >   
> 
> > > @@ -24,6 +24,9 @@ static void inv_scan_query_mpu6050(struct iio_dev *indio_dev)   
> 
> 
> >   
> 
> >   
> 
> >   
> 
> > >                         indio_dev->active_scan_mask) ||    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                test_bit(INV_MPU6050_SCAN_ACCL_Z,    
> 
> >   
> 
> >   
> 
> >   
> 
> > >                         indio_dev->active_scan_mask);    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +     st->chip_config.temp_fifo_enable =    
> 
> >   
> 
> >   
> 
> >   
> 
> > > +             test_bit(INV_MPU6050_SCAN_TEMP, indio_dev->active_scan_mask);    
> 
> >   
> 
> >   
> 
> >   
> 
> > >  }    
> 
> >   
> 
> >   
> 
> >   
> 
> > >      
> 
> >   
> 
> >   
> 
> >   
> 
> > >  static void inv_scan_query_mpu9x50(struct iio_dev *indio_dev)    
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> >   
> 
> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-01-18 11:10 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-18 10:34 [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit Jean-Baptiste Maneyrol
2019-11-18 10:34 ` [PATCH 2/2] iio: imu: inv_mpu6050: add fifo temperature data support Jean-Baptiste Maneyrol
2019-11-23 16:22   ` Jonathan Cameron
     [not found]     ` <MN2PR12MB33739BF5EA2C9E402EDF4684C4430@MN2PR12MB3373.namprd12.prod.outlook.com>
2019-12-24  9:17       ` Jean-Baptiste Maneyrol
2019-12-30 16:26         ` Jonathan Cameron
2020-01-14  9:22           ` Jean-Baptiste Maneyrol
2020-01-18 11:10             ` Jonathan Cameron
2019-11-23 16:18 ` [PATCH 1/2] iio: imu: inv_mpu6050: fix temperature reporting using bad unit Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.