xref: /utopia/UTPA2-700.0.x/modules/xc/api/xc/apiXC_Adc_v2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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