disp: msm: sde: report AVR_STATUS in vsync_event sysfs node

Report the AVR_STATUS which indicates if there's a pending
trigger when Adaptive Variable Refresh feature is enabled.
This allows SW to detect whether the old frame is repeated
or if the new frame was taken when the trigger is very
close to Vsync.

Change-Id: I6b04482e5c4c3bb92bad426c529c1fd3612d41c3
Signed-off-by: Steve Cohen <cohens@codeaurora.org>
这个提交包含在:
Steve Cohen
2021-03-17 17:34:35 -04:00
父节点 3090ffd63f
当前提交 61e6723732
修改 7 个文件,包含 71 行新增2 行删除

查看文件

@@ -4374,6 +4374,27 @@ void sde_encoder_get_transfer_time(struct drm_encoder *drm_enc,
*transfer_time_us = info->mdp_transfer_time_us;
}
int sde_encoder_get_avr_status(struct drm_encoder *drm_enc)
{
struct sde_encoder_virt *sde_enc;
struct sde_encoder_phys *master;
bool is_vid_mode;
if (!drm_enc)
return -EINVAL;
sde_enc = to_sde_encoder_virt(drm_enc);
master = sde_enc->cur_master;
is_vid_mode = sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CAP_VID_MODE);
if (!master || !is_vid_mode || !sde_connector_get_qsync_mode(master->connector))
return -ENODATA;
if (!master->hw_intf->ops.get_avr_status)
return -EOPNOTSUPP;
return master->hw_intf->ops.get_avr_status(master->hw_intf);
}
int sde_encoder_helper_reset_mixers(struct sde_encoder_phys *phys_enc,
struct drm_framebuffer *fb)
{