diff options
| author | Ray Strode <rstrode@redhat.com> | 2010-06-13 22:45:36 -0400 |
|---|---|---|
| committer | Ray Strode <rstrode@redhat.com> | 2010-06-13 22:45:36 -0400 |
| commit | b5b5f081bae003fd2d8065586249085f11d1c4a7 (patch) | |
| tree | eaf6311bef3fc67e4f0472eda0b84ffb5183181f | |
| parent | abfda7550ac2fca6d816862e271126c2f44fa3cc (diff) | |
[drm] Make find_controller return the crtc not crtc id
This will give us the ability to look at the currently active
mode and so paves the way toward cleaning up a recently added
FIXME in the code.
| -rw-r--r-- | src/plugins/renderers/drm/plugin.c | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index a7f8af71..a77fbe96 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -578,17 +578,28 @@ controller_is_available (ply_renderer_backend_t *backend, return true; } -static uint32_t +static drmModeCrtc * find_controller_for_encoder (ply_renderer_backend_t *backend, drmModeEncoder *encoder) { int i; uint32_t possible_crtcs; + drmModeCrtc *controller; + + controller = NULL; /* Monitor is already lit. We'll use the same controller. */ if (encoder->crtc_id != 0) - return encoder->crtc_id; + { + controller = drmModeGetCrtc (backend->device_fd, encoder->crtc_id); + + if (controller != NULL) + { + ply_trace ("Found already lit monitor"); + return controller; + } + } /* Monitor cable is plugged in, but the monitor isn't lit * yet. Let's pick an available controller and light it up @@ -610,10 +621,14 @@ find_controller_for_encoder (ply_renderer_backend_t *backend, continue; assert (i < backend->resources->count_crtcs); - return backend->resources->crtcs[i]; + controller = drmModeGetCrtc (backend->device_fd, + backend->resources->crtcs[i]); + + if (controller != NULL) + break; } - return 0; + return controller; } static bool @@ -692,26 +707,6 @@ find_encoder_for_connector (ply_renderer_backend_t *backend, return find_unused_encoder_for_connector (backend, connector); } -static uint32_t -get_console_buffer_id (ply_renderer_backend_t *backend, - uint32_t controller_id) -{ - drmModeCrtc *controller; - uint32_t console_buffer_id; - - console_buffer_id = 0; - controller = drmModeGetCrtc (backend->device_fd, controller_id); - - if (controller == NULL) - return 0; - - console_buffer_id = controller->buffer_id; - - drmModeFreeCrtc (controller); - - return console_buffer_id; -} - static bool create_heads_for_active_connectors (ply_renderer_backend_t *backend) { @@ -722,8 +717,9 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) { ply_renderer_head_t *head; drmModeEncoder *encoder; - uint32_t controller_id; uint32_t encoder_id; + drmModeCrtc *controller; + uint32_t controller_id; uint32_t console_buffer_id; int connector_mode_index; @@ -754,15 +750,17 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) } encoder_id = encoder->encoder_id; - controller_id = find_controller_for_encoder (backend, encoder); + controller = find_controller_for_encoder (backend, encoder); drmModeFreeEncoder (encoder); - if (controller_id == 0) + if (controller == NULL) { drmModeFreeConnector (connector); continue; } + controller_id = controller->crtc_id; + /* The kernel orders the mode list such that the one picked by default is * the first one. * @@ -771,7 +769,8 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) */ connector_mode_index = 0; - console_buffer_id = get_console_buffer_id (backend, controller_id); + console_buffer_id = controller->buffer_id; + drmModeFreeCrtc (controller); head = ply_renderer_head_new (backend, connector, connector_mode_index, encoder_id, controller_id, |
