sh: CMT suspend/resume
Subsystems (2)
PATCH 2/4 sh: CMT suspend/resume
From: Magnus Damm <[email protected]>
This patch updates the SuperH CMT driver with suspend and resume callbacks for the suspend-to-ram case. This patch stops the CMT channel at suspend time to avoid unwanted wake up events.
Signed-off-by Magnus Damm <[email protected]>
---
drivers/clocksource/sh_cmt.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
drivers/clocksource/sh_cmt.c +28 -0
@@ -40,6 +40,7 @@ struct sh_cmt_priv {struct platform_device *pdev;unsigned long flags; +unsigned long flags_suspend;unsigned long match_value;unsigned long next_match_value;unsigned long max_match_value;
@@ -667,11 +668,38 @@ static int __devexit sh_cmt_remove(strucreturn -EBUSY ;/* cannot unregister clockevent and clocksource */ } +static int sh_cmt_suspend (struct device *dev) +{ +struct platform_device *pdev =to_platform_device (dev); +struct sh_cmt_priv *p =platform_get_drvdata (pdev); + +/* save flag state and stop CMT channel */ + p->flags_suspend = p->flags; +sh_cmt_stop (p, p->flags); +return 0 ; +} + +static int sh_cmt_resume (struct device *dev) +{ +struct platform_device *pdev =to_platform_device (dev); +struct sh_cmt_priv *p =platform_get_drvdata (pdev); + +/* start CMT channel from saved state */ +sh_cmt_start (p, p->flags_suspend); +return 0 ; +} + +static struct dev_pm_ops sh_cmt_dev_pm_ops = { + .suspend = sh_cmt_suspend, + .resume = sh_cmt_resume, +}; +static struct platform_driver sh_cmt_device_driver = { .probe = sh_cmt_probe, .remove =__devexit_p (sh_cmt_remove), .driver = { .name ="sh_cmt" , + .pm = &sh_cmt_dev_pm_ops, } };