diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2009-03-13 10:08:20 +0100 |
---|---|---|
committer | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2009-03-13 10:08:20 +0100 |
commit | ada365c021ff668eae8fa17042a39d33a4cdf4e1 (patch) | |
tree | f05e3e54edf9e37b36f2eeebde3ca19b84c0fd43 /linux/drivers/media/video/mt9v022.c | |
parent | 7787613f5c5a3a00ebd6aca9893ef2c4ad679bc1 (diff) | |
download | mediapointer-dvb-s2-ada365c021ff668eae8fa17042a39d33a4cdf4e1.tar.gz mediapointer-dvb-s2-ada365c021ff668eae8fa17042a39d33a4cdf4e1.tar.bz2 |
soc-camera: separate S_FMT and S_CROP operations
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
As host and camera drivers become more complex, differences between S_FMT and
S_CROP functionality grow, this patch separates them.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
drivers/media/video/mt9m001.c | 19 +++-
drivers/media/video/mt9m111.c | 56 +++++++---
drivers/media/video/mt9t031.c | 84 ++++++++++------
drivers/media/video/mt9v022.c | 62 +++++++----
drivers/media/video/mx3_camera.c | 157 +++++++++++++++++-----------
drivers/media/video/ov772x.c | 31 +++++-
drivers/media/video/pxa_camera.c | 67 +++++++++---
drivers/media/video/sh_mobile_ceu_camera.c | 17 ++-
drivers/media/video/soc_camera.c | 20 ++--
drivers/media/video/soc_camera_platform.c | 9 ++-
drivers/media/video/tw9910.c | 45 +++++---
include/media/soc_camera.h | 6 +-
12 files changed, 381 insertions(+), 192 deletions(-)
Diffstat (limited to 'linux/drivers/media/video/mt9v022.c')
-rw-r--r-- | linux/drivers/media/video/mt9v022.c | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/linux/drivers/media/video/mt9v022.c b/linux/drivers/media/video/mt9v022.c index 59efb8ff0..09d3679e5 100644 --- a/linux/drivers/media/video/mt9v022.c +++ b/linux/drivers/media/video/mt9v022.c @@ -340,32 +340,11 @@ static unsigned long mt9v022_query_bus_param(struct soc_camera_device *icd) width_flag; } -static int mt9v022_set_fmt(struct soc_camera_device *icd, - __u32 pixfmt, struct v4l2_rect *rect) +static int mt9v022_set_crop(struct soc_camera_device *icd, + struct v4l2_rect *rect) { - struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); int ret; - /* The caller provides a supported format, as verified per call to - * icd->try_fmt(), datawidth is from our supported format list */ - switch (pixfmt) { - case V4L2_PIX_FMT_GREY: - case V4L2_PIX_FMT_Y16: - if (mt9v022->model != V4L2_IDENT_MT9V022IX7ATM) - return -EINVAL; - break; - case V4L2_PIX_FMT_SBGGR8: - case V4L2_PIX_FMT_SBGGR16: - if (mt9v022->model != V4L2_IDENT_MT9V022IX7ATC) - return -EINVAL; - break; - case 0: - /* No format change, only geometry */ - break; - default: - return -EINVAL; - } - /* Like in example app. Contradicts the datasheet though */ ret = reg_read(icd, MT9V022_AEC_AGC_ENABLE); if (ret >= 0) { @@ -403,6 +382,42 @@ static int mt9v022_set_fmt(struct soc_camera_device *icd, return 0; } +static int mt9v022_set_fmt(struct soc_camera_device *icd, + struct v4l2_format *f) +{ + struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); + struct v4l2_pix_format *pix = &f->fmt.pix; + struct v4l2_rect rect = { + .left = icd->x_current, + .top = icd->y_current, + .width = pix->width, + .height = pix->height, + }; + + /* The caller provides a supported format, as verified per call to + * icd->try_fmt(), datawidth is from our supported format list */ + switch (pix->pixelformat) { + case V4L2_PIX_FMT_GREY: + case V4L2_PIX_FMT_Y16: + if (mt9v022->model != V4L2_IDENT_MT9V022IX7ATM) + return -EINVAL; + break; + case V4L2_PIX_FMT_SBGGR8: + case V4L2_PIX_FMT_SBGGR16: + if (mt9v022->model != V4L2_IDENT_MT9V022IX7ATC) + return -EINVAL; + break; + case 0: + /* No format change, only geometry */ + break; + default: + return -EINVAL; + } + + /* No support for scaling on this camera, just crop. */ + return mt9v022_set_crop(icd, &rect); +} + static int mt9v022_try_fmt(struct soc_camera_device *icd, struct v4l2_format *f) { @@ -544,6 +559,7 @@ static struct soc_camera_ops mt9v022_ops = { .release = mt9v022_release, .start_capture = mt9v022_start_capture, .stop_capture = mt9v022_stop_capture, + .set_crop = mt9v022_set_crop, .set_fmt = mt9v022_set_fmt, .try_fmt = mt9v022_try_fmt, .set_bus_param = mt9v022_set_bus_param, |