@@ -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 ;
@@ -833,14 +831,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
833
831
.width = 4056 ,
834
832
.height = 3040 ,
835
833
},
836
- .timeperframe_min = {
837
- .numerator = 100 ,
838
- .denominator = 1000
839
- },
840
- .timeperframe_default = {
841
- .numerator = 100 ,
842
- .denominator = 1000
843
- },
834
+ .framerate_default = 10 ,
844
835
.reg_list = {
845
836
.num_of_regs = ARRAY_SIZE (mode_4056x3040_regs ),
846
837
.regs = mode_4056x3040_regs ,
@@ -857,14 +848,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
857
848
.width = 4056 ,
858
849
.height = 3040 ,
859
850
},
860
- .timeperframe_min = {
861
- .numerator = 100 ,
862
- .denominator = 4000
863
- },
864
- .timeperframe_default = {
865
- .numerator = 100 ,
866
- .denominator = 3000
867
- },
851
+ .framerate_default = 30 ,
868
852
.reg_list = {
869
853
.num_of_regs = ARRAY_SIZE (mode_2028x1520_regs ),
870
854
.regs = mode_2028x1520_regs ,
@@ -881,14 +865,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
881
865
.width = 4056 ,
882
866
.height = 2160 ,
883
867
},
884
- .timeperframe_min = {
885
- .numerator = 100 ,
886
- .denominator = 5000
887
- },
888
- .timeperframe_default = {
889
- .numerator = 100 ,
890
- .denominator = 3000
891
- },
868
+ .framerate_default = 30 ,
892
869
.reg_list = {
893
870
.num_of_regs = ARRAY_SIZE (mode_2028x1080_regs ),
894
871
.regs = mode_2028x1080_regs ,
@@ -916,14 +893,7 @@ static const struct imx477_mode supported_modes_10bit[] = {
916
893
.width = 2664 ,
917
894
.height = 1980 ,
918
895
},
919
- .timeperframe_min = {
920
- .numerator = 100 ,
921
- .denominator = 12000
922
- },
923
- .timeperframe_default = {
924
- .numerator = 100 ,
925
- .denominator = 12000
926
- },
896
+ .framerate_default = 120 ,
927
897
.reg_list = {
928
898
.num_of_regs = ARRAY_SIZE (mode_1332x990_regs ),
929
899
.regs = mode_1332x990_regs ,
@@ -1459,13 +1429,13 @@ static int imx477_get_pad_format(struct v4l2_subdev *sd,
1459
1429
1460
1430
static
1461
1431
unsigned int imx477_get_frame_length (const struct imx477_mode * mode ,
1462
- const struct v4l2_fract * timeperframe )
1432
+ unsigned int framerate_default )
1463
1433
{
1464
1434
u64 frame_length ;
1465
1435
1466
- frame_length = ( u64 ) timeperframe -> numerator * IMX477_PIXEL_RATE ;
1436
+ frame_length = IMX477_PIXEL_RATE ;
1467
1437
do_div (frame_length ,
1468
- (u64 )timeperframe -> denominator * mode -> line_length_pix );
1438
+ (u64 )framerate_default * mode -> line_length_pix );
1469
1439
1470
1440
if (WARN_ON (frame_length > IMX477_FRAME_LENGTH_MAX ))
1471
1441
frame_length = IMX477_FRAME_LENGTH_MAX ;
@@ -1475,21 +1445,20 @@ unsigned int imx477_get_frame_length(const struct imx477_mode *mode,
1475
1445
1476
1446
static void imx477_set_framing_limits (struct imx477 * imx477 )
1477
1447
{
1478
- unsigned int frm_length_min , frm_length_default , hblank_min ;
1448
+ unsigned int frm_length_default , hblank_min ;
1479
1449
const struct imx477_mode * mode = imx477 -> mode ;
1480
1450
1481
- frm_length_min = imx477_get_frame_length (mode , & mode -> timeperframe_min );
1482
1451
frm_length_default =
1483
- imx477_get_frame_length (mode , & mode -> timeperframe_default );
1452
+ imx477_get_frame_length (mode , mode -> framerate_default );
1484
1453
1485
1454
/* Default to no long exposure multiplier. */
1486
1455
imx477 -> long_exp_shift = 0 ;
1487
1456
1488
1457
/* Update limits and set FPS to default */
1489
- __v4l2_ctrl_modify_range (imx477 -> vblank , frm_length_min - mode -> height ,
1458
+ __v4l2_ctrl_modify_range (imx477 -> vblank , 1 ,
1490
1459
((1 << IMX477_LONG_EXP_SHIFT_MAX ) *
1491
1460
IMX477_FRAME_LENGTH_MAX ) - mode -> height ,
1492
- 1 , frm_length_default - mode -> height );
1461
+ IMX477_VBLANK_MIN , frm_length_default - mode -> height );
1493
1462
1494
1463
/* Setting this will adjust the exposure limits as well. */
1495
1464
__v4l2_ctrl_s_ctrl (imx477 -> vblank , frm_length_default - mode -> height );
0 commit comments