Loading msm/sde/sde_color_processing.c +22 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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) Loading Loading @@ -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; } msm/sde/sde_color_processing.h +8 −0 Original line number Diff line number Diff line Loading @@ -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 */ msm/sde/sde_crtc.c +1 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading
msm/sde/sde_color_processing.c +22 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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) Loading Loading @@ -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; }
msm/sde/sde_color_processing.h +8 −0 Original line number Diff line number Diff line Loading @@ -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 */
msm/sde/sde_crtc.c +1 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading