On Thu, May 28, 2015 at 8:03 AM, Vaibhav Hiremath <vaibhav.hiremath@xxxxxxxxxx> wrote: > From: Rob Herring <robh@xxxxxxxxxx> This probably should still be Leilei, but... > Since there is some problematic i2c slave devices on some > platforms such as dkb (sometimes), it will drop down sda > and make i2c bus hang, at that time, it need to config > scl/sda into gpio to simulate "stop" sequence to recover > i2c bus, so add this interface. > > Signed-off-by: Leilei Shang <shangll@xxxxxxxxxxx> > Signed-off-by: Rob Herring <robh@xxxxxxxxxx> > [vaibhav.hiremath@xxxxxxxxxx: Updated Changelog] > Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@xxxxxxxxxx> > > Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@xxxxxxxxxx> > --- > drivers/i2c/busses/i2c-pxa.c | 90 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 90 insertions(+) > > diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c > index 8ca5552..eb09071 100644 > --- a/drivers/i2c/busses/i2c-pxa.c > +++ b/drivers/i2c/busses/i2c-pxa.c > @@ -37,6 +37,8 @@ > #include <linux/slab.h> > #include <linux/io.h> > #include <linux/i2c/pxa-i2c.h> > +#include <linux/of_gpio.h> > +#include <linux/pinctrl/consumer.h> > > #include <asm/irq.h> > > @@ -177,6 +179,9 @@ struct pxa_i2c { > bool highmode_enter; > unsigned int ilcr; > unsigned int iwcr; > + struct pinctrl *pinctrl; > + struct pinctrl_state *pin_i2c; > + struct pinctrl_state *pin_gpio; > }; > > #define _IBMR(i2c) ((i2c)->reg_ibmr) > @@ -269,6 +274,62 @@ static void i2c_pxa_show_state(struct pxa_i2c *i2c, int lno, const char *fname) > > #define show_state(i2c) i2c_pxa_show_state(i2c, __LINE__, __func__) > > +static void i2c_bus_reset(struct pxa_i2c *i2c) There's a generic mechanism in i2c_generic_gpio_recovery we should use here. It appears to be similar, but not exactly the same. The pinctrl part should probably be done by gpio driver. Rob -- 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