From: Fabien DESSENNE Date: Thu, 12 Dec 2013 16:13:56 +0000 (+0100) Subject: compositor-drm: consider the best mode of the mode_list as an option X-Git-Tag: upstream/0.1.8~526 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b2558708b7bac2b2255c3d6682ff594c0b90ae6;p=profile%2Fivi%2Fweston-ivi-shell.git compositor-drm: consider the best mode of the mode_list as an option This patch fixes an issue where Weston using the DRM backend, cannot start the display. This happens in the following context: - no video mode is set before weston starts (eg no "/dev/fb" set up) - weston is not configured with any default video mode (nothing from weston.ini nor command line) - the DRM driver provides with a list of supported modes, but none of them is marked as PREFERRED (which is not a usual case, but it happens) In that case, according to the current implementation, the DRM compositor fails to set a video mode. This fix lets the DRM compositor selects a video mode (the best one of the list, which is the first) from the ones provided by the driver. Signed-off-by: Fabien Dessenne --- diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 75644e1..136d517 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -1857,7 +1857,7 @@ create_output_for_connector(struct drm_compositor *ec, int x, int y, struct udev_device *drm_device) { struct drm_output *output; - struct drm_mode *drm_mode, *next, *preferred, *current, *configured; + struct drm_mode *drm_mode, *next, *preferred, *current, *configured, *best; struct weston_mode *m; struct weston_config_section *section; drmModeEncoder *encoder; @@ -1960,6 +1960,7 @@ create_output_for_connector(struct drm_compositor *ec, preferred = NULL; current = NULL; configured = NULL; + best = NULL; wl_list_for_each_reverse(drm_mode, &output->base.mode_list, base.link) { if (config == OUTPUT_CONFIG_MODE && @@ -1970,6 +1971,7 @@ create_output_for_connector(struct drm_compositor *ec, current = drm_mode; if (drm_mode->base.flags & WL_OUTPUT_MODE_PREFERRED) preferred = drm_mode; + best = drm_mode; } if (config == OUTPUT_CONFIG_MODELINE) { @@ -1995,6 +1997,8 @@ create_output_for_connector(struct drm_compositor *ec, output->base.current_mode = &preferred->base; else if (current) output->base.current_mode = ¤t->base; + else if (best) + output->base.current_mode = &best->base; if (output->base.current_mode == NULL) { weston_log("no available modes for %s\n", output->base.name);