61 lines
1.9 KiB
Diff
61 lines
1.9 KiB
Diff
From 454b7a0237be35a9b2d76b5ad5611c0b0ea7a802 Mon Sep 17 00:00:00 2001
|
|
From: Yannick Fertre <yannick.fertre@foss.st.com>
|
|
Date: Wed, 10 May 2023 17:26:33 +0200
|
|
Subject: [PATCH 1/4] Clone mode not supported
|
|
|
|
Display controller doesn't support several outputs.
|
|
During a head changed, get & close the weston head which is enabled.
|
|
Then an output can enabled (only one even if several output have
|
|
connected).
|
|
|
|
Signed-off-by: Yannick Fertre <yannick.fertre@foss.st.com>
|
|
---
|
|
compositor/main.c | 23 +++++++++++++++--------
|
|
1 file changed, 15 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/compositor/main.c b/compositor/main.c
|
|
index 15f9d4e..3c239ba 100644
|
|
--- a/compositor/main.c
|
|
+++ b/compositor/main.c
|
|
@@ -2570,22 +2570,29 @@ drm_heads_changed(struct wl_listener *listener, void *arg)
|
|
/* We need to collect all cloned heads into outputs before enabling the
|
|
* output.
|
|
*/
|
|
+ while ((head = weston_compositor_iterate_heads(compositor, head))) {
|
|
+ enabled = weston_head_is_enabled(head);
|
|
+
|
|
+ if (enabled) {
|
|
+ drm_head_disable(head);
|
|
+ weston_head_reset_device_changed(head);
|
|
+ }
|
|
+ }
|
|
+
|
|
while ((head = weston_compositor_iterate_heads(compositor, head))) {
|
|
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 || forced) && !enabled) {
|
|
+ /*
|
|
+ * Prepare & enable only the first head connected.
|
|
+ * CRTC doesn't support several output.
|
|
+ */
|
|
drm_head_prepare_enable(wet, head);
|
|
- } else if (!(connected || forced) && enabled) {
|
|
- drm_head_disable(head);
|
|
- } else if (enabled && changed) {
|
|
- weston_log("Detected a monitor change on head '%s', "
|
|
- "not bothering to do anything about it.\n",
|
|
- weston_head_get_name(head));
|
|
+ weston_head_reset_device_changed(head);
|
|
+ break;
|
|
}
|
|
- weston_head_reset_device_changed(head);
|
|
}
|
|
|
|
if (drm_process_layoutputs(wet) < 0)
|
|
--
|
|
2.25.1
|
|
|