compositor-drm: Assign unique output names like xrandr does
This commit is contained in:
+30
-2
@@ -99,6 +99,7 @@ struct drm_fb {
|
|||||||
struct drm_output {
|
struct drm_output {
|
||||||
struct weston_output base;
|
struct weston_output base;
|
||||||
|
|
||||||
|
char *name;
|
||||||
uint32_t crtc_id;
|
uint32_t crtc_id;
|
||||||
uint32_t connector_id;
|
uint32_t connector_id;
|
||||||
drmModeCrtcPtr original_crtc;
|
drmModeCrtcPtr original_crtc;
|
||||||
@@ -1241,6 +1242,24 @@ drm_set_dpms(struct weston_output *output_base, enum dpms_enum level)
|
|||||||
drmModeFreeConnector(connector);
|
drmModeFreeConnector(connector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *connector_type_names[] = {
|
||||||
|
"None",
|
||||||
|
"VGA",
|
||||||
|
"DVI",
|
||||||
|
"DVI",
|
||||||
|
"DVI",
|
||||||
|
"Composite",
|
||||||
|
"TV",
|
||||||
|
"LVDS",
|
||||||
|
"CTV",
|
||||||
|
"DIN",
|
||||||
|
"DP",
|
||||||
|
"HDMI",
|
||||||
|
"HDMI",
|
||||||
|
"TV",
|
||||||
|
"eDP",
|
||||||
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
create_output_for_connector(struct drm_compositor *ec,
|
create_output_for_connector(struct drm_compositor *ec,
|
||||||
drmModeRes *resources,
|
drmModeRes *resources,
|
||||||
@@ -1254,6 +1273,8 @@ create_output_for_connector(struct drm_compositor *ec,
|
|||||||
drmModeModeInfo crtc_mode;
|
drmModeModeInfo crtc_mode;
|
||||||
drmModeCrtc *crtc;
|
drmModeCrtc *crtc;
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
char name[32];
|
||||||
|
const char *type_name;
|
||||||
|
|
||||||
encoder = drmModeGetEncoder(ec->drm.fd, connector->encoders[0]);
|
encoder = drmModeGetEncoder(ec->drm.fd, connector->encoders[0]);
|
||||||
if (encoder == NULL) {
|
if (encoder == NULL) {
|
||||||
@@ -1284,6 +1305,13 @@ create_output_for_connector(struct drm_compositor *ec,
|
|||||||
output->base.model = "unknown";
|
output->base.model = "unknown";
|
||||||
wl_list_init(&output->base.mode_list);
|
wl_list_init(&output->base.mode_list);
|
||||||
|
|
||||||
|
if (connector->connector_type < ARRAY_LENGTH(connector_type_names))
|
||||||
|
type_name = connector_type_names[connector->connector_type];
|
||||||
|
else
|
||||||
|
type_name = "UNKNOWN";
|
||||||
|
snprintf(name, 32, "%s%d", type_name, connector->connector_type_id);
|
||||||
|
output->name = strdup(name);
|
||||||
|
|
||||||
output->crtc_id = resources->crtcs[i];
|
output->crtc_id = resources->crtcs[i];
|
||||||
ec->crtc_allocator |= (1 << output->crtc_id);
|
ec->crtc_allocator |= (1 << output->crtc_id);
|
||||||
output->connector_id = connector->connector_id;
|
output->connector_id = connector->connector_id;
|
||||||
@@ -1389,8 +1417,8 @@ create_output_for_connector(struct drm_compositor *ec,
|
|||||||
output->base.set_dpms = drm_set_dpms;
|
output->base.set_dpms = drm_set_dpms;
|
||||||
output->base.switch_mode = drm_output_switch_mode;
|
output->base.switch_mode = drm_output_switch_mode;
|
||||||
|
|
||||||
weston_log("kms connector %d, crtc %d\n",
|
weston_log("Output %s, (connector %d, crtc %d)\n",
|
||||||
output->connector_id, output->crtc_id);
|
output->name, output->connector_id, output->crtc_id);
|
||||||
wl_list_for_each(m, &output->base.mode_list, link)
|
wl_list_for_each(m, &output->base.mode_list, link)
|
||||||
weston_log_continue(" mode %dx%d@%.1f%s%s%s\n",
|
weston_log_continue(" mode %dx%d@%.1f%s%s%s\n",
|
||||||
m->width, m->height, m->refresh / 1000.0,
|
m->width, m->height, m->refresh / 1000.0,
|
||||||
|
|||||||
Reference in New Issue
Block a user