[PATCH 4/6] drm/crtc-helper: don't disable disconnected outputs
Daniel Vetter
daniel.vetter at ffwll.ch
Fri Jun 14 15:13:14 PDT 2013
This has originally been added in
commit a3a0544b2c84e1d7a2022b558ecf66d8c6a8dd93
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Aug 31 15:16:30 2009 +1000
drm/kms: add explicit encoder disable function and detach harder.
I think it's the wrong thing to do for a few reasons:
- It's policy in the kernel. Userspace gets hotplug events when an
output disconnects, and it can inquire about all the routing that is
already set up. If userspace wants to disable a disconnected output
it can simply do so itself.
- The reason for adding it given in the commit message was to improve
use of shared encoders. But the disable_unused_functions call only
happens after the modeset has been completed, so it won't help too
much in making the modest succeed.
- We (at least in drm/i915, but iirc all other drivers work the same)
ensure that if the user accidentally yanks the cable and then
replugs, the same configuration will keep on working without any
userspace actions required. For most outputs that's the case by
default, and DP can have the same semantics with a simple re-train
handler fired off from the hpd replug event. This breaks it since if
the user is unlucky and hits the mouse, resulting in a panning of
e.g. the integrated panel that modeset might kill the accidentally
yanked output. Which isn't too great.
i915 has applied this behaviour change as part of the bit modeset
review, thus far without resulting in an angry crowd with pitchforks:
commit b0a2658acb5bf9ca86b4aab011b7106de3af0add
Author: Daniel Vetter <daniel.vetter at ffwll.ch>
Date: Tue Dec 18 09:37:54 2012 +0100
drm/i915: don't disable disconnected outputs
Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
---
drivers/gpu/drm/drm_crtc_helper.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 738a429..917c803 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -279,13 +279,6 @@ void drm_helper_disable_unused_functions(struct drm_device *dev)
struct drm_connector *connector;
struct drm_crtc *crtc;
- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
- if (!connector->encoder)
- continue;
- if (connector->status == connector_status_disconnected)
- connector->encoder = NULL;
- }
-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
if (!drm_helper_encoder_in_use(encoder)) {
drm_encoder_disable(encoder);
--
1.7.10.4
More information about the dri-devel
mailing list