diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch b/target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch new file mode 100644 index 0000000000..f87fc339bd --- /dev/null +++ b/target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch @@ -0,0 +1,89 @@ +From a2ce322776832848b320ece1aa7e3485bfe4b5f3 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.com> +Date: Tue, 1 Feb 2022 12:20:20 +0000 +Subject: [PATCH] drm/panel: Add and initialise an orientation field to + drm_panel + +Current usage of drm_connector_set_panel_orientation is from a panel's +get_modes call. However if the panel orientation property doesn't +exist on the connector at this point, then drm_mode_object triggers +WARNs as the connector is already registered. + +Add an orientation variable to struct drm_panel and initialise it from +drm_panel_init. +panel_bridge_attach can then create the property before the connector +is registered. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> +--- + drivers/gpu/drm/bridge/panel.c | 4 ++++ + drivers/gpu/drm/drm_panel.c | 15 ++++++++++----- + include/drm/drm_panel.h | 8 ++++++++ + 3 files changed, 22 insertions(+), 5 deletions(-) + +--- a/drivers/gpu/drm/bridge/panel.c ++++ b/drivers/gpu/drm/bridge/panel.c +@@ -79,6 +79,10 @@ static int panel_bridge_attach(struct dr + return ret; + } + ++ /* set up connector's "panel orientation" property */ ++ drm_connector_set_panel_orientation(&panel_bridge->connector, ++ panel_bridge->panel->orientation); ++ + drm_connector_attach_encoder(&panel_bridge->connector, + bridge->encoder); + +--- a/drivers/gpu/drm/drm_panel.c ++++ b/drivers/gpu/drm/drm_panel.c +@@ -61,6 +61,9 @@ void drm_panel_init(struct drm_panel *pa + panel->dev = dev; + panel->funcs = funcs; + panel->connector_type = connector_type; ++ ++ panel->orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; ++ of_drm_get_panel_orientation(dev->of_node, &panel->orientation); + } + EXPORT_SYMBOL(drm_panel_init); + +@@ -289,16 +292,18 @@ int of_drm_get_panel_orientation(const s + if (ret < 0) + return ret; + +- if (rotation == 0) ++ if (rotation == 0) { + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; +- else if (rotation == 90) ++ } else if (rotation == 90) { + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; +- else if (rotation == 180) ++ } else if (rotation == 180) { + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; +- else if (rotation == 270) ++ } else if (rotation == 270) { + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; +- else ++ } else { ++ DRM_ERROR("%pOF: invalid orientation %d\n", np, ret); + return -EINVAL; ++ } + + return 0; + } +--- a/include/drm/drm_panel.h ++++ b/include/drm/drm_panel.h +@@ -166,6 +166,14 @@ struct drm_panel { + int connector_type; + + /** ++ * @orientation: ++ * ++ * Panel orientation at initialisation. This is used to initialise the ++ * drm_connector property for panel orientation. ++ */ ++ enum drm_panel_orientation orientation; ++ ++ /** + * @list: + * + * Panel entry in registry. |