Explorar el Código

Merge "drm: msm: add support for ltm off event"

qctecmdr hace 5 años
padre
commit
cc1226edbc
Se han modificado 3 ficheros con 31 adiciones y 0 borrados
  1. 22 0
      msm/sde/sde_color_processing.c
  2. 8 0
      msm/sde/sde_color_processing.h
  3. 1 0
      msm/sde/sde_crtc.c

+ 22 - 0
msm/sde/sde_color_processing.c

@@ -2899,6 +2899,7 @@ static void _sde_cp_crtc_enable_ltm_hist(struct sde_crtc *sde_crtc,
 			sde_crtc->ltm_hist_en = true;
 		hw_dspp->ops.setup_ltm_hist_ctrl(hw_dspp, hw_cfg,
 			true, addr);
+		SDE_EVT32(SDE_EVTLOG_FUNC_ENTRY);
 	}
 	spin_unlock_irqrestore(&sde_crtc->ltm_lock, irq_flags);
 }
@@ -2909,15 +2910,30 @@ static void _sde_cp_crtc_disable_ltm_hist(struct sde_crtc *sde_crtc,
 {
 	unsigned long irq_flags;
 	u32 i = 0;
+	bool notify = false;
+	u8 hist_off = 1;
+	struct drm_event event;
 
 	spin_lock_irqsave(&sde_crtc->ltm_lock, irq_flags);
+	notify = sde_crtc->ltm_hist_en;
 	sde_crtc->ltm_hist_en = false;
 	INIT_LIST_HEAD(&sde_crtc->ltm_buf_free);
 	INIT_LIST_HEAD(&sde_crtc->ltm_buf_busy);
 	for (i = 0; i < sde_crtc->ltm_buffer_cnt; i++)
 		list_add(&sde_crtc->ltm_buffers[i]->node,
 			&sde_crtc->ltm_buf_free);
+	hw_dspp->ops.setup_ltm_hist_ctrl(hw_dspp, NULL,
+			false, 0);
 	spin_unlock_irqrestore(&sde_crtc->ltm_lock, irq_flags);
+	event.type = DRM_EVENT_LTM_OFF;
+	event.length = sizeof(hist_off);
+	if (notify) {
+		SDE_EVT32(SDE_EVTLOG_FUNC_ENTRY);
+		msm_mode_object_event_notify(&sde_crtc->base.base,
+				sde_crtc->base.dev, &event,
+				(u8 *)&hist_off);
+	}
+
 }
 
 static void sde_cp_ltm_hist_interrupt_cb(void *arg, int irq_idx)
@@ -3318,3 +3334,9 @@ static void _sde_cp_crtc_update_ltm_roi(struct sde_crtc *sde_crtc,
 
 	sde_crtc->ltm_cfg = *cfg_param;
 }
+
+int sde_cp_ltm_off_event_handler(struct drm_crtc *crtc_drm, bool en,
+	struct sde_irq_callback *hist_irq)
+{
+	return 0;
+}

+ 8 - 0
msm/sde/sde_color_processing.h

@@ -182,4 +182,12 @@ int sde_cp_ltm_hist_interrupt(struct drm_crtc *crtc_drm, bool en,
 int sde_cp_ltm_wb_pb_interrupt(struct drm_crtc *crtc_drm, bool en,
 	struct sde_irq_callback *hist_irq);
 
+/**
+ * sde_cp_ltm_off_event_handler: API to enable/disable LTM off notification
+ * @crtc: Pointer to crtc.
+ * @en: Variable to enable/disable notification.
+ * @irq: Pointer to irq callback
+ */
+int sde_cp_ltm_off_event_handler(struct drm_crtc *crtc_drm, bool en,
+	struct sde_irq_callback *hist_irq);
 #endif /*_SDE_COLOR_PROCESSING_H */

+ 1 - 0
msm/sde/sde_crtc.c

@@ -66,6 +66,7 @@ static struct sde_crtc_custom_events custom_events[] = {
 	{DRM_EVENT_SDE_POWER, sde_crtc_pm_event_handler},
 	{DRM_EVENT_LTM_HIST, sde_cp_ltm_hist_interrupt},
 	{DRM_EVENT_LTM_WB_PB, sde_cp_ltm_wb_pb_interrupt},
+	{DRM_EVENT_LTM_OFF, sde_cp_ltm_off_event_handler},
 };
 
 /* default input fence timeout, in ms */