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: 10075031 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 51C0860353 for ; Sat, 25 Nov 2017 19:36:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 459F928E2D for ; Sat, 25 Nov 2017 19:36:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3A8A828E4B; Sat, 25 Nov 2017 19:36:11 +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=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D595728E2D for ; Sat, 25 Nov 2017 19:36:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751719AbdKYTgI (ORCPT ); Sat, 25 Nov 2017 14:36:08 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:44325 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751675AbdKYTgG (ORCPT ); Sat, 25 Nov 2017 14:36:06 -0500 Received: by mail-wm0-f66.google.com with SMTP id r68so27636958wmr.3 for ; Sat, 25 Nov 2017 11:36:05 -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=X8N02nG3oYrMTFRsMHzlASmAGPYAhYrkjjWIzgDFDIHZJQG8FlgZGQMz0mvbfG4Kvi x3q9geGKR+p2r8+DVWGY7dik7IANKlywVUBj90PV2GAvrrTbWEkJ27HQ2J69r/Ol1ECK H6Uhqjk3KU2WsEaomWom6nfu8hw5PQ/sntv0Pwt4YbREqjo1/OphCX45Gkw03fwm69rq pH7jQWLCstH0lsRir4uCCs7jxvFWJQCid6qw6IjrKHwuOPwmMP+DdCOHqhgVhRnmdhj8 At3zPjmQPO3UlL5Ch8OHSN6D+moBpsTmeJFMAdLlGFJZxsXoq6224rDOGGgw7tNaMDsH 5LUg== X-Gm-Message-State: AJaThX53hSUnCvYWxLt32f1Wpq2huMNG6r8ted/z+uHgniphOI08wNy9 mImM4sTmk1y10a6E9AMOXto= 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 Cc: Hans de Goede , intel-gfx , dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org 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> Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org 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); } }