V4L/DVB (10085): sh_mobile_ceu: add NV16 and NV61 support
authorMagnus Damm <damm@igel.co.jp>
Thu, 18 Dec 2008 15:45:33 +0000 (12:45 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 30 Dec 2008 11:40:23 +0000 (09:40 -0200)
This patch adds NV16/NV61 support to the sh_mobile_ceu driver.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/sh_mobile_ceu_camera.c

index 31a0a97..7d1a844 100644 (file)
@@ -177,6 +177,8 @@ static void sh_mobile_ceu_capture(struct sh_mobile_ceu_dev *pcdev)
        switch (icd->current_fmt->fourcc) {
        case V4L2_PIX_FMT_NV12:
        case V4L2_PIX_FMT_NV21:
+       case V4L2_PIX_FMT_NV16:
+       case V4L2_PIX_FMT_NV61:
                phys_addr += (icd->width * icd->height);
                ceu_write(pcdev, CDACR, phys_addr);
        }
@@ -407,6 +409,9 @@ static int sh_mobile_ceu_set_bus_param(struct soc_camera_device *icd,
        case V4L2_PIX_FMT_NV12:
        case V4L2_PIX_FMT_NV21:
                yuv_lineskip = 1; /* skip for NV12/21, no skip for NV16/61 */
+               /* fall-through */
+       case V4L2_PIX_FMT_NV16:
+       case V4L2_PIX_FMT_NV61:
                yuv_mode = 1;
                switch (pcdev->camera_fmt->fourcc) {
                case V4L2_PIX_FMT_UYVY:
@@ -426,8 +431,9 @@ static int sh_mobile_ceu_set_bus_param(struct soc_camera_device *icd,
                }
        }
 
-       if (icd->current_fmt->fourcc == V4L2_PIX_FMT_NV21)
-               value ^= 0x00000100; /* swap U, V to change from NV12->NV21 */
+       if ((icd->current_fmt->fourcc == V4L2_PIX_FMT_NV21) ||
+           (icd->current_fmt->fourcc == V4L2_PIX_FMT_NV61))
+               value ^= 0x00000100; /* swap U, V to change from NV1x->NVx1 */
 
        value |= (common_flags & SOCAM_VSYNC_ACTIVE_LOW) ? (1 << 1) : 0;
        value |= (common_flags & SOCAM_HSYNC_ACTIVE_LOW) ? (1 << 0) : 0;
@@ -509,6 +515,18 @@ static const struct soc_camera_data_format sh_mobile_ceu_formats[] = {
                .fourcc         = V4L2_PIX_FMT_NV21,
                .colorspace     = V4L2_COLORSPACE_JPEG,
        },
+       {
+               .name           = "NV16",
+               .depth          = 16,
+               .fourcc         = V4L2_PIX_FMT_NV16,
+               .colorspace     = V4L2_COLORSPACE_JPEG,
+       },
+       {
+               .name           = "NV61",
+               .depth          = 16,
+               .fourcc         = V4L2_PIX_FMT_NV61,
+               .colorspace     = V4L2_COLORSPACE_JPEG,
+       },
 };
 
 static int sh_mobile_ceu_get_formats(struct soc_camera_device *icd, int idx,