goto err_sclk;
}
+ mxc_isi->flags = MXC_ISI_PM_POWERED;
+
dev_dbg(dev, "mxc_isi.%d registered successfully\n", mxc_isi->id);
return 0;
return 0;
}
+static int mxc_isi_pm_suspend(struct device *dev)
+{
+ struct mxc_isi_dev *mxc_isi = dev_get_drvdata(dev);
+
+ if (mxc_isi->flags & MXC_ISI_PM_SUSPENDED)
+ return 0;
+
+ clk_disable_unprepare(mxc_isi->clk);
+ mxc_isi->flags |= MXC_ISI_PM_SUSPENDED;
+ mxc_isi->flags &= ~MXC_ISI_PM_POWERED;
+
+ return 0;
+}
+
+static int mxc_isi_pm_resume(struct device *dev)
+{
+ struct mxc_isi_dev *mxc_isi = dev_get_drvdata(dev);
+ int ret;
+
+ if (mxc_isi->flags & MXC_ISI_PM_POWERED)
+ return 0;
+
+ mxc_isi->flags |= MXC_ISI_PM_POWERED;
+ mxc_isi->flags &= ~MXC_ISI_PM_SUSPENDED;
+
+ ret = clk_prepare_enable(mxc_isi->clk);
+ return (ret) ? -EAGAIN : 0;
+}
+
+static const struct dev_pm_ops mxc_isi_pm_ops = {
+ SET_SYSTEM_SLEEP_PM_OPS(mxc_isi_pm_suspend, mxc_isi_pm_resume)
+};
+
static const struct of_device_id mxc_isi_of_match[] = {
{.compatible = "fsl,imx8-isi",},
{ /* sentinel */ },
.driver = {
.of_match_table = mxc_isi_of_match,
.name = MXC_ISI_DRIVER_NAME,
+ .pm = &mxc_isi_pm_ops,
}
};