From patchwork Mon May 18 17:06:41 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 6432901 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 06C0FC0433 for ; Tue, 19 May 2015 01:11:59 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1E00F20437 for ; Tue, 19 May 2015 01:11:58 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id C158120435 for ; Tue, 19 May 2015 01:11:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AB0EC6E5DB; Mon, 18 May 2015 18:11:52 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-la0-f65.google.com (mail-la0-f65.google.com [209.85.215.65]) by gabe.freedesktop.org (Postfix) with ESMTP id E15596E3EC for ; Mon, 18 May 2015 10:07:51 -0700 (PDT) Received: by labgd6 with SMTP id gd6so859177lab.2 for ; Mon, 18 May 2015 10:07:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=kmsXO+JjsgsnQQI1Vk4qwww07TSBGWE0OjkX9vhTh+Y=; b=1JSpDGkgcIYsWz+7TUeijy6hkPUdyDQRHxBIz6rZFN8a1Io8HCd+CkMzGQCGbEpDMt l16WQjRGZuoEsPJUsYr6ar9il0hsfg7V5TYT9PFVv9w6oalcK/zQA0TbMJJ3JYZGGGmH feE7KIeOy0jEpBYOBPirz36DiMELGAs0UU7WtjM1bizju92EFXsGTaPqrZhIUKACp4Th EG28k45vhLXhUp+g0F8minvud4sEhTSfKRTR1rfoNvEKtXg9hRpX8sIPlfnCMTJLc5fr zoN1vDzyg1X2a3MYOEhCauQ/TIVJfJvaDxJMcfIrjE/b/9dDVVjhE4S/S1UI6q0WOOW/ XmKg== X-Received: by 10.152.43.37 with SMTP id t5mr10479341lal.96.1431968870738; Mon, 18 May 2015 10:07:50 -0700 (PDT) Received: from localhost.localdomain ([46.138.140.105]) by mx.google.com with ESMTPSA id ew6sm2861004lbc.40.2015.05.18.10.07.49 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 18 May 2015 10:07:50 -0700 (PDT) From: Dmitry Osipenko To: digetx@gmail.com, Thierry Reding Subject: [PATCH] drm/tegra: rgb: Use atomic DPMS helpers Date: Mon, 18 May 2015 20:06:41 +0300 Message-Id: <1431968804-17182-1-git-send-email-digetx@gmail.com> X-Mailer: git-send-email 2.4.0 X-Mailman-Approved-At: Mon, 18 May 2015 18:11:51 -0700 Cc: Alexandre Courbot , =?UTF-8?q?Terje=20Bergstr=C3=B6m?= , Stephen Warren , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org 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: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_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 Panel DPMS got broken after adding support for atomic modesetting. Fix it by making RGB output use of generic atomic DPMS helpers. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/tegra/rgb.c | 49 ++++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c index 7cd833f..46cbaf2 100644 --- a/drivers/gpu/drm/tegra/rgb.c +++ b/drivers/gpu/drm/tegra/rgb.c @@ -88,13 +88,8 @@ static void tegra_dc_write_regs(struct tegra_dc *dc, tegra_dc_writel(dc, table[i].value, table[i].offset); } -static void tegra_rgb_connector_dpms(struct drm_connector *connector, - int mode) -{ -} - static const struct drm_connector_funcs tegra_rgb_connector_funcs = { - .dpms = tegra_rgb_connector_dpms, + .dpms = drm_atomic_helper_connector_dpms, .reset = drm_atomic_helper_connector_reset, .detect = tegra_output_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, @@ -125,21 +120,28 @@ static const struct drm_encoder_funcs tegra_rgb_encoder_funcs = { .destroy = tegra_output_encoder_destroy, }; -static void tegra_rgb_encoder_dpms(struct drm_encoder *encoder, int mode) +static void tegra_rgb_encoder_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted) { } -static void tegra_rgb_encoder_prepare(struct drm_encoder *encoder) +static void tegra_rgb_encoder_disable(struct drm_encoder *encoder) { -} + struct tegra_output *output = encoder_to_output(encoder); + struct tegra_rgb *rgb = to_rgb(output); -static void tegra_rgb_encoder_commit(struct drm_encoder *encoder) -{ + if (output->panel) + drm_panel_disable(output->panel); + + tegra_dc_write_regs(rgb->dc, rgb_disable, ARRAY_SIZE(rgb_disable)); + tegra_dc_commit(rgb->dc); + + if (output->panel) + drm_panel_unprepare(output->panel); } -static void tegra_rgb_encoder_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted) +static void tegra_rgb_encoder_enable(struct drm_encoder *encoder) { struct tegra_output *output = encoder_to_output(encoder); struct tegra_rgb *rgb = to_rgb(output); @@ -174,21 +176,6 @@ static void tegra_rgb_encoder_mode_set(struct drm_encoder *encoder, drm_panel_enable(output->panel); } -static void tegra_rgb_encoder_disable(struct drm_encoder *encoder) -{ - struct tegra_output *output = encoder_to_output(encoder); - struct tegra_rgb *rgb = to_rgb(output); - - if (output->panel) - drm_panel_disable(output->panel); - - tegra_dc_write_regs(rgb->dc, rgb_disable, ARRAY_SIZE(rgb_disable)); - tegra_dc_commit(rgb->dc); - - if (output->panel) - drm_panel_unprepare(output->panel); -} - static int tegra_rgb_encoder_atomic_check(struct drm_encoder *encoder, struct drm_crtc_state *crtc_state, @@ -231,11 +218,9 @@ tegra_rgb_encoder_atomic_check(struct drm_encoder *encoder, } static const struct drm_encoder_helper_funcs tegra_rgb_encoder_helper_funcs = { - .dpms = tegra_rgb_encoder_dpms, - .prepare = tegra_rgb_encoder_prepare, - .commit = tegra_rgb_encoder_commit, .mode_set = tegra_rgb_encoder_mode_set, .disable = tegra_rgb_encoder_disable, + .enable = tegra_rgb_encoder_enable, .atomic_check = tegra_rgb_encoder_atomic_check, };