Commit 3448cfce authored by Daniel Stone's avatar Daniel Stone

compositor-drm: Pull EDID extraction into helper

Create a helper function which populates a drm_head with the information
extracted from its connector's EDID and any other properties we can
find, such as physical size and connection status.

This is currently quite small, but may become more complex in future as
we parse EDID better. It also prepares to move this function into
another file in the next commit.
Signed-off-by: Daniel Stone's avatarDaniel Stone <daniels@collabora.com>
parent dd1bc50b
......@@ -5836,6 +5836,29 @@ drm_backend_update_unused_outputs(struct drm_backend *b, drmModeRes *resources)
}
}
static void
update_head_from_connector(struct drm_head *head,
drmModeObjectProperties *props)
{
const char *make = "unknown";
const char *model = "unknown";
const char *serial_number = "unknown";
find_and_parse_output_edid(head, props, &make, &model, &serial_number);
weston_head_set_monitor_strings(&head->base, make, model, serial_number);
weston_head_set_non_desktop(&head->base,
check_non_desktop(head, props));
weston_head_set_subpixel(&head->base,
drm_subpixel_to_wayland(head->connector->subpixel));
weston_head_set_physical_size(&head->base, head->connector->mmWidth,
head->connector->mmHeight);
/* Unknown connection status is assumed disconnected. */
weston_head_set_connection_status(&head->base,
head->connector->connection == DRM_MODE_CONNECTED);
}
/** Replace connector data and monitor information
*
* @param head The head to update.
......@@ -5852,9 +5875,6 @@ drm_head_assign_connector_info(struct drm_head *head,
drmModeConnector *connector)
{
drmModeObjectProperties *props;
const char *make = "unknown";
const char *model = "unknown";
const char *serial_number = "unknown";
assert(connector);
assert(head->connector_id == connector->connector_id);
......@@ -5875,22 +5895,9 @@ drm_head_assign_connector_info(struct drm_head *head,
drm_property_info_populate(head->backend, connector_props,
head->props_conn,
WDRM_CONNECTOR__COUNT, props);
find_and_parse_output_edid(head, props, &make, &model, &serial_number);
weston_head_set_monitor_strings(&head->base, make, model, serial_number);
weston_head_set_non_desktop(&head->base,
check_non_desktop(head, props));
weston_head_set_subpixel(&head->base,
drm_subpixel_to_wayland(head->connector->subpixel));
weston_head_set_physical_size(&head->base, head->connector->mmWidth,
head->connector->mmHeight);
update_head_from_connector(head, props);
drmModeFreeObjectProperties(props);
/* Unknown connection status is assumed disconnected. */
weston_head_set_connection_status(&head->base,
head->connector->connection == DRM_MODE_CONNECTED);
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment