weston: add force-on option for DRM

Add a new boolean output section key "force-on". When set to true, the
output will be enabled regardless of connector status. This is the
opposite of the mode=off setting.

Forcing connectors on is useful in special circumstances: avoid output
configuration changes due to hotplug e.g. with KVM switches, or hardware
with unreliable connector status readout for example.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Ian Ray <ian.ray@ge.com>
dev
Pekka Paalanen 7 years ago
parent 944dd235b4
commit 9071817089
  1. 22
      compositor/main.c
  2. 8
      man/weston-drm.man

@ -1594,6 +1594,22 @@ drm_head_prepare_enable(struct wet_compositor *wet,
} }
} }
static bool
drm_head_should_force_enable(struct wet_compositor *wet,
struct weston_head *head)
{
const char *name = weston_head_get_name(head);
struct weston_config_section *section;
int force = 0;
section = drm_config_find_controlling_output_section(wet->config, name);
if (!section)
return false;
weston_config_section_get_bool(section, "force-on", &force, 0);
return !!force;
}
static void static void
drm_try_attach(struct weston_output *output, drm_try_attach(struct weston_output *output,
struct wet_head_array *add, struct wet_head_array *add,
@ -1783,6 +1799,7 @@ drm_heads_changed(struct wl_listener *listener, void *arg)
bool connected; bool connected;
bool enabled; bool enabled;
bool changed; bool changed;
bool forced;
/* We need to collect all cloned heads into outputs before enabling the /* We need to collect all cloned heads into outputs before enabling the
* output. * output.
@ -1791,10 +1808,11 @@ drm_heads_changed(struct wl_listener *listener, void *arg)
connected = weston_head_is_connected(head); connected = weston_head_is_connected(head);
enabled = weston_head_is_enabled(head); enabled = weston_head_is_enabled(head);
changed = weston_head_is_device_changed(head); changed = weston_head_is_device_changed(head);
forced = drm_head_should_force_enable(wet, head);
if (connected && !enabled) { if ((connected || forced) && !enabled) {
drm_head_prepare_enable(wet, head); drm_head_prepare_enable(wet, head);
} else if (!connected && enabled) { } else if (!(connected || forced) && enabled) {
drm_head_disable(head); drm_head_disable(head);
} else if (enabled && changed) { } else if (enabled && changed) {
weston_log("Detected a monitor change on head '%s', " weston_log("Detected a monitor change on head '%s', "

@ -95,6 +95,14 @@ NOTE: cms-colord plugin does not work correctly with this option. The plugin
chooses an arbitrary monitor to load the color profile for, but the chooses an arbitrary monitor to load the color profile for, but the
profile is applied equally to all cloned monitors regardless of their profile is applied equally to all cloned monitors regardless of their
properties. properties.
.TP
\fBforce-on\fR=\fItrue\fR
Force the output to be enabled even if the connector is disconnected.
Defaults to false. Note that
.BR mode=off " will override " force-on=true .
When a connector is disconnected, there is no EDID information to provide
a list of video modes. Therefore a forced output should also have a
detailed mode line specified.
. .
.\" *************************************************************** .\" ***************************************************************
.SH OPTIONS .SH OPTIONS

Loading…
Cancel
Save