mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-15 19:55:32 +00:00
drm/panel: Add an API to allow drm to set orientation from panel
Panels usually call drm_connector_set_panel_orientation(), which is later than drm/kms driver calling drm_dev_register(). This leads to a WARN(). The orientation property is known earlier. For example, some panels parse the property through device tree during probe. Add an API to return the property from panel to drm/kms driver, so the drivers are able to call drm_connector_set_orientation_from_panel() before drm_dev_register(). Suggested-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Douglas Anderson <dianders@chromium.org> Reviewed-by: Stephen Boyd <swboyd@chromium.org>
This commit is contained in:
parent
a220e54eb6
commit
f06417a03d
3 changed files with 45 additions and 0 deletions
|
@ -24,6 +24,7 @@
|
|||
#include <drm/drm_connector.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_encoder.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_utils.h>
|
||||
#include <drm/drm_print.h>
|
||||
#include <drm/drm_drv.h>
|
||||
|
@ -2260,6 +2261,9 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property);
|
|||
* It is allowed to call this function with a panel_orientation of
|
||||
* DRM_MODE_PANEL_ORIENTATION_UNKNOWN, in which case it is a no-op.
|
||||
*
|
||||
* The function shouldn't be called in panel after drm is registered (i.e.
|
||||
* drm_dev_register() is called in drm).
|
||||
*
|
||||
* Returns:
|
||||
* Zero on success, negative errno on failure.
|
||||
*/
|
||||
|
@ -2329,6 +2333,34 @@ int drm_connector_set_panel_orientation_with_quirk(
|
|||
}
|
||||
EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk);
|
||||
|
||||
/**
|
||||
* drm_connector_set_orientation_from_panel -
|
||||
* set the connector's panel_orientation from panel's callback.
|
||||
* @connector: connector for which to init the panel-orientation property.
|
||||
* @panel: panel that can provide orientation information.
|
||||
*
|
||||
* Drm drivers should call this function before drm_dev_register().
|
||||
* Orientation is obtained from panel's .get_orientation() callback.
|
||||
*
|
||||
* Returns:
|
||||
* Zero on success, negative errno on failure.
|
||||
*/
|
||||
int drm_connector_set_orientation_from_panel(
|
||||
struct drm_connector *connector,
|
||||
struct drm_panel *panel)
|
||||
{
|
||||
enum drm_panel_orientation orientation;
|
||||
|
||||
if (panel && panel->funcs && panel->funcs->get_orientation)
|
||||
orientation = panel->funcs->get_orientation(panel);
|
||||
else
|
||||
orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
|
||||
|
||||
return drm_connector_set_panel_orientation(connector, orientation);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_connector_set_orientation_from_panel);
|
||||
|
||||
|
||||
int drm_connector_set_obj_prop(struct drm_mode_object *obj,
|
||||
struct drm_property *property,
|
||||
uint64_t value)
|
||||
|
|
|
@ -37,6 +37,7 @@ struct drm_modeset_acquire_ctx;
|
|||
struct drm_device;
|
||||
struct drm_crtc;
|
||||
struct drm_encoder;
|
||||
struct drm_panel;
|
||||
struct drm_property;
|
||||
struct drm_property_blob;
|
||||
struct drm_printer;
|
||||
|
@ -1711,6 +1712,9 @@ int drm_connector_set_panel_orientation_with_quirk(
|
|||
struct drm_connector *connector,
|
||||
enum drm_panel_orientation panel_orientation,
|
||||
int width, int height);
|
||||
int drm_connector_set_orientation_from_panel(
|
||||
struct drm_connector *connector,
|
||||
struct drm_panel *panel);
|
||||
int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
|
||||
int min, int max);
|
||||
|
||||
|
|
|
@ -115,6 +115,15 @@ struct drm_panel_funcs {
|
|||
int (*get_modes)(struct drm_panel *panel,
|
||||
struct drm_connector *connector);
|
||||
|
||||
/**
|
||||
* @get_orientation:
|
||||
*
|
||||
* Return the panel orientation set by device tree or EDID.
|
||||
*
|
||||
* This function is optional.
|
||||
*/
|
||||
enum drm_panel_orientation (*get_orientation)(struct drm_panel *panel);
|
||||
|
||||
/**
|
||||
* @get_timings:
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue