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