[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