The HDMI transmission mode set and AVI infoframes enable are done in the
.mode_set callback, but it is more correct to do this in .atomic_enable.

Because the information about the sink type is in the struct drm_connector
display_info.is_hdmi and this might not be available when the .mode_set
callback is executed.

Currently the driver is not checking display info to determine whether the
mode has to be set to HDMI or DVI, but this is a bug that will be fixed by
a follow-up change.

Signed-off-by: Javier Martinez Canillas <[email protected]>
---

(no changes since v1)

 drivers/gpu/drm/bridge/ite-it66121.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/gpu/drm/bridge/ite-it66121.c 
b/drivers/gpu/drm/bridge/ite-it66121.c
index 19a027d75b61..648ca50712df 100644
--- a/drivers/gpu/drm/bridge/ite-it66121.c
+++ b/drivers/gpu/drm/bridge/ite-it66121.c
@@ -669,6 +669,22 @@ static int it66121_set_mute(struct it66121_ctx *ctx, bool 
mute)
                            IT66121_PKT_GEN_CTRL_ON | IT66121_PKT_GEN_CTRL_RPT);
 }
 
+static void it66121_set_tx_mode(struct it66121_ctx *ctx)
+{
+       mutex_lock(&ctx->lock);
+
+       /* Enable AVI infoframe */
+       if (regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG,
+                        IT66121_AVI_INFO_PKT_ON | IT66121_AVI_INFO_PKT_RPT))
+               goto unlock;
+
+       /* Set TX mode to HDMI */
+       regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, 
IT66121_HDMI_MODE_HDMI);
+
+unlock:
+       mutex_unlock(&ctx->lock);
+}
+
 #define MAX_OUTPUT_SEL_FORMATS 1
 
 static u32 *it66121_bridge_atomic_get_output_bus_fmts(struct drm_bridge 
*bridge,
@@ -729,6 +745,8 @@ static void it66121_bridge_enable(struct drm_bridge *bridge,
        ctx->connector = drm_atomic_get_new_connector_for_encoder(state, 
bridge->encoder);
 
        it66121_set_mute(ctx, false);
+
+       it66121_set_tx_mode(ctx);
 }
 
 static void it66121_bridge_disable(struct drm_bridge *bridge,
-- 
2.54.0

Reply via email to