From nobody Sun May 24 19:35:55 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 496173803CC for ; Sat, 23 May 2026 10:41:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779532896; cv=none; b=GGGx3hif5Z2/RoxdNlxXkA12kdAuDOerMDkKEcJpcfsyJQr1eh03MDzQImpCtxyRJfbjdoZVhWg2+z4jL1NWyR4AosdcN3EiJKLXMUZ3RTlQtvdSVCeTUXaC7o+eILiHzrTBNGq/sOk5G04yPkHr1e0aUDw/e5NaRuYmbhD9wss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779532896; c=relaxed/simple; bh=nVyVeJDK7kujSqes6ziAhvNtVr2bw7e+Lv5PUwohBEI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KzWTfVjrq64e/RqlhqXP9mt0lwOn8ixW14W4WjpaQVKmf2Tab5kxDm5pL+Xq7+d5DWiyh+jNHN0Nn4wSZoEor1u2uS03223BsSEALvDzcDhRTKh6csGAZYJdSJMelbMX795pvpqp4wVYqmjpfvFkMwV76LUriCb9Kmmm5Gx4c5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=irg5q3wz; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=eF7tDnxl; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="irg5q3wz"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="eF7tDnxl" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779532893; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cnPEN/biZG4V7hzIDC4ybTBTHSPiVXNYVA0O7uBuSdI=; b=irg5q3wzZmLpIlOQ4W8gD/rWo7RtPhFVicQR0lgVbxL+I1EyPuQoGZZQC1koB53VED57c7 HwkIaRU19v+ZdbX7bJ2NDHullh3QuCNtC4AIR1fWQDtobnpOn0s16mxZF8yJNvKmfNrc0m uRYYc9C0b1T5VCHnA0ZDp7z30E8ne24= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-686-8dhIs96GM5S8WO8vgWyBOQ-1; Sat, 23 May 2026 06:41:31 -0400 X-MC-Unique: 8dhIs96GM5S8WO8vgWyBOQ-1 X-Mimecast-MFC-AGG-ID: 8dhIs96GM5S8WO8vgWyBOQ_1779532890 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-44dad1b938fso4862958f8f.1 for ; Sat, 23 May 2026 03:41:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779532890; x=1780137690; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=cnPEN/biZG4V7hzIDC4ybTBTHSPiVXNYVA0O7uBuSdI=; b=eF7tDnxlVlCMU8ECI8o0T63UOjhwDyizPXXrvIBsZ2f6qb9qDeZsQLigtbXkPE5Fe7 nr92ul1PTvXySXOnWP3Z0Lj5/WZvuSfl3HrRPzj/WlMdU8OzlPXMss5TgIUTX8X4kENM fyh87DwBOr1v6x6xKc/31qeh4J5EN4rwFVOS+CpjgcuTQlKcHptk2SVEKZYrgbbvGxjV efJvVaFJTU0imxJq6SuhaSnCdN7e2ehutvyzK87uK6oUVuV4AyDV9u6EQhR0BZnv90jk O5uxiVZpXt1a3CJOlSPKYD5WU2KwQHywripiJIKxuVKxuvDd09QN36gRvbmqwFdsd+lF +2EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779532890; x=1780137690; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cnPEN/biZG4V7hzIDC4ybTBTHSPiVXNYVA0O7uBuSdI=; b=J/JKJ8dfHmCdqjdeKndF4BsjUQy5eEmHRKTqa+bqzA9gMyQjTqHpIsndf/h+jiPBsR PsMrkmL7JB4oCz6QDYEK/UzXeJSo222q1hYEppeZklsAqNry2dDHXIceQebTimABm8iM 6jFaDdhCKh1aQ/++94+5ZPsDcO1zRIMwISAM1kXo+BR5rp2LD/JQfY9cHDQjQqDRwVnR OYuCeqhnFmG6rc+z4jWtLJTwzmUrHHOdcC600KMuN7XFTJPyZsb4MTMCf/rWww97lXyy dRwI7w/NTFig0r/LQv2xW9NeJ9b4PBfVfaIgeglev+wxMMHMAwLEex3m0+U4+WUpKFwi qgRQ== X-Forwarded-Encrypted: i=1; AFNElJ8vi89gEkbJuGOFYzMUvVnKgQgO6dgh7VLPaSoTE51+iXMXU8kbIL5wofM+J3veb7sfraa9f/Mueod8Pbw=@vger.kernel.org X-Gm-Message-State: AOJu0YzHBAQMCvcHaWcYfP4L0GiaPwilVSkvgCsyUSqabl7GocYt895r ZT4vDS62gM8mQSqDMjn0RqoznX6Hb+/goL8AceK6J6xzExtwtzGeaZjzaGleNjfc39beMh9R5jV S0t9kS0biZbw+AvSJwpexSiMQ7c+evxd2w/UQRfdF6Rm59bcYnlgysKAkdWbgCf157w== X-Gm-Gg: Acq92OHC2RGtSLKEUiACf9oMtRUy4H+2dukEVAAgSUmogdWFX9GEFDvNS7AsoiO0HC/ iNM10Bdd3AW0mShc9rl30tRY16jpZLdzAH0RcWNp4lydPqKf26jBv72eMM0reJzQiNl3U0hUO89 pdJkOFSMrxBh04mgie96hdRokzj0UjJsf/iR8QX0iDN6c6qk2QHltNSLb9eix2iYdlp133jYliD /G3x7kM670beEyf/ktqCS7WYv4uhBizAfFOFSHoXhzv3FfYjuOeSu4DYH2d2nN7xreycgsSpfhW QEURG5w0gHAuaIqKM6yxD1p7xTdxYBZV6KUFy2xur7qRFtlHEE8DzVjwP/HY6dZci8fH+gTEnfB mmjQgehaX+AOxbKU= X-Received: by 2002:a05:600c:1c21:b0:490:44eb:c1e0 with SMTP id 5b1f17b1804b1-49044ebc29emr108105265e9.21.1779532890352; Sat, 23 May 2026 03:41:30 -0700 (PDT) X-Received: by 2002:a05:600c:1c21:b0:490:44eb:c1e0 with SMTP id 5b1f17b1804b1-49044ebc29emr108104895e9.21.1779532889883; Sat, 23 May 2026 03:41:29 -0700 (PDT) Received: from localhost ([90.167.87.79]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042d081f5sm48884115e9.5.2026.05.23.03.41.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2026 03:41:29 -0700 (PDT) From: Javier Martinez Canillas Date: Sat, 23 May 2026 12:40:58 +0200 Subject: [PATCH v5 1/3] drm/bridge: ite-it66121: Switch to the HDMI connector helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260523-it66121-fix-dvi-mode-v5-v5-1-33b4468162f9@redhat.com> References: <20260523-it66121-fix-dvi-mode-v5-v5-0-33b4468162f9@redhat.com> In-Reply-To: <20260523-it66121-fix-dvi-mode-v5-v5-0-33b4468162f9@redhat.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Phong LE , Sen Wang Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Javier Martinez Canillas X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=11584; i=javierm@redhat.com; h=from:subject:message-id; bh=nVyVeJDK7kujSqes6ziAhvNtVr2bw7e+Lv5PUwohBEI=; b=owEBbQKS/ZANAwAKAcdR5ZDWPz1pAcsmYgBqEYRScS89fJvYEbhzfHd+6Ee+e7LUMe1ioL8vx /+CMnWpbt6JAjMEAAEKAB0WIQTXXteqJOUM1kXG9FfHUeWQ1j89aQUCahGEUgAKCRDHUeWQ1j89 aeFKD/4v8c6d6MIhTwx6+OvPGYxafkYHlgVR4LBoA8SzCojSGNsSWJaZDPu2NNZYuMyz0MHYsT1 H5csmainuTHUKTnvj9VVMp3gIrE5xGULwR9yFK+vG2hVJqM1bRISJh2mDat4cFz9Vu2tc5V5Ljz GOIYOCcPob54mOczskrq3wQH9zUY9/EZApBbFBMKEVnNlB15w2pkKVtY18Y5f9wQ5tVI5PKcFm6 fbQlkrKZVBptceHADKFNmfPE53BW96FuTxesEffPJy249qZq694On6I+7cw145pHmfzWKnnNzza o/FY0Z7JUr146mH3ibw7svmSctgSyv85sKlrHkr7TR9J++ZUplh8TjWH97cPdS2zpJIXHAETY7z /wPTWjq3v/6Y2e1KlPmFck/C1arPOAtFZ3E3l2Ijy00n2KKwYsc+uF372n+X5r9npOGgPsBbMQf gxqV2Zn8A/I3EnZX5h7/clWy0ttLmmXWyG1yQUNY090ipcZSAfX+uQPdCRg+GOp6x1SYeiAWDar 5Sflrs0u3tKmpZ1yzvLm+hw1lVTlEgs8sB55foXwLCRROYxAPgPasmGdSMiF21XxZi9uOGdqURQ XVH3aAidgtw0+SgWbKVm1BD+V9RtY/+aKfkvIQTDFe/KWwE8ksJ5OO/0IBWPVNHYfll+zIRlI/9 zw+yRUeDQQz43RQ== X-Developer-Key: i=javierm@redhat.com; a=openpgp; fpr=D75ED7AA24E50CD645C6F457C751E590D63F3D69 Instead of open coding the HDMI AVI Infoframes buffer management, use the helpers provided by the HDMI connector framework. Also, add callbacks to implement HDMI Vendor Specific Infoframe and Audio InfoFrame support. The driver was not sending these before, but they are required when using the HDMI helpers. These were implemented following the IT66121 Programming Guide. Suggested-by: Maxime Ripard Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/bridge/Kconfig | 2 + drivers/gpu/drm/bridge/ite-it66121.c | 211 ++++++++++++++++++++++++++-----= ---- 2 files changed, 162 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index f81b566c82a1..4a57d49b4c6d 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -205,6 +205,8 @@ config DRM_LONTIUM_LT8713SX config DRM_ITE_IT66121 tristate "ITE IT66121 HDMI bridge" depends on OF + select DRM_DISPLAY_HDMI_STATE_HELPER + select DRM_DISPLAY_HELPER select DRM_KMS_HELPER select REGMAP_I2C help diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/= ite-it66121.c index 19e188fe6e3b..f41f51f300c9 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -20,6 +20,8 @@ #include #include =20 +#include +#include #include #include #include @@ -161,6 +163,14 @@ #define IT66121_PKT_GEN_CTRL_ON BIT(0) #define IT66121_PKT_GEN_CTRL_RPT BIT(1) =20 +#define IT66121_PKT_NULL_CTRL_REG 0xC9 +#define IT66121_PKT_NULL_CTRL_ON BIT(0) +#define IT66121_PKT_NULL_CTRL_RPT BIT(1) + +/* Null packet data registers (used for HDMI Vendor Specific InfoFrame) */ +#define IT66121_PKT_NULL_HB(n) (0x138 + (n)) +#define IT66121_PKT_NULL_PB(n) (0x13B + (n)) + #define IT66121_AVIINFO_DB1_REG 0x158 #define IT66121_AVIINFO_DB2_REG 0x159 #define IT66121_AVIINFO_DB3_REG 0x15A @@ -180,6 +190,13 @@ #define IT66121_AVI_INFO_PKT_ON BIT(0) #define IT66121_AVI_INFO_PKT_RPT BIT(1) =20 +#define IT66121_AUD_INFO_PKT_REG 0xCE +#define IT66121_AUD_INFO_PKT_ON BIT(0) +#define IT66121_AUD_INFO_PKT_RPT BIT(1) + +#define IT66121_AUD_INFO_DB1_REG 0x168 +#define IT66121_AUD_INFO_CSUM_REG 0x16D + #define IT66121_HDMI_MODE_REG 0xC0 #define IT66121_HDMI_MODE_HDMI BIT(0) =20 @@ -304,7 +321,6 @@ struct it66121_ctx { struct i2c_client *client; u32 bus_width; struct mutex lock; /* Protects fields below and device registers */ - struct hdmi_avi_infoframe hdmi_avi_infoframe; struct { u8 ch_enable; u8 fs; @@ -726,6 +742,10 @@ static void it66121_bridge_enable(struct drm_bridge *b= ridge, struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); =20 ctx->connector =3D drm_atomic_get_new_connector_for_encoder(state, bridge= ->encoder); + if (WARN_ON(!ctx->connector)) + return; + + drm_atomic_helper_connector_hdmi_update_infoframes(ctx->connector, state); =20 it66121_set_mute(ctx, false); } @@ -763,40 +783,10 @@ void it66121_bridge_mode_set(struct drm_bridge *bridg= e, const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode) { - u8 buf[HDMI_INFOFRAME_SIZE(AVI)]; struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); - int ret; =20 mutex_lock(&ctx->lock); =20 - ret =3D drm_hdmi_avi_infoframe_from_display_mode(&ctx->hdmi_avi_infoframe= , ctx->connector, - adjusted_mode); - if (ret) { - DRM_ERROR("Failed to setup AVI infoframe: %d\n", ret); - goto unlock; - } - - ret =3D hdmi_avi_infoframe_pack(&ctx->hdmi_avi_infoframe, buf, sizeof(buf= )); - if (ret < 0) { - DRM_ERROR("Failed to pack infoframe: %d\n", ret); - goto unlock; - } - - /* Write new AVI infoframe packet */ - ret =3D regmap_bulk_write(ctx->regmap, IT66121_AVIINFO_DB1_REG, - &buf[HDMI_INFOFRAME_HEADER_SIZE], - HDMI_AVI_INFOFRAME_SIZE); - if (ret) - goto unlock; - - if (regmap_write(ctx->regmap, IT66121_AVIINFO_CSUM_REG, buf[3])) - goto unlock; - - /* 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 */ if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, IT66121_HDMI_MODE_HD= MI)) goto unlock; @@ -824,24 +814,6 @@ void it66121_bridge_mode_set(struct drm_bridge *bridge, mutex_unlock(&ctx->lock); } =20 -static enum drm_mode_status it66121_bridge_mode_valid(struct drm_bridge *b= ridge, - const struct drm_display_info *info, - const struct drm_display_mode *mode) -{ - struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); - unsigned long max_clock; - - max_clock =3D (ctx->bus_width =3D=3D 12) ? 74250 : 148500; - - if (mode->clock > max_clock) - return MODE_CLOCK_HIGH; - - if (mode->clock < 25000) - return MODE_CLOCK_LOW; - - return MODE_OK; -} - static enum drm_connector_status it66121_bridge_detect(struct drm_bridge *bridge, struct drm_connector *con= nector) { @@ -872,6 +844,128 @@ static void it66121_bridge_hpd_disable(struct drm_bri= dge *bridge) dev_err(ctx->dev, "failed to disable HPD IRQ\n"); } =20 +static enum drm_mode_status +it66121_bridge_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge, + const struct drm_display_mode *mode, + unsigned long long tmds_rate) +{ + const struct it66121_ctx *ctx =3D + container_of(bridge, const struct it66121_ctx, bridge); + unsigned long long max_rate; + + max_rate =3D (ctx->bus_width =3D=3D 12) ? 74250000ULL : 148500000ULL; + + if (tmds_rate > max_rate) + return MODE_CLOCK_HIGH; + + if (tmds_rate < HDMI_TMDS_CHAR_RATE_MIN_HZ) + return MODE_CLOCK_LOW; + + return MODE_OK; +} + +static int it66121_bridge_hdmi_clear_avi_infoframe(struct drm_bridge *brid= ge) +{ + struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); + + /* Clear both IT66121_AVI_INFO_PKT_ON and IT66121_AVI_INFO_PKT_RPT */ + return regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG, 0); +} + +static int it66121_bridge_hdmi_write_avi_infoframe(struct drm_bridge *brid= ge, + const u8 *buffer, size_t len) +{ + struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); + int ret; + + mutex_lock(&ctx->lock); + + /* Write new AVI infoframe packet */ + ret =3D regmap_bulk_write(ctx->regmap, IT66121_AVIINFO_DB1_REG, + &buffer[HDMI_INFOFRAME_HEADER_SIZE], + HDMI_AVI_INFOFRAME_SIZE); + if (ret) + goto unlock; + + ret =3D regmap_write(ctx->regmap, IT66121_AVIINFO_CSUM_REG, buffer[3]); + if (ret) + goto unlock; + + /* Enable AVI infoframe */ + ret =3D regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG, + IT66121_AVI_INFO_PKT_ON | IT66121_AVI_INFO_PKT_RPT); + +unlock: + mutex_unlock(&ctx->lock); + return ret; +} + +static int it66121_bridge_hdmi_clear_hdmi_infoframe(struct drm_bridge *bri= dge) +{ + struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); + + /* Clear both IT66121_PKT_NULL_CTRL_ON and IT66121_PKT_NULL_CTRL_RPT */ + return regmap_write(ctx->regmap, IT66121_PKT_NULL_CTRL_REG, 0); +} + +static int it66121_bridge_hdmi_write_hdmi_infoframe(struct drm_bridge *bri= dge, + const u8 *buffer, size_t len) +{ + struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); + int ret; + + mutex_lock(&ctx->lock); + + /* Write new HDMI Vendor Specific Infoframe packet */ + ret =3D regmap_bulk_write(ctx->regmap, IT66121_PKT_NULL_HB(0), buffer, le= n); + if (ret) + goto unlock; + + /* Enable HDMI Vendor Specific Infoframe */ + ret =3D regmap_write(ctx->regmap, IT66121_PKT_NULL_CTRL_REG, + IT66121_PKT_NULL_CTRL_ON | IT66121_PKT_NULL_CTRL_RPT); + +unlock: + mutex_unlock(&ctx->lock); + return ret; +} + +static int it66121_bridge_hdmi_clear_audio_infoframe(struct drm_bridge *br= idge) +{ + struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); + + /* Clear both IT66121_AUD_INFO_PKT_ON and IT66121_AUD_INFO_PKT_RPT */ + return regmap_write(ctx->regmap, IT66121_AUD_INFO_PKT_REG, 0); +} + +static int it66121_bridge_hdmi_write_audio_infoframe(struct drm_bridge *br= idge, + const u8 *buffer, size_t len) +{ + struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); + int ret; + + mutex_lock(&ctx->lock); + + /* Write new Audio infoframe packet */ + ret =3D regmap_bulk_write(ctx->regmap, IT66121_AUD_INFO_DB1_REG, + &buffer[HDMI_INFOFRAME_HEADER_SIZE], + min_t(size_t, len - HDMI_INFOFRAME_HEADER_SIZE, 5)); + if (ret) + goto unlock; + + ret =3D regmap_write(ctx->regmap, IT66121_AUD_INFO_CSUM_REG, buffer[3]); + if (ret) + goto unlock; + + /* Enable Audio infoframe */ + ret =3D regmap_write(ctx->regmap, IT66121_AUD_INFO_PKT_REG, + IT66121_AUD_INFO_PKT_ON | IT66121_AUD_INFO_PKT_RPT); + +unlock: + mutex_unlock(&ctx->lock); + return ret; +} + static const struct drm_edid *it66121_bridge_edid_read(struct drm_bridge *= bridge, struct drm_connector *connector) { @@ -1359,6 +1453,10 @@ static int it66121_hdmi_audio_prepare(struct drm_bri= dge *bridge, out: mutex_unlock(&ctx->lock); =20 + if (!ret) + ret =3D drm_atomic_helper_connector_hdmi_update_audio_infoframe(connecto= r, + ¶ms->cea); + return ret; } =20 @@ -1384,6 +1482,8 @@ static void it66121_hdmi_audio_shutdown(struct drm_br= idge *bridge, int ret; struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); =20 + drm_atomic_helper_connector_hdmi_clear_audio_infoframe(connector); + mutex_lock(&ctx->lock); ret =3D it661221_audio_output_enable(ctx, false); if (ret) @@ -1433,11 +1533,17 @@ static const struct drm_bridge_funcs it66121_bridge= _funcs =3D { .atomic_disable =3D it66121_bridge_disable, .atomic_check =3D it66121_bridge_check, .mode_set =3D it66121_bridge_mode_set, - .mode_valid =3D it66121_bridge_mode_valid, .detect =3D it66121_bridge_detect, .edid_read =3D it66121_bridge_edid_read, .hpd_enable =3D it66121_bridge_hpd_enable, .hpd_disable =3D it66121_bridge_hpd_disable, + .hdmi_tmds_char_rate_valid =3D it66121_bridge_hdmi_tmds_char_rate_valid, + .hdmi_clear_avi_infoframe =3D it66121_bridge_hdmi_clear_avi_infoframe, + .hdmi_write_avi_infoframe =3D it66121_bridge_hdmi_write_avi_infoframe, + .hdmi_clear_hdmi_infoframe =3D it66121_bridge_hdmi_clear_hdmi_infoframe, + .hdmi_write_hdmi_infoframe =3D it66121_bridge_hdmi_write_hdmi_infoframe, + .hdmi_clear_audio_infoframe =3D it66121_bridge_hdmi_clear_audio_infoframe, + .hdmi_write_audio_infoframe =3D it66121_bridge_hdmi_write_audio_infoframe, .hdmi_audio_startup =3D it66121_hdmi_audio_startup, .hdmi_audio_prepare =3D it66121_hdmi_audio_prepare, .hdmi_audio_shutdown =3D it66121_hdmi_audio_shutdown, @@ -1538,7 +1644,10 @@ static int it66121_probe(struct i2c_client *client) =20 ctx->bridge.of_node =3D dev->of_node; ctx->bridge.type =3D DRM_MODE_CONNECTOR_HDMIA; - ctx->bridge.ops =3D DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; + ctx->bridge.ops =3D DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | + DRM_BRIDGE_OP_HDMI; + ctx->bridge.vendor =3D "ITE"; + ctx->bridge.product =3D "IT66121"; if (client->irq > 0) { ctx->bridge.ops |=3D DRM_BRIDGE_OP_HPD; =20 --=20 2.54.0 From nobody Sun May 24 19:35:55 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E222136F90A for ; Sat, 23 May 2026 10:41:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779532899; cv=none; b=LjVyBPhDh2LfpfC87EliD+9pX5tU4YSIbHFUYZAmr1d2SClTzPnYK9/vGrWqKtA3UqLHXuWGUMOp3bd5ZCL04fAAd5LJQd5+euzz2maYJSndWA/vC4oNpaVjjijMwiH9WWI3vTqhcYvfCdfuWE1oQK3tBXViKJhtzNYIGDCiQxo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779532899; c=relaxed/simple; bh=XyrKmaSXTZhXeDUIJhAtHdxc6vXOmzSmWs6u5h9cwSs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XuEeT50yb+aLDFaZiR8AGM8Ba6yNlPdv89WD2cgaSQMRcD5bhwUAaEr/W5L7BIe1mCXBwA8hSXLy/iejMnHOUPnb9p6cIP+buRGLhL5ef2BBgKjSsOg9dzdCgzpbDVSElLQL238pFGbJxWyYJU+sVLFj+wpiLWswIIUaYeKBgLU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=dECT3WYy; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=mbPSShOT; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="dECT3WYy"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="mbPSShOT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779532897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y1jgoVOyXWjGHzsv5K/BVa074MnLk4iyZS4E4IEHpwE=; b=dECT3WYyUZR2EqAikeiOIu85ALkQRVvS9x/OsSORgWdGMqjrHRp/SnxAH7I/mU86W2A2ct eExcOMpH+/TTvDCAnyvCTJZjOhqqGNTnzyxSOddSpr+EgDvSf1aTnZl9lsBsJ/rormkLeW lfSw5J8MT/zSwUfY/vymjorcN66kh1U= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-670-kPvia_ffOEaqseRlcs7ecg-1; Sat, 23 May 2026 06:41:35 -0400 X-MC-Unique: kPvia_ffOEaqseRlcs7ecg-1 X-Mimecast-MFC-AGG-ID: kPvia_ffOEaqseRlcs7ecg_1779532894 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-45ea38c03a1so2472743f8f.1 for ; Sat, 23 May 2026 03:41:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779532894; x=1780137694; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=y1jgoVOyXWjGHzsv5K/BVa074MnLk4iyZS4E4IEHpwE=; b=mbPSShOTibtSS4W+wf7qGG0JDT+KpuYigJ+6YwcnG6X0rMmcHj9MiDxHZTCRf9y0zl qwGux/X+G/WvQ9j3ePR3DWcTRDDTa7LzxD0/5l+I31H0OrTeCmw3rk2BdmMEO/FiwQ4N cFfQX/kMwoiy2//NjbOtTF6O70M+d/PfymdQ3hXfMDkoVDpn+8Amj9ERQNbE77p6Yckd oGSn9+gDOn9Tv0DVgEKJENX42SY2pVZ3NnYY/f0mjOciAIL6Srvq+WGykTtiN+kBctL8 YBv5x2yTebhSFqIkoxyb9rVZ2e4cfFvDcgxeuwq3M54zXbr+61/chacHHM3EpbFrKjh4 i6Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779532894; x=1780137694; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=y1jgoVOyXWjGHzsv5K/BVa074MnLk4iyZS4E4IEHpwE=; b=mxinsmRrNKvHHiNa2mA0IeXHab+gKx5epDMp4YHYZ7xZc/oLuM5iOm8X+CepJIbGyT PKd+9E0hWC0UvQnTEQnkzDtTIP6ccJCiOCYxwuGFH0G9mVG+B9Thcfbzh4uVdI6xZNGq 6BpkllGJDSIts+HD/lxpSvVfxQ0noeXpyo2cI2sTgKttvahUVsVqojqJm2eCCwekmGsC cBAs11eodKWUycnRk1+5MYv6R+8qnsPXcZvHapRmTUt7YktHfEUJ9jfSgX3ktabTnLBn WwaCReojKrsLELtBGpBoPFePNYHYibwRsFf1j7/gVjOr9q8J8LSA8tD4yb6zEwKc4kdh xKQQ== X-Forwarded-Encrypted: i=1; AFNElJ9ej3mWXVKar4Uw3ZhKhaG35bKPAj8pN7qV6WgzesZgXq6CBjxRDGaYQMNVqcTYvC5MkmtPGS6mcSTjltQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzSPPWDyfU97SU1siFCWiVz3hwX9PpoIpMdCO9zf5+rrUkBk5A3 446V7pFxO6i4iFPlUM1yg2Jw+Ksm3AgiAe3bv/p6KcF2bvGmyaZ0WuoD/PtmSa3h8EtaCiQs0JB zMX+WHjsfv9RmQg8yjF2L5KeeDcITD1aW8Ivx2zAVy4LjWgv9OsV/R1CMojKUp2X3rA== X-Gm-Gg: Acq92OEtJOahuAwjVMg0MqFwgRc6llE1dttLqmFdS30Eiuy2WilG1wsK0nKn5euGm2i l9Yoa0TigDIJZhskCLIbsnzmapsltTHBwSmLmRGTNKnOnO4Mfg3mkhFoUH6fxCSOxG20K+W/9+2 +4xMmpGisYpPoLbPzOAExgljXY80gHUibxFpUrO8oxqH1dIfesmEkGggUzuttic+e6Se++Lc5bw /9IBMXkBce3n3NjZv270VVLq2n/zFN7cbeYxreqizc6XQPU0NucBXxYI3ciUCCXVjANxb9Np1V+ J9MvvarQM9R6ZUnpzC4tenuIO0wc7x/cgTOH/bCTJ7a7NUasgtRtm82IAaa0P5S7dUBlHuMSkm5 3EfDq2RBy7fd8d5A= X-Received: by 2002:a05:6000:1848:b0:45e:73eb:2a75 with SMTP id ffacd0b85a97d-45eb367fb1amr11734530f8f.16.1779532894374; Sat, 23 May 2026 03:41:34 -0700 (PDT) X-Received: by 2002:a05:6000:1848:b0:45e:73eb:2a75 with SMTP id ffacd0b85a97d-45eb367fb1amr11734484f8f.16.1779532893896; Sat, 23 May 2026 03:41:33 -0700 (PDT) Received: from localhost ([90.167.87.79]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45eb6d4850dsm10599026f8f.17.2026.05.23.03.41.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2026 03:41:32 -0700 (PDT) From: Javier Martinez Canillas Date: Sat, 23 May 2026 12:40:59 +0200 Subject: [PATCH v5 2/3] drm/bridge: ite-it66121: Move .mode_set logic to .atomic_enable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260523-it66121-fix-dvi-mode-v5-v5-2-33b4468162f9@redhat.com> References: <20260523-it66121-fix-dvi-mode-v5-v5-0-33b4468162f9@redhat.com> In-Reply-To: <20260523-it66121-fix-dvi-mode-v5-v5-0-33b4468162f9@redhat.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Phong LE , Sen Wang Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Javier Martinez Canillas X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5239; i=javierm@redhat.com; h=from:subject:message-id; bh=XyrKmaSXTZhXeDUIJhAtHdxc6vXOmzSmWs6u5h9cwSs=; b=owEBbQKS/ZANAwAKAcdR5ZDWPz1pAcsmYgBqEYRSrEvCEBSa0/3iFf2TDdS7fRsgrNzgGQX0z McqwJYDFZGJAjMEAAEKAB0WIQTXXteqJOUM1kXG9FfHUeWQ1j89aQUCahGEUgAKCRDHUeWQ1j89 aeTKEACltpfqio3QIDCwv34mRASuoQdj7LrGdOcwxGzGA3xt5eoOx+Nuz9iFW7EBsIJh8vyLRFc 8DwGK+mVYhxjENeHmgSWOvWayRPESLDTidqkyrQ0/b8LqmRnrTYYjXNeoKlFYUCXzw4tFCIiu+Z hPh8quQ5TuWCQ4kIBu2GhcnFG6n9SEAqUi3aJ/SeTzFREsc8WBf3wsVa5T9w0f7fiYXyeXiJGl8 CIXKJ8KCHETm26iZAHcT6l70OCH4lpwVTjGd9uE5EVvsj4qHa4EfhMh4AlHiop/snrwEwaRolOi mFdtLo7wbnr/8PKBa4eSi1qgQJdFG/ci+hGkCr2/PFnpqbXakD9mDYGolZlOauvLR0ImMY93Tiy SFlPlzy9r8JdPz2ECcs9QIgvS4DVNrwae9hJoU09Peltf6s7TOE9knXzRFcQjWbPsrP8TT26VMO 78WL79yJiqX8sg+pf1/yRWQvnPX+cmlBSOTt+4NkHfErdytRg6zoqe7632DMiRkb+O/qiRBzLiq XZqXaKGd1JwXBf7YhA3yFWuRrlrYWex0806snm2PhuRN+ZmImeIcs+P0O2Yb1ptW6QbtqGMPttm FlG9Nvh8DPeLNtHRT+E9ZuROS4kaNmWM8YKRggi3ISRCOh1eAZIeqSO8SnnZmAcc98gayWBhEx3 wf1VDXyTJoQQ2RA== X-Developer-Key: i=javierm@redhat.com; a=openpgp; fpr=D75ED7AA24E50CD645C6F457C751E590D63F3D69 Move the existing .mode_set logic to the .atomic_enable callback. The former is deprecated and drivers are supposed to use the latter instead. Also, drop the struct it66121_ctx.connector field because the connector can be accessed through the atomic state and there is no need to store it anymore. Suggested-by: Maxime Ripard Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/bridge/ite-it66121.c | 100 ++++++++++++++++++++-----------= ---- 1 file changed, 57 insertions(+), 43 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/= ite-it66121.c index f41f51f300c9..9725e5db5db3 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -315,7 +315,6 @@ struct it66121_chip_info { struct it66121_ctx { struct regmap *regmap; struct drm_bridge bridge; - struct drm_connector *connector; struct device *dev; struct gpio_desc *gpio_reset; struct i2c_client *client; @@ -668,6 +667,58 @@ static int it66121_bridge_attach(struct drm_bridge *br= idge, return 0; } =20 +static void it66121_set_mode(struct it66121_ctx *ctx, + struct drm_connector *connector, + struct drm_atomic_commit *state) +{ + const struct drm_connector_state *conn_state; + const struct drm_crtc_state *crtc_state; + const struct drm_display_mode *mode; + struct drm_crtc *crtc; + + conn_state =3D drm_atomic_get_new_connector_state(state, connector); + if (WARN_ON(!conn_state)) + return; + + crtc =3D conn_state->crtc; + if (WARN_ON(!crtc)) + return; + + crtc_state =3D drm_atomic_get_new_crtc_state(state, crtc); + if (WARN_ON(!crtc_state)) + return; + + mode =3D &crtc_state->adjusted_mode; + + mutex_lock(&ctx->lock); + + /* Set TX mode to HDMI */ + if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, IT66121_HDMI_MODE_HD= MI)) + goto unlock; + + if ((ctx->id =3D=3D ID_IT66121 || ctx->id =3D=3D ID_IT66122) && + regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, + IT66121_CLK_BANK_PWROFF_TXCLK, + IT66121_CLK_BANK_PWROFF_TXCLK)) { + goto unlock; + } + + if (it66121_configure_input(ctx)) + goto unlock; + + if (it66121_configure_afe(ctx, mode)) + goto unlock; + + if ((ctx->id =3D=3D ID_IT66121 || ctx->id =3D=3D ID_IT66122) && + regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, + IT66121_CLK_BANK_PWROFF_TXCLK, 0)) { + goto unlock; + } + +unlock: + mutex_unlock(&ctx->lock); +} + static int it66121_set_mute(struct it66121_ctx *ctx, bool mute) { int ret; @@ -740,13 +791,15 @@ static void it66121_bridge_enable(struct drm_bridge *= bridge, struct drm_atomic_commit *state) { struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); + struct drm_connector *connector; =20 - ctx->connector =3D drm_atomic_get_new_connector_for_encoder(state, bridge= ->encoder); - if (WARN_ON(!ctx->connector)) + connector =3D drm_atomic_get_new_connector_for_encoder(state, bridge->enc= oder); + if (WARN_ON(!connector)) return; =20 - drm_atomic_helper_connector_hdmi_update_infoframes(ctx->connector, state); + drm_atomic_helper_connector_hdmi_update_infoframes(connector, state); =20 + it66121_set_mode(ctx, connector, state); it66121_set_mute(ctx, false); } =20 @@ -756,8 +809,6 @@ static void it66121_bridge_disable(struct drm_bridge *b= ridge, struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); =20 it66121_set_mute(ctx, true); - - ctx->connector =3D NULL; } =20 static int it66121_bridge_check(struct drm_bridge *bridge, @@ -778,42 +829,6 @@ static int it66121_bridge_check(struct drm_bridge *bri= dge, return 0; } =20 -static -void it66121_bridge_mode_set(struct drm_bridge *bridge, - const struct drm_display_mode *mode, - const struct drm_display_mode *adjusted_mode) -{ - struct it66121_ctx *ctx =3D container_of(bridge, struct it66121_ctx, brid= ge); - - mutex_lock(&ctx->lock); - - /* Set TX mode to HDMI */ - if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, IT66121_HDMI_MODE_HD= MI)) - goto unlock; - - if ((ctx->id =3D=3D ID_IT66121 || ctx->id =3D=3D ID_IT66122) && - regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, - IT66121_CLK_BANK_PWROFF_TXCLK, - IT66121_CLK_BANK_PWROFF_TXCLK)) { - goto unlock; - } - - if (it66121_configure_input(ctx)) - goto unlock; - - if (it66121_configure_afe(ctx, adjusted_mode)) - goto unlock; - - if ((ctx->id =3D=3D ID_IT66121 || ctx->id =3D=3D ID_IT66122) && - regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, - IT66121_CLK_BANK_PWROFF_TXCLK, 0)) { - goto unlock; - } - -unlock: - mutex_unlock(&ctx->lock); -} - static enum drm_connector_status it66121_bridge_detect(struct drm_bridge *bridge, struct drm_connector *con= nector) { @@ -1532,7 +1547,6 @@ static const struct drm_bridge_funcs it66121_bridge_f= uncs =3D { .atomic_enable =3D it66121_bridge_enable, .atomic_disable =3D it66121_bridge_disable, .atomic_check =3D it66121_bridge_check, - .mode_set =3D it66121_bridge_mode_set, .detect =3D it66121_bridge_detect, .edid_read =3D it66121_bridge_edid_read, .hpd_enable =3D it66121_bridge_hpd_enable, --=20 2.54.0 From nobody Sun May 24 19:35:55 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 061053876BB for ; Sat, 23 May 2026 10:41:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779532904; cv=none; b=FOQxz5yB468jhTEbinUQdzCuzPe4Mw4ccz+IgCN2uQmCCknwF4rpncHR/ARBpbu9Biq3iIn87ohsCfRgjx4qji1Z2INbmrbju5/AgAJXLnNLUX7HnDo9bmIv5vUZzB68Eo7A1W1xXmo5zIBYC/hZMdjghMzDow1OF6XY47vbmgM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779532904; c=relaxed/simple; bh=leBrvbxMUKYjGUjfd12DhXg0zEYbgc4w/81RR+zUS3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Xv/ouX0ecQB/OtSQDITuVukDvKETSufwzTyazwEzVVk1kezkbCPIPiU+mVF10swXvSXmnN7rbjZfkxRpTrmQUlrZ1QnPFergHA6RAYnyyPXp8PxZ6jWp32JUmvOuCmsD4PRsMk4sotmPzz1Q6SVTSNdsEAgh2UgzReEiu9IEOuQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=fdbRytRX; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=AuivEJ8S; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="fdbRytRX"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="AuivEJ8S" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779532902; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BaLC69i13BPjVBegJ0y/4AtwLN5mHubHwSFs790g7Io=; b=fdbRytRXukmvCEo3Gv98mH3J06uo6xarriDklmoGjehs094mXwemZxMrSLAw059yjf1+29 nDrPQbQTZvcUmFx3AitE/nKkgIkirzIzVS1VERwW1m3USz5XnXBGWeVLZbugblPIIUYXSy Kpe/nMiArOeNNYx4e8MdWIW5n0PWRXk= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-687-o8_sbppXO2aQxBheyKdBuA-1; Sat, 23 May 2026 06:41:38 -0400 X-MC-Unique: o8_sbppXO2aQxBheyKdBuA-1 X-Mimecast-MFC-AGG-ID: o8_sbppXO2aQxBheyKdBuA_1779532897 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49051422d55so5799885e9.2 for ; Sat, 23 May 2026 03:41:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779532897; x=1780137697; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=BaLC69i13BPjVBegJ0y/4AtwLN5mHubHwSFs790g7Io=; b=AuivEJ8SZIy+5P7IF+t89I9gEnFCql8WCM6ttqx7EoKhg4y9r/japSvhKVGRPdT6/i Ze4yfq2QapyiOriPsLClw7D+WpnRmoCk0kS4RtXGT111WW44evH3mCW4Je/LwqOFuK4S 8cClF/wmh7f+01JxfbxUsasMeskh1PUMe2pNnbVZsjeThgD13/lImIj8XUFFRLryFMpC aI0lPp6aiDpx91IFcG6XFWwLUKAdWYRhufuxI7V6vcsxlvuoJUv+xROkYZyKG0ZAhY1P fhDo5PzGRa4agfE0xa8eqQThILpiaypMamkqPVhg/lTtIwW6/+/vMY+gsvqAmYHx97e7 /76Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779532897; x=1780137697; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=BaLC69i13BPjVBegJ0y/4AtwLN5mHubHwSFs790g7Io=; b=pFmfziNlp8mfAgCP8XV231MOKoVLhLkbrd8rnOQqe/cRFmFC/IqRbYmipyOmvhpcmb TtYQGJuCgRWz9HOEHYgE4ZLTMxzG1wEJWP3EbtB5JdW5fZjYpoM+mJhlxsH3ChtOnfNg P3YgXAYggcxplbof5sDhnLsxk2mKkOyAu8Cn/T2CNo8XwcPsAWdJKK+zhN14FOBoLQBI XJQOH/v0F2ni5HMrcBPMONmwUviYdUiplwtLQZ44aZQFU/JXMJv0TVPRVrRJdhUTe6Un G1kdAGip70gin6X7kiOHqOVugqoCNWzPc1IuUdpTEepfJj1g7mSvbwyeROwUoB/vwNyb bu6Q== X-Forwarded-Encrypted: i=1; AFNElJ9MPnltmy5S4/PHDerr9TvNQZSlKF+iXkjx5/kZicLwOv0sxYAkI0Aa+t67tvZL1FbIiruWHcyizOhu3qY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxy46vZYEEkBpUp/70hpYN7I9sLNVZuy0aaM8l727oFJAwIyVYG SM+gyd9ydu2l1nTSBP4cG3cnMrOBqfDlYBQ+gfQdYPl2lAp7c2IVYmh89x2rNJXvziRAm86B7kd gwCdhTz4M43aftQPVKCbedoR8BqnyMh6U14nsPfHFldXcM64Rp1SQJZHCBzCMWFq6FA== X-Gm-Gg: Acq92OGGAF5WCrV2cSNR0Cl/qeLq1U7gfu359x6CpePfOZem+j36+emCrPcz3XcjDkG aiiketE4uU+9bRc3eBHox01exFAo8vvlLeP+pEmSMNnwCU2vu2mC7ydc0VJeD2LDGNwl4VPmyCH v9B46cWuKLeacX1S32PA+mpD89EJGFRzc7eZXKvLdTVS/tfOEkLoqUS3E5MrRflqGWBhm3ZTN1O 9D42+f7TLNbkAV9X9zD/yXpd5cXaUzo0a12ycFD1WVhUjgFF7Ru4Em4jKzyLrca9dHF5ZrvZBBE 5iwwL61GghBidwnYsAkzWuX3WfZQg0YYMzaxLe7HKzUq5mdPijOMTVzyxDRaB2AndmTuL7oq2UQ n1h1ZZID119rJnYQj9z2cmaKT4A== X-Received: by 2002:a05:600c:8684:b0:489:5022:39a4 with SMTP id 5b1f17b1804b1-4904248f5aemr71404715e9.9.1779532897010; Sat, 23 May 2026 03:41:37 -0700 (PDT) X-Received: by 2002:a05:600c:8684:b0:489:5022:39a4 with SMTP id 5b1f17b1804b1-4904248f5aemr71404455e9.9.1779532896591; Sat, 23 May 2026 03:41:36 -0700 (PDT) Received: from localhost ([90.167.87.79]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45eb6d5e484sm11207236f8f.30.2026.05.23.03.41.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2026 03:41:36 -0700 (PDT) From: Javier Martinez Canillas Date: Sat, 23 May 2026 12:41:00 +0200 Subject: [PATCH v5 3/3] drm/bridge: ite-it66121: Select HDMI or DVI mode based on sink type Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260523-it66121-fix-dvi-mode-v5-v5-3-33b4468162f9@redhat.com> References: <20260523-it66121-fix-dvi-mode-v5-v5-0-33b4468162f9@redhat.com> In-Reply-To: <20260523-it66121-fix-dvi-mode-v5-v5-0-33b4468162f9@redhat.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Phong LE , Sen Wang Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Javier Martinez Canillas X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1357; i=javierm@redhat.com; h=from:subject:message-id; bh=leBrvbxMUKYjGUjfd12DhXg0zEYbgc4w/81RR+zUS3Q=; b=owEBbQKS/ZANAwAKAcdR5ZDWPz1pAcsmYgBqEYRT8H5EluVVUVnH6dfH2GVEAzPPpDr0JhH6R W+yMFf1aHmJAjMEAAEKAB0WIQTXXteqJOUM1kXG9FfHUeWQ1j89aQUCahGEUwAKCRDHUeWQ1j89 aeqeD/sElyJeM426JOafGGMUP3MW2L9vZB/T55nCO5SIqEs1QoIy0NZSoqVjnL6Q5FD1zs0eEpA Iwh1nskLeFMzLgqCOeHwX8puQeRatPqRkHtoMKbEaD/8+rS+CCpKm4eIXnulcJgjCDmzMuKbaw5 RP84hANPW6uUoGIOtXxQz9ZIJb5GPNMmollnZBlppsP1vkFQfDgPi6YnWm5S8ZEa9Yoa2ck1wex PLawQaS/KF4FnWzByYD1sJpPaIXpeKPIzeClhi/A2ZtK2WFdyjjVjbDF40gNz7iO0aMaRpFOMeO f3Ehdx3pJApvQp8mWLA/6xB8ZglRe7ViRPPbvuzFlDUmkDktZypYTty1G1WfYih5r5qEq2R7cyA MbX7IMLjMTCGCZci9wA8F0wgWoJyRuCvkJzMceXMMwSvtVtUm5563keZdIpWwSuVdrvizulwUTt xQ/qMHCpJ4MvJELGL4GrBtCnZcbhNTlcL3F9TiNl6k+hg63xsQE1CiQGLYzHNsjCWRL4Ie9LZ/j Ees86kFZgElxB+zDteg1VCGsl7LBl7c6VuEP52OIA2o6vjT+wBTtV4nv4uo+J60GKCq4SMeA2cR WfnIxDV5RXUNmfAlWh/Occ2fv3ljHxw8PO+1NGeqfAUDnysOpcUsVlsvZkH0oumM/g2sAIr5zA3 vY5+x4M/Q3NvhSg== X-Developer-Key: i=javierm@redhat.com; a=openpgp; fpr=D75ED7AA24E50CD645C6F457C751E590D63F3D69 The driver unconditionally sets the transmission mode to HDMI, which leads to display output not working with DVI monitors. Check the connector's display information sink type to identify the correct mode to configure the bridge. Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/bridge/ite-it66121.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/= ite-it66121.c index 9725e5db5db3..a469e8d9d2d8 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -199,6 +199,7 @@ =20 #define IT66121_HDMI_MODE_REG 0xC0 #define IT66121_HDMI_MODE_HDMI BIT(0) +#define IT66121_HDMI_MODE_DVI 0 =20 #define IT66121_SYS_STATUS_REG 0x0E #define IT66121_SYS_STATUS_ACTIVE_IRQ BIT(7) @@ -692,8 +693,10 @@ static void it66121_set_mode(struct it66121_ctx *ctx, =20 mutex_lock(&ctx->lock); =20 - /* Set TX mode to HDMI */ - if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, IT66121_HDMI_MODE_HD= MI)) + /* Set TX mode to HDMI or DVI */ + if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, + connector->display_info.is_hdmi ? + IT66121_HDMI_MODE_HDMI : IT66121_HDMI_MODE_DVI)) goto unlock; =20 if ((ctx->id =3D=3D ID_IT66121 || ctx->id =3D=3D ID_IT66122) && --=20 2.54.0