Implement drm_of_get_panel_orientation() to retrieve a panel's
rotation property as enum drm_panel_orientation. The code has
been taken from of_drm_get_panel_orientation(), so convert that
helper over. Callers of the old helper can be converted as well.

Signed-off-by: Thomas Zimmermann <[email protected]>
Reviewed-by: Maxime Ripard <[email protected]>
Reviewed-by: Javier Martinez Canillas <[email protected]>
---
 drivers/gpu/drm/drm_of.c    | 44 +++++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/drm_panel.c | 26 ++--------------------
 include/drm/drm_of.h        | 11 ++++++++++
 3 files changed, 57 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index d03ada82eac9..96eef327bf7e 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -7,6 +7,7 @@
 #include <linux/of_graph.h>
 
 #include <drm/drm_bridge.h>
+#include <drm/drm_connector.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_device.h>
 #include <drm/drm_encoder.h>
@@ -220,6 +221,49 @@ int drm_of_encoder_active_endpoint(struct device_node 
*node,
 }
 EXPORT_SYMBOL_GPL(drm_of_encoder_active_endpoint);
 
+/**
+ * drm_of_get_panel_orientation - look up the orientation of the panel through
+ * the "rotation" binding from a device tree node
+ * @np: device tree node of the panel
+ * @orientation: orientation enum to be filled in
+ *
+ * Looks up the rotation of a panel in the device tree. The orientation of the
+ * panel is expressed as a property name "rotation" in the device tree. The
+ * rotation in the device tree is counter clockwise.
+ *
+ * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the
+ * rotation property doesn't exist. Return a negative error code on failure.
+ */
+int drm_of_get_panel_orientation(const struct device_node *np,
+                                enum drm_panel_orientation *orientation)
+{
+       int rotation, ret;
+
+       ret = of_property_read_u32(np, "rotation", &rotation);
+       if (ret == -EINVAL) {
+               /* Don't return an error if there's no rotation property. */
+               *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
+               return 0;
+       }
+
+       if (ret < 0)
+               return ret;
+
+       if (rotation == 0)
+               *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL;
+       else if (rotation == 90)
+               *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP;
+       else if (rotation == 180)
+               *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP;
+       else if (rotation == 270)
+               *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP;
+       else
+               return -EINVAL;
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(drm_of_get_panel_orientation);
+
 /**
  * drm_of_find_panel_or_bridge - return connected panel or bridge device
  * @np: device tree node containing encoder output ports
diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
index 2c5649e433df..eddd13a34c03 100644
--- a/drivers/gpu/drm/drm_panel.c
+++ b/drivers/gpu/drm/drm_panel.c
@@ -28,6 +28,7 @@
 #include <linux/of.h>
 
 #include <drm/drm_crtc.h>
+#include <drm/drm_of.h>
 #include <drm/drm_panel.h>
 #include <drm/drm_print.h>
 
@@ -508,30 +509,7 @@ EXPORT_SYMBOL(of_drm_find_panel);
 int of_drm_get_panel_orientation(const struct device_node *np,
                                 enum drm_panel_orientation *orientation)
 {
-       int rotation, ret;
-
-       ret = of_property_read_u32(np, "rotation", &rotation);
-       if (ret == -EINVAL) {
-               /* Don't return an error if there's no rotation property. */
-               *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
-               return 0;
-       }
-
-       if (ret < 0)
-               return ret;
-
-       if (rotation == 0)
-               *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL;
-       else if (rotation == 90)
-               *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP;
-       else if (rotation == 180)
-               *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP;
-       else if (rotation == 270)
-               *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP;
-       else
-               return -EINVAL;
-
-       return 0;
+       return drm_of_get_panel_orientation(np, orientation);
 }
 EXPORT_SYMBOL(of_drm_get_panel_orientation);
 #endif
diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
index 7bcc0ccfe0f4..ebebed14c611 100644
--- a/include/drm/drm_of.h
+++ b/include/drm/drm_of.h
@@ -20,6 +20,8 @@ struct device_node;
 struct mipi_dsi_device_info;
 struct mipi_dsi_host;
 
+enum drm_panel_orientation;
+
 /**
  * enum drm_lvds_dual_link_pixels - Pixel order of an LVDS dual-link connection
  * @DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS: Even pixels are expected to be 
generated
@@ -47,6 +49,8 @@ int drm_of_component_probe(struct device *dev,
 int drm_of_encoder_active_endpoint(struct device_node *node,
                                   struct drm_encoder *encoder,
                                   struct of_endpoint *endpoint);
+int drm_of_get_panel_orientation(const struct device_node *np,
+                                enum drm_panel_orientation *orientation);
 int drm_of_find_panel_or_bridge(const struct device_node *np,
                                int port, int endpoint,
                                struct drm_panel **panel,
@@ -101,6 +105,13 @@ static inline int drm_of_encoder_active_endpoint(struct 
device_node *node,
 {
        return -EINVAL;
 }
+
+static inline int drm_of_get_panel_orientation(const struct device_node *np,
+                                              enum drm_panel_orientation 
*orientation)
+{
+       return -EINVAL;
+}
+
 static inline int drm_of_find_panel_or_bridge(const struct device_node *np,
                                              int port, int endpoint,
                                              struct drm_panel **panel,
-- 
2.54.0

Reply via email to