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>
This commit is contained in:
parent
944dd235b4
commit
9071817089
@ -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
|
||||
drm_try_attach(struct weston_output *output,
|
||||
struct wet_head_array *add,
|
||||
@ -1783,6 +1799,7 @@ drm_heads_changed(struct wl_listener *listener, void *arg)
|
||||
bool connected;
|
||||
bool enabled;
|
||||
bool changed;
|
||||
bool forced;
|
||||
|
||||
/* We need to collect all cloned heads into outputs before enabling the
|
||||
* output.
|
||||
@ -1791,10 +1808,11 @@ drm_heads_changed(struct wl_listener *listener, void *arg)
|
||||
connected = weston_head_is_connected(head);
|
||||
enabled = weston_head_is_enabled(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);
|
||||
} else if (!connected && enabled) {
|
||||
} else if (!(connected || forced) && enabled) {
|
||||
drm_head_disable(head);
|
||||
} else if (enabled && changed) {
|
||||
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
|
||||
profile is applied equally to all cloned monitors regardless of their
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user