From patchwork Tue Feb 11 17:12:27 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 3633561 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.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id D19769F369 for ; Wed, 12 Feb 2014 00:22:17 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id B2E5520142 for ; Wed, 12 Feb 2014 00:22:16 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id A4D842013A for ; Wed, 12 Feb 2014 00:22:15 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 61E91FABFC; Tue, 11 Feb 2014 16:22:07 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lb0-f174.google.com (mail-lb0-f174.google.com [209.85.217.174]) by gabe.freedesktop.org (Postfix) with ESMTP id E4C86F9D3C for ; Tue, 11 Feb 2014 09:14:01 -0800 (PST) Received: by mail-lb0-f174.google.com with SMTP id l4so6094268lbv.5 for ; Tue, 11 Feb 2014 09:13:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=tHEv1ReJwa+66LvB+LrEIk4fAFbtbPI/lFn1HrLhxS0=; b=0TpIOdcRe3+v8MpvDrq0Ks/7rrbEvYSVupF57o2YqdUX8Hgi6odqaU6FnFNjFgbxdH PWai0xr2g2n9L2quEijMWaHWr+wxFk9cjswratgqQAhPVS7lC086jJ272lO2sLjg2/C7 diIsJus7I27N+uPUVvTA9C0NuzVvTcxZerq17eHxTJCyy7aaY6db82sD0b3zY5WyffwD 0xHiYbOOwmPCwPdSHW1YywJVKi1SagksPaEilMh2bMIJJ7Ts2qeHbGhRUOBwaiZDajka NIFS9smpu7DdsYbERSu2nJoqBDAb7LJdIvUHx3BxzFgk8+RR1G8MaGYsQslKJZJix+KS WBDg== X-Received: by 10.112.142.100 with SMTP id rv4mr537443lbb.78.1392138839107; Tue, 11 Feb 2014 09:13:59 -0800 (PST) Received: from smtp.gmail.com:587 (ppp37-190-30-154.pppoe.spdop.ru. [37.190.30.154]) by mx.google.com with ESMTPSA id k1sm20557665lbc.5.2014.02.11.09.13.57 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Feb 2014 09:13:58 -0800 (PST) Received: by smtp.gmail.com:587 (sSMTP sendmail emulation); Tue, 11 Feb 2014 21:13:47 +0400 From: Dmitry Osipenko To: thierry.reding@gmail.com, tbergstrom@nvidia.com, airlied@linux.ie, swarren@wwwdotorg.org Subject: [PATCH 1/1] drm/tegra: Add guard to avoid double disable/enable of RGB outputs Date: Tue, 11 Feb 2014 21:12:27 +0400 Message-Id: <1392138747-18198-1-git-send-email-digetx@gmail.com> X-Mailer: git-send-email 1.8.5.3 X-Mailman-Approved-At: Tue, 11 Feb 2014 16:22:04 -0800 Cc: linux-tegra@vger.kernel.org, Dmitry Osipenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org 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@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, 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 Add guard to check whether RGB output is already enabled in the way it's done for HDMI output. Fixes possible hang on trying to disable output twice (first time during driver probe and second on fb registering). Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/tegra/rgb.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c index 338f7f6..0266fb4 100644 --- a/drivers/gpu/drm/tegra/rgb.c +++ b/drivers/gpu/drm/tegra/rgb.c @@ -15,6 +15,7 @@ struct tegra_rgb { struct tegra_output output; struct tegra_dc *dc; + bool enabled; struct clk *clk_parent; struct clk *clk; @@ -89,6 +90,9 @@ static int tegra_output_rgb_enable(struct tegra_output *output) struct tegra_rgb *rgb = to_rgb(output); unsigned long value; + if (rgb->enabled) + return 0; + tegra_dc_write_regs(rgb->dc, rgb_enable, ARRAY_SIZE(rgb_enable)); value = DE_SELECT_ACTIVE | DE_CONTROL_NORMAL; @@ -122,6 +126,8 @@ static int tegra_output_rgb_enable(struct tegra_output *output) tegra_dc_writel(rgb->dc, GENERAL_ACT_REQ << 8, DC_CMD_STATE_CONTROL); tegra_dc_writel(rgb->dc, GENERAL_ACT_REQ, DC_CMD_STATE_CONTROL); + rgb->enabled = true; + return 0; } @@ -130,6 +136,9 @@ static int tegra_output_rgb_disable(struct tegra_output *output) struct tegra_rgb *rgb = to_rgb(output); unsigned long value; + if (!rgb->enabled) + return 0; + value = tegra_dc_readl(rgb->dc, DC_CMD_DISPLAY_POWER_CONTROL); value &= ~(PW0_ENABLE | PW1_ENABLE | PW2_ENABLE | PW3_ENABLE | PW4_ENABLE | PM0_ENABLE | PM1_ENABLE); @@ -144,6 +153,8 @@ static int tegra_output_rgb_disable(struct tegra_output *output) tegra_dc_write_regs(rgb->dc, rgb_disable, ARRAY_SIZE(rgb_disable)); + rgb->enabled = false; + return 0; }