xref: /utopia/UTPA2-700.0.x/modules/xc/api/xc/apiXC_Auto_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 "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