mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-07 21:18:05 +02:00
drm: Implement handle_change_event
Now that we can call create_heads_for_active_connectors multiple times we can implement handle_change_event. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
475a51d057
commit
15ebdd6d5b
1 changed files with 28 additions and 4 deletions
|
|
@ -1304,7 +1304,7 @@ remove_output (ply_renderer_backend_t *backend, ply_output_t *output)
|
|||
* Returns true if any heads were modified.
|
||||
*/
|
||||
static bool
|
||||
create_heads_for_active_connectors (ply_renderer_backend_t *backend)
|
||||
create_heads_for_active_connectors (ply_renderer_backend_t *backend, bool change)
|
||||
{
|
||||
int i, j, number_of_setup_outputs, outputs_len;
|
||||
ply_output_t output, *outputs;
|
||||
|
|
@ -1380,8 +1380,12 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend)
|
|||
outputs = setup_outputs (backend, outputs, outputs_len);
|
||||
number_of_setup_outputs = count_setup_controllers (outputs, outputs_len);
|
||||
}
|
||||
if (number_of_setup_outputs != backend->connected_count) {
|
||||
/* Second try, re-assing controller for all outputs */
|
||||
/* Try again if necessary, re-assing controllers for all outputs.
|
||||
* Note this is skipped when processing change events, as we don't
|
||||
* want to mess with the controller assignment of already lit monitors
|
||||
* in that case.
|
||||
*/
|
||||
if (!change && number_of_setup_outputs != backend->connected_count) {
|
||||
ply_trace ("Some outputs still don't have controllers, re-assigning controllers for all outputs");
|
||||
for (i = 0; i < outputs_len; i++)
|
||||
outputs[i].controller_id = 0;
|
||||
|
|
@ -1484,7 +1488,7 @@ query_device (ply_renderer_backend_t *backend)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!create_heads_for_active_connectors (backend)) {
|
||||
if (!create_heads_for_active_connectors (backend, false)) {
|
||||
ply_trace ("Could not initialize heads");
|
||||
ret = false;
|
||||
} else if (!has_32bpp_support (backend)) {
|
||||
|
|
@ -1498,6 +1502,25 @@ query_device (ply_renderer_backend_t *backend)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_change_event (ply_renderer_backend_t *backend)
|
||||
{
|
||||
bool ret = true;
|
||||
|
||||
backend->resources = drmModeGetResources (backend->device_fd);
|
||||
if (backend->resources == NULL) {
|
||||
ply_trace ("Could not get card resources for change event");
|
||||
return false;
|
||||
}
|
||||
|
||||
ret = create_heads_for_active_connectors (backend, true);
|
||||
|
||||
drmModeFreeResources (backend->resources);
|
||||
backend->resources = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool
|
||||
map_to_device (ply_renderer_backend_t *backend)
|
||||
{
|
||||
|
|
@ -1776,6 +1799,7 @@ ply_renderer_backend_get_interface (void)
|
|||
.open_device = open_device,
|
||||
.close_device = close_device,
|
||||
.query_device = query_device,
|
||||
.handle_change_event = handle_change_event,
|
||||
.map_to_device = map_to_device,
|
||||
.unmap_from_device = unmap_from_device,
|
||||
.activate = activate,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue