V4L/DVB (10065): mt9m111: add all yuv format combinations.
authorRobert Jarzmik <robert.jarzmik@free.fr>
Wed, 17 Dec 2008 17:05:31 +0000 (14:05 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 30 Dec 2008 11:40:13 +0000 (09:40 -0200)
The Micron mt9m111 offers 4 byte orders for YCbCr
output. This patchs adds all possible outputs capabilities
to the mt9m111 driver.

Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/mt9m111.c

index 343be9252fe7b65b82ce9fc7a621cc683cb1d7a6..b4a238f49600aa296a0b81089b13fb5f9fe83eff 100644 (file)
        .colorspace = _colorspace }
 #define RGB_FMT(_name, _depth, _fourcc) \
        COL_FMT(_name, _depth, _fourcc, V4L2_COLORSPACE_SRGB)
+#define JPG_FMT(_name, _depth, _fourcc) \
+       COL_FMT(_name, _depth, _fourcc, V4L2_COLORSPACE_JPEG)
 
 static const struct soc_camera_data_format mt9m111_colour_formats[] = {
-       COL_FMT("YCrYCb 8 bit", 8, V4L2_PIX_FMT_YUYV, V4L2_COLORSPACE_JPEG),
+       JPG_FMT("CbYCrY 16 bit", 16, V4L2_PIX_FMT_UYVY),
+       JPG_FMT("CrYCbY 16 bit", 16, V4L2_PIX_FMT_VYUY),
+       JPG_FMT("YCbYCr 16 bit", 16, V4L2_PIX_FMT_YUYV),
+       JPG_FMT("YCrYCb 16 bit", 16, V4L2_PIX_FMT_YVYU),
        RGB_FMT("RGB 565", 16, V4L2_PIX_FMT_RGB565),
        RGB_FMT("RGB 555", 16, V4L2_PIX_FMT_RGB555),
        RGB_FMT("Bayer (sRGB) 10 bit", 10, V4L2_PIX_FMT_SBGGR16),
@@ -438,7 +443,24 @@ static int mt9m111_set_pixfmt(struct soc_camera_device *icd, u32 pixfmt)
        case V4L2_PIX_FMT_RGB565:
                ret = mt9m111_setfmt_rgb565(icd);
                break;
+       case V4L2_PIX_FMT_UYVY:
+               mt9m111->swap_yuv_y_chromas = 0;
+               mt9m111->swap_yuv_cb_cr = 0;
+               ret = mt9m111_setfmt_yuv(icd);
+               break;
+       case V4L2_PIX_FMT_VYUY:
+               mt9m111->swap_yuv_y_chromas = 0;
+               mt9m111->swap_yuv_cb_cr = 1;
+               ret = mt9m111_setfmt_yuv(icd);
+               break;
        case V4L2_PIX_FMT_YUYV:
+               mt9m111->swap_yuv_y_chromas = 1;
+               mt9m111->swap_yuv_cb_cr = 0;
+               ret = mt9m111_setfmt_yuv(icd);
+               break;
+       case V4L2_PIX_FMT_YVYU:
+               mt9m111->swap_yuv_y_chromas = 1;
+               mt9m111->swap_yuv_cb_cr = 1;
                ret = mt9m111_setfmt_yuv(icd);
                break;
        default: