Parse the device tree rotation specifier, and set a DRM
connector orientation property. The property can then be read
by compositors to apply hardware plane rotation or a GPU transform.

Signed-off-by: Ezequiel Garcia <ezequ...@collabora.com>
---
 drivers/gpu/drm/panel/panel-elida-kd35t133.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-elida-kd35t133.c 
b/drivers/gpu/drm/panel/panel-elida-kd35t133.c
index fe5ac3ef9018..5987d28c874c 100644
--- a/drivers/gpu/drm/panel/panel-elida-kd35t133.c
+++ b/drivers/gpu/drm/panel/panel-elida-kd35t133.c
@@ -39,6 +39,7 @@
 struct kd35t133 {
        struct device *dev;
        struct drm_panel panel;
+       enum drm_panel_orientation orientation;
        struct gpio_desc *reset_gpio;
        struct regulator *vdd;
        struct regulator *iovcc;
@@ -216,6 +217,7 @@ static int kd35t133_get_modes(struct drm_panel *panel,
        connector->display_info.width_mm = mode->width_mm;
        connector->display_info.height_mm = mode->height_mm;
        drm_mode_probed_add(connector, mode);
+       drm_connector_set_panel_orientation(connector, ctx->orientation);
 
        return 1;
 }
@@ -258,6 +260,12 @@ static int kd35t133_probe(struct mipi_dsi_device *dsi)
                return ret;
        }
 
+       ret = of_drm_get_panel_orientation(dev->of_node, &ctx->orientation);
+       if (ret) {
+               dev_err(dev, "%pOF: failed to get orientation %d\n", 
dev->of_node, ret);
+               return ret;
+       }
+
        mipi_dsi_set_drvdata(dsi, ctx);
 
        ctx->dev = dev;
-- 
2.30.0

Reply via email to