From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pidgin.makrotopia.org (pidgin.makrotopia.org [185.142.180.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 051882C11FA for ; Wed, 15 Apr 2026 15:04:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.142.180.65 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776265468; cv=none; b=ElDhskMtHcVVGat3UgLefeWQjCJvEWVgpQ4g7/CN0KEEh+tsxO+eDk7nplJlvBU0eIODyi5wZGNrfk47kTv8rOx0SXm6uURWenHBYML+WnmX2NSqGxkEBm5jhWpTFCnjcMG7yT1bWOcf4ZjNSZwbl/FMI8/mRUn+uVzhRcUL8Rk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776265468; c=relaxed/simple; bh=nyFF/704R4ljIedG8+GH7lL5zeOhFnQY+w978h1iCVY=; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=s3GLYdq2R8jWYmtODxs2e36owKvW7F8nzY2g/+ps5WINh1ETruJbcG+iTNbWy2a+es46NiBuNlRe0qhr5ieBPFvl7S/h6GCSV79ho6soKNe+47KwZbQAAQOiAJa3raQx5k8RAoQ4rLjnnEeg/IqKtUE15e5ANELpvNznA6P2300= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=makrotopia.org; spf=pass smtp.mailfrom=makrotopia.org; arc=none smtp.client-ip=185.142.180.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=makrotopia.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=makrotopia.org Received: from local by pidgin.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.99) (envelope-from ) id 1wD1mk-000000002Nj-3q51; Wed, 15 Apr 2026 15:04:11 +0000 Date: Wed, 15 Apr 2026 16:04:08 +0100 From: Daniel Golle To: Chun-Kuang Hu , Philipp Zabel , David Airlie , Simona Vetter , Matthias Brugger , AngeloGioacchino Del Regno , Junzhi Zhao , Jie Qiu , dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/2] drm/mediatek: hdmi: pulse audio clocks on bridge enable Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline The CLK_MM_HDMI_AUDIO and CLK_MM_HDMI_SPDIF mmsys gates feed the HDMI TX internal audio measurement block which derives CTS values for the ACR packets embedded in the TMDS stream. These clocks are enabled once at driver probe time and then left untouched across bridge atomic_enable / atomic_disable cycles. On every observed stale-state event -- a blank/unblank cycle, or a cold boot with the monitor off followed by a later hotplug -- the measurement block remains armed against the previous state and fails to latch a valid CTS on the subsequent bridge enable. Video recovers cleanly but the audio data islands never regain lock and the HDMI sink sees no audio, even though the ASoC stack, the AFE, and the HDMI TX audio packetizer are all programmed correctly. Debugging the issue of audio no longer working after vblank it was found that an unbind+bind of the mediatek-drm-hdmi platform driver recovers audio in all such scenarios without disturbing video. The only audio-relevant side effect of that rebind is an off->on edge on CLK_MM_HDMI_AUDIO / CLK_MM_HDMI_SPDIF via the probe path. Pulsing those two clocks directly at the end of mtk_hdmi_bridge_atomic_enable reproduces that recovery on every enable and doesn't hurt on the first enable after boot. Fixes: 8f83f26891e1 ("drm/mediatek: Add HDMI support") Signed-off-by: Daniel Golle --- drivers/gpu/drm/mediatek/mtk_hdmi.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index 1ea2598547800..9050d7785f109 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -1065,6 +1065,22 @@ static void mtk_hdmi_bridge_atomic_enable(struct drm_bridge *bridge, phy_power_on(hdmi->phy); mtk_hdmi_send_infoframe(hdmi, &hdmi->mode); + /* + * Pulse the HDMI TX audio clocks off/on on every bridge enable. + * The CLK_MM_HDMI_AUDIO and CLK_MM_HDMI_SPDIF mmsys gates feed + * the HDMI TX internal audio measurement block that derives CTS + * for the ACR packets embedded in the TMDS stream. Without an + * off->on edge at bridge enable the block can stay armed against + * stale state from a previous enable (e.g. after blank/unblank, + * or after a monitor that was off at boot is plugged in later) + * and fails to latch a valid CTS, leaving the audio path silent + * even though video recovers. The pulse is what an unbind+bind + * of the HDMI platform driver effectively does, and it recovers + * audio in all observed stale-state scenarios. + */ + mtk_hdmi_clk_disable_audio(hdmi); + mtk_hdmi_clk_enable_audio(hdmi); + hdmi->enabled = true; } -- 2.53.0