I've added related pins to enable a recovery feature
&i2c0 {
...
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c0>;
pinctrl-1 = <&pinctrl_i2c0_gpio>;
scl-gpios = <&lsio_gpio2 2 GPIO_ACTIVE_HIGH>;
sda-gpios = <&lsio_gpio2 3 GPIO_ACTIVE_HIGH>;
...
}
pinctrl_i2c0: i2c0grp {
fsl,pins = <
IMX8QM_HDMI_TX0_TS_SCL_DMA_I2C0_SCL 0x06000021
IMX8QM_HDMI_TX0_TS_SDA_DMA_I2C0_SDA 0x06000021
>;
};
pinctrl_i2c0_gpio: i2c1grp-gpio {
fsl,pins = <
IMX8QM_HDMI_TX0_TS_SCL_LSIO_GPIO2_IO02 0x06000020
IMX8QM_HDMI_TX0_TS_SDA_LSIO_GPIO2_IO03 0x06000020
>;
};
It has caused getting two new lines in logs during the failing line
/* Disable chip interrupts before requesting irq */
err = regmap_raw_write(chip->data.regmap, TCPC_ALERT_MASK, &val,
sizeof(u16));
new logs are:
[ 4.775545][ T8] i2c i2c-4: SCL is stuck low, exit recovery
[ 5.283545][ T8] i2c i2c-4: SCL is stuck low, exit recovery
But actually a real SCL level is high for all time, see the previously attached image.
I think as a some workaround I can add usleep_range(1000000, 12000000); into a probing of tcpci device.