Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2783)

Unified Diff: drivers/media/video/samsung/tv20/s5p_tv.h

Issue 2036011: V4L/DVB : Add S5PV210 TV out driver support (Closed) Base URL: swsolcc@12.23.106.100:kernel-samsung.git
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: drivers/media/video/samsung/tv20/s5p_tv.h
diff --git a/drivers/media/video/samsung/tv20/s5p_tv.h b/drivers/media/video/samsung/tv20/s5p_tv.h
new file mode 100644
index 0000000000000000000000000000000000000000..feeb01aa87ee8ec208a6fd3beb85c684065c6e89
--- /dev/null
+++ b/drivers/media/video/samsung/tv20/s5p_tv.h
@@ -0,0 +1,1024 @@
+/* linux/drivers/media/video/samsung/tv20/s5p_tv.h
+*
+* Copyright (c) 2010 Samsung Electronics Co., Ltd.
+* http://www.samsung.com/
+*
+* S5PV210 - TV out driver header file for Samsung TVOut driver
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2 as
+* published by the Free Software Foundation.
+*/
+
+#include <linux/fs.h>
+#include <linux/interrupt.h>
+#include <linux/videodev2.h>
+#include <linux/platform_device.h>
+#include <linux/fb.h>
+
+#include "tv_out_s5pv210.h"
+
+/* #define CONFIG_TVOUT_DBG */
+
+#define V4L2_STD_ALL_HD ((v4l2_std_id)0xffffffff)
+
+#define TVOUT_MINOR_TVOUT 14 /* TVOUT VIDEO OUT */
+#define TVOUT_MINOR_VID 21 /* VIDEO OVERLAY */
+
+#define USE_VMIXER_INTERRUPT 1
+
+#define AVI_RGB_IF (0x0<<5)
+#define AVI_YCBCR444_IF (0x2<<5)
+
+#define AVI_ITU601 (0x1<<6)
+#define AVI_ITU709 (0x2<<6)
+
+#define AVI_PAR_4_3 (0x1<<4)
+#define AVI_PAR_16_9 (0x2<<4)
+
+#define AVI_NO_PIXEL_REPEAT (0x0<<0)
+
+/* The below definition is for V4L2 Tile NV12 color format */
+#define V4L2_PIX_FMT_NV12T v4l2_fourcc('T', 'V', '1', '2')
+
+#define AVI_VIC_2 (2<<0) /* 720x480p@59.94/60Hz 4:3 */
+#define AVI_VIC_3 (3<<0) /* 720x480p@59.94/60Hz 16:9 */
+#define AVI_VIC_4 (4<<0) /* 1280x720p@59.94/60Hz 16:9 */
+#define AVI_VIC_5 (5<<0) /* 1920x1080i@59.94/60Hz 16:9 */
+#define AVI_VIC_16 (16<<0) /* 1920x1080p@60Hz 16:9 */
+#define AVI_VIC_17 (17<<0) /* 720x576p@50Hz 4:3 */
+#define AVI_VIC_18 (18<<0) /* 720x576p@50Hz 16:9 */
+#define AVI_VIC_19 (19<<0) /* 1280x720p@50Hz 16:9 */
+#define AVI_VIC_20 (20<<0) /* 1920x1080i@50Hz 16:9 */
+#define AVI_VIC_31 (31<<0) /* 1920x1080p@50Hz */
+#define AVI_VIC_34 (34<<0) /* 1920x1080p@30Hz */
+
+#define VP_UPDATE_RETRY_MAXIMUM 30
+#define VP_WAIT_UPDATE_SLEEP 3
+
+struct tvout_output_if {
+ enum s5p_tv_disp_mode disp_mode;
+ enum s5p_tv_o_mode out_mode;
+};
+
+struct s5p_img_size {
+ u32 img_width;
+ u32 img_height;
+};
+
+struct s5p_img_offset {
+ u32 offset_x;
+ u32 offset_y;
+};
+
+/*
+* Video Layer Data
+*/
+struct s5p_video_img_address {
+ u32 y_address;
+ u32 c_address;
+};
+
+struct s5p_vl_mode {
+ bool line_skip;
+ enum s5p_vp_mem_mode mem_mode;
+ enum s5p_vp_chroma_expansion chroma_exp;
+ enum s5p_vp_filed_id_toggle toggle_id;
+};
+
+struct s5p_vl_sharpness {
+ u32 th_noise;
+ enum s5p_vp_sharpness_control sharpness;
+};
+
+struct s5p_vl_csc_ctrl {
+ bool sub_y_offset_en;
+ bool csc_en;
+};
+
+struct s5p_video_poly_filter_coef {
+ enum s5p_vp_poly_coeff poly_coeff;
+ signed char ch0;
+ signed char ch1;
+ signed char ch2;
+ signed char ch3;
+};
+
+struct s5p_vl_bright_contrast_ctrl {
+ enum s5p_vp_line_eq eq_num;
+ u32 intc;
+ u32 slope;
+};
+
+struct s5p_video_csc_coef {
+ enum s5p_vp_csc_coeff csc_coeff;
+ u32 coeff;
+};
+
+struct s5p_vl_param {
+ bool win_blending;
+ u32 alpha;
+ u32 priority;
+ u32 top_y_address;
+ u32 top_c_address;
+ enum s5p_endian_type src_img_endian;
+ u32 img_width;
+ u32 img_height;
+ u32 src_offset_x;
+ u32 src_offset_y;
+ u32 src_width;
+ u32 src_height;
+ u32 dest_offset_x;
+ u32 dest_offset_y;
+ u32 dest_width;
+ u32 dest_height;
+};
+
+/*
+* GRP Layer Data
+*/
+struct s5p_tv_vo {
+ u32 index;
+ struct v4l2_framebuffer fb;
+ struct v4l2_window win;
+ struct v4l2_rect dst_rect;
+ bool win_blending;
+ bool blank_change;
+ bool pixel_blending;
+ bool pre_mul;
+ u32 blank_color;
+ u32 priority;
+ u32 base_addr;
+};
+
+/*
+*BG Layer Data
+*/
+struct s5p_bg_dither {
+ bool cr_dither_en;
+ bool cb_dither_en;
+ bool y_dither_en;
+};
+
+struct s5p_bg_color {
+ u32 color_y;
+ u32 color_cb;
+ u32 color_cr;
+};
+
+/*
+* Video Mixer Data
+*/
+struct s5p_vm_csc_coef {
+ enum s5p_yuv_fmt_component component;
+ enum s5p_tv_coef_y_mode mode;
+ u32 coeff_0;
+ u32 coeff_1;
+ u32 coeff_2;
+};
+
+/*
+* SDout Data
+*/
+struct s5p_sdout_order {
+ enum s5p_sd_order order;
+ bool dac[3];
+};
+
+struct s5p_sd_vscale_cfg {
+ enum s5p_sd_level component_level;
+ enum s5p_sd_vsync_ratio component_ratio;
+ enum s5p_sd_level composite_level;
+ enum s5p_sd_vsync_ratio composite_ratio;
+};
+
+struct s5p_sd_vbi {
+ bool wss_cvbs;
+ enum s5p_sd_closed_caption_type caption_cvbs;
+ bool wss_y_svideo;
+ enum s5p_sd_closed_caption_type caption_y_svideo;
+ bool cgmsa_rgb;
+ bool wss_rgb;
+ enum s5p_sd_closed_caption_type caption_rgb;
+ bool cgmsa_y_pb_pr;
+ bool wss_y_pb_pr;
+ enum s5p_sd_closed_caption_type caption_y_pb_pr;
+};
+
+struct s5p_sd_offset_gain {
+ enum s5p_sd_channel_sel channel;
+ u32 offset;
+ u32 gain;
+};
+
+struct s5p_sd_delay {
+ u32 delay_y;
+ u32 offset_video_start;
+ u32 offset_video_end;
+};
+
+struct s5p_sd_bright_hue_saturat {
+ bool bright_hue_sat_adj;
+ u32 gain_brightness;
+ u32 offset_brightness;
+ u32 gain0_cb_hue_saturation;
+ u32 gain1_cb_hue_saturation;
+ u32 gain0_cr_hue_saturation;
+ u32 gain1_cr_hue_saturation;
+ u32 offset_cb_hue_saturation;
+ u32 offset_cr_hue_saturation;
+};
+
+struct s5p_sd_rgb_compensat {
+ bool rgb_color_compensation;
+ u32 max_rgb_cube;
+ u32 min_rgb_cube;
+};
+
+struct s5p_sd_cvbs_compensat {
+ bool cvbs_color_compensation;
+ u32 y_lower_mid;
+ u32 y_bottom;
+ u32 y_top;
+ u32 y_upper_mid;
+ u32 radius;
+};
+
+struct s5p_sd_svideo_compensat {
+ bool y_color_compensation;
+ u32 y_top;
+ u32 y_bottom;
+ u32 yc_cylinder;
+};
+
+struct s5p_sd_component_porch {
+ u32 back_525;
+ u32 front_525;
+ u32 back_625;
+ u32 front_625;
+};
+
+struct s5p_sd_vesa_rgb_sync {
+ enum s5p_sd_vesa_rgb_sync_type sync_type;
+ enum s5p_tv_active_polarity vsync_active;
+ enum s5p_tv_active_polarity hsync_active;
+};
+
+struct s5p_sd_ch_xtalk_cancellat_coeff {
+ enum s5p_sd_channel_sel channel;
+ u32 coeff1;
+ u32 coeff2;
+};
+
+struct s5p_sd_closed_caption {
+ u32 display_cc;
+ u32 nondisplay_cc;
+};
+
+struct s5p_sd_525_data {
+ bool analog_on;
+ enum s5p_sd_525_copy_permit copy_permit;
+ enum s5p_sd_525_mv_psp mv_psp;
+ enum s5p_sd_525_copy_info copy_info;
+ enum s5p_sd_525_aspect_ratio display_ratio;
+};
+
+struct s5p_sd_625_data {
+ bool surroun_f_sound;
+ bool copyright;
+ bool copy_protection;
+ bool text_subtitles;
+ enum s5p_sd_625_subtitles open_subtitles;
+ enum s5p_sd_625_camera_film camera_film;
+ enum s5p_sd_625_color_encoding color_encoding;
+ bool helper_signal;
+ enum s5p_sd_625_aspect_ratio display_ratio;
+};
+
+/*
+* HDMI video Data
+*/
+struct s5p_hdmi_bluescreen {
+ bool enable;
+ u8 cb_b;
+ u8 y_g;
+ u8 cr_r;
+};
+
+struct s5p_hdmi_color_range {
+ u8 y_min;
+ u8 y_max;
+ u8 c_min;
+ u8 c_max;
+};
+
+struct s5p_hdmi_video_infoframe {
+ enum s5p_hdmi_transmit trans_type;
+ u8 check_sum;
+ u8 *data;
+};
+
+struct s5p_hdmi_tg_cmd {
+ bool timing_correction_en;
+ bool bt656_sync_en;
+ bool tg_en;
+};
+
+struct s5p_hdmi_spd_infoframe {
+ enum s5p_hdmi_transmit trans_type;
+ u8 *spd_header;
+ u8 *spd_data;
+};
+
+/*
+* TVout API Data
+*/
+struct s5p_tv_v4l2 {
+ struct v4l2_output *output;
+ struct v4l2_standard *std;
+ struct v4l2_format *fmt_v;
+ struct v4l2_format *fmt_vo_0;
+ struct v4l2_format *fmt_vo_1;
+};
+
+#define S5PTVFB_AVALUE(r, g, b) \
+ (((r & 0xf) << 8) | ((g & 0xf) << 4) | ((b & 0xf) << 0))
+#define S5PTVFB_CHROMA(r, g, b) \
+ (((r & 0xff) << 16) | ((g & 0xff) << 8) | ((b & 0xff) << 0))
+
+#define S5PTVFB_WIN_POSITION \
+ _IOW('F', 213, struct s5ptvfb_user_window)
+#define S5PTVFB_WIN_SET_PLANE_ALPHA \
+ _IOW('F', 214, struct s5ptvfb_user_plane_alpha)
+#define S5PTVFB_WIN_SET_CHROMA \
+ _IOW('F', 215, struct s5ptvfb_user_chroma)
+#define S5PTVFB_WAITFORVSYNC \
+ _IO('F', 32)
+#define S5PTVFB_SET_VSYNC_INT \
+ _IOW('F', 216, u32)
+#define S5PTVFB_POWER_OFF \
+ _IOW('F', 217, u32)
+#define S5PTVFB_POWER_ON \
+ _IOW('F', 218, u32)
+#define S5PTVFB_WIN_SET_ADDR \
+ _IOW('F', 219, u32)
+#define S5PTVFB_SET_WIN_ON \
+ _IOW('F', 220, u32)
+#define S5PTVFB_SET_WIN_OFF \
+ _IOW('F', 221, u32)
+
+enum s5ptvfb_data_path_t {
+ DATA_PATH_FIFO = 0,
+ DATA_PATH_DMA = 1,
+};
+
+enum s5ptvfb_alpha_t {
+ PLANE_BLENDING,
+ PIXEL_BLENDING,
+};
+
+enum s5ptvfb_chroma_dir_t {
+ CHROMA_FG,
+ CHROMA_BG,
+};
+
+struct s5ptvfb_alpha {
+ enum s5ptvfb_alpha_t mode;
+ int channel;
+ unsigned int value;
+};
+
+struct s5ptvfb_chroma {
+ int enabled;
+ int blended;
+ unsigned int key;
+ unsigned int comp_key;
+ unsigned int alpha;
+ enum s5ptvfb_chroma_dir_t dir;
+};
+
+struct s5ptvfb_user_window {
+ int x;
+ int y;
+};
+
+struct s5ptvfb_user_plane_alpha {
+ int channel;
+ unsigned char red;
+ unsigned char green;
+ unsigned char blue;
+};
+
+struct s5ptvfb_user_chroma {
+ int enabled;
+ unsigned char red;
+ unsigned char green;
+ unsigned char blue;
+};
+
+struct s5ptvfb_window {
+ int id;
+ int enabled;
+ atomic_t in_use;
+ int x;
+ int y;
+ enum s5ptvfb_data_path_t path;
+ int local_channel;
+ int dma_burst;
+ unsigned int pseudo_pal[16];
+ struct s5ptvfb_alpha alpha;
+ struct s5ptvfb_chroma chroma;
+ int (*suspend_fifo)(void);
+ int (*resume_fifo)(void);
+};
+
+struct s5ptvfb_lcd_timing {
+ int h_fp;
+ int h_bp;
+ int h_sw;
+ int v_fp;
+ int v_fpe;
+ int v_bp;
+ int v_bpe;
+ int v_sw;
+};
+
+struct s5ptvfb_lcd_polarity {
+ int rise_vclk;
+ int inv_hsync;
+ int inv_vsync;
+ int inv_vden;
+};
+
+struct s5ptvfb_lcd {
+ int width;
+ int height;
+ int bpp;
+ int freq;
+ struct s5ptvfb_lcd_timing timing;
+ struct s5ptvfb_lcd_polarity polarity;
+
+ void (*init_ldi)(void);
+};
+
+struct s5p_tv_status {
+ /* TVOUT_SET_INTERFACE_PARAM */
+ bool tvout_param_available;
+ struct tvout_output_if tvout_param;
+
+ /* TVOUT_SET_OUTPUT_ENABLE/DISABLE */
+ bool tvout_output_enable;
+
+ /* TVOUT_SET_LAYER_MODE/POSITION */
+ bool vl_mode;
+ bool grp_mode[2];
+
+ /* Video Layer Parameters */
+ struct s5p_vl_param vl_basic_param;
+ struct s5p_vl_mode vl_op_mode;
+ struct s5p_vl_sharpness vl_sharpness;
+ struct s5p_vl_csc_ctrl vl_csc_control;
+ struct s5p_vl_bright_contrast_ctrl vl_bc_control[8];
+
+ enum s5p_vp_src_color src_color;
+ enum s5p_vp_field field_id;
+ enum s5p_vp_pxl_rate vl_rate;
+ enum s5p_vp_csc_type vl_csc_type;
+
+ u32 vl_top_y_address;
+ u32 vl_top_c_address;
+ u32 vl_bottom_y_address;
+ u32 vl_bottom_c_address;
+ u32 vl_src_offset_x;
+ u32 vl_src_x_fact_step;
+ u32 vl_src_offset_y;
+ u32 vl_src_width;
+ u32 vl_src_height;
+ u32 vl_dest_offset_x;
+ u32 vl_dest_offset_y;
+ u32 vl_dest_width;
+ u32 vl_dest_height;
+ bool vl2d_ipc;
+
+ bool vl_poly_filter_default;
+ bool vl_bypass_post_process;
+ u32 vl_saturation;
+ bool us_vl_brightness;
+ u8 vl_contrast;
+ u32 vl_bright_offset;
+ bool vl_csc_coef_default;
+
+ /* GRP Layer Common Parameters */
+ enum s5p_vmx_burst_mode grp_burst;
+ enum s5p_endian_type grp_endian;
+
+ /* BackGroung Layer Parameters */
+ struct s5p_bg_dither bg_dither;
+ struct s5p_bg_color bg_color[3];
+
+ /* Video Mixer Parameters */
+ bool vm_csc_coeff_default;
+
+ /* SDout Parameters */
+ struct s5p_sd_vscale_cfg sdout_video_scale_cfg;
+ struct s5p_sd_vbi sdout_vbi;
+ struct s5p_sd_offset_gain sdout_offset_gain[3];
+ struct s5p_sd_delay sdout_delay;
+ struct s5p_sd_bright_hue_saturat sdout_bri_hue_set;
+ struct s5p_sd_rgb_compensat sdout_rgb_compen;
+ struct s5p_sd_cvbs_compensat sdout_cvbs_compen;
+ struct s5p_sd_svideo_compensat sdout_svideo_compen;
+ struct s5p_sd_component_porch sdout_comp_porch;
+ struct s5p_sd_vesa_rgb_sync sdout_rgb_sync;
+ struct s5p_sd_ch_xtalk_cancellat_coeff sdout_xtalk_cc[3];
+ struct s5p_sd_closed_caption sdout_closed_capt;
+ struct s5p_sd_525_data sdout_wss_525;
+ struct s5p_sd_625_data sdout_wss_625;
+ struct s5p_sd_525_data sdout_cgms_525;
+ struct s5p_sd_625_data sdout_cgms_625;
+
+ enum s5p_sd_order sdout_order;
+ enum s5p_sd_sync_sig_pin sdout_sync_pin;
+
+ bool sdout_color_sub_carrier_phase_adj;
+ bool sdout_dac_on[3];
+ bool sdout_y_pb_pr_comp;
+
+ /* HDMI video parameters */
+ struct s5p_hdmi_bluescreen hdmi_video_blue_screen;
+ struct s5p_hdmi_color_range hdmi_color_range;
+ struct s5p_hdmi_video_infoframe hdmi_av_info_frame;
+ struct s5p_hdmi_video_infoframe hdmi_mpg_info_frame;
+ struct s5p_hdmi_tg_cmd hdmi_tg_cmd;
+ u8 avi_byte[13];
+ u8 mpg_byte[5];
+
+ /* HDMI parameters */
+ struct s5p_hdmi_spd_infoframe hdmi_spd_info_frame;
+ u8 spd_header[3];
+ u8 spd_data[28];
+ bool hdcp_en;
+ enum s5p_hdmi_audio_type hdmi_audio_type;
+ bool hpd_status;
+
+ /* TVOUT_SET_LAYER_ENABLE/DISABLE */
+ bool vp_layer_enable;
+ bool grp_layer_enable[2];
+
+ /* i2c for hdcp port */
+
+ struct i2c_client *hdcp_i2c_client;
+
+ struct s5p_tv_vo overlay[2];
+
+ struct video_device *video_dev[3];
+
+ struct clk *tvenc_clk;
+ struct clk *vp_clk;
+ struct clk *mixer_clk;
+ struct clk *hdmi_clk;
+ struct clk *i2c_phy_clk;
+ struct clk *sclk_tv;
+ struct clk *sclk_hdmi;
+ struct clk *sclk_mixer;
+
+ struct s5p_tv_v4l2 v4l2;
+
+ struct s5ptvfb_window win;
+ struct fb_info *fb;
+ struct device *dev_fb;
+
+ struct s5ptvfb_lcd *lcd;
+ struct mutex fb_lock;
+};
+
+/* Interrupt for Vsync */
+extern wait_queue_head_t s5ptv_wq;
+
+/* F R A M E B U F F E R */
+#define S5PTVFB_NAME "s5ptvfb"
+
+/*
+* V4L2 TVOUT EXTENSIONS
+*
+*/
+/* Input */
+#define V4L2_INPUT_TYPE_MSDMA 3
+#define V4L2_INPUT_TYPE_FIFO 4
+
+/* Output */
+#define V4L2_OUTPUT_TYPE_MSDMA 4
+#define V4L2_OUTPUT_TYPE_COMPOSITE 5
+#define V4L2_OUTPUT_TYPE_SVIDEO 6
+#define V4L2_OUTPUT_TYPE_YPBPR_INERLACED 7
+#define V4L2_OUTPUT_TYPE_YPBPR_PROGRESSIVE 8
+#define V4L2_OUTPUT_TYPE_RGB_PROGRESSIVE 9
+#define V4L2_OUTPUT_TYPE_DIGITAL 10
+#define V4L2_OUTPUT_TYPE_HDMI V4L2_OUTPUT_TYPE_DIGITAL
+#define V4L2_OUTPUT_TYPE_HDMI_RGB 11
+#define V4L2_OUTPUT_TYPE_DVI 12
+
+/* STD */
+#define V4L2_STD_PAL_BDGHI (V4L2_STD_PAL_B| \
+ V4L2_STD_PAL_D| \
+ V4L2_STD_PAL_G| \
+ V4L2_STD_PAL_H| \
+ V4L2_STD_PAL_I)
+
+#define V4L2_STD_480P_60_16_9 ((v4l2_std_id)0x04000000)
+#define V4L2_STD_480P_60_4_3 ((v4l2_std_id)0x05000000)
+#define V4L2_STD_576P_50_16_9 ((v4l2_std_id)0x06000000)
+#define V4L2_STD_576P_50_4_3 ((v4l2_std_id)0x07000000)
+#define V4L2_STD_720P_60 ((v4l2_std_id)0x08000000)
+#define V4L2_STD_720P_50 ((v4l2_std_id)0x09000000)
+#define V4L2_STD_1080P_60 ((v4l2_std_id)0x0a000000)
+#define V4L2_STD_1080P_50 ((v4l2_std_id)0x0b000000)
+#define V4L2_STD_1080I_60 ((v4l2_std_id)0x0c000000)
+#define V4L2_STD_1080I_50 ((v4l2_std_id)0x0d000000)
+#define V4L2_STD_480P_59 ((v4l2_std_id)0x0e000000)
+#define V4L2_STD_720P_59 ((v4l2_std_id)0x0f000000)
+#define V4L2_STD_1080I_59 ((v4l2_std_id)0x10000000)
+#define V4L2_STD_1080P_59 ((v4l2_std_id)0x11000000)
+#define V4L2_STD_1080P_30 ((v4l2_std_id)0x12000000)
+
+#define FORMAT_FLAGS_DITHER 0x01
+#define FORMAT_FLAGS_PACKED 0x02
+#define FORMAT_FLAGS_PLANAR 0x04
+#define FORMAT_FLAGS_RAW 0x08
+#define FORMAT_FLAGS_CrCb 0x10
+
+/* ext. param */
+#define V4L2_FBUF_FLAG_PRE_MULTIPLY 0x0040
+#define V4L2_FBUF_CAP_PRE_MULTIPLY 0x0080
+
+struct v4l2_window_s5p_tvout {
+ u32 capability;
+ u32 flags;
+ u32 priority;
+
+ struct v4l2_window win;
+};
+
+struct v4l2_pix_format_s5p_tvout {
+ void *base_y;
+ void *base_c;
+ bool src_img_endian;
+
+ struct v4l2_pix_format pix_fmt;
+};
+
+extern const struct v4l2_ioctl_ops s5p_tv_v4l2_v_ops;
+extern const struct v4l2_ioctl_ops s5p_tv_v4l2_vo_ops;
+extern const struct v4l2_ioctl_ops s5p_tv_v4l2_ops;
+extern const struct v4l2_ioctl_ops s5p_tv_v4l2_vid_ops;
+
+extern struct s5p_tv_status s5ptv_status;
+
+extern void s5p_tv_v4l2_init_param(void);
+
+extern long s5p_tv_ioctl(struct file *file, u32 cmd, unsigned long arg);
+extern long s5p_tv_vid_ioctl(struct file *file, u32 cmd, unsigned long arg);
+extern long s5p_tv_v_ioctl(struct file *file, u32 cmd, unsigned long arg);
+extern long s5p_tv_vo_ioctl(struct file *file, u32 cmd, unsigned long arg);
+
+/*
+ * STDA layer api - must be refine!!
+ *
+*/
+
+int __init tv_hdmi_probe(
+ struct platform_device *pdev, u32 res_num, u32 res_num2);
+int tv_hdmi_phy_power(bool on);
+
+int __init tv_sdout_probe(struct platform_device *pdev, u32 res_num);
+int __init tv_mixer_probe(struct platform_device *pdev, u32 res_num);
+int __init tv_vp_probe(struct platform_device *pdev, u32 res_num);
+
+int __init tv_hdmi_release(struct platform_device *pdev);
+int __init tv_sdout_release(struct platform_device *pdev);
+int __init tv_mixer_release(struct platform_device *pdev);
+int __init tv_vp_release(struct platform_device *pdev);
+
+/* GRP */
+extern bool tv_grp_api_proc(unsigned long arg, u32 cmd);
+extern bool tv_grp_init_param(
+ enum s5p_tv_vmx_layer vm_layer, unsigned long p_buf_in);
+extern bool tv_grp_start(enum s5p_tv_vmx_layer vmLayer);
+extern bool tv_grp_stop(enum s5p_tv_vmx_layer vmLayer);
+
+/* TVOUT_IF */
+extern bool tv_if_api_proc(unsigned long arg, u32 cmd);
+extern bool tv_if_init_param(void);
+extern bool tv_if_start(void);
+extern bool tv_if_stop(void);
+extern bool tv_if_set_disp(void);
+
+/* Video Layer */
+extern bool tv_vlayer_set_blending(unsigned long p_buf_in);
+extern bool tv_vlayer_set_alpha(unsigned long p_buf_in);
+extern bool tv_vlayer_api_proc(unsigned long arg, u32 cmd);
+extern bool tv_vlayer_init_param(unsigned long p_buf_in);
+extern bool tv_vlayer_set_priority(unsigned long p_buf_in);
+extern bool tv_vlayer_set_field_id(unsigned long p_buf_in);
+extern bool tv_vlayer_set_top_address(unsigned long p_buf_in);
+extern bool tv_vlayer_set_bottom_address(unsigned long p_buf_in);
+extern bool tv_vlayer_set_img_size(unsigned long p_buf_in);
+extern bool tv_vlayer_set_src_position(unsigned long p_buf_in);
+extern bool tv_vlayer_set_dest_position(unsigned long p_buf_in);
+extern bool tv_vlayer_set_src_size(unsigned long p_buf_in);
+extern bool tv_vlayer_set_dest_size(unsigned long p_buf_in);
+extern bool tv_vlayer_set_brightness(unsigned long p_buf_in);
+extern bool tv_vlayer_set_contrast(unsigned long p_buf_in);
+extern void tv_vlayer_get_priority(unsigned long p_buf_out);
+extern bool tv_vlayer_set_brightness_contrast_control(
+ unsigned long p_buf_in);
+extern bool tv_vlayer_set_poly_filter_coef(unsigned long p_buf_in);
+extern bool tv_vlayer_set_csc_coef(unsigned long p_buf_in);
+extern bool tv_vlayer_start(void);
+extern bool tv_vlayer_stop(void);
+
+/*
+ * raw i/o ftn!!
+ *
+*/
+/* HDCP */
+irqreturn_t tv_hdmi_irq(int irq, void *dev_id);
+void tv_set_hpd_detection(u32 detection_type, bool hdcp_enabled,
+ struct i2c_client *client);
+bool tv_start_hdcp(void);
+bool tv_stop_hdcp(void);
+void tv_hdcp_reset(void);
+
+/* HDMI */
+void tv_hdmi_set_hpd_onoff(bool on_off);
+void tv_hdmi_audio_set_config(enum s5p_tv_audio_codec_type audio_codec);
+void tv_hdmi_audio_set_acr(u32 sample_rate);
+void tv_hdmi_audio_set_asp(void);
+void tv_hdmi_audio_clock_enable(void);
+void tv_hdmi_audio_set_repetition_time(
+ enum s5p_tv_audio_codec_type audio_codec,
+ u32 bits, u32 frame_size_code);
+void tv_hdmi_audio_irq_enable(u32 irq_en);
+void tv_hdmi_audio_set_aui(enum s5p_tv_audio_codec_type audio_codec,
+ u32 sample_rate, u32 bits);
+void tv_hdmi_video_set_bluescreen(bool en, u8 cb, u8 y_g, u8 cr_r);
+enum s5p_tv_hdmi_err tv_hdmi_init_spd_infoframe(
+ enum s5p_hdmi_transmit trans_type,
+ u8 *spd_header, u8 *spd_data);
+void tv_hdmi_init_hpd_onoff(bool on_off);
+enum s5p_tv_hdmi_err tv_hdmi_audio_init(
+ enum s5p_tv_audio_codec_type audio_codec,
+ u32 sample_rate, u32 bits, u32 frame_size_code);
+enum s5p_tv_hdmi_err tv_hdmi_video_init_display_mode(
+ enum s5p_tv_disp_mode disp_mode, enum s5p_tv_o_mode out_mode);
+void tv_hdmi_video_init_bluescreen(bool en, u8 cb, u8 y_g, u8 cr_r);
+void tv_hdmi_video_init_color_range(u8 y_min, u8 y_max,
+ u8 c_min, u8 c_max);
+enum s5p_tv_hdmi_err tv_hdmi_video_init_csc(enum s5p_tv_hdmi_csc_type csc_type);
+enum s5p_tv_hdmi_err tv_hdmi_video_init_avi_infoframe(
+ enum s5p_hdmi_transmit trans_type, u8 check_sum, u8 *pavi_data);
+enum s5p_tv_hdmi_err tv_hdmi_video_init_mpg_infoframe(
+ enum s5p_hdmi_transmit trans_type, u8 check_sum, u8 *pmpg_data);
+void tv_hdmi_video_init_tg_cmd(bool t_correction_en,
+ bool BT656_sync_en, bool tg_en);
+bool tv_hdmi_start(enum s5p_hdmi_audio_type hdmi_audio_type,
+ bool HDCP_en, struct i2c_client *ddc_port);
+void tv_hdmi_stop(void);
+
+/* SDOUT */
+enum s5p_tv_sd_err tv_sdout_init_video_scale_cfg(
+ enum s5p_sd_level component_level,
+ enum s5p_sd_vsync_ratio component_ratio,
+ enum s5p_sd_level composite_level,
+ enum s5p_sd_vsync_ratio composite_ratio);
+enum s5p_tv_sd_err tv_sdout_init_sync_signal_pin(enum s5p_sd_sync_sig_pin pin);
+enum s5p_tv_sd_err tv_sdout_init_vbi(bool wss_cvbs,
+ enum s5p_sd_closed_caption_type caption_cvbs, bool wss_y_sideo,
+ enum s5p_sd_closed_caption_type caption_y_sideo, bool cgmsa_rgb,
+ bool wss_rgb, enum s5p_sd_closed_caption_type caption_rgb,
+ bool cgmsa_y_ppr, bool wss_y_ppr,
+ enum s5p_sd_closed_caption_type caption_y_ppr);
+enum s5p_tv_sd_err tv_sdout_init_offset_gain(
+ enum s5p_sd_channel_sel channel, u32 offset, u32 gain);
+void tv_sdout_init_delay(
+ u32 delay_y, u32 offset_video_start, u32 offset_video_end);
+void tv_sdout_init_schlock(bool color_sucarrier_pha_adj);
+enum s5p_tv_sd_err tv_sdout_init_dac_power_onoff(
+ enum s5p_sd_channel_sel channel, bool dac_on);
+void tv_sdout_init_color_compensaton_onoff(bool bright_hue_saturation_adj,
+ bool y_ppr_color_compensation, bool rgb_color_compensation,
+ bool y_c_color_compensation, bool y_cvbs_color_compensation);
+void tv_sdout_init_brightness_hue_saturation(u32 gain_brightness,
+ u32 offset_brightness, u32 gain0_cb_hue_saturation,
+ u32 gain1_cb_hue_saturation, u32 gain0_cr_hue_saturation,
+ u32 gain1_cr_hue_saturation, u32 offset_cb_hue_saturation,
+ u32 offset_cr_hue_saturation);
+void tv_sdout_init_rgb_color_compensation(
+ u32 max_rgb_cube, u32 min_rgb_cube);
+void tv_sdout_init_cvbs_color_compensation(u32 y_lower_mid, u32 y_bottom,
+ u32 y_top, u32 y_upper_mid, u32 radius);
+void tv_sdout_init_svideo_color_compensation(u32 y_top, u32 y_bottom,
+ u32 y_c_cylinder);
+void tv_sdout_init_component_porch(u32 back_525, u32 front_525,
+ u32 back_625, u32 front_625);
+enum s5p_tv_sd_err tv_sdout_init_vesa_rgb_sync(
+ enum s5p_sd_vesa_rgb_sync_type sync_type,
+ enum s5p_tv_active_polarity v_sync_active,
+ enum s5p_tv_active_polarity h_sync_active);
+void tv_sdout_init_oversampling_filter_coeff(
+ u32 size, u32 *pcoeff0, u32 *pcoeff1, u32 *pcoeff2);
+enum s5p_tv_sd_err tv_sdout_init_ch_xtalk_cancel_coef(
+ enum s5p_sd_channel_sel channel, u32 coeff2, u32 coeff1);
+void tv_sdout_init_closed_caption(u32 display_cc, u32 non_display_cc);
+enum s5p_tv_sd_err tv_sdout_init_wss525_data(
+ enum s5p_sd_525_copy_permit copy_permit, enum s5p_sd_525_mv_psp mv_psp,
+ enum s5p_sd_525_copy_info copy_info, bool analog_on,
+ enum s5p_sd_525_aspect_ratio display_ratio);
+enum s5p_tv_sd_err tv_sdout_init_wss625_data(bool surround_sound,
+ bool copyright, bool copy_protection, bool text_subtitles,
+ enum s5p_sd_625_subtitles open_subtitles,
+ enum s5p_sd_625_camera_film camera_film,
+ enum s5p_sd_625_color_encoding color_encoding, bool helper_signal,
+ enum s5p_sd_625_aspect_ratio display_ratio);
+enum s5p_tv_sd_err tv_sdout_init_cgmsa525_data(
+ enum s5p_sd_525_copy_permit copy_permit, enum s5p_sd_525_mv_psp mv_psp,
+ enum s5p_sd_525_copy_info copy_info, bool analog_on,
+ enum s5p_sd_525_aspect_ratio display_ratio);
+enum s5p_tv_sd_err tv_sdout_init_cgmsa625_data(bool surround_sound,
+ bool copyright, bool copy_protection, bool text_subtitles,
+ enum s5p_sd_625_subtitles open_subtitles,
+ enum s5p_sd_625_camera_film camera_film,
+ enum s5p_sd_625_color_encoding color_encoding, bool helper_signal,
+ enum s5p_sd_625_aspect_ratio display_ratio);
+enum s5p_tv_sd_err tv_sdout_init_display_mode(enum s5p_tv_disp_mode disp_mode,
+ enum s5p_tv_o_mode out_mode, enum s5p_sd_order order);
+void tv_sdout_start(void);
+void tv_sdout_stop(void);
+void tv_sdout_sw_reset(bool active);
+void tv_sdout_set_interrupt_enable(bool vsync_intr_en);
+void tv_sdout_clear_interrupt_pending(void);
+bool tv_sdout_get_interrupt_pending(void);
+
+/* VMIXER */
+enum s5p_tv_vmx_err tv_vm_set_win_blend(
+ enum s5p_tv_vmx_layer layer, bool enable);
+enum s5p_tv_vmx_err tv_vm_set_layer_alpha(
+ enum s5p_tv_vmx_layer layer, u32 alpha);
+enum s5p_tv_vmx_err tv_vm_set_layer_show(
+ enum s5p_tv_vmx_layer layer, bool show);
+enum s5p_tv_vmx_err tv_vm_set_layer_priority(
+ enum s5p_tv_vmx_layer layer, u32 priority);
+enum s5p_tv_vmx_err tv_vm_set_grp_base_address(
+ enum s5p_tv_vmx_layer layer, u32 baseaddr);
+enum s5p_tv_vmx_err tv_vm_set_grp_layer_position(enum s5p_tv_vmx_layer layer,
+ u32 dst_offs_x, u32 dst_offs_y);
+enum s5p_tv_vmx_err tv_vm_set_grp_layer_size(enum s5p_tv_vmx_layer layer,
+ u32 span, u32 width, u32 height, u32 src_offs_x, u32 src_offs_y);
+enum s5p_tv_vmx_err tv_vm_set_bg_color(enum s5p_tv_vmx_bg_color_num colornum,
+ u32 color_y, u32 color_cb, u32 color_cr);
+enum s5p_tv_vmx_err tv_vm_init_status_reg(enum s5p_vmx_burst_mode burst,
+ enum s5p_endian_type endian);
+enum s5p_tv_vmx_err tv_vm_init_display_mode(enum s5p_tv_disp_mode mode,
+ enum s5p_tv_o_mode output_mode);
+
+/* for grp layer scaling */
+enum s5p_tv_vmx_err tv_vm_init_layer(enum s5p_tv_disp_mode mode,
+ enum s5p_tv_vmx_layer layer, bool show, bool winblending, u32 alpha,
+ u32 priority, enum s5p_tv_vmx_color_fmt color, bool blankchange,
+ bool pixelblending, bool premul, u32 blankcolor, u32 baseaddr,
+ u32 span, u32 width, u32 height, u32 src_offs_x, u32 src_offs_y,
+ u32 dst_offs_x, u32 dst_offs_y, u32 dst_x, u32 dst_y);
+void tv_vm_set_ctrl(enum s5p_tv_vmx_layer layer, bool premul,
+ bool pixel_blending, bool blank_change, bool win_blending,
+ enum s5p_tv_vmx_color_fmt color, u32 alpha, u32 blank_color);
+void tv_vm_init_bg_dither_enable(bool cr_dither_enable,
+ bool cdither_enable, bool y_dither_enable);
+enum s5p_tv_vmx_err tv_vm_init_bg_color(enum s5p_tv_vmx_bg_color_num color_num,
+ u32 color_y, u32 color_cb, u32 color_cr);
+enum s5p_tv_vmx_err tv_vm_init_csc_coef(enum s5p_yuv_fmt_component component,
+ enum s5p_tv_coef_y_mode mode, u32 coeff0, u32 coeff1, u32 coeff2);
+void tv_vm_init_csc_coef_default(enum s5p_tv_vmx_csc_type csc_type);
+enum s5p_tv_vmx_err tv_vm_get_layer_info(enum s5p_tv_vmx_layer layer,
+ bool *show, u32 *priority);
+void tv_vm_start(void);
+void tv_vm_stop(void);
+enum s5p_tv_vmx_err tv_vm_set_underflow_interrupt_enable(
+ enum s5p_tv_vmx_layer layer, bool en);
+enum s5p_tv_vmx_err tv_vm_set_vsync_interrupt(bool en);
+void tv_vm_clear_pend_all(void);
+irqreturn_t tv_mixer_irq(int irq, void *dev_id);
+
+/* VPROCESSOR */
+void tv_vp_set_field_id(enum s5p_vp_field mode);
+enum s5p_tv_vp_err tv_vp_set_top_field_address(u32 top_y_addr,
+ u32 top_c_addr);
+enum s5p_tv_vp_err tv_vp_set_bottom_field_address(u32 bottom_y_addr,
+ u32 bottom_c_addr);
+enum s5p_tv_vp_err tv_vp_set_img_size(u32 img_width, u32 img_height);
+void tv_vp_set_src_position(u32 src_off_x, u32 src_x_fract_step,
+ u32 src_off_y);
+void tv_vp_set_dest_position(u32 dst_off_x, u32 dst_off_y);
+void tv_vp_set_src_dest_size(u32 src_width, u32 src_height, u32 dst_width,
+ u32 dst_height, bool ipc_2d);
+enum s5p_tv_vp_err tv_vp_set_poly_filter_coef(enum s5p_vp_poly_coeff poly_coeff,
+ signed char ch0, signed char ch1, signed char ch2, signed char ch3);
+void tv_vp_set_poly_filter_coef_default(u32 h_ratio, u32 v_ratio);
+void tv_vp_set_src_dest_size_with_default_poly_filter_coef(u32 src_width,
+ u32 src_height, u32 dst_width, u32 dst_height, bool ipc_2d);
+enum s5p_tv_vp_err tv_vp_set_brightness_contrast_control(
+ enum s5p_vp_line_eq eq_num, u32 intc, u32 slope);
+void tv_vp_set_brightness(bool brightness);
+void tv_vp_set_contrast(u8 contrast);
+enum s5p_tv_vp_err tv_vp_update(void);
+enum s5p_vp_field tv_vp_get_field_id(void);
+bool tv_vp_get_update_status(void);
+void tv_vp_init_field_id(enum s5p_vp_field mode);
+void tv_vp_init_op_mode(bool line_skip, enum s5p_vp_mem_mode mem_mode,
+ enum s5p_vp_chroma_expansion chroma_exp,
+ enum s5p_vp_filed_id_toggle toggle_id);
+void tv_vp_init_pixel_rate_control(enum s5p_vp_pxl_rate rate);
+enum s5p_tv_vp_err tv_vp_init_layer(u32 top_y_addr, u32 top_c_addr,
+ u32 bottom_y_addr, u32 bottom_c_addr,
+ enum s5p_endian_type src_img_endian, u32 img_width, u32 img_height,
+ u32 src_off_x, u32 src_x_fract_step, u32 src_off_y, u32 src_width,
+ u32 src_height, u32 dst_off_x, u32 dst_off_y, u32 dst_width,
+ u32 dst_height, bool ipc_2d);
+enum s5p_tv_vp_err tv_vp_init_layer_def_poly_filter_coef(u32 top_y_addr,
+ u32 top_c_addr, u32 bottom_y_addr, u32 bottom_c_addr,
+ enum s5p_endian_type src_img_endian, u32 img_width, u32 img_height,
+ u32 src_off_x, u32 src_x_fract_step, u32 src_off_y, u32 src_width,
+ u32 src_height, u32 dst_off_x, u32 dst_off_y, u32 dst_width,
+ u32 dst_height, bool ipc_2d);
+enum s5p_tv_vp_err tv_vp_init_poly_filter_coef(
+ enum s5p_vp_poly_coeff poly_coeff, signed char ch0, signed char ch1,
+ signed char ch2, signed char ch3);
+void tv_vp_init_bypass_post_process(bool bypass);
+enum s5p_tv_vp_err tv_vp_init_csc_coef(enum s5p_vp_csc_coeff csc_coeff,
+ u32 coeff);
+void tv_vp_init_saturation(u32 sat);
+void tv_vp_init_sharpness(u32 th_h_noise,
+ enum s5p_vp_sharpness_control sharpness);
+enum s5p_tv_vp_err tv_vp_init_brightness_contrast_control(
+ enum s5p_vp_line_eq eq_num, u32 intc, u32 slope);
+void tv_vp_init_brightness(bool brightness);
+void tv_vp_init_contrast(u8 contrast);
+void tv_vp_init_brightness_offset(u32 offset);
+void tv_vp_init_csc_control(bool suy_offset_en, bool csc_en);
+enum s5p_tv_vp_err tv_vp_init_csc_coef_default(enum s5p_vp_csc_type csc_type);
+enum s5p_tv_vp_err tv_vp_start(void);
+enum s5p_tv_vp_err tv_vp_stop(void);
+void tv_vp_sw_reset(void);
+
+/* TV_CLOCK */
+void tv_clk_init_hpll(u32 lock_time, bool vsel, u32 mdiv,
+ u32 pdiv, u32 sdiv);
+int tv_clk_change_internal(void);
+
+enum s5p_tv_clk_err tv_clk_init_mout_hpll(
+ enum s5p_tv_clk_mout_hpll mout_hpll);
+enum s5p_tv_clk_err tv_clk_init_video_mixer(
+ enum s5p_tv_clk_vmiexr_srcclk src_clk);
+void tv_clk_init_hdmi_ratio(u32 clk_div);
+void tv_clk_set_hdmi_i2c_clk_onoff(bool clk_on);
+
+/* TV_POWER */
+void tv_power_init_mtc_stable_counter(u32 value);
+void tv_powerinitialize_dac_onoff(bool on);
+void tv_powerset_dac_onoff(bool on);
+bool tv_power_get_power_status(void);
+bool tv_power_get_dac_power_status(void);
+void tv_poweron(void);
+void tv_poweroff(void);
+
+extern struct s5p_tv_status s5ptv_status;
+extern struct s5p_tv_vo s5ptv_overlay[2];
+extern void s5p_hdmi_enable_interrupts(enum s5p_tv_hdmi_interrrupt intr);
+extern void s5p_hdmi_disable_interrupts(enum s5p_tv_hdmi_interrrupt intr);
+extern void s5p_hdmi_clear_pending(enum s5p_tv_hdmi_interrrupt intr);
+extern u8 s5p_hdmi_get_interrupts(void);
+extern int s5p_hdmi_register_isr(hdmi_isr isr, u8 irq_num);
+extern int s5p_hpd_init(void);
+extern u8 s5p_hdmi_get_swhpd_status(void);
+extern u8 s5p_hdmi_get_hpd_status(void);
+extern void s5p_hdmi_swhpd_disable(void);
+extern void s5p_hdmi_hpd_gen(void);
+extern int __init tv_hdcp_init(void);
+extern int s5p_tv_clk_gate(bool on);
+extern int s5ptvfb_init_fbinfo(int id);
+extern int s5ptvfb_map_video_memory(struct fb_info *fb);
+extern int s5ptvfb_check_var(struct fb_var_screeninfo *var,
+ struct fb_info *fb);
+extern int s5ptvfb_set_par(struct fb_info *fb);
+extern void s5ptvfb_set_lcd_info(struct s5p_tv_status *ctrl);
+extern int s5ptvfb_display_on(struct s5p_tv_status *ctrl);
+extern bool tv_if_set_disp(void);
+extern int s5p_hpd_get_state(void);
+extern void s5p_tv_kobject_uevent(struct work_struct *data);
+extern int s5ptvfb_alloc_framebuffer(void);
+extern int s5ptvfb_free_framebuffer(void);
+extern int s5ptvfb_register_framebuffer(void);
+extern int s5ptvfb_unregister_framebuffer(void);
+extern int s5ptvfb_unmap_video_memory(struct fb_info *fb);
+extern void s5p_tv_v4l2_init_param(void);
+extern int s5p_tv_clk_gate(bool on);
+extern int tv_phy_power(bool on);
« no previous file with comments | « drivers/media/video/samsung/tv20/s5p_stda_video_layer.c ('k') | drivers/media/video/samsung/tv20/s5p_tv_base.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698