Turn drm_bridge_connector_force() into a .force_ctx() implementation and
hand the acquire context over to
drm_atomic_helper_connector_hdmi_force_ctx(), so that the HDMI connector
framework can reset the CRTC to recover the SCDC state when the sink
reconnects while the display pipeline is active.

No functional change for non-HDMI bridge connectors, which keep behaving
as a no-op.

Signed-off-by: Cristian Ciocaltea <[email protected]>
---
 drivers/gpu/drm/display/drm_bridge_connector.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c 
b/drivers/gpu/drm/display/drm_bridge_connector.c
index 0d44a270b636..86353a0b9758 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -208,16 +208,6 @@ static void drm_bridge_connector_disable_hpd(struct 
drm_connector *connector)
  * Bridge Connector Functions
  */
 
-static void drm_bridge_connector_force(struct drm_connector *connector)
-{
-       struct drm_bridge_connector *bridge_connector =
-               to_drm_bridge_connector(connector);
-       struct drm_bridge *hdmi = bridge_connector->bridge_hdmi;
-
-       if (hdmi)
-               drm_atomic_helper_connector_hdmi_force(connector);
-}
-
 static void drm_bridge_connector_debugfs_init(struct drm_connector *connector,
                                              struct dentry *root)
 {
@@ -274,7 +264,6 @@ drm_bridge_connector_color_format(const struct 
drm_connector_state *conn_state)
 }
 
 static const struct drm_connector_funcs drm_bridge_connector_funcs = {
-       .force = drm_bridge_connector_force,
        .fill_modes = drm_helper_probe_single_connector_modes,
        .atomic_create_state = drm_bridge_connector_create_state,
        .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
@@ -322,6 +311,19 @@ static int drm_bridge_connector_detect_ctx(struct 
drm_connector *connector,
        return status;
 }
 
+static int drm_bridge_connector_force_ctx(struct drm_connector *connector,
+                                         struct drm_modeset_acquire_ctx *ctx)
+{
+       struct drm_bridge_connector *bridge_connector =
+               to_drm_bridge_connector(connector);
+       struct drm_bridge *hdmi = bridge_connector->bridge_hdmi;
+
+       if (hdmi)
+               return drm_atomic_helper_connector_hdmi_force_ctx(connector, 
ctx);
+
+       return 0;
+}
+
 static int drm_bridge_connector_get_modes_edid(struct drm_connector *connector,
                                               struct drm_bridge *bridge)
 {
@@ -414,6 +416,7 @@ static int drm_bridge_connector_atomic_check(struct 
drm_connector *connector,
 static const struct drm_connector_helper_funcs 
drm_bridge_connector_helper_funcs = {
        .get_modes = drm_bridge_connector_get_modes,
        .detect_ctx = drm_bridge_connector_detect_ctx,
+       .force_ctx = drm_bridge_connector_force_ctx,
        .mode_valid = drm_bridge_connector_mode_valid,
        .enable_hpd = drm_bridge_connector_enable_hpd,
        .disable_hpd = drm_bridge_connector_disable_hpd,

-- 
2.55.0

Reply via email to