@@ -53,6 +53,7 @@ MODULE_PARM_DESC(trigger_mode, "Set vsync trigger mode: 1=source, 2=sink");
53
53
/* V_TIMING internal */
54
54
#define IMX477_REG_FRAME_LENGTH 0x0340
55
55
#define IMX477_FRAME_LENGTH_MAX 0xffdc
56
+ #define IMX477_VBLANK_MIN 4
56
57
57
58
/* H_TIMING internal */
58
59
#define IMX477_REG_LINE_LENGTH 0x0342
@@ -154,11 +155,8 @@ struct imx477_mode {
154
155
/* Analog crop rectangle. */
155
156
struct v4l2_rect crop ;
156
157
157
- /* Highest possible framerate. */
158
- struct v4l2_fract timeperframe_min ;
159
-
160
158
/* Default framerate. */
161
- struct v4l2_fract timeperframe_default ;
159
+ unsigned int framerate_default ;
162
160
163
161
/* Default register values */
164
162
struct imx477_reg_list reg_list ;
@@ -866,14 +864,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
866
864
.width = 4056 ,
867
865
.height = 3040 ,
868
866
},
869
- .timeperframe_min = {
870
- .numerator = 100 ,
871
- .denominator = 1000
872
- },
873
- .timeperframe_default = {
874
- .numerator = 100 ,
875
- .denominator = 1000
876
- },
867
+ .framerate_default = 10 ,
877
868
.reg_list = {
878
869
.num_of_regs = ARRAY_SIZE (mode_4056x3040_regs ),
879
870
.regs = mode_4056x3040_regs ,
@@ -890,14 +881,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
890
881
.width = 4056 ,
891
882
.height = 3040 ,
892
883
},
893
- .timeperframe_min = {
894
- .numerator = 100 ,
895
- .denominator = 4000
896
- },
897
- .timeperframe_default = {
898
- .numerator = 100 ,
899
- .denominator = 3000
900
- },
884
+ .framerate_default = 30 ,
901
885
.reg_list = {
902
886
.num_of_regs = ARRAY_SIZE (mode_2028x1520_regs ),
903
887
.regs = mode_2028x1520_regs ,
@@ -914,14 +898,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
914
898
.width = 4056 ,
915
899
.height = 2160 ,
916
900
},
917
- .timeperframe_min = {
918
- .numerator = 100 ,
919
- .denominator = 5000
920
- },
921
- .timeperframe_default = {
922
- .numerator = 100 ,
923
- .denominator = 3000
924
- },
901
+ .framerate_default = 30 ,
925
902
.reg_list = {
926
903
.num_of_regs = ARRAY_SIZE (mode_2028x1080_regs ),
927
904
.regs = mode_2028x1080_regs ,
@@ -949,14 +926,7 @@ static const struct imx477_mode supported_modes_10bit[] = {
949
926
.width = 2664 ,
950
927
.height = 1980 ,
951
928
},
952
- .timeperframe_min = {
953
- .numerator = 100 ,
954
- .denominator = 12000
955
- },
956
- .timeperframe_default = {
957
- .numerator = 100 ,
958
- .denominator = 12000
959
- },
929
+ .framerate_default = 120 ,
960
930
.reg_list = {
961
931
.num_of_regs = ARRAY_SIZE (mode_1332x990_regs ),
962
932
.regs = mode_1332x990_regs ,
@@ -1492,13 +1462,13 @@ static int imx477_get_pad_format(struct v4l2_subdev *sd,
1492
1462
1493
1463
static
1494
1464
unsigned int imx477_get_frame_length (const struct imx477_mode * mode ,
1495
- const struct v4l2_fract * timeperframe )
1465
+ unsigned int framerate_default )
1496
1466
{
1497
1467
u64 frame_length ;
1498
1468
1499
- frame_length = ( u64 ) timeperframe -> numerator * IMX477_PIXEL_RATE ;
1469
+ frame_length = IMX477_PIXEL_RATE ;
1500
1470
do_div (frame_length ,
1501
- (u64 )timeperframe -> denominator * mode -> line_length_pix );
1471
+ (u64 )framerate_default * mode -> line_length_pix );
1502
1472
1503
1473
if (WARN_ON (frame_length > IMX477_FRAME_LENGTH_MAX ))
1504
1474
frame_length = IMX477_FRAME_LENGTH_MAX ;
@@ -1508,21 +1478,20 @@ unsigned int imx477_get_frame_length(const struct imx477_mode *mode,
1508
1478
1509
1479
static void imx477_set_framing_limits (struct imx477 * imx477 )
1510
1480
{
1511
- unsigned int frm_length_min , frm_length_default , hblank_min ;
1481
+ unsigned int frm_length_default , hblank_min ;
1512
1482
const struct imx477_mode * mode = imx477 -> mode ;
1513
1483
1514
- frm_length_min = imx477_get_frame_length (mode , & mode -> timeperframe_min );
1515
1484
frm_length_default =
1516
- imx477_get_frame_length (mode , & mode -> timeperframe_default );
1485
+ imx477_get_frame_length (mode , mode -> framerate_default );
1517
1486
1518
1487
/* Default to no long exposure multiplier. */
1519
1488
imx477 -> long_exp_shift = 0 ;
1520
1489
1521
1490
/* Update limits and set FPS to default */
1522
- __v4l2_ctrl_modify_range (imx477 -> vblank , frm_length_min - mode -> height ,
1491
+ __v4l2_ctrl_modify_range (imx477 -> vblank , 1 ,
1523
1492
((1 << IMX477_LONG_EXP_SHIFT_MAX ) *
1524
1493
IMX477_FRAME_LENGTH_MAX ) - mode -> height ,
1525
- 1 , frm_length_default - mode -> height );
1494
+ IMX477_VBLANK_MIN , frm_length_default - mode -> height );
1526
1495
1527
1496
/* Setting this will adjust the exposure limits as well. */
1528
1497
__v4l2_ctrl_s_ctrl (imx477 -> vblank , frm_length_default - mode -> height );
0 commit comments