diff options
author | Dong Aisheng <aisheng.dong@nxp.com> | 2019-03-06 17:25:00 +0800 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2019-11-25 15:46:52 +0800 |
commit | 53379e62bf188650e26df06e2cf7501410788fc9 (patch) | |
tree | 76f96cdecae050af0b71993edc6f297f5e0371f3 /drivers/mailbox | |
parent | 219d54332a09e8d8741c1e1982f5eae56099de85 (diff) |
imx-mailbox: add state save and restore
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Diffstat (limited to 'drivers/mailbox')
-rw-r--r-- | drivers/mailbox/imx-mailbox.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 9f74dee1a58c..cfa60250e906 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -64,6 +64,9 @@ struct imx_mu_priv { struct clk *clk; int irq; + /* for control register save and restore */ + u32 xcr; + bool side_b; }; @@ -334,6 +337,29 @@ static int imx_mu_remove(struct platform_device *pdev) return 0; } +static int imx_mu_suspend_noirq(struct device *dev) +{ + struct imx_mu_priv *priv = dev_get_drvdata(dev); + + priv->xcr = imx_mu_read(priv, IMX_MU_xCR); + + return 0; +} + +static int imx_mu_resume_noirq(struct device *dev) +{ + struct imx_mu_priv *priv = dev_get_drvdata(dev); + + imx_mu_write(priv, priv->xcr, IMX_MU_xCR); + + return 0; +} + +static const struct dev_pm_ops imx_mu_pm_ops = { + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(imx_mu_suspend_noirq, + imx_mu_resume_noirq) +}; + static const struct of_device_id imx_mu_dt_ids[] = { { .compatible = "fsl,imx6sx-mu" }, { }, @@ -346,6 +372,7 @@ static struct platform_driver imx_mu_driver = { .driver = { .name = "imx_mu", .of_match_table = imx_mu_dt_ids, + .pm = &imx_mu_pm_ops, }, }; module_platform_driver(imx_mu_driver); |