compositor-drm: Refactor getting current mode into a new function

Makes create_output_for_connector() slightly easier to read.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
dev
Pekka Paalanen 11 years ago committed by Daniel Stone
parent 3ce6362a33
commit eee580b894
  1. 41
      src/compositor-drm.c

@ -2158,13 +2158,37 @@ drm_output_choose_initial_mode(struct drm_output *output,
return NULL;
}
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;
}
/**
* Create and configure a Weston output structure
*
* Given a DRM connector, create a matching drm_output structure and add it
* to Weston's output list.
*
* @param ec DRM compositor structure
* @param b Weston backend structure structure
* @param resources DRM resources for this device
* @param connector DRM connector to use for this new output
* @param x Horizontal offset to use into global co-ordinate space
@ -2182,9 +2206,7 @@ create_output_for_connector(struct drm_backend *b,
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;
@ -2253,19 +2275,8 @@ create_output_for_connector(struct drm_backend *b,
output->original_crtc = drmModeGetCrtc(b->drm.fd, output->crtc_id);
output->dpms_prop = drm_get_prop(b->drm.fd, connector, "DPMS");
/* Get the current mode on the crtc that's currently driving
* this connector. */
encoder = drmModeGetEncoder(b->drm.fd, connector->encoder_id);
memset(&crtc_mode, 0, sizeof crtc_mode);
if (encoder != NULL) {
crtc = drmModeGetCrtc(b->drm.fd, encoder->crtc_id);
drmModeFreeEncoder(encoder);
if (crtc == NULL)
if (connector_get_current_mode(connector, b->drm.fd, &crtc_mode) < 0)
goto err_free;
if (crtc->mode_valid)
crtc_mode = crtc->mode;
drmModeFreeCrtc(crtc);
}
for (i = 0; i < connector->count_modes; i++) {
drm_mode = drm_output_add_mode(output, &connector->modes[i]);

Loading…
Cancel
Save