From nobody Sun Feb 8 20:53:09 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 B7C5338551E for ; Thu, 29 Jan 2026 12:13:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688827; cv=none; b=rFhjt6cv8FTGPp+3bFripqhmUMwdRNcN4BONjFIAZzA3qWxGp9iNTBhiJhMZ7EC5OFiHFVUp9v8ZTXrR8EwoWRdB3uLGoNrMAFtQxl0eFIRuZa260wC+KOmqLS3pkEXaFqpCBBEGtsHdxmRR2MWBEXxr7GdPJDzC9k6fJm3TYm8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688827; c=relaxed/simple; bh=xdhkekPo3kh19syYUuARxRHdMgZBVsCYB5XBYgJUQpk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cdNOzBe35g4e1sVsZ8TnPHXqNnIdNdSbtnn+y4A5GWat2/gB7LaVIl2j+XQ440fiBhzIkIP8Tv/XMf24tm5t0g9/xk1FlvIldOnVjqUQuWSGar+lnkWFYgQvlGiXSU+l4WGvNrbW0k6kc/PkauQY6gm1S+FZR1ECcs6w0Gm9Ca8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=V+zMPHJg; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="V+zMPHJg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1769688817; bh=xdhkekPo3kh19syYUuARxRHdMgZBVsCYB5XBYgJUQpk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=V+zMPHJg+jKRTTIkPwBQSQjzQb2QiYWk4tTQ5P38cjFNCgYSrg1y8xPWyu6nPj3EZ VDgXuyPIOHAEjocygwLSjv0cTKRLub5a4BGfb/lnwZ9kqlYyAznOxzvj7oEGS4Z7kp F38kQLDVCOHRo61Jic2Ma0iihHwcSOypUfOLGfusOE3/QiEI74087fhOlnYfwVVi0j RVX3EMqOqheA1EK9VNh5NamVNSk6UNJfSTPODJxkUVQ9YbV4h1AbQSwuUUjwv6R9GA Ozbo5Rnl5tA5pZfe2gsgD0mjtVToBkJf1HUmLUrC/04qfCs2oX37KHBL1UKg9Ndj1C T149mAkPgGNFg== Received: from localhost (unknown [82.79.138.145]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id AA8D717E1305; Thu, 29 Jan 2026 13:13:37 +0100 (CET) From: Cristian Ciocaltea Date: Thu, 29 Jan 2026 14:13:32 +0200 Subject: [PATCH v2 1/5] drm/bridge: dw-hdmi-qp: Provide HDMI Vendor Specific InfoFrame Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260129-dw-hdmi-qp-iframe-v2-1-0157ad05232c@collabora.com> References: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> In-Reply-To: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: kernel@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 Since commit b626b1a1c9cc ("drm/bridge: refactor HDMI InfoFrame callbacks"), the following warning is generated: [ 13.654149] rockchip-drm display-subsystem: [drm] HDMI VSI not support= ed Add the missing support for sending HDMI Vendor-Specific Infoframes. Additionally, introduce dw_hdmi_qp_write_{pkt|infoframe}() helpers, as a prerequisite to rework all dw_hdmi_qp_bridge_write_*_infoframe() callbacks and get rid of some boilerplate code. Signed-off-by: Cristian Ciocaltea Reviewed-by: Daniel Stone Reviewed-by: Maxime Ripard --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 39 ++++++++++++++++++++++++= +--- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h | 2 ++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index 036316e2b60d..93aae1d8027d 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -969,9 +970,9 @@ static int dw_hdmi_qp_bridge_clear_avi_infoframe(struct= drm_bridge *bridge) =20 static int dw_hdmi_qp_bridge_clear_hdmi_infoframe(struct drm_bridge *bridg= e) { - /* FIXME: add support for this InfoFrame */ + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; =20 - drm_warn_once(bridge->encoder->dev, "HDMI VSI not supported\n"); + dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_VSI_TX_EN, PKTSCHED_PKT_EN); =20 return 0; } @@ -998,6 +999,32 @@ static int dw_hdmi_qp_bridge_clear_audio_infoframe(str= uct drm_bridge *bridge) return 0; } =20 +static void dw_hdmi_qp_write_pkt(struct dw_hdmi_qp *hdmi, const u8 *buffer, + size_t start, size_t len, unsigned int reg) +{ + u32 val =3D 0; + size_t i; + + for (i =3D start; i < start + len; i++) + val |=3D buffer[i] << ((i % 4) * BITS_PER_BYTE); + + dw_hdmi_qp_write(hdmi, val, reg); +} + +static void dw_hdmi_qp_write_infoframe(struct dw_hdmi_qp *hdmi, const u8 *= buffer, + size_t len, unsigned int reg) +{ + size_t i; + + /* InfoFrame packet header */ + dw_hdmi_qp_write_pkt(hdmi, buffer, 1, 2, reg); + + /* InfoFrame packet body */ + for (i =3D 0; i < len - 3; i +=3D 4) + dw_hdmi_qp_write_pkt(hdmi, buffer + 3, i, min(len - i - 3, 4), + reg + i + 4); +} + static int dw_hdmi_qp_bridge_write_avi_infoframe(struct drm_bridge *bridge, const u8 *buffer, size_t len) { @@ -1011,9 +1038,15 @@ static int dw_hdmi_qp_bridge_write_avi_infoframe(str= uct drm_bridge *bridge, static int dw_hdmi_qp_bridge_write_hdmi_infoframe(struct drm_bridge *bridg= e, const u8 *buffer, size_t len) { + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; + dw_hdmi_qp_bridge_clear_hdmi_infoframe(bridge); =20 - /* FIXME: add support for the HDMI VSI */ + dw_hdmi_qp_write_infoframe(hdmi, buffer, len, PKT_VSI_CONTENTS0); + + dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_VSI_FIELDRATE, PKTSCHED_PKT_CONFIG1); + dw_hdmi_qp_mod(hdmi, PKTSCHED_VSI_TX_EN, PKTSCHED_VSI_TX_EN, + PKTSCHED_PKT_EN); =20 return 0; } diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.h index 91a15f82e32a..53688eae8dba 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h @@ -198,6 +198,7 @@ #define PKTSCHED_PRQUEUE2_CONFIG2 0xa94 #define PKTSCHED_PKT_CONFIG0 0xa98 #define PKTSCHED_PKT_CONFIG1 0xa9c +#define PKTSCHED_VSI_FIELDRATE BIT(14) #define PKTSCHED_DRMI_FIELDRATE BIT(13) #define PKTSCHED_AVI_FIELDRATE BIT(12) #define PKTSCHED_PKT_CONFIG2 0xaa0 @@ -206,6 +207,7 @@ #define PKTSCHED_DRMI_TX_EN BIT(17) #define PKTSCHED_AUDI_TX_EN BIT(15) #define PKTSCHED_AVI_TX_EN BIT(13) +#define PKTSCHED_VSI_TX_EN BIT(12) #define PKTSCHED_EMP_CVTEM_TX_EN BIT(10) #define PKTSCHED_AMD_TX_EN BIT(8) #define PKTSCHED_GCP_TX_EN BIT(3) --=20 2.52.0 From nobody Sun Feb 8 20:53:09 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 D412C3876D0 for ; Thu, 29 Jan 2026 12:13:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688828; cv=none; b=Djk+Sr27SJhMjHaxCoYNYCpW9XKhYOeVAeREDrUOFt9l8Ur2gdLvpjIpXu6i1UHzTCmfdvXUxblZvF87N+6nk6d3ggsrSl7S54Ed2V4sq9tNR3i1U9FxHAEoVm8IIiPOtuEMWVk3GS+2pbm5FB1sZQk15RtJw1W1kFsgi4VEfLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688828; c=relaxed/simple; bh=CkYCK0ambzV2M40asUP/JCQI0LSIbtb/Y1xiLgH0/NA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tSB2b504ndWPopXrvPNSlJxHB0h1W68oUI0TzPcbUTxiJTS7lq48WNNfNXwV/Or1CPFzQh07qDLdsadeu4jkwztjR/gPdqqHb2kGBIp378aOxcMP1FY1AnJKYj9lqjKbzNhKo2tzo8dDbbofiV0PCsa/aRWntVczPn3L8JFzCu0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Qy8pwISy; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Qy8pwISy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1769688818; bh=CkYCK0ambzV2M40asUP/JCQI0LSIbtb/Y1xiLgH0/NA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Qy8pwISyj2DPV2AcaLhbcxjXkY59g8RBtsinGBTVgJpgUtWFUuH4Rnjp+nXudKMD1 8jG706xKCbO2zuOPF0A89iIwn8FUHbZ3YWCMG6H59LB6otpQCS0sQkhW1dICu8j3Bj 9M/kqIkQ2M6/h9+i3YSl5Yxpp1qyUal/6hv00XTyIqinZ0mkrfuShx+clHyKJ8JcN1 w/K+XEXkLC50NWC/GY1Ax4a4CQYz3yDJ/yph3pkxfRrQEX1Vq1ttzB+VX7TMynSXYM Tuxxm/5K+Re6QrUhUYxV37qzoWjJpTAfDaDVD8+qCD4eSqkS3TxKKSyiWm1hPLRis8 pKrNm+FI70dBQ== Received: from localhost (unknown [82.79.138.145]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 7E20017E13C5; Thu, 29 Jan 2026 13:13:38 +0100 (CET) From: Cristian Ciocaltea Date: Thu, 29 Jan 2026 14:13:33 +0200 Subject: [PATCH v2 2/5] drm/bridge: dw-hdmi-qp: Provide SPD InfoFrame Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260129-dw-hdmi-qp-iframe-v2-2-0157ad05232c@collabora.com> References: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> In-Reply-To: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: kernel@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 The hardware is capable of sending Source Product Description (SPD) InfoFrames, hence enable the missing support. Signed-off-by: Cristian Ciocaltea Reviewed-by: Daniel Stone Reviewed-by: Maxime Ripard --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 29 ++++++++++++++++++++++++= +++- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index 93aae1d8027d..c006939a0f87 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -986,6 +986,15 @@ static int dw_hdmi_qp_bridge_clear_hdr_drm_infoframe(s= truct drm_bridge *bridge) return 0; } =20 +static int dw_hdmi_qp_bridge_clear_spd_infoframe(struct drm_bridge *bridge) +{ + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; + + dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_SPDI_TX_EN, PKTSCHED_PKT_EN); + + return 0; +} + static int dw_hdmi_qp_bridge_clear_audio_infoframe(struct drm_bridge *brid= ge) { struct dw_hdmi_qp *hdmi =3D bridge->driver_private; @@ -1061,6 +1070,21 @@ static int dw_hdmi_qp_bridge_write_hdr_drm_infoframe= (struct drm_bridge *bridge, return dw_hdmi_qp_config_drm_infoframe(hdmi, buffer, len); } =20 +static int dw_hdmi_qp_bridge_write_spd_infoframe(struct drm_bridge *bridge, + const u8 *buffer, size_t len) +{ + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; + + dw_hdmi_qp_bridge_clear_spd_infoframe(bridge); + + dw_hdmi_qp_write_infoframe(hdmi, buffer, len, PKT_SPDI_CONTENTS0); + + dw_hdmi_qp_mod(hdmi, PKTSCHED_SPDI_TX_EN, PKTSCHED_SPDI_TX_EN, + PKTSCHED_PKT_EN); + + return 0; +} + static int dw_hdmi_qp_bridge_write_audio_infoframe(struct drm_bridge *brid= ge, const u8 *buffer, size_t len) { @@ -1259,6 +1283,8 @@ static const struct drm_bridge_funcs dw_hdmi_qp_bridg= e_funcs =3D { .hdmi_write_hdmi_infoframe =3D dw_hdmi_qp_bridge_write_hdmi_infoframe, .hdmi_clear_hdr_drm_infoframe =3D dw_hdmi_qp_bridge_clear_hdr_drm_infofra= me, .hdmi_write_hdr_drm_infoframe =3D dw_hdmi_qp_bridge_write_hdr_drm_infofra= me, + .hdmi_clear_spd_infoframe =3D dw_hdmi_qp_bridge_clear_spd_infoframe, + .hdmi_write_spd_infoframe =3D dw_hdmi_qp_bridge_write_spd_infoframe, .hdmi_clear_audio_infoframe =3D dw_hdmi_qp_bridge_clear_audio_infoframe, .hdmi_write_audio_infoframe =3D dw_hdmi_qp_bridge_write_audio_infoframe, .hdmi_audio_startup =3D dw_hdmi_qp_audio_enable, @@ -1375,7 +1401,8 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_de= vice *pdev, DRM_BRIDGE_OP_EDID | DRM_BRIDGE_OP_HDMI | DRM_BRIDGE_OP_HDMI_AUDIO | - DRM_BRIDGE_OP_HDMI_HDR_DRM_INFOFRAME; + DRM_BRIDGE_OP_HDMI_HDR_DRM_INFOFRAME | + DRM_BRIDGE_OP_HDMI_SPD_INFOFRAME; if (!hdmi->no_hpd) hdmi->bridge.ops |=3D DRM_BRIDGE_OP_HPD; hdmi->bridge.of_node =3D pdev->dev.of_node; diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.h index 53688eae8dba..c07847e8d7dd 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h @@ -206,6 +206,7 @@ #define PKTSCHED_PKT_EN 0xaa8 #define PKTSCHED_DRMI_TX_EN BIT(17) #define PKTSCHED_AUDI_TX_EN BIT(15) +#define PKTSCHED_SPDI_TX_EN BIT(14) #define PKTSCHED_AVI_TX_EN BIT(13) #define PKTSCHED_VSI_TX_EN BIT(12) #define PKTSCHED_EMP_CVTEM_TX_EN BIT(10) --=20 2.52.0 From nobody Sun Feb 8 20:53:09 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 5681C3876DC for ; Thu, 29 Jan 2026 12:13:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688828; cv=none; b=rwgd3P8BBHrP8DRapp+2kurPLxVlu4ThgNB6gewH5VmMdOzMgFMZW15OclD3On15bOJuZpyZit7bm+2eOKk5yWim16sl8P2PhY7N/KmCcJMYyRsuATZAG76Gth564XYNWSFK7OCSwqO28bXmXIFAtKqdaUQ3Eul0mFUTb3pFKns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688828; c=relaxed/simple; bh=P/Sm7GjE1nvAjNucuQIDX7Zjc+ux74akiKeAHYyhoRY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i5eLxtfqTImsHD4XaACNTUrpzQWY0FX2uXy6tOncAiBeZ9toYAUQe+cQcVy5KYiQlKN9CDap84CRPRk3txhft8oaiAv/fTZiZJPniyfRDWG4iSIDSwl9vHHCyLbLM9htwTMyVNsIlo7d18GfXii9AsLMa7TRohIFLZ48dSyw6w8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=SrC7j+Yj; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="SrC7j+Yj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1769688819; bh=P/Sm7GjE1nvAjNucuQIDX7Zjc+ux74akiKeAHYyhoRY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SrC7j+Yj5gS12FdPNTHMHTAiJY2jqucBrUPY6xMffBhaqnzh0X90BrL0RMhvOwEkM dKs+S6AOWK/AjZ8ioMMzPnA22c7d0g5UZqs0nVzmxo4Fv5jNM6BsQHEt6cxKfHUi7P N/yzqXhuQdkQmYZi5NRXrysFFLx3Jc/oPnXuyEwD74Y0+snIOhDZlhjzPZEbrtbJ0h DqOC8+gfKTLwGkc+oWB3tGksyeWqU7MkEWWNX1eEF7NyZ1HnpvboizmsbEvpMD4X2v eb94S933Nh27P4/OZzEQFHVcrG8mUbgG+ViKYvRg1F4f0NZSHF0ccrtXXAagHq1/ND KTU97gjUiVBtQ== Received: from localhost (unknown [82.79.138.145]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 5F1F217E1418; Thu, 29 Jan 2026 13:13:39 +0100 (CET) From: Cristian Ciocaltea Date: Thu, 29 Jan 2026 14:13:34 +0200 Subject: [PATCH v2 3/5] drm/bridge: dw-hdmi-qp: Rework AVI InfoFrame handler Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260129-dw-hdmi-qp-iframe-v2-3-0157ad05232c@collabora.com> References: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> In-Reply-To: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: kernel@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 Make use of the recently introduced dw_hdmi_qp_write_infoframe() helper to simplify the writing of the Auxiliary Video InfoFrame (AVI) packet header and body registers. Moreover, since now having dedicated callbacks per InfoFrame type, move the implementation to dw_hdmi_qp_bridge_write_avi_infoframe() and drop dw_hdmi_qp_config_avi_infoframe(). While at it, also discard the superfluous infoframe size verification. Signed-off-by: Cristian Ciocaltea Reviewed-by: Daniel Stone Reviewed-by: Maxime Ripard --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 45 +++++-------------------= ---- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index c006939a0f87..abfe5641158f 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -748,43 +748,6 @@ static struct i2c_adapter *dw_hdmi_qp_i2c_adapter(stru= ct dw_hdmi_qp *hdmi) return adap; } =20 -static int dw_hdmi_qp_config_avi_infoframe(struct dw_hdmi_qp *hdmi, - const u8 *buffer, size_t len) -{ - u32 val, i, j; - - if (len !=3D HDMI_INFOFRAME_SIZE(AVI)) { - dev_err(hdmi->dev, "failed to configure avi infoframe\n"); - return -EINVAL; - } - - /* - * DW HDMI QP IP uses a different byte format from standard AVI info - * frames, though generally the bits are in the correct bytes. - */ - val =3D buffer[1] << 8 | buffer[2] << 16; - dw_hdmi_qp_write(hdmi, val, PKT_AVI_CONTENTS0); - - for (i =3D 0; i < 4; i++) { - for (j =3D 0; j < 4; j++) { - if (i * 4 + j >=3D 14) - break; - if (!j) - val =3D buffer[i * 4 + j + 3]; - val |=3D buffer[i * 4 + j + 3] << (8 * j); - } - - dw_hdmi_qp_write(hdmi, val, PKT_AVI_CONTENTS1 + i * 4); - } - - dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_AVI_FIELDRATE, PKTSCHED_PKT_CONFIG1); - - dw_hdmi_qp_mod(hdmi, PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN, - PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN, PKTSCHED_PKT_EN); - - return 0; -} - static int dw_hdmi_qp_config_drm_infoframe(struct dw_hdmi_qp *hdmi, const u8 *buffer, size_t len) { @@ -1041,7 +1004,13 @@ static int dw_hdmi_qp_bridge_write_avi_infoframe(str= uct drm_bridge *bridge, =20 dw_hdmi_qp_bridge_clear_avi_infoframe(bridge); =20 - return dw_hdmi_qp_config_avi_infoframe(hdmi, buffer, len); + dw_hdmi_qp_write_infoframe(hdmi, buffer, len, PKT_AVI_CONTENTS0); + + dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_AVI_FIELDRATE, PKTSCHED_PKT_CONFIG1); + dw_hdmi_qp_mod(hdmi, PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN, + PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN, PKTSCHED_PKT_EN); + + return 0; } =20 static int dw_hdmi_qp_bridge_write_hdmi_infoframe(struct drm_bridge *bridg= e, --=20 2.52.0 From nobody Sun Feb 8 20:53:09 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 568A33876DD for ; Thu, 29 Jan 2026 12:13:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688828; cv=none; b=ukz7mxT7ZL9Jn2EH/uIjht5HLdk0HGw1zLXJp02FClB3Yzi2KRfqr8mof7ASEJyqHWUuIVjY0AEromzSOC9sf2ZjGmt1CC3u+4GlSR7ggylMvezSVaKTHSvsfQtHf1P8ejOSKS1FZk4XEyZU987RBrJREngitVOvPPyQgwnH+qs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688828; c=relaxed/simple; bh=tABGDG5Z5ICTGCam4XV/umuPl2h3XtN1aIU88xjL14s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R1jXThqPQDens0u+dgaFtDiFdMNM3U+F4pyz2AoefytPpyEGErqrMKAewBbho7dvPXMj3jRZXUDOY4NkI0aV6J5Ux+0YN1bhf9L2S86gzZfd/L60GvZr9ZQVWu5VU8mx/Yi5k//rNOZAUaZajiITh54FAS3IW7i7Ve5vwFQ4R9Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=MioptNh5; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="MioptNh5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1769688820; bh=tABGDG5Z5ICTGCam4XV/umuPl2h3XtN1aIU88xjL14s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MioptNh5/wujC3TVfl2QOaNL1ZK70TPYTXN9qWJ7RrAXJR9hUM4k1pGWLefxcjWjb fgiwlB6YD3ZX6gTrTzc4S4Z3kOEsXAqFZdLN6oLlAePnNmbg/Es6iywPXyy8WV4Jn5 RTcR6I6bCE43kRi4Dt53/6ZFzO+soGYbskRkJoCEBZHMeMANFEoJ83TqzSn44qpA0c BQF4RgDfdCK6So59yYhdlIy0sOtpQnvooLxYkOmFHa02rR3iFT4SfB7yuBYVjkrvDf IXf7RX1rmUdqJtAHEA1e38Bj0rDLI4SGWkW7Wq6jMcE7tToMc8FjUnV/w718ZsUGUp KYP81tXz2D8xw== Received: from localhost (unknown [82.79.138.145]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 3CEF117E14F2; Thu, 29 Jan 2026 13:13:40 +0100 (CET) From: Cristian Ciocaltea Date: Thu, 29 Jan 2026 14:13:35 +0200 Subject: [PATCH v2 4/5] drm/bridge: dw-hdmi-qp: Rework DRM InfoFrame handler Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260129-dw-hdmi-qp-iframe-v2-4-0157ad05232c@collabora.com> References: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> In-Reply-To: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: kernel@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 Make use of the recently introduced dw_hdmi_qp_write_infoframe() helper to simplify the writing of the Dynamic Range and Mastering (DRM) InfoFrame packet header and body registers. Moreover, since now having dedicated callbacks per InfoFrame type, move the implementation to dw_hdmi_qp_bridge_write_hdr_drm_infoframe() and drop dw_hdmi_qp_config_drm_infoframe(). While at it, also discard the unnecessary infoframe size verification, as well as the redundant disabling of the packet transmission (already done by the explicit call to the clear callback). Signed-off-by: Cristian Ciocaltea Reviewed-by: Daniel Stone Reviewed-by: Maxime Ripard --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 40 +++++-------------------= ---- 1 file changed, 7 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index abfe5641158f..33c990e198e9 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -748,38 +748,6 @@ static struct i2c_adapter *dw_hdmi_qp_i2c_adapter(stru= ct dw_hdmi_qp *hdmi) return adap; } =20 -static int dw_hdmi_qp_config_drm_infoframe(struct dw_hdmi_qp *hdmi, - const u8 *buffer, size_t len) -{ - u32 val, i; - - if (len !=3D HDMI_INFOFRAME_SIZE(DRM)) { - dev_err(hdmi->dev, "failed to configure drm infoframe\n"); - return -EINVAL; - } - - dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_DRMI_TX_EN, PKTSCHED_PKT_EN); - - val =3D buffer[1] << 8 | buffer[2] << 16; - dw_hdmi_qp_write(hdmi, val, PKT_DRMI_CONTENTS0); - - for (i =3D 0; i <=3D buffer[2]; i++) { - if (i % 4 =3D=3D 0) - val =3D buffer[3 + i]; - val |=3D buffer[3 + i] << ((i % 4) * 8); - - if ((i % 4 =3D=3D 3) || i =3D=3D buffer[2]) - dw_hdmi_qp_write(hdmi, val, - PKT_DRMI_CONTENTS1 + ((i / 4) * 4)); - } - - dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_DRMI_FIELDRATE, PKTSCHED_PKT_CONFIG1); - dw_hdmi_qp_mod(hdmi, PKTSCHED_DRMI_TX_EN, PKTSCHED_DRMI_TX_EN, - PKTSCHED_PKT_EN); - - return 0; -} - /* * Static values documented in the TRM * Different values are only used for debug purposes @@ -1036,7 +1004,13 @@ static int dw_hdmi_qp_bridge_write_hdr_drm_infoframe= (struct drm_bridge *bridge, =20 dw_hdmi_qp_bridge_clear_hdr_drm_infoframe(bridge); =20 - return dw_hdmi_qp_config_drm_infoframe(hdmi, buffer, len); + dw_hdmi_qp_write_infoframe(hdmi, buffer, len, PKT_DRMI_CONTENTS0); + + dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_DRMI_FIELDRATE, PKTSCHED_PKT_CONFIG1); + dw_hdmi_qp_mod(hdmi, PKTSCHED_DRMI_TX_EN, PKTSCHED_DRMI_TX_EN, + PKTSCHED_PKT_EN); + + return 0; } =20 static int dw_hdmi_qp_bridge_write_spd_infoframe(struct drm_bridge *bridge, --=20 2.52.0 From nobody Sun Feb 8 20:53:09 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 A5502388847 for ; Thu, 29 Jan 2026 12:13:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688829; cv=none; b=oog6tTKY2NOeb+UF+95/z9XVK6BP9AFH6mI8QZW11Q42JSpZQaDgYMBaQ9bvWzv7G/Cfzs0G7rVG+vAsWXrBDWKUsdyINQwxMtu5fEi2OwT4NlLbb8frJEA58TOcAA1j+n7EVXGS7r0sTDXiTEsrKB2hkLGPIuC8bnPMZJt/fe4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769688829; c=relaxed/simple; bh=Y5cnz7/7Nno5HroZNG8LyxA6SXEx7p9n08HM8mkOWf0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Yo138v6+NBgEZPPm81W5FyC5Z6PsOcS9M0XjLFzfNgGobz5keoeamyqqG7XqWsrYTXCQkemznrLG8qjDuSboVSH6wzdwQQX8Ip19ouEJQZ0YSI4uZ06v+4fSms4pCVeHDxBBb7uB6gnISDhZku3UPUVRly5XU6JOLB59Jao/bAE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=HRQSns4J; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="HRQSns4J" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1769688821; bh=Y5cnz7/7Nno5HroZNG8LyxA6SXEx7p9n08HM8mkOWf0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HRQSns4JwKpSX88bs8nSt9oOm0RUHr2NNqNV25EXsoSf85EfLW9p7jk/0okJw2Xvy B3Z28H1Mi5cj0pqAjkMnRElb+Uwm0dEliGjwR2ly+IiL63hc00aixXBKPmzm8Uhoje mUcN+5WcFCyVAJqsysUxeed0A5dT+F/0jtO41F3wIwaCF3a659vxHERM5Wt74n7Mb9 37Xca7SfNWQ6UE+xbc7R/6AC8QhJjELn0LYZsi6QC+5AQNlJkoyYl+jz4eQ3Hl16iT FdLDIo9m3NtpkZTbWCiI6FD6svxuCQASEzUuCemxF62YPJ18qbKhofd4D+2fSQ2lvT miLzTJ97yS6SQ== Received: from localhost (unknown [82.79.138.145]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 1892517E14F5; Thu, 29 Jan 2026 13:13:41 +0100 (CET) From: Cristian Ciocaltea Date: Thu, 29 Jan 2026 14:13:36 +0200 Subject: [PATCH v2 5/5] drm/bridge: dw-hdmi-qp: Rework Audio InfoFrame handler Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260129-dw-hdmi-qp-iframe-v2-5-0157ad05232c@collabora.com> References: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> In-Reply-To: <20260129-dw-hdmi-qp-iframe-v2-0-0157ad05232c@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: kernel@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 Make use of the recently introduced dw_hdmi_qp_write_infoframe() helper to simplify the writing of the Audio InfoFrame packet header and body registers. Additionally, discard the redundant static values identifying the frame version and length. Moreover, since now having dedicated callbacks per InfoFrame type, move the implementation to dw_hdmi_qp_bridge_write_audio_infoframe() and drop dw_hdmi_qp_config_audio_infoframe(). Signed-off-by: Cristian Ciocaltea Reviewed-by: Daniel Stone Reviewed-by: Maxime Ripard --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 71 ++++++++++--------------= ---- 1 file changed, 25 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index 33c990e198e9..464ace1221d0 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -748,51 +748,6 @@ static struct i2c_adapter *dw_hdmi_qp_i2c_adapter(stru= ct dw_hdmi_qp *hdmi) return adap; } =20 -/* - * Static values documented in the TRM - * Different values are only used for debug purposes - */ -#define DW_HDMI_QP_AUDIO_INFOFRAME_HB1 0x1 -#define DW_HDMI_QP_AUDIO_INFOFRAME_HB2 0xa - -static int dw_hdmi_qp_config_audio_infoframe(struct dw_hdmi_qp *hdmi, - const u8 *buffer, size_t len) -{ - /* - * AUDI_CONTENTS0: { RSV, HB2, HB1, RSV } - * AUDI_CONTENTS1: { PB3, PB2, PB1, PB0 } - * AUDI_CONTENTS2: { PB7, PB6, PB5, PB4 } - * - * PB0: CheckSum - * PB1: | CT3 | CT2 | CT1 | CT0 | F13 | CC2 | CC1 | CC0 | - * PB2: | F27 | F26 | F25 | SF2 | SF1 | SF0 | SS1 | SS0 | - * PB3: | F37 | F36 | F35 | F34 | F33 | F32 | F31 | F30 | - * PB4: | CA7 | CA6 | CA5 | CA4 | CA3 | CA2 | CA1 | CA0 | - * PB5: | DM_INH | LSV3 | LSV2 | LSV1 | LSV0 | F52 | F51 | F50 | - * PB6~PB10: Reserved - * - * AUDI_CONTENTS0 default value defined by HDMI specification, - * and shall only be changed for debug purposes. - */ - u32 header_bytes =3D (DW_HDMI_QP_AUDIO_INFOFRAME_HB1 << 8) | - (DW_HDMI_QP_AUDIO_INFOFRAME_HB2 << 16); - - regmap_bulk_write(hdmi->regm, PKT_AUDI_CONTENTS0, &header_bytes, 1); - regmap_bulk_write(hdmi->regm, PKT_AUDI_CONTENTS1, &buffer[3], 1); - regmap_bulk_write(hdmi->regm, PKT_AUDI_CONTENTS2, &buffer[4], 1); - - /* Enable ACR, AUDI, AMD */ - dw_hdmi_qp_mod(hdmi, - PKTSCHED_ACR_TX_EN | PKTSCHED_AUDI_TX_EN | PKTSCHED_AMD_TX_EN, - PKTSCHED_ACR_TX_EN | PKTSCHED_AUDI_TX_EN | PKTSCHED_AMD_TX_EN, - PKTSCHED_PKT_EN); - - /* Enable AUDS */ - dw_hdmi_qp_mod(hdmi, PKTSCHED_AUDS_TX_EN, PKTSCHED_AUDS_TX_EN, PKTSCHED_P= KT_EN); - - return 0; -} - static void dw_hdmi_qp_bridge_atomic_enable(struct drm_bridge *bridge, struct drm_atomic_state *state) { @@ -1035,7 +990,31 @@ static int dw_hdmi_qp_bridge_write_audio_infoframe(st= ruct drm_bridge *bridge, =20 dw_hdmi_qp_bridge_clear_audio_infoframe(bridge); =20 - return dw_hdmi_qp_config_audio_infoframe(hdmi, buffer, len); + /* + * AUDI_CONTENTS0: { RSV, HB2, HB1, RSV } + * AUDI_CONTENTS1: { PB3, PB2, PB1, PB0 } + * AUDI_CONTENTS2: { PB7, PB6, PB5, PB4 } + * + * PB0: CheckSum + * PB1: | CT3 | CT2 | CT1 | CT0 | F13 | CC2 | CC1 | CC0 | + * PB2: | F27 | F26 | F25 | SF2 | SF1 | SF0 | SS1 | SS0 | + * PB3: | F37 | F36 | F35 | F34 | F33 | F32 | F31 | F30 | + * PB4: | CA7 | CA6 | CA5 | CA4 | CA3 | CA2 | CA1 | CA0 | + * PB5: | DM_INH | LSV3 | LSV2 | LSV1 | LSV0 | F52 | F51 | F50 | + * PB6~PB10: Reserved + */ + dw_hdmi_qp_write_infoframe(hdmi, buffer, len, PKT_AUDI_CONTENTS0); + + /* Enable ACR, AUDI, AMD */ + dw_hdmi_qp_mod(hdmi, + PKTSCHED_ACR_TX_EN | PKTSCHED_AUDI_TX_EN | PKTSCHED_AMD_TX_EN, + PKTSCHED_ACR_TX_EN | PKTSCHED_AUDI_TX_EN | PKTSCHED_AMD_TX_EN, + PKTSCHED_PKT_EN); + + /* Enable AUDS */ + dw_hdmi_qp_mod(hdmi, PKTSCHED_AUDS_TX_EN, PKTSCHED_AUDS_TX_EN, PKTSCHED_P= KT_EN); + + return 0; } =20 #ifdef CONFIG_DRM_DW_HDMI_QP_CEC --=20 2.52.0