+++ /dev/null
-diff --git a/src/compositor-drm.c b/src/compositor-drm.c
-index 4dffa1d..6239f91 100644
---- a/src/compositor-drm.c
-+++ b/src/compositor-drm.c
-@@ -143,6 +143,16 @@ struct drm_sprite {
- uint32_t formats[];
- };
-
-+static drmModeModeInfo builtin_800x480 = {
-+ 33750, /* clock */
-+ 800, 864, 976, 1088, 0,
-+ 480, 486, 494, 517, 0,
-+ 59920,
-+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC,
-+ 0,
-+ "800x480"
-+};
-+
- static int
- surface_is_primary(struct weston_compositor *ec, struct weston_surface *es)
- {
-@@ -1344,13 +1354,30 @@ create_output_for_connector(struct drm_compositor *ec,
- drmModeFreeEncoder(encoder);
- if (crtc == NULL)
- goto err_free;
-- crtc_mode = crtc->mode;
-+
-+ /* if don't get mode from drm driver, use default 800x480 */
-+ if (crtc->mode.clock != 0)
-+ {
-+ crtc_mode = crtc->mode;
-+ } else {
-+ if (connector->count_modes == 0)
-+ crtc_mode = builtin_800x480;
-+ else
-+ crtc_mode = connector->modes[0];
-+ }
-+
- drmModeFreeCrtc(crtc);
-
-- for (i = 0; i < connector->count_modes; i++) {
-- ret = drm_output_add_mode(output, &connector->modes[i]);
-+ if (connector->count_modes == 0) {
-+ ret = drm_output_add_mode(output, &crtc_mode);
- if (ret)
- goto err_free;
-+ }else{
-+ for (i = 0; i < connector->count_modes; i++) {
-+ ret = drm_output_add_mode(output, &connector->modes[i]);
-+ if (ret)
-+ goto err_free;
-+ }
- }
-
- preferred = NULL;