Merge "drm: msm: add support for ltm off event"
Cette révision appartient à :

révisé par
Gerrit - the friendly Code Review server

révision
cc1226edbc
@@ -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;
|
||||
}
|
||||
|
@@ -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 */
|
||||
|
@@ -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 */
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur