Commit 9e4a56d2 authored by Magnus Damm's avatar Magnus Damm Committed by Mauro Carvalho Chehab

V4L/DVB (10085): sh_mobile_ceu: add NV16 and NV61 support

This patch adds NV16/NV61 support to the sh_mobile_ceu driver.
Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 8be65dc5
...@@ -177,6 +177,8 @@ static void sh_mobile_ceu_capture(struct sh_mobile_ceu_dev *pcdev) ...@@ -177,6 +177,8 @@ static void sh_mobile_ceu_capture(struct sh_mobile_ceu_dev *pcdev)
switch (icd->current_fmt->fourcc) { switch (icd->current_fmt->fourcc) {
case V4L2_PIX_FMT_NV12: case V4L2_PIX_FMT_NV12:
case V4L2_PIX_FMT_NV21: case V4L2_PIX_FMT_NV21:
case V4L2_PIX_FMT_NV16:
case V4L2_PIX_FMT_NV61:
phys_addr += (icd->width * icd->height); phys_addr += (icd->width * icd->height);
ceu_write(pcdev, CDACR, phys_addr); ceu_write(pcdev, CDACR, phys_addr);
} }
...@@ -407,6 +409,9 @@ static int sh_mobile_ceu_set_bus_param(struct soc_camera_device *icd, ...@@ -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_NV12:
case V4L2_PIX_FMT_NV21: case V4L2_PIX_FMT_NV21:
yuv_lineskip = 1; /* skip for NV12/21, no skip for NV16/61 */ 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; yuv_mode = 1;
switch (pcdev->camera_fmt->fourcc) { switch (pcdev->camera_fmt->fourcc) {
case V4L2_PIX_FMT_UYVY: case V4L2_PIX_FMT_UYVY:
...@@ -426,8 +431,9 @@ static int sh_mobile_ceu_set_bus_param(struct soc_camera_device *icd, ...@@ -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) if ((icd->current_fmt->fourcc == V4L2_PIX_FMT_NV21) ||
value ^= 0x00000100; /* swap U, V to change from NV12->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_VSYNC_ACTIVE_LOW) ? (1 << 1) : 0;
value |= (common_flags & SOCAM_HSYNC_ACTIVE_LOW) ? (1 << 0) : 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[] = { ...@@ -509,6 +515,18 @@ static const struct soc_camera_data_format sh_mobile_ceu_formats[] = {
.fourcc = V4L2_PIX_FMT_NV21, .fourcc = V4L2_PIX_FMT_NV21,
.colorspace = V4L2_COLORSPACE_JPEG, .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, static int sh_mobile_ceu_get_formats(struct soc_camera_device *icd, int idx,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment