On Wed, Sep 25, 2019 at 03:58:30PM -0700, Derek Basehore wrote:
This adds a helper function for reading the rotation (panel orientation) from the device tree.
Signed-off-by: Derek Basehore dbasehore@chromium.org Reviewed-by: Sam Ravnborg sam@ravnborg.org
The patch LGTM, but I don't see it used anywhere later in the patch? Is there a panel driver incoming?
Sean
drivers/gpu/drm/drm_panel.c | 43 +++++++++++++++++++++++++++++++++++++ include/drm/drm_panel.h | 9 ++++++++ 2 files changed, 52 insertions(+)
diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index 6b0bf42039cf..0909b53b74e6 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -264,6 +264,49 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) return ERR_PTR(-EPROBE_DEFER); } EXPORT_SYMBOL(of_drm_find_panel);
+/**
- of_drm_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. -EERROR otherwise.
- */
+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;
+} +EXPORT_SYMBOL(of_drm_get_panel_orientation); #endif
MODULE_AUTHOR("Thierry Reding treding@nvidia.com"); diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 624bd15ecfab..d16158deacdc 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -34,6 +34,8 @@ struct drm_device; struct drm_panel; struct display_timing;
+enum drm_panel_orientation;
/**
- struct drm_panel_funcs - perform operations on a given panel
@@ -165,11 +167,18 @@ int drm_panel_get_modes(struct drm_panel *panel);
#if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) struct drm_panel *of_drm_find_panel(const struct device_node *np); +int of_drm_get_panel_orientation(const struct device_node *np,
enum drm_panel_orientation *orientation);
#else static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) { return ERR_PTR(-ENODEV); } +static inline int of_drm_get_panel_orientation(const struct device_node *np,
enum drm_panel_orientation *orientation)
+{
- return -ENODEV;
+} #endif
#endif
2.23.0.351.gc4317032e6-goog