xref: /utopia/UTPA2-700.0.x/modules/xc/hal/mooney/xc/mhal_offline.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) 2006-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_OFFLINE_C
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi 
97*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
98*53ee8cc1Swenshuai.xi //  Include Files
99*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi // Common Definition
102*53ee8cc1Swenshuai.xi #include "MsCommon.h"
103*53ee8cc1Swenshuai.xi #include "mhal_xc_chip_config.h"
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi // Registers
106*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
107*53ee8cc1Swenshuai.xi #include "utopia.h"
108*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
109*53ee8cc1Swenshuai.xi #include "xc_hwreg_utility2.h"
110*53ee8cc1Swenshuai.xi #include "hwreg_sc.h"
111*53ee8cc1Swenshuai.xi #include "hwreg_adc_atop.h"
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi #include "xc_Analog_Reg.h"
114*53ee8cc1Swenshuai.xi #include "mhal_mux.h"
115*53ee8cc1Swenshuai.xi #include "mhal_offline.h"
116*53ee8cc1Swenshuai.xi #include "mhal_mux.h"
117*53ee8cc1Swenshuai.xi #include "hwreg_sc.h"
118*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
119*53ee8cc1Swenshuai.xi #include "hwreg_dvi_atop.h"
120*53ee8cc1Swenshuai.xi #include "hwreg_hdmi.h"
121*53ee8cc1Swenshuai.xi #include "hwreg_pm_sleep.h"
122*53ee8cc1Swenshuai.xi #include "hwreg_ipmux.h"
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi #include "apiXC.h"
125*53ee8cc1Swenshuai.xi #include "drv_sc_display.h"
126*53ee8cc1Swenshuai.xi #include "drv_sc_isr.h"
127*53ee8cc1Swenshuai.xi #include "apiXC_Adc.h"
128*53ee8cc1Swenshuai.xi #include "apiXC_PCMonitor.h"
129*53ee8cc1Swenshuai.xi #include "apiXC_ModeParse.h"
130*53ee8cc1Swenshuai.xi #include "apiXC_Auto.h"
131*53ee8cc1Swenshuai.xi #include "drvXC_HDMI_if.h"
132*53ee8cc1Swenshuai.xi #include "mvideo_context.h"
133*53ee8cc1Swenshuai.xi #include "drv_sc_ip.h"
134*53ee8cc1Swenshuai.xi #if (LD_ENABLE==1)
135*53ee8cc1Swenshuai.xi #include "mdrv_ld.h"
136*53ee8cc1Swenshuai.xi #include "mdrv_ldalgo.h"
137*53ee8cc1Swenshuai.xi #endif
138*53ee8cc1Swenshuai.xi #include "mdrv_sc_3d.h"
139*53ee8cc1Swenshuai.xi #include "drv_sc_menuload.h"
140*53ee8cc1Swenshuai.xi #include "drvXC_ADC_Internal.h"
141*53ee8cc1Swenshuai.xi #include "mhal_sc.h"
142*53ee8cc1Swenshuai.xi #if FRC_INSIDE
143*53ee8cc1Swenshuai.xi #include "mdrv_frc.h"
144*53ee8cc1Swenshuai.xi #include "mhal_frc.h"
145*53ee8cc1Swenshuai.xi #endif
146*53ee8cc1Swenshuai.xi #include "XC_private.h"
147*53ee8cc1Swenshuai.xi #include "mhal_adc.h"
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
150*53ee8cc1Swenshuai.xi //  Driver Compiler Options
151*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
152*53ee8cc1Swenshuai.xi 
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
155*53ee8cc1Swenshuai.xi //  Local Defines
156*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
157*53ee8cc1Swenshuai.xi #define    AIS_HalDebug(x)    //x
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
160*53ee8cc1Swenshuai.xi //  Local Structures
161*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi 
164*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
165*53ee8cc1Swenshuai.xi //  Global Variables
166*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
167*53ee8cc1Swenshuai.xi 
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
170*53ee8cc1Swenshuai.xi //  Local Variables
171*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
175*53ee8cc1Swenshuai.xi //  Debug Functions
176*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi 
179*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
180*53ee8cc1Swenshuai.xi //  Local Functions
181*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
185*53ee8cc1Swenshuai.xi //  Global Functions
186*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
187*53ee8cc1Swenshuai.xi 
188*53ee8cc1Swenshuai.xi 
189*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
190*53ee8cc1Swenshuai.xi //
191*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_WaitForHVCleared_AV(void * pInstance,MS_U8 Channel)192*53ee8cc1Swenshuai.xi void Hal_XC_WaitForHVCleared_AV(void *pInstance, MS_U8 Channel)
193*53ee8cc1Swenshuai.xi {
194*53ee8cc1Swenshuai.xi     MS_U16 u16Hcnt, u16Vcnt;
195*53ee8cc1Swenshuai.xi     MS_U16 u16Count=0;
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi     u16Hcnt = Hal_XC_GetOffLineOfH(pInstance);
198*53ee8cc1Swenshuai.xi     u16Vcnt = Hal_XC_GetOffLineOfV(pInstance);
199*53ee8cc1Swenshuai.xi     while((u16Hcnt != 0x3fff)&&(u16Vcnt !=0x7ff)
200*53ee8cc1Swenshuai.xi             &&(u16Hcnt != 0)&&(u16Vcnt !=0))
201*53ee8cc1Swenshuai.xi     {
202*53ee8cc1Swenshuai.xi         AIS_HalDebug(printf("u16Count=%u, Channel =%u, MApi_XC_GetOffLineDetection: vcnt=%x hcnt=%x\n", u16Count,Channel, u16Vcnt,u16Hcnt );)
203*53ee8cc1Swenshuai.xi         u16Count++;
204*53ee8cc1Swenshuai.xi         MsOS_DelayTask(10);
205*53ee8cc1Swenshuai.xi         u16Hcnt = Hal_XC_GetOffLineOfH(pInstance);
206*53ee8cc1Swenshuai.xi         u16Vcnt = Hal_XC_GetOffLineOfV(pInstance);
207*53ee8cc1Swenshuai.xi         AIS_HalDebug(printf("u16Count=%u, Channel =%u, MApi_XC_GetOffLineDetection: vcnt=%x hcnt=%x\n", u16Count++,Channel, u16Vcnt,u16Hcnt );)
208*53ee8cc1Swenshuai.xi         if(u16Count>=0x100)
209*53ee8cc1Swenshuai.xi         {
210*53ee8cc1Swenshuai.xi             AIS_HalDebug(printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");)
211*53ee8cc1Swenshuai.xi             AIS_HalDebug(printf("!!!!!!!!!!!!!!!!!!!!!!Hal_XC_WaitForHVCleared(): reset fail!!!!!!!!!!!!!!!!!\n");)
212*53ee8cc1Swenshuai.xi             AIS_HalDebug(printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");)
213*53ee8cc1Swenshuai.xi             return;
214*53ee8cc1Swenshuai.xi         }
215*53ee8cc1Swenshuai.xi     }
216*53ee8cc1Swenshuai.xi }
217*53ee8cc1Swenshuai.xi 
Hal_XC_WaitForHVCleared(void * pInstance,MS_U8 Channel)218*53ee8cc1Swenshuai.xi void Hal_XC_WaitForHVCleared(void *pInstance, MS_U8 Channel)
219*53ee8cc1Swenshuai.xi {
220*53ee8cc1Swenshuai.xi     MS_U16 u16Hcnt, u16Vcnt;
221*53ee8cc1Swenshuai.xi     MS_U16 u16Count=0;
222*53ee8cc1Swenshuai.xi 
223*53ee8cc1Swenshuai.xi     u16Hcnt = Hal_XC_GetOffLineOfH(pInstance);
224*53ee8cc1Swenshuai.xi     u16Vcnt = Hal_XC_GetOffLineOfV(pInstance);
225*53ee8cc1Swenshuai.xi     while((u16Hcnt != 0x3fff)&&(u16Vcnt !=0x7ff)
226*53ee8cc1Swenshuai.xi            &&(u16Hcnt != 0)&&(u16Vcnt !=0))
227*53ee8cc1Swenshuai.xi     {
228*53ee8cc1Swenshuai.xi         AIS_HalDebug(printf("u16Count=%u, Channel =%u, MApi_XC_GetOffLineDetection: vcnt=%x hcnt=%x\n", u16Count,Channel, u16Vcnt,u16Hcnt );)
229*53ee8cc1Swenshuai.xi         u16Count++;
230*53ee8cc1Swenshuai.xi         //reset offline ip
231*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0, REG_SC_BK00_02_L, BIT(5), 0xFF );
232*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
233*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0, REG_SC_BK00_02_L, 0x00, 0xFF );
234*53ee8cc1Swenshuai.xi 
235*53ee8cc1Swenshuai.xi         MsOS_DelayTask(10);
236*53ee8cc1Swenshuai.xi         u16Hcnt = Hal_XC_GetOffLineOfH(pInstance);
237*53ee8cc1Swenshuai.xi         u16Vcnt = Hal_XC_GetOffLineOfV(pInstance);
238*53ee8cc1Swenshuai.xi         AIS_HalDebug(printf("u16Count=%u, Channel =%u, MApi_XC_GetOffLineDetection: vcnt=%x hcnt=%x\n", u16Count++,Channel, u16Vcnt,u16Hcnt );)
239*53ee8cc1Swenshuai.xi         if(u16Count>=0x100)
240*53ee8cc1Swenshuai.xi         {
241*53ee8cc1Swenshuai.xi             AIS_HalDebug(printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");)
242*53ee8cc1Swenshuai.xi             AIS_HalDebug(printf("!!!!!!!!!!!!!!!!!!!!!!Hal_XC_WaitForHVCleared(): reset fail!!!!!!!!!!!!!!!!!\n");)
243*53ee8cc1Swenshuai.xi             AIS_HalDebug(printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");)
244*53ee8cc1Swenshuai.xi             return;
245*53ee8cc1Swenshuai.xi         }
246*53ee8cc1Swenshuai.xi     }
247*53ee8cc1Swenshuai.xi }
248*53ee8cc1Swenshuai.xi 
Hal_XC_SetOffLineToSog_AV(void * pInstance,MS_U8 Channel)249*53ee8cc1Swenshuai.xi void Hal_XC_SetOffLineToSog_AV( void *pInstance, MS_U8 Channel )
250*53ee8cc1Swenshuai.xi {
251*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_3C_L, 0, BIT(13) );
252*53ee8cc1Swenshuai.xi     OS_DELAY_TASK(1);
253*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_3C_L, BIT(13), BIT(13) );
254*53ee8cc1Swenshuai.xi     SC_W2BYTE(0, REG_SC_BK13_02_L, 0x0071);
255*53ee8cc1Swenshuai.xi     Hal_XC_TurnOnDetectClkPath(pInstance, SC_SUBWIN_IPMUX_MLINK);
256*53ee8cc1Swenshuai.xi 
257*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_04_L, (MDrv_Read2Byte(REG_ADC_ATOP_04_L)&(0xFDE2)));
258*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_05_L, (MDrv_Read2Byte(REG_ADC_ATOP_05_L)&(0xF7CF)));
259*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_06_L, 0);
260*53ee8cc1Swenshuai.xi     MDrv_Write2ByteMask(REG_ADC_ATOP_5E_L, 0, 0x3fc);
261*53ee8cc1Swenshuai.xi     MDrv_Write2ByteMask(REG_ADC_ATOP_5A_L, 0, 0xC0);//PD_LDO25_ADCA,PD_LDO25_ADCB
262*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_3D_L, (MDrv_ReadByte(REG_ADC_ATOP_3D_L) & 0xf0) | (Channel + 3));
263*53ee8cc1Swenshuai.xi     AIS_HalDebug(printf("%s: SOG offline mux -> %d\n", __FUNCTION__, (Channel + 3)));
264*53ee8cc1Swenshuai.xi }
265*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
266*53ee8cc1Swenshuai.xi //
267*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_SetOffLineToSog_YUV(void * pInstance,MS_U8 Channel)268*53ee8cc1Swenshuai.xi void Hal_XC_SetOffLineToSog_YUV( void *pInstance, MS_U8 Channel )
269*53ee8cc1Swenshuai.xi {
270*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_3C_L, 0, BIT(13) );
271*53ee8cc1Swenshuai.xi     OS_DELAY_TASK(1);
272*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_3C_L, BIT(13), BIT(13) );
273*53ee8cc1Swenshuai.xi     SC_W2BYTE(0, REG_SC_BK13_02_L, 0x0071);
274*53ee8cc1Swenshuai.xi     Hal_XC_TurnOnDetectClkPath(pInstance, SC_SUBWIN_IPMUX_MLINK);
275*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_04_L, (MDrv_Read2Byte(REG_ADC_ATOP_04_L)&(0xFDE2)));
276*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_05_L, (MDrv_Read2Byte(REG_ADC_ATOP_05_L)&(0xF7CF)));
277*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_06_L, 0);
278*53ee8cc1Swenshuai.xi     MDrv_Write2ByteMask(REG_ADC_ATOP_5E_L, 0, 0x3fc);
279*53ee8cc1Swenshuai.xi     MDrv_Write2ByteMask(REG_ADC_ATOP_5A_L, 0, 0xC0);//PD_LDO25_ADCA,PD_LDO25_ADCB
280*53ee8cc1Swenshuai.xi     if(Hal_ADC_ISOG_CheckEnabled(pInstance))
281*53ee8cc1Swenshuai.xi     {
282*53ee8cc1Swenshuai.xi         // Internal SOG & re-route SOG signal to channel 12~14 (Original is 0~2)
283*53ee8cc1Swenshuai.xi         MDrv_WriteByte(REG_ADC_ATOP_3D_L, (MDrv_ReadByte(REG_ADC_ATOP_3D_L) & 0xf0) | (Channel+12) );
284*53ee8cc1Swenshuai.xi     }
285*53ee8cc1Swenshuai.xi     else
286*53ee8cc1Swenshuai.xi     {
287*53ee8cc1Swenshuai.xi         MDrv_WriteByte(REG_ADC_ATOP_3D_L, (MDrv_ReadByte(REG_ADC_ATOP_3D_L) & 0xf0) | Channel);
288*53ee8cc1Swenshuai.xi     }
289*53ee8cc1Swenshuai.xi }
290*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
291*53ee8cc1Swenshuai.xi //
292*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_SetOffLineToHv(void * pInstance,MS_U8 Channel)293*53ee8cc1Swenshuai.xi void Hal_XC_SetOffLineToHv( void *pInstance, MS_U8 Channel )
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_3C_L, 0, BIT(13) );
296*53ee8cc1Swenshuai.xi     OS_DELAY_TASK(1);
297*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_3C_L, BIT(13), BIT(13) );
298*53ee8cc1Swenshuai.xi     SC_W2BYTE(0, REG_SC_BK13_02_L,0x0001);
299*53ee8cc1Swenshuai.xi     Hal_XC_TurnOnDetectClkPath(pInstance, SC_SUBWIN_IPMUX_MLINK);
300*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_04_L, (MDrv_Read2Byte(REG_ADC_ATOP_04_L)&(0xFDE2)));
301*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_05_L, (MDrv_Read2Byte(REG_ADC_ATOP_05_L)&(0xF7CF)));
302*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_06_L, 0);
303*53ee8cc1Swenshuai.xi     MDrv_Write2ByteMask(REG_ADC_ATOP_5E_L, 0, 0x3fc);
304*53ee8cc1Swenshuai.xi     MDrv_Write2ByteMask(REG_ADC_ATOP_5A_L, 0, 0x40);//PD_LDO25_ADCA
305*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_01_L, (MDrv_ReadByte(REG_ADC_ATOP_01_L) & 0xf3) | (Channel << 2));
306*53ee8cc1Swenshuai.xi     AIS_HalDebug(printf("%s: SOG offline mux -> %d\n", __FUNCTION__, (Channel << 2)));
307*53ee8cc1Swenshuai.xi }
308*53ee8cc1Swenshuai.xi 
309*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
310*53ee8cc1Swenshuai.xi //
311*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_SetOffLineToHDMI(void * pInstance,MS_U8 Channel)312*53ee8cc1Swenshuai.xi void Hal_XC_SetOffLineToHDMI( void *pInstance, MS_U8 Channel )
313*53ee8cc1Swenshuai.xi {
314*53ee8cc1Swenshuai.xi #if SUPPORT_IMMESWITCH
315*53ee8cc1Swenshuai.xi     MS_U8 u8Tmp = Channel - INPUT_PORT_DVI0;
316*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_PM_SLP_BASE+0x94,0,BIT(12 + u8Tmp));
317*53ee8cc1Swenshuai.xi     switch(u8Tmp)
318*53ee8cc1Swenshuai.xi     {
319*53ee8cc1Swenshuai.xi         case 0:
320*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_PM_SLP_BASE+0x96,0,(BIT(0)|BIT(4)|BIT(8)|BIT(12)));
321*53ee8cc1Swenshuai.xi             break;
322*53ee8cc1Swenshuai.xi         case 1:
323*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_PM_SLP_BASE+0x96,0,(BIT(1)|BIT(5)|BIT(9)|BIT(13)));
324*53ee8cc1Swenshuai.xi             break;
325*53ee8cc1Swenshuai.xi         case 2:
326*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_PM_SLP_BASE+0x96,0,(BIT(2)|BIT(6)|BIT(10)|BIT(14)));
327*53ee8cc1Swenshuai.xi             break;
328*53ee8cc1Swenshuai.xi         case 3:
329*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_PM_SLP_BASE+0x96,0,(BIT(3)|BIT(7)|BIT(11)|BIT(15)));
330*53ee8cc1Swenshuai.xi             break;
331*53ee8cc1Swenshuai.xi         default:
332*53ee8cc1Swenshuai.xi             break;
333*53ee8cc1Swenshuai.xi     }
334*53ee8cc1Swenshuai.xi #endif
335*53ee8cc1Swenshuai.xi }
336*53ee8cc1Swenshuai.xi 
337*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
338*53ee8cc1Swenshuai.xi //
339*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_SetOffLineToUSB(void * pInstance,MS_U8 Channel)340*53ee8cc1Swenshuai.xi void Hal_XC_SetOffLineToUSB( void *pInstance, MS_U8 Channel )
341*53ee8cc1Swenshuai.xi {
342*53ee8cc1Swenshuai.xi     //Need to do nothing
343*53ee8cc1Swenshuai.xi }
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
346*53ee8cc1Swenshuai.xi //
347*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_GetOffLineOfH(void * pInstance)348*53ee8cc1Swenshuai.xi MS_U16 Hal_XC_GetOffLineOfH(void *pInstance)
349*53ee8cc1Swenshuai.xi {
350*53ee8cc1Swenshuai.xi     MS_U16 u16Hcnt;
351*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
352*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
353*53ee8cc1Swenshuai.xi     /*MS_U8 u8Bank;
354*53ee8cc1Swenshuai.xi 
355*53ee8cc1Swenshuai.xi     u8Bank = MDrv_ReadByte(BK_SELECT_00);
356*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, REG_BANK_OFFLINE);
357*53ee8cc1Swenshuai.xi     u16Hcnt = MDrv_Read2Byte(L_BK_OFFLINE(0x20)) & 0x3fff;
358*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, u8Bank);*/
359*53ee8cc1Swenshuai.xi     u16Hcnt = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK13_20_L) & 0x3fff;
360*53ee8cc1Swenshuai.xi     return u16Hcnt;
361*53ee8cc1Swenshuai.xi }
362*53ee8cc1Swenshuai.xi 
363*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
364*53ee8cc1Swenshuai.xi //
365*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_GetOffLineOfV(void * pInstance)366*53ee8cc1Swenshuai.xi MS_U16 Hal_XC_GetOffLineOfV(void *pInstance)
367*53ee8cc1Swenshuai.xi {
368*53ee8cc1Swenshuai.xi     MS_U16 u16Vcnt;
369*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
370*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
371*53ee8cc1Swenshuai.xi     /*MS_U8 u8Bank;
372*53ee8cc1Swenshuai.xi 
373*53ee8cc1Swenshuai.xi     u8Bank = MDrv_ReadByte(BK_SELECT_00);
374*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, REG_BANK_OFFLINE);
375*53ee8cc1Swenshuai.xi     u16Vcnt = MDrv_Read2Byte(L_BK_OFFLINE(0x1f)) & 0x07ff;
376*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, u8Bank);*/
377*53ee8cc1Swenshuai.xi     u16Vcnt = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK13_1F_L) & 0x07ff;
378*53ee8cc1Swenshuai.xi     return u16Vcnt;
379*53ee8cc1Swenshuai.xi }
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
382*53ee8cc1Swenshuai.xi //
383*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_GetOffLineOfDVI0(void)384*53ee8cc1Swenshuai.xi MS_U16 Hal_XC_GetOffLineOfDVI0(void)
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi #if SUPPORT_IMMESWITCH
387*53ee8cc1Swenshuai.xi     MS_U16 u16Ret = 0;
388*53ee8cc1Swenshuai.xi 
389*53ee8cc1Swenshuai.xi     if((R2BYTE(REG_PM_SLEEP_3F_L) &BMASK(15:14)) != BMASK(15:14))
390*53ee8cc1Swenshuai.xi     {
391*53ee8cc1Swenshuai.xi         u16Ret = 1;
392*53ee8cc1Swenshuai.xi     }
393*53ee8cc1Swenshuai.xi 
394*53ee8cc1Swenshuai.xi     return u16Ret;
395*53ee8cc1Swenshuai.xi 
396*53ee8cc1Swenshuai.xi #else
397*53ee8cc1Swenshuai.xi     return 0;
398*53ee8cc1Swenshuai.xi #endif
399*53ee8cc1Swenshuai.xi }
400*53ee8cc1Swenshuai.xi 
401*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
402*53ee8cc1Swenshuai.xi //
403*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_GetOffLineOfDVI1(void)404*53ee8cc1Swenshuai.xi MS_U16 Hal_XC_GetOffLineOfDVI1(void)
405*53ee8cc1Swenshuai.xi {
406*53ee8cc1Swenshuai.xi #if SUPPORT_IMMESWITCH
407*53ee8cc1Swenshuai.xi     MS_U16 u16Ret = 0;
408*53ee8cc1Swenshuai.xi 
409*53ee8cc1Swenshuai.xi     if((R2BYTE(REG_PM_SLEEP_42_L) &BMASK(15:14)) != BMASK(15:14))
410*53ee8cc1Swenshuai.xi     {
411*53ee8cc1Swenshuai.xi         u16Ret = 1;
412*53ee8cc1Swenshuai.xi     }
413*53ee8cc1Swenshuai.xi 
414*53ee8cc1Swenshuai.xi     return u16Ret;
415*53ee8cc1Swenshuai.xi 
416*53ee8cc1Swenshuai.xi #else
417*53ee8cc1Swenshuai.xi     return 0;
418*53ee8cc1Swenshuai.xi #endif
419*53ee8cc1Swenshuai.xi }
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
422*53ee8cc1Swenshuai.xi //
423*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_GetOffLineOfDVI2(void)424*53ee8cc1Swenshuai.xi MS_U16 Hal_XC_GetOffLineOfDVI2(void)
425*53ee8cc1Swenshuai.xi {
426*53ee8cc1Swenshuai.xi #if SUPPORT_IMMESWITCH
427*53ee8cc1Swenshuai.xi     MS_U16 u16Ret = 0;
428*53ee8cc1Swenshuai.xi 
429*53ee8cc1Swenshuai.xi     if((R2BYTE(REG_PM_SLEEP_45_L) &BMASK(15:14)) != BMASK(15:14))
430*53ee8cc1Swenshuai.xi     {
431*53ee8cc1Swenshuai.xi         u16Ret = 1;
432*53ee8cc1Swenshuai.xi     }
433*53ee8cc1Swenshuai.xi 
434*53ee8cc1Swenshuai.xi     return u16Ret;
435*53ee8cc1Swenshuai.xi 
436*53ee8cc1Swenshuai.xi #else
437*53ee8cc1Swenshuai.xi     return 0;
438*53ee8cc1Swenshuai.xi #endif
439*53ee8cc1Swenshuai.xi }
440*53ee8cc1Swenshuai.xi 
441*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
442*53ee8cc1Swenshuai.xi //
443*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_GetOffLineOfDVI3(void)444*53ee8cc1Swenshuai.xi MS_U16 Hal_XC_GetOffLineOfDVI3(void)
445*53ee8cc1Swenshuai.xi {
446*53ee8cc1Swenshuai.xi #if SUPPORT_IMMESWITCH
447*53ee8cc1Swenshuai.xi     MS_U16 u16Ret = 0;
448*53ee8cc1Swenshuai.xi 
449*53ee8cc1Swenshuai.xi     if((R2BYTE(REG_PM_SLEEP_48_L) &BMASK(15:14)) != BMASK(15:14))
450*53ee8cc1Swenshuai.xi     {
451*53ee8cc1Swenshuai.xi         u16Ret = 1;
452*53ee8cc1Swenshuai.xi     }
453*53ee8cc1Swenshuai.xi 
454*53ee8cc1Swenshuai.xi     return u16Ret;
455*53ee8cc1Swenshuai.xi 
456*53ee8cc1Swenshuai.xi #else
457*53ee8cc1Swenshuai.xi     return 0;
458*53ee8cc1Swenshuai.xi #endif
459*53ee8cc1Swenshuai.xi }
460*53ee8cc1Swenshuai.xi 
461*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
462*53ee8cc1Swenshuai.xi // Return HW connections status of UHCx
463*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_GetOffLineOfStorage(void * pInstance)464*53ee8cc1Swenshuai.xi MS_U16 Hal_XC_GetOffLineOfStorage(void *pInstance)
465*53ee8cc1Swenshuai.xi {
466*53ee8cc1Swenshuai.xi     return ((MDrv_ReadByte(REG_UHC0_BASE + 0x30) & 0x01) | (MDrv_ReadByte(REG_UHC1_BASE + 0x30) & 0x01));
467*53ee8cc1Swenshuai.xi }
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
470*53ee8cc1Swenshuai.xi // Function: Switch Clk path
471*53ee8cc1Swenshuai.xi //----
472*53ee8cc1Swenshuai.xi // Input Source Select.
473*53ee8cc1Swenshuai.xi //   0000: ADC A.
474*53ee8cc1Swenshuai.xi //   0001: DVI
475*53ee8cc1Swenshuai.xi //   0010: VD
476*53ee8cc1Swenshuai.xi //   0011: Capture
477*53ee8cc1Swenshuai.xi //   0100: Reserved
478*53ee8cc1Swenshuai.xi //   0101: Ext VD
479*53ee8cc1Swenshuai.xi //   0110: ADC B
480*53ee8cc1Swenshuai.xi //
481*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------
Hal_XC_TurnOnDetectClkPath(void * pInstance,MS_U8 u8DetectClkPath)482*53ee8cc1Swenshuai.xi void   Hal_XC_TurnOnDetectClkPath(void *pInstance, MS_U8 u8DetectClkPath)
483*53ee8cc1Swenshuai.xi {
484*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
485*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
486*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
487*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
488*53ee8cc1Swenshuai.xi     if ((pXCResourcePrivate->sthal_Optee.op_tee_xc[MAIN_WINDOW].isEnable == TRUE) ||
489*53ee8cc1Swenshuai.xi         (pXCResourcePrivate->sthal_Optee.op_tee_xc[SUB_WINDOW].isEnable == TRUE))
490*53ee8cc1Swenshuai.xi     {
491*53ee8cc1Swenshuai.xi         MS_U16 u16Delayms = 0;
492*53ee8cc1Swenshuai.xi         while((pXCResourcePrivate->sthal_Optee.op_tee_mux.bfire == TRUE) && u16Delayms < 200)
493*53ee8cc1Swenshuai.xi         {
494*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
495*53ee8cc1Swenshuai.xi             u16Delayms++;
496*53ee8cc1Swenshuai.xi         }
497*53ee8cc1Swenshuai.xi         if (pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_cnt <=OP_TEE_XC_REG_MAX_CNT)
498*53ee8cc1Swenshuai.xi         {
499*53ee8cc1Swenshuai.xi             pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_data[pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_cnt].bk = REG_IPMUX_01_H;
500*53ee8cc1Swenshuai.xi             pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_data[pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_cnt].value = (u8DetectClkPath << 8);
501*53ee8cc1Swenshuai.xi             pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_data[pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_cnt].mask = 0xF000;
502*53ee8cc1Swenshuai.xi             pXCResourcePrivate->sthal_Optee.op_tee_mux.regs_cnt++;
503*53ee8cc1Swenshuai.xi         }
504*53ee8cc1Swenshuai.xi         else
505*53ee8cc1Swenshuai.xi         {
506*53ee8cc1Swenshuai.xi             printf("op_tee_mux.regs_cnt too small\n");
507*53ee8cc1Swenshuai.xi         }
508*53ee8cc1Swenshuai.xi     }
509*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_IPMUX_01_H, (MDrv_ReadByte(REG_IPMUX_01_H) & 0xf0) | u8DetectClkPath);
510*53ee8cc1Swenshuai.xi }
511*53ee8cc1Swenshuai.xi 
Hal_XC_SetOfflineDetectClk(void * pInstance)512*53ee8cc1Swenshuai.xi void Hal_XC_SetOfflineDetectClk(void *pInstance)
513*53ee8cc1Swenshuai.xi {
514*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_CKG_IDCLK0, CKG_IDCLK0_XTAL, CKG_IDCLK0_MASK); // initial to XTAL first, will be changed when switch input source
515*53ee8cc1Swenshuai.xi }
516*53ee8cc1Swenshuai.xi 
Hal_XC_SetOffLineSogThreshold(void * pInstance,MS_U8 u8Threshold)517*53ee8cc1Swenshuai.xi MS_BOOL Hal_XC_SetOffLineSogThreshold(void *pInstance, MS_U8 u8Threshold)
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi     UNUSED(pInstance);
520*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_3E_L, u8Threshold); //8 bit
521*53ee8cc1Swenshuai.xi     return TRUE;
522*53ee8cc1Swenshuai.xi }
523*53ee8cc1Swenshuai.xi 
Hal_XC_SetOffLineSogBW(void * pInstance,MS_U8 u8BW)524*53ee8cc1Swenshuai.xi MS_BOOL Hal_XC_SetOffLineSogBW(void *pInstance, MS_U8 u8BW)
525*53ee8cc1Swenshuai.xi {
526*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
527*53ee8cc1Swenshuai.xi 
528*53ee8cc1Swenshuai.xi     UNUSED(pInstance);
529*53ee8cc1Swenshuai.xi 
530*53ee8cc1Swenshuai.xi     if(u8BW < 32) // only 5 bit and always >= 0
531*53ee8cc1Swenshuai.xi     {
532*53ee8cc1Swenshuai.xi         bRet = TRUE;
533*53ee8cc1Swenshuai.xi     }
534*53ee8cc1Swenshuai.xi     else
535*53ee8cc1Swenshuai.xi     {
536*53ee8cc1Swenshuai.xi         printf("[Offline Detect]invalid sog filter bandwidth value, use default value:0x0!\n");
537*53ee8cc1Swenshuai.xi         u8BW = 0;
538*53ee8cc1Swenshuai.xi         bRet = FALSE;
539*53ee8cc1Swenshuai.xi     }
540*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_3C_L, (MDrv_ReadByte(REG_ADC_ATOP_3C_L) & 0xe0) | u8BW);
541*53ee8cc1Swenshuai.xi     return bRet;
542*53ee8cc1Swenshuai.xi }
543*53ee8cc1Swenshuai.xi 
Hal_XC_OffLineInit(void * pInstance)544*53ee8cc1Swenshuai.xi void Hal_XC_OffLineInit(void *pInstance)
545*53ee8cc1Swenshuai.xi {
546*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_3F_L, MDrv_ReadByte(REG_ADC_ATOP_3F_L) & 0xfd);
547*53ee8cc1Swenshuai.xi }
548*53ee8cc1Swenshuai.xi 
Hal_XC_OffLineExit(void * pInstance)549*53ee8cc1Swenshuai.xi void Hal_XC_OffLineExit(void *pInstance)
550*53ee8cc1Swenshuai.xi {
551*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_ADC_ATOP_3F_L, BIT(1), BIT(1));
552*53ee8cc1Swenshuai.xi }
553*53ee8cc1Swenshuai.xi 
Hal_XC_GetOffLineDetection(void * pInstance,MS_U8 u8CheckSrc)554*53ee8cc1Swenshuai.xi MS_U8 Hal_XC_GetOffLineDetection(void *pInstance, MS_U8 u8CheckSrc)
555*53ee8cc1Swenshuai.xi {
556*53ee8cc1Swenshuai.xi     if(((u8CheckSrc >= (MS_U8)INPUT_PORT_YMUX_CVBS0) &&
557*53ee8cc1Swenshuai.xi         (u8CheckSrc <= (MS_U8)INPUT_PORT_YMUX_CVBS7))
558*53ee8cc1Swenshuai.xi          ||
559*53ee8cc1Swenshuai.xi         ((u8CheckSrc >= (MS_U8)INPUT_PORT_ANALOG0_SYNC)  &&
560*53ee8cc1Swenshuai.xi         (u8CheckSrc <= (MS_U8)INPUT_PORT_ANALOG4_SYNC))
561*53ee8cc1Swenshuai.xi          ||
562*53ee8cc1Swenshuai.xi         ((u8CheckSrc >= (MS_U8)INPUT_PORT_ANALOG0)  &&
563*53ee8cc1Swenshuai.xi         (u8CheckSrc <= (MS_U8)INPUT_PORT_ANALOG4)))
564*53ee8cc1Swenshuai.xi     {
565*53ee8cc1Swenshuai.xi         MS_U16 u16Hcnt, u16Vcnt;
566*53ee8cc1Swenshuai.xi 
567*53ee8cc1Swenshuai.xi         u16Hcnt = Hal_XC_GetOffLineOfH(pInstance);
568*53ee8cc1Swenshuai.xi         u16Vcnt = Hal_XC_GetOffLineOfV(pInstance);
569*53ee8cc1Swenshuai.xi         AIS_HalDebug(printf("MApi_XC_GetOffLineDetection: vcnt=%x hcnt=%x\n", u16Vcnt,u16Hcnt );)
570*53ee8cc1Swenshuai.xi 
571*53ee8cc1Swenshuai.xi         if((u16Hcnt == 0x3fff)
572*53ee8cc1Swenshuai.xi             ||(u16Vcnt ==0x7ff)
573*53ee8cc1Swenshuai.xi             ||(u16Hcnt == 0)
574*53ee8cc1Swenshuai.xi             ||(u16Vcnt ==0)
575*53ee8cc1Swenshuai.xi             )
576*53ee8cc1Swenshuai.xi         {
577*53ee8cc1Swenshuai.xi             return 0;        // Nosignal
578*53ee8cc1Swenshuai.xi         }
579*53ee8cc1Swenshuai.xi         else
580*53ee8cc1Swenshuai.xi         {
581*53ee8cc1Swenshuai.xi             return 1;        //Signal in
582*53ee8cc1Swenshuai.xi         }
583*53ee8cc1Swenshuai.xi     }
584*53ee8cc1Swenshuai.xi     else if(u8CheckSrc == INPUT_PORT_DVI0)
585*53ee8cc1Swenshuai.xi     {
586*53ee8cc1Swenshuai.xi         return Hal_XC_GetOffLineOfDVI0();
587*53ee8cc1Swenshuai.xi     }
588*53ee8cc1Swenshuai.xi     else if(u8CheckSrc == INPUT_PORT_DVI1)
589*53ee8cc1Swenshuai.xi     {
590*53ee8cc1Swenshuai.xi         return Hal_XC_GetOffLineOfDVI1();
591*53ee8cc1Swenshuai.xi     }
592*53ee8cc1Swenshuai.xi     else if(u8CheckSrc == INPUT_PORT_DVI2)
593*53ee8cc1Swenshuai.xi     {
594*53ee8cc1Swenshuai.xi         return Hal_XC_GetOffLineOfDVI2();
595*53ee8cc1Swenshuai.xi     }
596*53ee8cc1Swenshuai.xi     else if(u8CheckSrc == INPUT_PORT_DVI3)
597*53ee8cc1Swenshuai.xi     {
598*53ee8cc1Swenshuai.xi         return Hal_XC_GetOffLineOfDVI3();
599*53ee8cc1Swenshuai.xi     }
600*53ee8cc1Swenshuai.xi     else if(u8CheckSrc == INPUT_PORT_MVOP)
601*53ee8cc1Swenshuai.xi     {
602*53ee8cc1Swenshuai.xi         //UHC0_REG_BASE and UHC1_REG_BASE
603*53ee8cc1Swenshuai.xi         return (Hal_XC_GetOffLineOfStorage(pInstance))?1:0;
604*53ee8cc1Swenshuai.xi     }
605*53ee8cc1Swenshuai.xi     else
606*53ee8cc1Swenshuai.xi     {
607*53ee8cc1Swenshuai.xi         return 0;
608*53ee8cc1Swenshuai.xi     }
609*53ee8cc1Swenshuai.xi }
610*53ee8cc1Swenshuai.xi 
611*53ee8cc1Swenshuai.xi #undef MHAL_OFFLINE_C
612