120c516838913956e6f86347b305fe29506e2b491Jiho Chang/* 220c516838913956e6f86347b305fe29506e2b491Jiho Chang * Copyright@ Samsung Electronics Co. LTD 320c516838913956e6f86347b305fe29506e2b491Jiho Chang * 420c516838913956e6f86347b305fe29506e2b491Jiho Chang * Licensed under the Apache License, Version 2.0 (the "License"); 520c516838913956e6f86347b305fe29506e2b491Jiho Chang * you may not use this file except in compliance with the License. 620c516838913956e6f86347b305fe29506e2b491Jiho Chang * You may obtain a copy of the License at 720c516838913956e6f86347b305fe29506e2b491Jiho Chang * 820c516838913956e6f86347b305fe29506e2b491Jiho Chang * http://www.apache.org/licenses/LICENSE-2.0 920c516838913956e6f86347b305fe29506e2b491Jiho Chang * 1020c516838913956e6f86347b305fe29506e2b491Jiho Chang * Unless required by applicable law or agreed to in writing, software 1120c516838913956e6f86347b305fe29506e2b491Jiho Chang * distributed under the License is distributed on an "AS IS" BASIS, 1220c516838913956e6f86347b305fe29506e2b491Jiho Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320c516838913956e6f86347b305fe29506e2b491Jiho Chang * See the License for the specific language governing permissions and 1420c516838913956e6f86347b305fe29506e2b491Jiho Chang * limitations under the License. 1520c516838913956e6f86347b305fe29506e2b491Jiho Chang */ 1620c516838913956e6f86347b305fe29506e2b491Jiho Chang 1720c516838913956e6f86347b305fe29506e2b491Jiho Chang#ifndef __S5P_TVOUT_H__ 1820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define __S5P_TVOUT_H__ 1920c516838913956e6f86347b305fe29506e2b491Jiho Chang 2020c516838913956e6f86347b305fe29506e2b491Jiho Chang#include <linux/fb.h> 2120c516838913956e6f86347b305fe29506e2b491Jiho Chang 2220c516838913956e6f86347b305fe29506e2b491Jiho Chang#include "videodev2.h" 23234f72f741d0c0cafd10effafbae4c48275d4f90Jiho Chang#include "videodev2_exynos_media.h" 2420c516838913956e6f86347b305fe29506e2b491Jiho Chang 2520c516838913956e6f86347b305fe29506e2b491Jiho Chang#ifdef __cplusplus 2620c516838913956e6f86347b305fe29506e2b491Jiho Changextern "C" { 2720c516838913956e6f86347b305fe29506e2b491Jiho Chang#endif 2820c516838913956e6f86347b305fe29506e2b491Jiho Chang 2920c516838913956e6f86347b305fe29506e2b491Jiho Chang/******************************************* 3020c516838913956e6f86347b305fe29506e2b491Jiho Chang * Define 3120c516838913956e6f86347b305fe29506e2b491Jiho Chang *******************************************/ 3220c516838913956e6f86347b305fe29506e2b491Jiho Chang/* TVOUT control */ 3320c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_NODE_FB "/dev/graphics/fb" 3420c516838913956e6f86347b305fe29506e2b491Jiho Chang 3520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_NODE_MEDIADEV "/dev/media" 3620c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_NODE_SUBDEV "/dev/v4l-subdev" 3720c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_NODE_VIDEODEV "/dev/video" 3820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_ENTITY_SUBDEV_MIXER "s5p-mixer%d" 3920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_ENTITY_VIDEODEV_MIXER_GRP "mxr%d_graph%d" 4020c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_ENTITY_SUBDEV_GSC_OUT "exynos-gsc-sd.%d" 4120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_ENTITY_VIDEODEV_GSC_OUT "exynos-gsc.%d.output" 4220c516838913956e6f86347b305fe29506e2b491Jiho Chang 4320c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_ENTITY_SUBDEV_FIMD "s5p-fimd%d" 4420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_ENTITY_SUBDEV_GSC_CAP "gsc-cap-subdev.%d" 4520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define PFX_ENTITY_VIDEODEV_GSC_CAP "exynos-gsc.%d.capture" 4620c516838913956e6f86347b305fe29506e2b491Jiho Chang 4720c516838913956e6f86347b305fe29506e2b491Jiho Chang/* Sub-Mixer 0 */ 4820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define TVOUT0_DEV_G0 "/dev/video16" 4920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define TVOUT0_DEV_G1 "/dev/video17" 5020c516838913956e6f86347b305fe29506e2b491Jiho Chang/* Sub-Mixer 1 */ 5120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define TVOUT1_DEV_G0 "/dev/video18" 5220c516838913956e6f86347b305fe29506e2b491Jiho Chang#define TVOUT1_DEV_G1 "/dev/video19" 5320c516838913956e6f86347b305fe29506e2b491Jiho Chang 5420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define MIXER_V_SUBDEV_PAD_SINK (0) 5520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define MIXER_V_SUBDEV_PAD_SOURCE (3) 5620c516838913956e6f86347b305fe29506e2b491Jiho Chang#define MIXER_G0_SUBDEV_PAD_SINK (1) 5720c516838913956e6f86347b305fe29506e2b491Jiho Chang#define MIXER_G0_SUBDEV_PAD_SOURCE (4) 5820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define MIXER_G1_SUBDEV_PAD_SINK (2) 5920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define MIXER_G1_SUBDEV_PAD_SOURCE (5) 6020c516838913956e6f86347b305fe29506e2b491Jiho Chang 6120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define GSCALER_SUBDEV_PAD_SINK (0) 6220c516838913956e6f86347b305fe29506e2b491Jiho Chang#define GSCALER_SUBDEV_PAD_SOURCE (1) 6320c516838913956e6f86347b305fe29506e2b491Jiho Chang#define FIMD_SUBDEV_PAD_SOURCE (0) 6420c516838913956e6f86347b305fe29506e2b491Jiho Chang 6520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define HPD_DEV "/dev/HPD" 6620c516838913956e6f86347b305fe29506e2b491Jiho Chang 6720c516838913956e6f86347b305fe29506e2b491Jiho Chang/* ------------- Output -----------------*/ 6820c516838913956e6f86347b305fe29506e2b491Jiho Chang/* type */ 6920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_MSDMA 4 7020c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_COMPOSITE 5 7120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_SVIDEO 6 7220c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_YPBPR_INERLACED 7 7320c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_YPBPR_PROGRESSIVE 8 7420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_RGB_PROGRESSIVE 9 7520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_DIGITAL 10 7620c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_HDMI V4L2_OUTPUT_TYPE_DIGITAL 7720c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_HDMI_RGB 11 7820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_OUTPUT_TYPE_DVI 12 7920c516838913956e6f86347b305fe29506e2b491Jiho Chang 8020c516838913956e6f86347b305fe29506e2b491Jiho Chang/* ------------- STD -------------------*/ 8120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_PAL_BDGHI\ 8220c516838913956e6f86347b305fe29506e2b491Jiho Chang (V4L2_STD_PAL_B|V4L2_STD_PAL_D|V4L2_STD_PAL_G|V4L2_STD_PAL_H|V4L2_STD_PAL_I) 8320c516838913956e6f86347b305fe29506e2b491Jiho Chang 8420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_480P_60_16_9 ((v4l2_std_id)0x04000000) 8520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_480P_60_4_3 ((v4l2_std_id)0x05000000) 8620c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_576P_50_16_9 ((v4l2_std_id)0x06000000) 8720c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_576P_50_4_3 ((v4l2_std_id)0x07000000) 8820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_720P_60 ((v4l2_std_id)0x08000000) 8920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_720P_50 ((v4l2_std_id)0x09000000) 9020c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_1080P_60 ((v4l2_std_id)0x0a000000) 9120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_1080P_50 ((v4l2_std_id)0x0b000000) 9220c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_1080I_60 ((v4l2_std_id)0x0c000000) 9320c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_1080I_50 ((v4l2_std_id)0x0d000000) 9420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_480P_59 ((v4l2_std_id)0x0e000000) 9520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_720P_59 ((v4l2_std_id)0x0f000000) 9620c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_1080I_59 ((v4l2_std_id)0x10000000) 9720c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_1080P_59 ((v4l2_std_id)0x11000000) 9820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_1080P_30 ((v4l2_std_id)0x12000000) 9920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_TVOUT_720P_60_SBS_HALF ((v4l2_std_id)0x13000000) 10020c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_TVOUT_720P_59_SBS_HALF ((v4l2_std_id)0x14000000) 10120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_TVOUT_720P_50_TB ((v4l2_std_id)0x15000000) 10220c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_TVOUT_1080P_24_TB ((v4l2_std_id)0x16000000) 10320c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_TVOUT_1080P_23_TB ((v4l2_std_id)0x17000000) 10420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_STD_TVOUT_1080P_60_SBS_HALF ((v4l2_std_id)0x18000000) 10520c516838913956e6f86347b305fe29506e2b491Jiho Chang 10620c516838913956e6f86347b305fe29506e2b491Jiho Chang/* ------------- Input ------------------*/ 10720c516838913956e6f86347b305fe29506e2b491Jiho Chang/* type */ 10820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_INPUT_TYPE_MSDMA 3 10920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define V4L2_INPUT_TYPE_FIFO 4 11020c516838913956e6f86347b305fe29506e2b491Jiho Chang 11120c516838913956e6f86347b305fe29506e2b491Jiho Chang/******************************************* 11220c516838913956e6f86347b305fe29506e2b491Jiho Chang * structures 11320c516838913956e6f86347b305fe29506e2b491Jiho Chang *******************************************/ 11420c516838913956e6f86347b305fe29506e2b491Jiho Chang 11520c516838913956e6f86347b305fe29506e2b491Jiho Chang/* TVOUT */ 11620c516838913956e6f86347b305fe29506e2b491Jiho Changstruct v4l2_vid_overlay_src { 11720c516838913956e6f86347b305fe29506e2b491Jiho Chang void *base_y; 11820c516838913956e6f86347b305fe29506e2b491Jiho Chang void *base_c; 11920c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_pix_format pix_fmt; 12020c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 12120c516838913956e6f86347b305fe29506e2b491Jiho Chang 12220c516838913956e6f86347b305fe29506e2b491Jiho Changstruct v4l2_window_s5p_tvout { 12320c516838913956e6f86347b305fe29506e2b491Jiho Chang __u32 capability; 12420c516838913956e6f86347b305fe29506e2b491Jiho Chang __u32 flags; 12520c516838913956e6f86347b305fe29506e2b491Jiho Chang __u32 priority; 12620c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_window win; 12720c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 12820c516838913956e6f86347b305fe29506e2b491Jiho Chang 12920c516838913956e6f86347b305fe29506e2b491Jiho Changstruct v4l2_pix_format_s5p_tvout { 13020c516838913956e6f86347b305fe29506e2b491Jiho Chang void *base_y; 13120c516838913956e6f86347b305fe29506e2b491Jiho Chang void *base_c; 13220c516838913956e6f86347b305fe29506e2b491Jiho Chang __u32 src_img_endian; 13320c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_pix_format pix_fmt; 13420c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 13520c516838913956e6f86347b305fe29506e2b491Jiho Chang 13620c516838913956e6f86347b305fe29506e2b491Jiho Changstruct vid_overlay_param { 13720c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_vid_overlay_src src; 13820c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_rect src_crop; 13920c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_framebuffer dst; 14020c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_window dst_win; 14120c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 14220c516838913956e6f86347b305fe29506e2b491Jiho Chang 14320c516838913956e6f86347b305fe29506e2b491Jiho Changstruct tvout_param { 14420c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_pix_format_s5p_tvout tvout_src; 14520c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_window_s5p_tvout tvout_rect; 14620c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_rect tvout_dst; 14720c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 14820c516838913956e6f86347b305fe29506e2b491Jiho Chang 14920c516838913956e6f86347b305fe29506e2b491Jiho Changstruct overlay_param { 15020c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_framebuffer overlay_frame; 15120c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_window_s5p_tvout overlay_rect; 15220c516838913956e6f86347b305fe29506e2b491Jiho Chang struct v4l2_rect overlay_dst; 15320c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 15420c516838913956e6f86347b305fe29506e2b491Jiho Chang 15520c516838913956e6f86347b305fe29506e2b491Jiho Chang/* FB */ 15620c516838913956e6f86347b305fe29506e2b491Jiho Changstruct s5ptvfb_user_window { 15720c516838913956e6f86347b305fe29506e2b491Jiho Chang int x; 15820c516838913956e6f86347b305fe29506e2b491Jiho Chang int y; 15920c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 16020c516838913956e6f86347b305fe29506e2b491Jiho Chang 16120c516838913956e6f86347b305fe29506e2b491Jiho Changstruct s5ptvfb_user_plane_alpha { 16220c516838913956e6f86347b305fe29506e2b491Jiho Chang int channel; 16320c516838913956e6f86347b305fe29506e2b491Jiho Chang unsigned char alpha; 16420c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 16520c516838913956e6f86347b305fe29506e2b491Jiho Chang 16620c516838913956e6f86347b305fe29506e2b491Jiho Changstruct s5ptvfb_user_chroma { 16720c516838913956e6f86347b305fe29506e2b491Jiho Chang int enabled; 16820c516838913956e6f86347b305fe29506e2b491Jiho Chang unsigned char red; 16920c516838913956e6f86347b305fe29506e2b491Jiho Chang unsigned char green; 17020c516838913956e6f86347b305fe29506e2b491Jiho Chang unsigned char blue; 17120c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 17220c516838913956e6f86347b305fe29506e2b491Jiho Chang 17320c516838913956e6f86347b305fe29506e2b491Jiho Changenum s5ptvfb_ver_scaling_t { 17420c516838913956e6f86347b305fe29506e2b491Jiho Chang VERTICAL_X1, 17520c516838913956e6f86347b305fe29506e2b491Jiho Chang VERTICAL_X2, 17620c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 17720c516838913956e6f86347b305fe29506e2b491Jiho Chang 17820c516838913956e6f86347b305fe29506e2b491Jiho Changenum s5ptvfb_hor_scaling_t { 17920c516838913956e6f86347b305fe29506e2b491Jiho Chang HORIZONTAL_X1, 18020c516838913956e6f86347b305fe29506e2b491Jiho Chang HORIZONTAL_X2, 18120c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 18220c516838913956e6f86347b305fe29506e2b491Jiho Chang 18320c516838913956e6f86347b305fe29506e2b491Jiho Changstruct s5ptvfb_user_scaling { 18420c516838913956e6f86347b305fe29506e2b491Jiho Chang enum s5ptvfb_ver_scaling_t ver; 18520c516838913956e6f86347b305fe29506e2b491Jiho Chang enum s5ptvfb_hor_scaling_t hor; 18620c516838913956e6f86347b305fe29506e2b491Jiho Chang}; 18720c516838913956e6f86347b305fe29506e2b491Jiho Chang 18820c516838913956e6f86347b305fe29506e2b491Jiho Chang/******************************************* 18920c516838913956e6f86347b305fe29506e2b491Jiho Chang * custom ioctls 19020c516838913956e6f86347b305fe29506e2b491Jiho Chang *******************************************/ 19120c516838913956e6f86347b305fe29506e2b491Jiho Chang 19220c516838913956e6f86347b305fe29506e2b491Jiho Chang#define VIDIOC_S_BASEADDR _IOR('V', 83, int) 19320c516838913956e6f86347b305fe29506e2b491Jiho Chang 19420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define VIDIOC_HDCP_ENABLE _IOWR('V', 100, unsigned int) 19520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define VIDIOC_HDCP_STATUS _IOR('V', 101, unsigned int) 19620c516838913956e6f86347b305fe29506e2b491Jiho Chang#define VIDIOC_HDCP_PROT_STATUS _IOR('V', 102, unsigned int) 19720c516838913956e6f86347b305fe29506e2b491Jiho Chang 19820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define VIDIOC_INIT_AUDIO _IOR('V', 103, unsigned int) 19920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define VIDIOC_AV_MUTE _IOR('V', 104, unsigned int) 20020c516838913956e6f86347b305fe29506e2b491Jiho Chang#define VIDIOC_G_AVMUTE _IOR('V', 105, unsigned int) 20120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define HPD_GET_STATE _IOR('H', 100, unsigned int) 20220c516838913956e6f86347b305fe29506e2b491Jiho Chang 20320c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_WIN_POSITION _IOW('F', 213, struct s5ptvfb_user_window) 20420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_WIN_SET_PLANE_ALPHA _IOW('F', 214, struct s5ptvfb_user_plane_alpha) 20520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_WIN_SET_CHROMA _IOW('F', 215, struct s5ptvfb_user_chroma) 20620c516838913956e6f86347b305fe29506e2b491Jiho Chang 20720c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_SET_VSYNC_INT _IOW('F', 216, unsigned int) 20820c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_WAITFORVSYNC _IO('F', 32) 20920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_WIN_SET_ADDR _IOW('F', 219, unsigned int) 21020c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_SET_WIN_ON _IOW('F', 220, unsigned int) 21120c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_SET_WIN_OFF _IOW('F', 221, unsigned int) 21220c516838913956e6f86347b305fe29506e2b491Jiho Chang#define S5PTVFB_SCALING _IOW('F', 222, struct s5ptvfb_user_scaling) 21320c516838913956e6f86347b305fe29506e2b491Jiho Chang 21420c516838913956e6f86347b305fe29506e2b491Jiho Chang#ifdef __cplusplus 21520c516838913956e6f86347b305fe29506e2b491Jiho Chang} 21620c516838913956e6f86347b305fe29506e2b491Jiho Chang#endif 21720c516838913956e6f86347b305fe29506e2b491Jiho Chang 21820c516838913956e6f86347b305fe29506e2b491Jiho Chang#endif /* __S5P_TVOUT_H__ */ 219