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