aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/i2c/soc_camera/mt9v022.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/i2c/soc_camera/mt9v022.c')
-rw-r--r--drivers/media/i2c/soc_camera/mt9v022.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/media/i2c/soc_camera/mt9v022.c b/drivers/media/i2c/soc_camera/mt9v022.c
index a5e65d6a0781..53eaf899d3b6 100644
--- a/drivers/media/i2c/soc_camera/mt9v022.c
+++ b/drivers/media/i2c/soc_camera/mt9v022.c
@@ -275,6 +275,7 @@ static int mt9v022_s_crop(struct v4l2_subdev *sd, const struct v4l2_crop *a)
275 struct i2c_client *client = v4l2_get_subdevdata(sd); 275 struct i2c_client *client = v4l2_get_subdevdata(sd);
276 struct mt9v022 *mt9v022 = to_mt9v022(client); 276 struct mt9v022 *mt9v022 = to_mt9v022(client);
277 struct v4l2_rect rect = a->c; 277 struct v4l2_rect rect = a->c;
278 int min_row, min_blank;
278 int ret; 279 int ret;
279 280
280 /* Bayer format - even size lengths */ 281 /* Bayer format - even size lengths */
@@ -310,13 +311,21 @@ static int mt9v022_s_crop(struct v4l2_subdev *sd, const struct v4l2_crop *a)
310 ret = reg_write(client, MT9V022_COLUMN_START, rect.left); 311 ret = reg_write(client, MT9V022_COLUMN_START, rect.left);
311 if (!ret) 312 if (!ret)
312 ret = reg_write(client, MT9V022_ROW_START, rect.top); 313 ret = reg_write(client, MT9V022_ROW_START, rect.top);
314 /*
315 * mt9v022: min total row time is 660 columns, min blanking is 43
316 * mt9v024: min total row time is 690 columns, min blanking is 61
317 */
318 if (is_mt9v024(mt9v022->chip_version)) {
319 min_row = 690;
320 min_blank = 61;
321 } else {
322 min_row = 660;
323 min_blank = 43;
324 }
313 if (!ret) 325 if (!ret)
314 /*
315 * Default 94, Phytec driver says:
316 * "width + horizontal blank >= 660"
317 */
318 ret = v4l2_ctrl_s_ctrl(mt9v022->hblank, 326 ret = v4l2_ctrl_s_ctrl(mt9v022->hblank,
319 rect.width > 660 - 43 ? 43 : 660 - rect.width); 327 rect.width > min_row - min_blank ?
328 min_blank : min_row - rect.width);
320 if (!ret) 329 if (!ret)
321 ret = v4l2_ctrl_s_ctrl(mt9v022->vblank, 45); 330 ret = v4l2_ctrl_s_ctrl(mt9v022->vblank, 45);
322 if (!ret) 331 if (!ret)