@@ -452,9 +452,8 @@ static const struct imx415_clk_params imx415_clk_params[] = {
452
452
},
453
453
};
454
454
455
- /* all-pixel 2-lane 720 Mbps 15.74 Hz mode */
456
- static const struct cci_reg_sequence imx415_mode_2_720 [] = {
457
- { IMX415_LANEMODE , IMX415_LANEMODE_2 },
455
+ /* 720 Mbps CSI configuration */
456
+ static const struct cci_reg_sequence imx415_linkrate_720mbps [] = {
458
457
{ IMX415_TCLKPOST , 0x006F },
459
458
{ IMX415_TCLKPREPARE , 0x002F },
460
459
{ IMX415_TCLKTRAIL , 0x002F },
@@ -466,9 +465,8 @@ static const struct cci_reg_sequence imx415_mode_2_720[] = {
466
465
{ IMX415_TLPX , 0x0027 },
467
466
};
468
467
469
- /* all-pixel 2-lane 1440 Mbps 30.01 Hz mode */
470
- static const struct cci_reg_sequence imx415_mode_2_1440 [] = {
471
- { IMX415_LANEMODE , IMX415_LANEMODE_2 },
468
+ /* 1440 Mbps CSI configuration */
469
+ static const struct cci_reg_sequence imx415_linkrate_1440mbps [] = {
472
470
{ IMX415_TCLKPOST , 0x009F },
473
471
{ IMX415_TCLKPREPARE , 0x0057 },
474
472
{ IMX415_TCLKTRAIL , 0x0057 },
@@ -480,9 +478,8 @@ static const struct cci_reg_sequence imx415_mode_2_1440[] = {
480
478
{ IMX415_TLPX , 0x004F },
481
479
};
482
480
483
- /* all-pixel 4-lane 891 Mbps 30 Hz mode */
484
- static const struct cci_reg_sequence imx415_mode_4_891 [] = {
485
- { IMX415_LANEMODE , IMX415_LANEMODE_4 },
481
+ /* 891 Mbps CSI configuration */
482
+ static const struct cci_reg_sequence imx415_linkrate_891mbps [] = {
486
483
{ IMX415_TCLKPOST , 0x007F },
487
484
{ IMX415_TCLKPREPARE , 0x0037 },
488
485
{ IMX415_TCLKTRAIL , 0x0037 },
@@ -501,38 +498,34 @@ struct imx415_mode_reg_list {
501
498
502
499
struct imx415_mode {
503
500
u64 lane_rate ;
504
- u32 lanes ;
505
- u32 hmax_min ;
501
+ u32 hmax_min [2 ];
506
502
struct imx415_mode_reg_list reg_list ;
507
503
};
508
504
509
505
/* mode configs */
510
506
static const struct imx415_mode supported_modes [] = {
511
507
{
512
508
.lane_rate = 720000000 ,
513
- .lanes = 2 ,
514
- .hmax_min = 2032 ,
509
+ .hmax_min = { 2032 , 1066 },
515
510
.reg_list = {
516
- .num_of_regs = ARRAY_SIZE (imx415_mode_2_720 ),
517
- .regs = imx415_mode_2_720 ,
511
+ .num_of_regs = ARRAY_SIZE (imx415_linkrate_720mbps ),
512
+ .regs = imx415_linkrate_720mbps ,
518
513
},
519
514
},
520
515
{
521
516
.lane_rate = 1440000000 ,
522
- .lanes = 2 ,
523
- .hmax_min = 1066 ,
517
+ .hmax_min = { 1066 , 533 },
524
518
.reg_list = {
525
- .num_of_regs = ARRAY_SIZE (imx415_mode_2_1440 ),
526
- .regs = imx415_mode_2_1440 ,
519
+ .num_of_regs = ARRAY_SIZE (imx415_linkrate_1440mbps ),
520
+ .regs = imx415_linkrate_1440mbps ,
527
521
},
528
522
},
529
523
{
530
524
.lane_rate = 891000000 ,
531
- .lanes = 4 ,
532
- .hmax_min = 1100 ,
525
+ .hmax_min = { 1100 , 550 },
533
526
.reg_list = {
534
- .num_of_regs = ARRAY_SIZE (imx415_mode_4_891 ),
535
- .regs = imx415_mode_4_891 ,
527
+ .num_of_regs = ARRAY_SIZE (imx415_linkrate_891mbps ),
528
+ .regs = imx415_linkrate_891mbps ,
536
529
},
537
530
},
538
531
};
@@ -823,7 +816,7 @@ static int imx415_ctrls_init(struct imx415 *sensor)
823
816
IMX415_AGAIN_MAX , IMX415_AGAIN_STEP ,
824
817
IMX415_AGAIN_MIN );
825
818
826
- hblank_min = (supported_modes [sensor -> cur_mode ].hmax_min *
819
+ hblank_min = (supported_modes [sensor -> cur_mode ].hmax_min [ sensor -> num_data_lanes == 2 ? 0 : 1 ] *
827
820
IMX415_HMAX_MULTIPLIER ) - IMX415_PIXEL_ARRAY_WIDTH ;
828
821
hblank_max = (IMX415_HMAX_MAX * IMX415_HMAX_MULTIPLIER ) -
829
822
IMX415_PIXEL_ARRAY_WIDTH ;
@@ -885,7 +878,12 @@ static int imx415_set_mode(struct imx415 *sensor, int mode)
885
878
IMX415_NUM_CLK_PARAM_REGS ,
886
879
& ret );
887
880
888
- return 0 ;
881
+ ret = cci_write (sensor -> regmap , IMX415_LANEMODE ,
882
+ sensor -> num_data_lanes == 2 ? IMX415_LANEMODE_2 :
883
+ IMX415_LANEMODE_4 ,
884
+ NULL );
885
+
886
+ return ret ;
889
887
}
890
888
891
889
static int imx415_setup (struct imx415 * sensor , struct v4l2_subdev_state * state )
@@ -1297,8 +1295,6 @@ static int imx415_parse_hw_config(struct imx415 *sensor)
1297
1295
}
1298
1296
1299
1297
for (j = 0 ; j < ARRAY_SIZE (supported_modes ); ++ j ) {
1300
- if (sensor -> num_data_lanes != supported_modes [j ].lanes )
1301
- continue ;
1302
1298
if (bus_cfg .link_frequencies [i ] * 2 !=
1303
1299
supported_modes [j ].lane_rate )
1304
1300
continue ;
0 commit comments