From patchwork Sat Nov 25 19:35:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 10076071 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 60858602BD for ; Mon, 27 Nov 2017 08:33:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4E59428DA4 for ; Mon, 27 Nov 2017 08:33:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4313D28DA7; Mon, 27 Nov 2017 08:33:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D0DEE28DA6 for ; Mon, 27 Nov 2017 08:33:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B049889E2B; Mon, 27 Nov 2017 08:33:35 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 648816E161; Sat, 25 Nov 2017 19:36:06 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id 9so27449822wme.4; Sat, 25 Nov 2017 11:36:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=j0y0ymsuEQ+LUL4/PhFYVg9DsQIewB8dHcxOobTdBJ0=; b=e5TZ7mtj3WwmbPI6oLJn0YFZ5G30ZGYwtAzTzlxO5MZ84nT2U3HAZ2yVM7b3/WGX77 5nlXHul7+hXm4Gj2tjKrK1Xd/5z2bMkeQsLYaiTr9SrmUwKqyqCpmQfUq8d6L/CO0hur eSIchaN0CtF+bXUeIsWHR90t6kBTrZYyaVPbqGhpZKQQonuiciJBQt5zDCXTlha/JbuO q/AdVIpW7L31r77bWmi8OLK7wwaPMR3bXhN5PnLLijtrflTi5bwt7p6POMaOaR10Wv8J D64hKCqVSn7TVSlgWuYXUav/Bobwl30hCCFF4JXGP8YJu6Sf7Lb9FuNtN0u6DxG5HRrf sbnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=j0y0ymsuEQ+LUL4/PhFYVg9DsQIewB8dHcxOobTdBJ0=; b=V4Bs8r2enj8B46Q7I/In9v+jvMeGr29/PwGuWPNuVW4PfHaoZdTgjUQQfnr07f7kST lDJ3tgP48gW4TSQIDJJnM0o9XXGZPA6CAEcc//t1k4Ctj/1XbyUOnV+xHzf4FuAw5M61 fQAHJXqOGttcL8zILLdSR85a7RnNr6VYsQycW9XbpChWKhkmKNGWVGogbWtPMum0AAXe FGhxvOqi2IM5or6qGP4l5/6A8EI8EjT2NpUTj3Q9moNtLFgxZ6e9roMFR2S0IERnOTQ4 WY5IqIJDw60g3qmf5CdbbTvUimZYwB/S2UivjPkaiHfjeVSgVyvQfcG0SV6wiBSf3vP6 ny7A== X-Gm-Message-State: AJaThX6h2lVGZMclng4QtNRAuzGgQOBXIhbeceAtJfayOy47lacbDz6w cmW0D5lpPIjK9igecatCaYY= X-Google-Smtp-Source: AGs4zMYiuTJglXMGs+jdwJPrAE5/3ev01Nnksb8QWypVBfUkOTS4pUoUQdag2xxxrUF7SueclYWsMg== X-Received: by 10.28.8.80 with SMTP id 77mr11904652wmi.135.1511638565097; Sat, 25 Nov 2017 11:36:05 -0800 (PST) Received: from localhost.localdomain.com ([2001:470:7a95:4242:2c1c:b9eb:f8cb:6ccb]) by smtp.gmail.com with ESMTPSA id l142sm1835010wmb.43.2017.11.25.11.36.03 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 25 Nov 2017 11:36:04 -0800 (PST) From: Hans de Goede X-Google-Original-From: Hans de Goede To: Daniel Vetter , Jani Nikula , Sean Paul , Dave Airlie , Bartlomiej Zolnierkiewicz Subject: [PATCH v7 5/7] drm/i915: Add "panel orientation" property to the panel connector, v6. Date: Sat, 25 Nov 2017 20:35:51 +0100 Message-Id: <20171125193553.23986-6-hdegoede@redhat.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171125193553.23986-1-hdegoede@redhat.com> References: <20171125193553.23986-1-hdegoede@redhat.com> X-Mailman-Approved-At: Mon, 27 Nov 2017 08:33:34 +0000 Cc: Hans de Goede , intel-gfx , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.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-Virus-Scanned: ClamAV using ClamSMTP Ideally we could use the VBT for this, that would be simple, in intel_dsi_init() check dev_priv->vbt.dsi.config->rotation, set connector->display_info.panel_orientation accordingly and call drm_connector_init_panel_orientation_property(), done. Unfortunately vbt.dsi.config->rotation is always 0 even on tablets with an upside down LCD and where the GOP is properly rotating the EFI fb in hardware. So instead we end up reading the rotation from the primary plane. This commit only implements the panel orientation property for DSI panels on BYT / CHT hardware, as all known non normal oriented panels sofar are only found on this hardware. Changes in v2: -Read back the rotation applied by the GOP from the primary plane instead of relying on dev_priv->vbt.dsi.config->rotation, because it seems that the VBT rotation filed is always 0 even on devices where the GOP does apply a rotation Changes in v3: -Rewrite the code to read back the orientation from the primary plane to contain all of this in intel_dsi.c instead of poking a bunch of holes between all the different layers Changes in v6: -Move hardware readout to intel_dsi_init() Signed-off-by: Hans de Goede --- drivers/gpu/drm/i915/intel_dsi.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c index f09474b0c4d3..f67d321376e4 100644 --- a/drivers/gpu/drm/i915/intel_dsi.c +++ b/drivers/gpu/drm/i915/intel_dsi.c @@ -1666,6 +1666,27 @@ static const struct drm_connector_funcs intel_dsi_connector_funcs = { .atomic_duplicate_state = intel_digital_connector_duplicate_state, }; +static int intel_dsi_get_panel_orientation(struct intel_connector *connector) +{ + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); + int orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; + enum i9xx_plane_id plane; + u32 val; + + if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { + if (connector->encoder->crtc_mask == BIT(PIPE_B)) + plane = PLANE_B; + else + plane = PLANE_A; + + val = I915_READ(DSPCNTR(plane)); + if (val & DISPPLANE_ROTATE_180) + orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; + } + + return orientation; +} + static void intel_dsi_add_properties(struct intel_connector *connector) { struct drm_i915_private *dev_priv = to_i915(connector->base.dev); @@ -1681,6 +1702,13 @@ static void intel_dsi_add_properties(struct intel_connector *connector) allowed_scalers); connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; + + connector->base.display_info.panel_orientation = + intel_dsi_get_panel_orientation(connector); + drm_connector_init_panel_orientation_property( + &connector->base, + connector->panel.fixed_mode->hdisplay, + connector->panel.fixed_mode->vdisplay); } }