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