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 "drv_sc_ip.h"
11 #include "drv_sc_display.h"
12 #include "drv_sc_isr.h"
13 #include "drvXC_HDMI_if.h"
14 #include "mhal_xc_chip_config.h"
15 #include "mvideo_context.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_Auto_v2.h"
31
AUTO_Initialize(XC_INSTANCE_PRIVATE * psXCInstPri,const void * const pAttribute)32 void AUTO_Initialize(XC_INSTANCE_PRIVATE* psXCInstPri, const void* const pAttribute)
33 {
34 psXCInstPri->fpXC_Auto_Geometry = MApi_XC_Auto_Geometry_U2;
35 psXCInstPri->fpXC_Auto_Geometry_Ex = MApi_XC_Auto_Geometry_Ex_U2;
36 psXCInstPri->fpXC_Auto_StopAutoGeometry = MApi_XC_Auto_StopAutoGeometry_U2;
37 psXCInstPri->fpXC_Auto_GainOffset = MApi_XC_Auto_GainOffset_U2;
38 psXCInstPri->fpXC_Auto_GetHWFixedGainOffset = MApi_XC_Auto_GetHWFixedGainOffset_U2;
39 psXCInstPri->fpXC_Auto_SetValidData = MApi_XC_Auto_SetValidData_U2;
40 psXCInstPri->fpXC_Auto_AutoOffset = MApi_XC_Auto_AutoOffset_U2;
41 psXCInstPri->fpXC_Auto_DetectWidth = MApi_XC_Auto_DetectWidth_U2;
42 psXCInstPri->fpXC_Auto_SetCalibrationMode = MApi_XC_Auto_SetCalibrationMode_U2;
43 psXCInstPri->fpXC_Auto_GetCalibrationMode = MApi_XC_Auto_GetCalibrationMode_U2;
44 psXCInstPri->fpXC_Auto_GetSyncInfo = MApi_XC_AUTO_GetSyncInfo_U2;
45
46 return;
47 }
48
_AUTOIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)49 MS_U32 _AUTOIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
50 {
51 //void* pModule = NULL;
52 //void* pResource = NULL;
53 XC_INSTANCE_PRIVATE* psXCInstPri = NULL;
54
55 //UtopiaInstanceGetModule(pInstance, &pModule);
56
57 if(UtopiaInstanceGetPrivate(pInstance, (void*)&psXCInstPri)!=UTOPIA_STATUS_SUCCESS)
58 {
59 printf("[%s,%5d] Instance Get Private failed\n",__FUNCTION__,__LINE__);
60 }
61
62 //printf("[%s,%5d] u32Cmd type = %ld\n",__FUNCTION__,__LINE__,u32Cmd);
63 MS_U32 u32Return = UTOPIA_STATUS_FAIL;
64 switch(u32Cmd)
65 {
66 case E_XC_AUTO_CMD_GEOMETRY:
67 {
68
69 pstXC_AUTO_GEOMETRY pXCArgs = (pstXC_AUTO_GEOMETRY) pArgs;
70 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
71 USE_OTHER_SC_AS_SUB_WINDOW();
72 #endif
73 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_Geometry(pInstance,
74 pXCArgs->enAutoTuneType,
75 pXCArgs->ActiveInfo,
76 pXCArgs->StandardInfo,
77 pXCArgs->eWindow);
78
79 u32Return = UTOPIA_STATUS_SUCCESS;
80 break;
81 }
82
83 case E_XC_AUTO_CMD_GEOMETRY_EX:
84 {
85
86 pstXC_AUTO_GEOMETRY_EX pXCArgs = (pstXC_AUTO_GEOMETRY_EX) pArgs;
87 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
88 USE_OTHER_SC_AS_SUB_WINDOW();
89 #endif
90 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_Geometry_Ex(pInstance,
91 pXCArgs->enAutoTuneType,
92 pXCArgs->ActiveInfo,
93 pXCArgs->StandardInfo,
94 pXCArgs->eWindow);
95
96 u32Return = UTOPIA_STATUS_SUCCESS;
97 break;
98 }
99
100 case E_XC_AUTO_CMD_STOPAUTOGEOMETRY:
101 {
102
103 pstXC_AUTO_STOPAUTOGEOMETRY pXCArgs = (pstXC_AUTO_STOPAUTOGEOMETRY) pArgs;
104 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_StopAutoGeometry(pInstance);
105
106 u32Return = UTOPIA_STATUS_SUCCESS;
107 break;
108 }
109
110 case E_XC_AUTO_CMD_GAINOFFSET:
111 {
112
113 pstXC_AUTO_GAINOFFSET pXCArgs = (pstXC_AUTO_GAINOFFSET) pArgs;
114 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
115 USE_OTHER_SC_AS_SUB_WINDOW();
116 #endif
117 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_GainOffset(pInstance,
118 pXCArgs->type,
119 pXCArgs->enAutoTuneType,
120 pXCArgs->pstADCSetting,
121 pXCArgs->eWindow);
122
123 u32Return = UTOPIA_STATUS_SUCCESS;
124 break;
125 }
126
127 case E_XC_AUTO_CMD_GETHWFIXEDGAINOFFSET:
128 {
129
130 pstXC_AUTO_GETHWFIXEDGAINOFFSET pXCArgs = (pstXC_AUTO_GETHWFIXEDGAINOFFSET) pArgs;
131 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_GetHWFixedGainOffset(pInstance,
132 pXCArgs->enAutoTuneType,
133 pXCArgs->pstADCSetting);
134
135 u32Return = UTOPIA_STATUS_SUCCESS;
136 break;
137 }
138
139 case E_XC_AUTO_CMD_SETVALIDDATA:
140 {
141
142 pstXC_AUTO_SETVALIDDATA pXCArgs = (pstXC_AUTO_SETVALIDDATA) pArgs;
143 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_SetValidData(pInstance, pXCArgs->Value);
144
145 u32Return = UTOPIA_STATUS_SUCCESS;
146 break;
147 }
148
149 case E_XC_AUTO_CMD_AUTOOFFSET:
150 {
151
152 pstXC_AUTO_AUTOOFFSET pXCArgs = (pstXC_AUTO_AUTOOFFSET) pArgs;
153 psXCInstPri->fpXC_Auto_AutoOffset(pInstance, pXCArgs->bEnable, pXCArgs->bIsYPbPrFlag);
154
155 u32Return = UTOPIA_STATUS_SUCCESS;
156 break;
157 }
158
159 case E_XC_AUTO_CMD_DETECTWIDTH:
160 {
161
162 pstXC_AUTO_DETECTWIDTH pXCArgs = (pstXC_AUTO_DETECTWIDTH) pArgs;
163 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
164 USE_OTHER_SC_AS_SUB_WINDOW();
165 #endif
166 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_DetectWidth(pInstance,
167 pXCArgs->pSignalInfo,
168 pXCArgs->eWindow);
169
170 u32Return = UTOPIA_STATUS_SUCCESS;
171 break;
172 }
173
174 case E_XC_AUTO_CMD_SETCALIBRATIONMODE:
175 {
176
177 pstXC_AUTO_SETCALIBRATIONMODE pXCArgs = (pstXC_AUTO_SETCALIBRATIONMODE) pArgs;
178 pXCArgs->bReturnValue = psXCInstPri->fpXC_Auto_SetCalibrationMode(pInstance, pXCArgs->eMode);
179
180 u32Return = UTOPIA_STATUS_SUCCESS;
181 break;
182 }
183
184 case E_XC_AUTO_CMD_GETCALIBRATIONMODE:
185 {
186
187 pstXC_AUTO_GETCALIBRATIONMODE pXCArgs = (pstXC_AUTO_GETCALIBRATIONMODE) pArgs;
188 psXCInstPri->fpXC_Auto_GetCalibrationMode(pInstance, pXCArgs->eMode);
189
190 u32Return = UTOPIA_STATUS_SUCCESS;
191 break;
192 }
193 case E_XC_AUTO_CMD_GETSYNCINFO:
194 {
195
196 pstXC_AUTO_GETSYNCINFO pXCArgs = (pstXC_AUTO_GETSYNCINFO) pArgs;
197 #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
198 if(pXCArgs->pSyncInfo->eWindow == SUB_WINDOW)
199 {
200 CHECK_DEVICE1_INSTANCE();
201 pInstance = g_pDevice1Instance;
202 pXCArgs->pSyncInfo->eWindow = MAIN_WINDOW;
203
204
205 }
206 #endif
207 psXCInstPri->fpXC_Auto_GetSyncInfo(pInstance,pXCArgs->pSyncInfo);
208
209 u32Return = UTOPIA_STATUS_SUCCESS;
210 break;
211 }
212
213 case E_XC_AUTO_CMD_NONE:
214 case E_XC_AUTO_CMD_MAX:
215 default:
216 {
217 printf("Command %td is not existed\n",(ptrdiff_t)u32Cmd);
218 u32Return = UTOPIA_STATUS_ERR_INVALID_HANDLE;
219 break;
220 }
221 }
222 return u32Return;
223 }
224