From nobody Fri Jun 12 11:28:07 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 EB262438FF0 for ; Fri, 15 May 2026 09:03:27 +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=1778835809; cv=none; b=jWYI9czEgreHovwiegui0T4BfEO8ERDvoAptxUAryKIjNKxcQGRN2SBJwYKfx3r1YonR4LPDGYa5b31ATPOuX9hfuuxdm5JHQ6E7UPbspbHqXpOqC8WQYH7ukiT4xV8mlH2l0ePV4CBgJXmuKkRYIhIQCDYq40UBMHaq9Uu/EMw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778835809; c=relaxed/simple; bh=ImOBGDkhhIfZyUdE+sek3T05mETZUQkyh8OQDReTLg8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rITIFJQEBJZqAgOrtsujJ/umE02ayrOKfpbCyjc5w+NTHnO58ccWMU19dR633/JcAKJ+ZDHOoE+mo3RIlA6b4CUJHG0v2ZRXFIkXw0KuRuQE9LvCzJtjuD2HpfJxXLDF0ii6W8ZsmKWFbgu7U+/PUrPFaT5Ms1GeioiCWQhHtPw= 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=UxLp7NOF; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=bbmDvfaU; 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="UxLp7NOF"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="bbmDvfaU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778835807; 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=cU8nfuQshDfTgMYlYFriNnuspV8nePWV/d7r2OJywA8=; b=UxLp7NOFC0N5NfrkEHEnIuIs079fAyjBV3oqLE7jqI0YBgYWxEM0uIKjEtgZINmp8L1l+Y JKCALETUabpfepBL/vXIYkeirVIW3LMQbh412yPjbqwhA46nNN73l7xerhtk/mNp8cGpgx 9vq6QORf43aVyo7P7vEPtaD9KK5jNPo= Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-668-MwJxIm8rOheCqOz_ecHKGw-1; Fri, 15 May 2026 05:03:25 -0400 X-MC-Unique: MwJxIm8rOheCqOz_ecHKGw-1 X-Mimecast-MFC-AGG-ID: MwJxIm8rOheCqOz_ecHKGw_1778835804 Received: by mail-ej1-f72.google.com with SMTP id a640c23a62f3a-b8ff07df5e4so780461266b.3 for ; Fri, 15 May 2026 02:03:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1778835804; x=1779440604; 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=cU8nfuQshDfTgMYlYFriNnuspV8nePWV/d7r2OJywA8=; b=bbmDvfaUKEZXg59mAEklvZGFoCMN1LYKroAIcipV8+utNvi0U0TOxSc/twl29Jlydn Xvpx3xlCdvrMTV+D50eTOOD/Gzpjw/IOctsHduLqWqAfhpFH6isOVyFhpWAXzodJsJN0 GCj2SlhFwx7Yqs95kboZKcDz+eni+/6ikGS/HChIO7gPCrbf5SA5ZM/c5qWgxGqZnyiH v6064Wxpb/uHLxFUEHkRlPRMdUu6PgCFIrDmPuY4s4FjsDEB4Yd21vmBT9KiPPyY6QDb i24+ww1fgKB4cHQtui2ThOAUtJv642Ti154h+HmO9+gcB+I2dHQIl3VyOP9WzSGNPkN7 P7AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778835804; x=1779440604; 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=cU8nfuQshDfTgMYlYFriNnuspV8nePWV/d7r2OJywA8=; b=TkdrwCHROv+ad8FQNvw+x1JGo67Q7In5UA6DCPq6h0HWF4f17LzTTo/6E3E2BU4ZEm ZvSO2hUS0WofFez+phWHS+k/TX3LmIsyS3iFeeA4pSv8ggsCWQc+Nun2qCMAyiCTDQra OCVOePneZW9GRo3/tD8ukp9Wx/ARWQjczCljGgUcg6toQ1GOTgfyXQLxxbiup9RkE8GJ 7/+wICnGFeN0dfdm6RWCX1agkXEgz3VYjpEKvk+wH0mZpVC4TysjasWiLV9twZA4Mv8v gl1kJYB4K7N2qG+aegNpilmJwYWflYJkYdWqnNt7A8ENH3vU5LmFzvQZvSHbrpDeei/P aEbA== X-Gm-Message-State: AOJu0YwGM/1Sa7Y46xmTj1WFvZaspBsGpULSjogcnyzh4C9Irgc/wXtv ZxigBWgj47tAIZmdBigx8UMFHRr9YLugN0jfD4gpqXP+eXGhdx8hm7yumQgAUnSdQl+yVIz43NS Bzw8oDSZRy7ATF5ea6R7yFMGCbMp9Xv3VEgUI6dcehzEzrSnCG/Nt2VGssdTh9Kxhj3iWXuZhox ri50jPXEgE8Ogm4IZRvQNa8wCiIX/Sk9vRJS/HORxErkDK8f2L X-Gm-Gg: Acq92OEp6AK4WI6qlFPIt+9p2ODibPAstn4ZXHUlmvo6xCJU0qsfgpjnRf0x8hr5viD p4xr7JwJydCu8i7GoQFUu7MV2FshGW+BoZiOMaDnxiS4zK2/+DJ0VRUAZf/4x+Y/QNxP3JbYsFB fhAUzf5sj9KCuZvz2C9Axl8aWNt0E8fFqaanUjD2mQAF+LqhR+mDHP5C31h+nEvu8iiErSh5FKg rYcrwB1IxwWJZ78ch5T5wsKN+noycySIzAAXIEnJJcHIyuKoJJL9buKsxcFC3MNQAGWQ+zhJBJJ 7CHsFSDh2u9urFDO/yWKEy1rnAUhOc1j6KlZfdgEGfU+9FLNIASS837mxgvHkEr8EiAq3flE/ri GH0fsJErCiBncPijfVFF+qHM3GgCIqw3f4X/dcqMkpCCNf9Q= X-Received: by 2002:a17:907:785:b0:bd4:f2c9:d094 with SMTP id a640c23a62f3a-bd5177a849dmr167238266b.3.1778835803785; Fri, 15 May 2026 02:03:23 -0700 (PDT) X-Received: by 2002:a17:907:785:b0:bd4:f2c9:d094 with SMTP id a640c23a62f3a-bd5177a849dmr167230166b.3.1778835803009; Fri, 15 May 2026 02:03:23 -0700 (PDT) Received: from localhost (62-151-111-63.jazzfree.ya.com. [62.151.111.63]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45d9e768c4fsm13176383f8f.8.2026.05.15.02.03.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:03:22 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Javier Martinez Canillas , Maxime Ripard , Andrzej Hajda , David Airlie , Jernej Skrabec , Jonas Karlman , Laurent Pinchart , Luca Ceresoli , Maarten Lankhorst , Neil Armstrong , Phong LE , Robert Foss , Simona Vetter , Thomas Zimmermann , dri-devel@lists.freedesktop.org Subject: [PATCH v4 1/3] drm/bridge: ite-it66121: Switch to the HDMI connector helpers Date: Fri, 15 May 2026 11:02:09 +0200 Message-ID: <20260515090220.809830-2-javierm@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260515090220.809830-1-javierm@redhat.com> References: <20260515090220.809830-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: quoted-printable Content-Type: text/plain; charset="utf-8" Instead of open coding the HDMI AVI Infoframes buffer management, use the helpers provided by the HDMI connector framework. Suggested-by: Maxime Ripard Signed-off-by: Javier Martinez Canillas --- Changes in v4: - New patch for v4 drivers/gpu/drm/bridge/Kconfig | 2 + drivers/gpu/drm/bridge/ite-it66121.c | 132 ++++++++++++++++----------- 2 files changed, 83 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 19a027d75b61..947b7a0f0a45 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 @@ -304,7 +306,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 { struct platform_device *pdev; u8 ch_enable; @@ -727,6 +728,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 (!ctx->connector) + return; + + drm_atomic_helper_connector_hdmi_update_infoframes(ctx->connector, state); =20 it66121_set_mute(ctx, false); } @@ -764,40 +769,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; @@ -825,24 +800,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) { @@ -873,6 +830,72 @@ static void it66121_bridge_hpd_disable(struct drm_brid= ge *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 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 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); + + return regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG, 0); +} + +static int it66121_bridge_hdmi_clear_hdmi_infoframe(struct drm_bridge *bri= dge) +{ + return 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_write_hdmi_infoframe(struct drm_bridge *bri= dge, + const u8 *buffer, size_t len) +{ + return 0; +} + static const struct drm_edid *it66121_bridge_edid_read(struct drm_bridge *= bridge, struct drm_connector *connector) { @@ -913,11 +936,15 @@ static const struct drm_bridge_funcs it66121_bridge_f= uncs =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, }; =20 static irqreturn_t it66121_irq_threaded_handler(int irq, void *dev_id) @@ -1588,7 +1615,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 Fri Jun 12 11:28:07 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 EE6BD43C058 for ; Fri, 15 May 2026 09:03:30 +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=1778835812; cv=none; b=joDQjuKqH6OOjc+bpZeUrAMQ/S1wc8YGfGCsj/Dx/imMNWvJEf1Cu1u+OxsOLiVf6h5uyAlmyGBxuUlybVpfWcvKYpF85nrjC+p/6RtfstTWs0j4DKh1CRXdNdTS4NRx8sz/hlGQN1AJdGjeNicN8ARbAHIUD84vaH+hvindZeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778835812; c=relaxed/simple; bh=d/4BPf727dgjBLLrAD2ItflvfvirRZYjEqYhr61QS5k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Dt8GCnJdYRmhWrQ9AeBWoFv50EZd4Nz6PvEyzvvci2VUEHyJ8qTIkTiy/NIUzfBCw8WhTgnJpLEx/TmUBeFh6sARqG3Vrw0ka325K9oWv8PdYdD1SZ4dj1nEmM8f5H5N9BVQhh51mAl5AzEYdTSxYngq5fPeGhQWA1LyLQja9bI= 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=Hs+dxzUa; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=al/R5Iss; 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="Hs+dxzUa"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="al/R5Iss" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778835809; 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=5MCG+fM5A/Si4GdqqrKoi0Lqzyly0wOM9ZpNecCUS1U=; b=Hs+dxzUaCcClJMn3qzznX12pc0Uc5D8KMr1xWneDWy2DtQjkNakIdzna9NClOxgVLDz070 xVlrWvkLF+L9cOQXC5xhcZhLh3hsCno9IqYmIljE86lB+F9iBlDpqpeJSEhyur+lhBynxz QneynWoz3vdRb4muBSNhd3awibjpsac= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-672-rhvnp9UaM2CsMmjNKPqKcg-1; Fri, 15 May 2026 05:03:28 -0400 X-MC-Unique: rhvnp9UaM2CsMmjNKPqKcg-1 X-Mimecast-MFC-AGG-ID: rhvnp9UaM2CsMmjNKPqKcg_1778835807 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-48fe24773c8so6359095e9.3 for ; Fri, 15 May 2026 02:03:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1778835806; x=1779440606; 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=5MCG+fM5A/Si4GdqqrKoi0Lqzyly0wOM9ZpNecCUS1U=; b=al/R5Isszj9GW3FNsc5RuEfy53G0ptTmKQAslJbBEC3svEu3NUioT4mHyN7ZEbBy3N xexzuEzsfdWCyDxhkuZBnaOh4A/6743Bxb46Aq/IOhtoC+fSPq5YI2CxXWTNARTyRcjW sPBMyNRsHi4EzTKyQV9J41zpGZQ6QP7kpvzZ7n/TCfkQiaBJs/WlCruVlnJUhQYN9mJk 3nS/zr99/KwE4t6ZLuPiQjtY79Nv8Yw6DSoCDcdTkFc9KXCg6ptkBKVIIysFCoecaSim +Bqsk/IzYIHNp77e+29/w0OufD8JiB3w8caozBxQB/9nddHjeV9h3hCaTVD8PeJZQrb6 wW7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778835806; x=1779440606; 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=5MCG+fM5A/Si4GdqqrKoi0Lqzyly0wOM9ZpNecCUS1U=; b=e2vFDD3jzIfdnHofGYlPj08jkHcXJWohpif+zGSh1PoDExm0FACdBAQvE/YiitYCni qacLDGTBHtJDtmSW7m5i+zyS2//u2WFjyQ3pS0rgKgbAQ5fumCjqoqm4Ft9+g8T53R4I glFwh8uJFydkKWgdLYoLO/CPIUogGyxmKfMa35E/tALHVdqKS0Q+TMZoi42qhiQqIyTQ ilCRFDQ3yi5cdcCYlbEc4vzjH5XBUrzRVNxN/yR2ZymyD2c1CE6BPF4omzkcL9/anu03 Icv6X+2L3BvdHC3HenEZ2UUnGRU/XrrKM01B0ij4JCSEwb8MZjyb7jptcFRlMf4v/YkF lpNA== X-Gm-Message-State: AOJu0YwyGn2yO/T5pOE0ok/BMPL5LiGaUd5zuiBDCVdsdCufiHbRjCvW 12Fes6vdg43pQ3GcbuyEoHQauDTA6R8ZbrrD1AfxH7AgCLmZy9gyr5jyGbMBY5wApjP7hB/lxAP tjmf+GCKiuOQouWqg/8zmn5s4U3ncs/kTGoGlPzFMV59UIkEieDy/MFrsGT0RqQuyKjj8e2K09f GAvm6VZzPagrFaixyy4/yEBg7DWg7I5s8SJWcOxxGRFgtHJXZc X-Gm-Gg: Acq92OFzRF2dJSxM/ZnVlL+Z9+j0hpoK4I2tgtRhJq7O9jfni2oWHtQtwsWCb3nn3OA nU03CEajq2n5IxoxVW/n/YvWDC/H0iokWrQwHXQK/xkLtPJSw+tu/r7G6iPfy6ioZZ/etbkqJTT zlTqrAQO+IXV3yD357WDtusk8q0oJrtEFdwgrgZ9seqj5wmA0/z1p+yBD7J0cHwKXNpgrjp9k7o 0gQw6DdCsfElT38LU4F72qViKdX/SeV2PPsN37cxVCJ7+bcr0vcubYnHLb96YlsTqev4vUdp6h6 y1DQjGb7gFcWY6wWF08LM5Dvbgdf/32gs0mxMj96R9BnZKikyzcC4Jr7aRJugrY5GVgUNQePKkZ PTQwwV94qrMk/eIYa+6Rl+ge5Iz6YEFFGkU//Rw7X82JnwdU= X-Received: by 2002:a05:600c:c096:b0:48f:d1b8:9aad with SMTP id 5b1f17b1804b1-48fe5fd5357mr29233085e9.2.1778835805899; Fri, 15 May 2026 02:03:25 -0700 (PDT) X-Received: by 2002:a05:600c:c096:b0:48f:d1b8:9aad with SMTP id 5b1f17b1804b1-48fe5fd5357mr29232435e9.2.1778835805183; Fri, 15 May 2026 02:03:25 -0700 (PDT) Received: from localhost (62-151-111-63.jazzfree.ya.com. [62.151.111.63]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fead18659sm10952375e9.7.2026.05.15.02.03.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:03:24 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Javier Martinez Canillas , Maxime Ripard , Andrzej Hajda , David Airlie , Jernej Skrabec , Jonas Karlman , Laurent Pinchart , Luca Ceresoli , Maarten Lankhorst , Neil Armstrong , Phong LE , Robert Foss , Simona Vetter , Thomas Zimmermann , dri-devel@lists.freedesktop.org Subject: [PATCH v4 2/3] drm/bridge: ite-it66121: Move logic .mode_set setup to .atomic_enable Date: Fri, 15 May 2026 11:02:10 +0200 Message-ID: <20260515090220.809830-3-javierm@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260515090220.809830-1-javierm@redhat.com> References: <20260515090220.809830-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: quoted-printable Content-Type: text/plain; charset="utf-8" Move the existing .mode_set logic to the .atomic_enable callback. The former is deprecated and drivers are supposed to use the latter instead. Suggested-by: Maxime Ripard Signed-off-by: Javier Martinez Canillas --- Changes in v4: - New patch for v4 drivers/gpu/drm/bridge/ite-it66121.c | 79 +++++++++++++++------------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/= ite-it66121.c index 947b7a0f0a45..c8795247cfa8 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -654,6 +654,47 @@ static int it66121_bridge_attach(struct drm_bridge *br= idge, return 0; } =20 +static void it66121_set_mode(struct it66121_ctx *ctx, + struct drm_atomic_commit *state) +{ + struct drm_connector *connector =3D ctx->connector; + const struct drm_crtc_state *crtc_state; + const struct drm_display_mode *mode; + struct drm_crtc *crtc; + + crtc =3D drm_atomic_get_new_connector_state(state, connector)->crtc; + crtc_state =3D drm_atomic_get_new_crtc_state(state, crtc); + 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; @@ -733,6 +774,7 @@ static void it66121_bridge_enable(struct drm_bridge *br= idge, =20 drm_atomic_helper_connector_hdmi_update_infoframes(ctx->connector, state); =20 + it66121_set_mode(ctx, state); it66121_set_mute(ctx, false); } =20 @@ -764,42 +806,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) { @@ -935,7 +941,6 @@ static const struct drm_bridge_funcs it66121_bridge_fun= cs =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 Fri Jun 12 11:28:07 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 07CC8441048 for ; Fri, 15 May 2026 09:03:32 +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=1778835814; cv=none; b=fXuo5RsXzOyWhMQCnO/7rAlSw0Gkl3kgsxVzMcCGeSk9bLui3FG6KqWiWSuoui5RXW7qwuZIbUOA9p50RvAkSSo0RzbJEA205NWe15/bd7BVV7BQz6XiJOu1/HWXw1jBm5l3KVFBjwtlKBrwY4uLyEG+W3Z8yNDI01VoL7F3qvQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778835814; c=relaxed/simple; bh=CtaWbfYuj869W0afjY5NZk2jejlfiwcVk7UmNYSaMQ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k7/50FN265/0J5E3Xjay6OEZqso1EbCh/uR8e8NkjpMq9cZLbJfkSLI8FPwWy7Zn2uWi5KKztC/vTCqZrOd+7z8mR6Gs6WeL9h6fV03X5ZoBjJE0yxcmi9Tl8pA8+uW+7UMo8PYMSRH0OoH264r0W1CMbEdO1vN0jKM9KN5LbbM= 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=RDPGmyt2; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=CjaPc/XD; 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="RDPGmyt2"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="CjaPc/XD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778835812; 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=WkeuA98/IigyQUpPmD/BRx3zRBO+IRiFlemTbP/J4Yc=; b=RDPGmyt2qC4meZ7XwhSXP9EqqX+cFsXrGE9feV1bJguKVItq1aOODXHDCRfJfdcBaldyWf A/jMSJCCnrVp7ZQyF3D2pPqeZ+QzK6A/9hqQXqNKnBcFEtzB/Wtn6xwIIoXVclP+C189If bsvVK7UdObTjsooAK6aFv/j6BYPEy38= 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-215-i8h5hxjQMDqDMPoV8RR3qQ-1; Fri, 15 May 2026 05:03:30 -0400 X-MC-Unique: i8h5hxjQMDqDMPoV8RR3qQ-1 X-Mimecast-MFC-AGG-ID: i8h5hxjQMDqDMPoV8RR3qQ_1778835810 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-44d83e45febso463078f8f.0 for ; Fri, 15 May 2026 02:03:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1778835809; x=1779440609; 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=WkeuA98/IigyQUpPmD/BRx3zRBO+IRiFlemTbP/J4Yc=; b=CjaPc/XDee2+bXvAp5FB/+fa9MvwO3gU4npgjvfloowwhY06EcE96CxvbR7nS0KZgl TTM7wpKpEaHuF7xkbTvVVv/TMHolGHCaBrVVZvaaS4L4ULvvQELkwLL84dJqJKOmsc/e tAKaik/eWznCGw3g8teax/AxYtXAI5CN2kfjIdKpJnH2oHr/jDwmvWXtqPqd3UHU5aWO zja0FINN6yAd87ilOnlReO3Bo+GqoHfkP38ddNeNdd1wzSoOV2YGIni9ksE/4YfQ2tXt HN92YrdtBzrItgQ8J5YMZPj6/+d3aHzb+qtB5658JBYi+sP/Dbw5n+oNxae8vTh/dPEF 465g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778835809; x=1779440609; 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=WkeuA98/IigyQUpPmD/BRx3zRBO+IRiFlemTbP/J4Yc=; b=V03Vx8ZumnU7XpL/kR9LVi4Cv8kBWnIR5utCdmrtg+HX8rgXM89HVSM1Nl02iw0DpG ZuGVAd5iAyOypPZu/Nye2Ow4NZCCfhVsMM/ati0pybMUxjnputSa449D9fdOK0kKiMhZ 8s4BJItEHoTaKJEKmjOdWPBGCgYmm74avmHx0YU3pWSMdB4AoSzW+kHXsj5pdlbr2z6n 4+T4+IYZGqCUtlYLIQbX0PeAPoFYx/OoOxbBl1IcdQh2OhwonmBSh7v5R0AwMtscqZ2R RtZ2NDzkmigjBXjPMH0lKL00X7jRC74WXnd4+0IOUBOom831oUGafDWZuxOehZ3Fu1Es JRoA== X-Gm-Message-State: AOJu0Yy5tAWhQtkjsufppWk2QwSc6xhG25mrJ/qJDF8fsonozv187SPX yO2IB08R7Mu97aIPd8IBBwpRatupnA87GtJyDSIhSaFIEYrHiFWe9tQSCis9YTtTUDjAaA9j9ml er2S22hCOxvLwCa91DmJqwZl2z74pJlSfv2rjAbCsNrzL7NMq3geeiSm2n/bfCoTpmDcn706pf7 wId4pyDoHXjSqFQpG9Hra/HuIVO3S1Pj9pcZPKgS2daj0x1R+1 X-Gm-Gg: Acq92OFN0TcJrxiIM+lkweJkcA0HRrMLqDBgTZl9IKd2fSN6ebth2fhHL9gpgJ72hnY 98mwYp4dOcprAl0+zfJLBm8fLnVeH5rWY/CIqYic30/qyd87qlGoLmLLmP0mCd7NKjclsV0lXuP Hec7eAAzGg2+9mpyxD3JgFOwcmIqQ0/Iai4goYuBui/tIulEXF90X+1seVRuccwS4gYTRsXoS06 HvDisaTNTG0KiG9KQtfrkz2g60TYEIPy5GTTyUS2+f6IMqIRRbzQk6rUaRyx1+4ukR+yPuzNplk Ue/+RDmUsrbQ8FOX5QaiZqI5a/k316YVIXXycxluS7GIZ9s+mit142N4itQZsqzaY0lV3uZSMhA 9VOZflkYtgiIVMKvR/FJ4zYedOILxDYcLzCBuqSogVUNKgVY= X-Received: by 2002:a5d:5f90:0:b0:441:2397:f40f with SMTP id ffacd0b85a97d-45d900ec71fmr11224029f8f.4.1778835808980; Fri, 15 May 2026 02:03:28 -0700 (PDT) X-Received: by 2002:a5d:5f90:0:b0:441:2397:f40f with SMTP id ffacd0b85a97d-45d900ec71fmr11223956f8f.4.1778835808317; Fri, 15 May 2026 02:03:28 -0700 (PDT) Received: from localhost (62-151-111-63.jazzfree.ya.com. [62.151.111.63]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45da0fe13a7sm14053566f8f.29.2026.05.15.02.03.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:03:26 -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 v4 3/3] drm/bridge: ite-it66121: Select HDMI or DVI mode based on sink type Date: Fri, 15 May 2026 11:02:11 +0200 Message-ID: <20260515090220.809830-4-javierm@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260515090220.809830-1-javierm@redhat.com> References: <20260515090220.809830-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: quoted-printable Content-Type: text/plain; charset="utf-8" The driver unconditionally sets the transmission mode to HDMI, which leads to display output not working with DVI monitors. Check connector's display information sink type to identify the correct mode to configure the bridge. Signed-off-by: Javier Martinez Canillas --- Changes in v4: - Convert the driver to use the HDMI helpers (Maxime Ripard). - Move .mode_set logic to .atomic_enable (Maxime Ripard). Changes in v3: - Move the HDMI/DVI mode set to the .atomic_enable handler (Maxime Ripard). Changes in v2: - Don't store the sink type in a per-commit bridge state (Maxime Ripard). drivers/gpu/drm/bridge/ite-it66121.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/= ite-it66121.c index c8795247cfa8..95ee98a4a8df 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -184,6 +184,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) @@ -658,6 +659,7 @@ static void it66121_set_mode(struct it66121_ctx *ctx, struct drm_atomic_commit *state) { struct drm_connector *connector =3D ctx->connector; + unsigned int tx_mode =3D IT66121_HDMI_MODE_HDMI; const struct drm_crtc_state *crtc_state; const struct drm_display_mode *mode; struct drm_crtc *crtc; @@ -666,10 +668,13 @@ static void it66121_set_mode(struct it66121_ctx *ctx, crtc_state =3D drm_atomic_get_new_crtc_state(state, crtc); mode =3D &crtc_state->adjusted_mode; =20 + if (!connector->display_info.is_hdmi) + tx_mode =3D IT66121_HDMI_MODE_DVI; + 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, tx_mode)) goto unlock; =20 if ((ctx->id =3D=3D ID_IT66121 || ctx->id =3D=3D ID_IT66122) && --=20 2.54.0