* [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).