From: Rob Clark <robdclark@gmail.com> To: dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, aarch64-laptops@lists.linaro.org Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Vasily Khoruzhick <anarsoul@gmail.com>, Bjorn Andersson <bjorn.andersson@linaro.org>, Jeffrey Hugo <jhugo@codeaurora.org>, Rob Clark <robdclark@chromium.org>, Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, Sean Paul <sean@poorly.run>, David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>, linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/4] drm/of: add support to find any enabled endpoint Date: Sat, 7 Dec 2019 12:35:51 -0800 [thread overview] Message-ID: <20191207203553.286017-3-robdclark@gmail.com> (raw) In-Reply-To: <20191207203553.286017-1-robdclark@gmail.com> From: Rob Clark <robdclark@chromium.org> To handle the case where there are multiple panel endpoints, only one of which is enabled/installed, add support for a wildcard endpoint value to request finding whichever endpoint is enabled. Signed-off-by: Rob Clark <robdclark@chromium.org> --- drivers/gpu/drm/drm_of.c | 41 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 0ca58803ba46..2baf44e401b8 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -219,11 +219,44 @@ int drm_of_encoder_active_endpoint(struct device_node *node, } EXPORT_SYMBOL_GPL(drm_of_encoder_active_endpoint); +static int find_enabled_endpoint(const struct device_node *node, u32 port) +{ + struct device_node *endpoint_node, *remote; + u32 endpoint = 0; + + for (endpoint = 0; ; endpoint++) { + endpoint_node = of_graph_get_endpoint_by_regs(node, port, endpoint); + if (!endpoint_node) { + pr_debug("No more endpoints!\n"); + return -ENODEV; + } + + remote = of_graph_get_remote_port_parent(endpoint_node); + of_node_put(endpoint_node); + if (!remote) { + pr_debug("no valid remote node\n"); + continue; + } + + if (!of_device_is_available(remote)) { + pr_debug("not available for remote node\n"); + of_node_put(remote); + continue; + } + + pr_debug("found enabled endpoint %d for %s\n", endpoint, remote->name); + of_node_put(remote); + return endpoint; + } + + return -ENODEV; +} + /** * drm_of_find_panel_or_bridge - return connected panel or bridge device * @np: device tree node containing encoder output ports * @port: port in the device tree node - * @endpoint: endpoint in the device tree node + * @endpoint: endpoint in the device tree node, or -1 to find an enabled endpoint * @panel: pointer to hold returned drm_panel * @bridge: pointer to hold returned drm_bridge * @@ -246,6 +279,12 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, if (panel) *panel = NULL; + if (endpoint == -1) { + endpoint = find_enabled_endpoint(np, port); + if (endpoint < 0) + return endpoint; + } + remote = of_graph_get_remote_node(np, port, endpoint); if (!remote) return -ENODEV; -- 2.23.0
WARNING: multiple messages have this Message-ID (diff)
From: Rob Clark <robdclark@gmail.com> To: dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, aarch64-laptops@lists.linaro.org Cc: Rob Clark <robdclark@chromium.org>, Jeffrey Hugo <jhugo@codeaurora.org>, open list <linux-kernel@vger.kernel.org>, Bjorn Andersson <bjorn.andersson@linaro.org>, Vasily Khoruzhick <anarsoul@gmail.com>, David Airlie <airlied@linux.ie>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Sean Paul <sean@poorly.run> Subject: [PATCH 2/4] drm/of: add support to find any enabled endpoint Date: Sat, 7 Dec 2019 12:35:51 -0800 [thread overview] Message-ID: <20191207203553.286017-3-robdclark@gmail.com> (raw) In-Reply-To: <20191207203553.286017-1-robdclark@gmail.com> From: Rob Clark <robdclark@chromium.org> To handle the case where there are multiple panel endpoints, only one of which is enabled/installed, add support for a wildcard endpoint value to request finding whichever endpoint is enabled. Signed-off-by: Rob Clark <robdclark@chromium.org> --- drivers/gpu/drm/drm_of.c | 41 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 0ca58803ba46..2baf44e401b8 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -219,11 +219,44 @@ int drm_of_encoder_active_endpoint(struct device_node *node, } EXPORT_SYMBOL_GPL(drm_of_encoder_active_endpoint); +static int find_enabled_endpoint(const struct device_node *node, u32 port) +{ + struct device_node *endpoint_node, *remote; + u32 endpoint = 0; + + for (endpoint = 0; ; endpoint++) { + endpoint_node = of_graph_get_endpoint_by_regs(node, port, endpoint); + if (!endpoint_node) { + pr_debug("No more endpoints!\n"); + return -ENODEV; + } + + remote = of_graph_get_remote_port_parent(endpoint_node); + of_node_put(endpoint_node); + if (!remote) { + pr_debug("no valid remote node\n"); + continue; + } + + if (!of_device_is_available(remote)) { + pr_debug("not available for remote node\n"); + of_node_put(remote); + continue; + } + + pr_debug("found enabled endpoint %d for %s\n", endpoint, remote->name); + of_node_put(remote); + return endpoint; + } + + return -ENODEV; +} + /** * drm_of_find_panel_or_bridge - return connected panel or bridge device * @np: device tree node containing encoder output ports * @port: port in the device tree node - * @endpoint: endpoint in the device tree node + * @endpoint: endpoint in the device tree node, or -1 to find an enabled endpoint * @panel: pointer to hold returned drm_panel * @bridge: pointer to hold returned drm_bridge * @@ -246,6 +279,12 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, if (panel) *panel = NULL; + if (endpoint == -1) { + endpoint = find_enabled_endpoint(np, port); + if (endpoint < 0) + return endpoint; + } + remote = of_graph_get_remote_node(np, port, endpoint); if (!remote) return -ENODEV; -- 2.23.0 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-12-07 20:36 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-07 20:35 [PATCH 0/4] drm+dt: multi panel selection and yoga c630 display Rob Clark 2019-12-07 20:35 ` Rob Clark 2019-12-07 20:35 ` [PATCH 1/4] dt-bindings: display: panel: document panel-id Rob Clark 2019-12-07 20:35 ` Rob Clark 2019-12-07 21:13 ` Sam Ravnborg 2019-12-07 21:13 ` Sam Ravnborg 2019-12-07 21:34 ` Rob Clark 2019-12-07 21:34 ` Rob Clark 2019-12-08 9:39 ` Sam Ravnborg 2019-12-08 9:39 ` Sam Ravnborg 2019-12-08 14:45 ` Laurent Pinchart 2019-12-08 14:45 ` Laurent Pinchart 2019-12-08 16:50 ` Rob Clark 2019-12-08 16:50 ` Rob Clark 2019-12-08 18:27 ` Laurent Pinchart 2019-12-08 18:27 ` Laurent Pinchart 2019-12-08 21:23 ` Rob Clark 2019-12-08 21:23 ` Rob Clark 2019-12-09 11:05 ` Laurent Pinchart 2019-12-09 11:05 ` Laurent Pinchart 2019-12-09 15:31 ` Rob Herring 2019-12-09 15:31 ` Rob Herring 2019-12-09 15:57 ` Rob Clark 2019-12-09 15:57 ` Rob Clark 2019-12-07 20:35 ` Rob Clark [this message] 2019-12-07 20:35 ` [PATCH 2/4] drm/of: add support to find any enabled endpoint Rob Clark 2019-12-08 9:31 ` Sam Ravnborg 2019-12-08 9:31 ` Sam Ravnborg 2019-12-07 20:35 ` [PATCH 3/4] drm/bridge: ti-sn65dsi86: " Rob Clark 2019-12-07 20:35 ` Rob Clark 2019-12-07 20:35 ` [PATCH 4/4] arm64: dts: qcom: c630: Enable display Rob Clark 2019-12-07 20:35 ` Rob Clark
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191207203553.286017-3-robdclark@gmail.com \ --to=robdclark@gmail.com \ --cc=Laurent.pinchart@ideasonboard.com \ --cc=aarch64-laptops@lists.linaro.org \ --cc=airlied@linux.ie \ --cc=anarsoul@gmail.com \ --cc=bjorn.andersson@linaro.org \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=jhugo@codeaurora.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=maarten.lankhorst@linux.intel.com \ --cc=mripard@kernel.org \ --cc=robdclark@chromium.org \ --cc=sean@poorly.run \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.