On Mon Jan 13 10:01:22 2025 +0530, Bryan O'Donoghue wrote:
> A .data field in the csiphy device structure allows us to extend out the
> register layout of the three phase capable CSIPHY layer.
> 
> Move the existing lane configuration structure to an encapsulating
> structure -> struct csiphy_device_regs which is derived from the .data
> field populated at PHY init time, as opposed to calculated at lane
> configuration.
> 
> Reviewed-by: Vladimir Zapolskiy <vladimir.zapols...@linaro.org>
> Signed-off-by: Bryan O'Donoghue <bryan.odonog...@linaro.org>
> Signed-off-by: Depeng Shao <quic_depe...@quicinc.com>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

Patch committed.

Thanks,
Hans Verkuil

 .../platform/qcom/camss/camss-csiphy-3ph-1-0.c     | 54 ++++++++++++----------
 drivers/media/platform/qcom/camss/camss-csiphy.h   |  6 +++
 2 files changed, 36 insertions(+), 24 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c 
b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
index b283df7634bb..39cc7109ccf0 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
@@ -470,32 +470,10 @@ static void csiphy_gen1_config_lanes(struct csiphy_device 
*csiphy,
 static void csiphy_gen2_config_lanes(struct csiphy_device *csiphy,
                                     u8 settle_cnt)
 {
-       const struct csiphy_lane_regs *r;
-       int i, array_size;
+       const struct csiphy_lane_regs *r = csiphy->regs->lane_regs;
+       int i, array_size = csiphy->regs->lane_array_size;
        u32 val;
 
-       switch (csiphy->camss->res->version) {
-       case CAMSS_7280:
-               r = &lane_regs_sm8250[0];
-               array_size = ARRAY_SIZE(lane_regs_sm8250);
-               break;
-       case CAMSS_8250:
-               r = &lane_regs_sm8250[0];
-               array_size = ARRAY_SIZE(lane_regs_sm8250);
-               break;
-       case CAMSS_8280XP:
-               r = &lane_regs_sc8280xp[0];
-               array_size = ARRAY_SIZE(lane_regs_sc8280xp);
-               break;
-       case CAMSS_845:
-               r = &lane_regs_sdm845[0];
-               array_size = ARRAY_SIZE(lane_regs_sdm845);
-               break;
-       default:
-               WARN(1, "unknown cspi version\n");
-               return;
-       }
-
        for (i = 0; i < array_size; i++, r++) {
                switch (r->csiphy_param_type) {
                case CSIPHY_SETTLE_CNT_LOWER_BYTE:
@@ -588,6 +566,34 @@ static void csiphy_lanes_disable(struct csiphy_device 
*csiphy,
 
 static int csiphy_init(struct csiphy_device *csiphy)
 {
+       struct device *dev = csiphy->camss->dev;
+       struct csiphy_device_regs *regs;
+
+       regs = devm_kmalloc(dev, sizeof(*regs), GFP_KERNEL);
+       if (!regs)
+               return -ENOMEM;
+
+       csiphy->regs = regs;
+
+       switch (csiphy->camss->res->version) {
+       case CAMSS_845:
+               regs->lane_regs = &lane_regs_sdm845[0];
+               regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
+               break;
+       case CAMSS_7280:
+       case CAMSS_8250:
+               regs->lane_regs = &lane_regs_sm8250[0];
+               regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8250);
+               break;
+       case CAMSS_8280XP:
+               regs->lane_regs = &lane_regs_sc8280xp[0];
+               regs->lane_array_size = ARRAY_SIZE(lane_regs_sc8280xp);
+               break;
+       default:
+               WARN(1, "unknown csiphy version\n");
+               return -ENODEV;
+       }
+
        return 0;
 }
 
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h 
b/drivers/media/platform/qcom/camss/camss-csiphy.h
index 49393dfd5215..4d731597fed7 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.h
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.h
@@ -85,6 +85,11 @@ struct csiphy_subdev_resources {
        const struct csiphy_formats *formats;
 };
 
+struct csiphy_device_regs {
+       const struct csiphy_lane_regs *lane_regs;
+       int lane_array_size;
+};
+
 struct csiphy_device {
        struct camss *camss;
        u8 id;
@@ -103,6 +108,7 @@ struct csiphy_device {
        struct csiphy_config cfg;
        struct v4l2_mbus_framefmt fmt[MSM_CSIPHY_PADS_NUM];
        const struct csiphy_subdev_resources *res;
+       struct csiphy_device_regs *regs;
 };
 
 struct camss_subdev_resources;

Reply via email to