summaryrefslogtreecommitdiff
path: root/drivers/mailbox
diff options
context:
space:
mode:
authorDong Aisheng <aisheng.dong@nxp.com>2019-03-06 17:25:00 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:46:52 +0800
commit53379e62bf188650e26df06e2cf7501410788fc9 (patch)
tree76f96cdecae050af0b71993edc6f297f5e0371f3 /drivers/mailbox
parent219d54332a09e8d8741c1e1982f5eae56099de85 (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.c27
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);