From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 378093EF0C6 for ; Mon, 4 May 2026 19:11:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921898; cv=none; b=Z5pShBot1oC56Fw5P9CgelkRYUDVblJ46k1/w1bOWEwVdeDVGYvEoQ3g4eoetej1X8loNxv2iQhGPws379JrwIHwizPcGwEb9PrVyCt44I22yHMUGhaPMqaVX73q+SMR/ETZMCcxYpexh3jm1yCZGIso/qWuk3W67vS4EM0oTis= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921898; c=relaxed/simple; bh=gPod5psDuYHeexBaonjWvaIui42g4wz0uc0rFfhdUcg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a6qbMRlgzDfAkhaGcRwzGgms/ReUfHREt3joQWamf8T14vfVfMRSb1ZV+qzZpBQcM/DOHeMygM2RFUycQ0oV3agj6VGc6F94O6QPKi4wQPbXpFRD7ZA1uLvnQHeqLTTJnO6FlOmbRHUDqNukZwYnyXqQB92Cpf7oS2uj0KtlOQ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=QlUILbfJ; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="QlUILbfJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921891; bh=NVWUpLoYoqwHrhK1PEs6caGhSJc5nSsIxxdrR4kmbpQ=; b=QlUILbfJdQnnyGV4CViETV+CFnhDJuDf4s4vWNpHO73YOVAvadovAJL2052evTlHQmn6rruvc VOSkDxeLL1YbErmtAcLD1trsSMfnPjdSNUWYCeQR4nuaaUWtz0cj1YdKrUaIa3mLWoUmHR58qtN MNGX2l6W+p5lQXMngwwqTQidSIQugMIncQIqXv375ZKQxjUjiKnYW3r28Kx9z19/PS6NlV+gaNA U1suHklRXgYRq0e0ipa9k07rVrdS0imFl85tux7O39lBh+LeyKJZi0nSYUf4PsuPmDTQhG1A9UT YwopGU4I/l1uQ8XhKzsavEeaKDEXs+QFSFW3ilVp4ncQ== X-Forward-Email-ID: 69f8ef4e04bb1dff846bb7fb X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org, Christopher Obbard Subject: [PATCH v4 01/17] drm: bridge: dw_hdmi: Disable scrambler feature when not supported Date: Mon, 4 May 2026 19:10:38 +0000 Message-ID: <20260504191059.275928-2-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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 scrambler feature can be left enabled when hotplugging from a sink and mode that require scrambling to a sink that does not support SCDC or scrambling. Typically a blank screen or 'no signal' message can be observed after using a HDMI 2.0 4K@60Hz mode and then hotplugging to a sink that only support HDMI 1.4. Fix this by disabling the scrambler feature when SCDC is not supported. Fixes: 264fce6cc2c1 ("drm/bridge: dw-hdmi: Add SCDC and TMDS Scrambling sup= port") Reported-by: Christopher Obbard Reviewed-by: Neil Armstrong Signed-off-by: Jonas Karlman --- v4: No change v3: Collect r-b tag v2: New patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index f4a1ebb79716..248454c45d6b 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2135,6 +2135,8 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi, HDMI_MC_SWRSTZ); drm_scdc_set_scrambling(hdmi->curr_conn, 0); } + } else if (hdmi->version >=3D 0x200a) { + hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL); } =20 /* Set up horizontal active pixel width */ --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2962B3F075A for ; Mon, 4 May 2026 19:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921900; cv=none; b=KV5nIzjEygwvOKLG28ppjfjRYcYORatl7p5vczlMMXN++bdexlEnLTJ6oGdmU8Z8qaXcAncCC6EKWNEtbclHKUgeGGeEzZXUJozOt8iyyFAnSTSHBdM+gZ6K4g9uKnbMU8DPvOV9xIp/t/ZAnBLXJl7AB9f8o3AacHObPCEhEKU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921900; c=relaxed/simple; bh=hqRlZYFxrvuqWnZ8IPT7bcBa9DVizXGW1aP0XFjs0OI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KJ0s9GpYadg3TvqLshvs3eyK57RFeathjJXwRPeOsO9A+zpnSF0nyGsLa9NLgUET/k7d4HXRwJSne81ZopqGlt+YuSL4/g2VR35rPuC2n7DX9Or6j+xA8QbVw8NTd+PfSyAhLira/+D4lKIWkBNqd+I2/ntiCybRO9u/xrJP0MM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=bAf/6m84; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="bAf/6m84" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921893; bh=Eqz0r9NoxUG15d+SsM6xXmv6FO2TpWy1OfhCgUezkIo=; b=bAf/6m84Tfdqrl2CUS29yrlKlnDSnXwq7E/7aoNk603XPp9BO/pIi1qjdI6C/6sO4lBndbobA 5RCNqd2NRGwKPyLXF3f/YSRlR22HAXPoWciPggF1+BYT5bEj7Zp3xqyh0Sit/KbZeXQFAsmRqV0 iVibPQlKfIPQ0NhNPhyd6h/yJ07qB83rnkIjRw1DHEI+V8rES8M4bt4MzVG8/AT6G3l9ZomCCyd cWjaDho9Gf3sLHc7317ze5OgIY+kk5UKK76NBbs72++6QOWGf5l1258agambaTPYtFsFlhcEnE7 Jq6N4hE2A9+ewgMUKEwf+l5KhGgmTGI8GCbA6PQE6NuA== X-Forward-Email-ID: 69f8ef5204bb1dff846bb816 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 02/17] drm: bridge: dw_hdmi: Only notify connected status on HPD interrupt Date: Mon, 4 May 2026 19:10:39 +0000 Message-ID: <20260504191059.275928-3-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" drm_helper_hpd_irq_event() and drm_bridge_hpd_notify() may incorrectly be called with a connected status when HPD is high and RX sense is changed. This typically happens when the HDMI cable is unplugged, shortly before the HPD is changed to low. The original intent of commit da09daf88108 ("drm: bridge: dw_hdmi: only trigger hotplug event on link change") was to signal hotplug event at correct interrupt states. Based on the commit message the intent was to trigger hotplug event: - when HPD goes high (plugin) - when both HPD and RX sense has gone low (plugout) However, following interrupt state changes can typically be observed when the HDMI cable is unplugged: - RX interrupt: HPD=3Dhigh RX=3Dlow -> triggers a connected event - HPD interrupt: HPD=3Dlow RX=3Dlow -> triggers a disconnected event Fix this by only notify connected status on the HPD interrupt when HPD is going high, not on the RX sense interrupt when RX sense is changed. After this a connected event should be triggered when HPD=3Dhigh at HPD interrupt, and a disconnected event should be triggered when both HPD=3Dlow and RX=3Dlow at either HPD or RX interrupt. Fixes: da09daf88108 ("drm: bridge: dw_hdmi: only trigger hotplug event on l= ink change") Reviewed-by: Nicolas Frattaroli Signed-off-by: Jonas Karlman --- v4: Collect r-b tag v3: Update commit message v2: New patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 248454c45d6b..0647ec6632d8 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -3157,7 +3157,8 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) mutex_unlock(&hdmi->cec_notifier_mutex); } =20 - if (phy_stat & HDMI_PHY_HPD) + if ((intr_stat & HDMI_IH_PHY_STAT0_HPD) && + (phy_stat & HDMI_PHY_HPD)) status =3D connector_status_connected; =20 if (!(phy_stat & (HDMI_PHY_HPD | HDMI_PHY_RX_SENSE))) --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9646C3F0AB1 for ; Mon, 4 May 2026 19:11:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921902; cv=none; b=YSmPs4t5AprRGmPZyzxT+tpO+LuH4icBz9dlZ++HNnsSz8zzIFrk1DPfAAayBVWvBr0v6uKpYmw3Sq0S+jyVpg7n/xy3pgz45YqWaVX3oilnlUPCjTMM/aVLk5ZR5Ht9wZ+EEEjrSYUGZIrrLmIQYFh1/dPL05Z4nOhnn5vXYoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921902; c=relaxed/simple; bh=kbM+Lec2hMh/c+EhkIe0InZgAFU6C1xsNpEFPum8B44=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k/nD1lvIEKT7rozbwM+hdxsyV1j18jwT8xuns3NIopTmrsfEPMZy/qim+nAJLNSOxEjxfcrYW7jtfufPirE2pPT6kYA43itMFn917EiD2uz+foBxT++7YZbMBkQrqqbd16sF4a2CvM26vcXU2Xeox8btyVWdwXewalyYpEoOwDQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=orFQq9NQ; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="orFQq9NQ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921900; bh=+lbSKPdiopZL30uTDNbEN1kUm1XZOh7nc0sDCC6RnNk=; b=orFQq9NQfZfkO2vcl9oONpkHgy6AH6srCCdr8/Ha9l3O6Ii5Iv1B5baw5YShtMZVR80Uxfwxn hMJQNiuD/LVoHCYtihw5zNtzjorJIFWncQ21Zc3DgtqQjP/GEEvlGFNrdfsgrPBwv2BJkyMIapP aXziiWxfgGrh4wSx8xxBFZHVcEmdeEbsgnDmJyYHu/rn/+t52VJ+LZqKZWslJYdtqSGVpkeEJLb 7R/lh/Ey5eUqb4PQR2bVt00EPl3mpUN50Ua9kXzNZme6CQiMVlSp1Z1s7d6EYIv0lF6mKEVfv9X 9EPW/aOzRnQCppf/++PNRjTv7kMg73V7SaboWE2dSz7g== X-Forward-Email-ID: 69f8ef5604bb1dff846bb854 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 03/17] drm: bridge: dw_hdmi: Call poweron/poweroff from atomic enable/disable Date: Mon, 4 May 2026 19:10:40 +0000 Message-ID: <20260504191059.275928-4-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" Change to only call poweron/poweroff from atomic_enable/atomic_disable funcs instead of trying to be clever by keeping a bridge_is_on state and poweron/off in the hotplug irq handler. The bridge is already enabled/disabled depending on connection state with the call to drm_helper_hpd_irq_event() in hotplug irq handler. A benefit of this is that drm mode_config mutex is always held at poweron/off, something that may reduce the need for the dw-hdmi mutex. Reviewed-by: Neil Armstrong Signed-off-by: Jonas Karlman --- v4: No change v3: Collect r-b tag v2: Update commit message --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 33 ++--------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 0647ec6632d8..4ecad0d2eeaa 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -171,7 +171,6 @@ struct dw_hdmi { enum drm_connector_force force; /* mutex-protected force state */ struct drm_connector *curr_conn;/* current connector (only valid when !di= sabled) */ bool disabled; /* DRM has disabled our bridge */ - bool bridge_is_on; /* indicates the bridge is on */ bool rxsense; /* rxsense state */ u8 phy_mask; /* desired phy int mask settings */ u8 mc_clkdis; /* clock disable register */ @@ -2400,8 +2399,6 @@ static void initialize_hdmi_ih_mutes(struct dw_hdmi *= hdmi) =20 static void dw_hdmi_poweron(struct dw_hdmi *hdmi) { - hdmi->bridge_is_on =3D true; - /* * The curr_conn field is guaranteed to be valid here, as this function * is only be called when !hdmi->disabled. @@ -2415,30 +2412,6 @@ static void dw_hdmi_poweroff(struct dw_hdmi *hdmi) hdmi->phy.ops->disable(hdmi, hdmi->phy.data); hdmi->phy.enabled =3D false; } - - hdmi->bridge_is_on =3D false; -} - -static void dw_hdmi_update_power(struct dw_hdmi *hdmi) -{ - int force =3D hdmi->force; - - if (hdmi->disabled) { - force =3D DRM_FORCE_OFF; - } else if (force =3D=3D DRM_FORCE_UNSPECIFIED) { - if (hdmi->rxsense) - force =3D DRM_FORCE_ON; - else - force =3D DRM_FORCE_OFF; - } - - if (force =3D=3D DRM_FORCE_OFF) { - if (hdmi->bridge_is_on) - dw_hdmi_poweroff(hdmi); - } else { - if (!hdmi->bridge_is_on) - dw_hdmi_poweron(hdmi); - } } =20 /* @@ -2563,7 +2536,6 @@ static void dw_hdmi_connector_force(struct drm_connec= tor *connector) =20 mutex_lock(&hdmi->mutex); hdmi->force =3D connector->force; - dw_hdmi_update_power(hdmi); dw_hdmi_update_phy_mask(hdmi); mutex_unlock(&hdmi->mutex); } @@ -2988,7 +2960,7 @@ static void dw_hdmi_bridge_atomic_disable(struct drm_= bridge *bridge, mutex_lock(&hdmi->mutex); hdmi->disabled =3D true; hdmi->curr_conn =3D NULL; - dw_hdmi_update_power(hdmi); + dw_hdmi_poweroff(hdmi); dw_hdmi_update_phy_mask(hdmi); handle_plugged_change(hdmi, false); mutex_unlock(&hdmi->mutex); @@ -3006,7 +2978,7 @@ static void dw_hdmi_bridge_atomic_enable(struct drm_b= ridge *bridge, mutex_lock(&hdmi->mutex); hdmi->disabled =3D false; hdmi->curr_conn =3D connector; - dw_hdmi_update_power(hdmi); + dw_hdmi_poweron(hdmi); dw_hdmi_update_phy_mask(hdmi); handle_plugged_change(hdmi, true); mutex_unlock(&hdmi->mutex); @@ -3106,7 +3078,6 @@ void dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, boo= l hpd, bool rx_sense) if (hpd) hdmi->rxsense =3D true; =20 - dw_hdmi_update_power(hdmi); dw_hdmi_update_phy_mask(hdmi); } mutex_unlock(&hdmi->mutex); --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA1EA3E3C4B for ; Mon, 4 May 2026 19:11:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921895; cv=none; b=qLQk1XLGLNbXScGSj6uYaozthCymFSHM/KdqqBejjRIq7SvLkxnBtWxKU/q9BI/69wYIjvESzWqgqB8bdQjKwnbOmImnwz5dWdNC1cXe9rk4SHxoWUMji+tOS6ieP3LxccUYjoUcL5CTUHoga/NivRTDNGdF4Dr/25ncItC8NqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921895; c=relaxed/simple; bh=2vNRIV+X9aziqWVgNJH/9Q4i1l9GuFJGxG9rk+Nehaw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gKtrWKDiZJ+Q6RJqsM+x6P+XjU0MiUpNJN4QCAdPaXCLehLrMrkMkMZ4Qgo+oG/+0BUQwatTcbiVV44JMQhXn0sZzEVbMZell6wPuhLZSrnnLAYdW7BbG1IVHUbIcZ0EfTlI7GwBV6741eUGraFvubgGXLvjmVm7loIfRhCKrlw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=wpyjbIBO; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="wpyjbIBO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921886; bh=ztwyFtJ+PIzunu61Ma2kZpnK7+L5uIsvetgCX3r3Ivg=; b=wpyjbIBOYkAV0/e12jKgGYTRoqi7x5GbxBIvHptaXM38nWmCPa3TIZTvrWzz5lXfwuZcldiJG FzLf6aC3sGgn3la1RlsaQdTBX+IeDQ2PsLUCys4N2Fx8dBk7RFaDt6POxKT6vwwmWjtsvXGDkc8 mz5RFMygjXeEv3HbewJOeUgoPrwWQiP+SOcQyDyc4YtpwdxuS9+QXeZCaf28GfcAMS7JFhHkS08 IdnYIqfwxdp+zx08DOEWP7zwS4F87IEfiYE7adnIq6TsqQMs/jyz8MuWmY9ksaJw/B8ScWzZcg1 7CHnkFaUnP8zfDw+V9DEmmzm2LK8fYmVT4hr4ZMxVEHg== X-Forward-Email-ID: 69f8ef5a04bb1dff846bb86f X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 04/17] drm: bridge: dw_hdmi: Use passed mode instead of stored previous_mode Date: Mon, 4 May 2026 19:10:41 +0000 Message-ID: <20260504191059.275928-5-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" Use the passed mode instead of mixing use of passed mode and the stored previous_mode in dw_hdmi_setup(). The passed mode is currenly always the previous_mode. Also fix a small typo and add a variable to help shorten a code line. Reviewed-by: Neil Armstrong Signed-off-by: Jonas Karlman --- v4: No change v3: Collect r-b tag v2: Update commit message, s/type/typo/ --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 4ecad0d2eeaa..f028a4b71aad 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2258,6 +2258,7 @@ static int dw_hdmi_setup(struct dw_hdmi *hdmi, const struct drm_connector *connector, const struct drm_display_mode *mode) { + const struct drm_display_info *display =3D &connector->display_info; int ret; =20 hdmi_disable_overflow_interrupts(hdmi); @@ -2303,12 +2304,10 @@ static int dw_hdmi_setup(struct dw_hdmi *hdmi, hdmi->hdmi_data.video_mode.mdataenablepolarity =3D true; =20 /* HDMI Initialization Step B.1 */ - hdmi_av_composer(hdmi, &connector->display_info, mode); + hdmi_av_composer(hdmi, display, mode); =20 - /* HDMI Initializateion Step B.2 */ - ret =3D hdmi->phy.ops->init(hdmi, hdmi->phy.data, - &connector->display_info, - &hdmi->previous_mode); + /* HDMI Initialization Step B.2 */ + ret =3D hdmi->phy.ops->init(hdmi, hdmi->phy.data, display, mode); if (ret) return ret; hdmi->phy.enabled =3D true; --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9ADF3EFD14 for ; Mon, 4 May 2026 19:11:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921909; cv=none; b=V6zJsr1dmGagJoJ5TSGBXiGp1aHAeIAD7EfvvG6jpPb/6eOwkDHCa33zUTo56GN+t91EBgRwbbhVv8vnnBQCLQiZp6/yUO27lrmaPJWGFcclQTxG9MYuD98zMK6C3NLCyxVuZlOgW3El1Xu5pUby3igj++ihd0rQCC+s3obpLqY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921909; c=relaxed/simple; bh=s4mm7fQkVHqAf7z8r1v/FIiIPukjM6yAQe92MS/MGWQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YXx2Kwjb/zkgvXrQrDs1PLiT9AGJGrBPCeWXd9ZGBz81wixT+8cpVDLaRZkg5ZXNge5wECZOfotI9BMLNtuMqXBeg8gaRxs94lNeJnN1twxa8hOrq69rr5iDjl7q1hF0KNMN85DFrst6FDzp1wOmpYoqILv27P3Fzo0HxCBqCVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=m3KrwRIr; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="m3KrwRIr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921907; bh=T8+R7rBEFqteq3o8WJW2MaSt/8vk9AUClKen0jZKevI=; b=m3KrwRIrqgX9ufm4nwEeHYZNuMzuC0P68ICSBCWYfTBkmMdN+GLUJ8inn9q6kHYXFTxK7tBGH QOr4zOI7GfWwSRfUgwCwfD376Q2Jgg0g8dfkzRua76p1Rwd/t6z7dg4fyirbDBS+dqS6DehQaPr nMfVnczmpMUBvXin5pGFK7JsdtAxGXB1QlX0W2ZJnpczypSbXTpbb5b6Cf/Z49CPqttT856JhRl rivjZUlDGxbYhz7E9I+ywEU76SB7Ub3KcAVMozaREaWWHJnmRl/B9o7nCZMLplRlbfrHd8bzTPF dzVwWwEThITBmsjQgz9GkVb9JVIFHuHlzwLMs1YkWR7g== X-Forward-Email-ID: 69f8ef5f04bb1dff846bb88a X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 05/17] drm: bridge: dw_hdmi: Fold poweron and setup functions Date: Mon, 4 May 2026 19:10:42 +0000 Message-ID: <20260504191059.275928-6-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" Fold the poweron and setup functions into one function and use the adjusted_mode directly from the new crtc_state to remove the need of storing previous_mode. Reviewed-by: Neil Armstrong Signed-off-by: Jonas Karlman --- v4: No change v3: Collect r-b tag v2: No change --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index f028a4b71aad..7211beffd59e 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2254,9 +2254,9 @@ static void hdmi_disable_overflow_interrupts(struct d= w_hdmi *hdmi) HDMI_IH_MUTE_FC_STAT2); } =20 -static int dw_hdmi_setup(struct dw_hdmi *hdmi, - const struct drm_connector *connector, - const struct drm_display_mode *mode) +static int dw_hdmi_poweron(struct dw_hdmi *hdmi, + const struct drm_connector *connector, + const struct drm_display_mode *mode) { const struct drm_display_info *display =3D &connector->display_info; int ret; @@ -2396,15 +2396,6 @@ static void initialize_hdmi_ih_mutes(struct dw_hdmi = *hdmi) hdmi_writeb(hdmi, ih_mute, HDMI_IH_MUTE); } =20 -static void dw_hdmi_poweron(struct dw_hdmi *hdmi) -{ - /* - * The curr_conn field is guaranteed to be valid here, as this function - * is only be called when !hdmi->disabled. - */ - dw_hdmi_setup(hdmi, hdmi->curr_conn, &hdmi->previous_mode); -} - static void dw_hdmi_poweroff(struct dw_hdmi *hdmi) { if (hdmi->phy.enabled) { @@ -2969,15 +2960,19 @@ static void dw_hdmi_bridge_atomic_enable(struct drm= _bridge *bridge, struct drm_atomic_state *state) { struct dw_hdmi *hdmi =3D bridge->driver_private; + const struct drm_display_mode *mode; struct drm_connector *connector; + struct drm_crtc *crtc; =20 connector =3D drm_atomic_get_new_connector_for_encoder(state, bridge->encoder); + crtc =3D drm_atomic_get_new_connector_state(state, connector)->crtc; + mode =3D &drm_atomic_get_new_crtc_state(state, crtc)->adjusted_mode; =20 mutex_lock(&hdmi->mutex); hdmi->disabled =3D false; hdmi->curr_conn =3D connector; - dw_hdmi_poweron(hdmi); + dw_hdmi_poweron(hdmi, connector, mode); dw_hdmi_update_phy_mask(hdmi); handle_plugged_change(hdmi, true); mutex_unlock(&hdmi->mutex); --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9978A3EFD05 for ; Mon, 4 May 2026 19:11:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921909; cv=none; b=fhISFNxgtVI60WSmHcC6EhQXo5B79BeMa6q23vL9ZUiHNsrYVaye+s1p37F2hSupKO/l2EsXQ154UQAt6r1wWySt1JEf6vG1bUkA33Fu5+QuzQW+VcXdriXc05MHG73UK+Hrh7szTYy/GBBjB6isSOJzqczhmwjMhLYWeLRw9Eg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921909; c=relaxed/simple; bh=kTcDzBqWbEuLBJLj9wdgmrPYrS4POFInzoY4qnwMdXY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r1WWkFqLVn93iYnJQCmZRK4aIUCtgO3jnXsMx5YxWPegZ8IuqpJe5bJiOdWSqdSLwkl4iYNrORo9xlOD1dZVCe9/ZFgcnoDseWG7UNtyGsmrmJ/fukRf2fuOOFhgYdiPmNBq9jJjHbaDLrR/hFTbeAzt4qtIXW21kJYCH04y8Xk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=oCqbLGlf; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="oCqbLGlf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921907; bh=SSjbkd7u9s/dzg55YrV/09rhDl4sPM/aDTP4vRABfBI=; b=oCqbLGlfkFs8JS2jxS6+LSZhhJgXVOkMFzS6L/K25tkSsRsa8RUbjwQWwgNrMigewIh92Cjtg 5izXxYoKjZi53clJZtCEudbekfpz8gyOIsGE9W830vF0h6/VYtYU8CPnDVdI2OpJtsce/POa1wC W+BCvlgZTWq2xBz4KGUyOqVkKnwQkMatvEV96gmpny16j5EvLqeceNLkgXFSQrT5/0rW8g8Xw6I EdVC1C0yALdu+DKh5db/DVZkgnQxd9Pft0rlSLaKKPH0qXmjBCq9NXNgP5m5gsU7+Lr+ZXxnNpH CALSUd1JLAOvEP8RWueJs7SSZT2RmpuTHliVtpQdGKSw== X-Forward-Email-ID: 69f8ef6304bb1dff846bb8a5 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 06/17] drm: bridge: dw_hdmi: Remove previous_mode and mode_set Date: Mon, 4 May 2026 19:10:43 +0000 Message-ID: <20260504191059.275928-7-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" With the use of adjusted_mode directly from the crtc_state there is no longer a need to store a copy in previous_mode, remove it and the now unneeded mode_set ops. Reviewed-by: Neil Armstrong Signed-off-by: Jonas Karlman --- v4: No change v3: Collect r-b tag v2: No change --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 7211beffd59e..a287bf56bd9f 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -156,8 +156,6 @@ struct dw_hdmi { bool enabled; } phy; =20 - struct drm_display_mode previous_mode; - struct i2c_adapter *ddc; void __iomem *regs; bool sink_is_hdmi; @@ -167,7 +165,7 @@ struct dw_hdmi { struct pinctrl_state *default_state; struct pinctrl_state *unwedge_state; =20 - struct mutex mutex; /* for state below and previous_mode */ + struct mutex mutex; /* for state below */ enum drm_connector_force force; /* mutex-protected force state */ struct drm_connector *curr_conn;/* current connector (only valid when !di= sabled) */ bool disabled; /* DRM has disabled our bridge */ @@ -2928,20 +2926,6 @@ dw_hdmi_bridge_mode_valid(struct drm_bridge *bridge, return mode_status; } =20 -static void dw_hdmi_bridge_mode_set(struct drm_bridge *bridge, - const struct drm_display_mode *orig_mode, - const struct drm_display_mode *mode) -{ - struct dw_hdmi *hdmi =3D bridge->driver_private; - - mutex_lock(&hdmi->mutex); - - /* Store the display mode for plugin/DKMS poweron events */ - drm_mode_copy(&hdmi->previous_mode, mode); - - mutex_unlock(&hdmi->mutex); -} - static void dw_hdmi_bridge_atomic_disable(struct drm_bridge *bridge, struct drm_atomic_state *state) { @@ -3005,7 +2989,6 @@ static const struct drm_bridge_funcs dw_hdmi_bridge_f= uncs =3D { .atomic_get_input_bus_fmts =3D dw_hdmi_bridge_atomic_get_input_bus_fmts, .atomic_enable =3D dw_hdmi_bridge_atomic_enable, .atomic_disable =3D dw_hdmi_bridge_atomic_disable, - .mode_set =3D dw_hdmi_bridge_mode_set, .mode_valid =3D dw_hdmi_bridge_mode_valid, .detect =3D dw_hdmi_bridge_detect, .edid_read =3D dw_hdmi_bridge_edid_read, --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34E9E3F20E9 for ; Mon, 4 May 2026 19:11:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921903; cv=none; b=bPBThH9DF9JN7I4R/ysXsQ5hahs28ETD30KBjR/agsr5BGapYPW2KV0bU9W8qJQIgQdarNghjJD8UtYKAv7KTmoi98ePuOT5zdqMt7luhCRB4gNnJJnH+WTLwxKwYWwkSALu/lRcgw3P8qgtaD8MnAGCxOUbCWLHghCfWqx4l2E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921903; c=relaxed/simple; bh=xFkg5SdyD3DFQ0/ozHmQwqTsF/Vvofk0JLysWqhRo9M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EGOsjO+OJK8TKScqAoX0anY2ELHvv/2LNLlXe7Yh55mhNkSlNYX0NLSVgSMoWhgC/kLonk6Xa1FUNsp6vouOm4QgNVCxwecIWGkzonkICsZ4ri7bdsJJe0Hhc/I3MC8YqHtKi2sZaWjqxuDUFD0BSTuOEmrORA5FudqSwmxhumM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=aOdszz5v; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="aOdszz5v" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921900; bh=2M2uDVeTxnwtGACY881LiI6ssfTmjLA7HF2IONPNjC4=; b=aOdszz5vdSHyVGuSQLGqrOfoE/B90Ea/BgUNa83fcAW5hY6vJtrH9fNCwPRifowxU/3s6mPNL ztPpxj1TsKshrhqJnncjoIauGZPbT85faRa8VoB/1jqL26bQNO35EJguIGab3R34wQxWAJAx3H9 08M7veewI3xFsj9KLpvg7LiYP7Pyi+HA+SIHIZPYYBpX6f6496GoQlg/RJduwNxRwBkopsyQRIw VnpMzhJ5VfvYy5U4TLumg82sDa553sUwmrJMhAUMvwS46s9qRPy2f8eM1+oxqTKeMXR0rePIHzF WyHN3nJqSaD1nC/VBN+DMNkkzth5rSf1QdjknEWY1LeA== X-Forward-Email-ID: 69f8ef6704bb1dff846bb8c0 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 07/17] drm: bridge: dw_hdmi: Invalidate CEC phys addr from connector detect Date: Mon, 4 May 2026 19:10:44 +0000 Message-ID: <20260504191059.275928-8-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" Wait until the connector detect ops is called to invalidate CEC phys addr instead of doing it directly from the irq handler. Reviewed-by: Neil Armstrong Signed-off-by: Jonas Karlman --- v4: No change v3: No change v2: Collect r-b tag --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index a287bf56bd9f..059f1d241fef 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2472,7 +2472,17 @@ dw_hdmi_connector_detect(struct drm_connector *conne= ctor, bool force) { struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connector); - return dw_hdmi_detect(hdmi); + enum drm_connector_status status; + + status =3D dw_hdmi_detect(hdmi); + + if (status =3D=3D connector_status_disconnected) { + mutex_lock(&hdmi->cec_notifier_mutex); + cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); + mutex_unlock(&hdmi->cec_notifier_mutex); + } + + return status; } =20 static int dw_hdmi_connector_get_modes(struct drm_connector *connector) @@ -3099,12 +3109,6 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) phy_stat & HDMI_PHY_HPD, phy_stat & HDMI_PHY_RX_SENSE); =20 - if ((phy_stat & (HDMI_PHY_RX_SENSE | HDMI_PHY_HPD)) =3D=3D 0) { - mutex_lock(&hdmi->cec_notifier_mutex); - cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); - mutex_unlock(&hdmi->cec_notifier_mutex); - } - if ((intr_stat & HDMI_IH_PHY_STAT0_HPD) && (phy_stat & HDMI_PHY_HPD)) status =3D connector_status_connected; --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF1D33F1660 for ; Mon, 4 May 2026 19:11:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921908; cv=none; b=r5787lO9J/q7priYJdHHgr3891A0mfQxjpF8Zbe4KtpJz+VwOKDIFWsj3B4zzMwNzFGEUc6hY68L1qk8rZLd2LDA3qsDW+sk47Lg9NDMJA3ynH9Gxc1hcsTTidi+BeZm0JPfvrer/JJGdxy7KGpjS3HzYBXmAjSU4JPaFA1WOio= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921908; c=relaxed/simple; bh=4GuOi9Y/xyxwNVfen6gmLBp9AjAOT+1Xf4hGPiFsy80=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mzaMeJqBO6FXhoIZ1dHm7/aCfvPYweXa7zPP0IhJ9OsyI6MpTjR/5kGftuO1PBVXEjAJr/l/0HeDQ4LFOqjJVLL8jlJ3ugoSGaSxz1UCDQ5ISvC5fHLqp1bRFCY9EA7XHyQiOjEtYry1J75dAA/ALkzwHFz/0PYuuXspLkS36to= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=Rw0WqTMn; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="Rw0WqTMn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921906; bh=XGUigRl0dHn2l3h5bXexuTyn8UnpuWF+VIfFWcyqNco=; b=Rw0WqTMn2JKrNhz8YfhYeSb26LoUxABRas08nLBJpmr+xn3Zequ1x/jRiKxfakf1a2WCkX/QX kO+TOjABx2oetjAGfJSijZT69gCNz6q5pAwr+JvlRGE9/gy/APpMRBpyh5jENzzjJdQ6VA545ad PQBxUcNiz2YHmhVV/nr1EJ7kjP39e8nHtkOr+GpgpjrE5uuY1uB23b1xqAyncU4F+JezvgUT2WU aR63GfV1kwrxhPZVKQJBiLYEpL6w7Z5AdcxDDjZp5Irw5vquBoY34Usl8hTq5yi0se60uvQmJ5a uOao3CFuwaMaEt3gcUKfghLASYZnbq/fJ5HI4+oYhLkw== X-Forward-Email-ID: 69f8ef6b04bb1dff846bb8db X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 08/17] drm: bridge: dw_hdmi: Remove cec_notifier_mutex Date: Mon, 4 May 2026 19:10:45 +0000 Message-ID: <20260504191059.275928-9-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" With CEC phys addr invalidation moved away from the irq handler there is no longer a need for cec_notifier_mutex, remove it. Reviewed-by: Neil Armstrong Signed-off-by: Jonas Karlman --- v4: No change v3: No change v2: Collect r-b tag --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 059f1d241fef..fc4f255c2a2f 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -189,7 +189,6 @@ struct dw_hdmi { void (*enable_audio)(struct dw_hdmi *hdmi); void (*disable_audio)(struct dw_hdmi *hdmi); =20 - struct mutex cec_notifier_mutex; struct cec_notifier *cec_notifier; =20 hdmi_codec_plugged_cb plugged_cb; @@ -2476,11 +2475,8 @@ dw_hdmi_connector_detect(struct drm_connector *conne= ctor, bool force) =20 status =3D dw_hdmi_detect(hdmi); =20 - if (status =3D=3D connector_status_disconnected) { - mutex_lock(&hdmi->cec_notifier_mutex); + if (status =3D=3D connector_status_disconnected) cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); - mutex_unlock(&hdmi->cec_notifier_mutex); - } =20 return status; } @@ -2594,9 +2590,7 @@ static int dw_hdmi_connector_create(struct dw_hdmi *h= dmi) if (!notifier) return -ENOMEM; =20 - mutex_lock(&hdmi->cec_notifier_mutex); hdmi->cec_notifier =3D notifier; - mutex_unlock(&hdmi->cec_notifier_mutex); =20 return 0; } @@ -2910,10 +2904,8 @@ static void dw_hdmi_bridge_detach(struct drm_bridge = *bridge) { struct dw_hdmi *hdmi =3D bridge->driver_private; =20 - mutex_lock(&hdmi->cec_notifier_mutex); cec_notifier_conn_unregister(hdmi->cec_notifier); hdmi->cec_notifier =3D NULL; - mutex_unlock(&hdmi->cec_notifier_mutex); } =20 static enum drm_mode_status @@ -3316,7 +3308,6 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device = *pdev, =20 mutex_init(&hdmi->mutex); mutex_init(&hdmi->audio_mutex); - mutex_init(&hdmi->cec_notifier_mutex); spin_lock_init(&hdmi->audio_lock); =20 ddc_node =3D of_parse_phandle(np, "ddc-i2c-bus", 0); --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9744A3F7A9A for ; Mon, 4 May 2026 19:11:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921914; cv=none; b=Fx2Bwy0p1SzqqtjDLVIxeGqZSMvmnSFKNFTWALa+yxeBv2cSrXQRG9F2/k/eLH8M4eSXywUyzldUmcJXGQInlJGUrNaEd3iGLMWN2J6j0yIy3UMFutudboHNSEET2Z5x1P5iKXJ/P8gQffrX03zd6ZJOe4knzZjxxoZZNh7pPLA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921914; c=relaxed/simple; bh=BS2cfWnOjsrycOzNbUWosV0KEZSSiijVeHlGoLtkoUg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nKExM9b7Vyr5Xb24lB//4FUVbeyCH2nUYSCJxeC4ZRvHbLshQylGL/pF1KQEgBUMbJNkrGAOjE2A3uyxf+06PdjJBgoRWov/LbSbtJbaKcHFANxp+/pzHkldRLNRRP63OhsIl/3GLot1uHi8Y8g6t9HAnZcPg0kX/261z2NlDdc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=0jgYH9LZ; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="0jgYH9LZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921911; bh=bTGVvk3csWYogsWuMFr9WOSiPdXzW7GvuCbBmKrQ9fw=; b=0jgYH9LZbFLPUN5H3yIU/M7PgGDX/ZY1ft1b5YcmJMNyYaAhDQ6xjj1rJ+fbCYso4aoyHip6W vZQ9SqF4bMQmbHhLPfefPA/bp4KqXJPQf+k8/JRegNQe9VeaGbxR4bj5YEj9sxicq1KfQD6eWfB Tp40hVqPgR4SWsCAcFmyLp31midjGAv2vZVjdBECrNmsj8vwf7PnoyV/hLOmebyyPeiDJozk3MO vIPSwpn/FFrZ//SBHXUO2N90NTB8cj5/OTojoWle/MSCACMjHXUrK507VHWFlDkZoTyXI05bToM /5X2UJNK5HilKbA2ChxzAphuCfVZXpnU2rtt8I5Q/7Xw== X-Forward-Email-ID: 69f8ef6f04bb1dff846bb913 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 09/17] drm: bridge: dw_hdmi: Extract dw_hdmi_connector_status_update() Date: Mon, 4 May 2026 19:10:46 +0000 Message-ID: <20260504191059.275928-10-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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 connector EDID update and CEC phys addr handling to a helper function as a preparation before moving EDID refresh from get_modes funcs to detect/force funcs. Reviewed-by: Nicolas Frattaroli Signed-off-by: Jonas Karlman --- v4: Collect r-b tag v3: New patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 30 +++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index fc4f255c2a2f..0b56ad7316e3 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2466,6 +2466,21 @@ static const struct drm_edid *dw_hdmi_edid_read(stru= ct dw_hdmi *hdmi, * DRM Connector Operations */ =20 +static void +dw_hdmi_connector_status_update(struct drm_connector *connector, + enum drm_connector_status status) +{ + struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connecto= r); + const struct drm_edid *drm_edid; + + drm_edid =3D dw_hdmi_edid_read(hdmi, connector); + drm_edid_connector_update(connector, drm_edid); + drm_edid_free(drm_edid); + + cec_notifier_set_phys_addr(hdmi->cec_notifier, + connector->display_info.source_physical_address); +} + static enum drm_connector_status dw_hdmi_connector_detect(struct drm_connector *connector, bool force) { @@ -2483,20 +2498,9 @@ dw_hdmi_connector_detect(struct drm_connector *conne= ctor, bool force) =20 static int dw_hdmi_connector_get_modes(struct drm_connector *connector) { - struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, - connector); - const struct drm_edid *drm_edid; - int ret; + dw_hdmi_connector_status_update(connector, connector->status); =20 - drm_edid =3D dw_hdmi_edid_read(hdmi, connector); - - drm_edid_connector_update(connector, drm_edid); - cec_notifier_set_phys_addr(hdmi->cec_notifier, - connector->display_info.source_physical_address); - ret =3D drm_edid_connector_add_modes(connector); - drm_edid_free(drm_edid); - - return ret; + return drm_edid_connector_add_modes(connector); } =20 static int dw_hdmi_connector_atomic_check(struct drm_connector *connector, --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EB923F7A8F for ; Mon, 4 May 2026 19:11:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921913; cv=none; b=L/cylCLJadBJm8oC2ncmGxOO8T/GEYlXE65NdzPJ5ifS9EhwRLFyN8nfs0RY51hB4GgUAO+zxlghvgNWh1ok/f1Yb3RfaV5hqxDC9noVjjuVrgKS5znmjckOaQCgNvSLF4grgFC3g8Sys/G6LD1OfHcam+SxryzfH+Zad8KhFdo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921913; c=relaxed/simple; bh=BCXhnYotRzW51iTO6yZ9t+4t1/ooy35XNejXLNnlnvc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r+Tzf8duGIeS0mMxQuXauHH3YIn4ESVVNJhdeXw9whNM5r4ecp7qSja4GHC6pCPtWSZpcwG5VD+q5G7qDDm5qP6YxQ8jrzysgWislepMJPT74ygd7E/HkgpxbkEyh82yKktImHKAaqQ1GtX8dr7YIKV5rTQTwVeE6ESo0R+59Yk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=RLnxZowu; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="RLnxZowu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921911; bh=tJeJ6vpBhtsiw1KolH4aIn7bCSe8O7mTHyzB0UBThGs=; b=RLnxZowuqUg21ecl6ulekzbmaef09LwAQFADIia3yePxBLYTFmHngE3ylGLhNZgtG7BrhKbed TdhWhMjZz7w3EMCKzXSJydIzssoo4jfSd+k6QrYFzCUMpmIvRM32UADQtkjQZBxMH77FpqPVDYX GDTp1gAvVtBbLls1gj7UqJhFo2tRVZZMR89/3/aaeCa9nU9B4t6u57QH566XxZ7aM0N29zR6Bgs Xvb7pIdPSjBz9CckVo1VVv2tXufSfPnHBXitUS+ACDHcnfYTCr61yPyNlomiDQabLrmhYc4ZAXU 3NwhM0Yy4eA+h7LrhvSFFYF5JHRTzwlRZdm1LH8rRt0w== X-Forward-Email-ID: 69f8ef7304bb1dff846bb92e X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 10/17] drm: bridge: dw_hdmi: Use dw_hdmi_connector_status_update() Date: Mon, 4 May 2026 19:10:47 +0000 Message-ID: <20260504191059.275928-11-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" Update connector EDID and CEC phys addr from detect and force funcs to ensure that userspace always have access to latest read EDID after a sink use a HPD low voltage pulse to indicate that EDID has changed. With EDID being updated in detect and force funcs, there should no longer be a need to re-read EDID in get_modes funcs, so drop it. This change make the dw-hdmi connector work more closely like the bridge connector does with a hdmi bridge. Reviewed-by: Nicolas Frattaroli Signed-off-by: Jonas Karlman --- v4: Move last_connector_result assign in force ops to this patch, Collect r-b tag v3: Reworked 'Update EDID during hotplug processing' patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 25 ++++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 0b56ad7316e3..47616c11fcd7 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2473,33 +2473,36 @@ dw_hdmi_connector_status_update(struct drm_connecto= r *connector, struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connecto= r); const struct drm_edid *drm_edid; =20 + if (status =3D=3D connector_status_disconnected) { + drm_edid_connector_update(connector, NULL); + cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); + return; + } + drm_edid =3D dw_hdmi_edid_read(hdmi, connector); drm_edid_connector_update(connector, drm_edid); drm_edid_free(drm_edid); =20 - cec_notifier_set_phys_addr(hdmi->cec_notifier, - connector->display_info.source_physical_address); + if (status =3D=3D connector_status_connected) + cec_notifier_set_phys_addr(hdmi->cec_notifier, + connector->display_info.source_physical_address); } =20 static enum drm_connector_status dw_hdmi_connector_detect(struct drm_connector *connector, bool force) { - struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, - connector); + struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connecto= r); enum drm_connector_status status; =20 status =3D dw_hdmi_detect(hdmi); =20 - if (status =3D=3D connector_status_disconnected) - cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); + dw_hdmi_connector_status_update(connector, status); =20 return status; } =20 static int dw_hdmi_connector_get_modes(struct drm_connector *connector) { - dw_hdmi_connector_status_update(connector, connector->status); - return drm_edid_connector_add_modes(connector); } =20 @@ -2529,13 +2532,15 @@ static int dw_hdmi_connector_atomic_check(struct dr= m_connector *connector, =20 static void dw_hdmi_connector_force(struct drm_connector *connector) { - struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, - connector); + struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connecto= r); =20 mutex_lock(&hdmi->mutex); hdmi->force =3D connector->force; + hdmi->last_connector_result =3D connector->status; dw_hdmi_update_phy_mask(hdmi); mutex_unlock(&hdmi->mutex); + + dw_hdmi_connector_status_update(connector, connector->status); } =20 static const struct drm_connector_funcs dw_hdmi_connector_funcs =3D { --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EB0BB3F9F44 for ; Mon, 4 May 2026 19:11:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921917; cv=none; b=c7860eB82GrGx1Frwev1F7kWaTUqOo7MNe9b1cdCdIF7lF60Up2WDOVJ2l6wd2WLDM9LDlFQOQgd0F7KT4kfhHuq7MMzBJt2mCcr73KqqI83t9aF5KfVS4FWBNZWQSnEng50oNDHpDSVRalB25U850pDg7AcyWlbsTa9BCpcKwI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921917; c=relaxed/simple; bh=ZoFYijlo4y5gbSThGP+DiCy4Y2Vyfye3CBQmVuL9qew=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PiUiFjuDvNegViRw/rOJMb5gfSUP4OYfiI8saCqDRhWjzzZXm7+IleW5Q4NPjRDK6N0YxoGWUKqUSMdWqLncLls0VvUnMBSYbP02nxD8EiAP1evQ7u2MwWQ4eJN1hbEat3eiTY9LxlTq5eRjEpkx5a2M33oDRyYPm094uLWaKqI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=FkfN032L; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="FkfN032L" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921915; bh=7r4j/cIIbHblsYJNpSFl32UgTklMpNIhimhDTe7b9kw=; b=FkfN032LI0V2gw3bbjrERPsUJpmFiqnflhH8aoYGLrIrhpKoTJkxtvQkxflQ5F0WZlsnGWud8 MUDJFv/xM8OYueSNbicqvZS0proHsgRWfoXs9RszP9MLDps0VG7+MCqk/Ew3F8C6Csw0GL/8l94 H1Q3g3KBZhdyNsIGdbt6zFKM0Z17nBs4YqZyE2ZiSCNhppcPDsslZlKHNLFv6TUBeW3ynkXqh97 lIAdMJc+dFoqbeNHIsGKg1Iav5QbpfpVRZZGtMRSmDhiMbcumiW5iCKyfpL87xI21HwitP3Q2k4 4Y6PaNpUmrqYJ3ts2BK7aHngxY5qI2mfRf1fjIsocglA== X-Forward-Email-ID: 69f8ef7704bb1dff846bb949 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 11/17] drm: bridge: dw_hdmi: Use display_info is_hdmi and has_audio Date: Mon, 4 May 2026 19:10:48 +0000 Message-ID: <20260504191059.275928-12-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" drm_edid_connector_update() is being called from bridge connector funcs and from detect and force funcs for dw-hdmi connector. Change to use is_hdmi and has_audio from display_info directly instead of keeping our own state in sink_is_hdmi and sink_has_audio. Also remove the old and unused edid struct member and related define. Reviewed-by: Neil Armstrong Reviewed-by: Nicolas Frattaroli Signed-off-by: Jonas Karlman --- v4: Collect r-b tag v3: No change v2: Collect r-b tag --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 32 ++++------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 47616c11fcd7..4c712aa07a89 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -46,8 +46,6 @@ #define DDC_CI_ADDR 0x37 #define DDC_SEGMENT_ADDR 0x30 =20 -#define HDMI_EDID_LEN 512 - /* DW-HDMI Controller >=3D 0x200a are at least compliant with SCDC version= 1 */ #define SCDC_MIN_SOURCE_VERSION 0x1 =20 @@ -147,8 +145,6 @@ struct dw_hdmi { =20 int vic; =20 - u8 edid[HDMI_EDID_LEN]; - struct { const struct dw_hdmi_phy_ops *ops; const char *name; @@ -158,8 +154,6 @@ struct dw_hdmi { =20 struct i2c_adapter *ddc; void __iomem *regs; - bool sink_is_hdmi; - bool sink_has_audio; =20 struct pinctrl *pinctrl; struct pinctrl_state *default_state; @@ -2056,7 +2050,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi, HDMI_FC_INVIDCONF_IN_I_P_INTERLACED : HDMI_FC_INVIDCONF_IN_I_P_PROGRESSIVE; =20 - inv_val |=3D hdmi->sink_is_hdmi ? + inv_val |=3D display->is_hdmi ? HDMI_FC_INVIDCONF_DVI_MODEZ_HDMI_MODE : HDMI_FC_INVIDCONF_DVI_MODEZ_DVI_MODE; =20 @@ -2292,7 +2286,7 @@ static int dw_hdmi_poweron(struct dw_hdmi *hdmi, if (hdmi->hdmi_data.enc_out_bus_format =3D=3D MEDIA_BUS_FMT_FIXED) hdmi->hdmi_data.enc_out_bus_format =3D MEDIA_BUS_FMT_RGB888_1X24; =20 - hdmi->hdmi_data.rgb_limited_range =3D hdmi->sink_is_hdmi && + hdmi->hdmi_data.rgb_limited_range =3D display->is_hdmi && drm_default_rgb_quant_range(mode) =3D=3D HDMI_QUANTIZATION_RANGE_LIMITED; =20 @@ -2312,7 +2306,7 @@ static int dw_hdmi_poweron(struct dw_hdmi *hdmi, /* HDMI Initialization Step B.3 */ dw_hdmi_enable_video_path(hdmi); =20 - if (hdmi->sink_has_audio) { + if (display->has_audio) { dev_dbg(hdmi->dev, "sink has audio support\n"); =20 /* HDMI Initialization Step E - Configure audio */ @@ -2321,7 +2315,7 @@ static int dw_hdmi_poweron(struct dw_hdmi *hdmi, } =20 /* not for DVI mode */ - if (hdmi->sink_is_hdmi) { + if (display->is_hdmi) { dev_dbg(hdmi->dev, "%s HDMI mode\n", __func__); =20 /* HDMI Initialization Step F - Configure AVI InfoFrame */ @@ -2435,29 +2429,13 @@ static const struct drm_edid *dw_hdmi_edid_read(str= uct dw_hdmi *hdmi, struct drm_connector *connector) { const struct drm_edid *drm_edid; - const struct edid *edid; =20 if (!hdmi->ddc) return NULL; =20 drm_edid =3D drm_edid_read_ddc(connector, hdmi->ddc); - if (!drm_edid) { + if (!drm_edid) dev_dbg(hdmi->dev, "failed to get edid\n"); - return NULL; - } - - /* - * FIXME: This should use connector->display_info.is_hdmi and - * connector->display_info.has_audio from a path that has read the EDID - * and called drm_edid_connector_update(). - */ - edid =3D drm_edid_raw(drm_edid); - - dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n", - edid->width_cm, edid->height_cm); - - hdmi->sink_is_hdmi =3D drm_detect_hdmi_monitor(edid); - hdmi->sink_has_audio =3D drm_detect_monitor_audio(edid); =20 return drm_edid; } --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9DCE3E5EF5 for ; Mon, 4 May 2026 19:12:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921923; cv=none; b=PkSXCYZfi7J/ARc+/+uaUeOZXO8enCLEqunHd+TjeFrDrWo+howNIFYoTz6I9t0ZjRLnqbea3A7K8c7ifjnEhtFfvF4btOZaP0YkIc4RvgOrYD5NWocTL19XuKXtn1rJnIj2D3G5QY+Gw8m2VfopXf/Lqf6ueUQctP9rThDCyEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921923; c=relaxed/simple; bh=1YRu43BHV5Lw7Wuhp2YdE+au82tepqSY7maf5QpxlmQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z57jYMERqEvQpsa2fCaSxXI8OOUsS70NFOHkANhfqU+M2r6dR+pGJtk6iEfw5QlnqQdYVyW+dXBoRzxLeubZg2Jiu79FawzMKu+99QV28a67MoSYfR1GkXWK6DioIcij9eycCJzgzIk2Ebbsy8NJI31dMikSyF4d9uBMqqKCYG4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=bIXirS2z; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="bIXirS2z" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921920; bh=wPMBVFwRIRSbcXggzPj66q6ILg3rZ1uUdNpLeXq9w7g=; b=bIXirS2zeCA1rIHN+a2T54eg9gHgO8klGkj4IzFvhzSH6tyZZp2yPjkTimAuvSPpgZSwF2B35 YwH63QwxPJvTBzAIOmBbKroP+tigAuuFyCeCGLXhcE76c8B5b+M4yLYl7L1LKXRK7PBSZ0x7iBw /vzxkZYV4vZwIfndbQkyCqK1IqDDvktyG0QLD5zfpGffMV9SlIviOzE2+NZqMKIlmTEIldg/SJG 7TsPZponqkoll475YP5vUy1C5OwGg3FYNM7ZBTr+4BV7lRiV2jPgP5HlIZCi5BB6CDFIMYOsKn7 6vufjpd9Tzrzt4llnGg87BIE6EuZRmS5e+Vc/cBZklfA== X-Forward-Email-ID: 69f8ef7b04bb1dff846bb964 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 12/17] drm: bridge: dw_hdmi: Use generic CEC notifier helpers Date: Mon, 4 May 2026 19:10:49 +0000 Message-ID: <20260504191059.275928-13-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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 commit 8b1a8f8b2002 ("drm/display: add CEC helpers code") added generic CEC helpers to be used by HDMI drivers. Replace the open-coded CEC notifier handling with use of the generic CEC notifier helpers. Ensure DRM_DISPLAY_HDMI_CEC_NOTIFIER_HELPER is also selected when DRM_DW_HDMI_CEC is enabled so that the CEC helpers is available. Signed-off-by: Jonas Karlman --- v4: New patch --- drivers/gpu/drm/bridge/synopsys/Kconfig | 1 + drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 32 ++++------------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/Kconfig b/drivers/gpu/drm/brid= ge/synopsys/Kconfig index a46df7583bcf..e6723af03b43 100644 --- a/drivers/gpu/drm/bridge/synopsys/Kconfig +++ b/drivers/gpu/drm/bridge/synopsys/Kconfig @@ -49,6 +49,7 @@ config DRM_DW_HDMI_CEC depends on DRM_DW_HDMI select CEC_CORE select CEC_NOTIFIER + select DRM_DISPLAY_HDMI_CEC_NOTIFIER_HELPER help Support the CE interface which is part of the Synopsys Designware HDMI block. diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 4c712aa07a89..0aa29b92327e 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -23,12 +23,11 @@ #include #include =20 -#include - #include #include =20 #include +#include #include #include #include @@ -183,8 +182,6 @@ struct dw_hdmi { void (*enable_audio)(struct dw_hdmi *hdmi); void (*disable_audio)(struct dw_hdmi *hdmi); =20 - struct cec_notifier *cec_notifier; - hdmi_codec_plugged_cb plugged_cb; struct device *codec_dev; enum drm_connector_status last_connector_result; @@ -2453,7 +2450,7 @@ dw_hdmi_connector_status_update(struct drm_connector = *connector, =20 if (status =3D=3D connector_status_disconnected) { drm_edid_connector_update(connector, NULL); - cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); + drm_connector_cec_phys_addr_invalidate(connector); return; } =20 @@ -2462,8 +2459,7 @@ dw_hdmi_connector_status_update(struct drm_connector = *connector, drm_edid_free(drm_edid); =20 if (status =3D=3D connector_status_connected) - cec_notifier_set_phys_addr(hdmi->cec_notifier, - connector->display_info.source_physical_address); + drm_connector_cec_phys_addr_set(connector); } =20 static enum drm_connector_status @@ -2539,8 +2535,6 @@ static const struct drm_connector_helper_funcs dw_hdm= i_connector_helper_funcs =3D static int dw_hdmi_connector_create(struct dw_hdmi *hdmi) { struct drm_connector *connector =3D &hdmi->connector; - struct cec_connector_info conn_info; - struct cec_notifier *notifier; =20 if (hdmi->version >=3D 0x200a) connector->ycbcr_420_allowed =3D @@ -2571,15 +2565,8 @@ static int dw_hdmi_connector_create(struct dw_hdmi *= hdmi) =20 drm_connector_attach_encoder(connector, hdmi->bridge.encoder); =20 - cec_fill_conn_info_from_drm(&conn_info, connector); - - notifier =3D cec_notifier_conn_register(hdmi->dev, NULL, &conn_info); - if (!notifier) - return -ENOMEM; - - hdmi->cec_notifier =3D notifier; - - return 0; + return drmm_connector_hdmi_cec_notifier_register(connector, NULL, + hdmi->dev); } =20 /* -----------------------------------------------------------------------= ------ @@ -2887,14 +2874,6 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *= bridge, return dw_hdmi_connector_create(hdmi); } =20 -static void dw_hdmi_bridge_detach(struct drm_bridge *bridge) -{ - struct dw_hdmi *hdmi =3D bridge->driver_private; - - cec_notifier_conn_unregister(hdmi->cec_notifier); - hdmi->cec_notifier =3D NULL; -} - static enum drm_mode_status dw_hdmi_bridge_mode_valid(struct drm_bridge *bridge, const struct drm_display_info *info, @@ -2972,7 +2951,6 @@ static const struct drm_bridge_funcs dw_hdmi_bridge_f= uncs =3D { .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, .atomic_reset =3D drm_atomic_helper_bridge_reset, .attach =3D dw_hdmi_bridge_attach, - .detach =3D dw_hdmi_bridge_detach, .atomic_check =3D dw_hdmi_bridge_atomic_check, .atomic_get_output_bus_fmts =3D dw_hdmi_bridge_atomic_get_output_bus_fmts, .atomic_get_input_bus_fmts =3D dw_hdmi_bridge_atomic_get_input_bus_fmts, --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 118653FA5CE for ; Mon, 4 May 2026 19:12:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921928; cv=none; b=UtaXyi1fp3XyAXswNAqNlH1rTBpjRmNMfjOwrluHSi04OHSe501bpZJYAXup4GtGOPyXV0iZKIaNE/H2V4n9eMx76YORKNvu+WxfTsZ3Yy0tEmzbn/gi4M0LeA77wlMIVLOyG0aU9dedZMJH0yalZF578AvINSufnqtze6PRM98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921928; c=relaxed/simple; bh=x0VqNjDgMAx0NQishXOijMj7JPsPLQzxh7+zHOQ9Ppw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DTLnqBhHYTg/IQAyCQ2YeM3Ep/gVO+19U99Q31CKiOdt/wJr9mBCuBbzCAyRGKjVnSnRr/QJXa5yR00ej1ylf/HafzU5p5gCmDyLZLSZf6XtoZXgrUA4kYizPe7HVMEehP3p8iOqSh+sRjeB9pXuHdeJtW+GABhk8zMyK8IpXAU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=MYtoNOgL; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="MYtoNOgL" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921925; bh=Pky9kczMC+5Jgxszkenl0PmmnnhOhGsGHf/TrtDLxNk=; b=MYtoNOgL35lHBWUKnJ/h8l9cMK3ZDWLEY8V7Z+lBHgZZjDzatreCUKk9YetOX880IynzQsd6U Llq8ZEVGjsMxZAzao+2Ch9UDQL6nHAbvNRs9QysUjwdZlc8r6ATB9j8ELXrf8+cA5w2b7a7kesN urtzYYmVj8aY19jXEu+IMaNVRULL/Cg4ZNiQP/6st0a1J2jY2G/ptlfkZtlvZ3hB+MDNecB4L0F 6o4wqGfAbKv4Gm4NoopLbhmqvMXK0MNlUjJnlSbHhi7WbXLF0hozb4T0qTdfWqLrTVlvVIWDXHx 1znbgIuaZAhOnTqhHskoX3Ia4HmhQc1TQeunihhtuEdg== X-Forward-Email-ID: 69f8ef8004bb1dff846bb97f X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 13/17] drm: bridge: dw_hdmi: Use delayed_work to debounce hotplug event Date: Mon, 4 May 2026 19:10:50 +0000 Message-ID: <20260504191059.275928-14-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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" HDMI Specification Version 1.4b chapter 8.5 mentions: An HDMI Sink shall not assert high voltage level on its Hot Plug Detect pin when the E-EDID is not available for reading. A Source may use a high voltage level Hot Plug Detect signal to initiate the reading of E-EDID data. An HDMI Sink shall indicate any change to the contents of the E-EDID by driving a low voltage level pulse on the Hot Plug Detect pin. This pulse shall be at least 100 msec. Use a delayed work to debounce reacting on HPD events to better handle a HPD low voltage level pulse when a sink changes the EDID. The delayed work is only active between enable_hpd()/hpd_enable() and disable_hpd()/hpd_disable() calls from core, i.e. enabled after attach/bind/resume and disabled before detach/unbind/suspend. The 1100 msec hotplug debounce timeout was arbitrarily picked to match other drivers using same const, and testing using a Raspberry Pi Monitor seem to use a 200-300 msec pulse when going from standby to power on state. Signed-off-by: Jonas Karlman --- v4: Disable/mask delayed_work until enable_hpd()/hpd_enable(), Read connector status directly from HW regs in hpd_work v3: New patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 59 +++++++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 0aa29b92327e..193bdba65758 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -50,6 +50,8 @@ =20 #define HDMI14_MAX_TMDSCLK 340000000 =20 +#define HOTPLUG_DEBOUNCE_MS 1100 + static const u16 csc_coeff_default[3][4] =3D { { 0x2000, 0x0000, 0x0000, 0x0000 }, { 0x0000, 0x2000, 0x0000, 0x0000 }, @@ -185,6 +187,7 @@ struct dw_hdmi { hdmi_codec_plugged_cb plugged_cb; struct device *codec_dev; enum drm_connector_status last_connector_result; + struct delayed_work hpd_work; }; =20 const struct dw_hdmi_plat_data *dw_hdmi_to_plat_data(struct dw_hdmi *hdmi) @@ -2517,6 +2520,20 @@ static void dw_hdmi_connector_force(struct drm_conne= ctor *connector) dw_hdmi_connector_status_update(connector, connector->status); } =20 +static void dw_hdmi_connector_enable_hpd(struct drm_connector *connector) +{ + struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connecto= r); + + enable_delayed_work(&hdmi->hpd_work); +} + +static void dw_hdmi_connector_disable_hpd(struct drm_connector *connector) +{ + struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connecto= r); + + disable_delayed_work_sync(&hdmi->hpd_work); +} + static const struct drm_connector_funcs dw_hdmi_connector_funcs =3D { .fill_modes =3D drm_helper_probe_single_connector_modes, .detect =3D dw_hdmi_connector_detect, @@ -2530,6 +2547,8 @@ static const struct drm_connector_funcs dw_hdmi_conne= ctor_funcs =3D { static const struct drm_connector_helper_funcs dw_hdmi_connector_helper_fu= ncs =3D { .get_modes =3D dw_hdmi_connector_get_modes, .atomic_check =3D dw_hdmi_connector_atomic_check, + .enable_hpd =3D dw_hdmi_connector_enable_hpd, + .disable_hpd =3D dw_hdmi_connector_disable_hpd, }; =20 static int dw_hdmi_connector_create(struct dw_hdmi *hdmi) @@ -2946,6 +2965,20 @@ static const struct drm_edid *dw_hdmi_bridge_edid_re= ad(struct drm_bridge *bridge return dw_hdmi_edid_read(hdmi, connector); } =20 +static void dw_hdmi_bridge_hpd_enable(struct drm_bridge *bridge) +{ + struct dw_hdmi *hdmi =3D bridge->driver_private; + + enable_delayed_work(&hdmi->hpd_work); +} + +static void dw_hdmi_bridge_hpd_disable(struct drm_bridge *bridge) +{ + struct dw_hdmi *hdmi =3D bridge->driver_private; + + disable_delayed_work_sync(&hdmi->hpd_work); +} + static const struct drm_bridge_funcs dw_hdmi_bridge_funcs =3D { .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, @@ -2959,6 +2992,8 @@ static const struct drm_bridge_funcs dw_hdmi_bridge_f= uncs =3D { .mode_valid =3D dw_hdmi_bridge_mode_valid, .detect =3D dw_hdmi_bridge_detect, .edid_read =3D dw_hdmi_bridge_edid_read, + .hpd_enable =3D dw_hdmi_bridge_hpd_enable, + .hpd_disable =3D dw_hdmi_bridge_hpd_disable, }; =20 /* -----------------------------------------------------------------------= ------ @@ -3079,10 +3114,8 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) status =3D=3D connector_status_connected ? "plugin" : "plugout"); =20 - if (hdmi->bridge.dev) { - drm_helper_hpd_irq_event(hdmi->bridge.dev); - drm_bridge_hpd_notify(&hdmi->bridge, status); - } + mod_delayed_work(system_percpu_wq, &hdmi->hpd_work, + msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS)); } =20 hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0); @@ -3092,6 +3125,19 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) return IRQ_HANDLED; } =20 +static void dw_hdmi_hpd_work(struct work_struct *work) +{ + struct dw_hdmi *hdmi =3D container_of(work, struct dw_hdmi, hpd_work.work= ); + enum drm_connector_status status; + + if (WARN_ON(!hdmi->bridge.dev)) + return; + + drm_helper_hpd_irq_event(hdmi->bridge.dev); + status =3D dw_hdmi_phy_read_hpd(hdmi, hdmi->phy.data); + drm_bridge_hpd_notify(&hdmi->bridge, status); +} + static const struct dw_hdmi_phy_data dw_hdmi_phys[] =3D { { .type =3D DW_HDMI_PHY_DWC_HDMI_TX_PHY, @@ -3376,6 +3422,9 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device = *pdev, goto err_res; } =20 + INIT_DELAYED_WORK(&hdmi->hpd_work, dw_hdmi_hpd_work); + disable_delayed_work(&hdmi->hpd_work); + ret =3D devm_request_threaded_irq(dev, irq, dw_hdmi_hardirq, dw_hdmi_irq, IRQF_SHARED, dev_name(dev), hdmi); @@ -3508,6 +3557,8 @@ EXPORT_SYMBOL_GPL(dw_hdmi_probe); =20 void dw_hdmi_remove(struct dw_hdmi *hdmi) { + disable_delayed_work_sync(&hdmi->hpd_work); + drm_bridge_remove(&hdmi->bridge); =20 if (hdmi->audio && !IS_ERR(hdmi->audio)) --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 521193FA5DC for ; Mon, 4 May 2026 19:12:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921933; cv=none; b=KyF9kK6UMX49gNOwiyLH0sbNTiYQxmReySd9fdSrup8d4iax5QsrgTZXdaHfho9GonKgztNp9GopeNrvK2wR5DVc908v5i8SLEHaUm0YedPGyg+dzsR3r3F0KxTl1PDomj2GuL5TajYvZhwPyw4FH2RPqlupVpPflb0RuTBL788= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921933; c=relaxed/simple; bh=1xBN6NU9TSjsBls90K/Tb1GtZGXrNp9Zmmq8VSBqbWc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uVpfZSzsaJ0iJSdgAYYne4UNl57RS45jvi0LWifrFzIXppV62Jmj0CXLyla78eUpEFSmqGzwHNYXHLiATne2+mIreaJU/tzHasdgUXXHSOkyXy7ZscP/as9hnE2IybQjLsMYlZjd74AQl3Wn0qCLemDLDa0J7FZd+HE3ip4kkfQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=KSxcoMfY; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="KSxcoMfY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921930; bh=wW13CxFPQuTHXWEMa0cBo9HQ5job5QeaTt8E//Z6a/4=; b=KSxcoMfY48JY99LR+cxkQYkAB8wRj0LOpjfX9m/smyBbDV1w76J65X7zqHRDegwff+K5YAs/i f3M4FOIIyw1UewvaC1I3734rir9gDh8vfehIbR5Kr0V/sCZnNxtMKMrvqluwfFyCfzHm/LMHVS2 vgIU+syTGwBrxKxOgDgDjq05UwHZkj3uMs/PMqAYOZAzEiyf97ZAOLQ3njgg63z8Vl6AJxBh5/9 N1ZzN6HxRCey7oGGsYRpKThZ49SQt1aNN1bN1gnp66ijzlzafUMqULW6g6ZtZkx6yzP3tTEQife HL9ob9S8lJH4IolsTn7NCTeYTkxqUMbiJVg6I4EsrkVw== X-Forward-Email-ID: 69f8ef8404bb1dff846bb99a X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 14/17] drm: bridge: dw_hdmi: Rework HDP and RXSENSE interrupt handling Date: Mon, 4 May 2026 19:10:51 +0000 Message-ID: <20260504191059.275928-15-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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 commit aeac23bda87f ("drm: bridge/dw_hdmi: improve HDMI enable/disable handling") added use of PHY RXSENSE indications to avoid triggering a full enable/disable of the HDMI block when a sink use a HPD low voltage level pulse to indicate changes of the EDID. HDMI Specification Version 1.4b chapter 8.5 mentions: An HDMI Sink shall indicate any change to the contents of the E-EDID by driving a low voltage level pulse on the Hot Plug Detect pin. This pulse shall be at least 100 msec. A delayed work is now used to debounce reacting on a HPD low voltage level pulse when a sink changes the EDID. Remove RXSENSE handling to simplify the HPD interrupt handling and instead depend on the debounced HPD work to refresh EDID. This also ensures the initial HPD interrupt polarity is based on current HPD status to avoid an unnecessary interrupt from being triggered immediately at probe or resume when a sink is connected. Signed-off-by: Jonas Karlman --- v4: New patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 140 +++------------------- 1 file changed, 16 insertions(+), 124 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 193bdba65758..e3ebb0dfdaf2 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -161,11 +161,7 @@ struct dw_hdmi { struct pinctrl_state *unwedge_state; =20 struct mutex mutex; /* for state below */ - enum drm_connector_force force; /* mutex-protected force state */ struct drm_connector *curr_conn;/* current connector (only valid when !di= sabled) */ - bool disabled; /* DRM has disabled our bridge */ - bool rxsense; /* rxsense state */ - u8 phy_mask; /* desired phy int mask settings */ u8 mc_clkdis; /* clock disable register */ =20 spinlock_t audio_lock; @@ -196,14 +192,6 @@ const struct dw_hdmi_plat_data *dw_hdmi_to_plat_data(s= truct dw_hdmi *hdmi) } EXPORT_SYMBOL_GPL(dw_hdmi_to_plat_data); =20 -#define HDMI_IH_PHY_STAT0_RX_SENSE \ - (HDMI_IH_PHY_STAT0_RX_SENSE0 | HDMI_IH_PHY_STAT0_RX_SENSE1 | \ - HDMI_IH_PHY_STAT0_RX_SENSE2 | HDMI_IH_PHY_STAT0_RX_SENSE3) - -#define HDMI_PHY_RX_SENSE \ - (HDMI_PHY_RX_SENSE0 | HDMI_PHY_RX_SENSE1 | \ - HDMI_PHY_RX_SENSE2 | HDMI_PHY_RX_SENSE3) - static inline void hdmi_writeb(struct dw_hdmi *hdmi, u8 val, int offset) { regmap_write(hdmi->regm, offset << hdmi->reg_shift, val); @@ -1702,36 +1690,25 @@ EXPORT_SYMBOL_GPL(dw_hdmi_phy_read_hpd); void dw_hdmi_phy_update_hpd(struct dw_hdmi *hdmi, void *data, bool force, bool disabled, bool rxsense) { - u8 old_mask =3D hdmi->phy_mask; - - if (force || disabled || !rxsense) - hdmi->phy_mask |=3D HDMI_PHY_RX_SENSE; - else - hdmi->phy_mask &=3D ~HDMI_PHY_RX_SENSE; - - if (old_mask !=3D hdmi->phy_mask) - hdmi_writeb(hdmi, hdmi->phy_mask, HDMI_PHY_MASK0); } EXPORT_SYMBOL_GPL(dw_hdmi_phy_update_hpd); =20 void dw_hdmi_phy_setup_hpd(struct dw_hdmi *hdmi, void *data) { /* - * Configure the PHY RX SENSE and HPD interrupts polarities and clear - * any pending interrupt. + * Configure the PHY HPD interrupt polarity based on current HPD status + * and clear any pending interrupt. */ - hdmi_writeb(hdmi, HDMI_PHY_HPD | HDMI_PHY_RX_SENSE, HDMI_PHY_POL0); - hdmi_writeb(hdmi, HDMI_IH_PHY_STAT0_HPD | HDMI_IH_PHY_STAT0_RX_SENSE, - HDMI_IH_PHY_STAT0); + hdmi_modb(hdmi, hdmi_readb(hdmi, HDMI_PHY_STAT0) & HDMI_PHY_HPD ? + 0 : HDMI_PHY_HPD, HDMI_PHY_HPD, HDMI_PHY_POL0); + hdmi_writeb(hdmi, HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0); =20 /* Enable cable hot plug irq. */ - hdmi_writeb(hdmi, hdmi->phy_mask, HDMI_PHY_MASK0); + hdmi_writeb(hdmi, ~HDMI_PHY_HPD, HDMI_PHY_MASK0); =20 /* Clear and unmute interrupts. */ - hdmi_writeb(hdmi, HDMI_IH_PHY_STAT0_HPD | HDMI_IH_PHY_STAT0_RX_SENSE, - HDMI_IH_PHY_STAT0); - hdmi_writeb(hdmi, ~(HDMI_IH_PHY_STAT0_HPD | HDMI_IH_PHY_STAT0_RX_SENSE), - HDMI_IH_MUTE_PHY_STAT0); + hdmi_writeb(hdmi, HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0); + hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0); } EXPORT_SYMBOL_GPL(dw_hdmi_phy_setup_hpd); =20 @@ -2395,26 +2372,6 @@ static void dw_hdmi_poweroff(struct dw_hdmi *hdmi) } } =20 -/* - * Adjust the detection of RXSENSE according to whether we have a forced - * connection mode enabled, or whether we have been disabled. There is - * no point processing RXSENSE interrupts if we have a forced connection - * state, or DRM has us disabled. - * - * We also disable rxsense interrupts when we think we're disconnected - * to avoid floating TDMS signals giving false rxsense interrupts. - * - * Note: we still need to listen for HPD interrupts even when DRM has us - * disabled so that we can detect a connect event. - */ -static void dw_hdmi_update_phy_mask(struct dw_hdmi *hdmi) -{ - if (hdmi->phy.ops->update_hpd) - hdmi->phy.ops->update_hpd(hdmi, hdmi->phy.data, - hdmi->force, hdmi->disabled, - hdmi->rxsense); -} - static enum drm_connector_status dw_hdmi_detect(struct dw_hdmi *hdmi) { enum drm_connector_status result; @@ -2512,9 +2469,7 @@ static void dw_hdmi_connector_force(struct drm_connec= tor *connector) struct dw_hdmi *hdmi =3D container_of(connector, struct dw_hdmi, connecto= r); =20 mutex_lock(&hdmi->mutex); - hdmi->force =3D connector->force; hdmi->last_connector_result =3D connector->status; - dw_hdmi_update_phy_mask(hdmi); mutex_unlock(&hdmi->mutex); =20 dw_hdmi_connector_status_update(connector, connector->status); @@ -2919,10 +2874,8 @@ static void dw_hdmi_bridge_atomic_disable(struct drm= _bridge *bridge, struct dw_hdmi *hdmi =3D bridge->driver_private; =20 mutex_lock(&hdmi->mutex); - hdmi->disabled =3D true; hdmi->curr_conn =3D NULL; dw_hdmi_poweroff(hdmi); - dw_hdmi_update_phy_mask(hdmi); handle_plugged_change(hdmi, false); mutex_unlock(&hdmi->mutex); } @@ -2941,10 +2894,8 @@ static void dw_hdmi_bridge_atomic_enable(struct drm_= bridge *bridge, mode =3D &drm_atomic_get_new_crtc_state(state, crtc)->adjusted_mode; =20 mutex_lock(&hdmi->mutex); - hdmi->disabled =3D false; hdmi->curr_conn =3D connector; dw_hdmi_poweron(hdmi, connector, mode); - dw_hdmi_update_phy_mask(hdmi); handle_plugged_change(hdmi, true); mutex_unlock(&hdmi->mutex); } @@ -3038,78 +2989,23 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void *d= ev_id) =20 void dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, bool hpd, bool rx_sense) { - mutex_lock(&hdmi->mutex); - - if (!hdmi->force) { - /* - * If the RX sense status indicates we're disconnected, - * clear the software rxsense status. - */ - if (!rx_sense) - hdmi->rxsense =3D false; - - /* - * Only set the software rxsense status when both - * rxsense and hpd indicates we're connected. - * This avoids what seems to be bad behaviour in - * at least iMX6S versions of the phy. - */ - if (hpd) - hdmi->rxsense =3D true; - - dw_hdmi_update_phy_mask(hdmi); - } - mutex_unlock(&hdmi->mutex); } EXPORT_SYMBOL_GPL(dw_hdmi_setup_rx_sense); =20 static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) { struct dw_hdmi *hdmi =3D dev_id; - u8 intr_stat, phy_int_pol, phy_pol_mask, phy_stat; - enum drm_connector_status status =3D connector_status_unknown; + u8 intr_stat; =20 intr_stat =3D hdmi_readb(hdmi, HDMI_IH_PHY_STAT0); - phy_int_pol =3D hdmi_readb(hdmi, HDMI_PHY_POL0); - phy_stat =3D hdmi_readb(hdmi, HDMI_PHY_STAT0); - - phy_pol_mask =3D 0; - if (intr_stat & HDMI_IH_PHY_STAT0_HPD) - phy_pol_mask |=3D HDMI_PHY_HPD; - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE0) - phy_pol_mask |=3D HDMI_PHY_RX_SENSE0; - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE1) - phy_pol_mask |=3D HDMI_PHY_RX_SENSE1; - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE2) - phy_pol_mask |=3D HDMI_PHY_RX_SENSE2; - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE3) - phy_pol_mask |=3D HDMI_PHY_RX_SENSE3; - - if (phy_pol_mask) - hdmi_modb(hdmi, ~phy_int_pol, phy_pol_mask, HDMI_PHY_POL0); + if (intr_stat & HDMI_IH_PHY_STAT0_HPD) { + enum drm_connector_status status; =20 - /* - * RX sense tells us whether the TDMS transmitters are detecting - * load - in other words, there's something listening on the - * other end of the link. Use this to decide whether we should - * power on the phy as HPD may be toggled by the sink to merely - * ask the source to re-read the EDID. - */ - if (intr_stat & - (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) { - dw_hdmi_setup_rx_sense(hdmi, - phy_stat & HDMI_PHY_HPD, - phy_stat & HDMI_PHY_RX_SENSE); - - if ((intr_stat & HDMI_IH_PHY_STAT0_HPD) && - (phy_stat & HDMI_PHY_HPD)) - status =3D connector_status_connected; - - if (!(phy_stat & (HDMI_PHY_HPD | HDMI_PHY_RX_SENSE))) - status =3D connector_status_disconnected; - } + /* Set HPD interrupt polarity based on current HPD status. */ + status =3D dw_hdmi_phy_read_hpd(hdmi, hdmi->phy.data); + hdmi_modb(hdmi, status =3D=3D connector_status_connected ? + 0 : HDMI_PHY_HPD, HDMI_PHY_HPD, HDMI_PHY_POL0); =20 - if (status !=3D connector_status_unknown) { dev_dbg(hdmi->dev, "EVENT=3D%s\n", status =3D=3D connector_status_connected ? "plugin" : "plugout"); @@ -3119,8 +3015,7 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) } =20 hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0); - hdmi_writeb(hdmi, ~(HDMI_IH_PHY_STAT0_HPD | HDMI_IH_PHY_STAT0_RX_SENSE), - HDMI_IH_MUTE_PHY_STAT0); + hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0); =20 return IRQ_HANDLED; } @@ -3311,9 +3206,6 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device = *pdev, hdmi->dev =3D dev; hdmi->sample_rate =3D 48000; hdmi->channels =3D 2; - hdmi->disabled =3D true; - hdmi->rxsense =3D true; - hdmi->phy_mask =3D (u8)~(HDMI_PHY_HPD | HDMI_PHY_RX_SENSE); hdmi->mc_clkdis =3D 0x7f; hdmi->last_connector_result =3D connector_status_disconnected; =20 --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B83C3FADED for ; Mon, 4 May 2026 19:12:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921937; cv=none; b=a3TUGiFpzp2zVxmE+MAH2WP2jBve30lxJv17kWhY+67fnFOvknssTyihgv3gg3P7+tllMSl/lsgNzGwJ3F4d1DPYELWJKMf14dJ+Tp01NEiExcN8UkA9kacaHFBOP1UDq6tvijsRG3RZr+VIqaKmgVS/wrbMQIaf//0X8CD78kI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921937; c=relaxed/simple; bh=b/5PcggcM4nbh1Pjm5Tvhn2aNgkOGOq09BFP0acg/Fk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F6dKC/3XRqIQ4ZZ6/8Rt/Mbr7aCfSw9dr8CH9Q7UEUmhSZPvPwKu6AlNpbMpwE5bMabuPVyqiU+5uLX0V7W5KlI+dV4Swju+9dHJRpCyHeCpqZilzjLW1c4VwlPyuYCNRDU5A497XwOKbNnb576cxSO3wEiESQDJE8KResPh1sQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=MzLJlkP9; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="MzLJlkP9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921935; bh=gfAI0HScuKYPNHChmXTZDG5R10CcJ6qrZZTzTYJKqao=; b=MzLJlkP9Eo9qA7SZpznxebX5xd78HQnLotPA0baeTP30Z2tJB2xFD5DFEo63fahUFoznGkltx Gj5sOBx9G10dexi61giipvlD36XKgKDKdAGCWn8I6RPK55flPsOAQSBeX+WaLPFjV7fSxLZTm73 3slXBO0P27JB9oLE9ranS8dNo7Z8g/73z7znD+U+NWAXyR3uqp77CYKUZj4wG6cLB4y2Tltdfnu Ig7BvwxZaUi59gbbn09uUcZ54i+/NIQIjUO9uSH8X4G/5/3WEloSOKFSidTQGvbhq2BUxDYh9Ax 0HHRbhO0RwaIWJsUIcfMunvbEijkEw52erkhTiOPULWA== X-Forward-Email-ID: 69f8ef8804bb1dff846bb9ca X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Kevin Hilman , Jerome Brunet , Martin Blumenstingl Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 15/17] drm: bridge: dw_hdmi: Remove the empty dw_hdmi_setup_rx_sense() Date: Mon, 4 May 2026 19:10:52 +0000 Message-ID: <20260504191059.275928-16-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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 dw_hdmi_setup_rx_sense() helper is empty and no longer needed after recent RXSENSE and HPD rework, remove it. Signed-off-by: Jonas Karlman --- v4: New patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 5 ----- drivers/gpu/drm/meson/meson_dw_hdmi.c | 3 --- include/drm/bridge/dw_hdmi.h | 2 -- 3 files changed, 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index e3ebb0dfdaf2..60b887249eba 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2987,11 +2987,6 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void *de= v_id) return ret; } =20 -void dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, bool hpd, bool rx_sense) -{ -} -EXPORT_SYMBOL_GPL(dw_hdmi_setup_rx_sense); - static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) { struct dw_hdmi *hdmi =3D dev_id; diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index fef1702acb14..2a8756da569b 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -524,9 +524,6 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, void= *dev_id) if (stat & HDMITX_TOP_INTR_HPD_RISE) hpd_connected =3D true; =20 - dw_hdmi_setup_rx_sense(dw_hdmi->hdmi, hpd_connected, - hpd_connected); - drm_helper_hpd_irq_event(dw_hdmi->bridge->dev); drm_bridge_hpd_notify(dw_hdmi->bridge, hpd_connected ? connector_status_connected diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h index 8500dd4f99d8..a612b9fa6dbb 100644 --- a/include/drm/bridge/dw_hdmi.h +++ b/include/drm/bridge/dw_hdmi.h @@ -186,8 +186,6 @@ struct dw_hdmi *dw_hdmi_bind(struct platform_device *pd= ev, =20 void dw_hdmi_resume(struct dw_hdmi *hdmi); =20 -void dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, bool hpd, bool rx_sense); - int dw_hdmi_set_plugged_cb(struct dw_hdmi *hdmi, hdmi_codec_plugged_cb fn, struct device *codec_dev); void dw_hdmi_set_sample_non_pcm(struct dw_hdmi *hdmi, unsigned int non_pcm= ); --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 006F33F2111 for ; Mon, 4 May 2026 19:12:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921945; cv=none; b=gQNMtxaYpRnKSHsaZCQrSMP8GBmJrNUn4YpAt2K3rGnN01gpsxXya5ZKOHdg4eo/3VSHlyoHcsWejTxJSnDwJS6+Ko/Kz6iGDK63CHSBG0N6zz9UcTaET/yGXUBtd09ZV8/Hv03QtgrhGt+EFpsBhObjxhvF5v+VvtoJncgm/vg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921945; c=relaxed/simple; bh=75QgP3RBSWyvbK1r/mEMVuEFJv5FbDJ270Hp1Nk4Ce4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IgMOaoqbNddHPrBdTDPIdxYfvtgKnvCmYNl53VqLSaF3FcKdwMOu+DW1p71d9VunTmoZBIetZtiue0zUGknmFhlhB65u3XveS+fvGIZEqvvFgMhG6BSiqx7REHFPnOELmowUdUXT4fW3S5l3cve6CRdBrBbWskjEFhbSAlh+1iE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=0nU7DrVm; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="0nU7DrVm" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921943; bh=Y+1StOusjSb1aRabYMvL/79aSphsLY0CpDZ9HI5qZek=; b=0nU7DrVmwFDKPqu/iGbkuQewB97sbVjM7nn6WCUB47ygzAUFWQGD7XJkaz6OJNUan2fRcfiS1 A9qZSVxipi0mio/f3kb1IhMzTcLwqUJt/Lh6cswCS6iZ6WehDCcLOYEMshMrGntVY5/IttaW04I M14Jii3nr/4rHMLTobjd+3PBZYAXfHDulz+zEFr7XMcJfbjFwkLp3oGExFTq7WgyAUavWD8YF2b uBVnUPQUWfffJNW7R+df6LZGW3PZEUekTwd8enVIsmdfIMUzYDo9iyGTMIWUthFbE6KJLOuVXDm Onpm/C7PhVOPZfdlH120bAGH42A2W1WLEl0Ll/Xm5FIw== X-Forward-Email-ID: 69f8ef8d04bb1dff846bb9e7 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Liu Ying , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Sandy Huang , Andy Yan , Chen-Yu Tsai , Samuel Holland Cc: Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 16/17] drm: bridge: dw_hdmi: Remove the empty dw_hdmi_phy_update_hpd() Date: Mon, 4 May 2026 19:10:53 +0000 Message-ID: <20260504191059.275928-17-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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 dw_hdmi_phy_update_hpd() helper is empty and no longer needed after recent RXSENSE and HPD rework, remove it. Signed-off-by: Jonas Karlman --- v4: New patch --- drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c | 1 - drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 7 ------- drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 2 -- drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c | 2 -- include/drm/bridge/dw_hdmi.h | 4 ---- 5 files changed, 16 deletions(-) diff --git a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c b/drivers/gpu/drm/= bridge/imx/imx8mp-hdmi-tx.c index 8e8cfd66f23b..20d389dbfdc5 100644 --- a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c +++ b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c @@ -78,7 +78,6 @@ static const struct dw_hdmi_phy_ops imx8mp_hdmi_phy_ops = =3D { .disable =3D imx8mp_hdmi_phy_disable, .setup_hpd =3D im8mp_hdmi_phy_setup_hpd, .read_hpd =3D dw_hdmi_phy_read_hpd, - .update_hpd =3D dw_hdmi_phy_update_hpd, }; =20 static int imx8mp_dw_hdmi_bind(struct device *dev) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 60b887249eba..c0ed067154c7 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -1687,12 +1687,6 @@ enum drm_connector_status dw_hdmi_phy_read_hpd(struc= t dw_hdmi *hdmi, } EXPORT_SYMBOL_GPL(dw_hdmi_phy_read_hpd); =20 -void dw_hdmi_phy_update_hpd(struct dw_hdmi *hdmi, void *data, - bool force, bool disabled, bool rxsense) -{ -} -EXPORT_SYMBOL_GPL(dw_hdmi_phy_update_hpd); - void dw_hdmi_phy_setup_hpd(struct dw_hdmi *hdmi, void *data) { /* @@ -1716,7 +1710,6 @@ static const struct dw_hdmi_phy_ops dw_hdmi_synopsys_= phy_ops =3D { .init =3D dw_hdmi_phy_init, .disable =3D dw_hdmi_phy_disable, .read_hpd =3D dw_hdmi_phy_read_hpd, - .update_hpd =3D dw_hdmi_phy_update_hpd, .setup_hpd =3D dw_hdmi_phy_setup_hpd, }; =20 diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/= rockchip/dw_hdmi-rockchip.c index 0dc1eb5d2ae3..7136e713df2e 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -413,7 +413,6 @@ static const struct dw_hdmi_phy_ops rk3228_hdmi_phy_ops= =3D { .init =3D dw_hdmi_rockchip_genphy_init, .disable =3D dw_hdmi_rockchip_genphy_disable, .read_hpd =3D dw_hdmi_phy_read_hpd, - .update_hpd =3D dw_hdmi_phy_update_hpd, .setup_hpd =3D dw_hdmi_rk3228_setup_hpd, }; =20 @@ -449,7 +448,6 @@ static const struct dw_hdmi_phy_ops rk3328_hdmi_phy_ops= =3D { .init =3D dw_hdmi_rockchip_genphy_init, .disable =3D dw_hdmi_rockchip_genphy_disable, .read_hpd =3D dw_hdmi_rk3328_read_hpd, - .update_hpd =3D dw_hdmi_phy_update_hpd, .setup_hpd =3D dw_hdmi_rk3328_setup_hpd, }; =20 diff --git a/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c b/drivers/gpu/drm/sun4i= /sun8i_hdmi_phy.c index 4fa69c463dc4..2ac99b8ce8c4 100644 --- a/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c +++ b/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c @@ -221,7 +221,6 @@ static const struct dw_hdmi_phy_ops sun8i_a83t_hdmi_phy= _ops =3D { .init =3D sun8i_a83t_hdmi_phy_config, .disable =3D sun8i_a83t_hdmi_phy_disable, .read_hpd =3D dw_hdmi_phy_read_hpd, - .update_hpd =3D dw_hdmi_phy_update_hpd, .setup_hpd =3D dw_hdmi_phy_setup_hpd, }; =20 @@ -395,7 +394,6 @@ static const struct dw_hdmi_phy_ops sun8i_h3_hdmi_phy_o= ps =3D { .init =3D sun8i_h3_hdmi_phy_config, .disable =3D sun8i_h3_hdmi_phy_disable, .read_hpd =3D dw_hdmi_phy_read_hpd, - .update_hpd =3D dw_hdmi_phy_update_hpd, .setup_hpd =3D dw_hdmi_phy_setup_hpd, }; =20 diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h index a612b9fa6dbb..10013b8d3adb 100644 --- a/include/drm/bridge/dw_hdmi.h +++ b/include/drm/bridge/dw_hdmi.h @@ -118,8 +118,6 @@ struct dw_hdmi_phy_ops { const struct drm_display_mode *mode); void (*disable)(struct dw_hdmi *hdmi, void *data); enum drm_connector_status (*read_hpd)(struct dw_hdmi *hdmi, void *data); - void (*update_hpd)(struct dw_hdmi *hdmi, void *data, - bool force, bool disabled, bool rxsense); void (*setup_hpd)(struct dw_hdmi *hdmi, void *data); }; =20 @@ -213,8 +211,6 @@ void dw_hdmi_phy_gen2_reset(struct dw_hdmi *hdmi); =20 enum drm_connector_status dw_hdmi_phy_read_hpd(struct dw_hdmi *hdmi, void *data); -void dw_hdmi_phy_update_hpd(struct dw_hdmi *hdmi, void *data, - bool force, bool disabled, bool rxsense); void dw_hdmi_phy_setup_hpd(struct dw_hdmi *hdmi, void *data); =20 bool dw_hdmi_bus_fmt_is_420(struct dw_hdmi *hdmi); --=20 2.54.0 From nobody Sun Jun 14 01:35:34 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 25ACE3EFD25 for ; Mon, 4 May 2026 19:12:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921943; cv=none; b=noL65Nw4JIBw8H0dPH4v3Kqor55KmZcgvwRiOwg+YBDPWhQsnF/VbLtGGexShS8DsxbvmR7fLA1IG3MPYGMHZ55mVMSBkWA1tRkk6Hk6SR1yKlbFjuIobwjvwgdKBRYa/ojBizbvkJXf6SVNUrW5TCdoZX+A5gFGki+oZsJv2nc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777921943; c=relaxed/simple; bh=dKlNkl6BbsNbiX7EONwecyjQ6pKSh8XZfCupXxVIiW4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C5pv7QnBiW9jg8vABCtePk+7EeyW14KtaFvA5ybMyL41KDi+M2hSO8S7zCD01Bn3zqywiJ61mM+uEwhSOWXzhCumz0DWtU4hTGH3N6ACamyUv6zx+ykTt+DsTliDJmWdhqv3cv/xJipfF2TiUMBupQs5LkNse0f3CUxmcWxIMBo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=ghEQ3Vh9; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="ghEQ3Vh9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1777921940; bh=qxYOBVl4LCfBulQcyEr5FKsY3yyCVbMO03DTb8QuT/M=; b=ghEQ3Vh9T3Q+J9VfZsEoTHryGGQ++pfAxSYrqS1izljafaCMXxDonSlljOFxEBi51v7kv7Fev Ej0RG5olbxPlvazHWPVeO/s0Uo7QoCfQ+3hutYNIRZnhlntHt0RiwW/R3LQARmIAsxXZNzvcEJP MaGbn//A+EaFjwxE/4hUnziX1OWBCM+BFyrDQG4pcy8qYgp9abiSJMYAzDC+VZSLtRArPDaLd/q hC0bRFmujnrp62r/fUY+Sew3Np37TWb+zLxL/bGXAg2d/jbZ4P3TiMnCeGybHxJCYzo2DxqQaqL MdNnj5lmaiFNXXllBJswDtsRR9LEF42kqS9CY9f+813Q== X-Forward-Email-ID: 69f8ef9104bb1dff846bba02 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.7.7 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Andrzej Hajda , Neil Armstrong , Robert Foss , Heiko Stuebner , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Liu Ying , Sandy Huang , Andy Yan , Chen-Yu Tsai , Christian Hewitt , Diederik de Haas , Nicolas Frattaroli , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev, imx@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v4 17/17] drm: bridge: dw_hdmi: Merge top and bottom half IRQ handlers Date: Mon, 4 May 2026 19:10:54 +0000 Message-ID: <20260504191059.275928-18-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se> References: <20260504191059.275928-1-jonas@kwiboo.se> 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 bottom half IRQ handler only modify delay of or queue a delayed work used for HPD handling. The mod_delayed_work() called is documented as being safe to call from any context including IRQ handler. Merge top and bottom half IRQ handlers to simplify IRQ handling now that HPD event is handled using a delayed work. Signed-off-by: Jonas Karlman --- v4: New patch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 32 +++++++---------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index c0ed067154c7..a42c45ff0ade 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2971,24 +2971,12 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void *d= ev_id) if (hdmi->i2c) ret =3D dw_hdmi_i2c_irq(hdmi); =20 - intr_stat =3D hdmi_readb(hdmi, HDMI_IH_PHY_STAT0); + intr_stat =3D hdmi_readb(hdmi, HDMI_IH_PHY_STAT0) & HDMI_IH_PHY_STAT0_HPD; if (intr_stat) { - hdmi_writeb(hdmi, ~0, HDMI_IH_MUTE_PHY_STAT0); - return IRQ_WAKE_THREAD; - } - - return ret; -} - -static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) -{ - struct dw_hdmi *hdmi =3D dev_id; - u8 intr_stat; - - intr_stat =3D hdmi_readb(hdmi, HDMI_IH_PHY_STAT0); - if (intr_stat & HDMI_IH_PHY_STAT0_HPD) { enum drm_connector_status status; =20 + hdmi_writeb(hdmi, ~0, HDMI_IH_MUTE_PHY_STAT0); + /* Set HPD interrupt polarity based on current HPD status. */ status =3D dw_hdmi_phy_read_hpd(hdmi, hdmi->phy.data); hdmi_modb(hdmi, status =3D=3D connector_status_connected ? @@ -3000,12 +2988,13 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_i= d) =20 mod_delayed_work(system_percpu_wq, &hdmi->hpd_work, msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS)); - } =20 - hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0); - hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0); + hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0); + hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0); + ret =3D IRQ_HANDLED; + } =20 - return IRQ_HANDLED; + return ret; } =20 static void dw_hdmi_hpd_work(struct work_struct *work) @@ -3305,9 +3294,8 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device = *pdev, INIT_DELAYED_WORK(&hdmi->hpd_work, dw_hdmi_hpd_work); disable_delayed_work(&hdmi->hpd_work); =20 - ret =3D devm_request_threaded_irq(dev, irq, dw_hdmi_hardirq, - dw_hdmi_irq, IRQF_SHARED, - dev_name(dev), hdmi); + ret =3D devm_request_irq(dev, irq, dw_hdmi_hardirq, IRQF_SHARED, + dev_name(dev), hdmi); if (ret) goto err_res; =20 --=20 2.54.0