From b628af5d2f1bcae7fdf8d3538936d871f8ab26d6 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Thu, 2 Aug 2018 16:02:01 +0800 Subject: [PATCH] media: rockchip: isp1: add suspend/resume to detach/attach isp iommu when system goto suspend, isp will be powered off, isp iommu will be disabled, need to attach on resume, detach on suspend. Change-Id: I2b5e775b44d2b72df4ddcf2db12b54518c3e1f2e Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp1/dev.c | 24 ++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c index 03c46cc243ac..cf7bf0341269 100644 --- a/drivers/media/platform/rockchip/isp1/dev.c +++ b/drivers/media/platform/rockchip/isp1/dev.c @@ -697,6 +697,27 @@ static int rkisp1_plat_remove(struct platform_device *pdev) return 0; } +static int __maybe_unused rkisp1_suspend(struct device *dev) +{ + struct rkisp1_device *isp_dev = dev_get_drvdata(dev); + + if (isp_dev->domain) + iommu_detach_device(isp_dev->domain, isp_dev->dev); + + return 0; +} + +static int __maybe_unused rkisp1_resume(struct device *dev) +{ + struct rkisp1_device *isp_dev = dev_get_drvdata(dev); + int ret = 0; + + if (isp_dev->domain) + ret = iommu_attach_device(isp_dev->domain, isp_dev->dev); + + return ret; +} + static int __maybe_unused rkisp1_runtime_suspend(struct device *dev) { struct rkisp1_device *isp_dev = dev_get_drvdata(dev); @@ -719,8 +740,7 @@ static int __maybe_unused rkisp1_runtime_resume(struct device *dev) } static const struct dev_pm_ops rkisp1_plat_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, - pm_runtime_force_resume) + SET_SYSTEM_SLEEP_PM_OPS(rkisp1_suspend, rkisp1_resume) SET_RUNTIME_PM_OPS(rkisp1_runtime_suspend, rkisp1_runtime_resume, NULL) };