xref: /utopia/UTPA2-700.0.x/modules/mfc/hal/M7621/mfc/mdrv_mfc_scalerop.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 #define _MSSCALEROP_C_
79*53ee8cc1Swenshuai.xi #include "mdrv_mfc_platform.h"
80*53ee8cc1Swenshuai.xi #include "mdrv_mfc.h"
81*53ee8cc1Swenshuai.xi #include "mdrv_mfc_scalerop.h"
82*53ee8cc1Swenshuai.xi #include "mdrv_mfc_scalerip.h"
83*53ee8cc1Swenshuai.xi #include "mdrv_mfc_fb.h"
84*53ee8cc1Swenshuai.xi #include "mdrv_mfc_panel.h"
85*53ee8cc1Swenshuai.xi 
86*53ee8cc1Swenshuai.xi #if(CODESIZE_SEL == CODESIZE_ALL)
87*53ee8cc1Swenshuai.xi 
88*53ee8cc1Swenshuai.xi #ifndef MFC_ENABLE_LVDS_SSC
89*53ee8cc1Swenshuai.xi #define MFC_ENABLE_LVDS_SSC 0
90*53ee8cc1Swenshuai.xi #define MFC_LVDS_SSC_SPAN_DEFAULT		200
91*53ee8cc1Swenshuai.xi #define MFC_LVDS_SSC_STEP_DEFAULT		100
92*53ee8cc1Swenshuai.xi #endif
93*53ee8cc1Swenshuai.xi /*
94*53ee8cc1Swenshuai.xi #if(CODEBASE_SEL == CODEBASE_LINUX)
95*53ee8cc1Swenshuai.xi DECLARE_MUTEX(MFC_MUTEX);
96*53ee8cc1Swenshuai.xi #define MUTEX_LOCK()  down(&MFC_MUTEX)
97*53ee8cc1Swenshuai.xi #define MUTEX_UNLOCK()   up(&MFC_MUTEX)
98*53ee8cc1Swenshuai.xi #endif
99*53ee8cc1Swenshuai.xi */
100*53ee8cc1Swenshuai.xi extern U8 gLgModelType;
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi #define _RATIO			1 // 905,969,664
103*53ee8cc1Swenshuai.xi #define _STEP			4 // 4,294,967,295
104*53ee8cc1Swenshuai.xi #define _GAIN_P(f)		(f/(_STEP))
105*53ee8cc1Swenshuai.xi #define _GAIN_I(f)		(f/(_STEP*_STEP/2))
106*53ee8cc1Swenshuai.xi 
Panel_Dclk_Hz(U16 u16Htotal,U16 u16Vtotal,U8 u8Vfreq)107*53ee8cc1Swenshuai.xi U32 Panel_Dclk_Hz(U16 u16Htotal, U16 u16Vtotal, U8 u8Vfreq)
108*53ee8cc1Swenshuai.xi {
109*53ee8cc1Swenshuai.xi 	return (U32)u16Htotal*u16Vtotal*u8Vfreq;
110*53ee8cc1Swenshuai.xi }
111*53ee8cc1Swenshuai.xi 
FPLL_Panel_Dclk_Hz(U16 u16Htotal,U16 u16Vtotal,U8 u8Vfreq)112*53ee8cc1Swenshuai.xi U32 FPLL_Panel_Dclk_Hz(U16 u16Htotal, U16 u16Vtotal, U8 u8Vfreq)
113*53ee8cc1Swenshuai.xi {
114*53ee8cc1Swenshuai.xi 	return (U32)u16Htotal*u16Vtotal*u8Vfreq;
115*53ee8cc1Swenshuai.xi }
116*53ee8cc1Swenshuai.xi 
Panel_Dclk_Hz2(U16 u16Htotal,U16 u16Vtotal,U8 u8Vfreq)117*53ee8cc1Swenshuai.xi U32 Panel_Dclk_Hz2(U16 u16Htotal, U16 u16Vtotal, U8 u8Vfreq)
118*53ee8cc1Swenshuai.xi {
119*53ee8cc1Swenshuai.xi 	U32 u32Dclk=0;
120*53ee8cc1Swenshuai.xi 	u32Dclk = msCalculateDecimal(u16Htotal*u16Vtotal*u8Vfreq,1000000);
121*53ee8cc1Swenshuai.xi 	return u32Dclk;
122*53ee8cc1Swenshuai.xi }
123*53ee8cc1Swenshuai.xi 
FPLL_Panel_Dclk_Hz2(U16 u16Htotal,U16 u16Vtotal,U8 u8Vfreq)124*53ee8cc1Swenshuai.xi U32 FPLL_Panel_Dclk_Hz2(U16 u16Htotal, U16 u16Vtotal, U8 u8Vfreq)
125*53ee8cc1Swenshuai.xi {
126*53ee8cc1Swenshuai.xi 	U32 u32Dclk=0;
127*53ee8cc1Swenshuai.xi 	u32Dclk = msCalculateDecimal(u16Htotal*u16Vtotal*u8Vfreq,1000000);
128*53ee8cc1Swenshuai.xi 	return u32Dclk  ;
129*53ee8cc1Swenshuai.xi }
130*53ee8cc1Swenshuai.xi 
MDrv_MFC_DE_XEnd(U16 u16PnlWidth)131*53ee8cc1Swenshuai.xi U16 MDrv_MFC_DE_XEnd(U16 u16PnlWidth)
132*53ee8cc1Swenshuai.xi {
133*53ee8cc1Swenshuai.xi 	if (IsMultipCheck(u16PnlWidth,4))
134*53ee8cc1Swenshuai.xi 		return (gmfcSysInfo.u16HStart/((TwoChip_Func)?2:1) +
135*53ee8cc1Swenshuai.xi 				gmfcSysInfo.u16Width/((TwoChip_Func)?2:1)-1);
136*53ee8cc1Swenshuai.xi 	else
137*53ee8cc1Swenshuai.xi 		return (gmfcSysInfo.u16HStart/((TwoChip_Func)?2:1)+
138*53ee8cc1Swenshuai.xi 				gmfcSysInfo.u16Width/((TwoChip_Func)?2:1)+1);
139*53ee8cc1Swenshuai.xi }
140*53ee8cc1Swenshuai.xi 
MDrv_MFC_SetGainPhase(void)141*53ee8cc1Swenshuai.xi void MDrv_MFC_SetGainPhase(void)
142*53ee8cc1Swenshuai.xi {
143*53ee8cc1Swenshuai.xi 	U8 i, u8Val;
144*53ee8cc1Swenshuai.xi 	U32 u32ClockDivider, u32Factor;
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi 	u32ClockDivider = (Panel_Dclk_Hz(gmfcSysInfo.u16HTotal, gmfcSysInfo.u16VTotal,gmfcSysInfo.u8PanelVfreq)/60*_RATIO)>>5;
147*53ee8cc1Swenshuai.xi 	u32Factor = (216ul*524288*8+(7ul*MST_CLOCK_MHZ*u32ClockDivider)/2)/(7ul*MST_CLOCK_MHZ*u32ClockDivider);
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi 	for (i=0; i<0x0F; i++)
150*53ee8cc1Swenshuai.xi 	{
151*53ee8cc1Swenshuai.xi 		if ((1ul<<i) >= _GAIN_P(u32Factor))
152*53ee8cc1Swenshuai.xi 			break;
153*53ee8cc1Swenshuai.xi 	}
154*53ee8cc1Swenshuai.xi 	u8Val = (i+1)<<4;
155*53ee8cc1Swenshuai.xi 	//printf("\r\n_GAIN_P[%d]", _GAIN_P);
156*53ee8cc1Swenshuai.xi 	//printf(" i[%d]", i);
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi 	for (i=0; i<0x0F; i++)
159*53ee8cc1Swenshuai.xi 	{
160*53ee8cc1Swenshuai.xi 		if ((1ul<<i) >= _GAIN_I(u32Factor))
161*53ee8cc1Swenshuai.xi 			break;
162*53ee8cc1Swenshuai.xi 	}
163*53ee8cc1Swenshuai.xi 	u8Val |= i+1;
164*53ee8cc1Swenshuai.xi 	//printf("\r\n_GAIN_I[%d]", _GAIN_I);
165*53ee8cc1Swenshuai.xi 	//printf(" i[%d]", i);
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi 		if ((gmfcSysInfo.u8PanelVfreq/60)==2)
168*53ee8cc1Swenshuai.xi 		i = 0x10; // {ovs_frame_div[3:0],ivs_frame_div[3:0]}
169*53ee8cc1Swenshuai.xi 	else
170*53ee8cc1Swenshuai.xi 		i = 0x00; // {ovs_frame_div[3:0],ivs_frame_div[3:0]}
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteByte(0x2A17, u8Val);
173*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteByte(0x2A19, i);
174*53ee8cc1Swenshuai.xi 	//printk("MDrv_MFC_SetGainPhase()\n");
175*53ee8cc1Swenshuai.xi }
176*53ee8cc1Swenshuai.xi 
MDrv_MFC_SetVCO(U32 u32Dclk,U8 u8Vfreq)177*53ee8cc1Swenshuai.xi U32 MDrv_MFC_SetVCO(U32 u32Dclk, U8 u8Vfreq)
178*53ee8cc1Swenshuai.xi {
179*53ee8cc1Swenshuai.xi 	U32 u32VCO;
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi     if (gmfcSysInfo.u8PanelType == _MINI_LVDS || gmfcSysInfo.u8PanelType ==_MINI_LVDS_GIP || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
182*53ee8cc1Swenshuai.xi 	{
183*53ee8cc1Swenshuai.xi     	u32VCO = u32Dclk*4;
184*53ee8cc1Swenshuai.xi 		if(u8Vfreq==60)
185*53ee8cc1Swenshuai.xi 		{
186*53ee8cc1Swenshuai.xi 			if(u32VCO>313)
187*53ee8cc1Swenshuai.xi 			{
188*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT1, _BIT2|_BIT1|_BIT0); ///2
189*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,_BIT3|_BIT2);
190*53ee8cc1Swenshuai.xi 			}
191*53ee8cc1Swenshuai.xi 			else if(u32VCO>156)
192*53ee8cc1Swenshuai.xi 			{
193*53ee8cc1Swenshuai.xi 			  	MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
194*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,_BIT4|_BIT2);
195*53ee8cc1Swenshuai.xi 			}
196*53ee8cc1Swenshuai.xi 			else
197*53ee8cc1Swenshuai.xi 			{
198*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
199*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT4 | _BIT3|_BIT2);
200*53ee8cc1Swenshuai.xi 			}
201*53ee8cc1Swenshuai.xi 		}
202*53ee8cc1Swenshuai.xi 		else //120
203*53ee8cc1Swenshuai.xi 		{
204*53ee8cc1Swenshuai.xi 			if(u32VCO>625)
205*53ee8cc1Swenshuai.xi 			{
206*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT1, _BIT2|_BIT1|_BIT0); ///2
207*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByte(0x2A2C, 0);
208*53ee8cc1Swenshuai.xi 			}
209*53ee8cc1Swenshuai.xi 			else if(u32VCO>313)
210*53ee8cc1Swenshuai.xi 			{
211*53ee8cc1Swenshuai.xi 	            MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
212*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT3|_BIT2);
213*53ee8cc1Swenshuai.xi 			}
214*53ee8cc1Swenshuai.xi 			else
215*53ee8cc1Swenshuai.xi 			{
216*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0); ///4
217*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT4|_BIT2);
218*53ee8cc1Swenshuai.xi 			}
219*53ee8cc1Swenshuai.xi 		}
220*53ee8cc1Swenshuai.xi     }
221*53ee8cc1Swenshuai.xi     else //LVDS
222*53ee8cc1Swenshuai.xi 	{
223*53ee8cc1Swenshuai.xi     	if (gmfcSysInfo.u8PanelChannel == _DUAL)
224*53ee8cc1Swenshuai.xi     	{
225*53ee8cc1Swenshuai.xi 			u32Dclk = u32Dclk/2;
226*53ee8cc1Swenshuai.xi 			u32VCO = u32Dclk*7;
227*53ee8cc1Swenshuai.xi 			if(u32VCO>625)
228*53ee8cc1Swenshuai.xi 			{
229*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
230*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, 0);
231*53ee8cc1Swenshuai.xi 			}
232*53ee8cc1Swenshuai.xi 			else
233*53ee8cc1Swenshuai.xi 			{
234*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
235*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT3|_BIT2);
236*53ee8cc1Swenshuai.xi 			}
237*53ee8cc1Swenshuai.xi 		}
238*53ee8cc1Swenshuai.xi 		else if (gmfcSysInfo.u8PanelChannel == _QUAD || gmfcSysInfo.u8PanelChannel == _QUAD_LR)
239*53ee8cc1Swenshuai.xi 		{
240*53ee8cc1Swenshuai.xi 			u32VCO = u32Dclk/2*7;
241*53ee8cc1Swenshuai.xi 			if(u32VCO>625)
242*53ee8cc1Swenshuai.xi 			{
243*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06,_BIT1, _BIT2|_BIT1|_BIT0); ///2
244*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, 0);
245*53ee8cc1Swenshuai.xi 			}
246*53ee8cc1Swenshuai.xi 			else  if(u32VCO>313)
247*53ee8cc1Swenshuai.xi 			{
248*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0);  ///6
249*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT3|_BIT2);
250*53ee8cc1Swenshuai.xi 			}
251*53ee8cc1Swenshuai.xi 			else
252*53ee8cc1Swenshuai.xi 			{
253*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
254*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT4|_BIT2);
255*53ee8cc1Swenshuai.xi 			}
256*53ee8cc1Swenshuai.xi 		}
257*53ee8cc1Swenshuai.xi 		else if (gmfcSysInfo.u8PanelChannel == _V_BY1)
258*53ee8cc1Swenshuai.xi 		{
259*53ee8cc1Swenshuai.xi 			u32VCO = u32Dclk*10;
260*53ee8cc1Swenshuai.xi 			if(u32VCO>625)
261*53ee8cc1Swenshuai.xi 			{
262*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
263*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, 0);
264*53ee8cc1Swenshuai.xi 			}
265*53ee8cc1Swenshuai.xi 			else
266*53ee8cc1Swenshuai.xi 			{
267*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
268*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT3|_BIT2);
269*53ee8cc1Swenshuai.xi 			}
270*53ee8cc1Swenshuai.xi 		}
271*53ee8cc1Swenshuai.xi 		else //single
272*53ee8cc1Swenshuai.xi 		{
273*53ee8cc1Swenshuai.xi 			u32Dclk = u32Dclk/2;
274*53ee8cc1Swenshuai.xi 			u32VCO = u32Dclk*7;
275*53ee8cc1Swenshuai.xi 			if(u32VCO>625)
276*53ee8cc1Swenshuai.xi 			{
277*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
278*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, 0);
279*53ee8cc1Swenshuai.xi 			}
280*53ee8cc1Swenshuai.xi 			else
281*53ee8cc1Swenshuai.xi 			{
282*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
283*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT3|_BIT2);
284*53ee8cc1Swenshuai.xi 			}
285*53ee8cc1Swenshuai.xi 		}
286*53ee8cc1Swenshuai.xi     }
287*53ee8cc1Swenshuai.xi     #if ( TwoChip_Func != TwoChip_OFF )
288*53ee8cc1Swenshuai.xi       MDrv_MFC_WriteBit(0x2A2C, 1, _BIT0);
289*53ee8cc1Swenshuai.xi     #endif
290*53ee8cc1Swenshuai.xi 	return u32Dclk;
291*53ee8cc1Swenshuai.xi }
292*53ee8cc1Swenshuai.xi 
MDrv_MFC_SetLvdsSSC(U16 u16KHz,U8 u8Percent)293*53ee8cc1Swenshuai.xi void MDrv_MFC_SetLvdsSSC(U16 u16KHz, U8  u8Percent)
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi 	// SPAN value, recommend value is 30KHz ~ 40KHz
296*53ee8cc1Swenshuai.xi     // STEP percent value, recommend is under 3%
297*53ee8cc1Swenshuai.xi     U8  u8temp;
298*53ee8cc1Swenshuai.xi     U16 u16Span, u16Step;
299*53ee8cc1Swenshuai.xi     U32 u32Set;
300*53ee8cc1Swenshuai.xi     u8temp = MDrv_MFC_ReadByte(0x2A1B);
301*53ee8cc1Swenshuai.xi     if(MDrv_MFC_ReadByte(0x2C42)&_BIT5)
302*53ee8cc1Swenshuai.xi     {
303*53ee8cc1Swenshuai.xi     	MDrv_MFC_WriteBit(0x2A1B, _ENABLE, _BIT3);
304*53ee8cc1Swenshuai.xi         //Get SET
305*53ee8cc1Swenshuai.xi         u8temp  = MDrv_MFC_ReadByte (0x2A20);
306*53ee8cc1Swenshuai.xi         u32Set = u8temp;
307*53ee8cc1Swenshuai.xi         u8temp  = MDrv_MFC_ReadByte (0x2A1F);
308*53ee8cc1Swenshuai.xi         u32Set = (u32Set << 8) | u8temp;
309*53ee8cc1Swenshuai.xi         u8temp = MDrv_MFC_ReadByte (0x2A1E);
310*53ee8cc1Swenshuai.xi         u32Set = (u32Set << 8) | u8temp;
311*53ee8cc1Swenshuai.xi 
312*53ee8cc1Swenshuai.xi         u16Span = ((131072*10*216)/(u32Set*u16KHz/1000));
313*53ee8cc1Swenshuai.xi         u16Step = (u32Set*u8Percent)/((U32)u16Span*10000);
314*53ee8cc1Swenshuai.xi 
315*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByte (0x2A2E, 	(U8)u16Step);  //write step 10 bits
316*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByteMask (0x2A2F, (U8)((u16Step&0x0300)>>8), 0x03);
317*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByte (0x2A30, 	(U8)u16Span);  //write SPAN 14 bits
318*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByteMask (0x2A31, (U8)((u16Span&0x3F00)>>8), 0x3F);
319*53ee8cc1Swenshuai.xi     }
320*53ee8cc1Swenshuai.xi     else
321*53ee8cc1Swenshuai.xi     {
322*53ee8cc1Swenshuai.xi     	MDrv_MFC_WriteBit(0x2A1B, _DISABLE, _BIT3);
323*53ee8cc1Swenshuai.xi 	}
324*53ee8cc1Swenshuai.xi 	//printk("MDrv_MFC_SetLvdsSSC()\n");
325*53ee8cc1Swenshuai.xi }
326*53ee8cc1Swenshuai.xi 
327*53ee8cc1Swenshuai.xi 
328*53ee8cc1Swenshuai.xi #if(CODEBASE_SEL == CODEBASE_51)
329*53ee8cc1Swenshuai.xi 
msSetFPLLGainPhase(void)330*53ee8cc1Swenshuai.xi void msSetFPLLGainPhase(void)
331*53ee8cc1Swenshuai.xi 	{
332*53ee8cc1Swenshuai.xi 	U8 i, u8Val;
333*53ee8cc1Swenshuai.xi 	U32 u32ClockDivider, u32Factor;
334*53ee8cc1Swenshuai.xi 
335*53ee8cc1Swenshuai.xi 	u32ClockDivider = (FPLL_Panel_Dclk_Hz(gmfcSysInfo.u16HTotal, gmfcSysInfo.u16VTotal,gmfcSysInfo.u8PanelVfreq)/60*_RATIO)>>5;
336*53ee8cc1Swenshuai.xi 	u32Factor = (216ul*524288*8+(7ul*MST_CLOCK_MHZ*u32ClockDivider)/2)/(7ul*MST_CLOCK_MHZ*u32ClockDivider);
337*53ee8cc1Swenshuai.xi 
338*53ee8cc1Swenshuai.xi 	for (i=0; i<0x0F; i++)
339*53ee8cc1Swenshuai.xi 	{
340*53ee8cc1Swenshuai.xi 		if ((1ul<<i) >= _GAIN_P(u32Factor))
341*53ee8cc1Swenshuai.xi 			break;
342*53ee8cc1Swenshuai.xi 	}
343*53ee8cc1Swenshuai.xi 	u8Val = (i+1)<<4;
344*53ee8cc1Swenshuai.xi 	//printf("\r\n_GAIN_P[%d]", _GAIN_P);
345*53ee8cc1Swenshuai.xi 	//printf(" i[%d]", i);
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi 	for (i=0; i<0x0F; i++)
348*53ee8cc1Swenshuai.xi 	{
349*53ee8cc1Swenshuai.xi 		if ((1ul<<i) >= _GAIN_I(u32Factor))
350*53ee8cc1Swenshuai.xi 			break;
351*53ee8cc1Swenshuai.xi     }
352*53ee8cc1Swenshuai.xi 	u8Val |= i+1;
353*53ee8cc1Swenshuai.xi 	//printf("\r\n_GAIN_I[%d]", _GAIN_I);
354*53ee8cc1Swenshuai.xi 	//printf(" i[%d]", i);
355*53ee8cc1Swenshuai.xi 
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi 	if ((gmfcSysInfo.u8PanelVfreq/60)==2)
358*53ee8cc1Swenshuai.xi 		i = 0x10; // {ovs_frame_div[3:0],ivs_frame_div[3:0]}
359*53ee8cc1Swenshuai.xi 	else
360*53ee8cc1Swenshuai.xi 		i = 0x00; // {ovs_frame_div[3:0],ivs_frame_div[3:0]}
361*53ee8cc1Swenshuai.xi 
362*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteByte(0x2A17, u8Val);
363*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteByte(0x2A19, i);
364*53ee8cc1Swenshuai.xi }
365*53ee8cc1Swenshuai.xi 
msLPLL_SetVCO(U32 dwDclk,U8 ucVfreq)366*53ee8cc1Swenshuai.xi U32 msLPLL_SetVCO(U32 dwDclk, U8 ucVfreq)
367*53ee8cc1Swenshuai.xi {
368*53ee8cc1Swenshuai.xi 	U32 dwVCO;
369*53ee8cc1Swenshuai.xi 	//printf("\r\n dwDclk = %x", dwDclk);
370*53ee8cc1Swenshuai.xi 	//printf("\r\n ucVfreq = %x", ucVfreq);
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi     if (gmfcSysInfo.u8PanelType == _MINI_LVDS || gmfcSysInfo.u8PanelType ==_MINI_LVDS_GIP || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
373*53ee8cc1Swenshuai.xi     {
374*53ee8cc1Swenshuai.xi     	dwVCO = dwDclk*4;
375*53ee8cc1Swenshuai.xi 
376*53ee8cc1Swenshuai.xi 	if(ucVfreq==60)
377*53ee8cc1Swenshuai.xi 	{
378*53ee8cc1Swenshuai.xi 		if(dwVCO>313)
379*53ee8cc1Swenshuai.xi 		{
380*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByteMask(0x2A06, _BIT1, _BIT2|_BIT1|_BIT0); ///2
381*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT3|_BIT2);
382*53ee8cc1Swenshuai.xi 		}
383*53ee8cc1Swenshuai.xi 		else if(dwVCO>156)
384*53ee8cc1Swenshuai.xi 		{
385*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
386*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT4|_BIT2);
387*53ee8cc1Swenshuai.xi 		}
388*53ee8cc1Swenshuai.xi 		else
389*53ee8cc1Swenshuai.xi 		{
390*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
391*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT4 | _BIT3|_BIT2);
392*53ee8cc1Swenshuai.xi 		}
393*53ee8cc1Swenshuai.xi 	}
394*53ee8cc1Swenshuai.xi 	else //120
395*53ee8cc1Swenshuai.xi 	{
396*53ee8cc1Swenshuai.xi               if(dwVCO>625)
397*53ee8cc1Swenshuai.xi               {
398*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT1, _BIT2|_BIT1|_BIT0); ///2
399*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByte(0x2A2C, 0);
400*53ee8cc1Swenshuai.xi               }
401*53ee8cc1Swenshuai.xi               else if(dwVCO>313)
402*53ee8cc1Swenshuai.xi               {
403*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
404*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT3|_BIT2);
405*53ee8cc1Swenshuai.xi 	}
406*53ee8cc1Swenshuai.xi 	       else
407*53ee8cc1Swenshuai.xi               {
408*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0); ///4
409*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C, _BIT4|_BIT2);
410*53ee8cc1Swenshuai.xi               }
411*53ee8cc1Swenshuai.xi 	}
412*53ee8cc1Swenshuai.xi     }
413*53ee8cc1Swenshuai.xi     else //LVDS
414*53ee8cc1Swenshuai.xi     {
415*53ee8cc1Swenshuai.xi     	if (gmfcSysInfo.u8PanelChannel == _DUAL)
416*53ee8cc1Swenshuai.xi 	{
417*53ee8cc1Swenshuai.xi 			//printf("\r\nDual = %x", 0);
418*53ee8cc1Swenshuai.xi 
419*53ee8cc1Swenshuai.xi 	   dwDclk = dwDclk/2;
420*53ee8cc1Swenshuai.xi 	   dwVCO = dwDclk*7;
421*53ee8cc1Swenshuai.xi           if(dwVCO>625)
422*53ee8cc1Swenshuai.xi           {
423*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
424*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,0); //0
425*53ee8cc1Swenshuai.xi           }
426*53ee8cc1Swenshuai.xi           else
427*53ee8cc1Swenshuai.xi           {
428*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
429*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,_BIT3|_BIT2); //c
430*53ee8cc1Swenshuai.xi           }
431*53ee8cc1Swenshuai.xi 	}
432*53ee8cc1Swenshuai.xi 		else if (gmfcSysInfo.u8PanelChannel == _QUAD || gmfcSysInfo.u8PanelChannel == _QUAD_LR)
433*53ee8cc1Swenshuai.xi 	{
434*53ee8cc1Swenshuai.xi 	   dwVCO = dwDclk*3.5;
435*53ee8cc1Swenshuai.xi           if(dwVCO>625)
436*53ee8cc1Swenshuai.xi           {
437*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06,_BIT1, _BIT2|_BIT1|_BIT0); ///2
438*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,0); //0
439*53ee8cc1Swenshuai.xi           }
440*53ee8cc1Swenshuai.xi           else  if(dwVCO>313)
441*53ee8cc1Swenshuai.xi           {
442*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0);  ///6
443*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,_BIT3|_BIT2); //c
444*53ee8cc1Swenshuai.xi           }
445*53ee8cc1Swenshuai.xi 	   else
446*53ee8cc1Swenshuai.xi           {
447*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
448*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,_BIT4|_BIT2); //c
449*53ee8cc1Swenshuai.xi           }
450*53ee8cc1Swenshuai.xi 	}
451*53ee8cc1Swenshuai.xi 		else if (gmfcSysInfo.u8PanelChannel == _V_BY1)
452*53ee8cc1Swenshuai.xi 	{
453*53ee8cc1Swenshuai.xi           dwVCO = dwDclk*10;
454*53ee8cc1Swenshuai.xi           if(dwVCO>625)
455*53ee8cc1Swenshuai.xi           {
456*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
457*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,0); //0
458*53ee8cc1Swenshuai.xi           }
459*53ee8cc1Swenshuai.xi           else
460*53ee8cc1Swenshuai.xi           {
461*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
462*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,_BIT3|_BIT2); //c
463*53ee8cc1Swenshuai.xi           }
464*53ee8cc1Swenshuai.xi 	}
465*53ee8cc1Swenshuai.xi 	else //single
466*53ee8cc1Swenshuai.xi 	{
467*53ee8cc1Swenshuai.xi 	   dwDclk = dwDclk/2;
468*53ee8cc1Swenshuai.xi 	   dwVCO = dwDclk*7;
469*53ee8cc1Swenshuai.xi           if(dwVCO>625)
470*53ee8cc1Swenshuai.xi           {
471*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2|_BIT1, _BIT2|_BIT1|_BIT0); ///6
472*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,0); //0
473*53ee8cc1Swenshuai.xi           }
474*53ee8cc1Swenshuai.xi           else
475*53ee8cc1Swenshuai.xi           {
476*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByteMask(0x2A06, _BIT2, _BIT2|_BIT1|_BIT0);  ///4
477*53ee8cc1Swenshuai.xi                 MDrv_MFC_WriteByte(0x2A2C,_BIT3|_BIT2); //c
478*53ee8cc1Swenshuai.xi           }
479*53ee8cc1Swenshuai.xi 	}
480*53ee8cc1Swenshuai.xi     }
481*53ee8cc1Swenshuai.xi 	#if ( TwoChip_Func != TwoChip_OFF )
482*53ee8cc1Swenshuai.xi 	  MDrv_MFC_WriteBit(0x2A2C, 1, _BIT0);
483*53ee8cc1Swenshuai.xi 	#endif
484*53ee8cc1Swenshuai.xi 	return dwDclk;
485*53ee8cc1Swenshuai.xi }
486*53ee8cc1Swenshuai.xi 
msSetOutDClk(U8 u8Inputfreq,U8 ucVHzFrmT2,BOOL enableFPLL)487*53ee8cc1Swenshuai.xi void msSetOutDClk(U8 u8Inputfreq, U8 ucVHzFrmT2/*Set panel frequence from T2*/, BOOL enableFPLL)
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi 	U16 wVTotal = gmfcSysInfo.u16VTotal;
490*53ee8cc1Swenshuai.xi        U32 dwDClk ;
491*53ee8cc1Swenshuai.xi 	if(ucVHzFrmT2)
492*53ee8cc1Swenshuai.xi 	{
493*53ee8cc1Swenshuai.xi 		gmfcSysInfo.u8PanelVfreq = ucVHzFrmT2;
494*53ee8cc1Swenshuai.xi 		MDrv_MFC_SetGainPhase();
495*53ee8cc1Swenshuai.xi 	}
496*53ee8cc1Swenshuai.xi 
497*53ee8cc1Swenshuai.xi     if(u8Inputfreq>45&&u8Inputfreq<55)
498*53ee8cc1Swenshuai.xi     {
499*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteBit(0x2080, _DISABLE, _BIT0); // disable film32
500*53ee8cc1Swenshuai.xi     }
501*53ee8cc1Swenshuai.xi     else
502*53ee8cc1Swenshuai.xi     {
503*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteBit(0x2080, _ENABLE, _BIT0); // enable film32
504*53ee8cc1Swenshuai.xi     }
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteBit(0x2A18, 0, _BIT3); // PLL set chnage Toggle
507*53ee8cc1Swenshuai.xi     #if(ENABLE_USER_TOTAL)
508*53ee8cc1Swenshuai.xi         if (u8Inputfreq==50)
509*53ee8cc1Swenshuai.xi         {
510*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16HTotal = USER_HT_50;
511*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16VTotal = USER_VT_50;
512*53ee8cc1Swenshuai.xi         }
513*53ee8cc1Swenshuai.xi         else //60
514*53ee8cc1Swenshuai.xi         {
515*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16HTotal = USER_HT_60;
516*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16VTotal = USER_VT_60;
517*53ee8cc1Swenshuai.xi         }
518*53ee8cc1Swenshuai.xi         dwDClk = MDrv_MFC_SetVCO(Panel_Dclk_Hz2(gmfcSysInfo.u16HTotal, gmfcSysInfo.u16VTotal, u8Inputfreq/*u8Inputfreq*/), gmfcSysInfo.u8PanelVfreq);
519*53ee8cc1Swenshuai.xi             MDrv_MFC_Write2BytesINT(REG_2F02, gmfcSysInfo.u16VTotal-1);
520*53ee8cc1Swenshuai.xi                   MDrv_MFC_Write2BytesINT(REG_2F04, gmfcSysInfo.u16HTotal-1);
521*53ee8cc1Swenshuai.xi     #else
522*53ee8cc1Swenshuai.xi 	dwDClk = MDrv_MFC_SetVCO(Panel_Dclk_Hz2(gmfcSysInfo.u16HTotal, gmfcSysInfo.u16VTotal, 60/*u8Inputfreq*/), gmfcSysInfo.u8PanelVfreq);
523*53ee8cc1Swenshuai.xi 
524*53ee8cc1Swenshuai.xi 	if (u8Inputfreq==50)
525*53ee8cc1Swenshuai.xi {
526*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8PanelIncVtotalFor50Hz)
527*53ee8cc1Swenshuai.xi 		{
528*53ee8cc1Swenshuai.xi 			wVTotal = wVTotal*6/5;
529*53ee8cc1Swenshuai.xi 		}
530*53ee8cc1Swenshuai.xi 		else
531*53ee8cc1Swenshuai.xi 		{
532*53ee8cc1Swenshuai.xi 			dwDClk = dwDClk*5/6;
533*53ee8cc1Swenshuai.xi 		}
534*53ee8cc1Swenshuai.xi 	}
535*53ee8cc1Swenshuai.xi        MDrv_MFC_Write2BytesINT(REG_2F02, wVTotal-1);
536*53ee8cc1Swenshuai.xi     #endif
537*53ee8cc1Swenshuai.xi 
538*53ee8cc1Swenshuai.xi     //printf("\r\nVTotal[%d]", wVTotal);
539*53ee8cc1Swenshuai.xi     //printf("\r\nDClk[%x]", dwDClk>>16);
540*53ee8cc1Swenshuai.xi     //printf("\r\n DClk1[%x]", dwDClk);
541*53ee8cc1Swenshuai.xi     //printf("u8Inputfreq=[%x]", u8Inputfreq);
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelType == _MINI_LVDS
544*53ee8cc1Swenshuai.xi 	 || gmfcSysInfo.u8PanelType == _RSDS
545*53ee8cc1Swenshuai.xi      || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP
546*53ee8cc1Swenshuai.xi      || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
547*53ee8cc1Swenshuai.xi     {
548*53ee8cc1Swenshuai.xi 	    if(gmfcSysInfo.u8PanelVfreq == 60)
549*53ee8cc1Swenshuai.xi 	    dwDClk = (U32)PANEL_DCLK_FACTOR_TCON_60 / dwDClk;
550*53ee8cc1Swenshuai.xi 	    else
551*53ee8cc1Swenshuai.xi 	    dwDClk = (U32)PANEL_DCLK_FACTOR_TCON / dwDClk;
552*53ee8cc1Swenshuai.xi 	}
553*53ee8cc1Swenshuai.xi 	else
554*53ee8cc1Swenshuai.xi 	    dwDClk = (U32)PANEL_DCLK_FACTOR / dwDClk;
555*53ee8cc1Swenshuai.xi 
556*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelChannel == _QUAD || gmfcSysInfo.u8PanelChannel == _QUAD_LR)
557*53ee8cc1Swenshuai.xi 	{
558*53ee8cc1Swenshuai.xi 	    //putstr("\r\nmsSetOutDClk(Quad)");
559*53ee8cc1Swenshuai.xi 	}
560*53ee8cc1Swenshuai.xi 	else if(gmfcSysInfo.u8PanelChannel == _DUAL)
561*53ee8cc1Swenshuai.xi               {
562*53ee8cc1Swenshuai.xi 	    //putstr("\r\nmsSetOutDClk(Dual)");
563*53ee8cc1Swenshuai.xi 	    dwDClk /= 2;
564*53ee8cc1Swenshuai.xi               }
565*53ee8cc1Swenshuai.xi 
566*53ee8cc1Swenshuai.xi     //printf("\r\nLPLL[%x]", dwDClk>>16);
567*53ee8cc1Swenshuai.xi     //printf("[%x]", dwDClk);
568*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write3Bytes(0x2A1E, dwDClk);
569*53ee8cc1Swenshuai.xi 
570*53ee8cc1Swenshuai.xi     if(enableFPLL) MDrv_MFC_WriteBit(0x2A18, 1, _BIT3); // PLL set chnage Toggle
571*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(0x2A0A, 0x24);// make frame lock faster
572*53ee8cc1Swenshuai.xi 
573*53ee8cc1Swenshuai.xi     MDrv_MFC_SetLvdsSSC(MFC_LVDS_SSC_SPAN_DEFAULT, MFC_LVDS_SSC_STEP_DEFAULT);
574*53ee8cc1Swenshuai.xi }
575*53ee8cc1Swenshuai.xi 
MDrv_MFC_SetLvdsSSC_INT(U16 u16KHz,U8 u8Percent)576*53ee8cc1Swenshuai.xi void MDrv_MFC_SetLvdsSSC_INT(U16 u16KHz, U8  u8Percent)
577*53ee8cc1Swenshuai.xi 	{
578*53ee8cc1Swenshuai.xi 	// SPAN value, recommend value is 30KHz ~ 40KHz
579*53ee8cc1Swenshuai.xi     // STEP percent value, recommend is under 3%
580*53ee8cc1Swenshuai.xi     U8  u8temp;
581*53ee8cc1Swenshuai.xi     U16 u16Span, u16Step;
582*53ee8cc1Swenshuai.xi     U32 u32Set;
583*53ee8cc1Swenshuai.xi     u8temp = MDrv_MFC_ReadByte(0x2A1B);
584*53ee8cc1Swenshuai.xi     if((MDrv_MFC_ReadByte(0x2C42)&_BIT5))
585*53ee8cc1Swenshuai.xi     {
586*53ee8cc1Swenshuai.xi     	MDrv_MFC_WriteBitINT(0x2A1B, _ENABLE, _BIT3);
587*53ee8cc1Swenshuai.xi         //Get SET
588*53ee8cc1Swenshuai.xi         u8temp  = MDrv_MFC_ReadByte (0x2A20);
589*53ee8cc1Swenshuai.xi         u32Set = u8temp;
590*53ee8cc1Swenshuai.xi         u8temp  = MDrv_MFC_ReadByte (0x2A1F);
591*53ee8cc1Swenshuai.xi         u32Set = (u32Set << 8) | u8temp;
592*53ee8cc1Swenshuai.xi         u8temp = MDrv_MFC_ReadByte (0x2A1E);
593*53ee8cc1Swenshuai.xi 
594*53ee8cc1Swenshuai.xi         u32Set = (u32Set << 8) | u8temp;
595*53ee8cc1Swenshuai.xi         u16Span = ((131072*10*216)/(u32Set*u16KHz/1000));
596*53ee8cc1Swenshuai.xi         u16Step = (u32Set*u8Percent)/((U32)u16Span*10000);
597*53ee8cc1Swenshuai.xi 
598*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByte (0x2A2E, (U8  )u16Step);  //write step 10 bits
599*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByteMaskINT (0x2A2F, (U8  )((u16Step&0x0300)>>8), 0x03);
600*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByte (0x2A30, (U8  )u16Span);  //write SPAN 14 bits
601*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteByteMaskINT (0x2A31, (U8  )((u16Span&0x3F00)>>8), 0x3F);
602*53ee8cc1Swenshuai.xi 	}
603*53ee8cc1Swenshuai.xi 	else
604*53ee8cc1Swenshuai.xi 	{
605*53ee8cc1Swenshuai.xi     	MDrv_MFC_WriteBitINT(0x2A1B, _DISABLE, _BIT3);
606*53ee8cc1Swenshuai.xi               }
607*53ee8cc1Swenshuai.xi 	}
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi #if 0
610*53ee8cc1Swenshuai.xi void msReportCurser(void)
611*53ee8cc1Swenshuai.xi {
612*53ee8cc1Swenshuai.xi WORD wTemp1;
613*53ee8cc1Swenshuai.xi BYTE i;
614*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(REG_2F40, 0x4B); //10
615*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(REG_2F41, 0x84); //81
616*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(REG_2F42, 0x00);
617*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(REG_2F43, 0x01);
618*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteBit(0x30A0, 1, _BIT1);
619*53ee8cc1Swenshuai.xi 
620*53ee8cc1Swenshuai.xi     for(i=0;i<=0x64;i++)
621*53ee8cc1Swenshuai.xi     {
622*53ee8cc1Swenshuai.xi            wTemp1 = MDrv_MFC_Read2Bytes(0x30A4);
623*53ee8cc1Swenshuai.xi         //printf(" \r\n data= %x", wTemp1);
624*53ee8cc1Swenshuai.xi              Delay1ms_Nop(0x10) ;
625*53ee8cc1Swenshuai.xi 
626*53ee8cc1Swenshuai.xi         if(wTemp1 != 0x00)
627*53ee8cc1Swenshuai.xi                printf(" \r\n different --------= %x", wTemp1);
628*53ee8cc1Swenshuai.xi 
629*53ee8cc1Swenshuai.xi     }
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi         printf(" \r\n end----- %x", wTemp1);
632*53ee8cc1Swenshuai.xi }
633*53ee8cc1Swenshuai.xi #endif
634*53ee8cc1Swenshuai.xi 
635*53ee8cc1Swenshuai.xi XDATA BYTE OPMReset=1;
msSetFPLLOutDClk(U8 ucVfreq,U8 ucVHzFrmT2,BOOL enableFPLL)636*53ee8cc1Swenshuai.xi void msSetFPLLOutDClk(U8 ucVfreq, U8 ucVHzFrmT2/*Set panel frequence from T2*/, BOOL enableFPLL)
637*53ee8cc1Swenshuai.xi {
638*53ee8cc1Swenshuai.xi     #if(PANEL_TYPE_SEL ==PNL_TVBOX_1080P_60HZ)
639*53ee8cc1Swenshuai.xi     	U16 wHTotal = 2200;
640*53ee8cc1Swenshuai.xi     #else
641*53ee8cc1Swenshuai.xi 	U16 wVTotal = gmfcSysInfo.u16VTotal;
642*53ee8cc1Swenshuai.xi     #endif
643*53ee8cc1Swenshuai.xi        U32 dwDClk ;
644*53ee8cc1Swenshuai.xi 
645*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByteINT(0x2C49, ucVfreq);
646*53ee8cc1Swenshuai.xi 
647*53ee8cc1Swenshuai.xi     if(enableFPLL&&OPMReset)
648*53ee8cc1Swenshuai.xi     {
649*53ee8cc1Swenshuai.xi 
650*53ee8cc1Swenshuai.xi         MDrv_MFC_SoftwareResetScalerInt();
651*53ee8cc1Swenshuai.xi         OPMReset=0;
652*53ee8cc1Swenshuai.xi     }
653*53ee8cc1Swenshuai.xi     if(ucVfreq>45&&ucVfreq<55)
654*53ee8cc1Swenshuai.xi     {
655*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteBitINT(0x2080, _DISABLE, _BIT0); // disable film32
656*53ee8cc1Swenshuai.xi     }
657*53ee8cc1Swenshuai.xi     else
658*53ee8cc1Swenshuai.xi     {
659*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteBitINT(0x2080, _ENABLE, _BIT0); // enable film32
660*53ee8cc1Swenshuai.xi     }
661*53ee8cc1Swenshuai.xi 
662*53ee8cc1Swenshuai.xi 
663*53ee8cc1Swenshuai.xi 	if(ucVHzFrmT2)
664*53ee8cc1Swenshuai.xi               {
665*53ee8cc1Swenshuai.xi 		gmfcSysInfo.u8PanelVfreq = ucVHzFrmT2;
666*53ee8cc1Swenshuai.xi 		msSetFPLLGainPhase();
667*53ee8cc1Swenshuai.xi               }
668*53ee8cc1Swenshuai.xi 
669*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteBitINT(0x2A18, 0, _BIT3); // PLL set chnage Toggle
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi     #if(ENABLE_USER_TOTAL)
672*53ee8cc1Swenshuai.xi         if (ucVfreq==50)
673*53ee8cc1Swenshuai.xi         {
674*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16HTotal = USER_HT_50;
675*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16VTotal = USER_VT_50;
676*53ee8cc1Swenshuai.xi         }
677*53ee8cc1Swenshuai.xi         else //60
678*53ee8cc1Swenshuai.xi         {
679*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16HTotal = USER_HT_60;
680*53ee8cc1Swenshuai.xi             gmfcSysInfo.u16VTotal = USER_VT_60;
681*53ee8cc1Swenshuai.xi         }
682*53ee8cc1Swenshuai.xi         dwDClk = msLPLL_SetVCO(FPLL_Panel_Dclk_Hz2(gmfcSysInfo.u16HTotal, gmfcSysInfo.u16VTotal, ucVfreq/*u8Inputfreq*/), gmfcSysInfo.u8PanelVfreq);
683*53ee8cc1Swenshuai.xi             MDrv_MFC_Write2BytesINT(REG_2F02, gmfcSysInfo.u16VTotal-1);
684*53ee8cc1Swenshuai.xi                   MDrv_MFC_Write2BytesINT(REG_2F04, gmfcSysInfo.u16HTotal-1);
685*53ee8cc1Swenshuai.xi     #else
686*53ee8cc1Swenshuai.xi 	dwDClk = msLPLL_SetVCO(FPLL_Panel_Dclk_Hz2(gmfcSysInfo.u16HTotal, gmfcSysInfo.u16VTotal, 60/*u8Inputfreq*/), gmfcSysInfo.u8PanelVfreq);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi 	if (ucVfreq==50)
689*53ee8cc1Swenshuai.xi 	{
690*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8PanelIncVtotalFor50Hz)
691*53ee8cc1Swenshuai.xi 		{
692*53ee8cc1Swenshuai.xi 			#if(PANEL_TYPE_SEL ==PNL_TVBOX_1080P_60HZ)
693*53ee8cc1Swenshuai.xi 				wHTotal = 2640;
694*53ee8cc1Swenshuai.xi 			#else
695*53ee8cc1Swenshuai.xi 				wVTotal = wVTotal*6/5;
696*53ee8cc1Swenshuai.xi 			#endif
697*53ee8cc1Swenshuai.xi 
698*53ee8cc1Swenshuai.xi 		}
699*53ee8cc1Swenshuai.xi 		else
700*53ee8cc1Swenshuai.xi 		{
701*53ee8cc1Swenshuai.xi 			dwDClk = dwDClk*5/6;
702*53ee8cc1Swenshuai.xi 		}
703*53ee8cc1Swenshuai.xi 	}
704*53ee8cc1Swenshuai.xi        MDrv_MFC_Write2BytesINT(REG_2F02, wVTotal-1);
705*53ee8cc1Swenshuai.xi     #endif
706*53ee8cc1Swenshuai.xi 
707*53ee8cc1Swenshuai.xi     //printf("\r\nVTotal[%d]", wVTotal);
708*53ee8cc1Swenshuai.xi     //printf("\r\nDClk[%x]", dwDClk>>16);
709*53ee8cc1Swenshuai.xi     //printf("\r\n DClk2[%x]", dwDClk);
710*53ee8cc1Swenshuai.xi     //printf("ucVfreq=[%x]", ucVfreq);
711*53ee8cc1Swenshuai.xi 
712*53ee8cc1Swenshuai.xi 
713*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelType == _MINI_LVDS
714*53ee8cc1Swenshuai.xi 	 || gmfcSysInfo.u8PanelType == _RSDS
715*53ee8cc1Swenshuai.xi      || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP
716*53ee8cc1Swenshuai.xi      || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
717*53ee8cc1Swenshuai.xi 	{
718*53ee8cc1Swenshuai.xi 	    if(gmfcSysInfo.u8PanelVfreq == 60)
719*53ee8cc1Swenshuai.xi 	    dwDClk = (U32)PANEL_DCLK_FACTOR_TCON_60 / dwDClk;
720*53ee8cc1Swenshuai.xi 	    else
721*53ee8cc1Swenshuai.xi 	    dwDClk = (U32)PANEL_DCLK_FACTOR_TCON / dwDClk;
722*53ee8cc1Swenshuai.xi 	}
723*53ee8cc1Swenshuai.xi 	else
724*53ee8cc1Swenshuai.xi 	    dwDClk = (U32)PANEL_DCLK_FACTOR / dwDClk;
725*53ee8cc1Swenshuai.xi 
726*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelChannel == _QUAD || gmfcSysInfo.u8PanelChannel == _QUAD_LR)
727*53ee8cc1Swenshuai.xi           {
728*53ee8cc1Swenshuai.xi 	    //putstr("\r\nmsSetOutDClk(Quad)");
729*53ee8cc1Swenshuai.xi           }
730*53ee8cc1Swenshuai.xi 	else if(gmfcSysInfo.u8PanelChannel == _DUAL)
731*53ee8cc1Swenshuai.xi           {
732*53ee8cc1Swenshuai.xi 	    //putstr("\r\nmsSetOutDClk(Dual)");
733*53ee8cc1Swenshuai.xi 	    dwDClk /= 2;
734*53ee8cc1Swenshuai.xi           }
735*53ee8cc1Swenshuai.xi 
736*53ee8cc1Swenshuai.xi     //printf("\r\nLPLL[%x]", dwDClk>>16);
737*53ee8cc1Swenshuai.xi     //printf("[%x]", dwDClk);
738*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write3BytesINT(0x2A1E, dwDClk);
739*53ee8cc1Swenshuai.xi     if(enableFPLL) MDrv_MFC_WriteBitINT(0x2A18, 1, _BIT3); // PLL set chnage Toggle
740*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(0x2A0A, 0x24);// make frame lock faster
741*53ee8cc1Swenshuai.xi 
742*53ee8cc1Swenshuai.xi 	MDrv_MFC_SetLvdsSSC_INT(MFC_LVDS_SSC_SPAN_DEFAULT, MFC_LVDS_SSC_STEP_DEFAULT);
743*53ee8cc1Swenshuai.xi }
744*53ee8cc1Swenshuai.xi 
745*53ee8cc1Swenshuai.xi #else
746*53ee8cc1Swenshuai.xi // [u8Vfreq] for detected input frequence
747*53ee8cc1Swenshuai.xi // [u8VHzFrmT2] for panel frequence setting by front side
748*53ee8cc1Swenshuai.xi // [enableFPLL] FPLL enable/disable
749*53ee8cc1Swenshuai.xi U8 u8OPMReset=1;
MDrv_MFC_SetOutDClk(U16 u16InputfreqX100,BOOL enableFPLL)750*53ee8cc1Swenshuai.xi void MDrv_MFC_SetOutDClk(U16 u16InputfreqX100, BOOL enableFPLL)
751*53ee8cc1Swenshuai.xi {
752*53ee8cc1Swenshuai.xi 	U16 u16VTotal = gmfcSysInfo.u16VTotal;
753*53ee8cc1Swenshuai.xi     U32 u32DClk ;
754*53ee8cc1Swenshuai.xi 
755*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(0x2C49, (U8)(u16InputfreqX100/100));
756*53ee8cc1Swenshuai.xi 
757*53ee8cc1Swenshuai.xi     if(enableFPLL&&u8OPMReset)
758*53ee8cc1Swenshuai.xi     {
759*53ee8cc1Swenshuai.xi         MDrv_MFC_SoftwareResetScalerInt();
760*53ee8cc1Swenshuai.xi         u8OPMReset=0;
761*53ee8cc1Swenshuai.xi     }
762*53ee8cc1Swenshuai.xi 
763*53ee8cc1Swenshuai.xi     if(u16InputfreqX100>4500&&u16InputfreqX100<5500)
764*53ee8cc1Swenshuai.xi     {
765*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteBit(0x2080, _DISABLE, _BIT0); // disable film32
766*53ee8cc1Swenshuai.xi     }
767*53ee8cc1Swenshuai.xi     else //if(u16InputfreqX100>=55&&u16InputfreqX100<65)
768*53ee8cc1Swenshuai.xi     {
769*53ee8cc1Swenshuai.xi         MDrv_MFC_WriteBit(0x2080, _ENABLE, _BIT0);  // enable film32
770*53ee8cc1Swenshuai.xi     }
771*53ee8cc1Swenshuai.xi 
772*53ee8cc1Swenshuai.xi 
773*53ee8cc1Swenshuai.xi 
774*53ee8cc1Swenshuai.xi //	MUTEX_LOCK();
775*53ee8cc1Swenshuai.xi     //printf("\n\n\n\n\nGet input freq from T2=[%d]\n\n\n\n\n", u16InputfreqX100);
776*53ee8cc1Swenshuai.xi 	if(!MDrv_MFC_GetInitStatus())
777*53ee8cc1Swenshuai.xi 	{
778*53ee8cc1Swenshuai.xi 		//MUTEX_UNLOCK();
779*53ee8cc1Swenshuai.xi 		return;
780*53ee8cc1Swenshuai.xi 	}
781*53ee8cc1Swenshuai.xi      MDrv_MFC_WriteBit(0x2A18, 0, _BIT3); // PLL set chnage Toggle
782*53ee8cc1Swenshuai.xi 	u32DClk = MDrv_MFC_SetVCO(
783*53ee8cc1Swenshuai.xi 			  	CalculateDecimal(
784*53ee8cc1Swenshuai.xi 			  					Panel_Dclk_Hz(gmfcSysInfo.u16HTotal,
785*53ee8cc1Swenshuai.xi 			  					  			  gmfcSysInfo.u16VTotal,
786*53ee8cc1Swenshuai.xi 			  					  			  60/*u8Inputfreq*/),
787*53ee8cc1Swenshuai.xi 			  					1000000
788*53ee8cc1Swenshuai.xi 			  					), gmfcSysInfo.u8PanelVfreq);
789*53ee8cc1Swenshuai.xi     #if 0
790*53ee8cc1Swenshuai.xi 	if (u8Inputfreq==50)
791*53ee8cc1Swenshuai.xi 	{
792*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8PanelIncVtotalFor50Hz)
793*53ee8cc1Swenshuai.xi           {
794*53ee8cc1Swenshuai.xi 			u16VTotal = u16VTotal*6/5;
795*53ee8cc1Swenshuai.xi           }
796*53ee8cc1Swenshuai.xi 	   else
797*53ee8cc1Swenshuai.xi           {
798*53ee8cc1Swenshuai.xi 			u32DClk = u32DClk*5/6;
799*53ee8cc1Swenshuai.xi           }
800*53ee8cc1Swenshuai.xi 	}
801*53ee8cc1Swenshuai.xi 	#else
802*53ee8cc1Swenshuai.xi     if (gmfcSysInfo.u8PanelIncVtotalFor50Hz)
803*53ee8cc1Swenshuai.xi     {
804*53ee8cc1Swenshuai.xi         u16VTotal = (U16)((U32)u16VTotal*6000/u16InputfreqX100);
805*53ee8cc1Swenshuai.xi     }
806*53ee8cc1Swenshuai.xi     else
807*53ee8cc1Swenshuai.xi     {
808*53ee8cc1Swenshuai.xi         u32DClk = u32DClk*u16InputfreqX100/6000;
809*53ee8cc1Swenshuai.xi     }
810*53ee8cc1Swenshuai.xi 	#endif
811*53ee8cc1Swenshuai.xi 	//MDrv_MFC_WriteByte(0x2A1A,MDrv_MFC_ReadByte(0x2A1A)|0x03);
812*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteBit(0x2A18, 0, _BIT3); // PLL set chnage Toggle
813*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x2F02, u16VTotal-1);
814*53ee8cc1Swenshuai.xi 
815*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelType == _MINI_LVDS
816*53ee8cc1Swenshuai.xi 	 || gmfcSysInfo.u8PanelType == _RSDS
817*53ee8cc1Swenshuai.xi      || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP
818*53ee8cc1Swenshuai.xi      || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
819*53ee8cc1Swenshuai.xi           {
820*53ee8cc1Swenshuai.xi 	    if(gmfcSysInfo.u8PanelVfreq == 60)
821*53ee8cc1Swenshuai.xi 	    	u32DClk = (U32)PANEL_DCLK_FACTOR_TCON_60 / u32DClk;
822*53ee8cc1Swenshuai.xi 	    else
823*53ee8cc1Swenshuai.xi 	    	u32DClk = (U32)PANEL_DCLK_FACTOR_TCON / u32DClk;
824*53ee8cc1Swenshuai.xi           }
825*53ee8cc1Swenshuai.xi           else
826*53ee8cc1Swenshuai.xi 	    u32DClk = (U32)PANEL_DCLK_FACTOR / u32DClk;
827*53ee8cc1Swenshuai.xi 
828*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelChannel == _QUAD || gmfcSysInfo.u8PanelChannel == _QUAD_LR)
829*53ee8cc1Swenshuai.xi           {
830*53ee8cc1Swenshuai.xi 	    //printf("\n u32DClk=%d", u32DClk);
831*53ee8cc1Swenshuai.xi         }
832*53ee8cc1Swenshuai.xi 	else if(gmfcSysInfo.u8PanelChannel == _DUAL)
833*53ee8cc1Swenshuai.xi 	{
834*53ee8cc1Swenshuai.xi 	    //printf("\nmsSetOutDClk(Dual)");
835*53ee8cc1Swenshuai.xi 	    u32DClk /= 2;
836*53ee8cc1Swenshuai.xi 	}
837*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write3Bytes(0x2A1E, u32DClk);
838*53ee8cc1Swenshuai.xi 	if(enableFPLL) MDrv_MFC_WriteBit(0x2A18, 1, _BIT3); // PLL set chnage Toggle
839*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteByte(0x2A0A, 0x24);// make frame lock faster
840*53ee8cc1Swenshuai.xi 
841*53ee8cc1Swenshuai.xi 	MDrv_MFC_SetLvdsSSC(MFC_LVDS_SSC_SPAN_DEFAULT, MFC_LVDS_SSC_STEP_DEFAULT);
842*53ee8cc1Swenshuai.xi 	//MUTEX_UNLOCK();
843*53ee8cc1Swenshuai.xi 	//printk("MDrv_MFC_SetOutDclk()\n");
844*53ee8cc1Swenshuai.xi }
845*53ee8cc1Swenshuai.xi #endif
846*53ee8cc1Swenshuai.xi 
847*53ee8cc1Swenshuai.xi 
MDrv_MFC_LPLL_Initialize(void)848*53ee8cc1Swenshuai.xi void MDrv_MFC_LPLL_Initialize(void)
849*53ee8cc1Swenshuai.xi {
850*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x2A5C,  0xffec);
851*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteBit(0x2A06, 0, _BIT5); // power gating
852*53ee8cc1Swenshuai.xi 
853*53ee8cc1Swenshuai.xi     if (gmfcSysInfo.u8PanelType == _MINI_LVDS || gmfcSysInfo.u8PanelType ==_MINI_LVDS_GIP || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
854*53ee8cc1Swenshuai.xi     {
855*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByte(0x2A03, 0x01); //div_2nd
856*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x2A06, 0, _BIT7); //dual to quad mode
857*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByte(0x2A02, 0x03); //div_1st
858*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x2A04, 1, _BIT0); // mini_en
859*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByteMask(0x2A56, 0, _BIT5 | _BIT4);  //sel_432m // v_by1_en
860*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x2A5C, 1, _BIT6); //sel_216m
861*53ee8cc1Swenshuai.xi 	    MDrv_MFC_WriteByteMask(0x2A5A, _BIT3, _BIT3|_BIT2);  //test bus = 8
862*53ee8cc1Swenshuai.xi     }
863*53ee8cc1Swenshuai.xi 	else
864*53ee8cc1Swenshuai.xi 	{
865*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8PanelChannel == _DUAL)
866*53ee8cc1Swenshuai.xi 		{
867*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x2A03, 0x04);   //div_1st
868*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteBit(0x2A06, 0, _BIT7); //dual to quad mode
869*53ee8cc1Swenshuai.xi 		}
870*53ee8cc1Swenshuai.xi 		else if (gmfcSysInfo.u8PanelChannel == _QUAD || gmfcSysInfo.u8PanelChannel == _QUAD_LR)
871*53ee8cc1Swenshuai.xi 		{
872*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x2A03, 0x04);
873*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteBit(0x2A06, (TwoChip_Func)?0:1, _BIT7); //dual to quad mode
874*53ee8cc1Swenshuai.xi         }
875*53ee8cc1Swenshuai.xi 		else if (gmfcSysInfo.u8PanelChannel == _V_BY1)
876*53ee8cc1Swenshuai.xi 		{
877*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x2A03, 0x01);
878*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteBit(0x2A06, 0, _BIT7); //dual to quad mode
879*53ee8cc1Swenshuai.xi 		}
880*53ee8cc1Swenshuai.xi 		else //single
881*53ee8cc1Swenshuai.xi 		{
882*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x2A03, 0x04);   //div_1st
883*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteBit(0x2A06, 0, _BIT7); //dual to quad mode
884*53ee8cc1Swenshuai.xi 		}
885*53ee8cc1Swenshuai.xi 	    MDrv_MFC_WriteByte(0x2A02, 0x03);
886*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x2A04, 0, _BIT0); // mini_en
887*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByteMask(0x2A56, 0, _BIT5 | _BIT4);  //sel_432m // v_by1_en
888*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x2A5C, 1, _BIT6); //sel_216m
889*53ee8cc1Swenshuai.xi 	    MDrv_MFC_WriteByteMask(0x2A5A, 0,  _BIT3|_BIT2);  //test bus = 0
890*53ee8cc1Swenshuai.xi 	    //printk("MDrv_MFC_InitializeLPLL()\n");
891*53ee8cc1Swenshuai.xi     }
892*53ee8cc1Swenshuai.xi }
893*53ee8cc1Swenshuai.xi 
894*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeDispLpll[]=
895*53ee8cc1Swenshuai.xi {
896*53ee8cc1Swenshuai.xi     {0x2A00, LPLL_INPUT_DIVIDER_1ST},
897*53ee8cc1Swenshuai.xi     {0x2A01, LPLL_INPUT_DIVIDER_2ND},
898*53ee8cc1Swenshuai.xi    	//{0x2A03, 0x04},
899*53ee8cc1Swenshuai.xi    	//{0x2A06, 0x02},
900*53ee8cc1Swenshuai.xi     {0x2A82,0x45}, //AuPll
901*53ee8cc1Swenshuai.xi     {0x2A83,0x01}, //AuPll
902*53ee8cc1Swenshuai.xi     {0x2AA8,0x10},//Bit4, AuPll Lock En
903*53ee8cc1Swenshuai.xi 	{0x2A0B, 0xC0}, // lock thr,
904*53ee8cc1Swenshuai.xi 	{0x2A0C, 0x00}, //0x01, // limit_d5d6d7
905*53ee8cc1Swenshuai.xi 	{0x2A0D, 0x00}, //0x80, // limit_d5d6d7
906*53ee8cc1Swenshuai.xi 	{0x2A0E, 0x01}, //0x06, // limit_d5d6d7
907*53ee8cc1Swenshuai.xi 	{0x2A0F, 0x00},
908*53ee8cc1Swenshuai.xi 	{0x2A12, 0x03}, // limit_d5d6d7
909*53ee8cc1Swenshuai.xi 	{0x2A14, 0x00},
910*53ee8cc1Swenshuai.xi     {0x2A15, 0xd0},//0x80, //j090105 for Tvbox fpll lock
911*53ee8cc1Swenshuai.xi 	{0x2A16, 0x00}, // {p_gain_prd[3:0]  ,i_gain_prd[3:0]}
912*53ee8cc1Swenshuai.xi     #if(CODEBASE_SEL == CODEBASE_51)
913*53ee8cc1Swenshuai.xi     {0x2A1B, 0x07}, // sel ovs as clock div
914*53ee8cc1Swenshuai.xi     #else
915*53ee8cc1Swenshuai.xi     {0x2A1B, 0x06}, // sel ovs as clock div (FPLL do not check no_signal flag when TTL input)
916*53ee8cc1Swenshuai.xi     #endif
917*53ee8cc1Swenshuai.xi 	{_END_OF_TBL_, _END_OF_TBL_},
918*53ee8cc1Swenshuai.xi };
919*53ee8cc1Swenshuai.xi 
920*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeDispTgen[]=
921*53ee8cc1Swenshuai.xi {
922*53ee8cc1Swenshuai.xi   #if(PANEL_TYPE_SEL ==PNL_TVBOX_1080P_60HZ)
923*53ee8cc1Swenshuai.xi 		{0x2F06, 0x10},
924*53ee8cc1Swenshuai.xi   #endif
925*53ee8cc1Swenshuai.xi 	{0x2F2E, 0x01}, // 0x07 -> test pattern
926*53ee8cc1Swenshuai.xi 	{_END_OF_TBL_, _END_OF_TBL_},
927*53ee8cc1Swenshuai.xi };
928*53ee8cc1Swenshuai.xi 
MDrv_MFC_InitializeDispTgen(void)929*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeDispTgen(void)
930*53ee8cc1Swenshuai.xi {
931*53ee8cc1Swenshuai.xi 	// DISP_TGEN
932*53ee8cc1Swenshuai.xi #if (CODEBASE_SEL == CODEBASE_51)
933*53ee8cc1Swenshuai.xi #if (REG_DIRECT_ACCESS_BY_I2C)
934*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8Preset == 0x01)
935*53ee8cc1Swenshuai.xi #endif
936*53ee8cc1Swenshuai.xi 		#endif
937*53ee8cc1Swenshuai.xi 	{
938*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F02, gmfcSysInfo.u16VTotal-1);
939*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F04, gmfcSysInfo.u16HTotal/((TwoChip_Func)?2:1)-1);
940*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F14, gmfcSysInfo.u16VStart);
941*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F16, gmfcSysInfo.u16VStart+gmfcSysInfo.u16Height-1);
942*53ee8cc1Swenshuai.xi 
943*53ee8cc1Swenshuai.xi 		#if ( TwoChip_Func == TwoChip_Master )
944*53ee8cc1Swenshuai.xi 			MDrv_MFC_Write2Bytes(0x2F18, gmfcSysInfo.u16HStart/2);
945*53ee8cc1Swenshuai.xi 			MDrv_MFC_Write2Bytes(0x2F1A, MDrv_MFC_DE_XEnd(gmfcSysInfo.u16Width));
946*53ee8cc1Swenshuai.xi 		#elif ( TwoChip_Func == TwoChip_Slave )
947*53ee8cc1Swenshuai.xi 			MDrv_MFC_Write2Bytes(0x2F18, gmfcSysInfo.u16HStart/2 -Cable_effect);
948*53ee8cc1Swenshuai.xi 			MDrv_MFC_Write2Bytes(0x2F1A, MDrv_MFC_DE_XEnd(gmfcSysInfo.u16Width) - Cable_effect );
949*53ee8cc1Swenshuai.xi 		#else
950*53ee8cc1Swenshuai.xi 			MDrv_MFC_Write2Bytes(0x2F18, gmfcSysInfo.u16HStart);
951*53ee8cc1Swenshuai.xi 			MDrv_MFC_Write2Bytes(0x2F1A, MDrv_MFC_DE_XEnd(gmfcSysInfo.u16Width));
952*53ee8cc1Swenshuai.xi 		#endif
953*53ee8cc1Swenshuai.xi 	}
954*53ee8cc1Swenshuai.xi 
955*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x2F1C, gmfcSysInfo.u16VStart);
956*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x2F1E, gmfcSysInfo.u16VStart+gmfcSysInfo.u16Height-1);
957*53ee8cc1Swenshuai.xi 
958*53ee8cc1Swenshuai.xi 	#if ( TwoChip_Func == TwoChip_Master )
959*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F20, gmfcSysInfo.u16HStart/2);
960*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F22, MDrv_MFC_DE_XEnd(gmfcSysInfo.u16Width));
961*53ee8cc1Swenshuai.xi 	#elif ( TwoChip_Func == TwoChip_Slave )
962*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F20, gmfcSysInfo.u16HStart/2 -Cable_effect);
963*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F22, 0x040d);//DE_XEnd2(gmfcSysInfo.u16Width -Cable_effect)); //j090508
964*53ee8cc1Swenshuai.xi 	#else
965*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F20, gmfcSysInfo.u16HStart);
966*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F22, MDrv_MFC_DE_XEnd(gmfcSysInfo.u16Width));
967*53ee8cc1Swenshuai.xi 	#endif
968*53ee8cc1Swenshuai.xi 
969*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteRegsTbl(0x2F00, tInitializeDispTgen); // initialize all of bank
970*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteRegsTbl(0x2A00, tInitializeDispLpll);
971*53ee8cc1Swenshuai.xi  	if((gmfcSysInfo.u16VStart+gmfcSysInfo.u16Height)> gmfcSysInfo.u16VTotal)
972*53ee8cc1Swenshuai.xi   		MDrv_MFC_Write2Bytes(0x2F06,  gmfcSysInfo.u16VStart+gmfcSysInfo.u16Height -gmfcSysInfo.u16VTotal);//Vtrig_Y
973*53ee8cc1Swenshuai.xi   	else
974*53ee8cc1Swenshuai.xi 		MDrv_MFC_Write2Bytes(0x2F06,  gmfcSysInfo.u16VStart+gmfcSysInfo.u16Height+31);//Vtrig_Y
975*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x2F08, (gmfcSysInfo.u16HStart+gmfcSysInfo.u16Width+15)/((TwoChip_Func)?2:1)); //Vtrig_X
976*53ee8cc1Swenshuai.xi 	MDrv_MFC_LPLL_Initialize();
977*53ee8cc1Swenshuai.xi 	MDrv_MFC_SetGainPhase();
978*53ee8cc1Swenshuai.xi 
979*53ee8cc1Swenshuai.xi 	#if(CODEBASE_SEL == CODEBASE_51)
980*53ee8cc1Swenshuai.xi     	msSetOutDClk(60, 0, TRUE);
981*53ee8cc1Swenshuai.xi  	#else
982*53ee8cc1Swenshuai.xi  		MDrv_MFC_SetInitStatus(1);
983*53ee8cc1Swenshuai.xi 		MDrv_MFC_SetOutDClk(6000, TRUE);
984*53ee8cc1Swenshuai.xi 		MDrv_MFC_SetInitStatus(0);
985*53ee8cc1Swenshuai.xi  	#endif
986*53ee8cc1Swenshuai.xi 
987*53ee8cc1Swenshuai.xi     #ifdef FrameVt_Change
988*53ee8cc1Swenshuai.xi     	MDrv_MFC_WriteBit(0x2A1A, 1, _BIT0); //
989*53ee8cc1Swenshuai.xi     #endif
990*53ee8cc1Swenshuai.xi 
991*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelType == _RSDS)
992*53ee8cc1Swenshuai.xi 	{
993*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByte(0x1E0E, 0x04); 	// [3:0]od clk:[2]=1:1/2,[1]=1:inverse,[0]=1:gating; [7:4]op2 sram;
994*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByteMask(0x3200, _BIT1|_BIT0, _BIT1|_BIT0); // for od path, [1]=1:od, =0:mft
995*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x3201, 1, _BIT1); // [1]=1, dual/quad mode
996*53ee8cc1Swenshuai.xi 		//MDrv_MFC_WriteByteMask(0x2A06, _BIT7|_BIT6, _BIT7|_BIT6); // [7]=1:LPLL double; [6]=1:LPLL type for Rsds
997*53ee8cc1Swenshuai.xi 	}
998*53ee8cc1Swenshuai.xi 	else if (gmfcSysInfo.u8PanelType == _TTL)
999*53ee8cc1Swenshuai.xi     {
1000*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByte(0x1E0E, 0x04); // [3:0]od clk:[2]=1:1/2,[1]=1:inverse,[0]=1:gating; [7:4]op2 sram;
1001*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByteMask(0x3200, _BIT1|_BIT0, _BIT1|_BIT0); // for od path, [1]=1:od, =0:mft
1002*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x3201, 0, _BIT1); // [1]=1, dual/quad mode
1003*53ee8cc1Swenshuai.xi 		//MDrv_MFC_WriteByteMask(0x2A06, _BIT7|_BIT1|_BIT0, _BIT7|_BIT1|_BIT0); // [7]=1:LPLL double;
1004*53ee8cc1Swenshuai.xi 	}
1005*53ee8cc1Swenshuai.xi 	else
1006*53ee8cc1Swenshuai.xi 	{
1007*53ee8cc1Swenshuai.xi 	  	if ( (gmfcSysInfo.u8LVDSChannel==_SINGLE && gmfcSysInfo.u8PanelChannel==_SINGLE))
1008*53ee8cc1Swenshuai.xi 		{
1009*53ee8cc1Swenshuai.xi 		  	MDrv_MFC_WriteByte(0x1E0E, 0x04); // [3:0]od clk:[2]=1:1/2,[1]=1:inverse,[0]=1:gating; [7:4]op2 sram;
1010*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByteMask(0x3200, _BIT0, _BIT1|_BIT0); // for od path, [1]=1:od, =0:mft
1011*53ee8cc1Swenshuai.xi 		}
1012*53ee8cc1Swenshuai.xi 		else
1013*53ee8cc1Swenshuai.xi 		{
1014*53ee8cc1Swenshuai.xi 		    // calvin 1222, 0x00->0x02
1015*53ee8cc1Swenshuai.xi             if (gmfcSysInfo.u8PanelType == _MINI_LVDS || gmfcSysInfo.u8PanelType ==_MINI_LVDS_GIP || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
1016*53ee8cc1Swenshuai.xi             {
1017*53ee8cc1Swenshuai.xi     			MDrv_MFC_WriteByte(0x1E0E, 0x02); // [3:0]od clk:[2]=1:1/2,[1]=1:inverse,[0]=1:gating; [7:4]op2 sram;
1018*53ee8cc1Swenshuai.xi                 if(S7M) // for DPM
1019*53ee8cc1Swenshuai.xi                 {
1020*53ee8cc1Swenshuai.xi     			    MDrv_MFC_WriteBit(0x1E22, 0, _BIT1);  // DPM gpio1 enable.
1021*53ee8cc1Swenshuai.xi     			    MDrv_MFC_WriteBit(0x1E1A, 1, _BIT1);  // DPM enable.
1022*53ee8cc1Swenshuai.xi     			    MDrv_MFC_WriteBit(0x1E22, 0, _BIT3);  // gpio3 enable.
1023*53ee8cc1Swenshuai.xi     			    MDrv_MFC_WriteBit(0x1E1A, 0, _BIT3);  // gpio3 set to Low.
1024*53ee8cc1Swenshuai.xi                 }
1025*53ee8cc1Swenshuai.xi             }
1026*53ee8cc1Swenshuai.xi 			else
1027*53ee8cc1Swenshuai.xi             {
1028*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByte(0x1E0E, 0x00); // [3:0]od clk:[2]=1:1/2,[1]=1:inverse,[0]=1:gating; [7:4]op2 sram;
1029*53ee8cc1Swenshuai.xi             }
1030*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByteMask(0x3200, _BIT0, _BIT1|_BIT0); // for od path, [1]=1:od, =0:mft
1031*53ee8cc1Swenshuai.xi 
1032*53ee8cc1Swenshuai.xi             #if(PANEL_TYPE_SEL == PNL_INN26_WXGA_120HZ)
1033*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByte(0x1E0E, 0x00);
1034*53ee8cc1Swenshuai.xi             #endif
1035*53ee8cc1Swenshuai.xi 		}
1036*53ee8cc1Swenshuai.xi 
1037*53ee8cc1Swenshuai.xi 	  	if ((gmfcSysInfo.u8LVDSChannel==_SINGLE && gmfcSysInfo.u8PanelChannel==_DUAL)
1038*53ee8cc1Swenshuai.xi 	  	|| (gmfcSysInfo.u8LVDSChannel==_DUAL && (gmfcSysInfo.u8PanelChannel==_QUAD || gmfcSysInfo.u8PanelChannel==_QUAD_LR)))
1039*53ee8cc1Swenshuai.xi 	  	{
1040*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteBit(0x3201, 1, _BIT1); // [1]=1, dual/quad mode
1041*53ee8cc1Swenshuai.xi 			//	MDrv_MFC_WriteByteMask(0x2A06, _BIT7, _BIT7|_BIT6); // [7]=1:LPLL double; [6]=0:LPLL type for Lvds
1042*53ee8cc1Swenshuai.xi             #if ( (PANEL_TYPE_SEL == PNL_LC320WXD_WXGA_120HZ) || (PANEL_TYPE_SEL == PNL_LC150OLED_WXGA_120HZ) || (PANEL_TYPE_SEL == PNL_LC150OLED_WXGA_60HZ)  )
1043*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteBit(0x3201, 0, _BIT1);
1044*53ee8cc1Swenshuai.xi 				//   MDrv_MFC_WriteByteMask(0x2A06, 0, _BIT7|_BIT6);
1045*53ee8cc1Swenshuai.xi             #endif
1046*53ee8cc1Swenshuai.xi             #ifdef Mst_func_3DDemo
1047*53ee8cc1Swenshuai.xi 				//  msWriteBit(0x2A06, 0, _BIT7);
1048*53ee8cc1Swenshuai.xi             #endif
1049*53ee8cc1Swenshuai.xi         }
1050*53ee8cc1Swenshuai.xi 	 	else
1051*53ee8cc1Swenshuai.xi 	  	{
1052*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteBit(0x3201, 0, _BIT1);
1053*53ee8cc1Swenshuai.xi 			//MDrv_MFC_WriteByteMask(0x2A06, 0, _BIT7|_BIT6); // [7]=0:LPLL normal; [6]=0:LPLL type for Lvds
1054*53ee8cc1Swenshuai.xi 	  	}
1055*53ee8cc1Swenshuai.xi 
1056*53ee8cc1Swenshuai.xi         if ((gmfcSysInfo.u8PanelType == _MINI_LVDS) || (gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP) ||(gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5))
1057*53ee8cc1Swenshuai.xi 		{
1058*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x2A05, 0x28);
1059*53ee8cc1Swenshuai.xi 			//MDrv_MFC_WriteByte(0x2A04, 0x01);
1060*53ee8cc1Swenshuai.xi             MDrv_MFC_WriteByteMask(0x3275, _BIT7 , _BIT7);  //j080912 for power consumption
1061*53ee8cc1Swenshuai.xi 		}
1062*53ee8cc1Swenshuai.xi         //else if ( (gmfcSysInfo.u8PanelType == _LVDS) || (gmfcSysInfo.u8PanelType == _TTL) )
1063*53ee8cc1Swenshuai.xi         	//MDrv_MFC_WriteByteMask(0x2A04, 0 , _BIT0);  //j080912 for power consumption
1064*53ee8cc1Swenshuai.xi     }
1065*53ee8cc1Swenshuai.xi 
1066*53ee8cc1Swenshuai.xi 	if(gmfcMiuBaseAddr.u8GammaMode == GAMMA_OFF)
1067*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByteMask(0x1E0E, _BIT6, _BIT6); //disable op2_sramclk
1068*53ee8cc1Swenshuai.xi 
1069*53ee8cc1Swenshuai.xi     //printk("MDrv_MFC_InitializeDispTgen()\n");
1070*53ee8cc1Swenshuai.xi }
1071*53ee8cc1Swenshuai.xi 
1072*53ee8cc1Swenshuai.xi 
1073*53ee8cc1Swenshuai.xi /*
1074*53ee8cc1Swenshuai.xi LVDS output selection:
1075*53ee8cc1Swenshuai.xi 0x320B[6]TI mode, [5]=0:pair shift, [3]Polarity swap, [2]pair swap
1076*53ee8cc1Swenshuai.xi 0x320A=0x08:8bits TI mode, 0x0C:6bits TI mode, 0x00:others
1077*53ee8cc1Swenshuai.xi 0x321F:LVDS channel swap,
1078*53ee8cc1Swenshuai.xi [1:0]Aout, [3:2]Bout, [5:4]Cout, [7:6]Dout,
1079*53ee8cc1Swenshuai.xi '00b'Ain,  '01b'Bin,  '10b'Cin,  '11b'Din
1080*53ee8cc1Swenshuai.xi */
1081*53ee8cc1Swenshuai.xi //_RSDS
1082*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeScTop1[]=
1083*53ee8cc1Swenshuai.xi {
1084*53ee8cc1Swenshuai.xi 	{0x3205, 0x08}, // Rsds mode
1085*53ee8cc1Swenshuai.xi 	{0x320B, 0x20}, // lvds THine mode(h5[14]=0)
1086*53ee8cc1Swenshuai.xi 
1087*53ee8cc1Swenshuai.xi 	{0x3220, 0x55}, // set output configure to rsds data output = "01" for 26 channel
1088*53ee8cc1Swenshuai.xi 	{0x3221, 0x55}, // rsds clk output = "11"
1089*53ee8cc1Swenshuai.xi 	{0x3222, 0x57}, //
1090*53ee8cc1Swenshuai.xi 	{0x3223, 0x55}, //
1091*53ee8cc1Swenshuai.xi 	{0x3224, 0x55}, //
1092*53ee8cc1Swenshuai.xi 	{0x3225, 0x5d}, //
1093*53ee8cc1Swenshuai.xi 	{0x3226, 0x05}, //
1094*53ee8cc1Swenshuai.xi 	{0x3228, 0xff}, // set ttl_oe = "11" when rsds output for 26 channel
1095*53ee8cc1Swenshuai.xi 	{0x3229, 0xff}, //
1096*53ee8cc1Swenshuai.xi 	{0x322A, 0xff}, //
1097*53ee8cc1Swenshuai.xi 	{0x322B, 0xff}, //
1098*53ee8cc1Swenshuai.xi 	{0x322C, 0xff}, //
1099*53ee8cc1Swenshuai.xi 	{0x322D, 0xff}, //
1100*53ee8cc1Swenshuai.xi 	{0x322E, 0x0f}, //
1101*53ee8cc1Swenshuai.xi 	{0x3230, 0x00}, // reg_ext_en = 26'h0
1102*53ee8cc1Swenshuai.xi 	{0x3231, 0x00}, //
1103*53ee8cc1Swenshuai.xi 	{0x3232, 0x00}, //
1104*53ee8cc1Swenshuai.xi 	{0x3233, 0x00}, //
1105*53ee8cc1Swenshuai.xi 	{0x324E, 0x0f}, // enable mod_atop IB,CLK
1106*53ee8cc1Swenshuai.xi 	{0x324F, 0x10},
1107*53ee8cc1Swenshuai.xi 	{0x3250, 0x00}, // 0x4c,
1108*53ee8cc1Swenshuai.xi 	{0x3253, 0x80}, // enable da bias
1109*53ee8cc1Swenshuai.xi {_END_OF_TBL_, _END_OF_TBL_},
1110*53ee8cc1Swenshuai.xi };
1111*53ee8cc1Swenshuai.xi 
1112*53ee8cc1Swenshuai.xi //Pre-Emphasis setting (for Gip)
1113*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tIniTconCommPreEmphasis[]=
1114*53ee8cc1Swenshuai.xi {
1115*53ee8cc1Swenshuai.xi 	{0x3242, 0xff},
1116*53ee8cc1Swenshuai.xi 	{0x3243, 0xff},
1117*53ee8cc1Swenshuai.xi 	{0x3244, 0xff},
1118*53ee8cc1Swenshuai.xi 	{0x3245, 0x03},
1119*53ee8cc1Swenshuai.xi 
1120*53ee8cc1Swenshuai.xi    // {0x324E, 0x0f}, //enable IB, CLK
1121*53ee8cc1Swenshuai.xi    // {0x324F, 0x00}, //enable IB, CLK //George recommand 090722
1122*53ee8cc1Swenshuai.xi 	{0x3268, 0xff},
1123*53ee8cc1Swenshuai.xi 	{0x3269, 0x03},
1124*53ee8cc1Swenshuai.xi     {_END_OF_TBL_, _END_OF_TBL_},
1125*53ee8cc1Swenshuai.xi };
1126*53ee8cc1Swenshuai.xi 
1127*53ee8cc1Swenshuai.xi // _MINI_LVDS
1128*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeScTop2_Comm[]=
1129*53ee8cc1Swenshuai.xi {
1130*53ee8cc1Swenshuai.xi 	{0x3200, 0x01}, //[9]quad mode
1131*53ee8cc1Swenshuai.xi 	{0x3201, 0x02},
1132*53ee8cc1Swenshuai.xi 	{0x3204, 0x00}, //en CRC
1133*53ee8cc1Swenshuai.xi 	{0x3205, 0x80},
1134*53ee8cc1Swenshuai.xi 	{0x320A, 0x00}, //[14]LVDS TI mode, [13]pdp10 bit
1135*53ee8cc1Swenshuai.xi 	{0x320B, 0x20},
1136*53ee8cc1Swenshuai.xi 	{0x3220, 0x55},
1137*53ee8cc1Swenshuai.xi 	{0x3221, 0x57},
1138*53ee8cc1Swenshuai.xi 	//{0x3222, 0x5D},//0x59,//[3:2]=10, use mini-lvds clock configuration for right---I-Chang 09092008 //j090210
1139*53ee8cc1Swenshuai.xi 	{0x3223, 0x54},
1140*53ee8cc1Swenshuai.xi 	{0x3224, 0x5D},
1141*53ee8cc1Swenshuai.xi 	//{0x3225, 0x75},//0x65,//[13:12]=10, use mini-lvds clock configuration for left---I-Chang 09092008//j090210
1142*53ee8cc1Swenshuai.xi 	{0x3226, 0x00},
1143*53ee8cc1Swenshuai.xi 	{0x3227, 0x00},
1144*53ee8cc1Swenshuai.xi 	{0x3228, 0xff},
1145*53ee8cc1Swenshuai.xi 	{0x3229, 0xff},
1146*53ee8cc1Swenshuai.xi 	{0x322A, 0xff},
1147*53ee8cc1Swenshuai.xi 	{0x322B, 0xff},
1148*53ee8cc1Swenshuai.xi 	{0x322C, 0xff},
1149*53ee8cc1Swenshuai.xi 	{0x322D, 0xff},
1150*53ee8cc1Swenshuai.xi 	{0x322E, 0x0f},
1151*53ee8cc1Swenshuai.xi 	{0x322F, 0x00},
1152*53ee8cc1Swenshuai.xi 	{0x3230, 0xff},
1153*53ee8cc1Swenshuai.xi 	{0x3231, 0xff},
1154*53ee8cc1Swenshuai.xi 	{0x3232, 0xff},
1155*53ee8cc1Swenshuai.xi 	{0x3233, 0x03},
1156*53ee8cc1Swenshuai.xi 
1157*53ee8cc1Swenshuai.xi     {0x3242, 0xff},
1158*53ee8cc1Swenshuai.xi     {0x3243, 0xff},
1159*53ee8cc1Swenshuai.xi     {0x3244, 0xff},
1160*53ee8cc1Swenshuai.xi     {0x3245, 0x03},
1161*53ee8cc1Swenshuai.xi 	{0x3246, 0x00},
1162*53ee8cc1Swenshuai.xi 	{0x3247, 0x00},
1163*53ee8cc1Swenshuai.xi 	{0x3248, 0x00},
1164*53ee8cc1Swenshuai.xi 	{0x3249, 0x00},
1165*53ee8cc1Swenshuai.xi 	{0x324E, 0x0f}, //enable IB, CLK
1166*53ee8cc1Swenshuai.xi 	{0x324F, 0x31}, //enable IB, CLK
1167*53ee8cc1Swenshuai.xi 	{0x3250, (0x48|MOD_POWER_ON_AFTER_INIT)}, //swing
1168*53ee8cc1Swenshuai.xi 	{0x3251, 0x00},
1169*53ee8cc1Swenshuai.xi 	{0x3252, 0x00}, //enable da bias
1170*53ee8cc1Swenshuai.xi 	{0x3253, 0x80},
1171*53ee8cc1Swenshuai.xi 	{0x3254, 0x04}, //ch26~35 type
1172*53ee8cc1Swenshuai.xi 	{0x3255, 0x00},
1173*53ee8cc1Swenshuai.xi 	{0x3256, 0x00}, //ch26~35 type
1174*53ee8cc1Swenshuai.xi 	{0x3257, 0x00},
1175*53ee8cc1Swenshuai.xi 	{0x3260, 0xff}, //reg_gpo_oez_ch26_35---------------------------0826_I-Chang
1176*53ee8cc1Swenshuai.xi 	{0x3261, 0xff},
1177*53ee8cc1Swenshuai.xi 	{0x3262, 0x0f}, //reg_gpo_oez_ch26_35
1178*53ee8cc1Swenshuai.xi 	{0x3263, 0x00},
1179*53ee8cc1Swenshuai.xi 	{0x3264, 0x00}, //ch26~35 extern enable
1180*53ee8cc1Swenshuai.xi 	{0x3265, 0x00},
1181*53ee8cc1Swenshuai.xi 	{0x3270, 0x80}, //[7]reg_tcon_en [4]reg_tcon_swap---------------------------0826_I-Chang
1182*53ee8cc1Swenshuai.xi 	{0x3271, 0x00},
1183*53ee8cc1Swenshuai.xi 	{0x3272, 0x00},
1184*53ee8cc1Swenshuai.xi 	{0x3273, 0xc6}, //[15:8]reg_mini_ch_swap
1185*53ee8cc1Swenshuai.xi 	{0x3276, 0xFC},
1186*53ee8cc1Swenshuai.xi 	{_END_OF_TBL_, _END_OF_TBL_},
1187*53ee8cc1Swenshuai.xi };
1188*53ee8cc1Swenshuai.xi 
1189*53ee8cc1Swenshuai.xi //  _MINI_LVDS_GIP
1190*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeScTop2_GIP[]=
1191*53ee8cc1Swenshuai.xi {
1192*53ee8cc1Swenshuai.xi 	{0x3200, 0x01}, //[9]quad mode
1193*53ee8cc1Swenshuai.xi 	{0x3201, 0x02},
1194*53ee8cc1Swenshuai.xi 	{0x3204, 0x00}, //en CRC
1195*53ee8cc1Swenshuai.xi 	{0x3205, 0x80},
1196*53ee8cc1Swenshuai.xi 	{0x320A, 0x00}, //[14]LVDS TI mode, [13]pdp10 bit
1197*53ee8cc1Swenshuai.xi 	{0x320B, 0x20},
1198*53ee8cc1Swenshuai.xi 
1199*53ee8cc1Swenshuai.xi 	{0x3220, 0x55},
1200*53ee8cc1Swenshuai.xi 	{0x3221, 0x57},
1201*53ee8cc1Swenshuai.xi 	{0x3222, 0x04},
1202*53ee8cc1Swenshuai.xi 	{0x3223, 0x54},
1203*53ee8cc1Swenshuai.xi 	{0x3224, 0x5d},
1204*53ee8cc1Swenshuai.xi 	{0x3225, 0x11},
1205*53ee8cc1Swenshuai.xi 	{0x3226, 0x00},
1206*53ee8cc1Swenshuai.xi 	{0x3227, 0x00},
1207*53ee8cc1Swenshuai.xi 	{0x3228, 0xff},
1208*53ee8cc1Swenshuai.xi 	{0x3229, 0xff},
1209*53ee8cc1Swenshuai.xi 	{0x322A, 0xff},
1210*53ee8cc1Swenshuai.xi 	{0x322B, 0xff},
1211*53ee8cc1Swenshuai.xi 	{0x322C, 0xff},
1212*53ee8cc1Swenshuai.xi 	{0x322D, 0xff},
1213*53ee8cc1Swenshuai.xi 	{0x322E, 0x0f},
1214*53ee8cc1Swenshuai.xi 	{0x322F, 0x00},
1215*53ee8cc1Swenshuai.xi 
1216*53ee8cc1Swenshuai.xi 	{0x3240, 0x10}, //[15]reg_mini [7]msb_p [6]msb_s [4]data_swap
1217*53ee8cc1Swenshuai.xi 	{0x3241, 0x80},
1218*53ee8cc1Swenshuai.xi 	{0x3246, 0x00},
1219*53ee8cc1Swenshuai.xi 	{0x3247, 0x00},
1220*53ee8cc1Swenshuai.xi 	{0x3248, 0x00},
1221*53ee8cc1Swenshuai.xi 	{0x3249, 0x00},
1222*53ee8cc1Swenshuai.xi     //{0x324E, 0x0f}, //enable IB, CLK
1223*53ee8cc1Swenshuai.xi     //{0x324F, 0x4c}, //enable IB, CLK //George recommand 090722
1224*53ee8cc1Swenshuai.xi 	{0x3250, (0x48|MOD_POWER_ON_AFTER_INIT)},//0x52, //swing
1225*53ee8cc1Swenshuai.xi     {0x3253, 0xc0},//0x81,
1226*53ee8cc1Swenshuai.xi 
1227*53ee8cc1Swenshuai.xi 	{0x3251, 0x00},
1228*53ee8cc1Swenshuai.xi     {0x3252, 0xc0}, //enable da bias //George recommand 090722
1229*53ee8cc1Swenshuai.xi 	{0x3254, 0x04}, //ch26~35 type
1230*53ee8cc1Swenshuai.xi 	{0x3255, 0x00},
1231*53ee8cc1Swenshuai.xi 	{0x3256, 0x00}, //ch26~35 type
1232*53ee8cc1Swenshuai.xi 	{0x3257, 0x00},
1233*53ee8cc1Swenshuai.xi 	{0x3260, 0xff}, //reg_gpo_oez_ch26_35---------------------------0826_I-Chang
1234*53ee8cc1Swenshuai.xi 	{0x3261, 0xff},
1235*53ee8cc1Swenshuai.xi 	{0x3262, 0x0f}, //reg_gpo_oez_ch26_35
1236*53ee8cc1Swenshuai.xi 	{0x3263, 0x00},
1237*53ee8cc1Swenshuai.xi 	{0x3264, 0x00}, //ch26~35 extern enable
1238*53ee8cc1Swenshuai.xi 	{0x3265, 0x00},
1239*53ee8cc1Swenshuai.xi 	//{0x3270, 0x80}, //[7]reg_tcon_en [4]reg_tcon_swap-----0826_I-Chang //j081031
1240*53ee8cc1Swenshuai.xi 	{0x3271, 0x00},
1241*53ee8cc1Swenshuai.xi 	{0x3272, 0x00},
1242*53ee8cc1Swenshuai.xi 	{0x3273, 0xc6}, //[15:8]reg_mini_ch_swap
1243*53ee8cc1Swenshuai.xi {_END_OF_TBL_, _END_OF_TBL_},
1244*53ee8cc1Swenshuai.xi };
1245*53ee8cc1Swenshuai.xi 
1246*53ee8cc1Swenshuai.xi //TTL
1247*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeScTop3[]=
1248*53ee8cc1Swenshuai.xi {
1249*53ee8cc1Swenshuai.xi 	{0x3220, 0x00}, // set output configure to TTL output
1250*53ee8cc1Swenshuai.xi 	{0x3221, 0x00}, //
1251*53ee8cc1Swenshuai.xi 	{0x3222, 0x00}, //
1252*53ee8cc1Swenshuai.xi 	{0x3223, 0x00}, //
1253*53ee8cc1Swenshuai.xi 	{0x3224, 0x00}, //
1254*53ee8cc1Swenshuai.xi 	{0x3225, 0x00}, //
1255*53ee8cc1Swenshuai.xi 	{0x3226, 0x00}, //
1256*53ee8cc1Swenshuai.xi 
1257*53ee8cc1Swenshuai.xi 	{0x3228, 0xff}, // set ttl_oe = "11" when lvds output for 26 channel
1258*53ee8cc1Swenshuai.xi 	{0x3229, 0xff}, //
1259*53ee8cc1Swenshuai.xi 	{0x322A, 0xff}, //
1260*53ee8cc1Swenshuai.xi 	{0x322B, 0xff}, //
1261*53ee8cc1Swenshuai.xi 	{0x322C, 0xff}, //
1262*53ee8cc1Swenshuai.xi 	{0x322D, 0xff}, //
1263*53ee8cc1Swenshuai.xi 	{0x322E, 0x0f}, //
1264*53ee8cc1Swenshuai.xi 
1265*53ee8cc1Swenshuai.xi 	{0x3230, 0x00}, // reg_ext_en = 26'h0
1266*53ee8cc1Swenshuai.xi 	{0x3231, 0x00}, //
1267*53ee8cc1Swenshuai.xi 	{0x3232, 0x00}, //
1268*53ee8cc1Swenshuai.xi 	{0x3233, 0x00}, //
1269*53ee8cc1Swenshuai.xi 	{0x3234, 0xff}, // reg_ext_en = 26'h0
1270*53ee8cc1Swenshuai.xi 	{0x3235, 0xff}, //
1271*53ee8cc1Swenshuai.xi 	{0x3236, 0xff}, //
1272*53ee8cc1Swenshuai.xi 	{0x3237, 0x03}, //
1273*53ee8cc1Swenshuai.xi 
1274*53ee8cc1Swenshuai.xi 	{0x324E, 0x0f}, // enable mod_atop IB,CLK
1275*53ee8cc1Swenshuai.xi 	{0x3250, 0x4c}, // Bruce for Ursa 2 new setting; Ursa 1 is null register.
1276*53ee8cc1Swenshuai.xi 	{0x3253, 0x80}, // enable da bias
1277*53ee8cc1Swenshuai.xi 
1278*53ee8cc1Swenshuai.xi 	{0x3254, 0x00},
1279*53ee8cc1Swenshuai.xi 	{0x3255, 0x00},
1280*53ee8cc1Swenshuai.xi 	{0x3256, 0x00},
1281*53ee8cc1Swenshuai.xi     {0x3257, 0x00},
1282*53ee8cc1Swenshuai.xi 	{0x3264, 0x00},
1283*53ee8cc1Swenshuai.xi 	{0x3265, 0x00},
1284*53ee8cc1Swenshuai.xi 	{0x3266, 0xFF},
1285*53ee8cc1Swenshuai.xi     {0x3267, 0x03},
1286*53ee8cc1Swenshuai.xi     {_END_OF_TBL_, _END_OF_TBL_},
1287*53ee8cc1Swenshuai.xi };
1288*53ee8cc1Swenshuai.xi 
1289*53ee8cc1Swenshuai.xi //LVDS
1290*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeScTop4[]=
1291*53ee8cc1Swenshuai.xi {
1292*53ee8cc1Swenshuai.xi #if (CODEBASE_SEL == CODEBASE_51 || CODEBASE_SEL==CODEBASE_UTOPIA)
1293*53ee8cc1Swenshuai.xi     {0x3220, 0x55}, // set output configure to lvds output = "01" for 26 channel
1294*53ee8cc1Swenshuai.xi 	{0x3221, 0x55}, //
1295*53ee8cc1Swenshuai.xi 	{0x3222, 0x55}, //
1296*53ee8cc1Swenshuai.xi 	{0x3223, 0x55}, //
1297*53ee8cc1Swenshuai.xi 	{0x3224, 0x55}, //
1298*53ee8cc1Swenshuai.xi 	{0x3225, 0x55}, //
1299*53ee8cc1Swenshuai.xi 	{0x3226, 0x05}, //
1300*53ee8cc1Swenshuai.xi #endif
1301*53ee8cc1Swenshuai.xi 	{0x3228, 0xff}, // set ttl_oe = "11" when lvds output for 26 channel
1302*53ee8cc1Swenshuai.xi 	{0x3229, 0xff}, //
1303*53ee8cc1Swenshuai.xi 	{0x322A, 0xff}, //
1304*53ee8cc1Swenshuai.xi 	{0x322B, 0xff}, //
1305*53ee8cc1Swenshuai.xi 	{0x322C, 0xff}, //
1306*53ee8cc1Swenshuai.xi 	{0x322D, 0xff}, //
1307*53ee8cc1Swenshuai.xi 	{0x322E, 0x0f}, //
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi 	{0x3230, 0x00}, // reg_ext_en = 26'h0
1310*53ee8cc1Swenshuai.xi 	{0x3231, 0x00}, //
1311*53ee8cc1Swenshuai.xi 	{0x3232, 0x00}, //
1312*53ee8cc1Swenshuai.xi 	{0x3233, 0x00}, //
1313*53ee8cc1Swenshuai.xi 	{0x324E, 0x0f}, // enable mod_atop IB,CLK
1314*53ee8cc1Swenshuai.xi 	{0x3250, (0x46|MOD_POWER_ON_AFTER_INIT)}, //swing
1315*53ee8cc1Swenshuai.xi 	{0x3253, 0x80}, // enable da bias
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi 	{0x3254, 0x55}, // Bruce for Ursa 2
1318*53ee8cc1Swenshuai.xi 	{0x3255, 0x55}, // Bruce for Ursa 2
1319*53ee8cc1Swenshuai.xi 	{0x3256, 0x05}, // Bruce for Ursa 2
1320*53ee8cc1Swenshuai.xi     {_END_OF_TBL_, _END_OF_TBL_},
1321*53ee8cc1Swenshuai.xi };
1322*53ee8cc1Swenshuai.xi 
MDrv_MFC_InitializeScTop(void)1323*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeScTop(void)
1324*53ee8cc1Swenshuai.xi {
1325*53ee8cc1Swenshuai.xi 	MDrv_MFC_WriteBit(0x30BF, 1, _BIT6);
1326*53ee8cc1Swenshuai.xi 
1327*53ee8cc1Swenshuai.xi     #if(CODEBASE_SEL == CODEBASE_LINUX)
1328*53ee8cc1Swenshuai.xi         if((gmfcSysInfo.u8PanelType == _MINI_LVDS
1329*53ee8cc1Swenshuai.xi             || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP
1330*53ee8cc1Swenshuai.xi               || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
1331*53ee8cc1Swenshuai.xi           && (gmfcSysInfo.u8PanelBitNum == _8BITS)
1332*53ee8cc1Swenshuai.xi           )
1333*53ee8cc1Swenshuai.xi         {
1334*53ee8cc1Swenshuai.xi             MDrv_MFC_Write2Bytes(0x30C4, 0x0100);
1335*53ee8cc1Swenshuai.xi             MDrv_MFC_Write2Bytes(0x30C6, 0x0100);
1336*53ee8cc1Swenshuai.xi             MDrv_MFC_Write2Bytes(0x30C8, 0x0100);
1337*53ee8cc1Swenshuai.xi         }
1338*53ee8cc1Swenshuai.xi         else
1339*53ee8cc1Swenshuai.xi     #endif
1340*53ee8cc1Swenshuai.xi         {
1341*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x30C4, 0x0403);
1342*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x30C6, 0x0403);
1343*53ee8cc1Swenshuai.xi 	MDrv_MFC_Write2Bytes(0x30C8, 0x0403);
1344*53ee8cc1Swenshuai.xi         }
1345*53ee8cc1Swenshuai.xi 
1346*53ee8cc1Swenshuai.xi 	if (gmfcSysInfo.u8PanelType == _MINI_LVDS
1347*53ee8cc1Swenshuai.xi   	 || gmfcSysInfo.u8PanelType == _LVDS
1348*53ee8cc1Swenshuai.xi   	 || gmfcSysInfo.u8PanelType == _TTL
1349*53ee8cc1Swenshuai.xi        || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP
1350*53ee8cc1Swenshuai.xi        || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5)
1351*53ee8cc1Swenshuai.xi 	{
1352*53ee8cc1Swenshuai.xi 		//Auto no signal blue screen
1353*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x3017, 1, _BIT3);
1354*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x3017, 1, _BIT5);
1355*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteBit(0x3017, 1, _BIT6);
1356*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8PanelChannel == _QUAD_LR)
1357*53ee8cc1Swenshuai.xi 		{
1358*53ee8cc1Swenshuai.xi 			MDrv_MFC_Write2Bytes(0x3100, (gmfcSysInfo.u16Width+2)/4-1);
1359*53ee8cc1Swenshuai.xi 		    MDrv_MFC_WriteBit(0x3101, 1, _BIT7);
1360*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x3103, 0xa0);
1361*53ee8cc1Swenshuai.xi 		}
1362*53ee8cc1Swenshuai.xi 
1363*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8LVDSChannel==_SINGLE && gmfcSysInfo.u8PanelChannel==_SINGLE )
1364*53ee8cc1Swenshuai.xi 		{
1365*53ee8cc1Swenshuai.xi 		    MDrv_MFC_WriteBit(0x3102, 1, _BIT4);
1366*53ee8cc1Swenshuai.xi 	  		MDrv_MFC_WriteByte(0x3105, 0x00); // [7]OD odd/even swap
1367*53ee8cc1Swenshuai.xi 		}
1368*53ee8cc1Swenshuai.xi 	  	else  if(gmfcSysInfo.u8LVDSChannel!=gmfcSysInfo.u8PanelChannel)
1369*53ee8cc1Swenshuai.xi 	  		MDrv_MFC_WriteByte(0x3105, 0x00); // [7]OD odd/even swap
1370*53ee8cc1Swenshuai.xi 		else
1371*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x3105, 0x80); // [7]OD odd/even swap
1372*53ee8cc1Swenshuai.xi 
1373*53ee8cc1Swenshuai.xi           if ((gmfcSysInfo.u8PanelType == _MINI_LVDS) || (gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP) ||(gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5))
1374*53ee8cc1Swenshuai.xi 	  	{
1375*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x3120, 0x80); //[15]oeswap [14]odd mode
1376*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x3121, 0x80);
1377*53ee8cc1Swenshuai.xi             #if (PANEL_TYPE_SEL == PNL_INN26_WXGA_120HZ)
1378*53ee8cc1Swenshuai.xi 			     MDrv_MFC_WriteBit(0x3102, 0, _BIT5);//j090210
1379*53ee8cc1Swenshuai.xi 			#else
1380*53ee8cc1Swenshuai.xi 			     MDrv_MFC_WriteBit(0x3102, 1, _BIT5); //LTD on
1381*53ee8cc1Swenshuai.xi             #endif
1382*53ee8cc1Swenshuai.xi 	  	}
1383*53ee8cc1Swenshuai.xi 
1384*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteByte(0x320A, 0x00);
1385*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8PanelLVDSTiMode)
1386*53ee8cc1Swenshuai.xi 		{
1387*53ee8cc1Swenshuai.xi 			if (gmfcSysInfo.u8PanelBitNum==_8BITS)
1388*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByte(0x320A, 0x08); // lvds TI 8bit(h5[3:2]=10)
1389*53ee8cc1Swenshuai.xi 			else if (gmfcSysInfo.u8PanelBitNum==_6BITS)
1390*53ee8cc1Swenshuai.xi 				MDrv_MFC_WriteByte(0x320A, 0x0C); // lvds TI 6bit(h5[3:2]=11)
1391*53ee8cc1Swenshuai.xi 		}
1392*53ee8cc1Swenshuai.xi 		if (gmfcSysInfo.u8PanelType == _TTL)
1393*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteBit(0x320A, 1, _BIT1);
1394*53ee8cc1Swenshuai.xi 	#if (CODEBASE_SEL == CODEBASE_51)
1395*53ee8cc1Swenshuai.xi 		#if (REG_DIRECT_ACCESS_BY_I2C)
1396*53ee8cc1Swenshuai.xi 			if (gmfcSysInfo.u8Preset == 0x01)
1397*53ee8cc1Swenshuai.xi 		#endif
1398*53ee8cc1Swenshuai.xi 	#endif
1399*53ee8cc1Swenshuai.xi 		{
1400*53ee8cc1Swenshuai.xi 			// [6]TI mode, [5]=0:pair shift, [3]Polarity swap, [2]pair swap
1401*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x320B, (gmfcSysInfo.u8PanelLVDSTiMode?_BIT6:0)
1402*53ee8cc1Swenshuai.xi 								| (gmfcSysInfo.u8PanelLVDSShiftPair?0:_BIT5)
1403*53ee8cc1Swenshuai.xi 								| (gmfcSysInfo.u8PanelLVDSSwapPol?_BIT3:0)
1404*53ee8cc1Swenshuai.xi 								| (gmfcSysInfo.u8PanelLVDSSwapPair?_BIT2:0));
1405*53ee8cc1Swenshuai.xi 			MDrv_MFC_WriteByte(0x321F, gmfcSysInfo.u8PanelLVDSSwapCH); // channel swap
1406*53ee8cc1Swenshuai.xi 		}
1407*53ee8cc1Swenshuai.xi 	}
1408*53ee8cc1Swenshuai.xi 
1409*53ee8cc1Swenshuai.xi     if(gmfcSysInfo.u8PanelType == _RSDS )
1410*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteRegsTbl(0x3200, tInitializeScTop1); //j081014
1411*53ee8cc1Swenshuai.xi     else if(gmfcSysInfo.u8PanelType == _MINI_LVDS )
1412*53ee8cc1Swenshuai.xi     {
1413*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteRegsTbl(0x3200, tInitializeScTop2_Comm);
1414*53ee8cc1Swenshuai.xi           MDrv_MFC_InitializeScTop2_Bypanel();
1415*53ee8cc1Swenshuai.xi     }
1416*53ee8cc1Swenshuai.xi     else if(gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5 )
1417*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteRegsTbl(0x3200, tInitializeScTop2_GIP);
1418*53ee8cc1Swenshuai.xi     else if(gmfcSysInfo.u8PanelType == _TTL )
1419*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteRegsTbl(0x3200, tInitializeScTop3);
1420*53ee8cc1Swenshuai.xi     else  //LVDS
1421*53ee8cc1Swenshuai.xi 		MDrv_MFC_WriteRegsTbl(0x3200, tInitializeScTop4);
1422*53ee8cc1Swenshuai.xi 
1423*53ee8cc1Swenshuai.xi     //Pre-Emphasis setting
1424*53ee8cc1Swenshuai.xi 	if(gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP || gmfcSysInfo.u8PanelType == _MINI_LVDS_GIP_V5 )
1425*53ee8cc1Swenshuai.xi     {
1426*53ee8cc1Swenshuai.xi        MDrv_MFC_WriteRegsTbl(0x3200, tIniTconCommPreEmphasis);
1427*53ee8cc1Swenshuai.xi 
1428*53ee8cc1Swenshuai.xi        if(gmfcSysInfo.u8ChipRevision==U02)
1429*53ee8cc1Swenshuai.xi        {
1430*53ee8cc1Swenshuai.xi            MDrv_MFC_Write2Bytes(0x324E, 0x400f);
1431*53ee8cc1Swenshuai.xi            MDrv_MFC_Write2Bytes(0x3252, 0xc100);
1432*53ee8cc1Swenshuai.xi        }
1433*53ee8cc1Swenshuai.xi        else //U01
1434*53ee8cc1Swenshuai.xi         {
1435*53ee8cc1Swenshuai.xi            MDrv_MFC_Write2Bytes(0x324E, 0x4c0f);
1436*53ee8cc1Swenshuai.xi            MDrv_MFC_Write2Bytes(0x3252, 0xc1c0);
1437*53ee8cc1Swenshuai.xi         }
1438*53ee8cc1Swenshuai.xi     }
1439*53ee8cc1Swenshuai.xi     //printk("MDrv_MFC_InitializeScTop()\n");
1440*53ee8cc1Swenshuai.xi }
1441*53ee8cc1Swenshuai.xi 
1442*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeFRC[]=
1443*53ee8cc1Swenshuai.xi {
1444*53ee8cc1Swenshuai.xi 	{0x307E, 0x17},
1445*53ee8cc1Swenshuai.xi 	{0x307F, 0x00},
1446*53ee8cc1Swenshuai.xi 	{0x3080, 0x23},
1447*53ee8cc1Swenshuai.xi 	{0x3081, 0x20},
1448*53ee8cc1Swenshuai.xi 	{0x3082, 0xf3},
1449*53ee8cc1Swenshuai.xi 	{0x3083, 0x3c},
1450*53ee8cc1Swenshuai.xi 	{0x3084, 0xc9},
1451*53ee8cc1Swenshuai.xi 	{0x3085, 0x9c},
1452*53ee8cc1Swenshuai.xi 	{0x3086, 0xc9},
1453*53ee8cc1Swenshuai.xi 	{0x3087, 0x9c},
1454*53ee8cc1Swenshuai.xi 	{0x3088, 0xaa},
1455*53ee8cc1Swenshuai.xi 	{0x3089, 0xaa},
1456*53ee8cc1Swenshuai.xi 	{0x308A, 0x50},
1457*53ee8cc1Swenshuai.xi 	{0x308B, 0x22},
1458*53ee8cc1Swenshuai.xi 	{0x308C, 0xd8},
1459*53ee8cc1Swenshuai.xi 	{0x308D, 0xd8},
1460*53ee8cc1Swenshuai.xi 	{0x308E, 0x72},
1461*53ee8cc1Swenshuai.xi 	{0x308F, 0x72},
1462*53ee8cc1Swenshuai.xi 	{0x3090, 0x8d},
1463*53ee8cc1Swenshuai.xi 	{0x3091, 0x8d},
1464*53ee8cc1Swenshuai.xi 	{0x3092, 0x27},
1465*53ee8cc1Swenshuai.xi 	{0x3093, 0xd8},
1466*53ee8cc1Swenshuai.xi 	{0x3094, 0x72},
1467*53ee8cc1Swenshuai.xi 	{0x3095, 0x8d},
1468*53ee8cc1Swenshuai.xi {_END_OF_TBL_, _END_OF_TBL_},
1469*53ee8cc1Swenshuai.xi };
1470*53ee8cc1Swenshuai.xi 
MDrv_MFC_InitializeOPMFC(void)1471*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeOPMFC(void)
1472*53ee8cc1Swenshuai.xi {
1473*53ee8cc1Swenshuai.xi     if(gmfcSysInfo.u8PanelDither)
1474*53ee8cc1Swenshuai.xi     {
1475*53ee8cc1Swenshuai.xi     	MDrv_MFC_WriteRegsTbl(0x3000, tInitializeFRC); // initialize all of bank
1476*53ee8cc1Swenshuai.xi     }
1477*53ee8cc1Swenshuai.xi     //printk("MDrv_MFC_InitializeOPMFC()\n");
1478*53ee8cc1Swenshuai.xi }
1479*53ee8cc1Swenshuai.xi 
MDrv_MFC_InitializeScalerOP(void)1480*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeScalerOP(void)
1481*53ee8cc1Swenshuai.xi {
1482*53ee8cc1Swenshuai.xi 	MDrv_MFC_InitializeDispTgen();
1483*53ee8cc1Swenshuai.xi 	MDrv_MFC_InitializeScTop();
1484*53ee8cc1Swenshuai.xi     MDrv_MFC_WriteBit(0x2C42, MFC_ENABLE_LVDS_SSC, _BIT5); // enable ssc
1485*53ee8cc1Swenshuai.xi 	MDrv_MFC_SetLvdsSSC(MFC_LVDS_SSC_SPAN_DEFAULT, MFC_LVDS_SSC_STEP_DEFAULT);
1486*53ee8cc1Swenshuai.xi 	MDrv_MFC_InitializeOPMFC();
1487*53ee8cc1Swenshuai.xi 	//printk("MDrv_MFC_InitializeScalerOP()\n");
1488*53ee8cc1Swenshuai.xi }
1489*53ee8cc1Swenshuai.xi 
1490*53ee8cc1Swenshuai.xi #endif
1491