dcss_crtc->irq_enabled = true;
+ dcss_req_pm_qos(dcss, true);
+
dcss_vblank_irq_enable(dcss, true);
enable_irq(dcss_crtc->irq);
dcss_vblank_irq_enable(dcss, false);
+ dcss_req_pm_qos(dcss, false);
+
dcss_crtc->irq_enabled = false;
}
return 0;
}
+void dcss_req_pm_qos(struct dcss_soc *dcss, bool en)
+{
+ if (en && !dcss->pm_req_active) {
+ pm_qos_add_request(&dcss->pm_qos_req,
+ PM_QOS_CPU_DMA_LATENCY, 0);
+ dcss->pm_req_active = true;
+ return;
+ }
+
+ if (dcss_dtrc_is_running(dcss, 1) || dcss_dtrc_is_running(dcss, 2))
+ return;
+
+ pm_qos_remove_request(&dcss->pm_qos_req);
+ dcss->pm_req_active = false;
+}
+EXPORT_SYMBOL(dcss_req_pm_qos);
+
#ifdef CONFIG_PM_SLEEP
static int dcss_suspend(struct device *dev)
{
dcss_clocks_enable(dcss, false);
- pm_qos_remove_request(&dcss->pm_qos_req);
-
dcss_bus_freq(dcss, false);
return 0;
dcss_bus_freq(dcss, true);
- pm_qos_add_request(&dcss->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, 0);
-
dcss_clocks_enable(dcss, true);
dcss_blkctl_cfg(dcss);
dcss_clocks_enable(dcss, false);
- pm_qos_remove_request(&dcss->pm_qos_req);
-
dcss_bus_freq(dcss, false);
return 0;
dcss_bus_freq(dcss, true);
- pm_qos_add_request(&dcss->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, 0);
-
dcss_clocks_enable(dcss, true);
dcss_blkctl_cfg(dcss);