> -----Original Message----- > From: Stefan Agner [mailto:stefan@xxxxxxxx] > Sent: Monday, September 26, 2016 7:19 PM > To: wsa@xxxxxxxxxxxxx > Cc: Leo Li <leoyang.li@xxxxxxx>; linux-i2c@xxxxxxxxxxxxxxx; u.kleine- > koenig@xxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Stefan Agner > <stefan@xxxxxxxx> > Subject: [PATCH] i2c: imx: defer probe if bus recovery GPIOs are not ready > > Some SoC might load the GPIO driver after the I2C driver and > using the I2C bus recovery mechanism via GPIOs. In this case > it is crucial to defer probing if the GPIO request functions > do so, otherwise the I2C driver gets loaded without recovery > mechanisms enabled. > > Signed-off-by: Stefan Agner <stefan@xxxxxxxx> Acked-by: Li Yang <leoyang.li@xxxxxxx> > --- > This is an actual issue on NXP Vybrid devices on which the GPIO > driver gets loaded rather later. > > -- > Stefan > > drivers/i2c/busses/i2c-imx.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c > index 592a8f2..47fc1f1 100644 > --- a/drivers/i2c/busses/i2c-imx.c > +++ b/drivers/i2c/busses/i2c-imx.c > @@ -1009,10 +1009,13 @@ static int i2c_imx_init_recovery_info(struct > imx_i2c_struct *i2c_imx, > rinfo->sda_gpio = of_get_named_gpio(pdev->dev.of_node, "sda-gpios", > 0); > rinfo->scl_gpio = of_get_named_gpio(pdev->dev.of_node, "scl-gpios", > 0); > > - if (!gpio_is_valid(rinfo->sda_gpio) || > - !gpio_is_valid(rinfo->scl_gpio) || > - IS_ERR(i2c_imx->pinctrl_pins_default) || > - IS_ERR(i2c_imx->pinctrl_pins_gpio)) { > + if (rinfo->sda_gpio == -EPROBE_DEFER || > + rinfo->scl_gpio == -EPROBE_DEFER) { > + return -EPROBE_DEFER; > + } else if (!gpio_is_valid(rinfo->sda_gpio) || > + !gpio_is_valid(rinfo->scl_gpio) || > + IS_ERR(i2c_imx->pinctrl_pins_default) || > + IS_ERR(i2c_imx->pinctrl_pins_gpio)) { > dev_dbg(&pdev->dev, "recovery information incomplete\n"); > return 0; > } > -- > 2.10.0 -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html