summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2010-06-13 22:45:36 -0400
committerRay Strode <rstrode@redhat.com>2010-06-13 22:45:36 -0400
commitb5b5f081bae003fd2d8065586249085f11d1c4a7 (patch)
treeeaf6311bef3fc67e4f0472eda0b84ffb5183181f
parentabfda7550ac2fca6d816862e271126c2f44fa3cc (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.c55
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,