devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] ARM: omap: omap4-embt2ws: Add IMU on control unit
@ 2023-09-26 20:37 Andreas Kemnade
  2023-09-26 20:37 ` [PATCH v2 1/3] dt-bindings: iio: imu: mpu6050: Add level shifter Andreas Kemnade
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Andreas Kemnade @ 2023-09-26 20:37 UTC (permalink / raw)
  To: jic23, lars, robh+dt, krzysztof.kozlowski+dt, conor+dt, bcousson,
	tony, jean-baptiste.maneyrol, andreas, chenhuiz, andy.shevchenko,
	linux-iio, devicetree, linux-kernel, linux-omap

Contrary to the IMU at the head, a bit needs to be set to
make probe of the magnetometer successful.

Changes in V2:

- add types in binding doc
- more description / comments in binding doc
- limit register change to imu9150
- correct node name in device tree (- vs _)

Andreas Kemnade (3):
  dt-bindings: iio: imu: mpu6050: Add level shifter
  iio: imu: mpu6050: add level shifter flag
  ARM: dts: omap: omap4-embt2ws: Add IMU at control unit

 .../bindings/iio/imu/invensense,mpu6050.yaml    |  5 +++++
 .../boot/dts/ti/omap/omap4-epson-embt2ws.dts    | 17 ++++++++++++++++-
 drivers/iio/imu/inv_mpu6050/inv_mpu_aux.c       | 10 ++++++++++
 drivers/iio/imu/inv_mpu6050/inv_mpu_core.c      |  3 +++
 drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h       |  1 +
 5 files changed, 35 insertions(+), 1 deletion(-)

-- 
2.39.2


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

* [PATCH v2 1/3] dt-bindings: iio: imu: mpu6050: Add level shifter
  2023-09-26 20:37 [PATCH v2 0/3] ARM: omap: omap4-embt2ws: Add IMU on control unit Andreas Kemnade
@ 2023-09-26 20:37 ` Andreas Kemnade
  2023-09-26 20:37 ` [PATCH v2 2/3] iio: imu: mpu6050: add level shifter flag Andreas Kemnade
  2023-09-26 20:37 ` [PATCH v2 3/3] ARM: dts: omap: omap4-embt2ws: Add IMU at control unit Andreas Kemnade
  2 siblings, 0 replies; 6+ messages in thread
From: Andreas Kemnade @ 2023-09-26 20:37 UTC (permalink / raw)
  To: jic23, lars, robh+dt, krzysztof.kozlowski+dt, conor+dt, bcousson,
	tony, jean-baptiste.maneyrol, andreas, chenhuiz, andy.shevchenko,
	linux-iio, devicetree, linux-kernel, linux-omap

Add a level shifter flag as found in ancient platform data struct:
level_shifter: 0: VLogic, 1: VDD

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
 .../devicetree/bindings/iio/imu/invensense,mpu6050.yaml      | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/devicetree/bindings/iio/imu/invensense,mpu6050.yaml b/Documentation/devicetree/bindings/iio/imu/invensense,mpu6050.yaml
index 1db6952ddca5e..297b8a1a7ffbc 100644
--- a/Documentation/devicetree/bindings/iio/imu/invensense,mpu6050.yaml
+++ b/Documentation/devicetree/bindings/iio/imu/invensense,mpu6050.yaml
@@ -48,6 +48,11 @@ properties:
 
   mount-matrix: true
 
+  invensense,level-shifter:
+    type: boolean
+    description: |
+      From ancient platform data struct: false: VLogic, true: VDD
+
   i2c-gate:
     $ref: /schemas/i2c/i2c-controller.yaml
     unevaluatedProperties: false
-- 
2.39.2


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

* [PATCH v2 2/3] iio: imu: mpu6050: add level shifter flag
  2023-09-26 20:37 [PATCH v2 0/3] ARM: omap: omap4-embt2ws: Add IMU on control unit Andreas Kemnade
  2023-09-26 20:37 ` [PATCH v2 1/3] dt-bindings: iio: imu: mpu6050: Add level shifter Andreas Kemnade
@ 2023-09-26 20:37 ` Andreas Kemnade
  2023-09-27 13:02   ` Andy Shevchenko
  2023-09-26 20:37 ` [PATCH v2 3/3] ARM: dts: omap: omap4-embt2ws: Add IMU at control unit Andreas Kemnade
  2 siblings, 1 reply; 6+ messages in thread
From: Andreas Kemnade @ 2023-09-26 20:37 UTC (permalink / raw)
  To: jic23, lars, robh+dt, krzysztof.kozlowski+dt, conor+dt, bcousson,
	tony, jean-baptiste.maneyrol, andreas, chenhuiz, andy.shevchenko,
	linux-iio, devicetree, linux-kernel, linux-omap

Some boards fail in magnetometer probe if level shifter flag is not set,
definition was found in a 3.0 vendor kernel.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
 drivers/iio/imu/inv_mpu6050/inv_mpu_aux.c  | 10 ++++++++++
 drivers/iio/imu/inv_mpu6050/inv_mpu_core.c |  3 +++
 drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h  |  1 +
 3 files changed, 14 insertions(+)

diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_aux.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_aux.c
index 7327e5723f961..1d30360f1d482 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_aux.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_aux.c
@@ -71,6 +71,16 @@ int inv_mpu_aux_init(const struct inv_mpu6050_state *st)
 	unsigned int val;
 	int ret;
 
+	/* code based on a 3.0 vendor kernel, the exact meaning is unknown */
+	if (st->chip_type == INV_MPU9150) {
+		unsigned int mask = BIT(7);
+
+		val = st->level_shifter ? mask : 0;
+		ret = regmap_update_bits(st->map, 0x1, mask, val);
+		if (ret)
+			return ret;
+	}
+
 	/* configure i2c master */
 	val = INV_MPU6050_BITS_I2C_MST_CLK_400KHZ |
 			INV_MPU6050_BIT_WAIT_FOR_ES;
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index 29f906c884bd8..3fbeef1a70186 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -17,6 +17,7 @@
 #include <linux/regulator/consumer.h>
 #include <linux/pm.h>
 #include <linux/pm_runtime.h>
+#include <linux/property.h>
 
 #include <linux/iio/common/inv_sensors_timestamp.h>
 #include <linux/iio/iio.h>
@@ -1495,6 +1496,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,
 	st->irq = irq;
 	st->map = regmap;
 
+	st->level_shifter = device_property_read_bool(dev,
+						      "invensense,level-shifter");
 	pdata = dev_get_platdata(dev);
 	if (!pdata) {
 		result = iio_read_mount_matrix(dev, &st->orientation);
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
index ed5a96e78df05..7eba1439c8093 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
@@ -203,6 +203,7 @@ struct inv_mpu6050_state {
 	s32 magn_raw_to_gauss[3];
 	struct iio_mount_matrix magn_orient;
 	unsigned int suspended_sensors;
+	bool level_shifter;
 	u8 *data;
 };
 
-- 
2.39.2


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

* [PATCH v2 3/3] ARM: dts: omap: omap4-embt2ws: Add IMU at control unit
  2023-09-26 20:37 [PATCH v2 0/3] ARM: omap: omap4-embt2ws: Add IMU on control unit Andreas Kemnade
  2023-09-26 20:37 ` [PATCH v2 1/3] dt-bindings: iio: imu: mpu6050: Add level shifter Andreas Kemnade
  2023-09-26 20:37 ` [PATCH v2 2/3] iio: imu: mpu6050: add level shifter flag Andreas Kemnade
@ 2023-09-26 20:37 ` Andreas Kemnade
  2023-09-27  7:57   ` Krzysztof Kozlowski
  2 siblings, 1 reply; 6+ messages in thread
From: Andreas Kemnade @ 2023-09-26 20:37 UTC (permalink / raw)
  To: jic23, lars, robh+dt, krzysztof.kozlowski+dt, conor+dt, bcousson,
	tony, jean-baptiste.maneyrol, andreas, chenhuiz, andy.shevchenko,
	linux-iio, devicetree, linux-kernel, linux-omap

Add also the level-shifter flag to avoid probe failure in magnetometer
probe.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
 .../boot/dts/ti/omap/omap4-epson-embt2ws.dts    | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts b/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts
index cd4f858d846ab..0cc66e158a8d5 100644
--- a/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts
+++ b/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts
@@ -391,7 +391,16 @@ tlv320aic3x: codec@18 {
 		reset-gpios = <&gpio2 23 GPIO_ACTIVE_LOW>;
 	};
 
-	/* TODO: mpu9150 at control unit, seems to require quirks */
+	mpu9150: imu@68 {
+		compatible = "invensense,mpu9150";
+		reg = <0x68>;
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&mpu9150_pins>;
+		interrupt-parent = <&gpio2>;
+		interrupt = <7 IRQ_TYPE_LEVEL_HIGH>;
+		invensense,level-shifter;
+	};
 };
 
 &keypad {
@@ -530,6 +539,12 @@ OMAP4_IOPAD(0x0fc, PIN_INPUT | MUX_MODE0)       /* abe_mcbsp2_fsx */
 		>;
 	};
 
+	mpu9150_pins: pinmux_mpu9150-pins {
+		pinctrl-single,pins = <
+			OMAP4_IOPAD(0x5e, PIN_INPUT_PULLUP | MUX_MODE3)
+		>;
+	};
+
 	mpu9150h_pins: pinmux-mpu9150h-pins {
 		pinctrl-single,pins = <
 			OMAP4_IOPAD(0x76, PIN_INPUT_PULLUP | MUX_MODE3)
-- 
2.39.2


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

* Re: [PATCH v2 3/3] ARM: dts: omap: omap4-embt2ws: Add IMU at control unit
  2023-09-26 20:37 ` [PATCH v2 3/3] ARM: dts: omap: omap4-embt2ws: Add IMU at control unit Andreas Kemnade
@ 2023-09-27  7:57   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2023-09-27  7:57 UTC (permalink / raw)
  To: Andreas Kemnade, jic23, lars, robh+dt, krzysztof.kozlowski+dt,
	conor+dt, bcousson, tony, jean-baptiste.maneyrol, chenhuiz,
	andy.shevchenko, linux-iio, devicetree, linux-kernel, linux-omap

On 26/09/2023 22:37, Andreas Kemnade wrote:
> Add also the level-shifter flag to avoid probe failure in magnetometer
> probe.
> 
> Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
> ---
>  .../boot/dts/ti/omap/omap4-epson-embt2ws.dts    | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts b/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts
> index cd4f858d846ab..0cc66e158a8d5 100644
> --- a/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts
> +++ b/arch/arm/boot/dts/ti/omap/omap4-epson-embt2ws.dts
> @@ -391,7 +391,16 @@ tlv320aic3x: codec@18 {
>  		reset-gpios = <&gpio2 23 GPIO_ACTIVE_LOW>;
>  	};
>  
> -	/* TODO: mpu9150 at control unit, seems to require quirks */
> +	mpu9150: imu@68 {
> +		compatible = "invensense,mpu9150";
> +		reg = <0x68>;
> +
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mpu9150_pins>;
> +		interrupt-parent = <&gpio2>;
> +		interrupt = <7 IRQ_TYPE_LEVEL_HIGH>;
> +		invensense,level-shifter;
> +	};
>  };
>  
>  &keypad {
> @@ -530,6 +539,12 @@ OMAP4_IOPAD(0x0fc, PIN_INPUT | MUX_MODE0)       /* abe_mcbsp2_fsx */
>  		>;
>  	};
>  
> +	mpu9150_pins: pinmux_mpu9150-pins {

Not much improved.

Best regards,
Krzysztof


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

* Re: [PATCH v2 2/3] iio: imu: mpu6050: add level shifter flag
  2023-09-26 20:37 ` [PATCH v2 2/3] iio: imu: mpu6050: add level shifter flag Andreas Kemnade
@ 2023-09-27 13:02   ` Andy Shevchenko
  0 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2023-09-27 13:02 UTC (permalink / raw)
  To: Andreas Kemnade
  Cc: jic23, lars, robh+dt, krzysztof.kozlowski+dt, conor+dt, bcousson,
	tony, jean-baptiste.maneyrol, chenhuiz, linux-iio, devicetree,
	linux-kernel, linux-omap

On Tue, Sep 26, 2023 at 11:38 PM Andreas Kemnade <andreas@kemnade.info> wrote:
>
> Some boards fail in magnetometer probe if level shifter flag is not set,
> definition was found in a 3.0 vendor kernel.

I would rather use the more standard (IIUC the versioning here)
"...in the vendor Linux kernel v3.0." (also note article change).

Same for all cases below.

I believe Jonathan can update this when applying, otherwise the code looks fine,
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

-- 
With Best Regards,
Andy Shevchenko

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

end of thread, other threads:[~2023-09-27 13:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-26 20:37 [PATCH v2 0/3] ARM: omap: omap4-embt2ws: Add IMU on control unit Andreas Kemnade
2023-09-26 20:37 ` [PATCH v2 1/3] dt-bindings: iio: imu: mpu6050: Add level shifter Andreas Kemnade
2023-09-26 20:37 ` [PATCH v2 2/3] iio: imu: mpu6050: add level shifter flag Andreas Kemnade
2023-09-27 13:02   ` Andy Shevchenko
2023-09-26 20:37 ` [PATCH v2 3/3] ARM: dts: omap: omap4-embt2ws: Add IMU at control unit Andreas Kemnade
2023-09-27  7:57   ` Krzysztof Kozlowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).