summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/drm_bridge_connector.c
diff options
context:
space:
mode:
authorHsin-Yi Wang <hsinyi@chromium.org>2022-06-09 10:27:23 +0300
committerDouglas Anderson <dianders@chromium.org>2022-06-21 18:52:59 +0300
commit15b9ca1641f0c3cd74885280331e9172c62a125e (patch)
treeae11deafb2794a428fe46a3b14b98a80bb02df39 /drivers/gpu/drm/drm_bridge_connector.c
parenta64af136771a7c50818fdc23ad4ce140ed7b66c8 (diff)
downloadlinux-15b9ca1641f0c3cd74885280331e9172c62a125e.tar.xz
drm: Config orientation property if panel provides it
Panel orientation property should be set before drm_dev_register(). Some drm driver calls drm_dev_register() in .bind(). However, most panels sets orientation property relatively late, mostly in .get_modes() callback, since this is when they are able to get the connector and binds the orientation property to it, though the value should be known when the panel is probed. In drm_bridge_connector_init(), if a bridge is a panel bridge, use it to set the connector's panel orientation property. Suggested-by: Douglas Anderson <dianders@chromium.org> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Douglas Anderson <dianders@chromium.org> Reviewed-by: Stephen Boyd <swboyd@chromium.org> [dianders: fixed space vs. tab indentation] Signed-off-by: Douglas Anderson <dianders@chromium.org> Link: https://patchwork.freedesktop.org/patch/msgid/20220609072722.3488207-9-hsinyi@chromium.org
Diffstat (limited to 'drivers/gpu/drm/drm_bridge_connector.c')
-rw-r--r--drivers/gpu/drm/drm_bridge_connector.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_bridge_connector.c b/drivers/gpu/drm/drm_bridge_connector.c
index 6b3dad03d77d..1c7d936523df 100644
--- a/drivers/gpu/drm/drm_bridge_connector.c
+++ b/drivers/gpu/drm/drm_bridge_connector.c
@@ -331,7 +331,7 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
struct drm_bridge_connector *bridge_connector;
struct drm_connector *connector;
struct i2c_adapter *ddc = NULL;
- struct drm_bridge *bridge;
+ struct drm_bridge *bridge, *panel_bridge = NULL;
int connector_type;
bridge_connector = kzalloc(sizeof(*bridge_connector), GFP_KERNEL);
@@ -373,6 +373,9 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
if (bridge->ddc)
ddc = bridge->ddc;
+
+ if (drm_bridge_is_panel(bridge))
+ panel_bridge = bridge;
}
if (connector_type == DRM_MODE_CONNECTOR_Unknown) {
@@ -392,6 +395,9 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
connector->polled = DRM_CONNECTOR_POLL_CONNECT
| DRM_CONNECTOR_POLL_DISCONNECT;
+ if (panel_bridge)
+ drm_panel_bridge_set_orientation(connector, panel_bridge);
+
return connector;
}
EXPORT_SYMBOL_GPL(drm_bridge_connector_init);