From nobody Sun Sep 14 03:50:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 90051C61DA3 for ; Thu, 26 Jan 2023 18:25:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231830AbjAZSZG (ORCPT ); Thu, 26 Jan 2023 13:25:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231968AbjAZSYx (ORCPT ); Thu, 26 Jan 2023 13:24:53 -0500 Received: from out-7.mta0.migadu.com (out-7.mta0.migadu.com [91.218.175.7]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8CBA5A34D for ; Thu, 26 Jan 2023 10:24:52 -0800 (PST) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Rayyan Ansari To: dri-devel@lists.freedesktop.org Cc: ~postmarketos/upstreaming@lists.sr.ht, asahi@lists.linux.dev, janne@jannau.net, Rayyan Ansari , Daniel Vetter , David Airlie , devicetree@vger.kernel.org, Hans de Goede , Javier Martinez Canillas , Krzysztof Kozlowski , linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, Rob Herring , Thomas Zimmermann Subject: [PATCH v4 1/2] drm/simpledrm: Allow physical width and height configuration via panel node Date: Thu, 26 Jan 2023 18:24:34 +0000 Message-Id: <20230126182435.70544-2-rayyan@ansari.sh> In-Reply-To: <20230126182435.70544-1-rayyan@ansari.sh> References: <20230126182435.70544-1-rayyan@ansari.sh> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Parse the width-mm and height-mm devicetree properties of the panel node, and use this to set the DRM Display Mode instead of calculating it based on a hardcoded DPI. Signed-off-by: Rayyan Ansari Reviewed-by: Thomas Zimmermann --- drivers/gpu/drm/tiny/simpledrm.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simple= drm.c index 162eb44dcba8..f8b18441cfcb 100644 --- a/drivers/gpu/drm/tiny/simpledrm.c +++ b/drivers/gpu/drm/tiny/simpledrm.c @@ -599,16 +599,12 @@ static const struct drm_mode_config_funcs simpledrm_m= ode_config_funcs =3D { */ =20 static struct drm_display_mode simpledrm_mode(unsigned int width, - unsigned int height) + unsigned int height, + unsigned int width_mm, + unsigned int height_mm) { - /* - * Assume a monitor resolution of 96 dpi to - * get a somewhat reasonable screen size. - */ const struct drm_display_mode mode =3D { - DRM_MODE_INIT(60, width, height, - DRM_MODE_RES_MM(width, 96ul), - DRM_MODE_RES_MM(height, 96ul)) + DRM_MODE_INIT(60, width, height, width_mm, height_mm) }; =20 return mode; @@ -622,6 +618,8 @@ static struct simpledrm_device *simpledrm_device_create= (struct drm_driver *drv, struct simpledrm_device *sdev; struct drm_device *dev; int width, height, stride; + int width_mm =3D 0, height_mm =3D 0; + struct device_node *panel_node; const struct drm_format_info *format; struct resource *res, *mem; void __iomem *screen_base; @@ -676,6 +674,13 @@ static struct simpledrm_device *simpledrm_device_creat= e(struct drm_driver *drv, format =3D simplefb_get_format_of(dev, of_node); if (IS_ERR(format)) return ERR_CAST(format); + + panel_node =3D of_parse_phandle(of_node, "panel", 0); + if (panel_node) { + simplefb_read_u32_of(dev, panel_node, "width-mm", &width_mm); + simplefb_read_u32_of(dev, panel_node, "height-mm", &height_mm); + of_node_put(panel_node); + } } else { drm_err(dev, "no simplefb configuration found\n"); return ERR_PTR(-ENODEV); @@ -686,7 +691,16 @@ static struct simpledrm_device *simpledrm_device_creat= e(struct drm_driver *drv, return ERR_PTR(-EINVAL); } =20 - sdev->mode =3D simpledrm_mode(width, height); + /* + * Assume a monitor resolution of 96 dpi if physical dimensions + * are not specified to get a somewhat reasonable screen size. + */ + if (!width_mm) + width_mm =3D DRM_MODE_RES_MM(width, 96ul); + if (!height_mm) + height_mm =3D DRM_MODE_RES_MM(height, 96ul); + + sdev->mode =3D simpledrm_mode(width, height, width_mm, height_mm); sdev->format =3D format; sdev->pitch =3D stride; =20 --=20 2.39.1 From nobody Sun Sep 14 03:50:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 07AB5C05027 for ; Thu, 26 Jan 2023 18:25:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231931AbjAZSZC (ORCPT ); Thu, 26 Jan 2023 13:25:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231992AbjAZSYy (ORCPT ); Thu, 26 Jan 2023 13:24:54 -0500 Received: from out-106.mta0.migadu.com (out-106.mta0.migadu.com [IPv6:2001:41d0:1004:224b::6a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 692595A350 for ; Thu, 26 Jan 2023 10:24:53 -0800 (PST) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Rayyan Ansari To: dri-devel@lists.freedesktop.org Cc: ~postmarketos/upstreaming@lists.sr.ht, asahi@lists.linux.dev, janne@jannau.net, Rayyan Ansari , Daniel Vetter , David Airlie , devicetree@vger.kernel.org, Hans de Goede , Javier Martinez Canillas , Krzysztof Kozlowski , linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, Rob Herring , Thomas Zimmermann Subject: [PATCH v4 2/2] dt-bindings: display: simple-framebuffer: Document the panel node Date: Thu, 26 Jan 2023 18:24:35 +0000 Message-Id: <20230126182435.70544-3-rayyan@ansari.sh> In-Reply-To: <20230126182435.70544-1-rayyan@ansari.sh> References: <20230126182435.70544-1-rayyan@ansari.sh> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Document the new panel node and what it is used for. Signed-off-by: Rayyan Ansari Reviewed-by: Rob Herring --- .../devicetree/bindings/display/simple-framebuffer.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Documentation/devicetree/bindings/display/simple-framebuffer.y= aml b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml index dd64f70b5014..4e10a100b6c8 100644 --- a/Documentation/devicetree/bindings/display/simple-framebuffer.yaml +++ b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml @@ -26,6 +26,11 @@ description: |+ over control to a driver for the real hardware. The bindings for the hw nodes must specify which node is considered the primary node. =20 + If a panel node is given, then the driver uses this to configure the + physical width and height of the display. If no panel node is given, + then the driver uses the width and height properties of the simplefb + node to estimate it. + It is advised to add display# aliases to help the OS determine how to number things. If display# aliases are used, then if the simplefb node contains a display property then the /aliases/display# path @@ -110,6 +115,10 @@ properties: $ref: /schemas/types.yaml#/definitions/phandle description: Primary display hardware node =20 + panel: + $ref: /schemas/types.yaml#/definitions/phandle + description: Display panel node + allwinner,pipeline: description: Pipeline used by the framebuffer on Allwinner SoCs enum: --=20 2.39.1