TDM_ERR("alloc failed\n");
goto failed_get;
}
- for (i = 0; i < caps->mode_count; i++)
+
+ if (caps->mode_count != output_data->count_modes) {
+ drmModeModeInfoPtr new_drm_modes;
+ tdm_output_mode *new_output_modes;
+
+ new_drm_modes = calloc(connector->count_modes,
+ sizeof(drmModeModeInfo));
+ if (!new_drm_modes) {
+ ret = TDM_ERROR_OUT_OF_MEMORY;
+ TDM_ERR("alloc failed drm_modes\n");
+ goto failed_get;
+ }
+ new_output_modes = calloc(connector->count_modes,
+ sizeof(tdm_output_mode));
+ if (!new_output_modes) {
+ ret = TDM_ERROR_OUT_OF_MEMORY;
+ TDM_ERR("alloc failed output_modes\n");
+ free(new_drm_modes);
+ goto failed_get;
+ }
+ free(output_data->vc4_modes);
+ free(output_data->output_modes);
+
+ output_data->vc4_modes = new_drm_modes;
+ output_data->output_modes = new_output_modes;
+ output_data->count_modes = caps->mode_count;
+ }
+
+ for (i = 0; i < caps->mode_count; i++) {
+ output_data->vc4_modes[i] = connector->modes[i];
+ _tdm_vc4_display_to_tdm_mode(&output_data->vc4_modes[i],
+ &output_data->output_modes[i]);
caps->modes[i] = output_data->output_modes[i];
+ }
caps->mmWidth = connector->mmWidth;
caps->mmHeight = connector->mmHeight;