From mboxrd@z Thu Jan 1 00:00:00 1970 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 A2B873BB40 for ; Sun, 10 May 2026 19:15:37 +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=1778440539; cv=none; b=l69V39dYxmykvE1BN/erEf4CqOQIQuQYNLCqRi46Op86iVwAeWhRc9BPvJ9Xrldt4r3eXkKjS1Gwod50cDnZRWzESNa2gCYK9NTYrgywoH3a4ln/i66YQlxbCwuUXeYtfmfEMBYJPf/r/EOmVBJ069yUfKzo4RIjYZz684fKUT4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778440539; c=relaxed/simple; bh=EUQ4ryCMXjHWp8p6kKTordGEHf+D1kGBWvhnhot4NA0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AlZKRER6fNMs1SIsE4Y9tQQvluXkUnfbn9qqfU39JLd6lGilImpn3jF1efE84qpC0mJ0T9MIkAcs7UDgiejUo5me3Sqr7vY4p26w3ScbasonkIIYpqSsDaGJoQ3niyIFU72QNl2g+PwLgqOpiypsLNraWi03tj/jxvf4wrw5/Co= 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=EYNCHrI8; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=GpouMj8G; 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="EYNCHrI8"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="GpouMj8G" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778440536; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=D2HWKQFo0Wy5+aYZ6lPgr+vjevQgXgZHh6o51C0aBUU=; b=EYNCHrI82MBUE8YJk2xFvpK+4vOdJnkaSyd+Es8AO6W8Nu+zWsfUd3tdS+HuPBRAotBFBc Jwz0z5P8Ie7tTQsS0zcTFPRN3Xkx3FRHd3a7/0WWq5F1dsSzCVn6AhI/FieJFCZDWe5Mbn 9F+UE5+t8Zn+LG16PjD7AsqlAkI9K1g= 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-373-YnEDiwOvMmO29BfX7mmw1g-1; Sun, 10 May 2026 15:15:35 -0400 X-MC-Unique: YnEDiwOvMmO29BfX7mmw1g-1 X-Mimecast-MFC-AGG-ID: YnEDiwOvMmO29BfX7mmw1g_1778440534 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-488dcaf2f2fso28175605e9.0 for ; Sun, 10 May 2026 12:15:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1778440533; x=1779045333; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=D2HWKQFo0Wy5+aYZ6lPgr+vjevQgXgZHh6o51C0aBUU=; b=GpouMj8GvVTpmExaRy+GvkEBNlIIPTUsEseiHcUS/ePJCAMYhR5yYyTrlKZ8dSNtAx v9IHQ9thM4b8A1uxXvEhbSAHXI+hq5Zf9dt0WIGaugRxiTf6GFUJ6olhxC63FPOsUBw+ NKk5yWLvQbcMVCdzH8LphdH5Z1OXN1DO73S38baXi55zMDfk07D//4hiWaDVSiKT0ufP eaywX7ZyZ4LGCgHdX285pxoD7cb7U66p7Ab6MCR770UhJXMbdX5hme6VSPJJ0JLP3AfS yp4mW3ykr0XHamAaPR7qM8tKoFhqKZM2Gz0sZuF/iKmbxv8ij4g+P4IYi1Ufc3sQJbSm KhJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778440533; x=1779045333; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=D2HWKQFo0Wy5+aYZ6lPgr+vjevQgXgZHh6o51C0aBUU=; b=X80edIfYeiGblhtZB7/gyIrhJoEa/9gG5KNT1/Ek3X7UQKLR2NZZgkpu7yde8Atldz iMp5ao3+grvp4BdTLmEapPba6zdWRnsHxqoP6r+6iWF2OP3ZmcCF254CpONSDjglaApV 5FMNVkNn2TnBDPpi8YVCMXNLgZP7aaVhKfdQRMiRyvRRLAHmQ5PCR6kqpkHwwsGl7aGR 20NYv/R3xfDZV9YQFr6BxrixdpLD6t8oM171f5QHbCCXnGgtsEi2Js2+DSFU2j14Bjzw cP/ETsLQ3b6R2dH0vqZqOWxLCsglJ0vRL1vAgRqCzGQvjMBX0f/99LTjSRIAS2izOAfD zdDg== X-Gm-Message-State: AOJu0YytlSH45fsvcJYpHSoxMqGbGFFITUvHcqoeTtc4vnipE3F32nad X42A2BwRJx4SSxiBLw13svIkhmjQBuGE11ZmJGr3an177uTAVjaIto8DjN3rMjD/jY19GvrCEIk PGJBjhKyJnC6zearnqCzLfXUUyUM3xECScNVBppHoX1/WiXe54VRxz4+3SbymnHI8DR7L2iGPp0 bKa+vvgnqYJgTPOrMD2TLmys/djUeNXXb2pDEJ9YdIYHo1itdE X-Gm-Gg: Acq92OHTCPjRTCp62bJLLzt9MG+5i6ylsgqpxkupHA0gokZS6sAHD2D4Not1x6q+jy1 pb2Jj7+GWijSqYRvMa0sZjYoy1H2Um8itIF5At7Dp01cfwA1k8exyw/UCk6ElzLdaZVjA/e+poP tkkdS1+J/z3NmXcTUM8Q973QfmpbeOgig9aDyj+28hLajzZ2y83zqldymRrzPcnQ58+J0wVOCK7 DPjXDwUpxpUhbJR8zDkqLJ7xz1irT0AhQdCeTWMUqLktXPb0VDsj46VhEwHelD5MgqoTB1nXFno qEVNF8SrqhiNhcHFvyYymRHw/c33T5+CiFjGeQTylUsyUi1o95ncarKmAgg6o3jGKrHvvYc976O psMo3HcybxB9gpem7YTXagM52+OhllPXdSMTN1EiDwqfloh8= X-Received: by 2002:a05:600c:34cd:b0:48e:707f:cdfd with SMTP id 5b1f17b1804b1-48e707fce07mr120219605e9.2.1778440533150; Sun, 10 May 2026 12:15:33 -0700 (PDT) X-Received: by 2002:a05:600c:34cd:b0:48e:707f:cdfd with SMTP id 5b1f17b1804b1-48e707fce07mr120219265e9.2.1778440532660; Sun, 10 May 2026 12:15:32 -0700 (PDT) Received: from localhost (62-151-111-63.jazzfree.ya.com. [62.151.111.63]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e6fffb9bdsm124059865e9.1.2026.05.10.12.15.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 May 2026 12:15:31 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Javier Martinez Canillas , Andrzej Hajda , David Airlie , Jernej Skrabec , Jonas Karlman , Laurent Pinchart , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Neil Armstrong , Phong LE , Robert Foss , Simona Vetter , Thomas Zimmermann , dri-devel@lists.freedesktop.org Subject: [PATCH 3/3] drm/bridge: it66121: Select HDMI or DVI mode based on sink type Date: Sun, 10 May 2026 21:14:49 +0200 Message-ID: <20260510191459.90769-4-javierm@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260510191459.90769-1-javierm@redhat.com> References: <20260510191459.90769-1-javierm@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Currently, the driver assumes that the connector sink type is always HDMI and configures the IT66121 bridge appropriately. But configuring in this mode and enabling the transmission of AVI infoframe packets can cause DVI monitors to fail parsing the video signal. To prevent this, store the connector display information sink type in the bridge atomic state and use it to decide whether the bridge should be set in HDMI or DVI mode, and if the AVI infoframes packets should be sent. Assisted-by: Cursor:claude-4.6-opus Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/bridge/ite-it66121.c | 68 ++++++++++++++++++---------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c index a203c94a27e5..99088277d170 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -322,6 +322,7 @@ static inline struct it66121_ctx *bridge_to_it66121_ctx(struct drm_bridge *bridg struct it66121_bridge_state { struct drm_bridge_state base; + bool sink_is_hdmi; }; static inline struct it66121_bridge_state * @@ -790,6 +791,14 @@ static int it66121_bridge_check(struct drm_bridge *bridge, struct drm_connector_state *conn_state) { struct it66121_ctx *ctx = bridge_to_it66121_ctx(bridge); + struct it66121_bridge_state *state = + to_it66121_bridge_state(bridge_state); + + /* Default to HDMI to preserve legacy behavior. */ + state->sink_is_hdmi = true; + + if (conn_state && conn_state->connector) + state->sink_is_hdmi = conn_state->connector->display_info.is_hdmi; if (ctx->id == ID_IT6610) { /* The IT6610 only supports these settings */ @@ -809,40 +818,51 @@ void it66121_bridge_mode_set(struct drm_bridge *bridge, { u8 buf[HDMI_INFOFRAME_SIZE(AVI)]; struct it66121_ctx *ctx = bridge_to_it66121_ctx(bridge); + struct drm_bridge_state *bridge_state = + drm_priv_to_bridge_state(bridge->base.state); + struct it66121_bridge_state *state = + to_it66121_bridge_state(bridge_state); + unsigned int hdmi_mode = state->sink_is_hdmi ? + IT66121_HDMI_MODE_HDMI : 0; + unsigned int avi_pkt = 0; int ret; mutex_lock(&ctx->lock); - ret = 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; - } + if (hdmi_mode) { + ret = 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 = 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; - } + ret = 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 = regmap_bulk_write(ctx->regmap, IT66121_AVIINFO_DB1_REG, - &buf[HDMI_INFOFRAME_HEADER_SIZE], - HDMI_AVI_INFOFRAME_SIZE); - if (ret) - goto unlock; + /* Write new AVI infoframe packet */ + ret = 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; + if (regmap_write(ctx->regmap, IT66121_AVIINFO_CSUM_REG, buf[3])) + goto unlock; + + avi_pkt = IT66121_AVI_INFO_PKT_ON | IT66121_AVI_INFO_PKT_RPT; + } - /* Enable AVI infoframe */ - if (regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG, - IT66121_AVI_INFO_PKT_ON | IT66121_AVI_INFO_PKT_RPT)) + /* Enable or disable AVI infoframe */ + if (regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG, avi_pkt)) goto unlock; - /* Set TX mode to HDMI */ - if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, IT66121_HDMI_MODE_HDMI)) + /* Set TX mode to HDMI or DVI */ + if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, hdmi_mode)) goto unlock; if ((ctx->id == ID_IT66121 || ctx->id == ID_IT66122) && -- 2.54.0