vc4_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value)
{
tdm_vc4_output *output_data = output;
+ hal_tdm_output_dpms cur_dpms_value;
tdm_vc4_display *display_data;
int ret;
return HAL_TDM_ERROR_OPERATION_FAILED;
}
+ /*
+ * Workaround for the RPi4 firmware bug, call drmModeObjectSetProperty
+ * only if there is a real DPMS mode change to avoid vblank timeout.
+ */
+ if (vc4_output_get_dpms(output, &cur_dpms_value) == HAL_TDM_ERROR_NONE &&
+ cur_dpms_value == dpms_value)
+ return HAL_TDM_ERROR_NONE;
+
display_data = output_data->display_data;
ret = drmModeObjectSetProperty(display_data->drm_fd,
output_data->connector_id, DRM_MODE_OBJECT_CONNECTOR,
vc4_output_set_dpms(tdm_output *output, tdm_output_dpms dpms_value)
{
tdm_vc4_output_data *output_data = output;
+ tdm_output_dpms cur_dpms_value;
tdm_vc4_data *vc4_data;
int ret;
return TDM_ERROR_OPERATION_FAILED;
}
+ /*
+ * Workaround for the RPi4 firmware bug, call drmModeObjectSetProperty
+ * only if there is a real DPMS mode change to avoid vblank timeout.
+ */
+ if (vc4_output_get_dpms(output, &cur_dpms_value) == TDM_ERROR_NONE &&
+ cur_dpms_value == dpms_value)
+ return TDM_ERROR_NONE;
+
vc4_data = output_data->vc4_data;
ret = drmModeObjectSetProperty(vc4_data->drm_fd,
output_data->connector_id, DRM_MODE_OBJECT_CONNECTOR,