aboutsummaryrefslogtreecommitdiff
path: root/drivers/media/video/videodev2_s3c.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/videodev2_s3c.h')
-rw-r--r--drivers/media/video/videodev2_s3c.h210
1 files changed, 210 insertions, 0 deletions
diff --git a/drivers/media/video/videodev2_s3c.h b/drivers/media/video/videodev2_s3c.h
new file mode 100644
index 00000000000..efbcd71830a
--- /dev/null
+++ b/drivers/media/video/videodev2_s3c.h
@@ -0,0 +1,210 @@
+#ifndef __VIDEODEV2_S3C_H_
+#define __VIDEODEV2_S3C_H_
+
+#include <linux/videodev2.h>
+
+#define V4L2_INPUT_TYPE_MSDMA 3
+#define V4L2_INPUT_TYPE_INTERLACE 4
+
+/****************************************************************
+* struct v4l2_control
+* Control IDs defined by S3C
+*****************************************************************/
+/* Image Effect */
+#define V4L2_CID_ORIGINAL (V4L2_CID_PRIVATE_BASE + 0)
+#define V4L2_CID_ARBITRARY (V4L2_CID_PRIVATE_BASE + 1)
+#define V4L2_CID_NEGATIVE (V4L2_CID_PRIVATE_BASE + 2)
+#define V4L2_CID_ART_FREEZE (V4L2_CID_PRIVATE_BASE + 3)
+#define V4L2_CID_EMBOSSING (V4L2_CID_PRIVATE_BASE + 4)
+#define V4L2_CID_SILHOUETTE (V4L2_CID_PRIVATE_BASE + 5)
+
+/* Image Rotate */
+#define V4L2_CID_ROTATE_90 (V4L2_CID_PRIVATE_BASE + 6)
+#define V4L2_CID_ROTATE_180 (V4L2_CID_PRIVATE_BASE + 7)
+#define V4L2_CID_ROTATE_270 (V4L2_CID_PRIVATE_BASE + 8)
+#define V4L2_CID_ROTATE_BYPASS (V4L2_CID_PRIVATE_BASE + 9)
+
+/* Zoom-in, Zoom-out */
+#define V4L2_CID_ZOOMIN (V4L2_CID_PRIVATE_BASE + 10)
+#define V4L2_CID_ZOOMOUT (V4L2_CID_PRIVATE_BASE + 11)
+
+/****************************************************************
+* I O C T L C O D E S F O R V I D E O D E V I C E S
+* It's only for S3C
+*****************************************************************/
+#define VIDIOC_S_CAMERA_START _IO ('V', BASE_VIDIOC_PRIVATE + 0)
+#define VIDIOC_S_CAMERA_STOP _IO ('V', BASE_VIDIOC_PRIVATE + 1)
+#define VIDIOC_MSDMA_START _IOW ('V', BASE_VIDIOC_PRIVATE + 2, struct v4l2_msdma_format)
+#define VIDIOC_MSDMA_STOP _IOW ('V', BASE_VIDIOC_PRIVATE + 3, struct v4l2_msdma_format)
+#define VIDIOC_S_MSDMA _IOW ('V', BASE_VIDIOC_PRIVATE + 4, struct v4l2_msdma_format)
+#define VIDIOC_S_INTERLACE_MODE _IOW ('V', BASE_VIDIOC_PRIVATE + 5, struct v4l2_interlace_format)
+
+/*
+ * INTERLACE MODE
+ */
+#define S3C_VIDEO_DECODER_PAL 1 /* can decode PAL signal */
+#define S3C_VIDEO_DECODER_NTSC 2 /* can decode NTSC */
+#define S3C_VIDEO_DECODER_SECAM 4 /* can decode SECAM */
+#define S3C_VIDEO_DECODER_AUTO 8 /* can autosense norm */
+#define S3C_VIDEO_DECODER_CCIR 16 /* CCIR-601 pixel rate (720 pixels per line) instead of square pixel rate */
+
+#define S3C_DECODER_INIT _IOW ('V', BASE_VIDIOC_PRIVATE + 14, struct s3c_video_decoder_init) /* init internal registers at once */
+#define S3C_DECODER_GET_CAPABILITIES _IOR ('V', BASE_VIDIOC_PRIVATE + 6, struct s3c_video_decoder_capability)
+#define S3C_DECODER_GET_STATUS _IOR ('V', BASE_VIDIOC_PRIVATE + 7, int)
+#define S3C_DECODER_SET_NORM _IOW ('V', BASE_VIDIOC_PRIVATE + 8, int)
+#define S3C_DECODER_SET_INPUT _IOW ('V', BASE_VIDIOC_PRIVATE + 9, int) /* 0 <= input < #inputs */
+#define S3C_DECODER_SET_OUTPUT _IOW ('V', BASE_VIDIOC_PRIVATE + 10, int) /* 0 <= output < #outputs */
+#define S3C_DECODER_ENABLE_OUTPUT _IOW ('V', BASE_VIDIOC_PRIVATE + 11, int) /* boolean output enable control */
+#define S3C_DECODER_SET_PICTURE _IOW ('V', BASE_VIDIOC_PRIVATE + 12, struct video_picture)
+#define S3C_DECODER_SET_GPIO _IOW ('V', BASE_VIDIOC_PRIVATE + 13, int) /* switch general purpose pin */
+#define S3C_DECODER_SET_VBI_BYPASS _IOW ('V', BASE_VIDIOC_PRIVATE + 15, int) /* switch vbi bypass */
+#define S3C_DECODER_DUMP _IO ('V', BASE_VIDIOC_PRIVATE + 16) /* debug hook */
+
+enum v4l2_msdma_input {
+ V4L2_MSDMA_CODEC = 1,
+ V4L2_MSDMA_PREVIEW = 2,
+};
+
+struct v4l2_msdma_format
+{
+ __u32 width; /* MSDMA INPUT : Source X size */
+ __u32 height; /* MSDMA INPUT : Source Y size */
+ __u32 pixelformat;
+ enum v4l2_msdma_input input_path;
+};
+
+struct v4l2_interlace_format
+{
+ __u32 width; /* INTERLACE INPUT : Source X size */
+ __u32 height; /* INTERLACE INPUT : Source Y size */
+};
+
+struct s3c_video_decoder_init {
+ unsigned char len;
+ const unsigned char *data;
+};
+
+struct s3c_video_decoder_capability { /* this name is too long */
+ __u32 flags;
+ int inputs; /* number of inputs */
+ int outputs; /* number of outputs */
+};
+
+static struct v4l2_input fimc_inputs[] = {
+ {
+ .index = 0,
+ .name = "S3C FIMC External Camera Input",
+ .type = V4L2_INPUT_TYPE_CAMERA,
+ .audioset = 1,
+ .tuner = 0,
+ .std = V4L2_STD_PAL_BG | V4L2_STD_NTSC_M,
+ .status = 0,
+ },
+ {
+ .index = 1,
+ .name = "Memory Input (MSDMA)",
+ .type = V4L2_INPUT_TYPE_MSDMA,
+ .audioset = 2,
+ .tuner = 0,
+ .std = V4L2_STD_PAL_BG | V4L2_STD_NTSC_M,
+ .status = 0,
+ }
+};
+
+static struct v4l2_output fimc_outputs[] = {
+ {
+ .index = 0,
+ .name = "Pingpong Memory Output",
+ .type = 0,
+ .audioset = 0,
+ .modulator = 0,
+ .std = 0,
+ },
+ {
+ .index = 1,
+ .name = "LCD FIFO Output",
+ .type = 0,
+ .audioset = 0,
+ .modulator = 0,
+ .std = 0,
+ }
+};
+
+const struct v4l2_fmtdesc fimc_codec_formats[] = {
+ {
+ .index = 0,
+ .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
+ .flags = FORMAT_FLAGS_PACKED,
+ .description = "16 bpp RGB, le",
+ .pixelformat = V4L2_PIX_FMT_RGB565,
+ },
+ {
+ .index = 1,
+ .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
+ .flags = FORMAT_FLAGS_PACKED,
+ .description = "32 bpp RGB, le",
+ .pixelformat = V4L2_PIX_FMT_BGR32,
+ },
+ {
+ .index = 2,
+ .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
+ .flags = FORMAT_FLAGS_PLANAR,
+ .description = "4:2:2, planar, Y-Cb-Cr",
+ .pixelformat = V4L2_PIX_FMT_YUV422P,
+
+ },
+ {
+ .index = 3,
+ .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
+ .flags = FORMAT_FLAGS_PLANAR,
+ .description = "4:2:0, planar, Y-Cb-Cr",
+ .pixelformat = V4L2_PIX_FMT_YUV420,
+ }
+};
+
+const struct v4l2_fmtdesc fimc_preview_formats[] = {
+ {
+ .index = 0,
+ .type = V4L2_BUF_TYPE_VIDEO_OVERLAY,
+ .flags = FORMAT_FLAGS_PACKED,
+ .description = "16 bpp RGB, le",
+ .pixelformat = V4L2_PIX_FMT_RGB565,
+ },
+ {
+ .index = 1,
+ .type = V4L2_BUF_TYPE_VIDEO_OVERLAY,
+ .flags = FORMAT_FLAGS_PACKED,
+ .description = "24 bpp RGB, le",
+ .pixelformat = V4L2_PIX_FMT_RGB24,
+ },
+ {
+ .index = 2,
+ .type = V4L2_BUF_TYPE_VIDEO_OVERLAY,
+ .flags = FORMAT_FLAGS_PACKED,
+ .description = "32 bpp RGB, le",
+ .pixelformat = V4L2_PIX_FMT_BGR32,
+ },
+ {
+ .index = 3,
+ .type = V4L2_BUF_TYPE_VIDEO_OVERLAY,
+ .flags = FORMAT_FLAGS_PLANAR,
+ .description = "4:2:2, planar, Y-Cb-Cr",
+ .pixelformat = V4L2_PIX_FMT_YUV422P,
+
+ },
+ {
+ .index = 4,
+ .type = V4L2_BUF_TYPE_VIDEO_OVERLAY,
+ .flags = FORMAT_FLAGS_PLANAR,
+ .description = "4:2:0, planar, Y-Cb-Cr",
+ .pixelformat = V4L2_PIX_FMT_YUV420,
+ }
+};
+
+#define NUMBER_OF_PREVIEW_FORMATS ARRAY_SIZE(fimc_preview_formats)
+#define NUMBER_OF_CODEC_FORMATS ARRAY_SIZE(fimc_codec_formats)
+#define NUMBER_OF_INPUTS ARRAY_SIZE(fimc_inputs)
+#define NUMBER_OF_OUTPUTS ARRAY_SIZE(fimc_outputs)
+
+#endif
+