Merge tag 'v3.10.55' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / mach-mt8127 / kr076_nand / hdmi / inc / hdmi_drv.h
1 #ifndef __HDMI_DRV_H__
2 #define __HDMI_DRV_H__
3
4 #ifdef CONFIG_MTK_MT8193_HDMI_SUPPORT
5
6 #include "mt8193hdmictrl.h"
7 #include "mt8193edid.h"
8 #include "mt8193cec.h"
9
10 #define AVD_TMR_ISR_TICKS 5
11 #define MDI_BOUCING_TIMING 50//20 //20ms
12
13 typedef enum
14 {
15 HDMI_CEC_CMD=0,
16 HDMI_PLUG_DETECT_CMD,
17 HDMI_HDCP_PROTOCAL_CMD,
18 HDMI_DISABLE_HDMI_TASK_CMD,
19 MAX_HDMI_TMR_NUMBER
20
21 }HDMI_TASK_COMMAND_TYPE_T;
22
23 #endif
24
25 #ifndef ARY_SIZE
26 #define ARY_SIZE(x) (sizeof((x)) / sizeof((x[0])))
27 #endif
28
29 typedef enum
30 {
31 HDMI_POLARITY_RISING = 0,
32 HDMI_POLARITY_FALLING = 1
33 }HDMI_POLARITY;
34
35 typedef enum
36 {
37 HDMI_CLOCK_PHASE_0 = 0,
38 HDMI_CLOCK_PHASE_90 = 1
39 }HDMI_CLOCK_PHASE;
40
41 typedef enum
42 {
43 HDMI_COLOR_ORDER_RGB = 0,
44 HDMI_COLOR_ORDER_BGR = 1
45 }HDMI_COLOR_ORDER;
46
47 typedef enum
48 {
49 IO_DRIVING_CURRENT_8MA = (1 << 0),
50 IO_DRIVING_CURRENT_4MA = (1 << 1),
51 IO_DRIVING_CURRENT_2MA = (1 << 2),
52 IO_DRIVING_CURRENT_SLEW_CNTL = (1 << 3),
53 }IO_DRIVING_CURRENT;
54
55 #if !defined(CONFIG_MTK_MT8193_HDMI_SUPPORT)
56 typedef enum
57 {
58 HDMI_VIDEO_720x480p_60Hz = 0,
59 HDMI_VIDEO_1280x720p_60Hz =2,
60 HDMI_VIDEO_1920x1080p_30Hz =6,
61 HDMI_VIDEO_RESOLUTION_NUM
62 }HDMI_VIDEO_RESOLUTION;
63 #endif
64
65 typedef enum
66 {
67 HDMI_VIN_FORMAT_RGB565,
68 HDMI_VIN_FORMAT_RGB666,
69 HDMI_VIN_FORMAT_RGB888,
70 } HDMI_VIDEO_INPUT_FORMAT;
71
72 typedef enum
73 {
74 HDMI_VOUT_FORMAT_RGB888,
75 HDMI_VOUT_FORMAT_YUV422,
76 HDMI_VOUT_FORMAT_YUV444,
77 }HDMI_VIDEO_OUTPUT_FORMAT;
78
79 typedef enum
80 {
81 HDMI_AUDIO_PCM_16bit_48000,
82 HDMI_AUDIO_PCM_16bit_44100,
83 HDMI_AUDIO_PCM_16bit_32000,
84 HDMI_AUDIO_SOURCE_STREAM,
85 }HDMI_AUDIO_FORMAT;
86
87 typedef struct
88 {
89 HDMI_VIDEO_RESOLUTION vformat;
90 HDMI_VIDEO_INPUT_FORMAT vin;
91 HDMI_VIDEO_OUTPUT_FORMAT vout;
92 HDMI_AUDIO_FORMAT aformat;
93 }HDMI_CONFIG;
94
95 typedef enum{
96 HDMI_OUTPUT_MODE_LCD_MIRROR,
97 HDMI_OUTPUT_MODE_VIDEO_MODE,
98 HDMI_OUTPUT_MODE_DPI_BYPASS
99 }HDMI_OUTPUT_MODE;
100
101 typedef enum{
102 HDMI_CABLE,
103 MHL_CABLE,
104 MHL_SMB_CABLE,
105 MHL_2_CABLE ///MHL 2.0
106 }HDMI_CABLE_TYPE;
107
108 typedef struct
109 {
110 unsigned int width;
111 unsigned int height;
112
113 HDMI_CONFIG init_config;
114
115 /* polarity parameters */
116 HDMI_POLARITY clk_pol;
117 HDMI_POLARITY de_pol;
118 HDMI_POLARITY vsync_pol;
119 HDMI_POLARITY hsync_pol;
120
121 /* timing parameters */
122 unsigned int hsync_pulse_width;
123 unsigned int hsync_back_porch;
124 unsigned int hsync_front_porch;
125 unsigned int vsync_pulse_width;
126 unsigned int vsync_back_porch;
127 unsigned int vsync_front_porch;
128
129 /* output format parameters */
130 HDMI_COLOR_ORDER rgb_order;
131
132 /* intermediate buffers parameters */
133 unsigned int intermediat_buffer_num; // 2..3
134
135 /* iopad parameters */
136 IO_DRIVING_CURRENT io_driving_current;
137 HDMI_OUTPUT_MODE output_mode;
138
139 int is_force_awake;
140 int is_force_landscape;
141
142 unsigned int scaling_factor; // determine the scaling of output screen size, valid value 0~10
143 // 0 means no scaling, 5 means scaling to 95%, 10 means 90%
144 HDMI_CABLE_TYPE cabletype;
145 bool NeedSwHDCP;
146 }HDMI_PARAMS;
147
148 typedef enum{
149 HDMI_STATE_NO_DEVICE,
150 HDMI_STATE_ACTIVE,
151 HDMI_STATE_CONNECTING,
152 #if defined(CONFIG_MTK_MT8193_HDMI_SUPPORT)
153 HDMI_STATE_PLUGIN_ONLY,
154 HDMI_STATE_EDID_UPDATE,
155 HDMI_STATE_CEC_UPDATE
156 #endif
157 }HDMI_STATE;
158
159 // ---------------------------------------------------------------------------
160
161 typedef struct
162 {
163 void (*set_reset_pin)(unsigned int value);
164 int (*set_gpio_out)(unsigned int gpio, unsigned int value);
165 void (*udelay)(unsigned int us);
166 void (*mdelay)(unsigned int ms);
167 void (*wait_transfer_done)(void);
168 void (*state_callback)(HDMI_STATE state);
169 }HDMI_UTIL_FUNCS;
170
171
172 typedef struct
173 {
174 void (*set_util_funcs)(const HDMI_UTIL_FUNCS *util);
175 void (*get_params)(HDMI_PARAMS *params);
176
177 int (*init)(void);
178 int (*enter)(void);
179 int (*exit)(void);
180 void (*suspend)(void);
181 void (*resume)(void);
182 int (*audio_config)(HDMI_AUDIO_FORMAT aformat);
183 int (*video_config)(HDMI_VIDEO_RESOLUTION vformat, HDMI_VIDEO_INPUT_FORMAT vin, HDMI_VIDEO_OUTPUT_FORMAT vou);
184 int (*video_enable)(bool enable);
185 int (*audio_enable)(bool enable);
186 int (*irq_enable)(bool enable);
187 int (*power_on)(void);
188 void (*power_off)(void);
189 HDMI_STATE (*get_state)(void);
190 void (*set_mode)(unsigned char ucMode);
191 void (*dump)(void);
192 #if !defined(CONFIG_MTK_MT8193_HDMI_SUPPORT)
193 void (*read)(unsigned char u8Reg);
194 void (*write)(unsigned char u8Reg, unsigned char u8Data);
195 void (*log_enable)(bool enable);
196 #else
197 void (*read)(u16 u2Reg, u32 *p4Data);
198 void (*write)(u16 u2Reg, u32 u4Data);
199 void (*log_enable)(u16 enable);
200 void (*InfoframeSetting)(u8 i1typemode, u8 i1typeselect);
201 void (*checkedid)(u8 i1noedid);
202 void (*colordeep)(u8 u1colorspace, u8 u1deepcolor);
203 void (*enablehdcp)(u8 u1hdcponoff);
204 void (*setcecrxmode)(u8 u1cecrxmode);
205 void (*hdmistatus)(void);
206 void (*hdcpkey)(u8 *pbhdcpkey);
207 void (*getedid)(HDMI_EDID_INFO_T *pv_get_info);
208 void (*setcecla)(CEC_DRV_ADDR_CFG_T* prAddr);
209 void (*sendsltdata)(u8 *pu1Data);
210 void (*getceccmd)(CEC_FRAME_DESCRIPTION* frame);
211 void (*getsltdata)(CEC_SLT_DATA* rCecSltData);
212 void (*setceccmd)(CEC_SEND_MSG_T* msg);
213 void (*cecenable)(u8 u1EnCec);
214 void (*getcecaddr)(CEC_ADDRESS *cecaddr);
215 void (*mutehdmi)(u8 u1flagvideomute, u8 u1flagaudiomute);
216 #endif
217 } HDMI_DRIVER;
218
219
220 // ---------------------------------------------------------------------------
221 // HDMI Driver Functions
222 // ---------------------------------------------------------------------------
223
224 const HDMI_DRIVER* HDMI_GetDriver(void);
225
226 #endif // __HDMI_DRV_H__