From patchwork Wed Nov 7 22:06:45 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 1712811 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork2.kernel.org (Postfix) with ESMTP id 7A946DFB7A for ; Wed, 7 Nov 2012 22:07:00 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 71B02A098B for ; Wed, 7 Nov 2012 14:07:00 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.10]) by gabe.freedesktop.org (Postfix) with ESMTP id B22929E744 for ; Wed, 7 Nov 2012 14:06:48 -0800 (PST) Received: from mailbox.adnet.avionic-design.de (mailbox.avionic-design.de [109.75.18.3]) by mrelayeu.kundenserver.de (node=mrbap3) with ESMTP (Nemesis) id 0MRDId-1TvCbA1o6x-00UWZU; Wed, 07 Nov 2012 23:06:47 +0100 Received: from localhost (localhost [127.0.0.1]) by mailbox.adnet.avionic-design.de (Postfix) with ESMTP id E32422A282E5 for ; Wed, 7 Nov 2012 23:06:46 +0100 (CET) X-Virus-Scanned: amavisd-new at avionic-design.de Received: from mailbox.adnet.avionic-design.de ([127.0.0.1]) by localhost (mailbox.avionic-design.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id H1XE-Bj+xq7G for ; Wed, 7 Nov 2012 23:06:46 +0100 (CET) Received: from mailman.adnet.avionic-design.de (mailman.adnet.avionic-design.de [172.20.31.172]) by mailbox.adnet.avionic-design.de (Postfix) with ESMTP id 0762B2A28173 for ; Wed, 7 Nov 2012 23:06:46 +0100 (CET) Received: from localhost (avionic-0098.adnet.avionic-design.de [172.20.31.233]) by mailman.adnet.avionic-design.de (Postfix) with ESMTP id 9181E10055A for ; Wed, 7 Nov 2012 23:06:41 +0100 (CET) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH] HACK: drm: Allow encoders to be reenabled Date: Wed, 7 Nov 2012 23:06:45 +0100 Message-Id: <1352326005-7215-1-git-send-email-thierry.reding@avionic-design.de> X-Mailer: git-send-email 1.8.0 X-Provags-ID: V02:K0:chzPH28TcaXJ5Ac7iVnsTeNGc25AMbltr4h4tvGGgUU VZZUmgR47YGJraMKE2eNEDjsnDAGEv5kdI1YQ0pXFGIHr1BMrK XQ1mwhCKPMTXm72i9qQH5uJ8Nk5rn03QFvUC/JCpx42EQ3x12E f+BgAPAXpzACC1DRD8bzfsM1XC0iYRoJxkbb4H8M1++J07mggT uWSJxHMNc1jtn3/RLnSz2oDERFXZSTHqJcs/6KMPN7r9dMfvgT xmFX1+l1YkSw6HorUZIx1fjET6qPo4ojJgNagf0ioGq5u6DwYg BcW1MFbMD1h5+w/WqSCE3axG3qyETlZiZHSUTPDOfIza6Vt4Wq buIySbydLdIvFL3Cvo7/gamTYhz5D7rmXwzWdWURAzHslYg/P5 5zqWXnm8MP/ZRqdH/Kv2V4NPix/nb7akag73rs9l6MVyGSb1PM dC6KD X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org When running the xf86-video-modesetting driver on top of a KMS driver, leaving X causes the active encoder's DPMS mode to be set to off by the drm_crtc_helper_disable() function. This doesn't set the connector's DPMS mode to off, however, which results in subsequent calls to the drm_helper_connector_dpms() function to not enable the encoder because the connector's DPMS mode hasn't changed. This patch works around this by forcing the connector's DPMS mode to off if the encoder has changed, which always happens when a new mode is set after drm_crtc_helper_disable(). The code that sets the connector DPMS mode to on will then also enable the CRTC and encoder because the mode actually changed. Signed-off-by: Thierry Reding Reviewed-by: Alex Deucher --- drivers/gpu/drm/drm_crtc_helper.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index 1227adf..1b5ebf1 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c @@ -649,6 +649,12 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) */ if (connector->encoder) connector->encoder->crtc = NULL; + /* + * HACK: Force DPMS mode to off so that the encoder + * has a chance of being reenabled along with the + * connector later on. + */ + connector->dpms = DRM_MODE_DPMS_OFF; connector->encoder = new_encoder; } }