@@ -462,9 +462,8 @@ static const struct imx415_clk_params imx415_clk_params[] = {
462
462
},
463
463
};
464
464
465
- /* all-pixel 2-lane 720 Mbps 15.74 Hz mode */
466
- static const struct imx415_reg imx415_mode_2_720 [] = {
467
- { IMX415_LANEMODE , IMX415_LANEMODE_2 },
465
+ /* 720 Mbps CSI configuration */
466
+ static const struct imx415_reg imx415_linkrate_720mbps [] = {
468
467
{ IMX415_TCLKPOST , 0x006F },
469
468
{ IMX415_TCLKPREPARE , 0x002F },
470
469
{ IMX415_TCLKTRAIL , 0x002F },
@@ -476,9 +475,8 @@ static const struct imx415_reg imx415_mode_2_720[] = {
476
475
{ IMX415_TLPX , 0x0027 },
477
476
};
478
477
479
- /* all-pixel 2-lane 1440 Mbps 30.01 Hz mode */
480
- static const struct imx415_reg imx415_mode_2_1440 [] = {
481
- { IMX415_LANEMODE , IMX415_LANEMODE_2 },
478
+ /* 1440 Mbps CSI configuration */
479
+ static const struct imx415_reg imx415_linkrate_1440mbps [] = {
482
480
{ IMX415_TCLKPOST , 0x009F },
483
481
{ IMX415_TCLKPREPARE , 0x0057 },
484
482
{ IMX415_TCLKTRAIL , 0x0057 },
@@ -490,9 +488,8 @@ static const struct imx415_reg imx415_mode_2_1440[] = {
490
488
{ IMX415_TLPX , 0x004F },
491
489
};
492
490
493
- /* all-pixel 4-lane 891 Mbps 30 Hz mode */
494
- static const struct imx415_reg imx415_mode_4_891 [] = {
495
- { IMX415_LANEMODE , IMX415_LANEMODE_4 },
491
+ /* 891 Mbps */
492
+ static const struct imx415_reg imx415_linkrate_891mbps [] = {
496
493
{ IMX415_TCLKPOST , 0x007F },
497
494
{ IMX415_TCLKPREPARE , 0x0037 },
498
495
{ IMX415_TCLKTRAIL , 0x0037 },
@@ -511,38 +508,34 @@ struct imx415_mode_reg_list {
511
508
512
509
struct imx415_mode {
513
510
u64 lane_rate ;
514
- u32 lanes ;
515
- u32 hmax_min ;
511
+ u32 hmax_min [2 ];
516
512
struct imx415_mode_reg_list reg_list ;
517
513
};
518
514
519
515
/* mode configs */
520
516
static const struct imx415_mode supported_modes [] = {
521
517
{
522
518
.lane_rate = 720000000 ,
523
- .lanes = 2 ,
524
- .hmax_min = 2032 ,
519
+ .hmax_min = { 2032 , 1066 },
525
520
.reg_list = {
526
- .num_of_regs = ARRAY_SIZE (imx415_mode_2_720 ),
527
- .regs = imx415_mode_2_720 ,
521
+ .num_of_regs = ARRAY_SIZE (imx415_linkrate_720mbps ),
522
+ .regs = imx415_linkrate_720mbps ,
528
523
},
529
524
},
530
525
{
531
526
.lane_rate = 1440000000 ,
532
- .lanes = 2 ,
533
- .hmax_min = 1066 ,
527
+ .hmax_min = { 1066 , 533 },
534
528
.reg_list = {
535
- .num_of_regs = ARRAY_SIZE (imx415_mode_2_1440 ),
536
- .regs = imx415_mode_2_1440 ,
529
+ .num_of_regs = ARRAY_SIZE (imx415_linkrate_1440mbps ),
530
+ .regs = imx415_linkrate_1440mbps ,
537
531
},
538
532
},
539
533
{
540
534
.lane_rate = 891000000 ,
541
- .lanes = 4 ,
542
- .hmax_min = 1100 ,
535
+ .hmax_min = { 1100 , 550 },
543
536
.reg_list = {
544
- .num_of_regs = ARRAY_SIZE (imx415_mode_4_891 ),
545
- .regs = imx415_mode_4_891 ,
537
+ .num_of_regs = ARRAY_SIZE (imx415_linkrate_891mbps ),
538
+ .regs = imx415_linkrate_891mbps ,
546
539
},
547
540
},
548
541
};
@@ -876,7 +869,7 @@ static int imx415_ctrls_init(struct imx415 *sensor)
876
869
IMX415_AGAIN_MAX , IMX415_AGAIN_STEP ,
877
870
IMX415_AGAIN_MIN );
878
871
879
- hblank_min = (supported_modes [sensor -> cur_mode ].hmax_min *
872
+ hblank_min = (supported_modes [sensor -> cur_mode ].hmax_min [ sensor -> num_data_lanes == 2 ? 0 : 1 ] *
880
873
IMX415_HMAX_MULTIPLIER ) - IMX415_PIXEL_ARRAY_WIDTH ;
881
874
hblank_max = (IMX415_HMAX_MAX * IMX415_HMAX_MULTIPLIER ) -
882
875
IMX415_PIXEL_ARRAY_WIDTH ;
@@ -944,7 +937,11 @@ static int imx415_set_mode(struct imx415 *sensor, int mode)
944
937
return ret ;
945
938
}
946
939
947
- return 0 ;
940
+ ret = imx415_write (sensor , IMX415_LANEMODE ,
941
+ sensor -> num_data_lanes == 2 ? IMX415_LANEMODE_2 :
942
+ IMX415_LANEMODE_4 );
943
+
944
+ return ret ;
948
945
}
949
946
950
947
static int imx415_setup (struct imx415 * sensor , struct v4l2_subdev_state * state )
@@ -1373,8 +1370,6 @@ static int imx415_parse_hw_config(struct imx415 *sensor)
1373
1370
}
1374
1371
1375
1372
for (j = 0 ; j < ARRAY_SIZE (supported_modes ); ++ j ) {
1376
- if (sensor -> num_data_lanes != supported_modes [j ].lanes )
1377
- continue ;
1378
1373
if (bus_cfg .link_frequencies [i ] * 2 !=
1379
1374
supported_modes [j ].lane_rate )
1380
1375
continue ;
0 commit comments