aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
authorSergio Aguirre <saaguirre@ti.com>2011-03-07 19:49:48 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-03-22 18:41:55 -0400
commit0e4c180d3e2cc11e248f29d4c604b6194739d05a (patch)
treecb505788e38273b39a190fdd7080ea8e9c1e2af5 /drivers/media/video
parent4be22b6a7f2f2b7eb6f7aab8902068a367cda8ba (diff)
[media] v4l: soc-camera: Store negotiated buffer settings
This fixes the problem in which a host driver sets a personalized sizeimage or bytesperline field, and gets ignored when doing G_FMT. Signed-off-by: Sergio Aguirre <saaguirre@ti.com> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/soc_camera.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c
index fa80a4a914d4..07525e74c4b4 100644
--- a/drivers/media/video/soc_camera.c
+++ b/drivers/media/video/soc_camera.c
@@ -389,6 +389,8 @@ static int soc_camera_set_fmt(struct soc_camera_device *icd,
389 389
390 icd->user_width = pix->width; 390 icd->user_width = pix->width;
391 icd->user_height = pix->height; 391 icd->user_height = pix->height;
392 icd->bytesperline = pix->bytesperline;
393 icd->sizeimage = pix->sizeimage;
392 icd->colorspace = pix->colorspace; 394 icd->colorspace = pix->colorspace;
393 icd->field = pix->field; 395 icd->field = pix->field;
394 if (ici->ops->init_videobuf) 396 if (ici->ops->init_videobuf)
@@ -661,14 +663,11 @@ static int soc_camera_g_fmt_vid_cap(struct file *file, void *priv,
661 663
662 pix->width = icd->user_width; 664 pix->width = icd->user_width;
663 pix->height = icd->user_height; 665 pix->height = icd->user_height;
666 pix->bytesperline = icd->bytesperline;
667 pix->sizeimage = icd->sizeimage;
664 pix->field = icd->field; 668 pix->field = icd->field;
665 pix->pixelformat = icd->current_fmt->host_fmt->fourcc; 669 pix->pixelformat = icd->current_fmt->host_fmt->fourcc;
666 pix->bytesperline = soc_mbus_bytes_per_line(pix->width,
667 icd->current_fmt->host_fmt);
668 pix->colorspace = icd->colorspace; 670 pix->colorspace = icd->colorspace;
669 if (pix->bytesperline < 0)
670 return pix->bytesperline;
671 pix->sizeimage = pix->height * pix->bytesperline;
672 dev_dbg(&icd->dev, "current_fmt->fourcc: 0x%08x\n", 671 dev_dbg(&icd->dev, "current_fmt->fourcc: 0x%08x\n",
673 icd->current_fmt->host_fmt->fourcc); 672 icd->current_fmt->host_fmt->fourcc);
674 return 0; 673 return 0;