From patchwork Mon Apr 22 15:06:51 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 2473011 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 B0EDDDF23A for ; Mon, 22 Apr 2013 15:07:12 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8E447E66B1 for ; Mon, 22 Apr 2013 08:07:12 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wi0-f169.google.com (mail-wi0-f169.google.com [209.85.212.169]) by gabe.freedesktop.org (Postfix) with ESMTP id 8C221E5E01 for ; Mon, 22 Apr 2013 08:07:00 -0700 (PDT) Received: by mail-wi0-f169.google.com with SMTP id h11so4880475wiv.4 for ; Mon, 22 Apr 2013 08:06:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:mime-version:content-type:content-transfer-encoding; bh=e5gm7YAB2e/1tsJFJIQ4gn0B/lKpPNFIFXefodEVHv4=; b=b61y425BEmUcztScYpw59+jN6Z/vvlDvr8PIWwsazksS6Q2Zm3u562QluigYo46mlS zueGUO5Lj9j+K7ricRBKchxtw+6P37N1PpIlNPiWtBfwY3lTDBaEQPkATgIvh8lSuCdP 9CkRtzpaaXOHaU1MyNaYe7vPS8g03kVXNyZKU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:mime-version:content-type:content-transfer-encoding :x-gm-message-state; bh=e5gm7YAB2e/1tsJFJIQ4gn0B/lKpPNFIFXefodEVHv4=; b=d4D9MJRHqu+POsW6DdKhnEUsFa2zgC1lBNBXrtfT97oWyetBk/BBoR9lmBzZ7RLdOs eemra337hQ4RYYsEUZSCmmuN+92JmZtFcPW5Qjehci7qKIorKUl1q3sP9rt3EnBYoB0/ RKZCuye5gVYkCtjprGfxcZ26GiN4g+13Oj62yXc2z5gIMjkD85MvtrSDVbt9ALxsl1Ge dgcn8HsZ+qwTd1Xt67SjEyi1cLrOATOGifDvrJVwqPeJBRqADKKmuN6Ee+KH44vWsI5B gTQ8ZlFrYUZINWe6JWckylIx9jw6nKTp5NcCGwQwll+w8EJcvq9xO7Bn8dday7EhO6RR LFsg== X-Received: by 10.180.188.141 with SMTP id ga13mr12691282wic.9.1366643219369; Mon, 22 Apr 2013 08:06:59 -0700 (PDT) Received: from bremse.ffwll.local (178-83-130-250.dynamic.hispeed.ch. [178.83.130.250]) by mx.google.com with ESMTPS id k43sm14054041een.2.2013.04.22.08.06.57 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 22 Apr 2013 08:06:58 -0700 (PDT) From: Daniel Vetter To: Intel Graphics Development Date: Mon, 22 Apr 2013 17:06:51 +0200 Message-Id: <1366643211-27411-1-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <20130422112449.GA4469@intel.com> References: <20130422112449.GA4469@intel.com> MIME-Version: 1.0 X-Gm-Message-State: ALoCoQlA3j1ndVRCX6nyCxWJimkwMrLhHR2rXqPrtdkVshoKh7or68jr/JOsd0qkoQ3qoQO3CgHR Cc: Daniel Vetter , Paulo Zanoni Subject: [Intel-gfx] [PATCH] drm/i915: avoid full modeset when changing the color range properties 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: , 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 Automatic color range selection was added in commit 55bc60db5988c8366751d3d04dd690698a53412c Author: Ville Syrjälä Date: Thu Jan 17 16:31:29 2013 +0200 drm/i915: Add "Automatic" mode for the "Broadcast RGB" property but that removed the check to avoid a full modeset if the value is unchanged. Unfortunately X sets all properties with their current value at start-up, resulting in some ugly flickering which shouldn't be there. v2: Change old_range from bool to uint32_t, spotted by Ville. Cc: Ville Syrjälä Cc: Paulo Zanoni Signed-off-by: Daniel Vetter --- drivers/gpu/drm/i915/intel_dp.c | 8 ++++++++ drivers/gpu/drm/i915/intel_hdmi.c | 8 ++++++++ drivers/gpu/drm/i915/intel_sdvo.c | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 97edbb2..994a05d 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -2649,6 +2649,9 @@ intel_dp_set_property(struct drm_connector *connector, } if (property == dev_priv->broadcast_rgb_property) { + bool old_auto = intel_dp->color_range_auto; + uint32_t old_range = intel_dp->color_range; + switch (val) { case INTEL_BROADCAST_RGB_AUTO: intel_dp->color_range_auto = true; @@ -2664,6 +2667,11 @@ intel_dp_set_property(struct drm_connector *connector, default: return -EINVAL; } + + if (old_auto == intel_dp->color_range_auto && + old_range == intel_dp->color_range) + return 0; + goto done; } diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 3942041..4dca486 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -947,6 +947,9 @@ intel_hdmi_set_property(struct drm_connector *connector, } if (property == dev_priv->broadcast_rgb_property) { + bool old_auto = intel_hdmi->color_range_auto; + uint32_t old_range = intel_hdmi->color_range; + switch (val) { case INTEL_BROADCAST_RGB_AUTO: intel_hdmi->color_range_auto = true; @@ -962,6 +965,11 @@ intel_hdmi_set_property(struct drm_connector *connector, default: return -EINVAL; } + + if (old_auto == intel_hdmi->color_range_auto && + old_range == intel_hdmi->color_range) + return 0; + goto done; } diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index a618a6a..c1f7e0a 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c @@ -1930,6 +1930,9 @@ intel_sdvo_set_property(struct drm_connector *connector, } if (property == dev_priv->broadcast_rgb_property) { + bool old_auto = intel_sdvo->color_range_auto; + bool old_range = intel_sdvo->color_range; + switch (val) { case INTEL_BROADCAST_RGB_AUTO: intel_sdvo->color_range_auto = true; @@ -1947,6 +1950,11 @@ intel_sdvo_set_property(struct drm_connector *connector, default: return -EINVAL; } + + if (old_auto == intel_sdvo->color_range_auto && + old_range == intel_sdvo->color_range) + return 0; + goto done; }