On 09/11/2025 09:39, David Heidelberg via B4 Relay wrote:
From: Petr Hodina <[email protected]>

The lanes must not be initialized before the driver has access to
the lane configuration, as it depends on whether D-PHY or C-PHY mode
is in use. Move the lane initialization to a later stage where the
configuration structures are available.

Signed-off-by: Petr Hodina <[email protected]>
Signed-off-by: David Heidelberg <[email protected]>
---
  .../platform/qcom/camss/camss-csiphy-3ph-1-0.c     | 70 ++++++++++++----------
  1 file changed, 37 insertions(+), 33 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 348b8cd18327e..c2adbde6b4e0d 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
@@ -1101,6 +1101,42 @@ static void csiphy_lanes_enable(struct csiphy_device 
*csiphy,
        u8 val;
        int i;
+ 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_2290:
+               regs->lane_regs = &lane_regs_qcm2290[0];
+               regs->lane_array_size = ARRAY_SIZE(lane_regs_qcm2290);
+               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;
+       case CAMSS_X1E80100:
+       case CAMSS_8550:
+               regs->offset = 0x1000;
+               break;
+       case CAMSS_8650:
+               regs->lane_regs = &lane_regs_sm8650[0];
+               regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8650);
+               regs->offset = 0x1000;
+               break;
+       case CAMSS_8300:
+       case CAMSS_8775P:
+               regs->lane_regs = &lane_regs_sa8775p[0];
+               regs->lane_array_size = ARRAY_SIZE(lane_regs_sa8775p);
+               break;
+       default:
+               break;
+       }
+
        settle_cnt = csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate);
if (c->cphy) {
@@ -1160,47 +1196,15 @@ static int csiphy_init(struct csiphy_device *csiphy)
                return -ENOMEM;
csiphy->regs = regs;
-       regs->offset = 0x800;
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_2290:
-               regs->lane_regs = &lane_regs_qcm2290[0];
-               regs->lane_array_size = ARRAY_SIZE(lane_regs_qcm2290);
-               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;
        case CAMSS_X1E80100:
-               regs->lane_regs = &lane_regs_x1e80100[0];
-               regs->lane_array_size = ARRAY_SIZE(lane_regs_x1e80100);
-               regs->offset = 0x1000;
-               break;
        case CAMSS_8550:
-               regs->lane_regs = &lane_regs_sm8550[0];
-               regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8550);
-               regs->offset = 0x1000;
-               break;
        case CAMSS_8650:
-               regs->lane_regs = &lane_regs_sm8650[0];
-               regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8650);
                regs->offset = 0x1000;
                break;
-       case CAMSS_8300:
-       case CAMSS_8775P:
-               regs->lane_regs = &lane_regs_sa8775p[0];
-               regs->lane_array_size = ARRAY_SIZE(lane_regs_sa8775p);
-               break;
        default:
+               regs->offset = 0x800;
                break;
        }

Agreement in principle.

Reviewed-by: Bryan O'Donoghue <[email protected]>

Reply via email to