1 #include "MsCommon.h"
2 #include "utopia.h"
3 #include "utopia_dapi.h"
4 #include "drvXC_IOPort.h"
5 #include "apiXC.h"
6 #include "apiXC_Adc.h"
7 #include "apiXC_Auto.h"
8 #include "apiXC_ModeParse.h"
9 #include "apiXC_PCMonitor.h"
10 #include "drvXC_HDMI_if.h"
11 #include "drv_sc_ip.h"
12 #include "drv_sc_display.h"
13 #include "drv_sc_isr.h"
14 #include "apiXC_PCMonitor.h"
15 #include "mhal_xc_chip_config.h"
16 #include "drvXC_ADC_Internal.h"
17 #include "mvideo_context.h"
18 #if (LD_ENABLE==1)
19 #include "mdrv_ld.h"
20 #include "mdrv_ldalgo.h"
21 #endif
22 #include "mdrv_sc_3d.h"
23 #include "drv_sc_menuload.h"
24 #include "mhal_sc.h"
25 #if FRC_INSIDE
26 #include "mdrv_frc.h"
27 #include "mhal_frc.h"
28 #endif
29 #include "XC_private.h"
30 #include "apiXC_v2.h"
31 #include "apiXC_Adc_v2.h"
32
33
ADC_Initialize(XC_INSTANCE_PRIVATE * psXCInstPri,const void * const pAttribute)34 void ADC_Initialize(XC_INSTANCE_PRIVATE* psXCInstPri, const void* const pAttribute)
35 {
36 psXCInstPri->fpXC_ADC_SetCVBSOut = MApi_XC_ADC_SetCVBSOut_U2;
37 psXCInstPri->fpXC_ADC_IsCVBSOutEnabled = MApi_XC_ADC_IsCVBSOutEnabled_U2;
38 psXCInstPri->fpXC_ADC_SetPcClock = MApi_XC_ADC_SetPcClock_U2;
39 psXCInstPri->fpXC_ADC_SetPhase = MApi_XC_ADC_SetPhase_U2;
40 psXCInstPri->fpXC_ADC_SetPhaseEx = MApi_XC_ADC_SetPhaseEx_U2;
41 psXCInstPri->fpXC_ADC_GetPhaseRange = MApi_XC_ADC_GetPhaseRange_U2;
42 psXCInstPri->fpXC_ADC_GetPhase = MApi_XC_ADC_GetPhase_U2;
43 psXCInstPri->fpXC_ADC_GetPhaseEx = MApi_XC_ADC_GetPhaseEx_U2;
44 psXCInstPri->fpXC_ADC_IsScartRGB = MApi_XC_ADC_IsScartRGB_U2;
45 psXCInstPri->fpXC_ADC_GetPcClock = MApi_XC_ADC_GetPcClock_U2;
46 psXCInstPri->fpXC_ADC_GetSoGLevelRange = MApi_XC_ADC_GetSoGLevelRange_U2;
47 psXCInstPri->fpXC_ADC_SetSoGLevel = MApi_XC_ADC_SetSoGLevel_U2;
48 psXCInstPri->fpXC_ADC_PowerOff = MApi_XC_ADC_PowerOff_U2;
49 psXCInstPri->fpXC_ADC_GetDefaultGainOffset = MApi_XC_ADC_GetDefaultGainOffset_U2;
50 psXCInstPri->fpXC_ADC_GetMaximalOffsetValue = MApi_XC_ADC_GetMaximalOffsetValue_U2;
51 psXCInstPri->fpXC_ADC_GetMaximalGainValue = MApi_XC_ADC_GetMaximalGainValue_U2;
52 psXCInstPri->fpXC_ADC_GetCenterGain = MApi_XC_ADC_GetCenterGain_U2;
53 psXCInstPri->fpXC_ADC_GetCenterOffset = MApi_XC_ADC_GetCenterOffset_U2;
54 psXCInstPri->fpXC_ADC_SetGain = MApi_XC_ADC_SetGain_U2;
55 psXCInstPri->fpXC_ADC_SetOffset = MApi_XC_ADC_SetOffset_U2;
56 psXCInstPri->fpXC_ADC_AdjustGainOffset = MApi_XC_ADC_AdjustGainOffset_U2;
57 psXCInstPri->fpXC_ADC_Source_Calibrate = MApi_XC_ADC_Source_Calibrate_U2;
58 psXCInstPri->fpXC_ADC_SetSoGCal = MApi_XC_ADC_SetSoGCal_U2;
59 psXCInstPri->fpXC_ADC_SetRGB_PIPE_Delay = MApi_XC_ADC_SetRGB_PIPE_Delay_U2;
60 psXCInstPri->fpXC_ADC_ScartRGB_SOG_ClampDelay = MApi_XC_ADC_ScartRGB_SOG_ClampDelay_U2;
61 psXCInstPri->fpXC_ADC_Set_YPbPrLooseLPF = MApi_XC_ADC_Set_YPbPrLooseLPF_U2;
62 psXCInstPri->fpXC_ADC_Set_SOGBW = MApi_XC_ADC_Set_SOGBW_U2;
63 psXCInstPri->fpXC_ADC_SetClampDuration = MApi_XC_ADC_SetClampDuration_U2;
64 psXCInstPri->fpXC_ADC_EnableHWCalibration = MApi_XC_ADC_EnableHWCalibration_U2;
65 psXCInstPri->fpXC_ADC_SetIdacCurrentMode = MApi_XC_ADC_SetIdacCurrentMode_U2;
66 psXCInstPri->fpXC_ADC_GetIdacCurrentMode = MApi_XC_ADC_GetIdacCurrentMode_U2;
67
68 return;
69 }
70
_ADCIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)71 MS_U32 _ADCIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
72 {
73 //void* pModule = NULL;
74 //void* pResource = NULL;
75 XC_INSTANCE_PRIVATE* psXCInstPri = NULL;
76
77 //UtopiaInstanceGetModule(pInstance, &pModule);
78
79 if(UtopiaInstanceGetPrivate(pInstance, (void*)&psXCInstPri)!=UTOPIA_STATUS_SUCCESS)
80 {
81 printf("[%s,%5d] Instance Get Private failed\n",__FUNCTION__,__LINE__);
82 }
83
84 //printf("[%s,%5d] u32Cmd type = %ld\n",__FUNCTION__,__LINE__,u32Cmd);
85 MS_U32 u32Return = UTOPIA_STATUS_FAIL;
86 switch(u32Cmd)
87 {
88 case E_XC_ADC_CMD_SETCVBSOUT:
89 {
90
91 pstXC_ADC_SETCVBSOUT pXCArgs = (pstXC_ADC_SETCVBSOUT) pArgs;
92 psXCInstPri->fpXC_ADC_SetCVBSOut(pInstance, pXCArgs->bEnable, pXCArgs->enOutputType, pXCArgs->enInputPortType, pXCArgs->isDigitalSource);
93
94 u32Return = UTOPIA_STATUS_SUCCESS;
95 break;
96 }
97
98 case E_XC_ADC_CMD_ISCVBSOUTENABLED:
99 {
100
101 pstXC_ADC_ISCVBSOUTENABLED pXCArgs = (pstXC_ADC_ISCVBSOUTENABLED) pArgs;
102 pXCArgs->bReturnValue = psXCInstPri->fpXC_ADC_IsCVBSOutEnabled(pInstance, pXCArgs->enOutputType);
103
104 u32Return = UTOPIA_STATUS_SUCCESS;
105 break;
106 }
107
108 case E_XC_ADC_CMD_SETPCCLOCK:
109 {
110
111 pstXC_ADC_SETPCCLOCK pXCArgs = (pstXC_ADC_SETPCCLOCK) pArgs;
112 psXCInstPri->fpXC_ADC_SetPcClock(pInstance, pXCArgs->u16Value);
113
114 u32Return = UTOPIA_STATUS_SUCCESS;
115 break;
116 }
117
118 case E_XC_ADC_CMD_SETPHASE:
119 {
120
121 pstXC_ADC_SETPHASE pXCArgs = (pstXC_ADC_SETPHASE) pArgs;
122 psXCInstPri->fpXC_ADC_SetPhase(pInstance, pXCArgs->u8Value);
123
124 u32Return = UTOPIA_STATUS_SUCCESS;
125 break;
126 }
127
128 case E_XC_ADC_CMD_SETPHASEEX:
129 {
130
131 pstXC_ADC_SETPHASEEX pXCArgs = (pstXC_ADC_SETPHASEEX) pArgs;
132 psXCInstPri->fpXC_ADC_SetPhaseEx(pInstance, pXCArgs->u16Value);
133
134 u32Return = UTOPIA_STATUS_SUCCESS;
135 break;
136 }
137
138 case E_XC_ADC_CMD_GETPHASERANGE:
139 {
140
141 pstXC_ADC_GETPHASERANGE pXCArgs = (pstXC_ADC_GETPHASERANGE) pArgs;
142 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_ADC_GetPhaseRange(pInstance);
143
144 u32Return = UTOPIA_STATUS_SUCCESS;
145 break;
146 }
147
148 case E_XC_ADC_CMD_GETPHASE:
149 {
150
151 pstXC_ADC_GETPHASE pXCArgs = (pstXC_ADC_GETPHASE) pArgs;
152 pXCArgs->u8ReturnValue = psXCInstPri->fpXC_ADC_GetPhase(pInstance);
153
154 u32Return = UTOPIA_STATUS_SUCCESS;
155 break;
156 }
157
158 case E_XC_ADC_CMD_GETPHASEEX:
159 {
160
161 pstXC_ADC_GETPHASEEX pXCArgs = (pstXC_ADC_GETPHASEEX) pArgs;
162 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_ADC_GetPhaseEx(pInstance);
163
164 u32Return = UTOPIA_STATUS_SUCCESS;
165 break;
166 }
167
168 case E_XC_ADC_CMD_ISSCARTRGB:
169 {
170
171 pstXC_ADC_ISSCARTRGB pXCArgs = (pstXC_ADC_ISSCARTRGB) pArgs;
172 pXCArgs->bReturnValue = psXCInstPri->fpXC_ADC_IsScartRGB(pInstance);
173
174 u32Return = UTOPIA_STATUS_SUCCESS;
175 break;
176 }
177
178 case E_XC_ADC_CMD_GETPCCLOCK:
179 {
180
181 pstXC_ADC_GETPCCLOCK pXCArgs = (pstXC_ADC_GETPCCLOCK) pArgs;
182 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_ADC_GetPcClock(pInstance);
183
184 u32Return = UTOPIA_STATUS_SUCCESS;
185 break;
186 }
187
188 case E_XC_ADC_CMD_GETSOGLEVELRANGE:
189 {
190
191 pstXC_ADC_GETSOGLEVELRANGE pXCArgs = (pstXC_ADC_GETSOGLEVELRANGE) pArgs;
192 psXCInstPri->fpXC_ADC_GetSoGLevelRange(pInstance, pXCArgs->u32min,pXCArgs->u32max, pXCArgs->u32Recommend_value);
193
194 u32Return = UTOPIA_STATUS_SUCCESS;
195 break;
196 }
197
198 case E_XC_ADC_CMD_SETSOGLEVEL:
199 {
200
201 pstXC_ADC_SETSOGLEVEL pXCArgs = (pstXC_ADC_SETSOGLEVEL) pArgs;
202 psXCInstPri->fpXC_ADC_SetSoGLevel(pInstance, pXCArgs->u32Value);
203
204 u32Return = UTOPIA_STATUS_SUCCESS;
205 break;
206 }
207
208 case E_XC_ADC_CMD_POWEROFF:
209 {
210
211
212 psXCInstPri->fpXC_ADC_PowerOff(pInstance);
213
214 u32Return = UTOPIA_STATUS_SUCCESS;
215 break;
216 }
217
218 case E_XC_ADC_CMD_GETDEFAULTGAINOFFSET:
219 {
220
221 pstXC_ADC_GETDEFAULTGAINOFFSET pXCArgs = (pstXC_ADC_GETDEFAULTGAINOFFSET) pArgs;
222 psXCInstPri->fpXC_ADC_GetDefaultGainOffset(pInstance, pXCArgs->enSource, pXCArgs->pstADCSetting);
223
224 u32Return = UTOPIA_STATUS_SUCCESS;
225 break;
226 }
227
228 case E_XC_ADC_CMD_GETMAXIMALOFFSETVALUE:
229 {
230
231 pstXC_ADC_GETMAXIMALOFFSETVALUE pXCArgs = (pstXC_ADC_GETMAXIMALOFFSETVALUE) pArgs;
232 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_ADC_GetMaximalOffsetValue(pInstance);
233
234 u32Return = UTOPIA_STATUS_SUCCESS;
235 break;
236 }
237
238 case E_XC_ADC_CMD_GETMAXIMALGAINVALUE:
239 {
240
241 pstXC_ADC_GETMAXIMALGAINVALUE pXCArgs = (pstXC_ADC_GETMAXIMALGAINVALUE) pArgs;
242 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_ADC_GetMaximalGainValue(pInstance);
243
244 u32Return = UTOPIA_STATUS_SUCCESS;
245 break;
246 }
247
248 case E_XC_ADC_CMD_GETCENTERGAIN:
249 {
250
251 pstXC_ADC_GETCENTERGAIN pXCArgs = (pstXC_ADC_GETCENTERGAIN) pArgs;
252 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_ADC_GetCenterGain(pInstance);
253
254 u32Return = UTOPIA_STATUS_SUCCESS;
255 break;
256 }
257
258 case E_XC_ADC_CMD_GETCENTEROFFSET:
259 {
260
261 pstXC_ADC_GETCENTEROFFSET pXCArgs = (pstXC_ADC_GETCENTEROFFSET) pArgs;
262 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_ADC_GetCenterOffset(pInstance);
263
264 u32Return = UTOPIA_STATUS_SUCCESS;
265 break;
266 }
267
268 case E_XC_ADC_CMD_SETGAIN:
269 {
270
271 pstXC_ADC_SETGAIN pXCArgs = (pstXC_ADC_SETGAIN) pArgs;
272 psXCInstPri->fpXC_ADC_SetGain(pInstance, pXCArgs->u8Color, pXCArgs->u16Value);
273
274 u32Return = UTOPIA_STATUS_SUCCESS;
275 break;
276 }
277
278 case E_XC_ADC_CMD_SETOFFSET:
279 {
280
281 pstXC_ADC_SETOFFSET pXCArgs = (pstXC_ADC_SETOFFSET) pArgs;
282 psXCInstPri->fpXC_ADC_SetOffset(pInstance, pXCArgs->u8Color, pXCArgs->u16Value);
283
284 u32Return = UTOPIA_STATUS_SUCCESS;
285 break;
286 }
287
288 case E_XC_ADC_CMD_ADJUSTGAINOFFSET:
289 {
290
291 pstXC_ADC_ADJUSTGAINOFFSET pXCArgs = (pstXC_ADC_ADJUSTGAINOFFSET) pArgs;
292 psXCInstPri->fpXC_ADC_AdjustGainOffset(pInstance, pXCArgs->pstADCSetting);
293
294 u32Return = UTOPIA_STATUS_SUCCESS;
295 break;
296 }
297
298 case E_XC_ADC_CMD_SOURCE_CALIBRATE:
299 {
300
301 pstXC_ADC_SOURCE_CALIBRATE pXCArgs = (pstXC_ADC_SOURCE_CALIBRATE) pArgs;
302 psXCInstPri->fpXC_ADC_Source_Calibrate(pInstance, pXCArgs->enInputSourceType);
303
304 u32Return = UTOPIA_STATUS_SUCCESS;
305 break;
306 }
307
308 case E_XC_ADC_CMD_SETSOGCAL:
309 {
310
311 psXCInstPri->fpXC_ADC_SetSoGCal(pInstance);
312
313 u32Return = UTOPIA_STATUS_SUCCESS;
314 break;
315 }
316
317 case E_XC_ADC_CMD_SETRGB_PIPE_DELAY:
318 {
319
320 pstXC_ADC_SETRGB_PIPE_DELAY pXCArgs = (pstXC_ADC_SETRGB_PIPE_DELAY) pArgs;
321 psXCInstPri->fpXC_ADC_SetRGB_PIPE_Delay(pInstance, pXCArgs->u8Value);
322
323 u32Return = UTOPIA_STATUS_SUCCESS;
324 break;
325 }
326
327 case E_XC_ADC_CMD_SCARTRGB_SOG_CLAMPDELAY:
328 {
329
330 pstXC_ADC_SCARTRGB_SOG_CLAMPDELAY pXCArgs = (pstXC_ADC_SCARTRGB_SOG_CLAMPDELAY) pArgs;
331 psXCInstPri->fpXC_ADC_ScartRGB_SOG_ClampDelay(pInstance, pXCArgs->u16Clpdly, pXCArgs->u16Caldur);
332
333 u32Return = UTOPIA_STATUS_SUCCESS;
334 break;
335 }
336
337 case E_XC_ADC_CMD_SET_YPBPRLOOSELPF:
338 {
339
340 pstXC_ADC_SET_YPBPRLOOSELPF pXCArgs = (pstXC_ADC_SET_YPBPRLOOSELPF) pArgs;
341 psXCInstPri->fpXC_ADC_Set_YPbPrLooseLPF(pInstance, pXCArgs->bEnable);
342 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
343 CHECK_DEVICE1_INSTANCE();
344 psXCInstPri->fpXC_ADC_Set_YPbPrLooseLPF(g_pDevice1Instance, pXCArgs->bEnable);
345 #endif
346 u32Return = UTOPIA_STATUS_SUCCESS;
347 break;
348 }
349
350 case E_XC_ADC_CMD_SET_SOGBW:
351 {
352
353 pstXC_ADC_SET_SOGBW pXCArgs = (pstXC_ADC_SET_SOGBW) pArgs;
354 psXCInstPri->fpXC_ADC_Set_SOGBW(pInstance, pXCArgs->u16Value);
355
356 u32Return = UTOPIA_STATUS_SUCCESS;
357 break;
358 }
359
360 case E_XC_ADC_CMD_SETCLAMPDURATION:
361 {
362
363 pstXC_ADC_SETCLAMPDURATION pXCArgs = (pstXC_ADC_SETCLAMPDURATION) pArgs;
364 psXCInstPri->fpXC_ADC_SetClampDuration(pInstance, pXCArgs->u16Value);
365
366 u32Return = UTOPIA_STATUS_SUCCESS;
367 break;
368 }
369
370 case E_XC_ADC_CMD_ENABLEHWCALIBRATION:
371 {
372
373 pstXC_ADC_ENABLEHWCALIBRATION pXCArgs = (pstXC_ADC_ENABLEHWCALIBRATION) pArgs;
374 pXCArgs->bReturnValue = psXCInstPri->fpXC_ADC_EnableHWCalibration(pInstance, pXCArgs->bEnable);
375 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
376 CHECK_DEVICE1_INSTANCE();
377 pXCArgs->bReturnValue = psXCInstPri->fpXC_ADC_EnableHWCalibration(g_pDevice1Instance, pXCArgs->bEnable);
378 #endif
379 u32Return = UTOPIA_STATUS_SUCCESS;
380 break;
381 }
382
383 case E_XC_ADC_CMD_SET_IDACCURRENTMODE:
384 {
385 pstXC_ADC_SETIDACCURRENTMODE pXCArgs = (pstXC_ADC_SETIDACCURRENTMODE) pArgs;
386 pXCArgs->bReturnValue = psXCInstPri->fpXC_ADC_SetIdacCurrentMode(pInstance, pXCArgs->eMode);
387 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
388 CHECK_DEVICE1_INSTANCE();
389 pXCArgs->bReturnValue = psXCInstPri->fpXC_ADC_SetIdacCurrentMode(g_pDevice1Instance, pXCArgs->eMode);
390 #endif
391 u32Return = UTOPIA_STATUS_SUCCESS;
392 break;
393 }
394
395 case E_XC_ADC_CMD_GET_IDACCURRENTMODE:
396 {
397 pstXC_ADC_GETIDACCURRENTMODE pXCArgs = (pstXC_ADC_GETIDACCURRENTMODE) pArgs;
398 pXCArgs->eReturnMode = psXCInstPri->fpXC_ADC_GetIdacCurrentMode(pInstance);
399
400 u32Return = UTOPIA_STATUS_SUCCESS;
401 break;
402 }
403
404 case E_XC_ADC_CMD_NONE:
405 case E_XC_ADC_CMD_MAX:
406 default:
407 {
408 printf("Command %td is not existed\n",(ptrdiff_t)u32Cmd);
409 u32Return = UTOPIA_STATUS_ERR_INVALID_HANDLE;
410 break;
411 }
412 }
413 return u32Return;
414 }
415
416