Hi, On 01/04/2017 11:20 AM, Gao Pan wrote: > When system enters VLLS mode, module power is turned off. As a result, > all registers are reset to HW default value. After exiting VLLS mode, > registers are still in default mode. As a result, the pinctrl settings > are incorrect, which will affect the module function. > > The patch recovers the pinctrl setting when exit VLLS mode. > > Signed-off-by: Gao Pan <pandy.gao@xxxxxxx> > --- > drivers/i2c/busses/i2c-imx-lpi2c.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c b/drivers/i2c/busses/i2c-imx-lpi2c.c > index c62b7cd..e528c1d1 100644 > --- a/drivers/i2c/busses/i2c-imx-lpi2c.c > +++ b/drivers/i2c/busses/i2c-imx-lpi2c.c > @@ -636,12 +636,34 @@ static int lpi2c_imx_remove(struct platform_device *pdev) > return 0; > } > > +#ifdef CONFIG_PM_SLEEP > +static int lpi2c_imx_suspend(struct device *dev) > +{ > + pinctrl_pm_select_sleep_state(dev); > + > + return 0; > +} > + > +static int lpi2c_imx_resume(struct device *dev) > +{ > + pinctrl_pm_select_default_state(dev); > + > + return 0; > +} > + > +static SIMPLE_DEV_PM_OPS(imx_lpi2c_pm, lpi2c_imx_suspend, lpi2c_imx_resume); > +#define IMX_LPI2C_PM (&imx_lpi2c_pm) > +#else > +#define IMX_LPI2C_PM NULL Please drop #else branch and IMX_LPI2C_PM completely. > +#endif > + > static struct platform_driver lpi2c_imx_driver = { > .probe = lpi2c_imx_probe, > .remove = lpi2c_imx_remove, > .driver = { > .name = DRIVER_NAME, > .of_match_table = lpi2c_imx_of_match, > + .pm = IMX_LPI2C_PM, Here it should be: .pm = &imx_lpi2c_pm, > }, > }; > -- With best wishes, Vladimir -- 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