diff options
Diffstat (limited to 'drivers/media/i2c/soc_camera/mt9v022.c')
-rw-r--r-- | drivers/media/i2c/soc_camera/mt9v022.c | 19 |
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) |