From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=basealt.ru; s=dkim; t=1784009715; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MJU3UlMuI9TpiGIPQLGdcWpha9V2o0+tMg3xMV6nkGg=; b=eI2da9A5DOK683wIyOlG/XAtLxDOJOJb4STMo1GhYkhFzM8nRVmtC090bYpTcZjho4kK7E rC78u4v8Aj04erdrhsvGttbVaFrNkxjkYH+LDTPD/ElIxfQqdmtO4LCeV4S6zAZCyDv3ex VSe49TRROXTHRUU86eEuAVNLLlZyYKL7pXJXNoXfLb0k7fTHDSyrZOW4xuaVvueKls86Bq FjTYAmCNOhw2FdC8HYhNOXD9hYCEIMphuSSw9Xe9fnNV/nq++qdTMkgxZeBpfR1AoME4dc ws02wVgX/zi9NnM6Mu/AAtP/ginqGnJVBKky9qj6rEiYmP0zIN9ahLHs17SDUw== From: Daniil Gnusarev To: gnusarevda@basealt.ru, devel-kernel@lists.altlinux.org Date: Tue, 14 Jul 2026 10:15:02 +0400 Message-ID: <20260714061503.170801-2-gnusarevda@basealt.ru> X-Mailer: git-send-email 2.42.2 In-Reply-To: <20260714061503.170801-1-gnusarevda@basealt.ru> References: <20260714061503.170801-1-gnusarevda@basealt.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [d-kernel] [PATCH 1/1] drm: rockchip: dwhdmiqp-rockchip: attach next bridge to the HDMI bridge X-BeenThere: devel-kernel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux kernel packages development List-Id: ALT Linux kernel packages development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2026 06:15:21 -0000 Archived-At: List-Archive: List-Post: For embedded systems, additional bridges may be connected after the HDMI bridge being created. To ensure full functionality, they must be added to the DRM bridge chain. Signed-off-by: Daniil Gnusarev --- .../gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c index 409f1a1e82a061..9485d85a16f35c 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -430,6 +430,8 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master, struct drm_connector *connector; struct drm_encoder *encoder; struct rockchip_hdmi_qp *hdmi; + struct drm_bridge *hdmi_bridge; + struct drm_bridge *next_bridge; struct resource *res; struct clk_bulk_data *clks; int ret, irq, i; @@ -441,6 +443,11 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master, if (!hdmi) return -ENOMEM; + next_bridge = NULL; + ret = drm_of_find_panel_or_bridge(pdev->dev.of_node, 1, 0, NULL, &next_bridge); + if (ret && ret != -ENODEV) + return ret; + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -ENODEV; @@ -556,6 +563,21 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master, return ret; } + if (next_bridge) { + hdmi_bridge = drm_bridge_chain_get_last_bridge(encoder); + if (hdmi_bridge) + ret = drm_bridge_attach(encoder, next_bridge, hdmi_bridge, + DRM_BRIDGE_ATTACH_NO_CONNECTOR); + else + ret = -ENODEV; + if (hdmi_bridge) + drm_bridge_put(hdmi_bridge); + if (ret) { + dev_err(hdmi->dev, "failed to attach next bridge: %d\n", ret); + return ret; + } + } + connector = drm_bridge_connector_init(drm, encoder); if (IS_ERR(connector)) { ret = PTR_ERR(connector); -- 2.42.2