From: Pekka Paalanen <pekka.paala...@collabora.co.uk>

Makes create_output_for_connector() slightly easier to read.

Signed-off-by: Pekka Paalanen <pekka.paala...@collabora.co.uk>
Signed-off-by: Daniel Stone <dani...@collabora.com>
---
 src/compositor-drm.c | 41 ++++++++++++++++++++++++++---------------
 1 file changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 25a4567..43dd483 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -2105,6 +2105,30 @@ drm_output_choose_initial_mode(struct drm_output *output,
  * @returns 0 on success, or -1 on failure
  */
 static int
+connector_get_current_mode(drmModeConnector *connector, int drm_fd,
+                          drmModeModeInfo *mode)
+{
+       drmModeEncoder *encoder;
+       drmModeCrtc *crtc;
+
+       /* Get the current mode on the crtc that's currently driving
+        * this connector. */
+       encoder = drmModeGetEncoder(drm_fd, connector->encoder_id);
+       memset(mode, 0, sizeof *mode);
+       if (encoder != NULL) {
+               crtc = drmModeGetCrtc(drm_fd, encoder->crtc_id);
+               drmModeFreeEncoder(encoder);
+               if (crtc == NULL)
+                       return -1;
+               if (crtc->mode_valid)
+                       *mode = crtc->mode;
+               drmModeFreeCrtc(crtc);
+       }
+
+       return 0;
+}
+
+static int
 create_output_for_connector(struct drm_compositor *ec,
                            drmModeRes *resources,
                            drmModeConnector *connector,
@@ -2114,9 +2138,7 @@ create_output_for_connector(struct drm_compositor *ec,
        struct drm_mode *drm_mode, *next, *current;
        struct weston_mode *m;
        struct weston_config_section *section;
-       drmModeEncoder *encoder;
        drmModeModeInfo crtc_mode, modeline;
-       drmModeCrtc *crtc;
        int i, width, height, scale;
        char *s;
        enum output_config config;
@@ -2185,19 +2207,8 @@ create_output_for_connector(struct drm_compositor *ec,
        output->original_crtc = drmModeGetCrtc(ec->drm.fd, output->crtc_id);
        output->dpms_prop = drm_get_prop(ec->drm.fd, connector, "DPMS");
 
-       /* Get the current mode on the crtc that's currently driving
-        * this connector. */
-       encoder = drmModeGetEncoder(ec->drm.fd, connector->encoder_id);
-       memset(&crtc_mode, 0, sizeof crtc_mode);
-       if (encoder != NULL) {
-               crtc = drmModeGetCrtc(ec->drm.fd, encoder->crtc_id);
-               drmModeFreeEncoder(encoder);
-               if (crtc == NULL)
-                       goto err_free;
-               if (crtc->mode_valid)
-                       crtc_mode = crtc->mode;
-               drmModeFreeCrtc(crtc);
-       }
+       if (connector_get_current_mode(connector, ec->drm.fd, &crtc_mode) < 0)
+               goto err_free;
 
        for (i = 0; i < connector->count_modes; i++) {
                drm_mode = drm_output_add_mode(output, &connector->modes[i]);
-- 
2.4.3

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to