media: ov13858: Set default fps as current fps
authorChiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
Thu, 27 Jul 2017 07:28:05 +0000 (03:28 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 9 Aug 2017 15:17:45 +0000 (11:17 -0400)
On format change, sometimes, sensor was streaming at a much higher
FPS than the default. This was resulting in various problems like
frame drops/corruption.

Upon format change, set default vblank as current vblank. This will
ensure that sensor will start streaming at default fps.

Signed-off-by: Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/i2c/ov13858.c

index 86550d8..8e6c8f0 100644 (file)
@@ -1377,6 +1377,7 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
        struct ov13858 *ov13858 = to_ov13858(sd);
        const struct ov13858_mode *mode;
        struct v4l2_mbus_framefmt *framefmt;
+       s32 vblank_def;
        s64 h_blank;
 
        mutex_lock(&ov13858->mutex);
@@ -1397,10 +1398,12 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
                        ov13858->pixel_rate,
                        link_freq_configs[mode->link_freq_index].pixel_rate);
                /* Update limits and set FPS to default */
+               vblank_def = ov13858->cur_mode->vts - ov13858->cur_mode->height;
                __v4l2_ctrl_modify_range(
                        ov13858->vblank, OV13858_VBLANK_MIN,
                        OV13858_VTS_MAX - ov13858->cur_mode->height, 1,
-                       ov13858->cur_mode->vts - ov13858->cur_mode->height);
+                       vblank_def);
+               __v4l2_ctrl_s_ctrl(ov13858->vblank, vblank_def);
                h_blank =
                        link_freq_configs[mode->link_freq_index].pixels_per_line
                         - ov13858->cur_mode->width;