xref: /utopia/UTPA2-700.0.x/modules/xc/api/xc/apiXC_PCMonitor_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 "drv_sc_display.h"
10 #include "drv_sc_isr.h"
11 #include "apiXC_PCMonitor.h"
12 #include "drvXC_HDMI_if.h"
13 #include "mhal_xc_chip_config.h"
14 #include "mvideo_context.h"
15 #include "drv_sc_ip.h"
16 #if (LD_ENABLE==1)
17 #include "mdrv_ld.h"
18 #include "mdrv_ldalgo.h"
19 #endif
20 #include "mdrv_sc_3d.h"
21 #include "drv_sc_menuload.h"
22 #include "drvXC_ADC_Internal.h"
23 #include "mhal_sc.h"
24 #if FRC_INSIDE
25 #include "mdrv_frc.h"
26 #include "mhal_frc.h"
27 #endif
28 #include "XC_private.h"
29 #include "apiXC_v2.h"
30 #include "apiXC_PCMonitor_v2.h"
31 
PCMONITOR_Initialize(XC_INSTANCE_PRIVATE * psXCInstPri,const void * const pAttribute)32 void PCMONITOR_Initialize(XC_INSTANCE_PRIVATE* psXCInstPri, const void* const pAttribute)
33 {
34     psXCInstPri->fpXC_PCMonitor_Init = 	MApi_XC_PCMonitor_Init_U2;
35     psXCInstPri->fpXC_PCMonitor_Restart = 	MApi_XC_PCMonitor_Restart_U2;
36     psXCInstPri->fpXC_PCMonitor_SetTimingCount = 	MApi_XC_PCMonitor_SetTimingCount_U2;
37     psXCInstPri->fpXC_PCMonitor = 	MApi_XC_PCMonitor_U2;
38     psXCInstPri->fpXC_PCMonitor_GetCurrentState = 	MApi_XC_PCMonitor_GetCurrentState_U2;
39     psXCInstPri->fpXC_PCMonitor_GetSyncStatus = 	MApi_XC_PCMonitor_GetSyncStatus_U2;
40     psXCInstPri->fpXC_PCMonitor_Get_HFreqx10 = 	MApi_XC_PCMonitor_Get_HFreqx10_U2;
41     psXCInstPri->fpXC_PCMonitor_Get_HFreqx1K = 	MApi_XC_PCMonitor_Get_HFreqx1K_U2;
42     psXCInstPri->fpXC_PCMonitor_Get_VFreqx10 = 	MApi_XC_PCMonitor_Get_VFreqx10_U2;
43     psXCInstPri->fpXC_PCMonitor_Get_VFreqx1K = 	MApi_XC_PCMonitor_Get_VFreqx1K_U2;
44     psXCInstPri->fpXC_PCMonitor_Get_Vtotal = 	MApi_XC_PCMonitor_Get_Vtotal_U2;
45     psXCInstPri->fpXC_PCMonitor_Get_Dvi_Hdmi_De_Info = 	MApi_XC_PCMonitor_Get_Dvi_Hdmi_De_Info_U2;
46     psXCInstPri->fpXC_PCMonitor_SyncLoss = 	MApi_XC_PCMonitor_SyncLoss_U2;
47     psXCInstPri->fpXC_PCMonitor_InvalidTimingDetect = 	MApi_XC_PCMonitor_InvalidTimingDetect_U2;
48     psXCInstPri->fpXC_PCMonitor_SetTimingCountEx = 	MApi_XC_PCMonitor_SetTimingCountEx_U2;
49 
50     return;
51 }
52 
_PCMONITORIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)53 MS_U32 _PCMONITORIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
54 {
55 	//void* pModule = NULL;
56 	//void* pResource = NULL;
57     XC_INSTANCE_PRIVATE* psXCInstPri = NULL;
58 
59     //UtopiaInstanceGetModule(pInstance, &pModule);
60 
61     if(UtopiaInstanceGetPrivate(pInstance, (void*)&psXCInstPri)!=UTOPIA_STATUS_SUCCESS)
62     {
63         printf("[%s,%5d] Instance Get Private failed\n",__FUNCTION__,__LINE__);
64     }
65 
66     //printf("[%s,%5d] u32Cmd type = %ld\n",__FUNCTION__,__LINE__,u32Cmd);
67     MS_U32 u32Return = UTOPIA_STATUS_FAIL;
68     switch(u32Cmd)
69     {
70         case E_XC_PCMONITOR_CMD_INIT:
71             {
72 
73                 pstXC_PCMONITOR_INIT pXCArgs = (pstXC_PCMONITOR_INIT) pArgs;
74                 pXCArgs->bReturnValue = psXCInstPri->fpXC_PCMonitor_Init(pInstance, pXCArgs->u8MaxWindowNum);
75 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
76                 CHECK_DEVICE1_INSTANCE();
77                 pXCArgs->bReturnValue = psXCInstPri->fpXC_PCMonitor_Init(g_pDevice1Instance, pXCArgs->u8MaxWindowNum);
78 #endif
79                 u32Return = UTOPIA_STATUS_SUCCESS;
80                 break;
81             }
82 
83         case E_XC_PCMONITOR_CMD_RESTART:
84             {
85 
86                 pstXC_PCMONITOR_RESTART pXCArgs = (pstXC_PCMONITOR_RESTART) pArgs;
87 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
88                 USE_OTHER_SC_AS_SUB_WINDOW();
89 #endif
90                 psXCInstPri->fpXC_PCMonitor_Restart(pInstance, pXCArgs->eWindow);
91 
92                 u32Return = UTOPIA_STATUS_SUCCESS;
93                 break;
94             }
95 
96         case E_XC_PCMONITOR_CMD_SETTIMINGCOUNT:
97             {
98 
99                 pstXC_PCMONITOR_SETTIMINGCOUNT pXCArgs = (pstXC_PCMONITOR_SETTIMINGCOUNT) pArgs;
100                 psXCInstPri->fpXC_PCMonitor_SetTimingCount(pInstance, pXCArgs->u16TimingStableCounter, pXCArgs->u16TimingNosyncCounter);
101 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
102                 CHECK_DEVICE1_INSTANCE();
103                 psXCInstPri->fpXC_PCMonitor_SetTimingCount(g_pDevice1Instance, pXCArgs->u16TimingStableCounter, pXCArgs->u16TimingNosyncCounter);
104 #endif
105 
106                 u32Return = UTOPIA_STATUS_SUCCESS;
107                 break;
108             }
109 
110         case E_XC_PCMONITOR_CMD:
111             {
112 
113                 pstXC_PCMONITOR pXCArgs = (pstXC_PCMONITOR) pArgs;
114 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
115                 USE_OTHER_SC_AS_SUB_WINDOW();
116 #endif
117                 pXCArgs->eReturnValue = psXCInstPri->fpXC_PCMonitor(pInstance, pXCArgs->eCurrentSrc, pXCArgs->eWindow);
118 
119                 u32Return = UTOPIA_STATUS_SUCCESS;
120                 break;
121             }
122 
123         case E_XC_PCMONITOR_CMD_GETCURRENTSTATE:
124             {
125 
126                 pstXC_PCMONITOR_GETCURRENTSTATE pXCArgs = (pstXC_PCMONITOR_GETCURRENTSTATE) pArgs;
127 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
128                 USE_OTHER_SC_AS_SUB_WINDOW();
129 #endif
130                 pXCArgs->eReturnValue = psXCInstPri->fpXC_PCMonitor_GetCurrentState(pInstance, pXCArgs->eWindow);
131 
132                 u32Return = UTOPIA_STATUS_SUCCESS;
133                 break;
134             }
135 
136         case E_XC_PCMONITOR_CMD_GETSYNCSTATUS:
137             {
138 
139                 pstXC_PCMONITOR_GETSYNCSTATUS pXCArgs = (pstXC_PCMONITOR_GETSYNCSTATUS) pArgs;
140 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
141                 USE_OTHER_SC_AS_SUB_WINDOW();
142 #endif
143                 pXCArgs->u8ReturnValue = psXCInstPri->fpXC_PCMonitor_GetSyncStatus(pInstance, pXCArgs->eWindow);
144 
145                 u32Return = UTOPIA_STATUS_SUCCESS;
146                 break;
147             }
148 
149         case E_XC_PCMONITOR_CMD_GET_HFREQX10:
150             {
151 
152                 pstXC_PCMONITOR_GET_HFREQX10 pXCArgs = (pstXC_PCMONITOR_GET_HFREQX10) pArgs;
153 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
154                 USE_OTHER_SC_AS_SUB_WINDOW();
155 #endif
156                 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_PCMonitor_Get_HFreqx10(pInstance, pXCArgs->eWindow);
157 
158                 u32Return = UTOPIA_STATUS_SUCCESS;
159                 break;
160             }
161 
162         case E_XC_PCMONITOR_CMD_GET_HFREQX1K:
163             {
164 
165                 pstXC_PCMONITOR_GET_HFREQX1K pXCArgs = (pstXC_PCMONITOR_GET_HFREQX1K) pArgs;
166 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
167                 USE_OTHER_SC_AS_SUB_WINDOW();
168 #endif
169                 pXCArgs->u32ReturnValue = psXCInstPri->fpXC_PCMonitor_Get_HFreqx1K(pInstance, pXCArgs->eWindow);
170 
171                 u32Return = UTOPIA_STATUS_SUCCESS;
172                 break;
173             }
174 
175         case E_XC_PCMONITOR_CMD_GET_VFREQX10:
176             {
177 
178                 pstXC_PCMONITOR_GET_VFREQX10 pXCArgs = (pstXC_PCMONITOR_GET_VFREQX10) pArgs;
179 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
180                 USE_OTHER_SC_AS_SUB_WINDOW();
181 #endif
182                 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_PCMonitor_Get_VFreqx10(pInstance, pXCArgs->eWindow);
183 
184                 u32Return = UTOPIA_STATUS_SUCCESS;
185                 break;
186             }
187 
188         case E_XC_PCMONITOR_CMD_GET_VFREQX1K:
189             {
190 
191                 pstXC_PCMONITOR_GET_VFREQX1K pXCArgs = (pstXC_PCMONITOR_GET_VFREQX1K) pArgs;
192 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
193                 USE_OTHER_SC_AS_SUB_WINDOW();
194 #endif
195                 pXCArgs->u32ReturnValue = psXCInstPri->fpXC_PCMonitor_Get_VFreqx1K(pInstance, pXCArgs->eWindow);
196 
197                 u32Return = UTOPIA_STATUS_SUCCESS;
198                 break;
199             }
200 
201         case E_XC_PCMONITOR_CMD_GET_VTOTAL:
202             {
203 
204                 pstXC_PCMONITOR_GET_VTOTAL pXCArgs = (pstXC_PCMONITOR_GET_VTOTAL) pArgs;
205 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
206                 USE_OTHER_SC_AS_SUB_WINDOW();
207 #endif
208                 pXCArgs->u16ReturnValue = psXCInstPri->fpXC_PCMonitor_Get_Vtotal(pInstance, pXCArgs->eWindow);
209 
210                 u32Return = UTOPIA_STATUS_SUCCESS;
211                 break;
212             }
213 
214         case E_XC_PCMONITOR_CMD_GET_DVI_HDMI_DE_INFO:
215             {
216 
217                 pstXC_PCMONITOR_GET_DVI_HDMI_DE_INFO pXCArgs = (pstXC_PCMONITOR_GET_DVI_HDMI_DE_INFO) pArgs;
218 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
219                 USE_OTHER_SC_AS_SUB_WINDOW();
220 #endif
221                 psXCInstPri->fpXC_PCMonitor_Get_Dvi_Hdmi_De_Info(pInstance, pXCArgs->eWindow, pXCArgs->msWin);
222 
223                 u32Return = UTOPIA_STATUS_SUCCESS;
224                 break;
225             }
226 
227         case E_XC_PCMONITOR_CMD_SYNCLOSS:
228             {
229 
230                 pstXC_PCMONITOR_SYNCLOSS pXCArgs = (pstXC_PCMONITOR_SYNCLOSS) pArgs;
231 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
232                 USE_OTHER_SC_AS_SUB_WINDOW();
233 #endif
234                 pXCArgs->bReturnValue = psXCInstPri->fpXC_PCMonitor_SyncLoss(pInstance, pXCArgs->eWindow);
235 
236                 u32Return = UTOPIA_STATUS_SUCCESS;
237                 break;
238             }
239 
240         case E_XC_PCMONITOR_CMD_INVALIDTIMINGDETECT:
241             {
242 
243                 pstXC_PCMONITOR_INVALIDTIMINGDETECT pXCArgs = (pstXC_PCMONITOR_INVALIDTIMINGDETECT) pArgs;
244 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
245                 USE_OTHER_SC_AS_SUB_WINDOW();
246 #endif
247                 pXCArgs->bReturnValue = psXCInstPri->fpXC_PCMonitor_InvalidTimingDetect(pInstance, pXCArgs->bPollingOnly, pXCArgs->eWindow);
248 
249                 u32Return = UTOPIA_STATUS_SUCCESS;
250                 break;
251             }
252 
253         case E_XC_PCMONITOR_CMD_SETTIMINGCOUNTEX:
254             {
255 
256                 pstXC_PCMONITOR_SETTIMINGCOUNTEX pXCArgs = (pstXC_PCMONITOR_SETTIMINGCOUNTEX) pArgs;
257                 pXCArgs->eReturnValue = psXCInstPri->fpXC_PCMonitor_SetTimingCountEx(pInstance, pXCArgs->eCurrentSrc, pXCArgs->u16TimingStableCounter, pXCArgs->u16TimingNosyncCounter);
258 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
259                 CHECK_DEVICE1_INSTANCE();
260                 pXCArgs->eReturnValue = psXCInstPri->fpXC_PCMonitor_SetTimingCountEx(g_pDevice1Instance, pXCArgs->eCurrentSrc, pXCArgs->u16TimingStableCounter, pXCArgs->u16TimingNosyncCounter);
261 #endif
262 
263                 u32Return = UTOPIA_STATUS_SUCCESS;
264                 break;
265             }
266 
267         case E_XC_PCMONITOR_CMD_NONE:
268         case E_XC_PCMONITOR_CMD_MAX:
269         default:
270             {
271                 printf("Command %td is not existed\n",(ptrdiff_t)u32Cmd);
272                 u32Return = UTOPIA_STATUS_ERR_INVALID_HANDLE;
273                 break;
274             }
275     }
276     return u32Return;
277 }
278 
279