This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Decompose register and link operations
Author:  Atanas Filipov <quic_afili...@quicinc.com>
Date:    Wed May 22 18:46:58 2024 +0300

Split link and register operations.
Add dedicated link callback according to SoC identifier.

Signed-off-by: Atanas Filipov <quic_afili...@quicinc.com>
Signed-off-by: Gjorgji Rosikopulos <quic_grosi...@quicinc.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonog...@linaro.org>
Tested-by: Bryan O'Donoghue <bryan.odonog...@linaro.org> # 
sc8280xp/sm8250/sdm845/apq8016
Acked-by: Bryan O'Donoghue <bryan.odonog...@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

 drivers/media/platform/qcom/camss/camss.c | 141 +++++++++++++++++-------------
 drivers/media/platform/qcom/camss/camss.h |   1 +
 2 files changed, 81 insertions(+), 61 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss.c 
b/drivers/media/platform/qcom/camss/camss.c
index 1b75918fc35b..8a3968d1cd83 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -1756,72 +1756,30 @@ static int camss_init_subdevices(struct camss *camss)
 }
 
 /*
- * camss_register_entities - Register subdev nodes and create links
+ * camss_link_entities - Register subdev nodes and create links
  * @camss: CAMSS device
  *
  * Return 0 on success or a negative error code on failure
  */
-static int camss_register_entities(struct camss *camss)
+static int camss_link_entities(struct camss *camss)
 {
        int i, j, k;
        int ret;
 
-       for (i = 0; i < camss->res->csiphy_num; i++) {
-               ret = msm_csiphy_register_entity(&camss->csiphy[i],
-                                                &camss->v4l2_dev);
-               if (ret < 0) {
-                       dev_err(camss->dev,
-                               "Failed to register csiphy%d entity: %d\n",
-                               i, ret);
-                       goto err_reg_csiphy;
-               }
-       }
-
-       for (i = 0; i < camss->res->csid_num; i++) {
-               ret = msm_csid_register_entity(&camss->csid[i],
-                                              &camss->v4l2_dev);
-               if (ret < 0) {
-                       dev_err(camss->dev,
-                               "Failed to register csid%d entity: %d\n",
-                               i, ret);
-                       goto err_reg_csid;
-               }
-       }
-
-       ret = msm_ispif_register_entities(camss->ispif,
-                                         &camss->v4l2_dev);
-       if (ret < 0) {
-               dev_err(camss->dev, "Failed to register ispif entities: %d\n",
-               ret);
-               goto err_reg_ispif;
-       }
-
-       for (i = 0; i < camss->res->vfe_num; i++) {
-               ret = msm_vfe_register_entities(&camss->vfe[i],
-                                               &camss->v4l2_dev);
-               if (ret < 0) {
-                       dev_err(camss->dev,
-                               "Failed to register vfe%d entities: %d\n",
-                               i, ret);
-                       goto err_reg_vfe;
-               }
-       }
-
        for (i = 0; i < camss->res->csiphy_num; i++) {
                for (j = 0; j < camss->res->csid_num; j++) {
-                       ret = media_create_pad_link(
-                               &camss->csiphy[i].subdev.entity,
-                               MSM_CSIPHY_PAD_SRC,
-                               &camss->csid[j].subdev.entity,
-                               MSM_CSID_PAD_SINK,
-                               0);
+                       ret = 
media_create_pad_link(&camss->csiphy[i].subdev.entity,
+                                                   MSM_CSIPHY_PAD_SRC,
+                                                   
&camss->csid[j].subdev.entity,
+                                                   MSM_CSID_PAD_SINK,
+                                                   0);
                        if (ret < 0) {
                                dev_err(camss->dev,
                                        "Failed to link %s->%s entities: %d\n",
                                        camss->csiphy[i].subdev.entity.name,
                                        camss->csid[j].subdev.entity.name,
                                        ret);
-                               goto err_link;
+                               return ret;
                        }
                }
        }
@@ -1829,19 +1787,18 @@ static int camss_register_entities(struct camss *camss)
        if (camss->ispif) {
                for (i = 0; i < camss->res->csid_num; i++) {
                        for (j = 0; j < camss->ispif->line_num; j++) {
-                               ret = media_create_pad_link(
-                                       &camss->csid[i].subdev.entity,
-                                       MSM_CSID_PAD_SRC,
-                                       &camss->ispif->line[j].subdev.entity,
-                                       MSM_ISPIF_PAD_SINK,
-                                       0);
+                               ret = 
media_create_pad_link(&camss->csid[i].subdev.entity,
+                                                           MSM_CSID_PAD_SRC,
+                                                           
&camss->ispif->line[j].subdev.entity,
+                                                           MSM_ISPIF_PAD_SINK,
+                                                           0);
                                if (ret < 0) {
                                        dev_err(camss->dev,
                                                "Failed to link %s->%s 
entities: %d\n",
                                                
camss->csid[i].subdev.entity.name,
                                                
camss->ispif->line[j].subdev.entity.name,
                                                ret);
-                                       goto err_link;
+                                       return ret;
                                }
                        }
                }
@@ -1863,7 +1820,7 @@ static int camss_register_entities(struct camss *camss)
                                                        ispif->entity.name,
                                                        vfe->entity.name,
                                                        ret);
-                                               goto err_link;
+                                               return ret;
                                        }
                                }
        } else {
@@ -1884,15 +1841,67 @@ static int camss_register_entities(struct camss *camss)
                                                        csid->entity.name,
                                                        vfe->entity.name,
                                                        ret);
-                                               goto err_link;
+                                               return ret;
                                        }
                                }
        }
 
+       return 0;
+}
+
+/*
+ * camss_register_entities - Register subdev nodes and create links
+ * @camss: CAMSS device
+ *
+ * Return 0 on success or a negative error code on failure
+ */
+static int camss_register_entities(struct camss *camss)
+{
+       int i;
+       int ret;
+
+       for (i = 0; i < camss->res->csiphy_num; i++) {
+               ret = msm_csiphy_register_entity(&camss->csiphy[i],
+                                                &camss->v4l2_dev);
+               if (ret < 0) {
+                       dev_err(camss->dev,
+                               "Failed to register csiphy%d entity: %d\n",
+                               i, ret);
+                       goto err_reg_csiphy;
+               }
+       }
+
+       for (i = 0; i < camss->res->csid_num; i++) {
+               ret = msm_csid_register_entity(&camss->csid[i],
+                                              &camss->v4l2_dev);
+               if (ret < 0) {
+                       dev_err(camss->dev,
+                               "Failed to register csid%d entity: %d\n",
+                               i, ret);
+                       goto err_reg_csid;
+               }
+       }
+
+       ret = msm_ispif_register_entities(camss->ispif,
+                                         &camss->v4l2_dev);
+       if (ret < 0) {
+               dev_err(camss->dev, "Failed to register ispif entities: %d\n", 
ret);
+               goto err_reg_ispif;
+       }
+
+       for (i = 0; i < camss->res->vfe_num; i++) {
+               ret = msm_vfe_register_entities(&camss->vfe[i],
+                                               &camss->v4l2_dev);
+               if (ret < 0) {
+                       dev_err(camss->dev,
+                               "Failed to register vfe%d entities: %d\n",
+                               i, ret);
+                       goto err_reg_vfe;
+               }
+       }
+
        return 0;
 
-err_link:
-       i = camss->res->vfe_num;
 err_reg_vfe:
        for (i--; i >= 0; i--)
                msm_vfe_unregister_entities(&camss->vfe[i]);
@@ -2212,6 +2221,10 @@ static int camss_probe(struct platform_device *pdev)
        if (ret < 0)
                goto err_v4l2_device_unregister;
 
+       ret = camss->res->link_entities(camss);
+       if (ret < 0)
+               goto err_register_subdevs;
+
        if (num_subdevs) {
                camss->notifier.ops = &camss_subdev_notifier_ops;
 
@@ -2291,6 +2304,7 @@ static const struct camss_resources msm8916_resources = {
        .csiphy_num = ARRAY_SIZE(csiphy_res_8x16),
        .csid_num = ARRAY_SIZE(csid_res_8x16),
        .vfe_num = ARRAY_SIZE(vfe_res_8x16),
+       .link_entities = camss_link_entities
 };
 
 static const struct camss_resources msm8996_resources = {
@@ -2302,6 +2316,7 @@ static const struct camss_resources msm8996_resources = {
        .csiphy_num = ARRAY_SIZE(csiphy_res_8x96),
        .csid_num = ARRAY_SIZE(csid_res_8x96),
        .vfe_num = ARRAY_SIZE(vfe_res_8x96),
+       .link_entities = camss_link_entities
 };
 
 static const struct camss_resources sdm660_resources = {
@@ -2313,6 +2328,7 @@ static const struct camss_resources sdm660_resources = {
        .csiphy_num = ARRAY_SIZE(csiphy_res_660),
        .csid_num = ARRAY_SIZE(csid_res_660),
        .vfe_num = ARRAY_SIZE(vfe_res_660),
+       .link_entities = camss_link_entities
 };
 
 static const struct camss_resources sdm845_resources = {
@@ -2323,6 +2339,7 @@ static const struct camss_resources sdm845_resources = {
        .csiphy_num = ARRAY_SIZE(csiphy_res_845),
        .csid_num = ARRAY_SIZE(csid_res_845),
        .vfe_num = ARRAY_SIZE(vfe_res_845),
+       .link_entities = camss_link_entities
 };
 
 static const struct camss_resources sm8250_resources = {
@@ -2336,6 +2353,7 @@ static const struct camss_resources sm8250_resources = {
        .csiphy_num = ARRAY_SIZE(csiphy_res_8250),
        .csid_num = ARRAY_SIZE(csid_res_8250),
        .vfe_num = ARRAY_SIZE(vfe_res_8250),
+       .link_entities = camss_link_entities
 };
 
 static const struct camss_resources sc8280xp_resources = {
@@ -2350,6 +2368,7 @@ static const struct camss_resources sc8280xp_resources = {
        .csiphy_num = ARRAY_SIZE(csiphy_res_sc8280xp),
        .csid_num = ARRAY_SIZE(csid_res_sc8280xp),
        .vfe_num = ARRAY_SIZE(vfe_res_sc8280xp),
+       .link_entities = camss_link_entities
 };
 
 static const struct of_device_id camss_dt_match[] = {
diff --git a/drivers/media/platform/qcom/camss/camss.h 
b/drivers/media/platform/qcom/camss/camss.h
index 9e73a55a257b..588a52eb2d43 100644
--- a/drivers/media/platform/qcom/camss/camss.h
+++ b/drivers/media/platform/qcom/camss/camss.h
@@ -98,6 +98,7 @@ struct camss_resources {
        const unsigned int csiphy_num;
        const unsigned int csid_num;
        const unsigned int vfe_num;
+       int (*link_entities)(struct camss *camss);
 };
 
 struct camss {

Reply via email to