From patchwork Wed Jul 8 08:24:57 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Michel_D=C3=A4nzer?= X-Patchwork-Id: 6742531 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 4347F9F2F0 for ; Wed, 8 Jul 2015 08:25:07 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 5B2F0207B2 for ; Wed, 8 Jul 2015 08:25:06 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 600CF2073C for ; Wed, 8 Jul 2015 08:25:05 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EED4A6E421; Wed, 8 Jul 2015 01:25:03 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail.gna.ch (darkcity.gna.ch [195.226.6.51]) by gabe.freedesktop.org (Postfix) with ESMTP id 0A6846E421 for ; Wed, 8 Jul 2015 01:25:02 -0700 (PDT) Received: from kaveri (125-14-38-183.rev.home.ne.jp [125.14.38.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by darkcity.gna.ch (Postfix) with ESMTPSA id 8A214C07F1 for ; Wed, 8 Jul 2015 10:24:09 +0200 (CEST) Received: from daenzer by kaveri with local (Exim 4.86_RC4) (envelope-from ) id 1ZCkf3-000131-FW for dri-devel@lists.freedesktop.org; Wed, 08 Jul 2015 17:24:57 +0900 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= To: dri-devel@lists.freedesktop.org Subject: [PATCH] drm/radeon: Report panel connector status as unknown when lid is closed Date: Wed, 8 Jul 2015 17:24:57 +0900 Message-Id: <1436343897-3990-1-git-send-email-michel@daenzer.net> X-Mailer: git-send-email 2.1.4 MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Michel Dänzer This makes fbcon and desktop environments such as GNOME automatically not use the panel when the lid is closed. Signed-off-by: Michel Dänzer --- drivers/gpu/drm/radeon/radeon_connectors.c | 82 ++++++++++++++++-------------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index cebb65e..2484438 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -23,6 +23,7 @@ * Authors: Dave Airlie * Alex Deucher */ +#include #include #include #include @@ -890,25 +891,27 @@ radeon_lvds_detect(struct drm_connector *connector, bool force) if (r < 0) return connector_status_disconnected; - if (encoder) { - struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); - struct drm_display_mode *native_mode = &radeon_encoder->native_mode; + if (acpi_lid_open()) { + if (encoder) { + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct drm_display_mode *native_mode = &radeon_encoder->native_mode; - /* check if panel is valid */ - if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) - ret = connector_status_connected; - /* don't fetch the edid from the vbios if ddc fails and runpm is - * enabled so we report disconnected. - */ - if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) - ret = connector_status_disconnected; - } + /* check if panel is valid */ + if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) + ret = connector_status_connected; + /* don't fetch the edid from the vbios if ddc fails and runpm is + * enabled so we report disconnected. + */ + if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) + ret = connector_status_disconnected; + } - /* check for edid as well */ - radeon_connector_get_edid(connector); - if (radeon_connector->edid) - ret = connector_status_connected; - /* check acpi lid status ??? */ + /* check for edid as well */ + radeon_connector_get_edid(connector); + if (radeon_connector->edid) + ret = connector_status_connected; + } else + ret = connector_status_unknown; radeon_connector_update_scratch_regs(connector, ret); pm_runtime_mark_last_busy(connector->dev->dev); @@ -1647,29 +1650,32 @@ radeon_dp_detect(struct drm_connector *connector, bool force) if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) || (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) { - if (encoder) { - struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); - struct drm_display_mode *native_mode = &radeon_encoder->native_mode; + if (acpi_lid_open()) { + if (encoder) { + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct drm_display_mode *native_mode = &radeon_encoder->native_mode; - /* check if panel is valid */ - if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) + /* check if panel is valid */ + if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) + ret = connector_status_connected; + /* don't fetch the edid from the vbios if ddc fails and runpm is + * enabled so we report disconnected. + */ + if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) + ret = connector_status_disconnected; + } + /* eDP is always DP */ + radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; + if (!radeon_dig_connector->edp_on) + atombios_set_edp_panel_power(connector, + ATOM_TRANSMITTER_ACTION_POWER_ON); + if (radeon_dp_getdpcd(radeon_connector)) ret = connector_status_connected; - /* don't fetch the edid from the vbios if ddc fails and runpm is - * enabled so we report disconnected. - */ - if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) - ret = connector_status_disconnected; - } - /* eDP is always DP */ - radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; - if (!radeon_dig_connector->edp_on) - atombios_set_edp_panel_power(connector, - ATOM_TRANSMITTER_ACTION_POWER_ON); - if (radeon_dp_getdpcd(radeon_connector)) - ret = connector_status_connected; - if (!radeon_dig_connector->edp_on) - atombios_set_edp_panel_power(connector, - ATOM_TRANSMITTER_ACTION_POWER_OFF); + if (!radeon_dig_connector->edp_on) + atombios_set_edp_panel_power(connector, + ATOM_TRANSMITTER_ACTION_POWER_OFF); + } else + ret = connector_status_unknown; } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != ENCODER_OBJECT_ID_NONE) { /* DP bridges are always DP */