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

Cette révision appartient à :
qctecmdr
2019-10-08 07:26:38 -07:00
révisé par Gerrit - the friendly Code Review server
révision cc1226edbc
3 fichiers modifiés avec 31 ajouts et 0 suppressions

Voir le fichier

@@ -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;
}

Voir le fichier

@@ -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 */

Voir le fichier

@@ -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 */