From patchwork Thu Oct 11 23:27:54 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stuart Abercrombie X-Patchwork-Id: 1584501 Return-Path: X-Original-To: patchwork-intel-gfx@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 054BADFABE for ; Thu, 11 Oct 2012 23:29:01 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E84A39E8C9 for ; Thu, 11 Oct 2012 16:29:00 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-pb0-f49.google.com (mail-pb0-f49.google.com [209.85.160.49]) by gabe.freedesktop.org (Postfix) with ESMTP id 4364AA0BC3 for ; Thu, 11 Oct 2012 16:28:12 -0700 (PDT) Received: by mail-pb0-f49.google.com with SMTP id xa7so2430613pbc.36 for ; Thu, 11 Oct 2012 16:28:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:x-mailer; bh=+6fViRM0r9wqhuY4Dn96mC7m055rD3MQ7Tg2K6L+H8A=; b=RsRgIY927AxtlyqlFHw9MmhNu8nTTb4XC6Q1vHXVUwVb8t+tAEan5hQgiKGYMVXVNl JOBP++qJY4VeFQrf27hK5xvhWOqinXV6N3kW0Pluir2SRjq/wfCvmFUv2cO9czIFxkoa e/TBzY9JZgYaloUxyk2ZuX4i/iMRvmtlLIR0U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:x-gm-message-state; bh=+6fViRM0r9wqhuY4Dn96mC7m055rD3MQ7Tg2K6L+H8A=; b=ZeP3SynJZjNFP7L/NsTtrM1xU9GfrVJJ6GPshF3RquTZqJzDl4CNd+QNdBoSaiFuqM zjCsVxPizgHFgKjVeiyYDytzYqmDmbiSipLLg4FiOpuDXqFb2ISMiuGppLHZHCf92REe 0coQYA4EFVKSAx4sOf58T5VzoernPduLnjPlOm2oWgsoGBpO0lJ2vFyB96TBhopAr+Ca izTkhFxI6KUzJPRHDur6tRa9IXDMn/ll+Ekf2B296+lX96roDJi2mI3WTE3h3CCl1ugS Zr9AkhHa/ON5FixW4XTFiZT0dv8y6HSIOYx7ZfLEg/8Fu1A2sNXbtVfkCFkEeCL7aT33 AdgQ== Received: by 10.68.220.169 with SMTP id px9mr8487462pbc.14.1349998092069; Thu, 11 Oct 2012 16:28:12 -0700 (PDT) Received: from localhost ([2620:0:1000:1b01:ae16:2dff:fe07:52e0]) by mx.google.com with ESMTPS id kn8sm637366pbc.24.2012.10.11.16.28.10 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 11 Oct 2012 16:28:11 -0700 (PDT) From: Stuart Abercrombie To: intel-gfx@lists.freedesktop.org Date: Thu, 11 Oct 2012 16:27:54 -0700 Message-Id: <1349998074-10414-1-git-send-email-sabercrombie@chromium.org> X-Mailer: git-send-email 1.7.7.3 X-Gm-Message-State: ALoCoQlz95pndxkUfNkSMVLBIT67j6DyyWmvazXQyUZmIV+my0DMbojt7udrVW0wC9hHMKAg2C2R Subject: [Intel-gfx] [PATCH] Poll for HDMI disconnects. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Following a hotplug interrupt the driver uses a successful EDID read to indicate HDMI sink presence. This leads to missing HDMI cable unplug events because the DDC lines can remain up, allowing an EDID read to complete, well after the HPD line goes down during unplugging Since it is only the disconnect case that suffers from unplug ordering problems with the DDC lines, restrict polling to that. Otherwise we waste power. --- drivers/gpu/drm/drm_crtc_helper.c | 8 ++++++-- drivers/gpu/drm/i915/intel_hdmi.c | 2 +- include/drm/drm_crtc.h | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index 3252e70..b38ea4f 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c @@ -938,8 +938,12 @@ static void output_poll_execute(struct work_struct *work) if (!connector->polled) continue; - else if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT)) - repoll = true; + if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT)) { + if (connector->polled & DRM_CONNECTOR_POLL_DISCONNECT_ONLY) + repoll = (connector->status == connector_status_connected); + else + repoll = true; + } old_status = connector->status; /* if we are connected and don't want to poll for disconnect diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 229897f..246e8f4 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -964,7 +964,7 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg, enum port port) intel_encoder->type = INTEL_OUTPUT_HDMI; - connector->polled = DRM_CONNECTOR_POLL_HPD; + connector->polled = DRM_CONNECTOR_POLL_DISCONNECT | DRM_CONNECTOR_POLL_DISCONNECT_ONLY; connector->interlace_allowed = 1; connector->doublescan_allowed = 0; intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 316ce64..a60abb5 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -503,6 +503,8 @@ enum drm_connector_force { /* can cleanly poll for disconnections without flickering the screen */ /* DACs should rarely do this without a lot of testing */ #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2) +/* Only poll for disconnections. */ +#define DRM_CONNECTOR_POLL_DISCONNECT_ONLY (1 << 3) #define MAX_ELD_BYTES 128