1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94 #define MHAL_IP_C
95
96
97 //-------------------------------------------------------------------------------------------------
98 // Include Files
99 //-------------------------------------------------------------------------------------------------
100 // Common Definition
101 #include "MsCommon.h"
102 #include "MsIRQ.h"
103 #include "MsOS.h"
104 #include "mhal_xc_chip_config.h"
105 #include "utopia.h"
106 #include "utopia_dapi.h"
107 // Internal Definition
108 #include "drvXC_IOPort.h"
109 #include "apiXC.h"
110 #include "mvideo_context.h"
111 #include "xc_Analog_Reg.h"
112 #include "mhal_ip.h"
113 #include "apiXC_Adc.h"
114 #include "apiXC_Auto.h"
115 #include "drvXC_ADC_Internal.h"
116 #include "drvXC_HDMI_if.h"
117 #include "apiXC_ModeParse.h"
118 #include "apiXC_PCMonitor.h"
119 #include "drv_sc_ip.h"
120 #include "drv_sc_display.h"
121 #include "drv_sc_isr.h"
122 #if (LD_ENABLE==1)
123 #include "mdrv_ld.h"
124 #include "mdrv_ldalgo.h"
125 #endif
126 #include "mdrv_sc_3d.h"
127 #include "drv_sc_menuload.h"
128 #include "mhal_sc.h"
129 #if FRC_INSIDE
130 #include "mdrv_frc.h"
131 #include "mhal_frc.h"
132 #endif
133 #include "mhal_adc.h"
134 #include "xc_hwreg_utility2.h"
135 #include "hwreg_sc.h"
136 #include "hwreg_ipmux.h"
137 #include "XC_private.h"
138 #include "hwreg_adc_atop.h"
139 #include "hwreg_adc_dtop.h"
140 //-------------------------------------------------------------------------------------------------
141 // Driver Compiler Options
142 //-------------------------------------------------------------------------------------------------
143
144
145 //-------------------------------------------------------------------------------------------------
146 // Local Defines
147 //-------------------------------------------------------------------------------------------------
148 #define DRVSCIP_DBG(x) //x
149
150
151 //-------------------------------------------------------------------------------------------------
152 // Local Structures
153 //-------------------------------------------------------------------------------------------------
154
155
156 //-------------------------------------------------------------------------------------------------
157 // Global Variables
158 //-------------------------------------------------------------------------------------------------
159
160
161
162 //-------------------------------------------------------------------------------------------------
163 // Local Variables
164 //-------------------------------------------------------------------------------------------------
165
166
167 //-------------------------------------------------------------------------------------------------
168 // Debug Functions
169 //-------------------------------------------------------------------------------------------------
170
171
172 //-------------------------------------------------------------------------------------------------
173 // Local Functions
174 //-------------------------------------------------------------------------------------------------
175
176
177 //-------------------------------------------------------------------------------------------------
178 // Global Functions
179 //-------------------------------------------------------------------------------------------------
180
181
182 /******************************************************************************/
183 ///software reset for scaler
184 ///@param u16Sel \b IN
185 ///- software reset VDFE: BIT(15)
186 ///- software reset VDCOMBF: BIT(14)
187 ///- software reset EMCU: BIT(13)
188 ///- software reset GMC: BIT(12)
189 ///- software reset REG: BIT(7)
190 ///- software reset ADC: BIT(6)
191 ///- software reset DIGITAL: BIT(5)
192 ///- software reset SCALER: BIT(4)
193 ///- software reset DISPLAY: BIT(3)
194 ///- software reset OSD: BIT(1)
195 ///- software reset ALL: BIT(0)
196 ///@param u8DelayTime \b IN:
197 ///- software reset delay time
198 /******************************************************************************/
Hal_SC_ip_software_reset(void * pInstance,MS_U8 u8Reset,SCALER_WIN eWindow)199 void Hal_SC_ip_software_reset(void *pInstance, MS_U8 u8Reset, SCALER_WIN eWindow)
200 {
201 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
202 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
203 MS_BOOL bReset = FALSE;
204
205 if(psXCInstPri->u32DeviceID == E_XC_DEVICE0)
206 {
207 MS_U8 u8CLK1Mux = MDrv_ReadByte(REG_CKG_IDCLK1); //Sub window
208 MS_U8 u8CLK2Mux = MDrv_ReadByte(REG_CKG_IDCLK2); //Main window
209
210 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, u8Reset, 0xFF );
211 if (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, BIT(1)) == BIT(1))
212 {
213 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, BIT(10), BIT(10));
214 bReset = TRUE;
215 }
216 else
217 {
218 printf("reset %s %d mute=%x bwd=%x\n",__FUNCTION__,__LINE__,SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, BIT(1)), SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_01_L, 0xFF));
219 }
220 MsOS_DelayTask(1);
221 if(u8Reset == REST_IP_F1) //Sub window
222 {
223 MDrv_WriteByteMask(REG_CKG_IDCLK1, CKG_IDCLK1_XTAL, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
224 MDrv_WriteByteMask(REG_CKG_IDCLK1, u8CLK1Mux, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
225 }
226 else if(u8Reset == REST_IP_F2) //Main window
227 {
228 MDrv_WriteByteMask(REG_CKG_IDCLK2, CKG_IDCLK2_XTAL, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
229 MDrv_WriteByteMask(REG_CKG_IDCLK2, u8CLK2Mux, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
230 }
231 else if(u8Reset == REST_IP_ALL) //Main and sub windows
232 {
233 MDrv_WriteByteMask(REG_CKG_IDCLK1, CKG_IDCLK1_XTAL, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
234 MDrv_WriteByteMask(REG_CKG_IDCLK1, u8CLK1Mux, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
235 MDrv_WriteByteMask(REG_CKG_IDCLK2, CKG_IDCLK2_XTAL, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
236 MDrv_WriteByteMask(REG_CKG_IDCLK2, u8CLK2Mux, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
237 }
238 if (bReset == TRUE)
239 {
240 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0, BIT(10) );
241 }
242 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0x00, 0xFF );
243 MsOS_DelayTask(1);
244 }
245 else
246 {
247 MS_U8 u8CLK1Mux = MDrv_ReadByte(REG_CKG_S2_IDCLK1); //Sub window
248 MS_U8 u8CLK2Mux = MDrv_ReadByte(REG_CKG_S2_IDCLK2); //Main window
249
250 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, u8Reset, 0xFF );
251 MsOS_DelayTask(1);
252 if(u8Reset == REST_IP_F1) //Sub window
253 {
254 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, CKG_S2_IDCLK1_XTAL, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
255 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, u8CLK1Mux, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
256 }
257 else if(u8Reset == REST_IP_F2) //Main window
258 {
259 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, CKG_S2_IDCLK2_XTAL, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
260 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, u8CLK2Mux, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
261 }
262 else if(u8Reset == REST_IP_ALL) //Main and sub windows
263 {
264 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, CKG_S2_IDCLK1_XTAL, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
265 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, u8CLK1Mux, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
266 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, CKG_S2_IDCLK2_XTAL, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
267 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, u8CLK2Mux, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
268 }
269 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0x00, 0xFF );
270 MsOS_DelayTask(1);
271 }
272 }
273
Hal_SC_ip_get_sync_flag(void * pInstance,SCALER_WIN eWindow)274 MS_U8 Hal_SC_ip_get_sync_flag(void *pInstance, SCALER_WIN eWindow)
275 {
276 //MS_U8 u8Bank;
277 MS_U8 u8SyncFlag;
278 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
279 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
280
281 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
282
283 if(eWindow == MAIN_WINDOW)
284 {
285 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
286 //u8SyncFlag = MDrv_ReadByte(L_BK_IP1F2(0x1E));
287 u8SyncFlag = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & 0x00FF;
288 }
289 else
290 {
291 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
292 //u8SyncFlag = MDrv_ReadByte(L_BK_IP1F1(0x1E));
293 u8SyncFlag = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1E_L) & 0x00FF;
294 }
295 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
296 return u8SyncFlag;
297 }
298
Hal_SC_ip_get_sync_detect_status(void * pInstance,SCALER_WIN eWindow)299 MS_U8 Hal_SC_ip_get_sync_detect_status(void *pInstance, SCALER_WIN eWindow)
300 {
301 MS_U8 u8DetectStatus;
302 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
303 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
304
305 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
306
307 /* mode detect status */
308 if(eWindow == MAIN_WINDOW)
309 {
310 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
311 //u8DetectStatus = MDrv_ReadByte(H_BK_IP1F2(0x1E));
312 u8DetectStatus = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & 0xFF00)>>8;
313 }
314 else
315 {
316 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
317 //u8DetectStatus = MDrv_ReadByte(H_BK_IP1F1(0x1E));
318 u8DetectStatus = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1E_L) & 0xFF00)>>8;
319 }
320
321 //MDrv_WriteByte( BK_SELECT_00, u8Bank );
322 return u8DetectStatus;
323 }
324
Hal_SC_ip_get_input_vsync_polarity(void * pInstance)325 MS_U8 Hal_SC_ip_get_input_vsync_polarity(void *pInstance)
326 {
327 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
328 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
329 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & BIT(8)) ? 1:0;
330 }
331
Hal_SC_ip_get_input_vsync_value(void * pInstance,SCALER_WIN eWindow)332 MS_U8 Hal_SC_ip_get_input_vsync_value(void *pInstance, SCALER_WIN eWindow)
333 {
334 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
335 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
336 return (Hal_SC_ip_get_sync_flag(pInstance, eWindow) & BIT(2)) ? 1:0;
337 }
338
Hal_SC_ip_get_output_vsync_value(void * pInstance,SCALER_WIN eWindow)339 MS_U8 Hal_SC_ip_get_output_vsync_value(void *pInstance, SCALER_WIN eWindow)
340 {
341 // For Active Low case, BIT(0) = 0 means Vsync, so return true means get Vsync
342 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
343 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
344 return (Hal_SC_ip_get_sync_flag(pInstance, eWindow) & BIT(0)) ? 0 : 1;
345 }
346
Hal_SC_ip_set_reg_usr_vspolmd(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)347 void Hal_SC_ip_set_reg_usr_vspolmd(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow )
348 {
349 //MS_U8 u8Bank;
350 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
351 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
352 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
353
354 if(eWindow == MAIN_WINDOW)
355 {
356 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
357 //MDrv_WriteRegBit(H_BK_IP1F2(0x21), u8Enable, BIT(4));
358 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, u8Enable ? BIT(12) : 0, BIT(12));
359 }
360 else
361 {
362 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
363 //MDrv_WriteRegBit(H_BK_IP1F1(0x21), u8Enable, BIT(4));
364 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, u8Enable ? BIT(12) : 0, BIT(12));
365 }
366
367 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
368 }
369
Hal_SC_ip_init_reg_in_timingchange(void * pInstance,SCALER_WIN eWindow)370 void Hal_SC_ip_init_reg_in_timingchange(void *pInstance, SCALER_WIN eWindow)
371 {
372 //MS_U8 u8Bank;
373 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
374 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
375
376 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
377
378 if(eWindow == MAIN_WINDOW)
379 {
380 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
381 //MDrv_WriteByte(L_BK_IP1F2(0x21), 0x00);
382 //MDrv_WriteByteMask(H_BK_IP1F2(0x21), 0x00 , BIT(0) );
383 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L,0x0000,0x01FF);
384
385 // reset 3D setting
386 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_63_L, 0x0000);
387 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_7F_L, 0x00, BIT(15));
388 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_30_L, 0x00, BIT(0));
389 }
390 else
391 {
392 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
393 //MDrv_WriteByte(L_BK_IP1F1(0x21), 0x00);
394 //MDrv_WriteByteMask(H_BK_IP1F1(0x21), 0x00 , BIT(0) );
395 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L,0x0000,0x01FF);
396 }
397
398 // restore coast window to default settings
399 Hal_SC_ip_set_coast_window( pInstance, 0x0C, 0x0C, eWindow );
400
401 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
402 }
403
404 /******************************************************************************/
405 ///This function will return Horizontal period value
406 ///@return
407 ///- MS_U16 Horizontal Period
408 /******************************************************************************/
Hal_SC_ip_get_horizontalPeriod(void * pInstance,SCALER_WIN eWindow)409 MS_U16 Hal_SC_ip_get_horizontalPeriod(void *pInstance, SCALER_WIN eWindow)
410 {
411 //MS_U8 u8Bank;
412 MS_U16 u16HorizontalPeriod;
413 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
414 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
415
416 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
417
418 if(eWindow == MAIN_WINDOW)
419 {
420 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
421 //u16HorizontalPeriod = ( MDrv_Read2Byte( L_BK_IP1F2(0x20)) & MST_H_PERIOD_MASK );
422 u16HorizontalPeriod = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_20_L) & MST_H_PERIOD_MASK );
423 }
424 else
425 {
426 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
427 //u16HorizontalPeriod = ( MDrv_Read2Byte( L_BK_IP1F1(0x20)) & MST_H_PERIOD_MASK );
428 u16HorizontalPeriod = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_20_L) & MST_H_PERIOD_MASK );
429 }
430
431 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
432
433 return u16HorizontalPeriod;
434 }
435
436
437 /******************************************************************************/
438 ///This function will return Vertical total value
439 ///@return
440 ///- MS_U16 Vertical total
441 /******************************************************************************/
Hal_SC_ip_get_verticaltotal(void * pInstance,SCALER_WIN eWindow)442 MS_U16 Hal_SC_ip_get_verticaltotal(void *pInstance, SCALER_WIN eWindow)
443 {
444 //MS_U8 u8Bank;
445 MS_U16 u16VerticalTotal;
446 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
447 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
448
449 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
450
451 if(eWindow == MAIN_WINDOW)
452 {
453 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
454 //u16VerticalTotal = ( MDrv_Read2Byte( L_BK_IP1F2(0x1f)) & MST_V_TOTAL_MASK );
455 u16VerticalTotal = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_1F_L) & MST_V_TOTAL_MASK );
456 }
457 else
458 {
459 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
460 //u16VerticalTotal = ( MDrv_Read2Byte( L_BK_IP1F1(0x1f)) & MST_V_TOTAL_MASK );
461 u16VerticalTotal = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_1F_L) & MST_V_TOTAL_MASK );
462 }
463
464 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
465
466 return u16VerticalTotal;
467 }
468 #if 0
469 /******************************************************************************/
470 /// Get the horizontal period of auto postion
471 /// @return the horizontal period of auto postion
472 /******************************************************************************/
473 MS_U16 MDrv_Scaler_GetHorizontalDEStart(void)
474 {
475 MS_U8 u8Bank;
476 MS_U16 u16HorizontalDE;
477
478 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
479 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
480
481 u16HorizontalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x13 ) );
482
483 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
484
485 return u16HorizontalDE;
486 }
487
488
489 /******************************************************************************/
490 /// Get the horizontal period of auto postion
491 /// @return the horizontal period of auto postion
492 /******************************************************************************/
493 MS_U16 MDrv_Scaler_GetHorizontalDE(void)
494 {
495 MS_U8 u8Bank;
496 MS_U16 u16HorizontalDE;
497
498 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
499 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
500
501 u16HorizontalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x15 ) ) -
502 MDrv_Read2Byte ( L_BK_IP1F2 ( 0x13 ) ) + 1;
503
504 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
505
506 return u16HorizontalDE;
507 }
508
509
510 /******************************************************************************/
511 /// Get the vertical period of auto postion
512 /// @return the vertical period of auto postion
513 /******************************************************************************/
514 MS_U16 MDrv_Scaler_GetVerticalDEStart(void)
515 {
516 MS_U8 u8Bank;
517 MS_U16 u16VerticalDE;
518
519 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
520 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
521
522 u16VerticalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x12 ) );
523
524 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
525
526 return u16VerticalDE;
527 }
528
529 /******************************************************************************/
530 /// Get the vertical period of auto postion
531 /// @return the vertical period of auto postion
532 /******************************************************************************/
533 MS_U16 MDrv_Scaler_GetVerticalDEEnd(void)
534 {
535 MS_U8 u8Bank;
536 MS_U16 u16VerticalDE;
537
538 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
539 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
540
541 u16VerticalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x14 ) );
542
543 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
544
545 return u16VerticalDE;
546 }
547
548
549 /******************************************************************************/
550 /// Get the vertical period of auto postion
551 /// @return the vertical period of auto postion
552 /******************************************************************************/
553 MS_U16 MDrv_Scaler_GetVerticalDE(void)
554 {
555 MS_U8 u8Bank;
556 MS_U16 u16VerticalDE;
557
558 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
559 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
560
561 u16VerticalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x14 ) ) -
562 MDrv_Read2Byte ( L_BK_IP1F2 ( 0x12 ) ) + 1;
563
564 // SC_PATCH_02 start ===============================
565 // 2008-07-24.Daniel: Patch Interlace mode
566 if( Hal_SC_ip_get_interlace_status() )
567 {
568 if( u16VerticalDE&1 )
569 u16VerticalDE += 1;
570 }
571 // SC_PATCH_02 end =================================
572
573 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
574
575 return u16VerticalDE;
576 }
577 #endif
578 //=========================================================//
579 // Function : Hal_SC_ip_de_hstart_info
580 // Description:
581 //=========================================================//
Hal_SC_ip_de_hstart_info(void * pInstance,SCALER_WIN eWindow)582 MS_U16 Hal_SC_ip_de_hstart_info(void *pInstance, SCALER_WIN eWindow)
583 {
584 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
585 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
586 if(eWindow == MAIN_WINDOW)
587 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_13_L, IP_DE_HSTART_MASK);
588 else
589 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_13_L, IP_DE_HSTART_MASK);
590 }
591 //=========================================================//
592 // Function : Hal_SC_ip_de_hend_info
593 // Description:
594 //=========================================================//
Hal_SC_ip_de_hend_info(void * pInstance,SCALER_WIN eWindow)595 MS_U16 Hal_SC_ip_de_hend_info(void *pInstance, SCALER_WIN eWindow)
596 {
597 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
598 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
599 if(eWindow == MAIN_WINDOW)
600 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_15_L, IP_DE_HEND_MASK);
601 else
602 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_15_L, IP_DE_HEND_MASK);
603 }
604
605 //=========================================================//
606 // Function : Hal_SC_ip_de_vstart_info
607 // Description:
608 //=========================================================//
Hal_SC_ip_de_vstart_info(void * pInstance,SCALER_WIN eWindow)609 MS_U16 Hal_SC_ip_de_vstart_info(void *pInstance, SCALER_WIN eWindow)
610 {
611 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
612 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
613 if(eWindow == MAIN_WINDOW)
614 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_12_L, IP_DE_VSTART_MASK);
615 else
616 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_12_L, IP_DE_VSTART_MASK);
617 }
618 //=========================================================//
619 // Function : Hal_SC_ip_de_vend_info
620 // Description:
621 //=========================================================//
Hal_SC_ip_de_vend_info(void * pInstance,SCALER_WIN eWindow)622 MS_U16 Hal_SC_ip_de_vend_info(void *pInstance, SCALER_WIN eWindow)
623 {
624 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
625 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
626 if(eWindow == MAIN_WINDOW)
627 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_14_L, IP_DE_VEND_MASK);
628 else
629 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_14_L, IP_DE_VEND_MASK);
630 }
631
632 /******************************************************************************/
633 ///Set H position for PC mode
634 ///@param u16Position \b IN
635 ///- H position
636 /******************************************************************************/
Hal_SC_ip_set_pc_h_position(void * pInstance,MS_U16 u16Position,SCALER_WIN eWindow)637 void Hal_SC_ip_set_pc_h_position (void *pInstance, MS_U16 u16Position, SCALER_WIN eWindow)
638 {
639 //MS_U8 u8Bank;
640 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
641 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
642
643 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
644
645 if(eWindow == MAIN_WINDOW)
646 {
647 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
648 //MDrv_W=rite2Byte(L_BK_IP1F2(0x05), u16Position) ;
649 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, u16Position) ;
650 }
651 else
652 {
653 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
654 //MDrv_Write2Byte(L_BK_IP1F1(0x05), u16Position) ;
655 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, u16Position) ;
656 }
657
658 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
659 }
660
661
662 /******************************************************************************/
663 ///Set V position for PC mode
664 ///@param u16Position \b IN
665 ///- V position
666 /******************************************************************************/
Hal_SC_ip_set_pc_v_position(void * pInstance,MS_U16 u16Position,SCALER_WIN eWindow)667 void Hal_SC_ip_set_pc_v_position (void *pInstance, MS_U16 u16Position, SCALER_WIN eWindow )
668 {
669 //MS_U8 u8Bank;
670 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
671 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
672
673 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
674
675 u16Position = (u16Position==0)?1:u16Position;
676
677 if(eWindow == MAIN_WINDOW)
678 {
679 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
680 //MDrv_Write2Byte(L_BK_IP1F2(0x04), u16Position );
681 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, u16Position) ;
682 }
683 else
684 {
685 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
686 //MDrv_Write2Byte(L_BK_IP1F1(0x04), u16Position );
687 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, u16Position);
688 }
689
690 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
691 }
692
693 /******************************************************************************/
694 ///Set Macrovision filter
695 ///@param bEnable \b IN
696 ///- ENABLE Filter
697 /******************************************************************************/
Hal_SC_ip_set_ms_filter(void * pInstance,MS_BOOL bEnable,MS_U16 u16FilterRange,SCALER_WIN eWindow)698 void Hal_SC_ip_set_ms_filter(void *pInstance, MS_BOOL bEnable, MS_U16 u16FilterRange, SCALER_WIN eWindow )
699 {
700 //Macrovision filter is not used right now
701 UNUSED(u16FilterRange);
702 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
703 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
704
705 if ( bEnable )
706 {
707 if( eWindow == MAIN_WINDOW )
708 {
709 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_35_L, BIT(12) , BIT(12) | BIT(13) );
710 }
711 else
712 {
713 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_35_L, BIT(12) , BIT(12) | BIT(13) );
714 }
715 }
716 else
717 {
718 if( eWindow == MAIN_WINDOW )
719 {
720 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_35_L, 0x00 , BIT(12) | BIT(13) );
721 }
722 else
723 {
724 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_35_L, 0x00 , BIT(12) | BIT(13) );
725 }
726 }
727
728 }
729
730 /******************************************************************************/
731 ///Set coast window information.
732 ///@param u8Start \b IN
733 ///- Coast start from n HSYNC leading edge
734 ///@param u8End \n IN
735 ///- Coast end at n HSYNC leading edge
736 /******************************************************************************/
Hal_SC_ip_set_coast_window(void * pInstance,MS_U8 u8Start,MS_U8 u8End,SCALER_WIN eWindow)737 void Hal_SC_ip_set_coast_window(void *pInstance, MS_U8 u8Start, MS_U8 u8End, SCALER_WIN eWindow )
738 {
739 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
740 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
741 if( eWindow == MAIN_WINDOW )
742 {
743 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_24_L, u8Start<<8, 0xFF00 );
744 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_25_L, u8End, 0x00FF );
745 }
746 else
747 {
748 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_24_L, u8Start<<8, 0xFF00 );
749 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_25_L, u8End, 0x00FF );
750 }
751 }
752
753
Hal_SC_ip_sog_detect(void * pInstance)754 void Hal_SC_ip_sog_detect(void* pInstance)
755 {
756 MS_U8 u8SOGState;
757 MS_U8 u8SogDetectStatus;
758 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
759 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
760
761 u8SogDetectStatus = HAL_SC_GetSogDetectStatus(pInstance);
762
763 u8SogDetectStatus &= ~(0x0001);
764 u8SOGState = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L)& 0x0070;
765 // check Separated -> Composite -> SOG -> Separated
766 if(u8SOGState & BIT(4))
767 {
768 // in detecting SOG, turn SOG detect off and set back to auto-detect
769 u8SOGState &= ~0x70; // set BIT[6..4] to 0 to turn off SOG detect
770 u8SOGState |= 0x00; // switch to detect separated H/V Sync
771 }
772 else if((u8SOGState & 0x60) == 0x40)
773 {
774 // detecting separated H/V sync, switch to detect composite sync
775 u8SOGState &= ~0x70;
776 u8SOGState |= 0x20; // switch to detect composite sync
777 }
778 else if((u8SOGState & 0x60) == 0x20)
779 {
780 // detecting composite sync, switch to detect SOG
781 u8SogDetectStatus |= (0x0001);
782 u8SOGState |= 0x70; // set BIT[6..4] to 0x7 to turn SOG detect on
783 }
784 else
785 {
786 // detecting separated H/V sync, switch to detect composite sync
787 u8SOGState &= ~0x70;
788 u8SOGState |= 0x40; // switch to detect composite sync
789 }
790
791 HAL_SC_SetSogDetectStatus(pInstance, u8SogDetectStatus);
792 //MDrv_WriteByte(L_BK_IP1F2(0x02), u8SOGState);
793 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L,u8SOGState,0x0070);
794 Hal_SC_ip_software_reset(pInstance, REST_IP_F2, MAIN_WINDOW);
795 Hal_ADC_reset(pInstance, REST_ADC);
796 // adjust ADC bandwidth
797 if((u8SOGState & 0x70) == 0x70)
798 {
799 // SOG
800 //MDrv_WriteRegBit(L_BK_IP1F2(0x03), DISABLE, BIT(5)); // Delay 1/4 input HSYNC
801 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, 0 ,BIT(5));
802 MDrv_WriteRegBit(REG_ADC_ATOP_1C_L, DISABLE, BIT(5));
803 MDrv_WriteByte(REG_ADC_ATOP_1C_H, 0x38); // Turn on SOG input low bandwidth filter
804 MDrv_WriteRegBit(REG_ADC_DTOP_07_L, ENABLE, BIT(6)); // ADC PLL lock source is SOG
805 }
806 else
807 {
808 // Non SOG
809 //MDrv_WriteRegBit(L_BK_IP1F2(0x03), DISABLE, BIT(5)); // No delay input HSYNC
810 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, 0 ,BIT(5));
811 MDrv_WriteRegBit(REG_ADC_ATOP_1C_L, ENABLE, BIT(5));
812 MDrv_WriteByte(REG_ADC_ATOP_1C_H, 0x30); // Turn off SOG input low bandwidth filter
813 MDrv_WriteRegBit(REG_ADC_DTOP_07_L, DISABLE, BIT(6)); // ADC PLL lock source is HSync
814 }
815 }
816
817 /******************************************************************************/
818 ///get interlace detecting result
819 ///@return MS_U8
820 ///- 1:interlace
821 ///- 0:no interlace
822 /******************************************************************************/
Hal_SC_ip_get_interlace_status(void * pInstance,SCALER_WIN eWindow)823 MS_U8 Hal_SC_ip_get_interlace_status (void *pInstance, SCALER_WIN eWindow )
824 {
825 //MS_U8 u8Bank;
826 MS_BOOL bInterlace;
827 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
828 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
829
830 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
831
832 bInterlace = 0;
833
834 if(eWindow == MAIN_WINDOW)
835 {
836 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
837 //if ( MDrv_ReadByte(H_BK_IP1F2(0x1E)) & BIT(3) )
838 if ( SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & BIT(11) )
839 {
840 bInterlace = 1;
841 }
842 }
843 else
844 {
845 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
846 //if ( MDrv_ReadByte(H_BK_IP1F1(0x1E)) & BIT(3) )
847 if ( SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1E_L) & BIT(11) )
848 {
849 bInterlace = 1;
850 }
851 }
852
853
854 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
855 return bInterlace;
856 }
857
Hal_SC_IPMux_Gen_SpecificTiming(void * pInstance,XC_Internal_TimingType timingtype)858 void Hal_SC_IPMux_Gen_SpecificTiming(void *pInstance, XC_Internal_TimingType timingtype )
859 {
860 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
861 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
862
863 switch (timingtype)
864 {
865 case E_XC_480P:
866 case E_XC_480I:
867 W2BYTE(REG_IPMUX_12_L, 0x02D0); //HDE
868 W2BYTEMSK(REG_IPMUX_13_L, 010, LBMASK); //H front porch
869 W2BYTEMSK(REG_IPMUX_14_L, 0x3E, LBMASK) ; //H sync pulse width
870 W2BYTE(REG_IPMUX_15_L, 0x05F0); //Htotal 0x035A
871 W2BYTE(REG_IPMUX_16_L, 0x01E0) ; //VDE
872 W2BYTEMSK(REG_IPMUX_17_L, 0x06, LBMASK) ; //V front porch
873 W2BYTEMSK(REG_IPMUX_18_L, 0x09, LBMASK) ; //V sync pulse width
874 W2BYTE(REG_IPMUX_19_L, 0x020d) ; //Vtotal
875 break;
876
877 case E_XC_576P:
878 case E_XC_576I:
879 W2BYTE(REG_IPMUX_12_L, 0x02D0); //HDE
880 W2BYTEMSK(REG_IPMUX_13_L, 010, LBMASK); //H front porch
881 W2BYTEMSK(REG_IPMUX_14_L, 0x3E, LBMASK) ; //H sync pulse width
882 W2BYTE(REG_IPMUX_15_L, 0x035A); //Htotal
883 W2BYTE(REG_IPMUX_16_L, 0x0240) ; //VDE
884 W2BYTEMSK(REG_IPMUX_17_L, 0x06, LBMASK) ; //V front porch
885 W2BYTEMSK(REG_IPMUX_18_L, 0x09, LBMASK) ; //V sync pulse width
886 W2BYTE(REG_IPMUX_19_L, 0x0271) ; //Vtotal
887 break;
888
889 case E_XC_720P:
890 case E_XC_720I:
891 W2BYTE(REG_IPMUX_12_L, 0x0500); //HDE
892 W2BYTEMSK(REG_IPMUX_13_L, 0x6E, LBMASK); //H front porch
893 W2BYTEMSK(REG_IPMUX_14_L, 0x28, LBMASK) ; //H sync pulse width
894 W2BYTE(REG_IPMUX_15_L, 0x0690); //Htotal
895 W2BYTE(REG_IPMUX_16_L, 0x02D0) ; //VDE
896 W2BYTEMSK(REG_IPMUX_17_L, 0x05, LBMASK) ; //V front porch
897 W2BYTEMSK(REG_IPMUX_18_L, 0x05, LBMASK) ; //V sync pulse width
898 W2BYTE(REG_IPMUX_19_L, 0x02EE) ; //Vtotal
899 break;
900
901 case E_XC_1080P:
902 case E_XC_1080I:
903
904 W2BYTE(REG_IPMUX_12_L, 0x0780); //HDE
905 W2BYTEMSK(REG_IPMUX_13_L, 0x58, LBMASK); //H front porch
906 W2BYTEMSK(REG_IPMUX_14_L, 0x2C, LBMASK) ; //H sync pulse width
907 W2BYTE(REG_IPMUX_15_L, 0x0898); //Htotal
908 W2BYTE(REG_IPMUX_16_L, 0x0438) ; //VDE
909 W2BYTEMSK(REG_IPMUX_17_L, 0x02, LBMASK) ; //V front porch
910 W2BYTEMSK(REG_IPMUX_18_L, 0x05, LBMASK) ; //V sync pulse width
911 W2BYTE(REG_IPMUX_19_L, 0x0465) ; //Vtotal
912
913 break;
914 case E_XC_OFF:
915 default:
916 break;
917 }
918
919 if((timingtype == E_XC_480I) || (timingtype == E_XC_576I) || (timingtype == E_XC_720I) || (timingtype == E_XC_1080I))
920 {
921 W2BYTEMSK(REG_IPMUX_10_L, BIT(1), BIT(1));
922 }
923 else
924 {
925 W2BYTEMSK(REG_IPMUX_10_L, 0x00, BIT(1));
926 }
927 if ( timingtype == E_XC_OFF)
928 {
929 // Turn off timing gen
930 W2BYTEMSK(REG_IPMUX_10_L, 0x00, BIT(0));
931 }
932 else
933 {
934 W2BYTEMSK(REG_IPMUX_10_L, BIT(15), BIT(15));
935 W2BYTEMSK(REG_IPMUX_10_L, BIT(0), BIT(0));
936 }
937
938
939 }
940
Hal_SC_Check_IP_Gen_Timing(void * pInstance)941 MS_BOOL Hal_SC_Check_IP_Gen_Timing(void *pInstance)
942 {
943 return (MDrv_ReadByte(REG_IPMUX_10_L) & 0x01);
944 }
945
Hal_SC_ip_set_input_source(void * pInstance,MS_U8 u8InputSrcSel,MS_U8 u8SyncSel,MS_U8 u8VideoSel,MS_U8 u8isYPbPr,SCALER_WIN eWindow)946 void Hal_SC_ip_set_input_source(void *pInstance, MS_U8 u8InputSrcSel, MS_U8 u8SyncSel, MS_U8 u8VideoSel, MS_U8 u8isYPbPr, SCALER_WIN eWindow )
947 {
948 MS_U16 u16RegVal;
949 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
950 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
951
952 u16RegVal = (u8InputSrcSel&0x07) |
953 ((u8SyncSel&0x07) << 4) |
954 ((u8VideoSel&0x03) << 8) |
955 ((u8isYPbPr&0x01) << 10);
956
957 if( eWindow == MAIN_WINDOW )
958 {
959 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, u16RegVal, 0x0777);
960 }
961 else
962 {
963 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_02_L, u16RegVal, 0x0777);
964 }
965
966 }
967
968
hal_ip_set_input_10bit(void * pInstance,MS_BOOL bInput10Bit,SCALER_WIN eWindow)969 void hal_ip_set_input_10bit(void *pInstance, MS_BOOL bInput10Bit, SCALER_WIN eWindow )
970 {
971 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
972 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
973 if( eWindow == MAIN_WINDOW )
974 {
975 if(bInput10Bit)
976 {
977 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, BIT(11), BIT(11));
978 }
979 else //Input is 8bit
980 {
981 //when BIT(11)=0 --> BIT(10)=1, 8bit.5; BIT(10)=0, 8bit.0
982 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, BIT(10), (BIT(11)|BIT(10)) );
983 }
984 }
985 else
986 {
987 if(bInput10Bit)
988 {
989 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, BIT(11), BIT(11));
990 }
991 else //Input is 8bit
992 {
993 //when BIT(11)=0 --> BIT(10)=1, 8bit.5; BIT(10)=0, 8bit.0
994 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, BIT(10), (BIT(11)|BIT(10)) );
995 }
996 }
997 }
998
999
Hal_SC_ip_set_image_wrap(void * pInstance,MS_BOOL bHEnable,MS_BOOL bVEnable,SCALER_WIN eWindow)1000 void Hal_SC_ip_set_image_wrap(void *pInstance, MS_BOOL bHEnable, MS_BOOL bVEnable, SCALER_WIN eWindow )
1001 {
1002 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1003 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1004 if( eWindow == MAIN_WINDOW )
1005 {
1006 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, ((bVEnable<<1)|bHEnable), (BIT(1)|BIT(0)) );
1007 }
1008 else
1009 {
1010 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, ((bVEnable<<1)|bHEnable), (BIT(1)|BIT(0)) );
1011 }
1012 }
1013
1014
Hal_SC_ip_set_input_sync_reference_edge(void * pInstance,MS_BOOL bHRef,MS_BOOL bVRef,SCALER_WIN eWindow)1015 void Hal_SC_ip_set_input_sync_reference_edge(void *pInstance, MS_BOOL bHRef, MS_BOOL bVRef, SCALER_WIN eWindow )
1016 {
1017 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1018 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1019 if( eWindow == MAIN_WINDOW )
1020 {
1021 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, ((bHRef<<4)|(bVRef<<3)), (BIT(4)|BIT(3)) );
1022 }
1023 else
1024 {
1025 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, ((bHRef<<4)|(bVRef<<3)), (BIT(4)|BIT(3)) );
1026 }
1027 }
1028
1029
Hal_SC_ip_set_input_vsync_delay(void * pInstance,MS_BOOL bDelay,SCALER_WIN eWindow)1030 void Hal_SC_ip_set_input_vsync_delay(void *pInstance, MS_BOOL bDelay, SCALER_WIN eWindow )
1031 {
1032 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1033 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1034 if( eWindow == MAIN_WINDOW )
1035 {
1036 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, bDelay<<5, BIT(5) );
1037 }
1038 else
1039 {
1040 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, bDelay<<5, BIT(5) );
1041 }
1042 }
1043
1044
Hal_SC_ip_set_de_only_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1045 void Hal_SC_ip_set_de_only_mode(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1046 {
1047 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1048 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1049 //Turn on BIT(7) to let H/V Start being programable.
1050 if( eWindow == MAIN_WINDOW )
1051 {
1052 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, (BIT(7)|(bEnable<<6)), (BIT(7)|BIT(6)) );
1053 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L, bEnable<<4, BIT(4) ); // SW patch for HDMI switch, Auto search HST jistter mask filter force off
1054 if(psXCInstPri->u32DeviceID)
1055 MDrv_WriteRegBit(REG_S2_DE_ONLY_F2, bEnable, S2_DE_ONLY_F2_MASK);
1056 else
1057 MDrv_WriteRegBit(REG_DE_ONLY_F2, bEnable, DE_ONLY_F2_MASK);
1058 }
1059 else
1060 {
1061 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, (BIT(7)|(bEnable<<6)), (BIT(7)|BIT(6)) );
1062 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_2F_L, bEnable<<4, BIT(4) ); // SW patch for HDMI switch, Auto search HST jistter mask filter force off
1063 if(psXCInstPri->u32DeviceID)
1064 MDrv_WriteRegBit(REG_S2_DE_ONLY_F1, bEnable, S2_DE_ONLY_F1_MASK);
1065 else
1066 MDrv_WriteRegBit(REG_DE_ONLY_F1, bEnable, DE_ONLY_F1_MASK);
1067 }
1068 }
1069
Hal_SC_ip_set_coast_input(void * pInstance,MS_BOOL bInputSel,SCALER_WIN eWindow)1070 void Hal_SC_ip_set_coast_input(void *pInstance, MS_BOOL bInputSel, SCALER_WIN eWindow )
1071 {
1072 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1073 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1074 //BIT(0): Coast Polarity to PAD --TODO
1075 if( eWindow == MAIN_WINDOW )
1076 {
1077 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_24_L, ((bInputSel<<5)|BIT(0)), 0xFF );
1078 }
1079 else
1080 {
1081 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_24_L, ((bInputSel<<5)|BIT(0)), 0xFF );
1082 }
1083 }
1084
Hal_SC_ip_set_DE_Mode_Glitch(void * pInstance,MS_U8 u8Setting,SCALER_WIN eWindow)1085 void Hal_SC_ip_set_DE_Mode_Glitch(void *pInstance, MS_U8 u8Setting , SCALER_WIN eWindow )
1086 {
1087 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1088 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1089 if( eWindow == MAIN_WINDOW )
1090 {
1091 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_27_L, u8Setting, 0xFF );
1092 }
1093 else
1094 {
1095 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_27_L, u8Setting, 0xFF );
1096 }
1097 }
1098
Hal_SC_ip_get_DE_mode_glitch_protect_enabled(void * pInstance,SCALER_WIN eWindow)1099 MS_BOOL Hal_SC_ip_get_DE_mode_glitch_protect_enabled(void *pInstance, SCALER_WIN eWindow)
1100 {
1101 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1102 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1103 if(eWindow == MAIN_WINDOW)
1104 {
1105 return (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_27_L, BIT(2)) >> 2);
1106 }
1107 else
1108 {
1109 return (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_27_L, BIT(2)) >> 2);
1110 }
1111 }
1112
Hal_SC_ip_set_input_sync_sample_mode(void * pInstance,MS_BOOL bMode,SCALER_WIN eWindow)1113 void Hal_SC_ip_set_input_sync_sample_mode(void *pInstance, MS_BOOL bMode, SCALER_WIN eWindow )
1114 {
1115 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1116 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1117 if( eWindow == MAIN_WINDOW )
1118 {
1119 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, (bMode<<2), BIT(2) );
1120 }
1121 else
1122 {
1123 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, (bMode<<2), BIT(2) );
1124 }
1125 }
1126
Hal_SC_ip_set_de_bypass_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1127 void Hal_SC_ip_set_de_bypass_mode(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1128 {
1129 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1130 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1131 if( eWindow == MAIN_WINDOW )
1132 {
1133 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L, (bEnable<<15), BIT(15) );
1134 }
1135 else
1136 {
1137 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_2F_L, (bEnable<<15), BIT(15) );
1138 }
1139 }
1140
Hal_SC_ip_set_de_lock_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1141 void Hal_SC_ip_set_de_lock_mode(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1142 {
1143 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1144 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1145 if( eWindow == MAIN_WINDOW )
1146 {
1147 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, (bEnable<<6), BIT(6) );
1148 }
1149 else
1150 {
1151 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, (bEnable<<6), BIT(6) );
1152 }
1153 }
1154
Hal_SC_get_hsd_pixel_count(void * pInstance,SCALER_WIN eWindow)1155 MS_U16 Hal_SC_get_hsd_pixel_count(void *pInstance, SCALER_WIN eWindow )
1156 {
1157 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1158 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1159 if( eWindow == MAIN_WINDOW )
1160 {
1161 return SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK02_3E_L, BITMASK(11 : 0) );
1162 }
1163 else
1164 {
1165 return SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK04_3E_L, BITMASK(11 : 0) );
1166 }
1167 }
1168
Hal_SC_get_vsd_line_count(void * pInstance,SCALER_WIN eWindow)1169 MS_U16 Hal_SC_get_vsd_line_count(void *pInstance, SCALER_WIN eWindow )
1170 {
1171 MS_U16 u16Count;
1172 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1173 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1174 if( eWindow == MAIN_WINDOW )
1175 {
1176 u16Count = SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK02_3F_L, BITMASK(10 : 0) );
1177 }
1178 else
1179 {
1180 u16Count = SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK04_3F_L, BITMASK(10 : 0) );
1181 }
1182 if(MDrv_XC_PCMonitor_Get_Vtotal(pInstance, eWindow) > DOUBLEHD_1080X2P_VSIZE)
1183 {
1184 u16Count |= 0x800; //Complement for HW bits missing
1185 }
1186 return u16Count;
1187 }
1188
Hal_SC_ip_set_post_glitch_removal(void * pInstance,MS_BOOL bEnble,MS_U8 u8Range,SCALER_WIN eWindow)1189 void Hal_SC_ip_set_post_glitch_removal(void *pInstance, MS_BOOL bEnble, MS_U8 u8Range, SCALER_WIN eWindow )
1190 {
1191 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1192 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1193 if( eWindow == MAIN_WINDOW )
1194 {
1195 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, ((bEnble<<7)|((u8Range&0x07)<<4)), 0xF0 );
1196 }
1197 else
1198 {
1199 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, ((bEnble<<7)|((u8Range&0x07)<<4)), 0xF0 );
1200 }
1201 }
1202
Hal_SC_ip_get_post_glitch_removal(void * pInstance,SCALER_WIN eWindow)1203 MS_U8 Hal_SC_ip_get_post_glitch_removal(void *pInstance, SCALER_WIN eWindow)
1204 {
1205 MS_BOOL bEnable = FALSE;
1206 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1207 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1208
1209 if( eWindow == MAIN_WINDOW )
1210 {
1211 bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, BIT(7)) >> 7);
1212 if (bEnable)
1213 {
1214 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, BIT(6)|BIT(5)|BIT(4)) >> 4);
1215 }
1216 else
1217 {
1218 return 0;
1219 }
1220 }
1221 else
1222 {
1223 bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, BIT(7)) >> 7);
1224 if (bEnable)
1225 {
1226 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, BIT(6)|BIT(5)|BIT(4)) >> 4);
1227 }
1228 else
1229 {
1230 return 0;
1231 }
1232 }
1233 }
1234
1235 //////////////////////////////////
1236 // Capture window
Hal_SC_ip_get_capture_window(void * pInstance,MS_WINDOW_TYPE * capture_win,SCALER_WIN eWindow)1237 void Hal_SC_ip_get_capture_window(void *pInstance, MS_WINDOW_TYPE* capture_win,SCALER_WIN eWindow)
1238 {
1239
1240 //MS_U8 u8Bank;
1241 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1242 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1243
1244 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
1245
1246 if( eWindow == MAIN_WINDOW )
1247 {
1248 // MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
1249
1250 /*capture_win->y = MDrv_Read2Byte( L_BK_IP1F2(0x04) ) ; // Vstart
1251 capture_win->x = MDrv_Read2Byte( L_BK_IP1F2(0x05) ) ; // Hstart
1252 capture_win->height= MDrv_Read2Byte( L_BK_IP1F2(0x06) ) ; // Vsize
1253 capture_win->width= MDrv_Read2Byte( L_BK_IP1F2(0x07) ) ; // Hsize
1254 */
1255 capture_win->y = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_04_L ) ; // Vstart
1256 capture_win->x = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_05_L ) ; // Hstart
1257 capture_win->height= SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_06_L ) ; // Vsize
1258 capture_win->width= SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_07_L , 0x3FFF) ; // Hsize
1259 }
1260 else
1261 {
1262 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
1263
1264 capture_win->y = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_04_L ) ; // Vstart
1265 capture_win->x = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_05_L ) ; // Hstart
1266 capture_win->height= SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_06_L ) ; // Vsize
1267 capture_win->width= SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, 0x3FFF ) ; // Hsize
1268 }
1269
1270 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
1271 }
1272
1273 #if 0
1274 static void Hal_SC_ip_set_capture_window(MS_U32 u32Reg, MS_U16 u16Value , SCALER_WIN eWindow)
1275 {
1276 if( eWindow == MAIN_WINDOW )
1277 {
1278 // There are 11bits for each setting of capture window
1279 SC_W2BYTEMSK( u32Reg , u16Value , 0x07FF );
1280 }
1281 else
1282 {
1283 MS_ASSERT(0);
1284 }
1285 }
1286 #endif
1287
Hal_SC_ip_set_capture_v_start(void * pInstance,MS_U16 u16Vstart,SCALER_WIN eWindow)1288 void Hal_SC_ip_set_capture_v_start(void *pInstance, MS_U16 u16Vstart , SCALER_WIN eWindow)
1289 {
1290 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1291 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1292 if(eWindow == MAIN_WINDOW)
1293 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, u16Vstart, 0x1FFF);
1294 else
1295 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, u16Vstart, 0x1FFF);
1296 }
1297
Hal_SC_ip_set_capture_v_start_with_Menuload(void * pInstance,MS_U16 u16Vstart,SCALER_WIN eWindow)1298 void Hal_SC_ip_set_capture_v_start_with_Menuload(void *pInstance, MS_U16 u16Vstart , SCALER_WIN eWindow)
1299 {
1300 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1301 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1302
1303 if(MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
1304 {
1305 _MLOAD_ENTRY(pInstance);
1306
1307 if(eWindow == MAIN_WINDOW)
1308 {
1309 //MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_MAIN_SYNC);
1310 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_04_L, u16Vstart, 0x1FFF);
1311 }
1312 else
1313 {
1314 //MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_SUB_SYNC);
1315 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_04_L, u16Vstart, 0x1FFF);
1316 }
1317 if (!MDrv_XC_MLoad_Fire(pInstance, TRUE))
1318 {
1319 printf("Error: Set MLoad Fire Error!!!!\n ");
1320 }
1321 //MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_OP_SYNC);
1322
1323 _MLOAD_RETURN(pInstance);
1324 }
1325 else
1326 {
1327 if(eWindow == MAIN_WINDOW)
1328 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, u16Vstart, 0x1FFF);
1329 else
1330 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, u16Vstart, 0x1FFF);
1331 }
1332 }
1333
Hal_SC_ip_set_capture_h_start(void * pInstance,MS_U16 u16Hstart,SCALER_WIN eWindow)1334 void Hal_SC_ip_set_capture_h_start(void *pInstance, MS_U16 u16Hstart , SCALER_WIN eWindow)
1335 {
1336 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1337 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1338 if(eWindow == MAIN_WINDOW)
1339 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, u16Hstart, 0x1FFF);
1340 else
1341 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, u16Hstart, 0x1FFF);
1342 }
1343
Hal_SC_ip_set_capture_h_start_with_Menuload(void * pInstance,MS_U16 u16Hstart,SCALER_WIN eWindow)1344 void Hal_SC_ip_set_capture_h_start_with_Menuload(void *pInstance, MS_U16 u16Hstart , SCALER_WIN eWindow)
1345 {
1346 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1347 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1348
1349 if(MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
1350 {
1351 _MLOAD_ENTRY(pInstance);
1352
1353 if(eWindow == MAIN_WINDOW)
1354 {
1355 //MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_MAIN_SYNC);
1356 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_05_L, u16Hstart, 0x1FFF);
1357 }
1358 else
1359 {
1360 //MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_SUB_SYNC);
1361 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_05_L, u16Hstart, 0x1FFF);
1362 }
1363 if (!MDrv_XC_MLoad_Fire(pInstance, TRUE))
1364 {
1365 printf("Error: Set MLoad Fire Error!!!!\n ");
1366 }
1367 //MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_OP_SYNC);
1368
1369 _MLOAD_RETURN(pInstance);
1370 }
1371 else
1372 {
1373 if(eWindow == MAIN_WINDOW)
1374 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, u16Hstart, 0x1FFF);
1375 else
1376 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, u16Hstart, 0x1FFF);
1377 }
1378 }
1379
Hal_SC_ip_set_capture_v_size(void * pInstance,MS_U16 u16Vsize,SCALER_WIN eWindow)1380 void Hal_SC_ip_set_capture_v_size(void *pInstance, MS_U16 u16Vsize , SCALER_WIN eWindow)
1381 {
1382 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1383 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1384 if(eWindow == MAIN_WINDOW)
1385 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_06_L, u16Vsize, 0x1FFF);
1386 else
1387 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_06_L, u16Vsize, 0x1FFF);
1388 }
1389
Hal_SC_ip_set_capture_h_size(void * pInstance,MS_U16 u16Hsize,SCALER_WIN eWindow)1390 void Hal_SC_ip_set_capture_h_size(void *pInstance, MS_U16 u16Hsize , SCALER_WIN eWindow)
1391 {
1392 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1393 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1394 if(eWindow == MAIN_WINDOW)
1395 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, u16Hsize, 0x3FFF);
1396 else
1397 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, u16Hsize, 0x3FFF);
1398 }
1399
Hal_SC_ip_set_fir_down_sample_divider(void * pInstance,MS_U8 u8Enable,MS_U16 u16OverSampleCount,SCALER_WIN eWindow)1400 void Hal_SC_ip_set_fir_down_sample_divider(void *pInstance, MS_U8 u8Enable, MS_U16 u16OverSampleCount,SCALER_WIN eWindow)
1401 {
1402 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1403 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1404 if( eWindow == MAIN_WINDOW )
1405 {
1406 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_0D_L, (u8Enable?( BIT(7) | (u16OverSampleCount & 0xF ) ):0) , (BIT(7) | BIT(0) |BIT(1) | BIT(2) |BIT(3)) );
1407 }
1408 else
1409 {
1410 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_0D_L, (u8Enable?( BIT(7) | (u16OverSampleCount & 0xF ) ):0) , (BIT(7) | BIT(0) |BIT(1) | BIT(2) |BIT(3)) );
1411 }
1412 }
1413
Hal_XC_MApi_XC_IPAutoNoSignal_GetCaps(void)1414 MS_BOOL Hal_XC_MApi_XC_IPAutoNoSignal_GetCaps(void)
1415 {
1416 return TRUE;
1417 }
1418
Hal_SC_ip_set_IPAutoNoSignal(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1419 void Hal_SC_ip_set_IPAutoNoSignal(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1420 {
1421 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1422 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1423 if (eWindow == MAIN_WINDOW)
1424 {
1425 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0B_L, bEnable? BIT(4)|BIT(5):0, BIT(4)|BIT(5));
1426 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, bEnable? BIT(12):0, BIT(12));
1427 }
1428 else
1429 {
1430 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0B_L, bEnable? BIT(4)|BIT(5):0, BIT(4)|BIT(5));
1431 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, bEnable? BIT(12):0, BIT(12));
1432 }
1433 }
1434
Hal_SC_ip_get_IPAutoNoSignal(void * pInstance,SCALER_WIN eWindow)1435 MS_BOOL Hal_SC_ip_get_IPAutoNoSignal(void *pInstance, SCALER_WIN eWindow )
1436 {
1437 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1438 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1439 if (eWindow == MAIN_WINDOW)
1440 {
1441 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, BIT(12) ) )? TRUE:FALSE;
1442 }
1443 else
1444 {
1445 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, BIT(12) ) )? TRUE:FALSE;
1446 }
1447 }
1448
Hal_SC_ip_enable_turnoff_OP1_for_AutoNoSignal(void * pInstance,MS_BOOL bEnable)1449 void Hal_SC_ip_enable_turnoff_OP1_for_AutoNoSignal(void *pInstance, MS_BOOL bEnable)
1450 {
1451 SC_W2BYTEMSK(0, REG_SC_BK20_24_L, bEnable? BIT(10):0, BIT(10));
1452 }
1453
1454 //////////////////////////////////
1455 // Auto gain
Hal_SC_ip_set_auto_gain_function(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)1456 void Hal_SC_ip_set_auto_gain_function(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow)
1457 {
1458 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1459 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1460 if( eWindow == MAIN_WINDOW )
1461 {
1462 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, (u8Enable?(BIT(0) | BIT(4)):0) , (BIT(0) | BIT(4)) );
1463 }
1464 else
1465 {
1466 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, (u8Enable?(BIT(0) | BIT(4)):0) , (BIT(0) | BIT(4)) );
1467 }
1468 }
1469
Hal_SC_ip_is_auto_gain_result_ready(void * pInstance,SCALER_WIN eWindow)1470 MS_BOOL Hal_SC_ip_is_auto_gain_result_ready(void *pInstance, SCALER_WIN eWindow)
1471 {
1472 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1473 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1474 if( eWindow == MAIN_WINDOW )
1475 {
1476 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, BIT(1) ) )? TRUE:FALSE;
1477 }
1478 else
1479 {
1480 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, BIT(1) ) )? TRUE:FALSE;
1481 }
1482 }
1483
1484 // bit 0 : B min
1485 // bit 1 : G min
1486 // bit 2 : R min
Hal_SC_ip_auto_gain_min_value_status(void * pInstance,SCALER_WIN eWindow)1487 MS_U8 Hal_SC_ip_auto_gain_min_value_status(void *pInstance, SCALER_WIN eWindow)
1488 {
1489 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1490 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1491 if( eWindow == MAIN_WINDOW )
1492 {
1493 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, ( BIT(10) | BIT(9) | BIT(8) ) ) ) >> 8 );
1494 }
1495 else
1496 {
1497 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, ( BIT(10) | BIT(9) | BIT(8) ) ) ) >> 8 );
1498 }
1499 }
1500
1501 // Make sure
1502 // bit 0 : B max
1503 // bit 1 : G max
1504 // bit 2 : R max
Hal_SC_ip_auto_gain_max_value_status(void * pInstance,SCALER_WIN eWindow)1505 MS_U8 Hal_SC_ip_auto_gain_max_value_status(void *pInstance, SCALER_WIN eWindow)
1506 {
1507 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1508 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1509 if( eWindow == MAIN_WINDOW )
1510 {
1511 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, ( BIT(5) | BIT(6) | BIT(7) ) ) ) >> 5 );
1512 }
1513 else
1514 {
1515 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, ( BIT(5) | BIT(6) | BIT(7) ) ) ) >> 5 );
1516 }
1517 }
1518
1519 //////////////////////////////////
1520 // Auto phase
Hal_SC_ip_get_auto_phase_value(void * pInstance,SCALER_WIN eWindow)1521 MS_U32 Hal_SC_ip_get_auto_phase_value(void *pInstance, SCALER_WIN eWindow)
1522 {
1523 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1524 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1525 if( eWindow == MAIN_WINDOW )
1526 {
1527 return ( SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1A_L) );
1528 }
1529 else
1530 {
1531 return ( SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1A_L) );
1532 }
1533 }
1534
Hal_SC_ip_is_auto_phase_result_ready(void * pInstance,SCALER_WIN eWindow)1535 MS_BOOL Hal_SC_ip_is_auto_phase_result_ready(void *pInstance, SCALER_WIN eWindow)
1536 {
1537 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1538 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1539 if( eWindow == MAIN_WINDOW )
1540 {
1541 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_19_L, BIT(1) ) )? TRUE:FALSE;
1542 }
1543 else
1544 {
1545 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_19_L, BIT(1) ) )? TRUE:FALSE;
1546 }
1547 }
1548
1549 //////////////////////////////////
1550 // Auto position
Hal_SC_ip_is_auto_position_result_ready(void * pInstance,SCALER_WIN eWindow)1551 MS_BOOL Hal_SC_ip_is_auto_position_result_ready(void *pInstance, SCALER_WIN eWindow)
1552 {
1553 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1554 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1555 if( eWindow == MAIN_WINDOW )
1556 {
1557 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_10_L, BIT(1) ) )? TRUE:FALSE;
1558 }
1559 else
1560 {
1561 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_10_L, BIT(1) ) )? TRUE:FALSE;
1562 }
1563 }
Hal_SC_ip_set_auto_position_function(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)1564 void Hal_SC_ip_set_auto_position_function(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow)
1565 {
1566 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1567 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1568 if( eWindow == MAIN_WINDOW )
1569 {
1570 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_10_L, (u8Enable?BIT(0):0) , BIT(0) );
1571 }
1572 else
1573 {
1574 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_10_L, (u8Enable?BIT(0):0) , BIT(0) );
1575 }
1576 }
1577
1578 // Threshold is from 2'b0000 ~ 2'b1111
Hal_SC_ip_set_valid_data_threshold(void * pInstance,MS_U8 u8Threshold,SCALER_WIN eWindow)1579 void Hal_SC_ip_set_valid_data_threshold(void *pInstance, MS_U8 u8Threshold, SCALER_WIN eWindow )
1580 {
1581 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1582 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1583 if( eWindow == MAIN_WINDOW )
1584 {
1585 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_10_L, (u8Threshold & 0x0F) << 12 , 0xF000 );
1586 }
1587 else
1588 {
1589 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_10_L, (u8Threshold & 0x0F) << 12 , 0xF000 );
1590 }
1591 }
1592
1593 #if 0
1594 static MS_U16 Hal_SC_ip_get_auto_position(MS_U32 u32Reg, SCALER_WIN eWindow)
1595 {
1596 if( eWindow == MAIN_WINDOW )
1597 {
1598 return ( SC_R2BYTE(u32Reg) & 0xFFF );
1599 }
1600 else
1601 {
1602 MS_ASSERT(0);
1603 return 0;
1604 }
1605 }
1606 #endif
1607
Hal_SC_ip_get_auto_position_v_start(void * pInstance,SCALER_WIN eWindow)1608 MS_U16 Hal_SC_ip_get_auto_position_v_start(void *pInstance, SCALER_WIN eWindow )
1609 {
1610 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1611 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1612 if(eWindow == MAIN_WINDOW)
1613 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_12_L) & 0xFFF);
1614 else
1615 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_12_L) & 0xFFF);
1616 }
1617
Hal_SC_ip_get_auto_position_h_start(void * pInstance,SCALER_WIN eWindow)1618 MS_U16 Hal_SC_ip_get_auto_position_h_start(void *pInstance, SCALER_WIN eWindow )
1619 {
1620 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1621 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1622 if(eWindow == MAIN_WINDOW)
1623 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_13_L) & 0xFFF);
1624 else
1625 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_13_L) & 0xFFF);
1626 }
1627
Hal_SC_ip_get_auto_position_v_end(void * pInstance,SCALER_WIN eWindow)1628 MS_U16 Hal_SC_ip_get_auto_position_v_end(void *pInstance, SCALER_WIN eWindow )
1629 {
1630 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1631 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1632 if(eWindow == MAIN_WINDOW)
1633 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_14_L) & 0xFFF);
1634 else
1635 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_14_L) & 0xFFF);
1636 }
1637
Hal_SC_ip_get_auto_position_h_end(void * pInstance,SCALER_WIN eWindow)1638 MS_U16 Hal_SC_ip_get_auto_position_h_end(void *pInstance, SCALER_WIN eWindow )
1639 {
1640 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1641 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1642 if(eWindow == MAIN_WINDOW)
1643 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_15_L) & 0xFFF);
1644 else
1645 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_15_L) & 0xFFF);
1646 }
1647
1648 //////////////////////////////////
1649 // Auto range
Hal_SC_ip_set_auto_range_function(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)1650 void Hal_SC_ip_set_auto_range_function(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow )
1651 {
1652 #if 0
1653 if (u8Enable)
1654 {
1655 // Debug mode.
1656 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_60_L, 0xFF00 , 0xFF00); // Bit(15) is enable.
1657 }
1658 else
1659 {
1660 // Debug mode.
1661 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_60_L, 0x0000 , 0xFF00); // Bit(15) is enable.
1662 }
1663 #endif
1664 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1665 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1666
1667 if(eWindow == MAIN_WINDOW)
1668 {
1669 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_29_L, (u8Enable?BIT(8):0) , BIT(8) );
1670 }
1671 else
1672 {
1673 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_29_L, (u8Enable?BIT(8):0) , BIT(8) );
1674 }
1675 }
1676
Hal_SC_ip_set_auto_range_window(void * pInstance,MS_U16 u16Vstart,MS_U16 u16Hstart,MS_U16 u16Vsize,MS_U16 u16Hsize,SCALER_WIN eWindow)1677 void Hal_SC_ip_set_auto_range_window(void *pInstance, MS_U16 u16Vstart, MS_U16 u16Hstart, MS_U16 u16Vsize , MS_U16 u16Hsize, SCALER_WIN eWindow)
1678 {
1679 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1680 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1681 if( eWindow == MAIN_WINDOW )
1682 {
1683 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2A_L, u16Vstart ); //vstart
1684 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2B_L, u16Hstart ); //hstart
1685 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2C_L, u16Vsize ); //vsize
1686 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2D_L, u16Hsize ); //hsize
1687 }
1688 else
1689 {
1690 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2A_L, u16Vstart ); //vstart
1691 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2B_L, u16Hstart ); //hstart
1692 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2C_L, u16Vsize ); //vsize
1693 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2D_L, u16Hsize ); //hsize
1694 }
1695
1696 }
1697
HAL_SC_ip_get_ipmux(void * pInstance)1698 MS_U8 HAL_SC_ip_get_ipmux(void *pInstance)
1699 {
1700 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1701 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1702 return (MS_U8)MDrv_ReadByte(REG_IPMUX_01_L)&0xF0;
1703 }
HAL_SC_ip_set_ipmux(void * pInstance,MS_U8 u8Val)1704 void HAL_SC_ip_set_ipmux(void *pInstance, MS_U8 u8Val)
1705 {
1706 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1707 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1708 MDrv_WriteByteMask(REG_IPMUX_01_L, u8Val,0x00F0);
1709 }
1710
HAL_SC_ip_get_ipclk(void * pInstance)1711 MS_U8 HAL_SC_ip_get_ipclk(void *pInstance)
1712 {
1713 return (MS_U8)MDrv_ReadByte(0x1E3F)&0x3F;
1714 }
1715
HAL_SC_ip_set_ipclk(void * pInstance,MS_U8 u8Val)1716 void HAL_SC_ip_set_ipclk(void *pInstance, MS_U8 u8Val)
1717 {
1718 MDrv_WriteByteMask(0x1E3F, u8Val, 0x3F); // 1E1F[13:8]
1719 }
1720
HAL_SC_ip_get_capturesource(void * pInstance)1721 MS_U8 HAL_SC_ip_get_capturesource(void *pInstance)
1722 {
1723 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1724 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1725 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, 0x0007);
1726 }
1727
HAL_SC_ip_set_capturesource(void * pInstance,MS_U8 u8Val)1728 void HAL_SC_ip_set_capturesource(void *pInstance, MS_U8 u8Val)
1729 {
1730 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1731 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1732 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, (MS_U16)u8Val, 0x0007);
1733 }
1734
Hal_SC_ip_get_user_def_interlace_status(void * pInstance)1735 MS_U8 Hal_SC_ip_get_user_def_interlace_status(void *pInstance)
1736 {
1737 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1738 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1739 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, 0x0003);
1740 }
Hal_SC_ip_set_user_def_interlace_status(void * pInstance,MS_BOOL bEnable,MS_BOOL bIsInterlace,SCALER_WIN eWindow)1741 void Hal_SC_ip_set_user_def_interlace_status(void *pInstance, MS_BOOL bEnable, MS_BOOL bIsInterlace,SCALER_WIN eWindow)
1742 {
1743 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1744 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1745 if(eWindow == MAIN_WINDOW)
1746 {
1747 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, (bEnable?BIT(0):0),BIT(0));
1748 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, (bIsInterlace?BIT(1):0),BIT(1));
1749 }
1750 else if(eWindow == SUB_WINDOW)
1751 {
1752 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, (bEnable?BIT(0):0),BIT(0));
1753 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, (bIsInterlace?BIT(1):0),BIT(1));
1754 }
1755 }
1756
HAL_SC_ip_get_capture_method(void * pInstance)1757 MS_U8 HAL_SC_ip_get_capture_method(void *pInstance)
1758 {
1759 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1760 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1761 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, 0x00FF);
1762 }
1763
HAL_SC_ip_get_capture_format(void * pInstance)1764 MS_BOOL HAL_SC_ip_get_capture_format(void *pInstance)
1765 {
1766 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1767 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1768 MS_BOOL bIsRGBfmt;
1769 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, 0x0008))
1770 bIsRGBfmt = TRUE;
1771 else
1772 bIsRGBfmt = FALSE;
1773
1774 return bIsRGBfmt;
1775 }
1776
HAL_SC_ip_set_capture_format(void * pInstance,MS_BOOL bIsRGB)1777 void HAL_SC_ip_set_capture_format(void *pInstance, MS_BOOL bIsRGB)
1778 {
1779 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1780 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1781 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, (bIsRGB?BIT(3):0), 0x0008);
1782 }
1783
HAL_SC_ip_get_h_predown_info(void * pInstance)1784 MS_BOOL HAL_SC_ip_get_h_predown_info(void *pInstance)
1785 {
1786 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1787 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1788 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_05_L, 0x8000))
1789 return TRUE;
1790 else
1791 return FALSE;
1792 }
HAL_SC_ip_get_v_predown_info(void * pInstance)1793 MS_BOOL HAL_SC_ip_get_v_predown_info(void *pInstance)
1794 {
1795 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1796 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1797 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_09_L, 0x8000))
1798 return TRUE;
1799 else
1800 return FALSE;
1801 }
HAL_SC_ip_set_h_predown_info(void * pInstance,MS_BOOL bEnable)1802 void HAL_SC_ip_set_h_predown_info(void *pInstance, MS_BOOL bEnable)
1803 {
1804 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1805 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1806 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_05_L, (bEnable?BIT(15):0), BIT(15));
1807 }
HAL_SC_ip_set_v_predown_info(void * pInstance,MS_BOOL bEnable)1808 void HAL_SC_ip_set_v_predown_info(void *pInstance, MS_BOOL bEnable)
1809 {
1810 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1811 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1812 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_09_L, (bEnable?BIT(15):0),BIT(15));
1813 }
1814
HAL_SC_ip_get_444to422_filter_mod(void * pInstance)1815 MS_BOOL HAL_SC_ip_get_444to422_filter_mod(void *pInstance)
1816 {
1817 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1818 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1819 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_0A_L, BIT(7)))
1820 return TRUE;
1821 else
1822 return FALSE;
1823 }
HAL_SC_ip_set_444to422_filter_mod(void * pInstance,MS_BOOL bEnable)1824 void HAL_SC_ip_set_444to422_filter_mod(void *pInstance, MS_BOOL bEnable)
1825 {
1826 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1827 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1828 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_0A_L, (bEnable?BIT(7):0), BIT(7));
1829 }
1830
1831 //F2 memory data format, BK12_01[10:8]
HAL_SC_get_memory_fmt(void * pInstance)1832 MS_U8 HAL_SC_get_memory_fmt(void *pInstance)
1833 {
1834 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1835 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1836 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, 0x0700)>>8);
1837 }
1838
1839 //F2 IP memory data format, BK12_2[3:0]
HAL_SC_get_IPM_memory_fmt(void * pInstance)1840 MS_U8 HAL_SC_get_IPM_memory_fmt(void *pInstance)
1841 {
1842 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1843 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1844 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, 0x000F));
1845 }
HAL_SC_set_IPM_memory_fmt(void * pInstance,MS_U8 u8Value)1846 void HAL_SC_set_IPM_memory_fmt(void *pInstance, MS_U8 u8Value)
1847 {
1848 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1849 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1850 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, (((MS_U16)u8Value)|BIT(8)),0x010F);
1851 }
1852
1853 //F2 OP memory data format, BK12_2[7:4]
HAL_SC_get_OPM_memory_fmt(void * pInstance)1854 MS_U8 HAL_SC_get_OPM_memory_fmt(void *pInstance)
1855 {
1856 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1857 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1858 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, 0x00F0));
1859 }
HAL_SC_set_OPM_memory_fmt(void * pInstance,MS_U8 u8Value)1860 void HAL_SC_set_OPM_memory_fmt(void *pInstance, MS_U8 u8Value)
1861 {
1862 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1863 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1864 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, (((MS_U16)u8Value)<<4|(BIT(9))),0x02F0);
1865 }
1866
1867 //capture image to IP enable
HAL_SC_set_capture_image2ip(void * pInstance,MS_BOOL bEnable)1868 void HAL_SC_set_capture_image2ip(void *pInstance, MS_BOOL bEnable)
1869 {
1870 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1871 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1872 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, (bEnable ? BIT(11):0), BIT(11));
1873 }
HAL_SC_get_VOP_mux(void * pInstance)1874 MS_U8 HAL_SC_get_VOP_mux(void *pInstance)
1875 {
1876 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1877 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1878 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, 0x00F0);
1879 }
1880
HAL_SC_set_VOP_mux(void * pInstance,MS_U8 u8Val)1881 void HAL_SC_set_VOP_mux(void *pInstance, MS_U8 u8Val)
1882 {
1883 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1884 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1885 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, (MS_U16)u8Val, 0x00F0);
1886 }
1887
HAL_SC_get_memory_bit_fmt(void * pInstance,SCALER_WIN eWindow)1888 MS_U8 HAL_SC_get_memory_bit_fmt(void *pInstance, SCALER_WIN eWindow)
1889 {
1890 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1891 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1892 if(eWindow == MAIN_WINDOW)
1893 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, BIT(5)|BIT(4));
1894 else
1895 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_41_L, BIT(5)|BIT(4));
1896 }
1897
1898 //F2 RGB/YUV 444 8-bits format
1899 //F2 RGB/YUV 444 10-bits format
1900 //(bEnable_8bit : bEnable_10bit)
1901 //(0:0)YCbCr422, (1:0)RGB/YCbCr444_8bit, (0:1)RGB/YCbCr444_10bit
HAL_SC_set_memory_bit(void * pInstance,MS_BOOL bEnable_8bit,MS_BOOL bEnable_10bit)1902 void HAL_SC_set_memory_bit(void *pInstance, MS_BOOL bEnable_8bit, MS_BOOL bEnable_10bit)
1903 {
1904 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1905 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1906 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, (MS_U16)((bEnable_10bit<<5)|bEnable_8bit<<4), (BIT(5)|BIT(4)));
1907 }
1908
HAL_SC_set_IPM_capture_start(void * pInstance,MS_BOOL bEnable)1909 void HAL_SC_set_IPM_capture_start(void *pInstance, MS_BOOL bEnable)
1910 {
1911 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1912 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1913 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, (MS_U16)(bEnable?BIT(15):0), BIT(15));
1914 }
1915
HAL_SC_get_IRQ_mask_0_31(void * pInstance)1916 MS_U32 HAL_SC_get_IRQ_mask_0_31(void *pInstance)
1917 {
1918 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1919 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1920 return (MS_U32)SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK00_14_L);
1921 }
1922
HAL_SC_set_IRQ_mask_0_31(void * pInstance,MS_U32 u32Val)1923 void HAL_SC_set_IRQ_mask_0_31(void *pInstance, MS_U32 u32Val)
1924 {
1925 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1926 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1927 SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK00_14_L, u32Val);
1928 }
HAL_SC_set_GOP_Enable(void * pInstance,MS_U8 MaxGOP,MS_U8 UseNum,MS_U8 u8MuxNum,MS_BOOL bEnable)1929 MS_BOOL HAL_SC_set_GOP_Enable(void *pInstance, MS_U8 MaxGOP ,MS_U8 UseNum, MS_U8 u8MuxNum, MS_BOOL bEnable)
1930 {
1931 /* GOP OP Path enable to SC Setting
1932 T3: GOP OP Path blending with SC sequence
1933 mux0-->mux2-->mux3
1934 */
1935 MS_U16 u16regval;
1936 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1937 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1938
1939 if(UseNum > MaxGOP)
1940 return FALSE;
1941 u16regval = (MS_U16)SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L);
1942
1943 if(UseNum == (u8MuxNum & (BIT(0)|BIT(1)))) // Enable Mux0 to XC
1944 {
1945 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L, bEnable?(u16regval|BIT(15)):(u16regval & (~ BIT(15))), BIT(15));
1946 }
1947 else if(UseNum == ((u8MuxNum & (BIT(4)|BIT(5)))>>4)) // Enable Mux2 to XC
1948 {
1949 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L, bEnable?(u16regval|BIT(14)):(u16regval & (~ BIT(14))), BIT(14));
1950 }
1951 else if(UseNum == ((u8MuxNum & (BIT(6)|BIT(7)))>>6)) // Enable Mux3 to XC
1952 {
1953 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L, bEnable?(u16regval|BIT(13)):(u16regval & (~ BIT(13))), BIT(13));
1954 }
1955 else
1956 {
1957 return FALSE;
1958 }
1959 return TRUE;
1960 }
1961
1962
1963 /********************************************************************************/
1964 /// Set GOP destination (OP/IP) setting to scaler
1965 /// @param ipSelGop \b IN \copydoc MS_XC_IPSEL_GOP
1966 /********************************************************************************/
HAL_SC_ip_sel_for_gop(void * pInstance,MS_U8 u8MuxNum,MS_XC_IPSEL_GOP ipSelGop)1967 void HAL_SC_ip_sel_for_gop(void *pInstance, MS_U8 u8MuxNum ,MS_XC_IPSEL_GOP ipSelGop)
1968 {
1969 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1970 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1971 switch(ipSelGop)
1972 {
1973 default:
1974 case MS_IP0_SEL_GOP0:
1975 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
1976 if(0 == (u8MuxNum & 0x0003))
1977 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)); // mux 0
1978 else
1979 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(13), BIT(13)); // mux 1
1980 break;
1981 case MS_IP0_SEL_GOP1:
1982 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
1983 if(1 == (u8MuxNum & 0x0003))
1984 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)); // mux 0
1985 else
1986 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(13), BIT(13)); // mux 1
1987 break;
1988 case MS_IP0_SEL_GOP2:
1989 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
1990 if(2 == (u8MuxNum & 0x0003))
1991 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)); // mux 0
1992 else
1993 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(13), BIT(13)); // mux 1
1994 break;
1995 case MS_NIP_SEL_GOP0:
1996 if(0==(u8MuxNum &0x0003))
1997 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(12)); // mux 0
1998 else
1999 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(13)); // mux 1
2000 break;
2001 case MS_NIP_SEL_GOP1:
2002 if(1==(u8MuxNum &0x0003))
2003 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(12)); // mux 0
2004 else
2005 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(13)); // mux 1
2006 break;
2007 case MS_NIP_SEL_GOP2:
2008 if(2==(u8MuxNum &0x0003))
2009 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(12)); // mux 0
2010 else
2011 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(13)); // mux 1
2012 break;
2013 case MS_MVOP_SEL:
2014 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
2015 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)|BIT(13)); // mux 0
2016 break;
2017 }
2018 }
2019
2020
2021 /******************************************************************************/
2022 /// Set Scaler VOP New blending level
2023 /******************************************************************************/
HAL_SC_SetVOPNBL(void * pInstance)2024 void HAL_SC_SetVOPNBL(void *pInstance)
2025 {
2026 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2027 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2028 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_46_L, 0x20, 0x20);
2029 }
2030
2031 /******************************************************************************/
2032 /// Set handshaking mode
2033 /******************************************************************************/
Hal_SC_ip_set_handshaking_md(void * pInstance,MS_U8 u8MD,SCALER_WIN eWindow)2034 void Hal_SC_ip_set_handshaking_md(void *pInstance, MS_U8 u8MD, SCALER_WIN eWindow)
2035 {
2036 UNUSED(pInstance);
2037 u8MD = u8MD;
2038 eWindow = eWindow;
2039 }
2040
2041 //////////////////////////////////
2042 // Set IP1 Test Pattern
Hal_SC_ip_Set_TestPattern(void * pInstance,MS_U16 u16Enable,MS_U32 u32Pattern_type,SCALER_WIN eWindow)2043 void Hal_SC_ip_Set_TestPattern(void *pInstance, MS_U16 u16Enable, MS_U32 u32Pattern_type, SCALER_WIN eWindow)
2044 {
2045 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2046 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2047
2048 if( eWindow == MAIN_WINDOW )
2049 {
2050 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_40_L, u16Enable, 0xFFFF);
2051 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_42_L, (u32Pattern_type >> 8));
2052 if(u16Enable == PURE_COR_IP_PATTERN_VALUE)
2053 {
2054 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_43_L, (u32Pattern_type & 0x000F));
2055 }
2056 }
2057 else
2058 {
2059 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_40_L, u16Enable, 0xFFFF);
2060 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_42_L, (u32Pattern_type >> 8));
2061 if(u16Enable == PURE_COR_IP_PATTERN_VALUE)
2062 {
2063 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_43_L, (u32Pattern_type & 0x000F));
2064 }
2065 }
2066 }
2067
Hal_SC_adc_Set_TestPattern(void * pInstance,MS_U8 u8EnableADCType,MS_U16 u16Ramp)2068 void Hal_SC_adc_Set_TestPattern(void *pInstance,MS_U8 u8EnableADCType,MS_U16 u16Ramp)
2069 {
2070 W2BYTEMSK(REG_ADC_ATOP_75_L, u8EnableADCType,0x0F00);
2071 W2BYTEMSK(REG_ADC_ATOP_78_L, u16Ramp,0x03FF);
2072 W2BYTEMSK(REG_ADC_ATOP_75_L, u16Ramp? BIT(0):0,BIT(0));
2073 }
2074
Hal_SC_ipmux_Set_TestPattern(void * pInstance,MS_BOOL bEnable,MS_U16 u16R_CR_Data,MS_U16 u16G_Y_Data,MS_U16 u16B_CB_Data)2075 void Hal_SC_ipmux_Set_TestPattern(void *pInstance,MS_BOOL bEnable, MS_U16 u16R_CR_Data, MS_U16 u16G_Y_Data ,MS_U16 u16B_CB_Data)
2076 {
2077 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(9):0, BIT(9));
2078 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(12):0, BIT(12));
2079 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(13):0, BIT(13));
2080 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(14):0, BIT(14));
2081
2082 if(bEnable == TRUE)
2083 {
2084 W2BYTEMSK(REG_IPMUX_1D_L, u16R_CR_Data, BMASK(9:0));
2085 W2BYTEMSK(REG_IPMUX_1E_L, u16G_Y_Data, BMASK(9:0));
2086 W2BYTEMSK(REG_IPMUX_1F_L, u16B_CB_Data, BMASK(9:0));
2087 }
2088 }
2089
2090 //////////////////////////////////
2091 // Set OP Test Pattern
Hal_SC_op_Set_TestPattern(void * pInstance,MS_BOOL bMiuLineBuff,MS_BOOL bLineBuffHVSP)2092 void Hal_SC_op_Set_TestPattern(void *pInstance,MS_BOOL bMiuLineBuff, MS_BOOL bLineBuffHVSP)
2093 {
2094 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2095 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2096
2097 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK20_10_L, bMiuLineBuff? BIT(15):0,BIT(15));
2098 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK20_1F_L, bLineBuffHVSP? BIT(10):0,BIT(10));
2099 }
2100
2101 //////////////////////////////////
2102 // Set VOP Test Pattern
Hal_SC_vop_Set_TestPattern(void * pInstance,MS_BOOL bEnable)2103 void Hal_SC_vop_Set_TestPattern(void *pInstance, MS_BOOL bEnable)
2104 {
2105 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2106 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2107
2108 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_13_L, bEnable? BIT(8):0,BIT(8));
2109 }
2110
Hal_SC_vop2_Set_TestPattern(void * pInstance,MS_BOOL bEnable,MS_U16 u16R_Data,MS_U16 u16G_Data,MS_U16 u16B_Data)2111 void Hal_SC_vop2_Set_TestPattern(void *pInstance,MS_BOOL bEnable, MS_U16 u16R_Data, MS_U16 u16G_Data ,MS_U16 u16B_Data)
2112 {
2113 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2114 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2115
2116 #if (SUPPORT_OP2_TEST_PATTERN >0)
2117 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2118 UtopiaResourceGetPrivate(g_pXCResource[E_XC_POOL_ID_INTERNAL_VARIABLE],(void**)(&pXCResourcePrivate));
2119 if(bEnable == TRUE)
2120 {
2121 if(pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern == FALSE)
2122 {
2123 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern = TRUE;
2124 pXCResourcePrivate->stdrvXC_MVideo.u16OP2_color_3x3 = SC_R2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_2F_L,0xFFFF);
2125 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2InputSrcDisabled = Hal_SC_Is_InputSource_Disable(pInstance,MAIN_WINDOW) >> 7;
2126 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2Mute = SC_R2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_19_L, BIT(1)) >> 1;
2127 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_19_L, 0,BIT(1));
2128 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK01_02_L, 0,BIT(7)); //input source disable
2129 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_2F_L,0x0000,0xFFFF); //disable 3x3
2130 }
2131 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_32_L, u16R_Data, BMASK(9:0));
2132 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_33_L, u16G_Data, BMASK(9:0));
2133 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_34_L, u16B_Data, BMASK(9:0));
2134 }
2135 else
2136 {
2137 if (pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern == TRUE)
2138 {
2139 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_2F_L, pXCResourcePrivate->stdrvXC_MVideo.u16OP2_color_3x3, 0xFFFF); //restore 3x3
2140 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_19_L, (pXCResourcePrivate->stdrvXC_MVideo.bIsOP2Mute<< 1),BIT(1));
2141 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK01_02_L, (pXCResourcePrivate->stdrvXC_MVideo.bIsOP2InputSrcDisabled<< 7),BIT(7));
2142 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern = FALSE;
2143 }
2144 }
2145
2146 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_30_L, (bEnable), BIT(0));
2147 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_31_L, (bEnable), BIT(0));
2148 #endif
2149 }
2150
2151 //////////////////////////////////
2152 // Set MOD Test Pattern
Hal_SC_mod_Set_TestPattern(void * pInstance,MS_BOOL bEnable,MS_U16 u16R_Data,MS_U16 u16G_Data,MS_U16 u16B_Data)2153 void Hal_SC_mod_Set_TestPattern(void *pInstance,MS_BOOL bEnable, MS_U16 u16R_Data, MS_U16 u16G_Data ,MS_U16 u16B_Data)
2154 {
2155 MOD_W2BYTEMSK(REG_MOD_BK00_01_L, bEnable? BIT(15):0,BIT(15));
2156 MOD_W2BYTEMSK(REG_MOD_BK00_02_L, u16R_Data, 0x3FF);
2157 MOD_W2BYTEMSK(REG_MOD_BK00_03_L, u16G_Data, 0x3FF);
2158 MOD_W2BYTEMSK(REG_MOD_BK00_04_L, u16B_Data, 0x3FF);
2159 }
2160
HAL_SC_ip_3DMainSub_IPSync(void * pInstance)2161 void HAL_SC_ip_3DMainSub_IPSync(void *pInstance)
2162 {
2163 MS_U16 value ;
2164 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2165 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2166
2167 //copy bk1 to bk3 and then reset fclk
2168 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_08_L);
2169 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_08_L, value);
2170
2171 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_09_L);
2172 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_09_L, value);
2173
2174 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L);
2175 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, value);
2176
2177 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_24_L);
2178 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_24_L, value);
2179
2180 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_25_L);
2181 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_25_L, value);
2182
2183 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L);
2184 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, value);
2185
2186 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L);
2187 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2F_L, value);
2188
2189 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 1 <<6, BIT(6));
2190 MsOS_DelayTask(100);
2191 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0x0, BIT(6));
2192 }
2193
HAL_SC_ip_detect_mode(void * pInstance,MS_BOOL bEnable)2194 void HAL_SC_ip_detect_mode(void *pInstance, MS_BOOL bEnable)
2195 {
2196 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2197 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2198 //MS_U8 u8Bank;
2199
2200 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
2201
2202 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
2203
2204 if(bEnable)
2205 {
2206 //MDrv_WriteByteMask(L_BK_IP1F2(0x29), BIT(5), BIT(5)|BIT(4));
2207 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_29_L,BIT(5), BIT(5)|BIT(4));
2208 }
2209 else
2210 {
2211 //MDrv_WriteByteMask(L_BK_IP1F2(0x29), 0, BIT(5)|BIT(4));
2212 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_29_L, 0 , BIT(5)|BIT(4));
2213 }
2214
2215 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
2216 }
2217
2218 /******************************************************************************/
2219 /// get the h/v sync active
2220 /******************************************************************************/
Hal_SC_ip_get_h_v_sync_active(void * pInstance,SCALER_WIN eWindow)2221 MS_U8 Hal_SC_ip_get_h_v_sync_active(void *pInstance, SCALER_WIN eWindow)
2222 {
2223 MS_U8 u8val;
2224 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2225 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2226
2227 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_33_L, BIT(8), BIT(8));
2228
2229 u8val = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & 0xC000) >> 8;
2230
2231 //SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_33_L, 0, BIT(8));
2232
2233 return u8val;
2234 }
2235
Hal_SC_set_skp_fd(void * pInstance,MS_BOOL bEnable)2236 void Hal_SC_set_skp_fd(void *pInstance, MS_BOOL bEnable)
2237 {
2238 }
2239
2240 /******************************************************************************/
2241 /// Get the VGA SOG on or off
2242 /// @param bEnable \b IN: bEnable =1, Turn on the VGA SOG; bEnable =0, Turn off the VGA SOG
2243 /******************************************************************************/
HAL_SC_SetVGASogEn(void * pInstance,MS_BOOL bVGASogEn)2244 void HAL_SC_SetVGASogEn(void *pInstance, MS_BOOL bVGASogEn)
2245 {
2246 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2247 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2248 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2249 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2250 pXCResourcePrivate->sthal_IP._bSetVGASogEn = bVGASogEn;
2251 }
2252
2253 /******************************************************************************/
2254 /// Get the VGA SOG on or off
2255 /// @param u8 \b IN: bEnable =1, Turn on the VGA SOG; bEnable =0, Turn off the VGA SOG
2256 /******************************************************************************/
HAL_SC_GetVGASogEn(void * pInstance)2257 MS_BOOL HAL_SC_GetVGASogEn(void *pInstance)
2258 {
2259 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2260 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2261 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2262 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2263 return pXCResourcePrivate->sthal_IP._bSetVGASogEn;
2264 }
2265
2266 /******************************************************************************/
2267 /// Set the VGA SOG Detect Status
2268 /******************************************************************************/
HAL_SC_SetSogDetectStatus(void * pInstance,MS_U8 u8SogDetectStatus)2269 void HAL_SC_SetSogDetectStatus(void *pInstance, MS_U8 u8SogDetectStatus)
2270 {
2271 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2272 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2273 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2274 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2275 pXCResourcePrivate->sthal_IP._u8SetSogDetectStatus = u8SogDetectStatus;
2276 }
2277
2278 /******************************************************************************/
2279 /// Get the VGA SOG Detect Status
2280 /******************************************************************************/
HAL_SC_GetSogDetectStatus(void * pInstance)2281 MS_U8 HAL_SC_GetSogDetectStatus(void *pInstance)
2282 {
2283 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2284 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2285 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2286 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2287 return pXCResourcePrivate->sthal_IP._u8SetSogDetectStatus;
2288 }
2289
2290 /******************************************************************************/
2291 ///This function will return input frame rate
2292 ///@return
2293 ///- MS_U16 Vertical total
2294 /******************************************************************************/
HAL_SC_ip_get_verticalperiod(void * pInstance,SCALER_WIN eWindow)2295 MS_U32 HAL_SC_ip_get_verticalperiod(void *pInstance, SCALER_WIN eWindow)
2296 {
2297 MS_U32 u32verticalperiod=0;
2298 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2299 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2300
2301 if(eWindow == MAIN_WINDOW)
2302 {
2303 u32verticalperiod = SC_R4BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_3B_L );
2304 }
2305 else
2306 {
2307 u32verticalperiod = SC_R4BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_3B_L );
2308 }
2309
2310 return u32verticalperiod;
2311 }
2312
2313 /******************************************************************************/
2314 ///Set xc fd mask on/off by window
2315 /******************************************************************************/
HAL_SC_ip_Set_FD_Mask_ByWin(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2316 void HAL_SC_ip_Set_FD_Mask_ByWin(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2317 {
2318 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2319 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2320 if(eWindow == MAIN_WINDOW)
2321 {
2322 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, (bEnable?BIT(8):0), BIT(8));
2323 }
2324 else
2325 {
2326 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, (bEnable?BIT(8):0), BIT(8));
2327 }
2328
2329 #if (HW_DESIGN_4K2K_VER == 4)
2330 // for FD_mask can control FRCM write
2331 Hal_SC_set_frcm_to_FD_mask(pInstance, bEnable, eWindow);
2332 #endif
2333 }
2334
2335 /******************************************************************************/
2336 ///Get xc fd mask by window
2337 ///@return MS_BOOL fd mask on/off
2338 /******************************************************************************/
HAL_SC_ip_Get_FD_Mask_ByWin(void * pInstance,SCALER_WIN eWindow)2339 MS_BOOL HAL_SC_ip_Get_FD_Mask_ByWin(void *pInstance, SCALER_WIN eWindow)
2340 {
2341 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2342 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2343 if(eWindow == MAIN_WINDOW)
2344 {
2345 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, BIT(8)))
2346 return TRUE;
2347 else
2348 return FALSE;
2349 }
2350 else
2351 {
2352 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, BIT(8)))
2353 return TRUE;
2354 else
2355 return FALSE;
2356 }
2357 }
2358
2359 /******************************************************************************/
2360 ///Set Force IP interlace when it is progressive timing
2361 ///@return EN_FORCEi_SUPPORT_TYPE ForceI_SW/ForceI_HW/ForceI_Auto
2362 /******************************************************************************/
HAL_SC_ip_get_forceI_support_type(void * pInstance)2363 EN_FORCEi_SUPPORT_TYPE HAL_SC_ip_get_forceI_support_type(void *pInstance)
2364 {
2365 return ForceI_HW;
2366 }
2367
2368 /******************************************************************************/
2369 ///Set H/V sync status check enable/disable
2370 ///@return
2371 /******************************************************************************/
HAL_SC_ip_set_hv_sync_status_check(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2372 void HAL_SC_ip_set_hv_sync_status_check(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2373 {
2374 if (eWindow == MAIN_WINDOW)
2375 {
2376 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bEnable << 6, BIT(6));
2377 }
2378 else
2379 {
2380 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bEnable << 6, BIT(6));
2381 }
2382 }
2383
2384 /******************************************************************************/
2385 ///Set new mode interlaced detect enable/disable
2386 ///@return
2387 /******************************************************************************/
HAL_SC_ip_set_new_mode_interlaced_detect(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2388 void HAL_SC_ip_set_new_mode_interlaced_detect(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2389 {
2390 if (eWindow == MAIN_WINDOW)
2391 {
2392 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bEnable, BIT(0));
2393 }
2394 else
2395 {
2396 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bEnable, BIT(0));
2397 }
2398 }
2399
2400 /******************************************************************************/
2401 ///Set H/V sync source select for mode detection
2402 ///@return
2403 /******************************************************************************/
HAL_SC_ip_set_hv_sync_source_select(void * pInstance,MS_U8 u8Source,SCALER_WIN eWindow)2404 void HAL_SC_ip_set_hv_sync_source_select(void *pInstance, MS_U8 u8Source, SCALER_WIN eWindow)
2405 {
2406 if (eWindow == MAIN_WINDOW)
2407 {
2408 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, (u8Source & 0x3) << 1, BIT(2)|BIT(1));
2409 }
2410 else
2411 {
2412 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, (u8Source & 0x3) << 1, BIT(2)|BIT(1));
2413 }
2414 }
2415
2416 /******************************************************************************/
2417 ///Set V total count by pixel clock enable/disable
2418 ///@return
2419 /******************************************************************************/
HAL_SC_ip_set_vtotal_count_by_pixel_clock(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2420 void HAL_SC_ip_set_vtotal_count_by_pixel_clock(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2421 {
2422 if (eWindow == MAIN_WINDOW)
2423 {
2424 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bEnable << 3, BIT(3));
2425 }
2426 else
2427 {
2428 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bEnable << 3, BIT(3));
2429 }
2430 }
2431
2432 /******************************************************************************/
2433 ///Set V sync invert
2434 ///@return
2435 /******************************************************************************/
HAL_SC_ip_set_vsync_invert(void * pInstance,MS_BOOL bInvert,SCALER_WIN eWindow)2436 void HAL_SC_ip_set_vsync_invert(void *pInstance, MS_BOOL bInvert, SCALER_WIN eWindow)
2437 {
2438 if (eWindow == MAIN_WINDOW)
2439 {
2440 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bInvert << 4, BIT(4));
2441 }
2442 else
2443 {
2444 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bInvert << 4, BIT(4));
2445 }
2446 }
2447
2448 /******************************************************************************/
2449 ///Set H sync invert
2450 ///@return
2451 /******************************************************************************/
HAL_SC_ip_set_hsync_invert(void * pInstance,MS_BOOL bInvert,SCALER_WIN eWindow)2452 void HAL_SC_ip_set_hsync_invert(void *pInstance, MS_BOOL bInvert, SCALER_WIN eWindow)
2453 {
2454 if (eWindow == MAIN_WINDOW)
2455 {
2456 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bInvert << 5, BIT(5));
2457 }
2458 else
2459 {
2460 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bInvert << 5, BIT(5));
2461 }
2462 }
2463
2464