]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: imx8mq-librem5: Enable I2C recovery
authorSebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
Mon, 5 Jan 2026 20:39:38 +0000 (21:39 +0100)
committerShawn Guo <shawnguo@kernel.org>
Sun, 18 Jan 2026 01:55:05 +0000 (09:55 +0800)
i2c-imx can perform bus recovery by temporarily switching I2C pins
into GPIO mode. To do so, it needs GPIO and pinctrl handles to be
provided in the device tree.

Suggested-by: Denis Sergeevich <galilley@gmail.com>
Signed-off-by: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm64/boot/dts/freescale/imx8mq-librem5.dtsi

index 2975e9451661705c9d4df1e0d0b617a44a271915..2bd25ef7f304d50372dfc7b7a5073ff837f3b423 100644 (file)
                >;
        };
 
+       pinctrl_i2c1_gpio: i2c1-gpiogrp {
+               fsl,pins = <
+                       MX8MQ_IOMUXC_I2C1_SCL_GPIO5_IO14        0x26
+                       MX8MQ_IOMUXC_I2C1_SDA_GPIO5_IO15        0x26
+               >;
+       };
+
        pinctrl_i2c2: i2c2grp {
                fsl,pins = <
                        MX8MQ_IOMUXC_I2C2_SCL_I2C2_SCL          0x40000026
                >;
        };
 
+       pinctrl_i2c2_gpio: i2c2-gpiogrp {
+               fsl,pins = <
+                       MX8MQ_IOMUXC_I2C2_SCL_GPIO5_IO16        0x26
+                       MX8MQ_IOMUXC_I2C2_SDA_GPIO5_IO17        0x26
+               >;
+       };
+
        pinctrl_i2c3: i2c3grp {
                fsl,pins = <
                        MX8MQ_IOMUXC_I2C3_SCL_I2C3_SCL          0x40000026
                >;
        };
 
+       pinctrl_i2c3_gpio: i2c3-gpiogrp {
+               fsl,pins = <
+                       MX8MQ_IOMUXC_I2C3_SCL_GPIO5_IO18        0x26
+                       MX8MQ_IOMUXC_I2C3_SDA_GPIO5_IO19        0x26
+               >;
+       };
+
        pinctrl_i2c4: i2c4grp {
                fsl,pins = <
                        MX8MQ_IOMUXC_I2C4_SCL_I2C4_SCL          0x40000026
                >;
        };
 
+       pinctrl_i2c4_gpio: i2c4-gpiogrp {
+               fsl,pins = <
+                       MX8MQ_IOMUXC_I2C4_SCL_GPIO5_IO20        0x26
+                       MX8MQ_IOMUXC_I2C4_SDA_GPIO5_IO21        0x26
+               >;
+       };
+
        pinctrl_keys: keysgrp {
                fsl,pins = <
                        /* VOL- */
 
 &i2c1 {
        clock-frequency = <384000>;
-       pinctrl-names = "default";
+       pinctrl-names = "default", "gpio";
        pinctrl-0 = <&pinctrl_i2c1>;
+       pinctrl-1 = <&pinctrl_i2c1_gpio>;
+       scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+       sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
        status = "okay";
 
        typec_pd: usb-pd@3f {
 
 &i2c2 {
        clock-frequency = <384000>;
-       pinctrl-names = "default";
+       pinctrl-names = "default", "gpio";
        pinctrl-0 = <&pinctrl_i2c2>;
+       pinctrl-1 = <&pinctrl_i2c2_gpio>;
+       scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+       sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
        status = "okay";
 
        magnetometer: magnetometer@1e   {
 
 &i2c3 {
        clock-frequency = <384000>;
-       pinctrl-names = "default";
+       pinctrl-names = "default", "gpio";
        pinctrl-0 = <&pinctrl_i2c3>;
+       pinctrl-1 = <&pinctrl_i2c3_gpio>;
+       scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+       sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
        status = "okay";
 
        codec: audio-codec@1a {
 
 &i2c4 {
        clock-frequency = <384000>;
-       pinctrl-names = "default";
+       pinctrl-names = "default", "gpio";
        pinctrl-0 = <&pinctrl_i2c4>;
+       pinctrl-1 = <&pinctrl_i2c4_gpio>;
+       scl-gpios = <&gpio5 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+       sda-gpios = <&gpio5 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
        status = "okay";
 
        vcm@c {