* [PATCH] staging: media: tegra-video: vi: move port parsing into a subfunction
@ 2026-07-27 14:20 Hao-Qun Huang
0 siblings, 0 replies; only message in thread
From: Hao-Qun Huang @ 2026-07-27 14:20 UTC (permalink / raw)
To: Luca Ceresoli, Thierry Reding, Jonathan Hunter,
Sowjanya Komatineni
Cc: Mauro Carvalho Chehab, Hans Verkuil, Greg Kroah-Hartman,
linux-media, linux-tegra, linux-staging, linux-kernel
tegra_vi_channels_alloc() needs two error variables because its loop body
mixes two things: ports that are skipped because they cannot be used, and
errors that have to stop the whole allocation.
Move the loop body into tegra_vi_port_channel_alloc(), which returns 0
both when the port is skipped and when a channel was allocated, and a
negative error only when allocation must stop. The loop is then a call
and an error check, and the second error variable is no longer needed.
No functional change intended.
Suggested-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Assisted-by: Claude:claude-fable-5
Signed-off-by: Hao-Qun Huang <alvinhuang0603@gmail.com>
---
This is the cleanup on top of "staging: media: tegra-video: vi: fix probe
failure on skipped last port", already in media.git/next, so it needs
that one applied first.
drivers/staging/media/tegra-video/vi.c | 92 ++++++++++++++------------
1 file changed, 49 insertions(+), 43 deletions(-)
diff --git a/drivers/staging/media/tegra-video/vi.c b/drivers/staging/media/tegra-video/vi.c
index f461e117305e..09eac34a7813 100644
--- a/drivers/staging/media/tegra-video/vi.c
+++ b/drivers/staging/media/tegra-video/vi.c
@@ -1247,17 +1247,54 @@ static int tegra_vi_tpg_channels_alloc(struct tegra_vi *vi)
return 0;
}
+static int tegra_vi_port_channel_alloc(struct tegra_vi *vi,
+ struct device_node *port)
+{
+ struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
+ struct device_node *parent;
+ struct device_node *ep;
+ unsigned int port_num;
+ unsigned int lanes;
+ int ret;
+
+ if (!of_node_name_eq(port, "port"))
+ return 0;
+
+ if (of_property_read_u32(port, "reg", &port_num) < 0)
+ return 0;
+
+ if (port_num > vi->soc->vi_max_channels) {
+ dev_err(vi->dev, "invalid port num %d for %pOF\n",
+ port_num, port);
+ return -EINVAL;
+ }
+
+ ep = of_get_child_by_name(port, "endpoint");
+ if (!ep)
+ return 0;
+
+ parent = of_graph_get_remote_port_parent(ep);
+ of_node_put(ep);
+ if (!parent)
+ return 0;
+
+ ep = of_graph_get_endpoint_by_regs(parent, 0, 0);
+ of_node_put(parent);
+ ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep), &v4l2_ep);
+ of_node_put(ep);
+ if (ret)
+ return 0;
+
+ lanes = v4l2_ep.bus.mipi_csi2.num_data_lanes;
+
+ return tegra_vi_channel_alloc(vi, port_num, port, lanes);
+}
+
static int tegra_vi_channels_alloc(struct tegra_vi *vi)
{
struct device_node *node = vi->dev->of_node;
- struct device_node *ep = NULL;
struct device_node *ports;
- struct device_node *port = NULL;
- unsigned int port_num;
- struct device_node *parent;
- struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
- unsigned int lanes;
- int err;
+ struct device_node *port;
int ret = 0;
ports = of_get_child_by_name(node, "ports");
@@ -1265,46 +1302,15 @@ static int tegra_vi_channels_alloc(struct tegra_vi *vi)
return dev_err_probe(vi->dev, -ENODEV, "%pOF: missing 'ports' node\n", node);
for_each_child_of_node(ports, port) {
- if (!of_node_name_eq(port, "port"))
- continue;
-
- err = of_property_read_u32(port, "reg", &port_num);
- if (err < 0)
- continue;
-
- if (port_num > vi->soc->vi_max_channels) {
- dev_err(vi->dev, "invalid port num %d for %pOF\n",
- port_num, port);
- ret = -EINVAL;
- goto cleanup;
+ ret = tegra_vi_port_channel_alloc(vi, port);
+ if (ret) {
+ of_node_put(port);
+ break;
}
-
- ep = of_get_child_by_name(port, "endpoint");
- if (!ep)
- continue;
-
- parent = of_graph_get_remote_port_parent(ep);
- of_node_put(ep);
- if (!parent)
- continue;
-
- ep = of_graph_get_endpoint_by_regs(parent, 0, 0);
- of_node_put(parent);
- err = v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep),
- &v4l2_ep);
- of_node_put(ep);
- if (err)
- continue;
-
- lanes = v4l2_ep.bus.mipi_csi2.num_data_lanes;
- ret = tegra_vi_channel_alloc(vi, port_num, port, lanes);
- if (ret < 0)
- goto cleanup;
}
-cleanup:
- of_node_put(port);
of_node_put(ports);
+
return ret;
}
--
2.43.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-27 14:21 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-27 14:20 [PATCH] staging: media: tegra-video: vi: move port parsing into a subfunction Hao-Qun Huang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox