From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F71FC4332F for ; Wed, 5 Oct 2022 15:13:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230232AbiJEPN0 (ORCPT ); Wed, 5 Oct 2022 11:13:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230152AbiJEPNZ (ORCPT ); Wed, 5 Oct 2022 11:13:25 -0400 Received: from mail-io1-xd2d.google.com (mail-io1-xd2d.google.com [IPv6:2607:f8b0:4864:20::d2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EAE326E2E6 for ; Wed, 5 Oct 2022 08:13:23 -0700 (PDT) Received: by mail-io1-xd2d.google.com with SMTP id y189so11203495iof.5 for ; Wed, 05 Oct 2022 08:13:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oZKBZ/Poq4qIDgukJ06pdFkyQHbBE5/VJ3pRiELlmgY=; b=CycY5tvqQX7XlhnNAyQclQ9wN9sBRLKSHjUaZ+2ZIdR47bIf/4sh6oAm0Boem+mxED NwOLrgJEPJ40HVe7uRW5mKdquNOOzm6RBT8u/zYY475ZvWdtNgCp9qIcl0pRk9AJCSEd ZPNC8GOeWscs9RfZyYlOKWnYRfkd4iN779dKU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oZKBZ/Poq4qIDgukJ06pdFkyQHbBE5/VJ3pRiELlmgY=; b=a8pWy6MRlgDg5+/bSBYiE54noXToe5ibE8LKmqOsi3c6FK20ekaJyjuh6ImqqTEJV+ zkXBOZp6j3BMYoCEXQtIo/IHITtyom2QlM044zrgnZ3G6s42RmhrSNNmbEaMYP3D3e+G K86wSDxApjnk9w5+y31TKUUZHGOZ8o6xVLPWWtWHoxoP7RzKAYwa1a3oOLSYjHSsBbsd 2yiMVaEAgXCXwL+25kgmqYBxrDGlv3E0dkZa+YULtMs7vpfkebn2A+naP7SFw2y/ZB6c gxwpzOjfdG3TArzRxieVcKd96awt7MIm+MqatyoF0AXNcPOZrV0FLB3Iq7xQhOuL9g1W uwCQ== X-Gm-Message-State: ACrzQf06qn7R4FdNTpP6lD905EWjeyTY3Bu2UQq4k1ZCl/Xp1CIMJ6ve doWpOaY2wIrXT2qaNJHv7Sfw1g== X-Google-Smtp-Source: AMsMyM7+6E9CcbOMePBdcd4NW1DHDNKXHeuu0sWSYmYK93I3b4G0DhEsd2CVNuB3ZL4DZZuGofKtpg== X-Received: by 2002:a02:9f88:0:b0:362:74f6:6215 with SMTP id a8-20020a029f88000000b0036274f66215mr67503jam.2.1664982803307; Wed, 05 Oct 2022 08:13:23 -0700 (PDT) Received: from j-ThinkPad-E14-Gen-2.stthomas.edu ([140.209.96.21]) by smtp.gmail.com with ESMTPSA id w15-20020a056602034f00b0068a235db030sm7089276iou.27.2022.10.05.08.13.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Oct 2022 08:13:22 -0700 (PDT) From: Jagan Teki To: Andrzej Hajda , Inki Dae , Marek Szyprowski , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Frieder Schrempf , Fancy Fang , Tim Harvey , Michael Nazzareno Trimarchi , Adam Ford , Neil Armstrong , Robert Foss , Laurent Pinchart , Tommaso Merciai , Marek Vasut Cc: Matteo Lisi , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, NXP Linux Team , linux-amarula , Jagan Teki Subject: [PATCH v7 02/10] drm: bridge: samsung-dsim: Lookup OF-graph or Child node devices Date: Wed, 5 Oct 2022 20:43:01 +0530 Message-Id: <20221005151309.7278-3-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221005151309.7278-1-jagan@amarulasolutions.com> References: <20221005151309.7278-1-jagan@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org The child devices in MIPI DSI can be binding with OF-graph and also via child nodes. The OF-graph interface represents the child devices via remote and associated endpoint numbers like dsi { compatible = "fsl,imx8mm-mipi-dsim"; ports { port@0 { reg = <0>; dsi_in_lcdif: endpoint@0 { reg = <0>; remote-endpoint = <&lcdif_out_dsi>; }; }; port@1 { reg = <1>; dsi_out_bridge: endpoint { remote-endpoint = <&bridge_in_dsi>; }; }; }; The child node interface represents the child devices via conventional child nodes on given DSI parent like dsi { compatible = "samsung,exynos5433-mipi-dsi"; ports { port@0 { reg = <0>; dsi_to_mic: endpoint { remote-endpoint = <&mic_to_dsi>; }; }; }; panel@0 { reg = <0>; }; }; As Samsung DSIM bridge is common DSI IP across all Exynos DSI and NXP i.MX8M host controllers, this patch adds support to lookup the child devices whether its bindings on the associated host represent OF-graph or child node interfaces. v7, v6, v5, v4, v3: * none v2: * new patch Signed-off-by: Jagan Teki --- drivers/gpu/drm/bridge/samsung-dsim.c | 38 +++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c index 07563d00a420..c34c6abac815 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1356,18 +1356,52 @@ static int samsung_dsim_host_attach(struct mipi_dsi_host *host, struct samsung_dsim *dsi = host_to_dsi(host); const struct samsung_dsim_plat_data *pdata = dsi->plat_data; struct device *dev = dsi->dev; + struct device_node *np = dev->of_node; + struct device_node *remote; struct drm_panel *panel; int ret; - panel = of_drm_find_panel(device->dev.of_node); + /** + * Devices can also be child nodes when we also control that device + * through the upstream device (ie, MIPI-DCS for a MIPI-DSI device). + * + * Lookup for a child node of the given parent that isn't either port + * or ports. + */ + for_each_available_child_of_node(np, remote) { + if (of_node_name_eq(remote, "port") || + of_node_name_eq(remote, "ports")) + continue; + + goto of_find_panel_or_bridge; + } + + /* + * of_graph_get_remote_node() produces a noisy error message if port + * node isn't found and the absence of the port is a legit case here, + * so at first we silently check whether graph presents in the + * device-tree node. + */ + if (!of_graph_is_present(np)) + return -ENODEV; + + remote = of_graph_get_remote_node(np, 1, 0); + +of_find_panel_or_bridge: + if (!remote) + return -ENODEV; + + panel = of_drm_find_panel(remote); if (!IS_ERR(panel)) { dsi->out_bridge = devm_drm_panel_bridge_add(dev, panel); } else { - dsi->out_bridge = of_drm_find_bridge(device->dev.of_node); + dsi->out_bridge = of_drm_find_bridge(remote); if (!dsi->out_bridge) dsi->out_bridge = ERR_PTR(-EINVAL); } + of_node_put(remote); + if (IS_ERR(dsi->out_bridge)) { ret = PTR_ERR(dsi->out_bridge); DRM_DEV_ERROR(dev, "failed to find the bridge: %d\n", ret); -- 2.25.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D496DC433FE for ; Wed, 5 Oct 2022 15:14:03 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 92B5A10E451; Wed, 5 Oct 2022 15:13:38 +0000 (UTC) Received: from mail-io1-xd2f.google.com (mail-io1-xd2f.google.com [IPv6:2607:f8b0:4864:20::d2f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 225F710E118 for ; Wed, 5 Oct 2022 15:13:24 +0000 (UTC) Received: by mail-io1-xd2f.google.com with SMTP id e205so13054855iof.1 for ; Wed, 05 Oct 2022 08:13:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oZKBZ/Poq4qIDgukJ06pdFkyQHbBE5/VJ3pRiELlmgY=; b=CycY5tvqQX7XlhnNAyQclQ9wN9sBRLKSHjUaZ+2ZIdR47bIf/4sh6oAm0Boem+mxED NwOLrgJEPJ40HVe7uRW5mKdquNOOzm6RBT8u/zYY475ZvWdtNgCp9qIcl0pRk9AJCSEd ZPNC8GOeWscs9RfZyYlOKWnYRfkd4iN779dKU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oZKBZ/Poq4qIDgukJ06pdFkyQHbBE5/VJ3pRiELlmgY=; b=c/rJRGOIr1OsHRR1Qb+zsigTFTBouw3+zyXvQOqSvXmUhzNTyXVoPIxbHlfbCke/cp ZQqOgK66AgA+lgLNgY1gSvkjtNWyOj6DLJ/NRkUCh5huLpMBhvX74pxG/KWNgnc9rqAZ Ohb0TeMo0W2rqFq2Lky83bSiFD1qBGXKEcks4eHsZMXjHtpMLgsy2rynT5vb8yqsUUCE dhCEQ1nTR8toIhaxegez2ub28A2bcgpuc8jhqVZZlEIdwCAwl3kdCgpZ608UpVE8fFiA wDH7LOz7M2aCdle6eyCEqXeoDveATdLGdzpS3gauyxNSZBKQmlgSv//jmmapE1O99TCl PiZg== X-Gm-Message-State: ACrzQf0bCZdhXNM40Xvb7nwjXvEaJmtqWhzk1N7FnfAC4EUSOg/9Km+x Hg/pmUkLRLgHMK+UGxKV49ki9w== X-Google-Smtp-Source: AMsMyM7+6E9CcbOMePBdcd4NW1DHDNKXHeuu0sWSYmYK93I3b4G0DhEsd2CVNuB3ZL4DZZuGofKtpg== X-Received: by 2002:a02:9f88:0:b0:362:74f6:6215 with SMTP id a8-20020a029f88000000b0036274f66215mr67503jam.2.1664982803307; Wed, 05 Oct 2022 08:13:23 -0700 (PDT) Received: from j-ThinkPad-E14-Gen-2.stthomas.edu ([140.209.96.21]) by smtp.gmail.com with ESMTPSA id w15-20020a056602034f00b0068a235db030sm7089276iou.27.2022.10.05.08.13.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Oct 2022 08:13:22 -0700 (PDT) From: Jagan Teki To: Andrzej Hajda , Inki Dae , Marek Szyprowski , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Frieder Schrempf , Fancy Fang , Tim Harvey , Michael Nazzareno Trimarchi , Adam Ford , Neil Armstrong , Robert Foss , Laurent Pinchart , Tommaso Merciai , Marek Vasut Subject: [PATCH v7 02/10] drm: bridge: samsung-dsim: Lookup OF-graph or Child node devices Date: Wed, 5 Oct 2022 20:43:01 +0530 Message-Id: <20221005151309.7278-3-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221005151309.7278-1-jagan@amarulasolutions.com> References: <20221005151309.7278-1-jagan@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, Matteo Lisi , dri-devel@lists.freedesktop.org, NXP Linux Team , linux-amarula , linux-arm-kernel@lists.infradead.org, Jagan Teki Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The child devices in MIPI DSI can be binding with OF-graph and also via child nodes. The OF-graph interface represents the child devices via remote and associated endpoint numbers like dsi { compatible = "fsl,imx8mm-mipi-dsim"; ports { port@0 { reg = <0>; dsi_in_lcdif: endpoint@0 { reg = <0>; remote-endpoint = <&lcdif_out_dsi>; }; }; port@1 { reg = <1>; dsi_out_bridge: endpoint { remote-endpoint = <&bridge_in_dsi>; }; }; }; The child node interface represents the child devices via conventional child nodes on given DSI parent like dsi { compatible = "samsung,exynos5433-mipi-dsi"; ports { port@0 { reg = <0>; dsi_to_mic: endpoint { remote-endpoint = <&mic_to_dsi>; }; }; }; panel@0 { reg = <0>; }; }; As Samsung DSIM bridge is common DSI IP across all Exynos DSI and NXP i.MX8M host controllers, this patch adds support to lookup the child devices whether its bindings on the associated host represent OF-graph or child node interfaces. v7, v6, v5, v4, v3: * none v2: * new patch Signed-off-by: Jagan Teki --- drivers/gpu/drm/bridge/samsung-dsim.c | 38 +++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c index 07563d00a420..c34c6abac815 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1356,18 +1356,52 @@ static int samsung_dsim_host_attach(struct mipi_dsi_host *host, struct samsung_dsim *dsi = host_to_dsi(host); const struct samsung_dsim_plat_data *pdata = dsi->plat_data; struct device *dev = dsi->dev; + struct device_node *np = dev->of_node; + struct device_node *remote; struct drm_panel *panel; int ret; - panel = of_drm_find_panel(device->dev.of_node); + /** + * Devices can also be child nodes when we also control that device + * through the upstream device (ie, MIPI-DCS for a MIPI-DSI device). + * + * Lookup for a child node of the given parent that isn't either port + * or ports. + */ + for_each_available_child_of_node(np, remote) { + if (of_node_name_eq(remote, "port") || + of_node_name_eq(remote, "ports")) + continue; + + goto of_find_panel_or_bridge; + } + + /* + * of_graph_get_remote_node() produces a noisy error message if port + * node isn't found and the absence of the port is a legit case here, + * so at first we silently check whether graph presents in the + * device-tree node. + */ + if (!of_graph_is_present(np)) + return -ENODEV; + + remote = of_graph_get_remote_node(np, 1, 0); + +of_find_panel_or_bridge: + if (!remote) + return -ENODEV; + + panel = of_drm_find_panel(remote); if (!IS_ERR(panel)) { dsi->out_bridge = devm_drm_panel_bridge_add(dev, panel); } else { - dsi->out_bridge = of_drm_find_bridge(device->dev.of_node); + dsi->out_bridge = of_drm_find_bridge(remote); if (!dsi->out_bridge) dsi->out_bridge = ERR_PTR(-EINVAL); } + of_node_put(remote); + if (IS_ERR(dsi->out_bridge)) { ret = PTR_ERR(dsi->out_bridge); DRM_DEV_ERROR(dev, "failed to find the bridge: %d\n", ret); -- 2.25.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 65217C4332F for ; Wed, 5 Oct 2022 15:14:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QBULoO7BqBPZNbujoGm4IlqZpJ7fpoMx/Y7TdO1CHQI=; b=swAx1Gmrikaj8y vGe8M56FNTr+uqdMCCdVeUdam8VwjHQ/YzOKjfAf6DrtKUcZ3FuwW4I0hFuBdjK4a8F0NC5AK9dYQ FBBNcnW2xewYpyI0aFdqEv/plpeGNRx5xlXJMafDszPtnK0Y7Rqz7KaD92Gg3cA8/FD/wGnLGNckg i5lALSmfbjLbX6XUbnQCuc6qzrNXVpJM0+hmLG+13AlLPHjOaoioNEzb0JXQz/qLqqszIoHmY5ozg 5E6S3+1CwIMFqkWZYd+7MZJ6kL9CsILYQCZhkElmXa/sJO3hDfBPXOhSTDmKZFcyGTA9aWXxyTVc2 8YD1QC0FX8LcxwU8a/Gw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1og65l-00En5V-GY; Wed, 05 Oct 2022 15:13:49 +0000 Received: from mail-io1-xd33.google.com ([2607:f8b0:4864:20::d33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1og65N-00Emxj-2Y for linux-arm-kernel@lists.infradead.org; Wed, 05 Oct 2022 15:13:29 +0000 Received: by mail-io1-xd33.google.com with SMTP id s16so2054508ioa.6 for ; Wed, 05 Oct 2022 08:13:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oZKBZ/Poq4qIDgukJ06pdFkyQHbBE5/VJ3pRiELlmgY=; b=CycY5tvqQX7XlhnNAyQclQ9wN9sBRLKSHjUaZ+2ZIdR47bIf/4sh6oAm0Boem+mxED NwOLrgJEPJ40HVe7uRW5mKdquNOOzm6RBT8u/zYY475ZvWdtNgCp9qIcl0pRk9AJCSEd ZPNC8GOeWscs9RfZyYlOKWnYRfkd4iN779dKU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oZKBZ/Poq4qIDgukJ06pdFkyQHbBE5/VJ3pRiELlmgY=; b=VHTP+auqjzJKn5MRzAYgrEp2AvUzIlo8+/Bv8fnHoEAaXR50Sm3zD4nq9vpvZMl1v7 IUWN37BdEPYhqgtUZvdnV+f+GtbyfKZPPdZPlDX1SprBLjOYBFFiM+GEcYc+LjBSDj9n IYYB2viFnW7mkYhb3Nsq+5G0auMFWJVoFq/gQfdo0ZEBaQJ+WJ4+iF+HTcbs05cxp8Xs eK4QZATjVKHpLT0MEPVyo6p3cs2UEJITR5tKALZA5kQ7CqSYftgFVnnUJVP3Pym+7xBT O/PU7xQ2pMcq+6/zCgsPyKkrmDyUwQy32Bhb7t/v9JcWAMpy5uA/mHYcqjdPWjQ6QOQu O/1Q== X-Gm-Message-State: ACrzQf3Hf3rqunBZVvtfPDUKeZgss7BL4RdX219W5uAUMirZ5JGtX3gW w/gzAMANuHYVjeTbeBUe6sUODw== X-Google-Smtp-Source: AMsMyM7+6E9CcbOMePBdcd4NW1DHDNKXHeuu0sWSYmYK93I3b4G0DhEsd2CVNuB3ZL4DZZuGofKtpg== X-Received: by 2002:a02:9f88:0:b0:362:74f6:6215 with SMTP id a8-20020a029f88000000b0036274f66215mr67503jam.2.1664982803307; Wed, 05 Oct 2022 08:13:23 -0700 (PDT) Received: from j-ThinkPad-E14-Gen-2.stthomas.edu ([140.209.96.21]) by smtp.gmail.com with ESMTPSA id w15-20020a056602034f00b0068a235db030sm7089276iou.27.2022.10.05.08.13.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Oct 2022 08:13:22 -0700 (PDT) From: Jagan Teki To: Andrzej Hajda , Inki Dae , Marek Szyprowski , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Frieder Schrempf , Fancy Fang , Tim Harvey , Michael Nazzareno Trimarchi , Adam Ford , Neil Armstrong , Robert Foss , Laurent Pinchart , Tommaso Merciai , Marek Vasut Cc: Matteo Lisi , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, NXP Linux Team , linux-amarula , Jagan Teki Subject: [PATCH v7 02/10] drm: bridge: samsung-dsim: Lookup OF-graph or Child node devices Date: Wed, 5 Oct 2022 20:43:01 +0530 Message-Id: <20221005151309.7278-3-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221005151309.7278-1-jagan@amarulasolutions.com> References: <20221005151309.7278-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221005_081325_158633_14FAA613 X-CRM114-Status: GOOD ( 18.91 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The child devices in MIPI DSI can be binding with OF-graph and also via child nodes. The OF-graph interface represents the child devices via remote and associated endpoint numbers like dsi { compatible = "fsl,imx8mm-mipi-dsim"; ports { port@0 { reg = <0>; dsi_in_lcdif: endpoint@0 { reg = <0>; remote-endpoint = <&lcdif_out_dsi>; }; }; port@1 { reg = <1>; dsi_out_bridge: endpoint { remote-endpoint = <&bridge_in_dsi>; }; }; }; The child node interface represents the child devices via conventional child nodes on given DSI parent like dsi { compatible = "samsung,exynos5433-mipi-dsi"; ports { port@0 { reg = <0>; dsi_to_mic: endpoint { remote-endpoint = <&mic_to_dsi>; }; }; }; panel@0 { reg = <0>; }; }; As Samsung DSIM bridge is common DSI IP across all Exynos DSI and NXP i.MX8M host controllers, this patch adds support to lookup the child devices whether its bindings on the associated host represent OF-graph or child node interfaces. v7, v6, v5, v4, v3: * none v2: * new patch Signed-off-by: Jagan Teki --- drivers/gpu/drm/bridge/samsung-dsim.c | 38 +++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c index 07563d00a420..c34c6abac815 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1356,18 +1356,52 @@ static int samsung_dsim_host_attach(struct mipi_dsi_host *host, struct samsung_dsim *dsi = host_to_dsi(host); const struct samsung_dsim_plat_data *pdata = dsi->plat_data; struct device *dev = dsi->dev; + struct device_node *np = dev->of_node; + struct device_node *remote; struct drm_panel *panel; int ret; - panel = of_drm_find_panel(device->dev.of_node); + /** + * Devices can also be child nodes when we also control that device + * through the upstream device (ie, MIPI-DCS for a MIPI-DSI device). + * + * Lookup for a child node of the given parent that isn't either port + * or ports. + */ + for_each_available_child_of_node(np, remote) { + if (of_node_name_eq(remote, "port") || + of_node_name_eq(remote, "ports")) + continue; + + goto of_find_panel_or_bridge; + } + + /* + * of_graph_get_remote_node() produces a noisy error message if port + * node isn't found and the absence of the port is a legit case here, + * so at first we silently check whether graph presents in the + * device-tree node. + */ + if (!of_graph_is_present(np)) + return -ENODEV; + + remote = of_graph_get_remote_node(np, 1, 0); + +of_find_panel_or_bridge: + if (!remote) + return -ENODEV; + + panel = of_drm_find_panel(remote); if (!IS_ERR(panel)) { dsi->out_bridge = devm_drm_panel_bridge_add(dev, panel); } else { - dsi->out_bridge = of_drm_find_bridge(device->dev.of_node); + dsi->out_bridge = of_drm_find_bridge(remote); if (!dsi->out_bridge) dsi->out_bridge = ERR_PTR(-EINVAL); } + of_node_put(remote); + if (IS_ERR(dsi->out_bridge)) { ret = PTR_ERR(dsi->out_bridge); DRM_DEV_ERROR(dev, "failed to find the bridge: %d\n", ret); -- 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel