[PATCH v2] i2c: exynos5: Properly use the "noirq" variants of suspend/resume

Kukjin Kim kgene.kim at samsung.com
Wed Jun 25 04:13:10 PDT 2014


Doug Anderson wrote:
> 
> The original code for the exynos i2c controller registered for the
> "noirq" variants.  However during review feedback it was moved to
> SIMPLE_DEV_PM_OPS without anyone noticing that it meant we were no
> longer actually "noirq" (despite functions named
> exynos5_i2c_suspend_noirq and exynos5_i2c_resume_noirq).
> 
> i2c controllers that might have wakeup sources on them seem to need to
> resume at noirq time so that the individual drivers can actually read
> the i2c bus to handle their wakeup.
> 
> NOTE: I took the original review feedback from Wolfram and added
> poweroff, thaw, freeze, restore.
> 
Yeah I'm not sure except .suspend_noirq and .resume_noirq but I'm fine if
Wolfram suggested ;-)

> This patch has only been compile-tested since I don't have all the
> patches needed to make my machine using this i2c driver actually
> suspend/resume.
> 
> Signed-off-by: Doug Anderson <dianders at chromium.org>
> ---
> Changes in v2:
> - Added missing CONFIG_PM_SLEEP
> 
>  drivers/i2c/busses/i2c-exynos5.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-
> exynos5.c
> index 63d2292..348b1cd 100644
> --- a/drivers/i2c/busses/i2c-exynos5.c
> +++ b/drivers/i2c/busses/i2c-exynos5.c
> @@ -789,8 +789,16 @@ static int exynos5_i2c_resume_noirq(struct device *dev)
>  }
>  #endif
> 
> -static SIMPLE_DEV_PM_OPS(exynos5_i2c_dev_pm_ops, exynos5_i2c_suspend_noirq,
> -			 exynos5_i2c_resume_noirq);
> +const struct dev_pm_ops exynos5_i2c_dev_pm_ops = {

Maybe static const struct...?

> +#ifdef CONFIG_PM_SLEEP
> +	.suspend_noirq = exynos5_i2c_suspend_noirq,
> +	.resume_noirq = exynos5_i2c_resume_noirq,
> +	.freeze_noirq = exynos5_i2c_suspend_noirq,
> +	.thaw_noirq = exynos5_i2c_resume_noirq,
> +	.poweroff_noirq = exynos5_i2c_suspend_noirq,
> +	.restore_noirq = exynos5_i2c_resume_noirq,
> +#endif
> +};
> 
>  static struct platform_driver exynos5_i2c_driver = {
>  	.probe		= exynos5_i2c_probe,
> --
> 2.0.0.526.g5318336

Others look good to me,

Acked-by: Kukjin Kim <kgene.kim at samsung.com>

Thanks,
Kukjin




More information about the linux-arm-kernel mailing list