drm/panel: Add helper for reading DT rotation
This adds a helper function for reading the rotation (panel orientation) from the device tree. Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Tested-by: Dmitry Osipenko <digetx@gmail.com> Signed-off-by: Derek Basehore <dbasehore@chromium.org> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20200813215609.28643-2-digetx@gmail.com
This commit is contained in:
parent
1c243751c0
commit
5f3e7503b9
|
@ -260,6 +260,49 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np)
|
||||||
return ERR_PTR(-EPROBE_DEFER);
|
return ERR_PTR(-EPROBE_DEFER);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(of_drm_find_panel);
|
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. Return a negative error code on failure.
|
||||||
|
*/
|
||||||
|
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
|
#endif
|
||||||
|
|
||||||
#if IS_REACHABLE(CONFIG_BACKLIGHT_CLASS_DEVICE)
|
#if IS_REACHABLE(CONFIG_BACKLIGHT_CLASS_DEVICE)
|
||||||
|
|
|
@ -35,6 +35,8 @@ struct drm_device;
|
||||||
struct drm_panel;
|
struct drm_panel;
|
||||||
struct display_timing;
|
struct display_timing;
|
||||||
|
|
||||||
|
enum drm_panel_orientation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct drm_panel_funcs - perform operations on a given panel
|
* struct drm_panel_funcs - perform operations on a given panel
|
||||||
*
|
*
|
||||||
|
@ -188,11 +190,19 @@ int drm_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector
|
||||||
|
|
||||||
#if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL)
|
#if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL)
|
||||||
struct drm_panel *of_drm_find_panel(const struct device_node *np);
|
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
|
#else
|
||||||
static inline struct drm_panel *of_drm_find_panel(const struct device_node *np)
|
static inline struct drm_panel *of_drm_find_panel(const struct device_node *np)
|
||||||
{
|
{
|
||||||
return ERR_PTR(-ENODEV);
|
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
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_DRM_PANEL) && (IS_BUILTIN(CONFIG_BACKLIGHT_CLASS_DEVICE) || \
|
#if IS_ENABLED(CONFIG_DRM_PANEL) && (IS_BUILTIN(CONFIG_BACKLIGHT_CLASS_DEVICE) || \
|
||||||
|
|
Loading…
Reference in New Issue