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