Commit | Line | Data |
---|---|---|
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 | ||
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__ |