Add system PM support make it stopping streaming at system suspend time, and restarting streaming at system resume time. Signed-off-by: Changhuang Liang <changhuang.liang@xxxxxxxxxxxxxxxx> --- drivers/media/platform/cadence/cdns-csi2rx.c | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c index 981819adbb3a..81e90b31e9f8 100644 --- a/drivers/media/platform/cadence/cdns-csi2rx.c +++ b/drivers/media/platform/cadence/cdns-csi2rx.c @@ -776,8 +776,40 @@ static int csi2rx_runtime_resume(struct device *dev) return ret; } +static int __maybe_unused csi2rx_suspend(struct device *dev) +{ + struct csi2rx_priv *csi2rx = dev_get_drvdata(dev); + + mutex_lock(&csi2rx->lock); + if (csi2rx->count) + csi2rx_stop(csi2rx); + mutex_unlock(&csi2rx->lock); + + pm_runtime_force_suspend(dev); + + return 0; +} + +static int __maybe_unused csi2rx_resume(struct device *dev) +{ + struct csi2rx_priv *csi2rx = dev_get_drvdata(dev); + int ret; + + ret = pm_runtime_force_resume(dev); + if (ret < 0) + return ret; + + mutex_lock(&csi2rx->lock); + if (csi2rx->count) + csi2rx_start(csi2rx); + mutex_unlock(&csi2rx->lock); + + return 0; +} + static const struct dev_pm_ops csi2rx_pm_ops = { SET_RUNTIME_PM_OPS(csi2rx_runtime_suspend, csi2rx_runtime_resume, NULL) + SET_SYSTEM_SLEEP_PM_OPS(csi2rx_suspend, csi2rx_resume) }; static const struct of_device_id csi2rx_of_table[] = { -- 2.25.1