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