* [PATCH v3 0/2] SimpleDRM: allow configuring physical width and height
@ 2023-01-24 22:41 Rayyan Ansari
2023-01-24 22:41 ` [PATCH v3 1/2] drm/simpledrm: Allow physical width and height configuration via DT Rayyan Ansari
2023-01-24 22:41 ` [PATCH v3 2/2] dt-bindings: display: simple-framebuffer: Document physical width and height properties Rayyan Ansari
0 siblings, 2 replies; 4+ messages in thread
From: Rayyan Ansari @ 2023-01-24 22:41 UTC (permalink / raw)
To: dri-devel
Cc: ~postmarketos/upstreaming, asahi, janne, Rayyan Ansari,
Daniel Vetter, David Airlie, devicetree, Hans de Goede,
Javier Martinez Canillas, Krzysztof Kozlowski, linux-fbdev,
linux-kernel, Rob Herring, Thomas Zimmermann
Hello,
The following patches:
- Add support for configuring the width-mm and height-mm DRM mode
properties in the SimpleDRM driver via Device Tree
- Document these two new Device Tree properties
This is useful for allowing interfaces such as Phosh to calculate
proper scaling values and for early boot code knowing if hi-dpi
rendering is necessary.
Changes since v2:
- Remove $ref property (because it is an SI unit)
- Extend commit messages
Rayyan Ansari (2):
drm/simpledrm: Allow physical width and height configuration via DT
dt-bindings: display: simple-framebuffer: Document physical width and
height properties
.../bindings/display/simple-framebuffer.yaml | 6 ++
drivers/gpu/drm/tiny/simpledrm.c | 60 ++++++++++++++++---
2 files changed, 57 insertions(+), 9 deletions(-)
--
2.39.1
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH v3 1/2] drm/simpledrm: Allow physical width and height configuration via DT 2023-01-24 22:41 [PATCH v3 0/2] SimpleDRM: allow configuring physical width and height Rayyan Ansari @ 2023-01-24 22:41 ` Rayyan Ansari 2023-01-24 22:41 ` [PATCH v3 2/2] dt-bindings: display: simple-framebuffer: Document physical width and height properties Rayyan Ansari 1 sibling, 0 replies; 4+ messages in thread From: Rayyan Ansari @ 2023-01-24 22:41 UTC (permalink / raw) To: dri-devel Cc: ~postmarketos/upstreaming, asahi, janne, Rayyan Ansari, Daniel Vetter, David Airlie, devicetree, Hans de Goede, Javier Martinez Canillas, Krzysztof Kozlowski, linux-fbdev, linux-kernel, Rob Herring, Thomas Zimmermann Add optional width-mm and height-mm devicetree properties and use this to set the DRM Display Mode instead of calculating it based on an average DPI. Signed-off-by: Rayyan Ansari <rayyan@ansari.sh> --- drivers/gpu/drm/tiny/simpledrm.c | 60 +++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simpledrm.c index 162eb44dcba8..7aab7fa572f0 100644 --- a/drivers/gpu/drm/tiny/simpledrm.c +++ b/drivers/gpu/drm/tiny/simpledrm.c @@ -128,6 +128,23 @@ simplefb_read_u32_of(struct drm_device *dev, struct device_node *of_node, return ret; } +static int +simplefb_read_u32_of_opt(struct drm_device *dev, struct device_node *of_node, + const char *name, u32 *value) +{ + int ret = of_property_read_u32(of_node, name, value); + + if (ret == -EINVAL) { + *value = 0; + ret = 0; + } else if (ret) { + drm_err(dev, "simplefb: cannot parse framebuffer %s: error %d\n", + name, ret); + } + + return ret; +} + static int simplefb_read_string_of(struct drm_device *dev, struct device_node *of_node, const char *name, const char **value) @@ -184,6 +201,19 @@ simplefb_get_format_of(struct drm_device *dev, struct device_node *of_node) return simplefb_get_validated_format(dev, format); } +static int +simplefb_get_mm_of(struct drm_device *dev, struct device_node *of_node, + const char *name) +{ + int mm; + int ret = simplefb_read_u32_of_opt(dev, of_node, name, &mm); + + if (ret) + return ret; + return simplefb_get_validated_int(dev, name, mm); +} + + /* * Simple Framebuffer device */ @@ -599,16 +629,12 @@ static const struct drm_mode_config_funcs simpledrm_mode_config_funcs = { */ 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 = { - 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) }; return mode; @@ -622,6 +648,7 @@ 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 = 0, height_mm = 0; const struct drm_format_info *format; struct resource *res, *mem; void __iomem *screen_base; @@ -676,6 +703,12 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv, format = simplefb_get_format_of(dev, of_node); if (IS_ERR(format)) return ERR_CAST(format); + width_mm = simplefb_get_mm_of(dev, of_node, "width-mm"); + if (width_mm < 0) + return ERR_PTR(width_mm); + height_mm = simplefb_get_mm_of(dev, of_node, "height-mm"); + if (height_mm < 0) + return ERR_PTR(height_mm); } else { drm_err(dev, "no simplefb configuration found\n"); return ERR_PTR(-ENODEV); @@ -686,7 +719,16 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv, return ERR_PTR(-EINVAL); } - sdev->mode = 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 = DRM_MODE_RES_MM(width, 96ul); + if (!height_mm) + height_mm = DRM_MODE_RES_MM(height, 96ul); + + sdev->mode = simpledrm_mode(width, height, width_mm, height_mm); sdev->format = format; sdev->pitch = stride; -- 2.39.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v3 2/2] dt-bindings: display: simple-framebuffer: Document physical width and height properties 2023-01-24 22:41 [PATCH v3 0/2] SimpleDRM: allow configuring physical width and height Rayyan Ansari 2023-01-24 22:41 ` [PATCH v3 1/2] drm/simpledrm: Allow physical width and height configuration via DT Rayyan Ansari @ 2023-01-24 22:41 ` Rayyan Ansari 2023-01-25 7:29 ` Krzysztof Kozlowski 1 sibling, 1 reply; 4+ messages in thread From: Rayyan Ansari @ 2023-01-24 22:41 UTC (permalink / raw) To: dri-devel Cc: ~postmarketos/upstreaming, asahi, janne, Rayyan Ansari, Daniel Vetter, David Airlie, devicetree, Hans de Goede, Javier Martinez Canillas, Krzysztof Kozlowski, linux-fbdev, linux-kernel, Rob Herring, Thomas Zimmermann Document the optional width-mm and height-mm simple-framebuffer properties. Signed-off-by: Rayyan Ansari <rayyan@ansari.sh> --- .../devicetree/bindings/display/simple-framebuffer.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/display/simple-framebuffer.yaml b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml index dd64f70b5014..4ae33a4d2da9 100644 --- a/Documentation/devicetree/bindings/display/simple-framebuffer.yaml +++ b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml @@ -106,6 +106,12 @@ properties: - x2r10g10b10 - x8r8g8b8 + width-mm: + description: Physical width of the display in millimetres + + height-mm: + description: Physical height of the display in millimetres + display: $ref: /schemas/types.yaml#/definitions/phandle description: Primary display hardware node -- 2.39.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3 2/2] dt-bindings: display: simple-framebuffer: Document physical width and height properties 2023-01-24 22:41 ` [PATCH v3 2/2] dt-bindings: display: simple-framebuffer: Document physical width and height properties Rayyan Ansari @ 2023-01-25 7:29 ` Krzysztof Kozlowski 0 siblings, 0 replies; 4+ messages in thread From: Krzysztof Kozlowski @ 2023-01-25 7:29 UTC (permalink / raw) To: Rayyan Ansari, dri-devel Cc: ~postmarketos/upstreaming, asahi, janne, Daniel Vetter, David Airlie, devicetree, Hans de Goede, Javier Martinez Canillas, Krzysztof Kozlowski, linux-fbdev, linux-kernel, Rob Herring, Thomas Zimmermann On 24/01/2023 23:41, Rayyan Ansari wrote: > Document the optional width-mm and height-mm simple-framebuffer > properties. As pointed in previous discussion - you should have panel node and take the properties from it. The physical dimensions are not properties of framebuffer device. These are properties of panel. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-01-25 7:29 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-24 22:41 [PATCH v3 0/2] SimpleDRM: allow configuring physical width and height Rayyan Ansari 2023-01-24 22:41 ` [PATCH v3 1/2] drm/simpledrm: Allow physical width and height configuration via DT Rayyan Ansari 2023-01-24 22:41 ` [PATCH v3 2/2] dt-bindings: display: simple-framebuffer: Document physical width and height properties Rayyan Ansari 2023-01-25 7:29 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).