}
mxc_isi->flags = MXC_ISI_PM_POWERED;
+ mxc_isi_channel_set_chain_buf(mxc_isi);
+ clk_disable_unprepare(mxc_isi->clk);
- pm_runtime_set_active(dev);
pm_runtime_enable(dev);
- pm_runtime_get_sync(dev);
- pm_runtime_put_sync(dev);
dev_dbg(dev, "mxc_isi.%d registered successfully\n", mxc_isi->id);
struct mxc_isi_dev *mxc_isi = platform_get_drvdata(pdev);
struct device *dev = &pdev->dev;
- pm_runtime_get_sync(&pdev->dev);
mxc_isi_unregister_capture_subdev(mxc_isi);
-
- clk_disable_unprepare(mxc_isi->clk);
- pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(dev);
return 0;
#ifdef CONFIG_PM_SLEEP
static int mxc_isi_pm_suspend(struct device *dev)
{
- struct mxc_isi_dev *mxc_isi = dev_get_drvdata(dev);
-
- pm_runtime_get_sync(dev);
-
- if ((mxc_isi->flags & MXC_ISI_PM_SUSPENDED) ||
- (mxc_isi->flags & MXC_ISI_RUNTIME_SUSPEND))
- return 0;
-
- clk_disable_unprepare(mxc_isi->clk);
- mxc_isi->flags |= MXC_ISI_PM_SUSPENDED;
- mxc_isi->flags &= ~MXC_ISI_PM_POWERED;
- pm_runtime_put_sync(dev);
-
- return 0;
+ return pm_runtime_force_suspend(dev);
}
static int mxc_isi_pm_resume(struct device *dev)
{
- struct mxc_isi_dev *mxc_isi = dev_get_drvdata(dev);
- int ret;
-
- pm_runtime_get_sync(dev);
- if (mxc_isi->flags & MXC_ISI_PM_POWERED)
- return 0;
-
- ret = clk_prepare_enable(mxc_isi->clk);
- if (ret) {
- pr_info("== %s ret=%d\n", __func__, ret);
- return -EAGAIN;
- }
-
- mxc_isi->flags |= MXC_ISI_PM_POWERED;
- mxc_isi->flags &= ~MXC_ISI_PM_SUSPENDED;
- pm_runtime_put_sync(dev);
-
- return 0;
+ return pm_runtime_force_resume(dev);
}
#endif
{
struct mxc_isi_dev *mxc_isi = dev_get_drvdata(dev);
- if (mxc_isi->flags & MXC_ISI_RUNTIME_SUSPEND)
- return 0;
-
- if (mxc_isi->flags & MXC_ISI_PM_POWERED) {
- clk_disable_unprepare(mxc_isi->clk);
- mxc_isi->flags |= MXC_ISI_RUNTIME_SUSPEND;
- mxc_isi->flags &= ~MXC_ISI_PM_POWERED;
- }
+ clk_disable_unprepare(mxc_isi->clk);
return 0;
}
static int mxc_isi_runtime_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;
-
- if (mxc_isi->flags & MXC_ISI_RUNTIME_SUSPEND) {
- clk_prepare_enable(mxc_isi->clk);
- mxc_isi->flags |= MXC_ISI_PM_POWERED;
- mxc_isi->flags &= ~MXC_ISI_RUNTIME_SUSPEND;
- }
+ ret = clk_prepare_enable(mxc_isi->clk);
+ if (ret)
+ dev_err(dev, "%s clk enable fail\n", __func__);
- return 0;
+ return (ret) ? ret : 0;
}
static const struct dev_pm_ops mxc_isi_pm_ops = {