]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: qcom: camss: change internals of endpoint parsing to fwnode handling
authorVladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Thu, 20 Nov 2025 00:46:03 +0000 (02:46 +0200)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Tue, 13 Jan 2026 09:25:01 +0000 (10:25 +0100)
Since a few called V4L2 functions operate with fwnode arguments the change
from OF device nodes to fwnodes brings a simplification to the code.

The camss_parse_endpoint_node() function is called once by camss_probe(),
and there is no use of knowing a number of asynchronously registered
remote devices, so it makes sense to remove the related computation from
the function.

Tested-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/platform/qcom/camss/camss.c

index 9122568f9b0ae60ab01d27a6d1c785c50a5cb920..8e0809202362c33ccead669d82893454146aca6c 100644 (file)
@@ -4206,16 +4206,16 @@ static const struct parent_dev_ops vfe_parent_dev_ops = {
 };
 
 /*
- * camss_of_parse_endpoint_node - Parse port endpoint node
- * @dev: Device
- * @node: Device node to be parsed
+ * camss_parse_endpoint_node - Parse port endpoint node
+ * @dev: CAMSS device
+ * @ep: Device endpoint to be parsed
  * @csd: Parsed data from port endpoint node
  *
  * Return 0 on success or a negative error code on failure
  */
-static int camss_of_parse_endpoint_node(struct device *dev,
-                                       struct device_node *node,
-                                       struct camss_async_subdev *csd)
+static int camss_parse_endpoint_node(struct device *dev,
+                                    struct fwnode_handle *ep,
+                                    struct camss_async_subdev *csd)
 {
        struct csiphy_lanes_cfg *lncfg = &csd->interface.csi2.lane_cfg;
        struct v4l2_mbus_config_mipi_csi2 *mipi_csi2;
@@ -4223,7 +4223,7 @@ static int camss_of_parse_endpoint_node(struct device *dev,
        unsigned int i;
        int ret;
 
-       ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(node), &vep);
+       ret = v4l2_fwnode_endpoint_parse(ep, &vep);
        if (ret)
                return ret;
 
@@ -4258,49 +4258,46 @@ static int camss_of_parse_endpoint_node(struct device *dev,
 }
 
 /*
- * camss_of_parse_ports - Parse ports node
- * @dev: Device
- * @notifier: v4l2_device notifier data
+ * camss_parse_ports - Parse ports node
+ * @dev: CAMSS device
  *
- * Return number of "port" nodes found in "ports" node
+ * Return 0 on success or a negative error code on failure
  */
-static int camss_of_parse_ports(struct camss *camss)
+static int camss_parse_ports(struct camss *camss)
 {
        struct device *dev = camss->dev;
-       struct device_node *node = NULL;
-       struct device_node *remote = NULL;
-       int ret, num_subdevs = 0;
+       struct fwnode_handle *fwnode = dev_fwnode(dev), *ep;
+       int ret;
 
-       for_each_endpoint_of_node(dev->of_node, node) {
+       fwnode_graph_for_each_endpoint(fwnode, ep) {
                struct camss_async_subdev *csd;
+               struct fwnode_handle *remote;
 
-               remote = of_graph_get_remote_port_parent(node);
+               remote = fwnode_graph_get_remote_port_parent(ep);
                if (!remote) {
                        dev_err(dev, "Cannot get remote parent\n");
                        ret = -EINVAL;
                        goto err_cleanup;
                }
 
-               csd = v4l2_async_nf_add_fwnode(&camss->notifier,
-                                              of_fwnode_handle(remote),
+               csd = v4l2_async_nf_add_fwnode(&camss->notifier, remote,
                                               struct camss_async_subdev);
-               of_node_put(remote);
+               fwnode_handle_put(remote);
                if (IS_ERR(csd)) {
                        ret = PTR_ERR(csd);
                        goto err_cleanup;
                }
 
-               ret = camss_of_parse_endpoint_node(dev, node, csd);
+               ret = camss_parse_endpoint_node(dev, ep, csd);
                if (ret < 0)
                        goto err_cleanup;
-
-               num_subdevs++;
        }
 
-       return num_subdevs;
+       return 0;
 
 err_cleanup:
-       of_node_put(node);
+       fwnode_handle_put(ep);
+
        return ret;
 }
 
@@ -4857,7 +4854,7 @@ static int camss_probe(struct platform_device *pdev)
 
        pm_runtime_enable(dev);
 
-       ret = camss_of_parse_ports(camss);
+       ret = camss_parse_ports(camss);
        if (ret < 0)
                goto err_v4l2_device_unregister;