set correct mode info 79/168279/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 25 Jan 2018 09:06:50 +0000 (18:06 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 25 Jan 2018 09:06:54 +0000 (18:06 +0900)
Change-Id: Ia5be18011e4892d0123cb8a7be0ba83503203837
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/tdm_vc4_display.c

index eab5d27..b266f0f 100644 (file)
@@ -1191,8 +1191,40 @@ vc4_output_get_capability(tdm_output *output, tdm_caps_output *caps)
                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;