Merge tag 'v3.10.55' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / mach-mt8127 / tpw8127_tb_c_l / hdmi / inc / hdmi_drv.h
CommitLineData
6fa3eb70
S
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
13typedef 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
29typedef enum
30{
31 HDMI_POLARITY_RISING = 0,
32 HDMI_POLARITY_FALLING = 1
33}HDMI_POLARITY;
34
35typedef enum
36{
37 HDMI_CLOCK_PHASE_0 = 0,
38 HDMI_CLOCK_PHASE_90 = 1
39}HDMI_CLOCK_PHASE;
40
41typedef enum
42{
43 HDMI_COLOR_ORDER_RGB = 0,
44 HDMI_COLOR_ORDER_BGR = 1
45}HDMI_COLOR_ORDER;
46
47typedef 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)
56typedef 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
65typedef enum
66{
67 HDMI_VIN_FORMAT_RGB565,
68 HDMI_VIN_FORMAT_RGB666,
69 HDMI_VIN_FORMAT_RGB888,
70} HDMI_VIDEO_INPUT_FORMAT;
71
72typedef enum
73{
74 HDMI_VOUT_FORMAT_RGB888,
75 HDMI_VOUT_FORMAT_YUV422,
76 HDMI_VOUT_FORMAT_YUV444,
77}HDMI_VIDEO_OUTPUT_FORMAT;
78
79typedef 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
87typedef 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
95typedef enum{
96 HDMI_OUTPUT_MODE_LCD_MIRROR,
97 HDMI_OUTPUT_MODE_VIDEO_MODE,
98 HDMI_OUTPUT_MODE_DPI_BYPASS
99}HDMI_OUTPUT_MODE;
100
101typedef enum{
102 HDMI_CABLE,
103 MHL_CABLE,
104 MHL_SMB_CABLE,
105 MHL_2_CABLE ///MHL 2.0
106}HDMI_CABLE_TYPE;
107
108typedef 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
148typedef 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
161typedef 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
172typedef 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
224const HDMI_DRIVER* HDMI_GetDriver(void);
225
226#endif // __HDMI_DRV_H__