diff options
Diffstat (limited to 'drivers/media/video/mt9m001.c')
-rw-r--r-- | drivers/media/video/mt9m001.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c index 2a73dac11d37..8b36a74b1be0 100644 --- a/drivers/media/video/mt9m001.c +++ b/drivers/media/video/mt9m001.c | |||
@@ -240,8 +240,8 @@ static int mt9m001_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) | |||
240 | struct i2c_client *client = sd->priv; | 240 | struct i2c_client *client = sd->priv; |
241 | struct soc_camera_device *icd = client->dev.platform_data; | 241 | struct soc_camera_device *icd = client->dev.platform_data; |
242 | struct v4l2_rect rect = { | 242 | struct v4l2_rect rect = { |
243 | .left = icd->x_current, | 243 | .left = icd->rect_current.left, |
244 | .top = icd->y_current, | 244 | .top = icd->rect_current.top, |
245 | .width = f->fmt.pix.width, | 245 | .width = f->fmt.pix.width, |
246 | .height = f->fmt.pix.height, | 246 | .height = f->fmt.pix.height, |
247 | }; | 247 | }; |
@@ -467,11 +467,13 @@ static int mt9m001_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) | |||
467 | case V4L2_CID_EXPOSURE_AUTO: | 467 | case V4L2_CID_EXPOSURE_AUTO: |
468 | if (ctrl->value) { | 468 | if (ctrl->value) { |
469 | const u16 vblank = 25; | 469 | const u16 vblank = 25; |
470 | if (reg_write(client, MT9M001_SHUTTER_WIDTH, icd->height + | 470 | if (reg_write(client, MT9M001_SHUTTER_WIDTH, |
471 | icd->rect_current.height + | ||
471 | icd->y_skip_top + vblank) < 0) | 472 | icd->y_skip_top + vblank) < 0) |
472 | return -EIO; | 473 | return -EIO; |
473 | qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE); | 474 | qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE); |
474 | icd->exposure = (524 + (icd->height + icd->y_skip_top + vblank - 1) * | 475 | icd->exposure = (524 + (icd->rect_current.height + |
476 | icd->y_skip_top + vblank - 1) * | ||
475 | (qctrl->maximum - qctrl->minimum)) / | 477 | (qctrl->maximum - qctrl->minimum)) / |
476 | 1048 + qctrl->minimum; | 478 | 1048 + qctrl->minimum; |
477 | mt9m001->autoexposure = 1; | 479 | mt9m001->autoexposure = 1; |
@@ -613,16 +615,16 @@ static int mt9m001_probe(struct i2c_client *client, | |||
613 | v4l2_i2c_subdev_init(&mt9m001->subdev, client, &mt9m001_subdev_ops); | 615 | v4l2_i2c_subdev_init(&mt9m001->subdev, client, &mt9m001_subdev_ops); |
614 | 616 | ||
615 | /* Second stage probe - when a capture adapter is there */ | 617 | /* Second stage probe - when a capture adapter is there */ |
616 | icd->ops = &mt9m001_ops; | 618 | icd->ops = &mt9m001_ops; |
617 | icd->x_min = 20; | 619 | icd->rect_max.left = 20; |
618 | icd->y_min = 12; | 620 | icd->rect_max.top = 12; |
619 | icd->x_current = 20; | 621 | icd->rect_max.width = 1280; |
620 | icd->y_current = 12; | 622 | icd->rect_max.height = 1024; |
621 | icd->width_min = 48; | 623 | icd->rect_current.left = 20; |
622 | icd->width_max = 1280; | 624 | icd->rect_current.top = 12; |
623 | icd->height_min = 32; | 625 | icd->width_min = 48; |
624 | icd->height_max = 1024; | 626 | icd->height_min = 32; |
625 | icd->y_skip_top = 1; | 627 | icd->y_skip_top = 1; |
626 | /* Simulated autoexposure. If enabled, we calculate shutter width | 628 | /* Simulated autoexposure. If enabled, we calculate shutter width |
627 | * ourselves in the driver based on vertical blanking and frame width */ | 629 | * ourselves in the driver based on vertical blanking and frame width */ |
628 | mt9m001->autoexposure = 1; | 630 | mt9m001->autoexposure = 1; |