Skip to contentSkip to conversation

iio: imu: Add mpu9255 support to mpu6050 driver

PATCH In review Douglas Fischer 3 participants 4 messages Apr 2, 2018 – Apr 15, 2018

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 iio: imu: Add mpu9255 support to mpu6050 driver

Added support for the mpu9255 IMU to the mpu6050 driver. The register map is the same as the other chips; the only driver difference is the compatible string and the WHOAMI register value.

---

Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt +1 -0
diff -uprN linux-4.16.orig/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt linux-4.16/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt
@@ -8,6 +8,7 @@ Required properties:
  		"invensense,mpu6500"
 		"invensense,mpu9150"
 		"invensense,mpu9250"
+		"invensense,mpu9255"
 		"invensense,icm20608"
  - reg : the I2C address of the sensor
  - interrupt-parent : should be the phandle for the interrupt controller
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +6 -0
diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -121,6 +121,12 @@ static const struct inv_mpu6050_hw hw_in
 		.config = &chip_config_6050,
 	},
 	{
+		.whoami = INV_MPU9255_WHOAMI_VALUE,
+		.name = "MPU9255",
+		.reg = &reg_set_6500,
+		.config = &chip_config_6050,
+	},
+	{
 		.whoami = INV_ICM20608_WHOAMI_VALUE,
 		.name = "ICM20608",
 		.reg = &reg_set_6500,
drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c +5 -0
diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c
@@ -179,6 +179,7 @@ static const struct i2c_device_id inv_mp
 	{"mpu6500", INV_MPU6500},
 	{"mpu9150", INV_MPU9150},
 	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
 	{"icm20608", INV_ICM20608},
 	{}
 };
@@ -203,6 +204,10 @@ static const struct of_device_id inv_of_
 		.data = (void *)INV_MPU9250
 	},
 	{
+		.compatible = "invensense,mpu9255",
+		.data = (void *)INV_MPU9255
+	},
+	{
 		.compatible = "invensense,icm20608",
 		.data = (void *)INV_ICM20608
 	},
drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h +2 -0
diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
@@ -74,6 +74,7 @@ enum inv_devices {
 	INV_MPU6000,
 	INV_MPU9150,
 	INV_MPU9250,
+	INV_MPU9255,
 	INV_ICM20608,
 	INV_NUM_PARTS
 };
@@ -232,6 +233,7 @@ struct inv_mpu6050_state {
 #define INV_MPU6500_WHOAMI_VALUE		0x70
 #define INV_MPU9150_WHOAMI_VALUE		0x68
 #define INV_MPU9250_WHOAMI_VALUE		0x71
+#define INV_MPU9255_WHOAMI_VALUE		0x73
 #define INV_ICM20608_WHOAMI_VALUE		0xAF
 
 /* scan element definition */
drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c +1 -0
diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c
@@ -83,6 +83,7 @@ static const struct spi_device_id inv_mp
 	{"mpu6500", INV_MPU6500},
 	{"mpu9150", INV_MPU9150},
 	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
 	{"icm20608", INV_ICM20608},
 	{}
 };
maintainer
#1 lore raw
Quoted 6 lines · On Mon, 2 Apr 2018 18:42:00 -0400 Douglas Fischer <[email protected]>…

Added support for the mpu9255 IMU to the mpu6050 driver. The register map is the same as the other chips; the only driver difference is the compatible string and the WHOAMI register value.

Looks good to me. I'd like to give some time for Jean-Baptiste/others to confirm they are happy with this as well though.

Give me a bump if I seem to have lost it in a couple of weeks time.

Thanks. It's interesting to note that all the manufacturer's interfaces finally seem to be stabilizing across generations. The days of large changes every version seem to finally be behind us.

Jonathan

Quoted 85 lines

---

diff -uprN linux-4.16.orig/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt linux-4.16/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt

Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt +1 -0
@@ -8,6 +8,7 @@ Required properties:
  		"invensense,mpu6500"
 		"invensense,mpu9150"
 		"invensense,mpu9250"
+		"invensense,mpu9255"
 		"invensense,icm20608"
  - reg : the I2C address of the sensor
  - interrupt-parent : should be the phandle for the interrupt controller

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c

drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +6 -0
@@ -121,6 +121,12 @@ static const struct inv_mpu6050_hw hw_in
 		.config = &chip_config_6050,
 	},
 	{
+		.whoami = INV_MPU9255_WHOAMI_VALUE,
+		.name = "MPU9255",
+		.reg = &reg_set_6500,
+		.config = &chip_config_6050,
+	},
+	{
 		.whoami = INV_ICM20608_WHOAMI_VALUE,
 		.name = "ICM20608",
 		.reg = &reg_set_6500,

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c

drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c +5 -0
@@ -179,6 +179,7 @@ static const struct i2c_device_id inv_mp
 	{"mpu6500", INV_MPU6500},
 	{"mpu9150", INV_MPU9150},
 	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
 	{"icm20608", INV_ICM20608},
 	{}
 };
@@ -203,6 +204,10 @@ static const struct of_device_id inv_of_
 		.data = (void *)INV_MPU9250
 	},
 	{
+		.compatible = "invensense,mpu9255",
+		.data = (void *)INV_MPU9255
+	},
+	{
 		.compatible = "invensense,icm20608",
 		.data = (void *)INV_ICM20608
 	},

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h

drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h +2 -0
@@ -74,6 +74,7 @@ enum inv_devices {
 	INV_MPU6000,
 	INV_MPU9150,
 	INV_MPU9250,
+	INV_MPU9255,
 	INV_ICM20608,
 	INV_NUM_PARTS
 };
@@ -232,6 +233,7 @@ struct inv_mpu6050_state {
 #define INV_MPU6500_WHOAMI_VALUE		0x70
 #define INV_MPU9150_WHOAMI_VALUE		0x68
 #define INV_MPU9250_WHOAMI_VALUE		0x71
+#define INV_MPU9255_WHOAMI_VALUE		0x73
 #define INV_ICM20608_WHOAMI_VALUE		0xAF
 
 /* scan element definition */

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c

drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c +1 -1
@@ -83,6 +83,7 @@ static const struct spi_device_id inv_mp
 	{"mpu6500", INV_MPU6500},
 	{"mpu9150", INV_MPU9150},
 	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
 	{"icm20608", INV_ICM20608},
 	{}
 };
--

To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw

Hello,

mpu9255 is completely similar to mpu9250. The only thing that is changing is the associated firmware running inside it.

Since we are not loading and using firmware in this driver, the chips are virtually the same.

JB

Quoted 108 lines · Jonathan Cameron
Quoted 6 lines · On Mon, 2 Apr 2018 18:42:00 -0400 Douglas Fischer <[email protected]>…

Added support for the mpu9255 IMU to the mpu6050 driver. The register map is the same as the other chips; the only driver difference is the compatible string and the WHOAMI register value.

Looks good to me. I'd like to give some time for Jean-Baptiste/others to confirm they are happy with this as well though.

Give me a bump if I seem to have lost it in a couple of weeks time.

Thanks. It's interesting to note that all the manufacturer's interfaces finally seem to be stabilizing across generations. The days of large changes every version seem to finally be behind us.

Jonathan

Quoted 85 lines

---

diff -uprN linux-4.16.orig/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt linux-4.16/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt

Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt +1 -0
@@ -8,6 +8,7 @@ Required properties:
   		"invensense,mpu6500"
  		"invensense,mpu9150"
  		"invensense,mpu9250"
+		"invensense,mpu9255"
  		"invensense,icm20608"
   - reg : the I2C address of the sensor
   - interrupt-parent : should be the phandle for the interrupt controller

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c

drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +6 -0
@@ -121,6 +121,12 @@ static const struct inv_mpu6050_hw hw_in
  		.config = &chip_config_6050,
  	},
  	{
+		.whoami = INV_MPU9255_WHOAMI_VALUE,
+		.name = "MPU9255",
+		.reg = &reg_set_6500,
+		.config = &chip_config_6050,
+	},
+	{
  		.whoami = INV_ICM20608_WHOAMI_VALUE,
  		.name = "ICM20608",
  		.reg = &reg_set_6500,

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c

drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c +5 -0
@@ -179,6 +179,7 @@ static const struct i2c_device_id inv_mp
  	{"mpu6500", INV_MPU6500},
  	{"mpu9150", INV_MPU9150},
  	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
  	{"icm20608", INV_ICM20608},
  	{}
  };
@@ -203,6 +204,10 @@ static const struct of_device_id inv_of_
  		.data = (void *)INV_MPU9250
  	},
  	{
+		.compatible = "invensense,mpu9255",
+		.data = (void *)INV_MPU9255
+	},
+	{
  		.compatible = "invensense,icm20608",
  		.data = (void *)INV_ICM20608
  	},

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h

drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h +2 -0
@@ -74,6 +74,7 @@ enum inv_devices {
  	INV_MPU6000,
  	INV_MPU9150,
  	INV_MPU9250,
+	INV_MPU9255,
  	INV_ICM20608,
  	INV_NUM_PARTS
  };
@@ -232,6 +233,7 @@ struct inv_mpu6050_state {
  #define INV_MPU6500_WHOAMI_VALUE		0x70
  #define INV_MPU9150_WHOAMI_VALUE		0x68
  #define INV_MPU9250_WHOAMI_VALUE		0x71
+#define INV_MPU9255_WHOAMI_VALUE		0x73
  #define INV_ICM20608_WHOAMI_VALUE		0xAF
 
  /* scan element definition */

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c

drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c +1 -1
@@ -83,6 +83,7 @@ static const struct spi_device_id inv_mp
  	{"mpu6500", INV_MPU6500},
  	{"mpu9150", INV_MPU9150},
  	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
  	{"icm20608", INV_ICM20608},
  	{}
  };
--

To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

maintainer
#3 lore raw
Quoted 9 lines · On Mon, 9 Apr 2018 11:54:28 +0200 Jean-Baptiste Maneyrol…

Hello,

mpu9255 is completely similar to mpu9250. The only thing that is changing is the associated firmware running inside it.

Since we are not loading and using firmware in this driver, the chips are virtually the same.

JB

Cool. Applied to the togreg branch of iio.git and pushed out as testing for the autobuilders to play with it.

Thanks,

Jonathan

Quoted 114 lines · Jonathan Cameron
Quoted 91 lines
Quoted 6 lines · On Mon, 2 Apr 2018 18:42:00 -0400 Douglas Fischer <[email protected]>…

Added support for the mpu9255 IMU to the mpu6050 driver. The register map is the same as the other chips; the only driver difference is the compatible string and the WHOAMI register value.

Looks good to me. I'd like to give some time for Jean-Baptiste/others to confirm they are happy with this as well though.

Give me a bump if I seem to have lost it in a couple of weeks time.

Thanks. It's interesting to note that all the manufacturer's interfaces finally seem to be stabilizing across generations. The days of large changes every version seem to finally be behind us.

Jonathan

Quoted 69 lines

---

diff -uprN linux-4.16.orig/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt linux-4.16/Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt

Documentation/devicetree/bindings/iio/imu/inv_mpu6050.txt +1 -0
@@ -8,6 +8,7 @@ Required properties:
   		"invensense,mpu6500"
  		"invensense,mpu9150"
  		"invensense,mpu9250"
+		"invensense,mpu9255"
  		"invensense,icm20608"
   - reg : the I2C address of the sensor
   - interrupt-parent : should be the phandle for the interrupt controller

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c

drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +6 -0
@@ -121,6 +121,12 @@ static const struct inv_mpu6050_hw hw_in
  		.config = &chip_config_6050,
  	},
  	{
+		.whoami = INV_MPU9255_WHOAMI_VALUE,
+		.name = "MPU9255",
+		.reg = &reg_set_6500,
+		.config = &chip_config_6050,
+	},
+	{
  		.whoami = INV_ICM20608_WHOAMI_VALUE,
  		.name = "ICM20608",
  		.reg = &reg_set_6500,

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c

drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c +5 -0
@@ -179,6 +179,7 @@ static const struct i2c_device_id inv_mp
  	{"mpu6500", INV_MPU6500},
  	{"mpu9150", INV_MPU9150},
  	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
  	{"icm20608", INV_ICM20608},
  	{}
  };
@@ -203,6 +204,10 @@ static const struct of_device_id inv_of_
  		.data = (void *)INV_MPU9250
  	},
  	{
+		.compatible = "invensense,mpu9255",
+		.data = (void *)INV_MPU9255
+	},
+	{
  		.compatible = "invensense,icm20608",
  		.data = (void *)INV_ICM20608
  	},

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h

drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h +2 -0
@@ -74,6 +74,7 @@ enum inv_devices {
  	INV_MPU6000,
  	INV_MPU9150,
  	INV_MPU9250,
+	INV_MPU9255,
  	INV_ICM20608,
  	INV_NUM_PARTS
  };
@@ -232,6 +233,7 @@ struct inv_mpu6050_state {
  #define INV_MPU6500_WHOAMI_VALUE		0x70
  #define INV_MPU9150_WHOAMI_VALUE		0x68
  #define INV_MPU9250_WHOAMI_VALUE		0x71
+#define INV_MPU9255_WHOAMI_VALUE		0x73
  #define INV_ICM20608_WHOAMI_VALUE		0xAF
 
Quoted 17 lines
Quoted 13 lines
drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h +0 -0
  /* scan element definition */

diff -uprN linux-4.16.orig/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c linux-4.16/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c

drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c +1 -1
@@ -83,6 +83,7 @@ static const struct spi_device_id inv_mp
  	{"mpu6500", INV_MPU6500},
  	{"mpu9150", INV_MPU9150},
  	{"mpu9250", INV_MPU9250},
+	{"mpu9255", INV_MPU9255},
  	{"icm20608", INV_ICM20608},
  	{}
  };
--
Quoted 3 lines

To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html