@@ -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 ;
@@ -795,14 +793,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
795
793
.width = 4056 ,
796
794
.height = 3040 ,
797
795
},
798
- .timeperframe_min = {
799
- .numerator = 100 ,
800
- .denominator = 1000
801
- },
802
- .timeperframe_default = {
803
- .numerator = 100 ,
804
- .denominator = 1000
805
- },
796
+ .framerate_default = 10 ,
806
797
.reg_list = {
807
798
.num_of_regs = ARRAY_SIZE (mode_4056x3040_regs ),
808
799
.regs = mode_4056x3040_regs ,
@@ -819,14 +810,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
819
810
.width = 4056 ,
820
811
.height = 3040 ,
821
812
},
822
- .timeperframe_min = {
823
- .numerator = 100 ,
824
- .denominator = 4000
825
- },
826
- .timeperframe_default = {
827
- .numerator = 100 ,
828
- .denominator = 3000
829
- },
813
+ .framerate_default = 30 ,
830
814
.reg_list = {
831
815
.num_of_regs = ARRAY_SIZE (mode_2028x1520_regs ),
832
816
.regs = mode_2028x1520_regs ,
@@ -843,14 +827,7 @@ static const struct imx477_mode supported_modes_12bit[] = {
843
827
.width = 4056 ,
844
828
.height = 2160 ,
845
829
},
846
- .timeperframe_min = {
847
- .numerator = 100 ,
848
- .denominator = 5000
849
- },
850
- .timeperframe_default = {
851
- .numerator = 100 ,
852
- .denominator = 3000
853
- },
830
+ .framerate_default = 30 ,
854
831
.reg_list = {
855
832
.num_of_regs = ARRAY_SIZE (mode_2028x1080_regs ),
856
833
.regs = mode_2028x1080_regs ,
@@ -878,14 +855,7 @@ static const struct imx477_mode supported_modes_10bit[] = {
878
855
.width = 2664 ,
879
856
.height = 1980 ,
880
857
},
881
- .timeperframe_min = {
882
- .numerator = 100 ,
883
- .denominator = 12000
884
- },
885
- .timeperframe_default = {
886
- .numerator = 100 ,
887
- .denominator = 12000
888
- },
858
+ .framerate_default = 120 ,
889
859
.reg_list = {
890
860
.num_of_regs = ARRAY_SIZE (mode_1332x990_regs ),
891
861
.regs = mode_1332x990_regs ,
@@ -1419,13 +1389,13 @@ static int imx477_get_pad_format(struct v4l2_subdev *sd,
1419
1389
1420
1390
static
1421
1391
unsigned int imx477_get_frame_length (const struct imx477_mode * mode ,
1422
- const struct v4l2_fract * timeperframe )
1392
+ unsigned int framerate_default )
1423
1393
{
1424
1394
u64 frame_length ;
1425
1395
1426
- frame_length = ( u64 ) timeperframe -> numerator * IMX477_PIXEL_RATE ;
1396
+ frame_length = IMX477_PIXEL_RATE ;
1427
1397
do_div (frame_length ,
1428
- (u64 )timeperframe -> denominator * mode -> line_length_pix );
1398
+ (u64 )framerate_default * mode -> line_length_pix );
1429
1399
1430
1400
if (WARN_ON (frame_length > IMX477_FRAME_LENGTH_MAX ))
1431
1401
frame_length = IMX477_FRAME_LENGTH_MAX ;
@@ -1435,21 +1405,20 @@ unsigned int imx477_get_frame_length(const struct imx477_mode *mode,
1435
1405
1436
1406
static void imx477_set_framing_limits (struct imx477 * imx477 )
1437
1407
{
1438
- unsigned int frm_length_min , frm_length_default , hblank_min ;
1408
+ unsigned int frm_length_default , hblank_min ;
1439
1409
const struct imx477_mode * mode = imx477 -> mode ;
1440
1410
1441
- frm_length_min = imx477_get_frame_length (mode , & mode -> timeperframe_min );
1442
1411
frm_length_default =
1443
- imx477_get_frame_length (mode , & mode -> timeperframe_default );
1412
+ imx477_get_frame_length (mode , mode -> framerate_default );
1444
1413
1445
1414
/* Default to no long exposure multiplier. */
1446
1415
imx477 -> long_exp_shift = 0 ;
1447
1416
1448
1417
/* Update limits and set FPS to default */
1449
- __v4l2_ctrl_modify_range (imx477 -> vblank , frm_length_min - mode -> height ,
1418
+ __v4l2_ctrl_modify_range (imx477 -> vblank , 1 ,
1450
1419
((1 << IMX477_LONG_EXP_SHIFT_MAX ) *
1451
1420
IMX477_FRAME_LENGTH_MAX ) - mode -> height ,
1452
- 1 , frm_length_default - mode -> height );
1421
+ IMX477_VBLANK_MIN , frm_length_default - mode -> height );
1453
1422
1454
1423
/* Setting this will adjust the exposure limits as well. */
1455
1424
__v4l2_ctrl_s_ctrl (imx477 -> vblank , frm_length_default - mode -> height );
0 commit comments