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 _MSSCALERIP_C_
79*53ee8cc1Swenshuai.xi #include "mdrv_mfc_platform.h"
80*53ee8cc1Swenshuai.xi #include "mdrv_mfc.h"
81*53ee8cc1Swenshuai.xi #include "mdrv_mfc_fb.h"
82*53ee8cc1Swenshuai.xi #include "mdrv_mfc_scalerip.h"
83*53ee8cc1Swenshuai.xi
84*53ee8cc1Swenshuai.xi #if(CODESIZE_SEL == CODESIZE_ALL)
85*53ee8cc1Swenshuai.xi
IPM_LinePitch(U8 u8IpMode,U16 u16PnlWidth)86*53ee8cc1Swenshuai.xi U16 IPM_LinePitch(U8 u8IpMode, U16 u16PnlWidth)
87*53ee8cc1Swenshuai.xi {
88*53ee8cc1Swenshuai.xi if (u8IpMode==IP_YC_10BIT)
89*53ee8cc1Swenshuai.xi return LimitCheck(u16PnlWidth, 64);
90*53ee8cc1Swenshuai.xi else ///IP_YC_8BIT or IP_YC_10BIT_COMP
91*53ee8cc1Swenshuai.xi return LimitCheck(u16PnlWidth, 16);
92*53ee8cc1Swenshuai.xi
93*53ee8cc1Swenshuai.xi }
94*53ee8cc1Swenshuai.xi
Ycout_LinePitch(U8 u8IpMode,U16 u16PnlWidth)95*53ee8cc1Swenshuai.xi U16 Ycout_LinePitch(U8 u8IpMode, U16 u16PnlWidth)
96*53ee8cc1Swenshuai.xi {
97*53ee8cc1Swenshuai.xi if (u8IpMode==IP_YC_10BIT)
98*53ee8cc1Swenshuai.xi return LimitCheck(u16PnlWidth, 64)/64*10;
99*53ee8cc1Swenshuai.xi else ///IP_YC_8BIT or IP_YC_10BIT_COMP
100*53ee8cc1Swenshuai.xi return LimitCheck(u16PnlWidth, 16)/16*2;
101*53ee8cc1Swenshuai.xi }
102*53ee8cc1Swenshuai.xi
103*53ee8cc1Swenshuai.xi #if ( TwoChip_Func == TwoChip_Slave )
Ycout_LinePitchDW(U8 u8IpMode,U32 u32PnlWidth)104*53ee8cc1Swenshuai.xi U32 Ycout_LinePitchDW(U8 u8IpMode, U32 u32PnlWidth)
105*53ee8cc1Swenshuai.xi {
106*53ee8cc1Swenshuai.xi if (u8IpMode==IP_YC_10BIT)
107*53ee8cc1Swenshuai.xi return LimitCheck(u32PnlWidth, 64)/64*10;
108*53ee8cc1Swenshuai.xi else ///IP_YC_8BIT or IP_YC_10BIT_COMP
109*53ee8cc1Swenshuai.xi return LimitCheck(u32PnlWidth, 16)/16*2;
110*53ee8cc1Swenshuai.xi }
111*53ee8cc1Swenshuai.xi #endif
112*53ee8cc1Swenshuai.xi
FBNumber(void)113*53ee8cc1Swenshuai.xi U8 FBNumber(void)
114*53ee8cc1Swenshuai.xi {
115*53ee8cc1Swenshuai.xi return 4;///7; //frame buffer number=8(0~7)
116*53ee8cc1Swenshuai.xi }
117*53ee8cc1Swenshuai.xi
MDrv_MFC_IP_SetMemMode(U8 u8IpMode)118*53ee8cc1Swenshuai.xi void MDrv_MFC_IP_SetMemMode(U8 u8IpMode)
119*53ee8cc1Swenshuai.xi {
120*53ee8cc1Swenshuai.xi if (u8IpMode==IP_YC_10BIT)
121*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2002, 0x77);
122*53ee8cc1Swenshuai.xi else if (u8IpMode==IP_YC_10BIT_COMP)
123*53ee8cc1Swenshuai.xi {
124*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2002, 0x05);
125*53ee8cc1Swenshuai.xi if(gmfcSysInfo.u8MirrorMode)
126*53ee8cc1Swenshuai.xi {
127*53ee8cc1Swenshuai.xi u8IpMode = u8IpMode | _BIT6; //victor 090617
128*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2005, 1, _BIT5);
129*53ee8cc1Swenshuai.xi }
130*53ee8cc1Swenshuai.xi }
131*53ee8cc1Swenshuai.xi else
132*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2002, 0x05);
133*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2003, (0x90 | u8IpMode)); //[7]=1 090820 suchiun for OSD color issue
134*53ee8cc1Swenshuai.xi }
135*53ee8cc1Swenshuai.xi
136*53ee8cc1Swenshuai.xi /*
137*53ee8cc1Swenshuai.xi LVDS input selection:
138*53ee8cc1Swenshuai.xi 0x2202[0]=1:Back-side pin sequence swap
139*53ee8cc1Swenshuai.xi 0x2250[6]=1:LVDS clock input select from even
140*53ee8cc1Swenshuai.xi 0x2300[7]=1:TI mode, [2]=1:10bits, [1]=1:Single
141*53ee8cc1Swenshuai.xi 0x2328[7]=1:MSB/LSB swap, [6]=1:P/N swap, [4]=1:Odd/Even swap
142*53ee8cc1Swenshuai.xi 0x233A[3]=1:6bits
143*53ee8cc1Swenshuai.xi */
MDrv_MFC_InitializeRx(void)144*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeRx(void)
145*53ee8cc1Swenshuai.xi {
146*53ee8cc1Swenshuai.xi #if(CODEBASE_SEL == CODEBASE_LINUX)
147*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2214, 0, _BIT2);
148*53ee8cc1Swenshuai.xi #elif(CODEBASE_SEL == CODEBASE_UTOPIA)
149*53ee8cc1Swenshuai.xi #if 0
150*53ee8cc1Swenshuai.xi if (gmfcSysInfo.u8PanelType==2)//LVDS
151*53ee8cc1Swenshuai.xi {
152*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2214, 1, _BIT2); //LVDS
153*53ee8cc1Swenshuai.xi }
154*53ee8cc1Swenshuai.xi else if(gmfcSysInfo.u8PanelType==0)//TTL
155*53ee8cc1Swenshuai.xi {
156*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2214, 0, _BIT2); //TTL
157*53ee8cc1Swenshuai.xi }
158*53ee8cc1Swenshuai.xi #else
159*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2214, 0, _BIT2); //TTL
160*53ee8cc1Swenshuai.xi //for TTL power down RX
161*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2214, 1, _BIT3);
162*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2214, 1, _BIT5);
163*53ee8cc1Swenshuai.xi
164*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2216, 1, _BIT3);
165*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2216, 1, _BIT4);
166*53ee8cc1Swenshuai.xi
167*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x221E, 1, _BIT3);
168*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x221E, 1, _BIT4);
169*53ee8cc1Swenshuai.xi
170*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x228E, 1, _BIT3);
171*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x228E, 1, _BIT4);
172*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x228E, 1, _BIT5);
173*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x228E, 1, _BIT6);
174*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x228E, 1, _BIT7);
175*53ee8cc1Swenshuai.xi
176*53ee8cc1Swenshuai.xi if (gmfcSysInfo.u8PanelVfreq==60)
177*53ee8cc1Swenshuai.xi {
178*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x320A, 0x6008);
179*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x3200, 0x0001);
180*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2A06, 0x0006);
181*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x321E, 0x2200);
182*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2A83, 0, _BIT0);
183*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2A83, 1, _BIT1);
184*53ee8cc1Swenshuai.xi }
185*53ee8cc1Swenshuai.xi #endif
186*53ee8cc1Swenshuai.xi #endif
187*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x22AC, 0x11);
188*53ee8cc1Swenshuai.xi
189*53ee8cc1Swenshuai.xi #if(CODEBASE_SEL == CODEBASE_51)
190*53ee8cc1Swenshuai.xi #if ((BOARD_TYPE_SEL == BD_MST054C_C01A_S) )
191*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2202, 0x00);
192*53ee8cc1Swenshuai.xi #else
193*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2202, 0x01); // [0]=1: back-side pin sequence swap
194*53ee8cc1Swenshuai.xi #endif
195*53ee8cc1Swenshuai.xi #else
196*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2202, 0x01); // [0]=1: back-side pin sequence swap
197*53ee8cc1Swenshuai.xi #endif
198*53ee8cc1Swenshuai.xi
199*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2250, 0x40); // [6]=1: LVDS clock input select from even
200*53ee8cc1Swenshuai.xi
201*53ee8cc1Swenshuai.xi #if (CODEBASE_SEL == CODEBASE_51)
202*53ee8cc1Swenshuai.xi #if ((BOARD_TYPE_SEL == BD_MST054C_C01A_S))
203*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2300, 0x70|(gmfcSysInfo.u8LVDSTiMode?_BIT7:0)|(gmfcSysInfo.u8LVDSBitNum==_10BITS?_BIT2:0)|(gmfcSysInfo.u8LVDSChannel==_SINGLE?_BIT1:0));
204*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x233A, 0xB0|(gmfcSysInfo.u8LVDSBitNum==_6BITS?_BIT3:0));
205*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2328, (gmfcSysInfo.u8LVDSSwapMsbLsb?_BIT7:0)|(gmfcSysInfo.u8LVDSSwap_P_N?_BIT6:0)|(gmfcSysInfo.u8LVDSSwapOddEven?_BIT4:0));
206*53ee8cc1Swenshuai.xi #endif
207*53ee8cc1Swenshuai.xi #endif
208*53ee8cc1Swenshuai.xi #if(CODEBASE_SEL == CODEBASE_51)
209*53ee8cc1Swenshuai.xi #if (REG_DIRECT_ACCESS_BY_I2C)
210*53ee8cc1Swenshuai.xi if (gmfcSysInfo.u8Preset == 0x01)
211*53ee8cc1Swenshuai.xi #endif
212*53ee8cc1Swenshuai.xi #endif
213*53ee8cc1Swenshuai.xi {
214*53ee8cc1Swenshuai.xi // 0x2300, [7]=1:TI mode, [2]=1:10bits, [1]=1:Single
215*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2300, (gmfcSysInfo.u8LVDSTiMode?_BIT7:0)
216*53ee8cc1Swenshuai.xi | (gmfcSysInfo.u8LVDSBitNum==_10BITS?_BIT2:0)
217*53ee8cc1Swenshuai.xi | (gmfcSysInfo.u8LVDSChannel==_SINGLE?_BIT1:0)
218*53ee8cc1Swenshuai.xi | (gmfcSysInfo.u8PanelBlankCPVC?_BIT6:0)
219*53ee8cc1Swenshuai.xi | (gmfcSysInfo.u8PanelBlankOEC?_BIT5:0)
220*53ee8cc1Swenshuai.xi | (gmfcSysInfo.u8PanelBlankTPC?_BIT4:0)
221*53ee8cc1Swenshuai.xi | (gmfcSysInfo.u8PanelBlankSTHC?_BIT3:0));
222*53ee8cc1Swenshuai.xi if(S7M) // RX TTL
223*53ee8cc1Swenshuai.xi {
224*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2301, 1, _BIT7);
225*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x2301, 1, _BIT5);
226*53ee8cc1Swenshuai.xi }
227*53ee8cc1Swenshuai.xi // 0x233A, [3]=1:6bits
228*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x233A, 0xB0|(gmfcSysInfo.u8LVDSBitNum==_6BITS?_BIT3:0));
229*53ee8cc1Swenshuai.xi //0x2328, [7]=1:MSB/LSB swap, [6]=1:P/N swap, [4]=1:Odd/Even swap
230*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2328, (gmfcSysInfo.u8LVDSSwapMsbLsb?_BIT7:0)|(gmfcSysInfo.u8LVDSSwap_P_N?_BIT6:0)|(gmfcSysInfo.u8LVDSSwapOddEven?_BIT4:0));
231*53ee8cc1Swenshuai.xi }
232*53ee8cc1Swenshuai.xi
233*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2283, 0xc4);
234*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2285, 0xc4);
235*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x228F, 0, 0x0F);
236*53ee8cc1Swenshuai.xi
237*53ee8cc1Swenshuai.xi //printk("MDrv_MFC_InitializeRx()\n");
238*53ee8cc1Swenshuai.xi }
239*53ee8cc1Swenshuai.xi
MDrv_MFC_InitializeIP_PtnGen(void)240*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeIP_PtnGen(void)
241*53ee8cc1Swenshuai.xi {
242*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x20E0, 0x00);
243*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x20E2, gmfcSysInfo.u16HTotal);
244*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x20E4, gmfcSysInfo.u16VTotal);
245*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x20E6, 0);
246*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x20E8, gmfcSysInfo.u16Width);
247*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x20EA, 0);
248*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x20EC, gmfcSysInfo.u16Height);
249*53ee8cc1Swenshuai.xi //printk("MDrv_MFC_InitializeIP_PtnGen()\n");
250*53ee8cc1Swenshuai.xi }
251*53ee8cc1Swenshuai.xi
252*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeOPMAddr[]=
253*53ee8cc1Swenshuai.xi {
254*53ee8cc1Swenshuai.xi {0x2138, 0x4c},
255*53ee8cc1Swenshuai.xi {0x2139, 0x0d},
256*53ee8cc1Swenshuai.xi {0x213A, 0x00},
257*53ee8cc1Swenshuai.xi {0x213B, 0x00},
258*53ee8cc1Swenshuai.xi
259*53ee8cc1Swenshuai.xi {0x213C, 0xEC},
260*53ee8cc1Swenshuai.xi {0x213D, 0xfe},
261*53ee8cc1Swenshuai.xi {0x213E, 0x04},
262*53ee8cc1Swenshuai.xi {0x213F, 0x00},
263*53ee8cc1Swenshuai.xi
264*53ee8cc1Swenshuai.xi {0x2140, 0x8C},
265*53ee8cc1Swenshuai.xi {0x2141, 0xf0},
266*53ee8cc1Swenshuai.xi {0x2142, 0x09},
267*53ee8cc1Swenshuai.xi {0x2143, 0x00},
268*53ee8cc1Swenshuai.xi
269*53ee8cc1Swenshuai.xi {0x2144, 0x2C},
270*53ee8cc1Swenshuai.xi {0x2145, 0xe2},
271*53ee8cc1Swenshuai.xi {0x2146, 0x0e},
272*53ee8cc1Swenshuai.xi {0x2147, 0x00},
273*53ee8cc1Swenshuai.xi
274*53ee8cc1Swenshuai.xi {0x2148, 0xCC},
275*53ee8cc1Swenshuai.xi {0x2149, 0xd3},
276*53ee8cc1Swenshuai.xi {0x214A, 0x13},
277*53ee8cc1Swenshuai.xi {0x214B, 0x00},
278*53ee8cc1Swenshuai.xi
279*53ee8cc1Swenshuai.xi {0x214C, 0xA9},
280*53ee8cc1Swenshuai.xi {0x214D, 0x00},
281*53ee8cc1Swenshuai.xi {0x214E, 0x20},
282*53ee8cc1Swenshuai.xi {0x214F, 0x00},
283*53ee8cc1Swenshuai.xi
284*53ee8cc1Swenshuai.xi {0x2150, 0xAE},
285*53ee8cc1Swenshuai.xi {0x2151, 0x00},
286*53ee8cc1Swenshuai.xi {0x2152, 0x28},
287*53ee8cc1Swenshuai.xi {0x2153, 0x00},
288*53ee8cc1Swenshuai.xi {_END_OF_TBL_, _END_OF_TBL_},
289*53ee8cc1Swenshuai.xi };
290*53ee8cc1Swenshuai.xi
291*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeIP[]=
292*53ee8cc1Swenshuai.xi {
293*53ee8cc1Swenshuai.xi #if 1 // Input 60Hz
294*53ee8cc1Swenshuai.xi //======================
295*53ee8cc1Swenshuai.xi // 60Hz
296*53ee8cc1Swenshuai.xi //======================
297*53ee8cc1Swenshuai.xi //[IP]
298*53ee8cc1Swenshuai.xi {0x203E, 0x2f}, // rfifo rfifo thr
299*53ee8cc1Swenshuai.xi {0x203F, 0x1f}, // rfifo high pri thr
300*53ee8cc1Swenshuai.xi {0x2040, 0x20}, // wfifo wfifo thr
301*53ee8cc1Swenshuai.xi {0x2041, 0x40}, // wfifo high pri thr
302*53ee8cc1Swenshuai.xi {0x2042, 0x20}, // rreq_len_y
303*53ee8cc1Swenshuai.xi {0x2043, 0x08}, // rreq_len_mr
304*53ee8cc1Swenshuai.xi {0x2044, 0x40},///58 // wreq_len_ycout //Titan.sun suggestion 081027
305*53ee8cc1Swenshuai.xi {0x2045, 0x00}, // wreq_len_mr
306*53ee8cc1Swenshuai.xi #else
307*53ee8cc1Swenshuai.xi //======================
308*53ee8cc1Swenshuai.xi // 120Hz
309*53ee8cc1Swenshuai.xi //======================
310*53ee8cc1Swenshuai.xi //[IP]
311*53ee8cc1Swenshuai.xi {0x203E, 0x20}, // rfifo rfifo thr
312*53ee8cc1Swenshuai.xi {0x203F, 0x18}, // rfifo high pri thr
313*53ee8cc1Swenshuai.xi {0x2040, 0x20}, // wfifo wfifo thr
314*53ee8cc1Swenshuai.xi {0x2041, 0x28}, // wfifo high pri thr
315*53ee8cc1Swenshuai.xi {0x2042, 0x20}, // rreq_len_y
316*53ee8cc1Swenshuai.xi {0x2043, 0x08}, // rreq_len_mr
317*53ee8cc1Swenshuai.xi {0x2044, 0x50}, // wreq_len_ycout
318*53ee8cc1Swenshuai.xi {0x2045, 0x08}, // wreq_len_mr
319*53ee8cc1Swenshuai.xi #endif
320*53ee8cc1Swenshuai.xi {0x204A, 0x00}, // r_mask_num
321*53ee8cc1Swenshuai.xi {0x204B, 0x00}, // w_mask_num
322*53ee8cc1Swenshuai.xi {0x2060, 0x03}, // [1]:de_only, [0]:mode_det_en
323*53ee8cc1Swenshuai.xi {0x2061, 0x00}, //
324*53ee8cc1Swenshuai.xi {0x2062, 0x03}, // vpulse line for IP
325*53ee8cc1Swenshuai.xi {0x2063, 0x00}, // vpulse line for IP
326*53ee8cc1Swenshuai.xi {0x2064, 0x01}, // vpulse line for Frame Lock
327*53ee8cc1Swenshuai.xi {0x2065, 0x00}, // vpulse line for Frame Lock
328*53ee8cc1Swenshuai.xi {0x2066, 0x10}, // lock interrupt control, [4]:ref_h
329*53ee8cc1Swenshuai.xi {0x2068, 0xb4}, // blank_boundary (720)
330*53ee8cc1Swenshuai.xi {0x2069, 0x00}, // blank_boundary (720)
331*53ee8cc1Swenshuai.xi //{0x20D0, 0xF1}, // [7:6]:ip unstable control,[5:4]:ip no signal control,[0]:reference clock mode detection
332*53ee8cc1Swenshuai.xi {0x20D0, 0x31}, // For Demo Board Use, !!???
333*53ee8cc1Swenshuai.xi {0x20D4, 0x05},
334*53ee8cc1Swenshuai.xi
335*53ee8cc1Swenshuai.xi {0x2001, 0x03}, // [1]Write request enable, [0]Read request enable
336*53ee8cc1Swenshuai.xi
337*53ee8cc1Swenshuai.xi {_END_OF_TBL_, _END_OF_TBL_},
338*53ee8cc1Swenshuai.xi };
339*53ee8cc1Swenshuai.xi
MDrv_MFC_SetMirrorMode(MirrorModeType ucMirrorMode)340*53ee8cc1Swenshuai.xi void MDrv_MFC_SetMirrorMode(MirrorModeType ucMirrorMode)
341*53ee8cc1Swenshuai.xi {
342*53ee8cc1Swenshuai.xi U8 i;
343*53ee8cc1Swenshuai.xi gmfcSysInfo.u8MirrorMode=ucMirrorMode;
344*53ee8cc1Swenshuai.xi MDrv_MFC_IP_SetMemMode(IP_MODE);
345*53ee8cc1Swenshuai.xi
346*53ee8cc1Swenshuai.xi //IP Init
347*53ee8cc1Swenshuai.xi for (i=0; i<5; i++)
348*53ee8cc1Swenshuai.xi {
349*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2006+4*i, (gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*i)>>4);
350*53ee8cc1Swenshuai.xi }
351*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
352*53ee8cc1Swenshuai.xi {
353*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2020+4*i, (gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+5))>>4);
354*53ee8cc1Swenshuai.xi }
355*53ee8cc1Swenshuai.xi
356*53ee8cc1Swenshuai.xi //OPM Setting
357*53ee8cc1Swenshuai.xi for (i=0; i<5; i++)
358*53ee8cc1Swenshuai.xi {
359*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2138+4*i, MDrv_MFC_Read3Bytes(0x2006+4*i));
360*53ee8cc1Swenshuai.xi }
361*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
362*53ee8cc1Swenshuai.xi {
363*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x214C+4*i, MDrv_MFC_Read3Bytes(0x2020+4*i));
364*53ee8cc1Swenshuai.xi }
365*53ee8cc1Swenshuai.xi
366*53ee8cc1Swenshuai.xi switch(ucMirrorMode)
367*53ee8cc1Swenshuai.xi {
368*53ee8cc1Swenshuai.xi case MIRROR_H_MODE:
369*53ee8cc1Swenshuai.xi //Set H mode IP address
370*53ee8cc1Swenshuai.xi for (i=0; i<5; i++)
371*53ee8cc1Swenshuai.xi {
372*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2006+4*i,
373*53ee8cc1Swenshuai.xi ((gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*i)>>4)
374*53ee8cc1Swenshuai.xi +Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width)-1);
375*53ee8cc1Swenshuai.xi }
376*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
377*53ee8cc1Swenshuai.xi {
378*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2020+4*i,
379*53ee8cc1Swenshuai.xi ((gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+5))>>4)
380*53ee8cc1Swenshuai.xi +Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width)-1);
381*53ee8cc1Swenshuai.xi }
382*53ee8cc1Swenshuai.xi //Enable OPM setting
383*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x2136, _BIT0, _BIT0);
384*53ee8cc1Swenshuai.xi //Enable H mode
385*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x205C, _BIT0, _BIT1|_BIT0);
386*53ee8cc1Swenshuai.xi break;
387*53ee8cc1Swenshuai.xi
388*53ee8cc1Swenshuai.xi case MIRROR_V_MODE:
389*53ee8cc1Swenshuai.xi //Set V mode IP address
390*53ee8cc1Swenshuai.xi for (i=0; i<5; i++)
391*53ee8cc1Swenshuai.xi {
392*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2006+4*i,
393*53ee8cc1Swenshuai.xi (((gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+1))>>4)
394*53ee8cc1Swenshuai.xi -Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width)));
395*53ee8cc1Swenshuai.xi }
396*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
397*53ee8cc1Swenshuai.xi {
398*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2020+4*i,
399*53ee8cc1Swenshuai.xi (((gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+6))>>4)
400*53ee8cc1Swenshuai.xi -Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width)));
401*53ee8cc1Swenshuai.xi }
402*53ee8cc1Swenshuai.xi //Enable OPM setting
403*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x2136, _BIT0, _BIT0);
404*53ee8cc1Swenshuai.xi //Enable V mode
405*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x205C, _BIT1, _BIT1|_BIT0);
406*53ee8cc1Swenshuai.xi break;
407*53ee8cc1Swenshuai.xi
408*53ee8cc1Swenshuai.xi case MIRROR_HV_MODE:
409*53ee8cc1Swenshuai.xi //Set HV mode IP address
410*53ee8cc1Swenshuai.xi for (i=0; i<5; i++)
411*53ee8cc1Swenshuai.xi {
412*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2006+4*i, (((gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+1))>>4)-1));
413*53ee8cc1Swenshuai.xi }
414*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
415*53ee8cc1Swenshuai.xi {
416*53ee8cc1Swenshuai.xi //MDrv_MFC_Write3Bytes(0x2006+4*i, (((gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+1))>>4)-1));
417*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2020+4*i, (((gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+6))>>4)-1));
418*53ee8cc1Swenshuai.xi }
419*53ee8cc1Swenshuai.xi //Enable OPM setting
420*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x2136, _BIT0, _BIT0);
421*53ee8cc1Swenshuai.xi //Enable H mode
422*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x205C, _BIT1|_BIT0, _BIT1|_BIT0);
423*53ee8cc1Swenshuai.xi break;
424*53ee8cc1Swenshuai.xi
425*53ee8cc1Swenshuai.xi case MIRROR_OFF:
426*53ee8cc1Swenshuai.xi default:
427*53ee8cc1Swenshuai.xi //Set Original IP base Asddress
428*53ee8cc1Swenshuai.xi for (i=0; i<5; i++)
429*53ee8cc1Swenshuai.xi {
430*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2006+4*i, (gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*i)>>4);
431*53ee8cc1Swenshuai.xi }
432*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
433*53ee8cc1Swenshuai.xi {
434*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2020+4*i, (gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+5))>>4);
435*53ee8cc1Swenshuai.xi }
436*53ee8cc1Swenshuai.xi //Disable OPM setting
437*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x2136, 0, _BIT0);
438*53ee8cc1Swenshuai.xi //Disable HV mode
439*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByteMask(0x205C, 0, _BIT1|_BIT0);
440*53ee8cc1Swenshuai.xi break;
441*53ee8cc1Swenshuai.xi }
442*53ee8cc1Swenshuai.xi }
443*53ee8cc1Swenshuai.xi
444*53ee8cc1Swenshuai.xi
445*53ee8cc1Swenshuai.xi #if ( TwoChip_Func == TwoChip_Slave )
MDrv_MFC_SetOPMBaseAddr(void)446*53ee8cc1Swenshuai.xi void MDrv_MFC_SetOPMBaseAddr(void)
447*53ee8cc1Swenshuai.xi {
448*53ee8cc1Swenshuai.xi U32 dwOPMBase;
449*53ee8cc1Swenshuai.xi U8 i ;
450*53ee8cc1Swenshuai.xi
451*53ee8cc1Swenshuai.xi //OPM Setting
452*53ee8cc1Swenshuai.xi dwOPMBase = Ycout_LinePitchDW(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width/2 -64 );
453*53ee8cc1Swenshuai.xi for (i=0; i<5; i++)
454*53ee8cc1Swenshuai.xi {
455*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2138+4*i, MDrv_MFC_Read3Bytes(0x2006+4*i) + dwOPMBase);
456*53ee8cc1Swenshuai.xi }
457*53ee8cc1Swenshuai.xi
458*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
459*53ee8cc1Swenshuai.xi {
460*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x214C+4*i, MDrv_MFC_Read3Bytes(0x2020+4*i) + dwOPMBase);
461*53ee8cc1Swenshuai.xi }
462*53ee8cc1Swenshuai.xi // MDrv_MFC_WriteRegsTbl(0x2100, tInitializeOPMAddr); // initialize all of bank
463*53ee8cc1Swenshuai.xi }
464*53ee8cc1Swenshuai.xi #endif
465*53ee8cc1Swenshuai.xi
MDrv_MFC_InitializeIP(void)466*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeIP(void)
467*53ee8cc1Swenshuai.xi {
468*53ee8cc1Swenshuai.xi U8 i;
469*53ee8cc1Swenshuai.xi
470*53ee8cc1Swenshuai.xi MDrv_MFC_IP_SetMemMode(gmfcMiuBaseAddr.u8IpMode);
471*53ee8cc1Swenshuai.xi //[Frame Buffer]
472*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2004, FBNumber());
473*53ee8cc1Swenshuai.xi
474*53ee8cc1Swenshuai.xi for (i=0; i<5; i++) //j090423
475*53ee8cc1Swenshuai.xi {
476*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2006+4*i, (gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*i)>>4);
477*53ee8cc1Swenshuai.xi }
478*53ee8cc1Swenshuai.xi
479*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x201B, 0x04); //Ip to mc sel
480*53ee8cc1Swenshuai.xi
481*53ee8cc1Swenshuai.xi for (i=0; i<3; i++)
482*53ee8cc1Swenshuai.xi {
483*53ee8cc1Swenshuai.xi MDrv_MFC_Write3Bytes(0x2020+4*i, (gmfcMiuBaseAddr.u32IpYcoutBase+gmfcMiuBaseAddr.u32IpYcoutSize*(i+5))>>4);
484*53ee8cc1Swenshuai.xi }
485*53ee8cc1Swenshuai.xi
486*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2034, Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width));
487*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x203A, Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width));
488*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2038, IPM_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width)>>4); //IP Linefetch
489*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2046, IPM_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width));
490*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2048, gmfcSysInfo.u16Height);
491*53ee8cc1Swenshuai.xi if(gmfcSysInfo.u8MirrorMode)
492*53ee8cc1Swenshuai.xi MDrv_MFC_SetMirrorMode(MIRROR_HV_MODE);
493*53ee8cc1Swenshuai.xi
494*53ee8cc1Swenshuai.xi MDrv_MFC_WriteRegsTbl(0x2000, tInitializeIP); // initialize all of bank
495*53ee8cc1Swenshuai.xi //printk("MDrv_MFC_InitializeIP()\n");
496*53ee8cc1Swenshuai.xi }
497*53ee8cc1Swenshuai.xi
MDrv_MFC_SoftwareResetIP(void)498*53ee8cc1Swenshuai.xi void MDrv_MFC_SoftwareResetIP(void)
499*53ee8cc1Swenshuai.xi {
500*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2000, 0x01); // [0]IP software reset
501*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2000, 0x00);
502*53ee8cc1Swenshuai.xi }
503*53ee8cc1Swenshuai.xi
504*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeOPM[]=
505*53ee8cc1Swenshuai.xi {
506*53ee8cc1Swenshuai.xi {0x210E, 0x08}, // MLB output data rest cycle number between two line //30->40 pip deep ,suchiun suggestion 080911
507*53ee8cc1Swenshuai.xi {0x2110, 0x70}, ///90 // OPM fifo normal threshold to trigger read request
508*53ee8cc1Swenshuai.xi {0x2111, 0x60}, // OPM fifo high threshold to trigger read request
509*53ee8cc1Swenshuai.xi {0x2112, 0x7f}, //0x50, ///48// Maxinum length of OPM read request
510*53ee8cc1Swenshuai.xi {0x2102, 0x01}, // Enable OPM/MLB disp
511*53ee8cc1Swenshuai.xi {_END_OF_TBL_, _END_OF_TBL_},
512*53ee8cc1Swenshuai.xi };
513*53ee8cc1Swenshuai.xi
MDrv_MFC_InitializeOPM(void)514*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeOPM(void)
515*53ee8cc1Swenshuai.xi {
516*53ee8cc1Swenshuai.xi #if ( TwoChip_Func != TwoChip_OFF )
517*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2106, gmfcSysInfo.u16Width/2 +64);
518*53ee8cc1Swenshuai.xi #else
519*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2106, gmfcSysInfo.u16Width);
520*53ee8cc1Swenshuai.xi #endif
521*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2108, gmfcSysInfo.u16Height);
522*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2C47, gmfcSysInfo.u8PanelVfreq);
523*53ee8cc1Swenshuai.xi MDrv_MFC_Write2Bytes(0x2114, Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width)*2);
524*53ee8cc1Swenshuai.xi //MDrv_MFC_Write2Bytes(0x2116, MrLinePitch(gmfcSysInfo.u16Width));
525*53ee8cc1Swenshuai.xi MDrv_MFC_WriteRegsTbl(0x2100, tInitializeOPM); // initialize all of bank
526*53ee8cc1Swenshuai.xi //printk("MDrv_MFC_InitializeOPM()\n");
527*53ee8cc1Swenshuai.xi }
MDrv_MFC_SoftwareResetOPM(void)528*53ee8cc1Swenshuai.xi void MDrv_MFC_SoftwareResetOPM(void)
529*53ee8cc1Swenshuai.xi {
530*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2103, 0x03); // [1]MLB's software reset, [0]OPM's software reset, 1:reset
531*53ee8cc1Swenshuai.xi mfcSleepMs(100);
532*53ee8cc1Swenshuai.xi MDrv_MFC_WriteByte(0x2103, 0x00); // OPM/MLB enable
533*53ee8cc1Swenshuai.xi }
534*53ee8cc1Swenshuai.xi
535*53ee8cc1Swenshuai.xi #if ( TwoChip_Func == TwoChip_Master )
MDrv_MFC_SoftwareResetScaler(void)536*53ee8cc1Swenshuai.xi void MDrv_MFC_SoftwareResetScaler(void)
537*53ee8cc1Swenshuai.xi {
538*53ee8cc1Swenshuai.xi mfcSleepMsNop(0xfe);
539*53ee8cc1Swenshuai.xi
540*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x1E03, 1, _BIT0);
541*53ee8cc1Swenshuai.xi
542*53ee8cc1Swenshuai.xi mfcSleepMsNop(0xfe);
543*53ee8cc1Swenshuai.xi
544*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x1E03, 0, _BIT0);
545*53ee8cc1Swenshuai.xi //putstr("\r\nReset Scaler-----");
546*53ee8cc1Swenshuai.xi }
547*53ee8cc1Swenshuai.xi #include "mpif.h"
msReset2Chip(void)548*53ee8cc1Swenshuai.xi void msReset2Chip(void)
549*53ee8cc1Swenshuai.xi {
550*53ee8cc1Swenshuai.xi U16 wStatus;
551*53ee8cc1Swenshuai.xi U8 ucCnt;
552*53ee8cc1Swenshuai.xi ucCnt=200;
553*53ee8cc1Swenshuai.xi while(ucCnt--)
554*53ee8cc1Swenshuai.xi {
555*53ee8cc1Swenshuai.xi wStatus= pifRead2Byte2A(0x2A08);
556*53ee8cc1Swenshuai.xi if(wStatus&0x0001)
557*53ee8cc1Swenshuai.xi {
558*53ee8cc1Swenshuai.xi MDrv_MFC_SoftwareResetScaler();
559*53ee8cc1Swenshuai.xi break;
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi }//while
562*53ee8cc1Swenshuai.xi }
563*53ee8cc1Swenshuai.xi #endif
564*53ee8cc1Swenshuai.xi
565*53ee8cc1Swenshuai.xi code MST_MFC_RegUnitType_t tInitializeSnr[]=
566*53ee8cc1Swenshuai.xi {
567*53ee8cc1Swenshuai.xi {0x2E60, 0X03},
568*53ee8cc1Swenshuai.xi {0x2E61, 0X00},
569*53ee8cc1Swenshuai.xi {0x2E62, 0X0F},
570*53ee8cc1Swenshuai.xi {0x2E63, 0X00},
571*53ee8cc1Swenshuai.xi {0x2EA0, 0X03},
572*53ee8cc1Swenshuai.xi {0x2EA1, 0X00},
573*53ee8cc1Swenshuai.xi {0x2EA8, 0X30},
574*53ee8cc1Swenshuai.xi {0x2EA9, 0X00},
575*53ee8cc1Swenshuai.xi {0x2EAA, 0X11},
576*53ee8cc1Swenshuai.xi {0x2EAB, 0X00},
577*53ee8cc1Swenshuai.xi {_END_OF_TBL_, _END_OF_TBL_},
578*53ee8cc1Swenshuai.xi };
579*53ee8cc1Swenshuai.xi
MDrv_MFC_InitializeScaler(void)580*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeScaler(void)
581*53ee8cc1Swenshuai.xi {
582*53ee8cc1Swenshuai.xi MDrv_MFC_WriteRegsTbl(0x2E00, tInitializeSnr); // initialize all of bank
583*53ee8cc1Swenshuai.xi //printk("MDrv_MFC_InitializeScaler()\n");
584*53ee8cc1Swenshuai.xi }
585*53ee8cc1Swenshuai.xi
MDrv_MFC_InitializeScalerIP(void)586*53ee8cc1Swenshuai.xi void MDrv_MFC_InitializeScalerIP(void)
587*53ee8cc1Swenshuai.xi {
588*53ee8cc1Swenshuai.xi MDrv_MFC_InitializeRx();
589*53ee8cc1Swenshuai.xi MDrv_MFC_InitializeIP_PtnGen();
590*53ee8cc1Swenshuai.xi MDrv_MFC_InitializeIP();
591*53ee8cc1Swenshuai.xi MDrv_MFC_InitializeOPM();
592*53ee8cc1Swenshuai.xi MDrv_MFC_InitializeScaler();
593*53ee8cc1Swenshuai.xi //printk("MDrv_MFC_InitializeScalerIP()\n");
594*53ee8cc1Swenshuai.xi }
595*53ee8cc1Swenshuai.xi
596*53ee8cc1Swenshuai.xi #if 0
597*53ee8cc1Swenshuai.xi U16 msIPGetHdeActive(void)
598*53ee8cc1Swenshuai.xi {
599*53ee8cc1Swenshuai.xi return MDrv_MFC_Read2Bytes(0x207C);
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi
602*53ee8cc1Swenshuai.xi U16 msIPGetHtotal(void)
603*53ee8cc1Swenshuai.xi {
604*53ee8cc1Swenshuai.xi return MDrv_MFC_Read2Bytes(0x2078);
605*53ee8cc1Swenshuai.xi }
606*53ee8cc1Swenshuai.xi #endif
607*53ee8cc1Swenshuai.xi
MDrv_MFC_SoftwareResetScalerInt(void)608*53ee8cc1Swenshuai.xi void MDrv_MFC_SoftwareResetScalerInt(void)
609*53ee8cc1Swenshuai.xi {
610*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x1E03, 1, _BIT0);
611*53ee8cc1Swenshuai.xi mfcSleepMsNop(10);
612*53ee8cc1Swenshuai.xi MDrv_MFC_WriteBit(0x1E03, 0, _BIT0);
613*53ee8cc1Swenshuai.xi //putstr("\r\nReset Scaler-----");
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi
616*53ee8cc1Swenshuai.xi
msIPGetVtotal(void)617*53ee8cc1Swenshuai.xi U16 msIPGetVtotal(void)
618*53ee8cc1Swenshuai.xi {
619*53ee8cc1Swenshuai.xi return MDrv_MFC_Read2Bytes(0x207A);
620*53ee8cc1Swenshuai.xi }
621*53ee8cc1Swenshuai.xi
msIPGetHdeCount(void)622*53ee8cc1Swenshuai.xi U16 msIPGetHdeCount(void)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi return MDrv_MFC_Read2Bytes(0x20D8);
625*53ee8cc1Swenshuai.xi }
626*53ee8cc1Swenshuai.xi
apiIPGetVfreq(void)627*53ee8cc1Swenshuai.xi U8 apiIPGetVfreq(void)
628*53ee8cc1Swenshuai.xi {
629*53ee8cc1Swenshuai.xi U16 wTemp;
630*53ee8cc1Swenshuai.xi U32 dwFreq;
631*53ee8cc1Swenshuai.xi
632*53ee8cc1Swenshuai.xi // XTAL / Count = Vtotal * Vfreq
633*53ee8cc1Swenshuai.xi
634*53ee8cc1Swenshuai.xi wTemp = msIPGetHdeCount();
635*53ee8cc1Swenshuai.xi //printf("\r\nHcnt[%x]", wTemp>>15);
636*53ee8cc1Swenshuai.xi if (!(wTemp&_BIT15))
637*53ee8cc1Swenshuai.xi return 0xFF;
638*53ee8cc1Swenshuai.xi wTemp &= ~_BIT15;
639*53ee8cc1Swenshuai.xi //printf(" [%d]", wTemp);
640*53ee8cc1Swenshuai.xi dwFreq = MST_CLOCK_HZ / wTemp;
641*53ee8cc1Swenshuai.xi
642*53ee8cc1Swenshuai.xi wTemp = msIPGetVtotal();
643*53ee8cc1Swenshuai.xi //printf("_____Vtot[%x]", wTemp>>15);
644*53ee8cc1Swenshuai.xi #ifndef FrameVt_Change
645*53ee8cc1Swenshuai.xi if (!(wTemp&_BIT15)) //j090302 for ausu
646*53ee8cc1Swenshuai.xi return 0xFF;
647*53ee8cc1Swenshuai.xi #endif
648*53ee8cc1Swenshuai.xi
649*53ee8cc1Swenshuai.xi wTemp &= ~_BIT15;
650*53ee8cc1Swenshuai.xi //printf(" [%d]", wTemp);
651*53ee8cc1Swenshuai.xi dwFreq /= wTemp;
652*53ee8cc1Swenshuai.xi
653*53ee8cc1Swenshuai.xi //printf("_____ndwFreq[%d]", dwFreq);
654*53ee8cc1Swenshuai.xi return dwFreq;
655*53ee8cc1Swenshuai.xi }
656*53ee8cc1Swenshuai.xi #endif
657*53ee8cc1Swenshuai.xi
658