xref: /utopia/UTPA2-700.0.x/modules/xc/hal/M7821/pnl/halPNL.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 #ifndef _HAL_PNL_C_
79*53ee8cc1Swenshuai.xi #define _HAL_PNL_C_
80*53ee8cc1Swenshuai.xi 
81*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
82*53ee8cc1Swenshuai.xi //  Include Files
83*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
84*53ee8cc1Swenshuai.xi 
85*53ee8cc1Swenshuai.xi #include "MsCommon.h"
86*53ee8cc1Swenshuai.xi #include "MsTypes.h"
87*53ee8cc1Swenshuai.xi #include "utopia.h"
88*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
89*53ee8cc1Swenshuai.xi #include "apiPNL.h"
90*53ee8cc1Swenshuai.xi #include "apiPNL_v2.h"
91*53ee8cc1Swenshuai.xi #include "drvPNL.h"
92*53ee8cc1Swenshuai.xi #include "halPNL.h"
93*53ee8cc1Swenshuai.xi #include "PNL_private.h"
94*53ee8cc1Swenshuai.xi #include "pnl_hwreg_utility2.h"
95*53ee8cc1Swenshuai.xi #include "Maserati_pnl_lpll_tbl.h"
96*53ee8cc1Swenshuai.xi #include "Maserati_pnl_lpll_ext_tbl.h"
97*53ee8cc1Swenshuai.xi 
98*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
99*53ee8cc1Swenshuai.xi #include <linux/string.h>
100*53ee8cc1Swenshuai.xi #include <linux/delay.h>
101*53ee8cc1Swenshuai.xi #include <asm/div64.h>
102*53ee8cc1Swenshuai.xi #else
103*53ee8cc1Swenshuai.xi #include "string.h"
104*53ee8cc1Swenshuai.xi #define do_div(x,y) ((x)/=(y))
105*53ee8cc1Swenshuai.xi #endif
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
108*53ee8cc1Swenshuai.xi //  Driver Compiler Options
109*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
112*53ee8cc1Swenshuai.xi //  Local Defines
113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi #define UNUSED(x)       (x=x)
116*53ee8cc1Swenshuai.xi #if 1
117*53ee8cc1Swenshuai.xi #define HAL_PNL_DBG(_dbgSwitch_, _fmt, _args...)      { if((_dbgSwitch_ & _u16PnlDbgSwitch) != 0) printf("PNL:"_fmt, ##_args); }
118*53ee8cc1Swenshuai.xi #define HAL_MOD_CAL_DBG(x)    //x
119*53ee8cc1Swenshuai.xi #else
120*53ee8cc1Swenshuai.xi #define HAL_PNL_DBG(_dbgSwitch_, _fmt, _args...)      { }
121*53ee8cc1Swenshuai.xi #endif
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi #define DAC_LPLL_ICTRL     0x0002
124*53ee8cc1Swenshuai.xi #define LVDS_LPLL_ICTRL    0x0001
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi //Get MOD calibration time
127*53ee8cc1Swenshuai.xi #define MOD_CAL_TIMER   FALSE
128*53ee8cc1Swenshuai.xi 
129*53ee8cc1Swenshuai.xi //if mboot read eFuse and fill the register, then add this define to mark utopia efuse code flow
130*53ee8cc1Swenshuai.xi #define MOD_EFUSE_IN_MBOOT
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi //for LVDS HW Calibration ICON limitation
133*53ee8cc1Swenshuai.xi #define MOD_LVDS_ICON_HIGH_LIMIT 0x2E
134*53ee8cc1Swenshuai.xi #define MOD_LVDS_ICON_LOW_LIMIT  0x06
135*53ee8cc1Swenshuai.xi #define MOD_LVDS_ICON_DEFAULT    0x19
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi //for LVDS HW Calibration timeout (i.e. retry times after hw calibration failed)
138*53ee8cc1Swenshuai.xi #define MOD_LVDS_HW_CALI_TIME_OUT  0
139*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
140*53ee8cc1Swenshuai.xi //  Local Structurs
141*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
142*53ee8cc1Swenshuai.xi #define CLK_GEN0_REG_VIDEO_NUM    4
143*53ee8cc1Swenshuai.xi #define CLK_GEN0_REG_OSD_NUM      3
144*53ee8cc1Swenshuai.xi #define CLK_GEN2_REG_VIDEO_NUM    2
145*53ee8cc1Swenshuai.xi #define CLK_GEN2_REG_OSD_NUM      1
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi typedef enum
148*53ee8cc1Swenshuai.xi {
149*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_TTL,                          // 0
150*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_LVDS_1CH,                     // 1
151*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_LVDS_2CH,                     // 2
152*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_HS_LVDS_1CH,                  // 3
153*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_HS_LVDS_2CH,                  // 4
154*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_1CH_10BIT,               // 5
155*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_1CH_8BIT,                // 6
156*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_2CH_10BIT,               // 7
157*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_2CH_8BIT,                // 8
158*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_4CH_10BIT,               // 9
159*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_4CH_8BIT,                // 10
160*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_8CH_10BIT,               // 11
161*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_8CH_8BIT,                // 12
162*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_16CH_10BIT,              // 13
163*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_16CH_8BIT,               // 14
164*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_EPI_24_10BIT_12PAIR_X_1,      // 15
165*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_EPI_28_8BIT_12PAIR_X_1,       // 16
166*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_CMPI_27_8BIT_12PAIR_X_1,      // 17
167*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_CMPI_24_10BIT_12PAIR_X_1,     // 18
168*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_USIT_8BIT_12PAIR_X_1,         // 19
169*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_USIT_10BIT_12PAIR_X_1,        // 20
170*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_ISP_9_8BIT_12PAIR_X_1,            // 21
171*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_ISP_9_8BIT_6PAIR_X_1,             // 22
172*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_8V4O_10BIT,              // 23
173*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_8V4O_8BIT,               // 24
174*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_4V4O_10BIT,              // 25
175*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_4V4O_8BIT,               // 26
176*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_4V2O_10BIT,              // 27
177*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_VBY1_4V2O_8BIT,               // 28
178*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_MAX,                          // 29
179*53ee8cc1Swenshuai.xi } E_PNL_SUPPORTED_CLK_TYPE;
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi TBLStruct CLKGEN2SettingTBL_Video[E_PNL_SUPPORTED_CLK_MAX][CLK_GEN2_REG_VIDEO_NUM]=
182*53ee8cc1Swenshuai.xi {
183*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_TTL    NO.0
184*53ee8cc1Swenshuai.xi       //Address,Value,Mask
185*53ee8cc1Swenshuai.xi         {0x44,0x0014,0x001F},//clk_odclk
186*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
187*53ee8cc1Swenshuai.xi     },
188*53ee8cc1Swenshuai.xi 
189*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_1CH    NO.1
190*53ee8cc1Swenshuai.xi       //Address,Value,Mask
191*53ee8cc1Swenshuai.xi         {0x44,0x0014,0x001F},//clk_odclk
192*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
193*53ee8cc1Swenshuai.xi     },
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_2CH    NO.2
196*53ee8cc1Swenshuai.xi       //Address,Value,Mask
197*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
198*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
199*53ee8cc1Swenshuai.xi     },
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_1CH    NO.3
202*53ee8cc1Swenshuai.xi       //Address,Value,Mask
203*53ee8cc1Swenshuai.xi         {0x44,0x0014,0x001F},//clk_odclk
204*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
205*53ee8cc1Swenshuai.xi     },
206*53ee8cc1Swenshuai.xi 
207*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_2CH    NO.4
208*53ee8cc1Swenshuai.xi       //Address,Value,Mask
209*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
210*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
211*53ee8cc1Swenshuai.xi     },
212*53ee8cc1Swenshuai.xi 
213*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_1CH_10BIT    NO.5
214*53ee8cc1Swenshuai.xi       //Address,Value,Mask
215*53ee8cc1Swenshuai.xi         {0x44,0x0014,0x001F},//clk_odclk
216*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
217*53ee8cc1Swenshuai.xi     },
218*53ee8cc1Swenshuai.xi 
219*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_1CH_8BIT    NO.6
220*53ee8cc1Swenshuai.xi       //Address,Value,Mask
221*53ee8cc1Swenshuai.xi         {0x44,0x0014,0x001F},//clk_odclk
222*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
223*53ee8cc1Swenshuai.xi     },
224*53ee8cc1Swenshuai.xi 
225*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_10BIT    NO.7
226*53ee8cc1Swenshuai.xi       //Address,Value,Mask
227*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
228*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
229*53ee8cc1Swenshuai.xi     },
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_8BIT    NO.8
232*53ee8cc1Swenshuai.xi       //Address,Value,Mask
233*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
234*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
235*53ee8cc1Swenshuai.xi     },
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_10BIT    NO.9
238*53ee8cc1Swenshuai.xi       //Address,Value,Mask
239*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
240*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
241*53ee8cc1Swenshuai.xi     },
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_8BIT    NO.10
244*53ee8cc1Swenshuai.xi       //Address,Value,Mask
245*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
246*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
247*53ee8cc1Swenshuai.xi     },
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_10BIT    NO.11
250*53ee8cc1Swenshuai.xi       //Address,Value,Mask
251*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
252*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
253*53ee8cc1Swenshuai.xi     },
254*53ee8cc1Swenshuai.xi 
255*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_8BIT    NO.12
256*53ee8cc1Swenshuai.xi       //Address,Value,Mask
257*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
258*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
259*53ee8cc1Swenshuai.xi     },
260*53ee8cc1Swenshuai.xi 
261*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_10BIT    NO.13
262*53ee8cc1Swenshuai.xi       //Address,Value,Mask
263*53ee8cc1Swenshuai.xi         {0x44,0x000C,0x001F},//clk_odclk
264*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
265*53ee8cc1Swenshuai.xi     },
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_8BIT    NO.14
268*53ee8cc1Swenshuai.xi       //Address,Value,Mask
269*53ee8cc1Swenshuai.xi         {0x44,0x000C,0x001F},//clk_odclk
270*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
271*53ee8cc1Swenshuai.xi     },
272*53ee8cc1Swenshuai.xi 
273*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_24_10BIT_12PAIR_X_1    NO.15
274*53ee8cc1Swenshuai.xi       //Address,Value,Mask
275*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
276*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
277*53ee8cc1Swenshuai.xi     },
278*53ee8cc1Swenshuai.xi 
279*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_28_8BIT_12PAIR_X_1    NO.16
280*53ee8cc1Swenshuai.xi       //Address,Value,Mask
281*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
282*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
283*53ee8cc1Swenshuai.xi     },
284*53ee8cc1Swenshuai.xi 
285*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_27_8BIT_12PAIR_X_1    NO.17
286*53ee8cc1Swenshuai.xi       //Address,Value,Mask
287*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
288*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
289*53ee8cc1Swenshuai.xi     },
290*53ee8cc1Swenshuai.xi 
291*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_24_10BIT_12PAIR_X_1    NO.18
292*53ee8cc1Swenshuai.xi       //Address,Value,Mask
293*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
294*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
295*53ee8cc1Swenshuai.xi     },
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_8BIT_12PAIR_X_1    NO.19
298*53ee8cc1Swenshuai.xi       //Address,Value,Mask
299*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
300*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
301*53ee8cc1Swenshuai.xi     },
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_10BIT_12PAIR_X_1    NO.20
304*53ee8cc1Swenshuai.xi       //Address,Value,Mask
305*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
306*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
307*53ee8cc1Swenshuai.xi     },
308*53ee8cc1Swenshuai.xi 
309*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_12PAIR_X_1    NO.21
310*53ee8cc1Swenshuai.xi       //Address,Value,Mask
311*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
312*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
313*53ee8cc1Swenshuai.xi     },
314*53ee8cc1Swenshuai.xi 
315*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_6PAIR_X_1    NO.22
316*53ee8cc1Swenshuai.xi       //Address,Value,Mask
317*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
318*53ee8cc1Swenshuai.xi         {0x09,0x0001,0x000F},//clk_vby1
319*53ee8cc1Swenshuai.xi     },
320*53ee8cc1Swenshuai.xi 
321*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_10BIT    NO.23
322*53ee8cc1Swenshuai.xi       //Address,Value,Mask
323*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
324*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
325*53ee8cc1Swenshuai.xi     },
326*53ee8cc1Swenshuai.xi 
327*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_8BIT    NO.24
328*53ee8cc1Swenshuai.xi       //Address,Value,Mask
329*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
330*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
331*53ee8cc1Swenshuai.xi     },
332*53ee8cc1Swenshuai.xi 
333*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_10BIT    NO.25
334*53ee8cc1Swenshuai.xi       //Address,Value,Mask
335*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
336*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
337*53ee8cc1Swenshuai.xi     },
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_8BIT    NO.26
340*53ee8cc1Swenshuai.xi       //Address,Value,Mask
341*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
342*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
343*53ee8cc1Swenshuai.xi     },
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_10BIT    NO.27
346*53ee8cc1Swenshuai.xi       //Address,Value,Mask
347*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
348*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
349*53ee8cc1Swenshuai.xi     },
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_8BIT    NO.28
352*53ee8cc1Swenshuai.xi       //Address,Value,Mask
353*53ee8cc1Swenshuai.xi         {0x44,0x0004,0x001F},//clk_odclk
354*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x000F},//clk_vby1
355*53ee8cc1Swenshuai.xi     },
356*53ee8cc1Swenshuai.xi };
357*53ee8cc1Swenshuai.xi 
358*53ee8cc1Swenshuai.xi TBLStruct CLKGEN2SettingTBL_OSD[E_PNL_SUPPORTED_CLK_MAX][CLK_GEN2_REG_OSD_NUM]=
359*53ee8cc1Swenshuai.xi {
360*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_TTL    NO.0
361*53ee8cc1Swenshuai.xi       //Address,Value,Mask
362*53ee8cc1Swenshuai.xi         {0x09,0x0100,0x3F00},//clk_vby1_osd (wclk)
363*53ee8cc1Swenshuai.xi     },
364*53ee8cc1Swenshuai.xi 
365*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_1CH    NO.1
366*53ee8cc1Swenshuai.xi       //Address,Value,Mask
367*53ee8cc1Swenshuai.xi         {0x09,0x0100,0x3F00},//clk_vby1_osd (wclk)
368*53ee8cc1Swenshuai.xi     },
369*53ee8cc1Swenshuai.xi 
370*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_2CH    NO.2
371*53ee8cc1Swenshuai.xi       //Address,Value,Mask
372*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
373*53ee8cc1Swenshuai.xi     },
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_1CH    NO.3
376*53ee8cc1Swenshuai.xi       //Address,Value,Mask
377*53ee8cc1Swenshuai.xi         {0x09,0x0100,0x3F00},//clk_vby1_osd (wclk)
378*53ee8cc1Swenshuai.xi     },
379*53ee8cc1Swenshuai.xi 
380*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_2CH    NO.4
381*53ee8cc1Swenshuai.xi       //Address,Value,Mask
382*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
383*53ee8cc1Swenshuai.xi     },
384*53ee8cc1Swenshuai.xi 
385*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_1CH_10BIT    NO.5
386*53ee8cc1Swenshuai.xi       //Address,Value,Mask
387*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
388*53ee8cc1Swenshuai.xi     },
389*53ee8cc1Swenshuai.xi 
390*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_1CH_8BIT    NO.6
391*53ee8cc1Swenshuai.xi       //Address,Value,Mask
392*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
393*53ee8cc1Swenshuai.xi     },
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_10BIT    NO.7
396*53ee8cc1Swenshuai.xi       //Address,Value,Mask
397*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
398*53ee8cc1Swenshuai.xi     },
399*53ee8cc1Swenshuai.xi 
400*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_8BIT    NO.8
401*53ee8cc1Swenshuai.xi       //Address,Value,Mask
402*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
403*53ee8cc1Swenshuai.xi     },
404*53ee8cc1Swenshuai.xi 
405*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_10BIT    NO.9
406*53ee8cc1Swenshuai.xi       //Address,Value,Mask
407*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
408*53ee8cc1Swenshuai.xi     },
409*53ee8cc1Swenshuai.xi 
410*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_8BIT    NO.10
411*53ee8cc1Swenshuai.xi       //Address,Value,Mask
412*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
413*53ee8cc1Swenshuai.xi     },
414*53ee8cc1Swenshuai.xi 
415*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_10BIT    NO.11
416*53ee8cc1Swenshuai.xi       //Address,Value,Mask
417*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
418*53ee8cc1Swenshuai.xi     },
419*53ee8cc1Swenshuai.xi 
420*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_8BIT    NO.12
421*53ee8cc1Swenshuai.xi       //Address,Value,Mask
422*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
423*53ee8cc1Swenshuai.xi     },
424*53ee8cc1Swenshuai.xi 
425*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_10BIT    NO.13
426*53ee8cc1Swenshuai.xi       //Address,Value,Mask
427*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
428*53ee8cc1Swenshuai.xi     },
429*53ee8cc1Swenshuai.xi 
430*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_8BIT    NO.14
431*53ee8cc1Swenshuai.xi       //Address,Value,Mask
432*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
433*53ee8cc1Swenshuai.xi     },
434*53ee8cc1Swenshuai.xi 
435*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_24_10BIT_12PAIR_X_1    NO.15
436*53ee8cc1Swenshuai.xi       //Address,Value,Mask
437*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
438*53ee8cc1Swenshuai.xi     },
439*53ee8cc1Swenshuai.xi 
440*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_28_8BIT_12PAIR_X_1    NO.16
441*53ee8cc1Swenshuai.xi       //Address,Value,Mask
442*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
443*53ee8cc1Swenshuai.xi     },
444*53ee8cc1Swenshuai.xi 
445*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_27_8BIT_12PAIR_X_1    NO.17
446*53ee8cc1Swenshuai.xi       //Address,Value,Mask
447*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
448*53ee8cc1Swenshuai.xi     },
449*53ee8cc1Swenshuai.xi 
450*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_24_10BIT_12PAIR_X_1    NO.18
451*53ee8cc1Swenshuai.xi       //Address,Value,Mask
452*53ee8cc1Swenshuai.xi         {0x09,0x0000,0x3F00},//clk_vby1_osd (wclk)
453*53ee8cc1Swenshuai.xi     },
454*53ee8cc1Swenshuai.xi 
455*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_8BIT_12PAIR_X_1    NO.19
456*53ee8cc1Swenshuai.xi       //Address,Value,Mask
457*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
458*53ee8cc1Swenshuai.xi     },
459*53ee8cc1Swenshuai.xi 
460*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_10BIT_12PAIR_X_1    NO.20
461*53ee8cc1Swenshuai.xi       //Address,Value,Mask
462*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
463*53ee8cc1Swenshuai.xi     },
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_12PAIR_X_1    NO.21
466*53ee8cc1Swenshuai.xi       //Address,Value,Mask
467*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
468*53ee8cc1Swenshuai.xi     },
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_6PAIR_X_1    NO.22
471*53ee8cc1Swenshuai.xi       //Address,Value,Mask
472*53ee8cc1Swenshuai.xi         {0x09,0x0800,0x3F00},//clk_vby1_osd (wclk)
473*53ee8cc1Swenshuai.xi     },
474*53ee8cc1Swenshuai.xi 
475*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_10BIT    NO.23
476*53ee8cc1Swenshuai.xi       //Address,Value,Mask
477*53ee8cc1Swenshuai.xi         {0x09,0x1800,0x3F00},//clk_vby1_osd (wclk)
478*53ee8cc1Swenshuai.xi     },
479*53ee8cc1Swenshuai.xi 
480*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_8BIT    NO.24
481*53ee8cc1Swenshuai.xi       //Address,Value,Mask
482*53ee8cc1Swenshuai.xi         {0x09,0x1800,0x3F00},//clk_vby1_osd (wclk)
483*53ee8cc1Swenshuai.xi     },
484*53ee8cc1Swenshuai.xi 
485*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_10BIT    NO.25
486*53ee8cc1Swenshuai.xi       //Address,Value,Mask
487*53ee8cc1Swenshuai.xi         {0x09,0x1800,0x3F00},//clk_vby1_osd (wclk)
488*53ee8cc1Swenshuai.xi     },
489*53ee8cc1Swenshuai.xi 
490*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_8BIT    NO.26
491*53ee8cc1Swenshuai.xi       //Address,Value,Mask
492*53ee8cc1Swenshuai.xi         {0x09,0x1800,0x3F00},//clk_vby1_osd (wclk)
493*53ee8cc1Swenshuai.xi     },
494*53ee8cc1Swenshuai.xi 
495*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_10BIT    NO.27
496*53ee8cc1Swenshuai.xi       //Address,Value,Mask
497*53ee8cc1Swenshuai.xi         {0x09,0x1800,0x3F00},//clk_vby1_osd (wclk)
498*53ee8cc1Swenshuai.xi     },
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_8BIT    NO.28
501*53ee8cc1Swenshuai.xi       //Address,Value,Mask
502*53ee8cc1Swenshuai.xi         {0x09,0x1800,0x3F00},//clk_vby1_osd (wclk)
503*53ee8cc1Swenshuai.xi     },
504*53ee8cc1Swenshuai.xi };
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi TBLStruct CLKGEN0SettingTBL_Video[E_PNL_SUPPORTED_CLK_MAX][CLK_GEN0_REG_VIDEO_NUM]=
507*53ee8cc1Swenshuai.xi {
508*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_TTL    NO.0
509*53ee8cc1Swenshuai.xi       //Address,Value,Mask
510*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
511*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
512*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
513*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
514*53ee8cc1Swenshuai.xi     },
515*53ee8cc1Swenshuai.xi 
516*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_1CH    NO.1
517*53ee8cc1Swenshuai.xi       //Address,Value,Mask
518*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
519*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
520*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
521*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
522*53ee8cc1Swenshuai.xi     },
523*53ee8cc1Swenshuai.xi 
524*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_2CH    NO.2
525*53ee8cc1Swenshuai.xi       //Address,Value,Mask
526*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
527*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
528*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
529*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
530*53ee8cc1Swenshuai.xi     },
531*53ee8cc1Swenshuai.xi 
532*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_1CH    NO.3
533*53ee8cc1Swenshuai.xi       //Address,Value,Mask
534*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
535*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
536*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
537*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
538*53ee8cc1Swenshuai.xi     },
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_2CH    NO.4
541*53ee8cc1Swenshuai.xi       //Address,Value,Mask
542*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
543*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
544*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
545*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
546*53ee8cc1Swenshuai.xi     },
547*53ee8cc1Swenshuai.xi 
548*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_1CH_10BIT    NO.5
549*53ee8cc1Swenshuai.xi       //Address,Value,Mask
550*53ee8cc1Swenshuai.xi         {0x5A,0x0A00,0x0F00},//Vmode
551*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
552*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
553*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
554*53ee8cc1Swenshuai.xi     },
555*53ee8cc1Swenshuai.xi 
556*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_1CH_8BIT    NO.6
557*53ee8cc1Swenshuai.xi       //Address,Value,Mask
558*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
559*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
560*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
561*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
562*53ee8cc1Swenshuai.xi     },
563*53ee8cc1Swenshuai.xi 
564*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_10BIT    NO.7
565*53ee8cc1Swenshuai.xi       //Address,Value,Mask
566*53ee8cc1Swenshuai.xi         {0x5A,0x0A00,0x0F00},//Vmode
567*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
568*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
569*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
570*53ee8cc1Swenshuai.xi     },
571*53ee8cc1Swenshuai.xi 
572*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_8BIT    NO.8
573*53ee8cc1Swenshuai.xi       //Address,Value,Mask
574*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
575*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
576*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
577*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
578*53ee8cc1Swenshuai.xi     },
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_10BIT    NO.9
581*53ee8cc1Swenshuai.xi       //Address,Value,Mask
582*53ee8cc1Swenshuai.xi         {0x5A,0x0900,0x0F00},//Vmode
583*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
584*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
585*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
586*53ee8cc1Swenshuai.xi     },
587*53ee8cc1Swenshuai.xi 
588*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_8BIT    NO.10
589*53ee8cc1Swenshuai.xi       //Address,Value,Mask
590*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
591*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
592*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
593*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
594*53ee8cc1Swenshuai.xi     },
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_10BIT    NO.11
597*53ee8cc1Swenshuai.xi       //Address,Value,Mask
598*53ee8cc1Swenshuai.xi         {0x5A,0x0800,0x0F00},//Vmode
599*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
600*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
601*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
602*53ee8cc1Swenshuai.xi     },
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_8BIT    NO.12
605*53ee8cc1Swenshuai.xi       //Address,Value,Mask
606*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
607*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
608*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
609*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
610*53ee8cc1Swenshuai.xi     },
611*53ee8cc1Swenshuai.xi 
612*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_10BIT    NO.13
613*53ee8cc1Swenshuai.xi       //Address,Value,Mask
614*53ee8cc1Swenshuai.xi         {0x5A,0x0800,0x0F00},//Vmode
615*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
616*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
617*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
618*53ee8cc1Swenshuai.xi     },
619*53ee8cc1Swenshuai.xi 
620*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_8BIT    NO.14
621*53ee8cc1Swenshuai.xi       //Address,Value,Mask
622*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
623*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
624*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
625*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
626*53ee8cc1Swenshuai.xi     },
627*53ee8cc1Swenshuai.xi 
628*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_24_10BIT_12PAIR_X_1    NO.15
629*53ee8cc1Swenshuai.xi       //Address,Value,Mask
630*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
631*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
632*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
633*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
634*53ee8cc1Swenshuai.xi     },
635*53ee8cc1Swenshuai.xi 
636*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_28_8BIT_12PAIR_X_1    NO.16
637*53ee8cc1Swenshuai.xi       //Address,Value,Mask
638*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
639*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
640*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
641*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
642*53ee8cc1Swenshuai.xi     },
643*53ee8cc1Swenshuai.xi 
644*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_27_8BIT_12PAIR_X_1    NO.17
645*53ee8cc1Swenshuai.xi       //Address,Value,Mask
646*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
647*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
648*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
649*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
650*53ee8cc1Swenshuai.xi     },
651*53ee8cc1Swenshuai.xi 
652*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_24_10BIT_12PAIR_X_1    NO.18
653*53ee8cc1Swenshuai.xi       //Address,Value,Mask
654*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
655*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
656*53ee8cc1Swenshuai.xi         {0x57,0x0000,0x000F},//wclk
657*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
658*53ee8cc1Swenshuai.xi     },
659*53ee8cc1Swenshuai.xi 
660*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_8BIT_12PAIR_X_1    NO.19
661*53ee8cc1Swenshuai.xi       //Address,Value,Mask
662*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
663*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
664*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
665*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
666*53ee8cc1Swenshuai.xi     },
667*53ee8cc1Swenshuai.xi 
668*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_10BIT_12PAIR_X_1    NO.20
669*53ee8cc1Swenshuai.xi       //Address,Value,Mask
670*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
671*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
672*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
673*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
674*53ee8cc1Swenshuai.xi     },
675*53ee8cc1Swenshuai.xi 
676*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_12PAIR_X_1    NO.21
677*53ee8cc1Swenshuai.xi       //Address,Value,Mask
678*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
679*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
680*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
681*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
682*53ee8cc1Swenshuai.xi     },
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_6PAIR_X_1    NO.22
685*53ee8cc1Swenshuai.xi       //Address,Value,Mask
686*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
687*53ee8cc1Swenshuai.xi         {0x53,0x0C00,0x3F00},//clk_odclk_mft
688*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
689*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
690*53ee8cc1Swenshuai.xi     },
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_10BIT    NO.23
693*53ee8cc1Swenshuai.xi       //Address,Value,Mask
694*53ee8cc1Swenshuai.xi         {0x5A,0x0800,0x0F00},//Vmode
695*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
696*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
697*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
698*53ee8cc1Swenshuai.xi     },
699*53ee8cc1Swenshuai.xi 
700*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_8BIT    NO.24
701*53ee8cc1Swenshuai.xi       //Address,Value,Mask
702*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
703*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
704*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
705*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
706*53ee8cc1Swenshuai.xi     },
707*53ee8cc1Swenshuai.xi 
708*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_10BIT    NO.25
709*53ee8cc1Swenshuai.xi       //Address,Value,Mask
710*53ee8cc1Swenshuai.xi         {0x5A,0x0900,0x0F00},//Vmode
711*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
712*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
713*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
714*53ee8cc1Swenshuai.xi     },
715*53ee8cc1Swenshuai.xi 
716*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_8BIT    NO.26
717*53ee8cc1Swenshuai.xi       //Address,Value,Mask
718*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
719*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
720*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
721*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
722*53ee8cc1Swenshuai.xi     },
723*53ee8cc1Swenshuai.xi 
724*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_10BIT    NO.27
725*53ee8cc1Swenshuai.xi       //Address,Value,Mask
726*53ee8cc1Swenshuai.xi         {0x5A,0x0900,0x0F00},//Vmode
727*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
728*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
729*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
730*53ee8cc1Swenshuai.xi     },
731*53ee8cc1Swenshuai.xi 
732*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_8BIT    NO.28
733*53ee8cc1Swenshuai.xi       //Address,Value,Mask
734*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0x0F00},//Vmode
735*53ee8cc1Swenshuai.xi         {0x53,0x0400,0x3F00},//clk_odclk_mft
736*53ee8cc1Swenshuai.xi         {0x57,0x000C,0x000F},//wclk
737*53ee8cc1Swenshuai.xi         {0x58,0x0000,0x000F},//rclk
738*53ee8cc1Swenshuai.xi     },
739*53ee8cc1Swenshuai.xi };
740*53ee8cc1Swenshuai.xi 
741*53ee8cc1Swenshuai.xi TBLStruct CLKGEN0SettingTBL_OSD[E_PNL_SUPPORTED_CLK_MAX][CLK_GEN0_REG_OSD_NUM]=
742*53ee8cc1Swenshuai.xi {
743*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_TTL    NO.0
744*53ee8cc1Swenshuai.xi       //Address,Value,Mask
745*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
746*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
747*53ee8cc1Swenshuai.xi         {0x63,0x0100,0x0F00},//osd_rclk
748*53ee8cc1Swenshuai.xi     },
749*53ee8cc1Swenshuai.xi 
750*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_1CH    NO.1
751*53ee8cc1Swenshuai.xi       //Address,Value,Mask
752*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
753*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x003F},//clk_osd2mod//{0x63,0x0001,0x003F},//clk_osd2mod
754*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk//{0x63,0x0100,0x0F00},//osd_rclk
755*53ee8cc1Swenshuai.xi     },
756*53ee8cc1Swenshuai.xi 
757*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_LVDS_2CH    NO.2
758*53ee8cc1Swenshuai.xi       //Address,Value,Mask
759*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
760*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x003F},//clk_osd2mod
761*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
762*53ee8cc1Swenshuai.xi     },
763*53ee8cc1Swenshuai.xi 
764*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_1CH    NO.3
765*53ee8cc1Swenshuai.xi       //Address,Value,Mask
766*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
767*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
768*53ee8cc1Swenshuai.xi         {0x63,0x0100,0x0F00},//osd_rclk
769*53ee8cc1Swenshuai.xi     },
770*53ee8cc1Swenshuai.xi 
771*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_HS_LVDS_2CH    NO.4
772*53ee8cc1Swenshuai.xi       //Address,Value,Mask
773*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
774*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x003F},//clk_osd2mod
775*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
776*53ee8cc1Swenshuai.xi     },
777*53ee8cc1Swenshuai.xi 
778*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_10BIT    NO.5
779*53ee8cc1Swenshuai.xi       //Address,Value,Mask
780*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
781*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
782*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
783*53ee8cc1Swenshuai.xi     },
784*53ee8cc1Swenshuai.xi 
785*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_8BIT    NO.6
786*53ee8cc1Swenshuai.xi       //Address,Value,Mask
787*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
788*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
789*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
790*53ee8cc1Swenshuai.xi     },
791*53ee8cc1Swenshuai.xi 
792*53ee8cc1Swenshuai.xi 
793*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_10BIT    NO.7
794*53ee8cc1Swenshuai.xi       //Address,Value,Mask
795*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
796*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
797*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
798*53ee8cc1Swenshuai.xi     },
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_2CH_8BIT    NO.8
801*53ee8cc1Swenshuai.xi       //Address,Value,Mask
802*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
803*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
804*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
805*53ee8cc1Swenshuai.xi     },
806*53ee8cc1Swenshuai.xi 
807*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_10BIT    NO.9
808*53ee8cc1Swenshuai.xi       //Address,Value,Mask
809*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
810*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
811*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
812*53ee8cc1Swenshuai.xi     },
813*53ee8cc1Swenshuai.xi 
814*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4CH_8BIT    NO.10
815*53ee8cc1Swenshuai.xi       //Address,Value,Mask
816*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
817*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
818*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
819*53ee8cc1Swenshuai.xi     },
820*53ee8cc1Swenshuai.xi 
821*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_10BIT    NO.11
822*53ee8cc1Swenshuai.xi       //Address,Value,Mask
823*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
824*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
825*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
826*53ee8cc1Swenshuai.xi     },
827*53ee8cc1Swenshuai.xi 
828*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8CH_8BIT    NO.12
829*53ee8cc1Swenshuai.xi       //Address,Value,Mask
830*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
831*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
832*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
833*53ee8cc1Swenshuai.xi     },
834*53ee8cc1Swenshuai.xi 
835*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_10BIT    NO.13
836*53ee8cc1Swenshuai.xi       //Address,Value,Mask
837*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
838*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
839*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
840*53ee8cc1Swenshuai.xi     },
841*53ee8cc1Swenshuai.xi 
842*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_16CH_8BIT    NO.14
843*53ee8cc1Swenshuai.xi       //Address,Value,Mask
844*53ee8cc1Swenshuai.xi 
845*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
846*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
847*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
848*53ee8cc1Swenshuai.xi     },
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_24_10BIT_12PAIR_X_1    NO.15
851*53ee8cc1Swenshuai.xi       //Address,Value,Mask
852*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
853*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
854*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
855*53ee8cc1Swenshuai.xi     },
856*53ee8cc1Swenshuai.xi 
857*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_EPI_28_8BIT_12PAIR_X_1    NO.16
858*53ee8cc1Swenshuai.xi       //Address,Value,Mask
859*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
860*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
861*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
862*53ee8cc1Swenshuai.xi     },
863*53ee8cc1Swenshuai.xi 
864*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_27_8BIT_12PAIR_X_1    NO.17
865*53ee8cc1Swenshuai.xi       //Address,Value,Mask
866*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
867*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
868*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
869*53ee8cc1Swenshuai.xi     },
870*53ee8cc1Swenshuai.xi 
871*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_CMPI_24_10BIT_12PAIR_X_1    NO.18
872*53ee8cc1Swenshuai.xi       //Address,Value,Mask
873*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
874*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
875*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
876*53ee8cc1Swenshuai.xi     },
877*53ee8cc1Swenshuai.xi 
878*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_8BIT_12PAIR_X_1    NO.19
879*53ee8cc1Swenshuai.xi       //Address,Value,Mask
880*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
881*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
882*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
883*53ee8cc1Swenshuai.xi     },
884*53ee8cc1Swenshuai.xi 
885*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_USIT_10BIT_12PAIR_X_1    NO.20
886*53ee8cc1Swenshuai.xi       //Address,Value,Mask
887*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
888*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
889*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
890*53ee8cc1Swenshuai.xi     },
891*53ee8cc1Swenshuai.xi 
892*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_12PAIR_X_1    NO.21
893*53ee8cc1Swenshuai.xi       //Address,Value,Mask
894*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
895*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
896*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
897*53ee8cc1Swenshuai.xi     },
898*53ee8cc1Swenshuai.xi 
899*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_ISP_9_8BIT_6PAIR_X_1    NO.22
900*53ee8cc1Swenshuai.xi       //Address,Value,Mask
901*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
902*53ee8cc1Swenshuai.xi         {0x63,0x0001,0x003F},//clk_osd2mod
903*53ee8cc1Swenshuai.xi         {0x63,0x0000,0x0F00},//osd_rclk
904*53ee8cc1Swenshuai.xi     },
905*53ee8cc1Swenshuai.xi 
906*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_10BIT    NO.23
907*53ee8cc1Swenshuai.xi       //Address,Value,Mask
908*53ee8cc1Swenshuai.xi         {0x5A,0x8000,0xF000},//Omode
909*53ee8cc1Swenshuai.xi         {0x63,0x0010,0x003F},//clk_osd2mod
910*53ee8cc1Swenshuai.xi         {0x63,0x0400,0x0F00},//osd_rclk
911*53ee8cc1Swenshuai.xi     },
912*53ee8cc1Swenshuai.xi 
913*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_8V4O_8BIT    NO.24
914*53ee8cc1Swenshuai.xi       //Address,Value,Mask
915*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
916*53ee8cc1Swenshuai.xi         {0x63,0x0010,0x003F},//clk_osd2mod
917*53ee8cc1Swenshuai.xi         {0x63,0x0400,0x0F00},//osd_rclk
918*53ee8cc1Swenshuai.xi     },
919*53ee8cc1Swenshuai.xi 
920*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_10BIT    NO.25
921*53ee8cc1Swenshuai.xi       //Address,Value,Mask
922*53ee8cc1Swenshuai.xi         {0x5A,0x8000,0xF000},//Omode
923*53ee8cc1Swenshuai.xi         {0x63,0x0010,0x003F},//clk_osd2mod
924*53ee8cc1Swenshuai.xi         {0x63,0x0400,0x0F00},//osd_rclk
925*53ee8cc1Swenshuai.xi     },
926*53ee8cc1Swenshuai.xi 
927*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V4O_8BIT    NO.26
928*53ee8cc1Swenshuai.xi       //Address,Value,Mask
929*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
930*53ee8cc1Swenshuai.xi         {0x63,0x0010,0x003F},//clk_osd2mod
931*53ee8cc1Swenshuai.xi         {0x63,0x0400,0x0F00},//osd_rclk
932*53ee8cc1Swenshuai.xi     },
933*53ee8cc1Swenshuai.xi 
934*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_10BIT    NO.27
935*53ee8cc1Swenshuai.xi       //Address,Value,Mask
936*53ee8cc1Swenshuai.xi         {0x5A,0x9000,0xF000},//Omode
937*53ee8cc1Swenshuai.xi         {0x63,0x0010,0x003F},//clk_osd2mod
938*53ee8cc1Swenshuai.xi         {0x63,0x0400,0x0F00},//osd_rclk
939*53ee8cc1Swenshuai.xi     },
940*53ee8cc1Swenshuai.xi 
941*53ee8cc1Swenshuai.xi     { //E_PNL_SUPPORTED_CLK_VBY1_4V2O_8BIT    NO.28
942*53ee8cc1Swenshuai.xi       //Address,Value,Mask
943*53ee8cc1Swenshuai.xi         {0x5A,0x0000,0xF000},//Omode
944*53ee8cc1Swenshuai.xi         {0x63,0x0010,0x003F},//clk_osd2mod
945*53ee8cc1Swenshuai.xi         {0x63,0x0400,0x0F00},//osd_rclk
946*53ee8cc1Swenshuai.xi     },
947*53ee8cc1Swenshuai.xi };
948*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
949*53ee8cc1Swenshuai.xi //  Global Variables
950*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
951*53ee8cc1Swenshuai.xi #define LANE_NUM_EACH_PINMAPPING_GROUP1 4
952*53ee8cc1Swenshuai.xi #define LANE_NUM_EACH_PINMAPPING_GROUP2 4
953*53ee8cc1Swenshuai.xi #define LANE_NUM_EACH_PINMAPPING_GROUP3 4
954*53ee8cc1Swenshuai.xi #define LANE_NUM_EACH_PINMAPPING_GROUP4 4
955*53ee8cc1Swenshuai.xi 
956*53ee8cc1Swenshuai.xi #define PINMAPPING_EXP 16
957*53ee8cc1Swenshuai.xi 
958*53ee8cc1Swenshuai.xi #define PINMAPPING_MAX_LANE (0xF)
959*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
960*53ee8cc1Swenshuai.xi //  Local Variables
961*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
962*53ee8cc1Swenshuai.xi MS_U8 LANE_AND_CLK_TBL[VBY1_CLK_TBL_ROW][3]=
963*53ee8cc1Swenshuai.xi { //lane(from)  lane(to) bit(mask)
964*53ee8cc1Swenshuai.xi  { 0, 3, 0x01, },
965*53ee8cc1Swenshuai.xi  { 4, 7, 0x02, },
966*53ee8cc1Swenshuai.xi  { 8, 11,0x04, },
967*53ee8cc1Swenshuai.xi  { 12,15,0x08, }
968*53ee8cc1Swenshuai.xi };
969*53ee8cc1Swenshuai.xi 
970*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_XC_IsSupportPipPatchUsingSc1MainAsSc0Sub(void);
971*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
972*53ee8cc1Swenshuai.xi //  Debug Functions
973*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
974*53ee8cc1Swenshuai.xi 
975*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
976*53ee8cc1Swenshuai.xi //  Local Functions
977*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
978*53ee8cc1Swenshuai.xi static MS_BOOL _Hal_MOD_External_eFuse(void);
979*53ee8cc1Swenshuai.xi static void _Hal_MOD_VB1_CH_SWICH(PNL_TYPE eLPLL_Type_Ext);
980*53ee8cc1Swenshuai.xi static MS_U16 _Hal_MOD_Refine_ICON(MS_U16 u16ICON);
981*53ee8cc1Swenshuai.xi static E_PNL_SUPPORTED_CLK_TYPE _MHal_Transfer_PanelType_To_CLKType(PNL_TYPE eLPLL_Type, PNL_MODE eLPLL_Mode);
982*53ee8cc1Swenshuai.xi static E_PNL_SUPPORTED_CLK_TYPE _MHal_Transfer_PanelType_To_CLKType_OSD(PNL_TYPE eLPLL_OSD_Type,PNL_TYPE eLPLL_Video_Type,PNL_MODE eLPLL_Mode);
983*53ee8cc1Swenshuai.xi static void _MHal_PNL_DumpVideoClkTable(MS_U8 u8CLKTblIndex);
984*53ee8cc1Swenshuai.xi static void _MHal_PNL_DumpOSDClkTable(MS_U8 u8CLKTblIndex);
985*53ee8cc1Swenshuai.xi static void _MHal_PNL_Init_MFT(void *pInstance, PNL_InitData *pstPanelInitData);
986*53ee8cc1Swenshuai.xi 
987*53ee8cc1Swenshuai.xi static void _MHal_PNL_Auto_Set_Config(void *pInstance,
988*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder0_3,
989*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder4_7,
990*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder8_11,
991*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder12_15);
992*53ee8cc1Swenshuai.xi 
993*53ee8cc1Swenshuai.xi static void _MHal_PNL_Set_Clk(void *pInstance,
994*53ee8cc1Swenshuai.xi                               MS_U8 u8LaneNum,
995*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder0_3,
996*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder4_7,
997*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder8_11,
998*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder12_15);
999*53ee8cc1Swenshuai.xi 
1000*53ee8cc1Swenshuai.xi static MS_U8 _MHal_PNL_Get_LaneNum(void *pInstance);
1001*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1002*53ee8cc1Swenshuai.xi //  Global Function
1003*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1004*53ee8cc1Swenshuai.xi /**
1005*53ee8cc1Swenshuai.xi *   @brief: Power On MOD. but not mutex protected
1006*53ee8cc1Swenshuai.xi *
1007*53ee8cc1Swenshuai.xi */
1008*53ee8cc1Swenshuai.xi #define OUTPUT_CHANNEL_HALF_L 0x0055
1009*53ee8cc1Swenshuai.xi #define OUTPUT_CHANNEL_HALF_H 0x5500
1010*53ee8cc1Swenshuai.xi 
MHal_MOD_PowerOn(void * pInstance,MS_BOOL bEn,MS_U8 u8LPLL_Type,MS_U8 DualModeType,MS_U16 u16OutputCFG0_7,MS_U16 u16OutputCFG8_15,MS_U16 u16OutputCFG16_21)1011*53ee8cc1Swenshuai.xi MS_U8 MHal_MOD_PowerOn(void *pInstance, MS_BOOL bEn, MS_U8 u8LPLL_Type,MS_U8 DualModeType, MS_U16 u16OutputCFG0_7, MS_U16 u16OutputCFG8_15, MS_U16 u16OutputCFG16_21)
1012*53ee8cc1Swenshuai.xi {
1013*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1014*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
1015*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1016*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
1017*53ee8cc1Swenshuai.xi 
1018*53ee8cc1Swenshuai.xi     MS_U16 u16ChannelClk_En = 0;
1019*53ee8cc1Swenshuai.xi 
1020*53ee8cc1Swenshuai.xi     if( bEn )
1021*53ee8cc1Swenshuai.xi     {
1022*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, 0x00, BIT(4)); //reg_ck1x_4dig_phsel_path2
1023*53ee8cc1Swenshuai.xi 
1024*53ee8cc1Swenshuai.xi         //analog MOD power down. 1: power down, 0: power up
1025*53ee8cc1Swenshuai.xi         // For Mod2 no output signel
1026*53ee8cc1Swenshuai.xi         ///////////////////////////////////////////////////
1027*53ee8cc1Swenshuai.xi 
1028*53ee8cc1Swenshuai.xi         //2. Power on MOD (current and regulator)
1029*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, BIT(1) , BIT(1)); //reg_gcr_en_reg: enable clk tree pwr
1030*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x00 , BIT(0)); //reg_pd_ib_mod: power down mod atop
1031*53ee8cc1Swenshuai.xi 
1032*53ee8cc1Swenshuai.xi         //enable ib, enable ck
1033*53ee8cc1Swenshuai.xi         // [0]:ch0_3 [1]:ch4_7 [2]:ch8_11 [3]:ch12_15
1034*53ee8cc1Swenshuai.xi         if(u16OutputCFG0_7  & OUTPUT_CHANNEL_HALF_L)
1035*53ee8cc1Swenshuai.xi             u16ChannelClk_En |= BIT(0);
1036*53ee8cc1Swenshuai.xi         if(u16OutputCFG0_7  & OUTPUT_CHANNEL_HALF_H)
1037*53ee8cc1Swenshuai.xi             u16ChannelClk_En |= BIT(1);
1038*53ee8cc1Swenshuai.xi         if(u16OutputCFG8_15 & OUTPUT_CHANNEL_HALF_L)
1039*53ee8cc1Swenshuai.xi             u16ChannelClk_En |= BIT(2);
1040*53ee8cc1Swenshuai.xi         if(u16OutputCFG8_15 & OUTPUT_CHANNEL_HALF_H)
1041*53ee8cc1Swenshuai.xi             u16ChannelClk_En |= BIT(3);
1042*53ee8cc1Swenshuai.xi 
1043*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, u16ChannelClk_En, 0x001F);
1044*53ee8cc1Swenshuai.xi 
1045*53ee8cc1Swenshuai.xi         // clock gen of dot-mini
1046*53ee8cc1Swenshuai.xi         if(u8LPLL_Type == E_PNL_TYPE_MINILVDS)
1047*53ee8cc1Swenshuai.xi         {
1048*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_76_L, 0x0400, 0x0FFF);
1049*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0444, 0x0FFF);
1050*53ee8cc1Swenshuai.xi         }
1051*53ee8cc1Swenshuai.xi         else if( (u8LPLL_Type == E_PNL_LPLL_VBY1_10BIT_16LANE)||
1052*53ee8cc1Swenshuai.xi                  (u8LPLL_Type == E_PNL_LPLL_VBY1_8BIT_16LANE))
1053*53ee8cc1Swenshuai.xi         {
1054*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_76_L, 0x0000, 0x0FFF);
1055*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0000, 0x0FFF);
1056*53ee8cc1Swenshuai.xi         }
1057*53ee8cc1Swenshuai.xi         else if(u8LPLL_Type == E_PNL_LPLL_VBY1_10BIT_8LANE)
1058*53ee8cc1Swenshuai.xi         {
1059*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_76_L, 0x0000, 0x0FFF);
1060*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0000, 0x0FFF);
1061*53ee8cc1Swenshuai.xi         }
1062*53ee8cc1Swenshuai.xi         else if((u8LPLL_Type == E_PNL_LPLL_VBY1_10BIT_4LANE)||
1063*53ee8cc1Swenshuai.xi                 (u8LPLL_Type == E_PNL_LPLL_VBY1_10BIT_2LANE)||
1064*53ee8cc1Swenshuai.xi                 (u8LPLL_Type == E_PNL_LPLL_VBY1_8BIT_4LANE) ||
1065*53ee8cc1Swenshuai.xi                 (u8LPLL_Type == E_PNL_LPLL_VBY1_8BIT_2LANE))
1066*53ee8cc1Swenshuai.xi 
1067*53ee8cc1Swenshuai.xi         {
1068*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_76_L, 0x0000, 0x0FFF);
1069*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0000, 0x0FFF);
1070*53ee8cc1Swenshuai.xi         }
1071*53ee8cc1Swenshuai.xi         //// for osd dedicated output port, 1 port for video and 1 port for osd
1072*53ee8cc1Swenshuai.xi         else if((u8LPLL_Type == E_PNL_TYPE_HS_LVDS)&&
1073*53ee8cc1Swenshuai.xi                 (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Mode == E_PNL_MODE_SINGLE))
1074*53ee8cc1Swenshuai.xi         {
1075*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_76_L, 0x0044, 0x0FFF);
1076*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0400, 0x0FFF);
1077*53ee8cc1Swenshuai.xi         }
1078*53ee8cc1Swenshuai.xi         else
1079*53ee8cc1Swenshuai.xi         {
1080*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_76_L, 0x0000, 0x0FFF);
1081*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0000, 0x0FFF);
1082*53ee8cc1Swenshuai.xi         }
1083*53ee8cc1Swenshuai.xi 
1084*53ee8cc1Swenshuai.xi         // 3. 4. 5.
1085*53ee8cc1Swenshuai.xi         MHal_Output_LVDS_Pair_Setting(pInstance, DualModeType, u16OutputCFG0_7, u16OutputCFG8_15, u16OutputCFG16_21);
1086*53ee8cc1Swenshuai.xi     }
1087*53ee8cc1Swenshuai.xi     else
1088*53ee8cc1Swenshuai.xi     {
1089*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, BIT(4), BIT(4));// reg_ck1x_4dig_phsel_path2: test phase
1090*53ee8cc1Swenshuai.xi         if(u8LPLL_Type !=E_PNL_TYPE_MINILVDS)
1091*53ee8cc1Swenshuai.xi         {
1092*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, BIT(0), BIT(0)); //analog MOD power down. 1: power down, 0: power up
1093*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x00, BIT(1));   //reg_gcr_en_reg: enable clk tree pwr
1094*53ee8cc1Swenshuai.xi         }
1095*53ee8cc1Swenshuai.xi 
1096*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x0000, 0x001F);                           //enable ib, enable ck
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi         // clock gen of dot-mini
1099*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_76_L, 0x0100, 0x0FFF);
1100*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0111, 0x0FFF);
1101*53ee8cc1Swenshuai.xi 
1102*53ee8cc1Swenshuai.xi         if(  IsVBY1(u8LPLL_Type) )
1103*53ee8cc1Swenshuai.xi         {
1104*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x2000,0x2000);
1105*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
1106*53ee8cc1Swenshuai.xi             MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0000);
1107*53ee8cc1Swenshuai.xi             MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000);
1108*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x0000,0x2000);
1109*53ee8cc1Swenshuai.xi         }
1110*53ee8cc1Swenshuai.xi     }
1111*53ee8cc1Swenshuai.xi     return 1;
1112*53ee8cc1Swenshuai.xi }
1113*53ee8cc1Swenshuai.xi 
1114*53ee8cc1Swenshuai.xi /**
1115*53ee8cc1Swenshuai.xi *   @brief: Setup the PVDD power 1:2.5V, 0:3.3V
1116*53ee8cc1Swenshuai.xi *
1117*53ee8cc1Swenshuai.xi */
MHal_MOD_PVDD_Power_Setting(void * pInstance,MS_BOOL bIs2p5)1118*53ee8cc1Swenshuai.xi void MHal_MOD_PVDD_Power_Setting(void *pInstance, MS_BOOL bIs2p5)
1119*53ee8cc1Swenshuai.xi {
1120*53ee8cc1Swenshuai.xi     //MOD_A_W2BYTEMSK(REG_MOD_A_BK00_39_L, ((bIs2p5)? BIT(6):0), BIT(6));    //MOD PVDD=1: 0.9
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi 
MHal_PNL_TCON_Init(void * pInstance)1123*53ee8cc1Swenshuai.xi void MHal_PNL_TCON_Init(void *pInstance)
1124*53ee8cc1Swenshuai.xi {
1125*53ee8cc1Swenshuai.xi 
1126*53ee8cc1Swenshuai.xi }
1127*53ee8cc1Swenshuai.xi 
MHal_Shift_LVDS_Pair(void * pInstance,MS_U8 Type)1128*53ee8cc1Swenshuai.xi void MHal_Shift_LVDS_Pair(void *pInstance, MS_U8 Type)
1129*53ee8cc1Swenshuai.xi {
1130*53ee8cc1Swenshuai.xi     UNUSED(Type);
1131*53ee8cc1Swenshuai.xi }
1132*53ee8cc1Swenshuai.xi 
MHal_Output_LVDS_Pair_Setting(void * pInstance,MS_U8 Type,MS_U16 u16OutputCFG0_7,MS_U16 u16OutputCFG8_15,MS_U16 u16OutputCFG16_21)1133*53ee8cc1Swenshuai.xi void MHal_Output_LVDS_Pair_Setting(void *pInstance, MS_U8 Type, MS_U16 u16OutputCFG0_7, MS_U16 u16OutputCFG8_15, MS_U16 u16OutputCFG16_21)
1134*53ee8cc1Swenshuai.xi {
1135*53ee8cc1Swenshuai.xi 
1136*53ee8cc1Swenshuai.xi     if(Type == LVDS_DUAL_OUTPUT_SPECIAL )
1137*53ee8cc1Swenshuai.xi     {
1138*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0555);
1139*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x1554);
1140*53ee8cc1Swenshuai.xi     }
1141*53ee8cc1Swenshuai.xi     else if(Type == LVDS_SINGLE_OUTPUT_A)
1142*53ee8cc1Swenshuai.xi     {
1143*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_18_L, 0x5550, 0xFFF0);
1144*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0555);
1145*53ee8cc1Swenshuai.xi     }
1146*53ee8cc1Swenshuai.xi     else if( Type == LVDS_SINGLE_OUTPUT_B)
1147*53ee8cc1Swenshuai.xi     {
1148*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_18_L, 0x5550, 0xFFF0);
1149*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0555);
1150*53ee8cc1Swenshuai.xi     }
1151*53ee8cc1Swenshuai.xi     else if( Type == LVDS_OUTPUT_User)
1152*53ee8cc1Swenshuai.xi     {
1153*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, u16OutputCFG0_7);
1154*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, u16OutputCFG8_15);
1155*53ee8cc1Swenshuai.xi     }
1156*53ee8cc1Swenshuai.xi     else
1157*53ee8cc1Swenshuai.xi     {
1158*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_18_L, 0x5550, 0xFFF0);
1159*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0555);
1160*53ee8cc1Swenshuai.xi     }
1161*53ee8cc1Swenshuai.xi 
1162*53ee8cc1Swenshuai.xi     MsOS_DelayTask(2);
1163*53ee8cc1Swenshuai.xi 
1164*53ee8cc1Swenshuai.xi }
1165*53ee8cc1Swenshuai.xi 
MHal_Output_Channel_Order(void * pInstance,MS_U8 Type,MS_U16 u16OutputOrder0_3,MS_U16 u16OutputOrder4_7,MS_U16 u16OutputOrder8_11,MS_U16 u16OutputOrder12_13)1166*53ee8cc1Swenshuai.xi void MHal_Output_Channel_Order(void *pInstance,
1167*53ee8cc1Swenshuai.xi                                MS_U8 Type,
1168*53ee8cc1Swenshuai.xi                                MS_U16 u16OutputOrder0_3,
1169*53ee8cc1Swenshuai.xi                                MS_U16 u16OutputOrder4_7,
1170*53ee8cc1Swenshuai.xi                                MS_U16 u16OutputOrder8_11,
1171*53ee8cc1Swenshuai.xi                                MS_U16 u16OutputOrder12_13)
1172*53ee8cc1Swenshuai.xi {
1173*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1174*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
1175*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1176*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
1177*53ee8cc1Swenshuai.xi 
1178*53ee8cc1Swenshuai.xi     if(Type == APIPNL_OUTPUT_CHANNEL_ORDER_USER )
1179*53ee8cc1Swenshuai.xi     {
1180*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_55_L, u16OutputOrder0_3);
1181*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_56_L, u16OutputOrder4_7);
1182*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_57_L, u16OutputOrder8_11);
1183*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_58_L, u16OutputOrder12_13);
1184*53ee8cc1Swenshuai.xi     }
1185*53ee8cc1Swenshuai.xi     else
1186*53ee8cc1Swenshuai.xi     {
1187*53ee8cc1Swenshuai.xi         if(   (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)
1188*53ee8cc1Swenshuai.xi             ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE))
1189*53ee8cc1Swenshuai.xi         {
1190*53ee8cc1Swenshuai.xi             if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1)) // 2 Divisoin
1191*53ee8cc1Swenshuai.xi             {//APN 8V setting
1192*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_55_L, 0x3210);
1193*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_56_L, 0xBA98);
1194*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_57_L, 0xFFFF);
1195*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFFFF);
1196*53ee8cc1Swenshuai.xi             }
1197*53ee8cc1Swenshuai.xi             else
1198*53ee8cc1Swenshuai.xi             {//APN 8V setting
1199*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_55_L, 0x9810);
1200*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_56_L, 0xBA32);
1201*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_57_L, 0xFFFF);
1202*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFFFF);
1203*53ee8cc1Swenshuai.xi             }
1204*53ee8cc1Swenshuai.xi         }
1205*53ee8cc1Swenshuai.xi         else if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_LVDS)
1206*53ee8cc1Swenshuai.xi         {//LVDS
1207*53ee8cc1Swenshuai.xi             if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Mode==E_PNL_MODE_SINGLE)
1208*53ee8cc1Swenshuai.xi             {
1209*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_55_L, 0x76FF);
1210*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_56_L, 0xBA98);
1211*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_57_L, 0x3210);
1212*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFF54);
1213*53ee8cc1Swenshuai.xi             }
1214*53ee8cc1Swenshuai.xi             else
1215*53ee8cc1Swenshuai.xi             {
1216*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_55_L, 0x10FF);
1217*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_56_L, 0x5432);
1218*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_57_L, 0x9876);
1219*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFFBA);
1220*53ee8cc1Swenshuai.xi             }
1221*53ee8cc1Swenshuai.xi         }
1222*53ee8cc1Swenshuai.xi         else if( (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)
1223*53ee8cc1Swenshuai.xi                ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE))
1224*53ee8cc1Swenshuai.xi         {
1225*53ee8cc1Swenshuai.xi             if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1))
1226*53ee8cc1Swenshuai.xi             { // 4 Divisoin
1227*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_55_L, 0x6420);
1228*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_56_L, 0x7531);
1229*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_57_L, 0xECA8);
1230*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFDB9);
1231*53ee8cc1Swenshuai.xi             }
1232*53ee8cc1Swenshuai.xi             else
1233*53ee8cc1Swenshuai.xi             { // 2 division
1234*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_55_L, 0x3210);
1235*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_56_L, 0x7654);
1236*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_57_L, 0xBA98);
1237*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFEDC);
1238*53ee8cc1Swenshuai.xi             }
1239*53ee8cc1Swenshuai.xi         }
1240*53ee8cc1Swenshuai.xi         else if( (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_4LANE)
1241*53ee8cc1Swenshuai.xi                ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_4LANE))
1242*53ee8cc1Swenshuai.xi         {// APN just video setting
1243*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_55_L, 0x9810);
1244*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_56_L, 0xFFFF);
1245*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_57_L, 0xFFFF);
1246*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFFFF);
1247*53ee8cc1Swenshuai.xi         }
1248*53ee8cc1Swenshuai.xi         else if( (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_2LANE)
1249*53ee8cc1Swenshuai.xi                ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_2LANE))
1250*53ee8cc1Swenshuai.xi         {//APN just video setting
1251*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_55_L, 0xFF10);
1252*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_56_L, 0xFFFF);
1253*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_57_L, 0xFFFF);
1254*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFFFF);
1255*53ee8cc1Swenshuai.xi         }
1256*53ee8cc1Swenshuai.xi         else if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_1LANE)
1257*53ee8cc1Swenshuai.xi                ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_1LANE))
1258*53ee8cc1Swenshuai.xi         {
1259*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_55_L, 0xFFF0);
1260*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_56_L, 0xFFF0);
1261*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_57_L, 0xFFFF);
1262*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_58_L, 0xFFFF);
1263*53ee8cc1Swenshuai.xi         }
1264*53ee8cc1Swenshuai.xi         else
1265*53ee8cc1Swenshuai.xi         {
1266*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_55_L, 0x76DC);
1267*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_56_L, 0xBA98);
1268*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_57_L, 0x3210);
1269*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_58_L, 0x0054);
1270*53ee8cc1Swenshuai.xi         }
1271*53ee8cc1Swenshuai.xi     }
1272*53ee8cc1Swenshuai.xi 
1273*53ee8cc1Swenshuai.xi }
1274*53ee8cc1Swenshuai.xi 
MHal_PQ_Clock_Gen_For_Gamma(void * pInstance)1275*53ee8cc1Swenshuai.xi void MHal_PQ_Clock_Gen_For_Gamma(void *pInstance)
1276*53ee8cc1Swenshuai.xi {
1277*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_CLKGEN0_52_L, 0x00, 0x07);
1278*53ee8cc1Swenshuai.xi }
1279*53ee8cc1Swenshuai.xi 
MHal_VOP_SetGammaMappingMode(void * pInstance,MS_U8 u8Mapping)1280*53ee8cc1Swenshuai.xi void MHal_VOP_SetGammaMappingMode(void *pInstance, MS_U8 u8Mapping)
1281*53ee8cc1Swenshuai.xi {
1282*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1283*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1284*53ee8cc1Swenshuai.xi 
1285*53ee8cc1Swenshuai.xi     if(u8Mapping & GAMMA_MAPPING)
1286*53ee8cc1Swenshuai.xi     {
1287*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_74_L, (u8Mapping & GAMMA_10BIT_MAPPING)? BIT(15):0, BIT(15));
1288*53ee8cc1Swenshuai.xi     }
1289*53ee8cc1Swenshuai.xi     else
1290*53ee8cc1Swenshuai.xi     {
1291*53ee8cc1Swenshuai.xi         PNL_ASSERT(0, "Invalid eSupportGammaMapMode [%d] Passed to [%s], please make sure the u8Mapping[%d] is valid\n.",
1292*53ee8cc1Swenshuai.xi                        u8Mapping, __FUNCTION__, u8Mapping);
1293*53ee8cc1Swenshuai.xi     }
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi 
Hal_VOP_Is_GammaMappingMode_enable(void * pInstance)1296*53ee8cc1Swenshuai.xi MS_BOOL Hal_VOP_Is_GammaMappingMode_enable(void *pInstance)
1297*53ee8cc1Swenshuai.xi {
1298*53ee8cc1Swenshuai.xi     // Only support 1024 entry
1299*53ee8cc1Swenshuai.xi     return TRUE;
1300*53ee8cc1Swenshuai.xi }
1301*53ee8cc1Swenshuai.xi 
1302*53ee8cc1Swenshuai.xi // After A5, 8 bit mode only support burst write!!!
Hal_VOP_Is_GammaSupportSignalWrite(void * pInstance,DRVPNL_GAMMA_MAPPEING_MODE u8Mapping)1303*53ee8cc1Swenshuai.xi MS_BOOL Hal_VOP_Is_GammaSupportSignalWrite(void *pInstance, DRVPNL_GAMMA_MAPPEING_MODE u8Mapping)
1304*53ee8cc1Swenshuai.xi {
1305*53ee8cc1Swenshuai.xi     if( u8Mapping == E_DRVPNL_GAMMA_10BIT_MAPPING )
1306*53ee8cc1Swenshuai.xi         return TRUE;
1307*53ee8cc1Swenshuai.xi     else
1308*53ee8cc1Swenshuai.xi         return FALSE;
1309*53ee8cc1Swenshuai.xi }
1310*53ee8cc1Swenshuai.xi 
1311*53ee8cc1Swenshuai.xi 
1312*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////////////////////////////
1313*53ee8cc1Swenshuai.xi // Gamma format (12 bit LUT)
1314*53ee8cc1Swenshuai.xi //      0, 1, 2, 3, ..., NumOfLevel, totally N Sets of tNormalGammaR/G/B[],
1315*53ee8cc1Swenshuai.xi //      1 set uses 2 bytes of memory.
1316*53ee8cc1Swenshuai.xi //
1317*53ee8cc1Swenshuai.xi // [T2 and before ] N = 256
1318*53ee8cc1Swenshuai.xi // [T3]             N = 256 or 1024
1319*53ee8cc1Swenshuai.xi // ______________________________________________________________________________
1320*53ee8cc1Swenshuai.xi //  Byte | 0         1           2               n-1        n
1321*53ee8cc1Swenshuai.xi //    [G1|G0]       [G0]       [G1] . ...... .  [Gmax]    [Gmax]
1322*53ee8cc1Swenshuai.xi //    3:0  3:0      11:4       11:4              3:0       11:4
1323*53ee8cc1Swenshuai.xi //
1324*53ee8cc1Swenshuai.xi #ifdef MONACO_SC2
Hal_PNL_Set12BitGammaPerChannel_SC2(void * pInstance,MS_U8 u8Channel,MS_U8 * u8Tab,DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode)1325*53ee8cc1Swenshuai.xi void Hal_PNL_Set12BitGammaPerChannel_SC2(void *pInstance, MS_U8 u8Channel, MS_U8 * u8Tab, DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode )
1326*53ee8cc1Swenshuai.xi {
1327*53ee8cc1Swenshuai.xi     MS_U16 u16Addr             = 0;
1328*53ee8cc1Swenshuai.xi     MS_U16 u16CodeTableIndex  = u16Addr/2*3;
1329*53ee8cc1Swenshuai.xi     MS_U16 u16GammaValue      = 0;
1330*53ee8cc1Swenshuai.xi     MS_U16 u16MaxGammaValue   = 0;
1331*53ee8cc1Swenshuai.xi     MS_U16 u16NumOfLevel = GammaMapMode == E_DRVPNL_GAMMA_8BIT_MAPPING ? 256 : 1024;
1332*53ee8cc1Swenshuai.xi     MS_BOOL bUsingBurstWrite = !Hal_VOP_Is_GammaSupportSignalWrite(pInstance,GammaMapMode);
1333*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1334*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1335*53ee8cc1Swenshuai.xi 
1336*53ee8cc1Swenshuai.xi     // Go to burst write if not support
1337*53ee8cc1Swenshuai.xi     if ( bUsingBurstWrite )
1338*53ee8cc1Swenshuai.xi     {
1339*53ee8cc1Swenshuai.xi         // 1.   initial burst write address, LUT_ADDR[7:0]
1340*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_6C_L, 0x00 , 0x3FF);
1341*53ee8cc1Swenshuai.xi 
1342*53ee8cc1Swenshuai.xi         // 2.   select burst write channel, REG_LUT_BW_CH_SEL[1:0]
1343*53ee8cc1Swenshuai.xi         switch(u8Channel)
1344*53ee8cc1Swenshuai.xi         {
1345*53ee8cc1Swenshuai.xi             case 0:  // Red
1346*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_6D_L, 0x00 , BIT(3) | BIT(2) );
1347*53ee8cc1Swenshuai.xi                 break;
1348*53ee8cc1Swenshuai.xi 
1349*53ee8cc1Swenshuai.xi             case 1:  // Green
1350*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_6D_L, BIT(2) , BIT(3) | BIT(2) );
1351*53ee8cc1Swenshuai.xi                 break;
1352*53ee8cc1Swenshuai.xi 
1353*53ee8cc1Swenshuai.xi             case 2:  // Blue
1354*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_6D_L, BIT(3) , BIT(3) | BIT(2) );
1355*53ee8cc1Swenshuai.xi                 break;
1356*53ee8cc1Swenshuai.xi         }
1357*53ee8cc1Swenshuai.xi 
1358*53ee8cc1Swenshuai.xi         // 3.   enable burst write mode, REG_LUT_BW_MAIN_EN
1359*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_6D_L, BIT(0) , BIT(0)); // Burst write enable
1360*53ee8cc1Swenshuai.xi 
1361*53ee8cc1Swenshuai.xi     }
1362*53ee8cc1Swenshuai.xi 
1363*53ee8cc1Swenshuai.xi     //printf("\33[0;31m Gamma Mapping mode %d \n \33[m",GammaMapMode );
1364*53ee8cc1Swenshuai.xi     // write gamma table per one channel
1365*53ee8cc1Swenshuai.xi     for(; u16Addr < u16NumOfLevel; u16CodeTableIndex += 3)
1366*53ee8cc1Swenshuai.xi     {
1367*53ee8cc1Swenshuai.xi         // gamma x
1368*53ee8cc1Swenshuai.xi         u16GammaValue = u8Tab[u16CodeTableIndex] & 0x0F;
1369*53ee8cc1Swenshuai.xi         u16GammaValue |= u8Tab[u16CodeTableIndex+1] << 4;
1370*53ee8cc1Swenshuai.xi 
1371*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_GAMMA,"Gamma x: SrcGTbl[%d] = 0x%x, [%d] = 0x%x, Gamma = 0x%x, GammaLvl=%d\n",
1372*53ee8cc1Swenshuai.xi                                     u16CodeTableIndex, u8Tab[u16CodeTableIndex], u16CodeTableIndex+1, u8Tab[u16CodeTableIndex+1], u16GammaValue, u16NumOfLevel);
1373*53ee8cc1Swenshuai.xi 
1374*53ee8cc1Swenshuai.xi         if(u16MaxGammaValue < u16GammaValue)
1375*53ee8cc1Swenshuai.xi         {
1376*53ee8cc1Swenshuai.xi             u16MaxGammaValue = u16GammaValue;
1377*53ee8cc1Swenshuai.xi         }
1378*53ee8cc1Swenshuai.xi 
1379*53ee8cc1Swenshuai.xi         // write gamma value
1380*53ee8cc1Swenshuai.xi         hal_PNL_WriteGamma12Bit(pInstance,u8Channel,bUsingBurstWrite, u16Addr, u16GammaValue);
1381*53ee8cc1Swenshuai.xi         u16Addr++;
1382*53ee8cc1Swenshuai.xi 
1383*53ee8cc1Swenshuai.xi         // gamma x+1
1384*53ee8cc1Swenshuai.xi         u16GammaValue = (u8Tab[u16CodeTableIndex] & 0xF0) >> 4;
1385*53ee8cc1Swenshuai.xi         u16GammaValue |= u8Tab[u16CodeTableIndex+2] << 4;
1386*53ee8cc1Swenshuai.xi 
1387*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_GAMMA, "Gamma x+1: SrcGTbl[%d] = 0x%x, [%d] = 0x%x, Gamma = 0x%x\n", u16CodeTableIndex, u8Tab[u16CodeTableIndex], u16CodeTableIndex+2, u8Tab[u16CodeTableIndex+2], u16GammaValue);
1388*53ee8cc1Swenshuai.xi 
1389*53ee8cc1Swenshuai.xi         if(u16MaxGammaValue < u16GammaValue)
1390*53ee8cc1Swenshuai.xi             {
1391*53ee8cc1Swenshuai.xi             u16MaxGammaValue = u16GammaValue;
1392*53ee8cc1Swenshuai.xi             }
1393*53ee8cc1Swenshuai.xi 
1394*53ee8cc1Swenshuai.xi         // write gamma value
1395*53ee8cc1Swenshuai.xi         hal_PNL_WriteGamma12Bit(pInstance,u8Channel,bUsingBurstWrite, u16Addr, u16GammaValue);
1396*53ee8cc1Swenshuai.xi         u16Addr++;
1397*53ee8cc1Swenshuai.xi     }
1398*53ee8cc1Swenshuai.xi 
1399*53ee8cc1Swenshuai.xi     if ( bUsingBurstWrite )
1400*53ee8cc1Swenshuai.xi     {
1401*53ee8cc1Swenshuai.xi         // 5.   after finish burst write data of one channel, disable burst write mode
1402*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_6D_L, 0x00 , BIT(0));
1403*53ee8cc1Swenshuai.xi     }
1404*53ee8cc1Swenshuai.xi 
1405*53ee8cc1Swenshuai.xi     hal_PNL_SetMaxGammaValue(pInstance,u8Channel, u16MaxGammaValue);
1406*53ee8cc1Swenshuai.xi }
1407*53ee8cc1Swenshuai.xi #endif
1408*53ee8cc1Swenshuai.xi 
1409*53ee8cc1Swenshuai.xi #ifdef USE_PANEL_GAMMA
_hal_PNL_WriteGamma12Bit_PanelGamma(void * pInstance,MS_U8 u8Channel,MS_BOOL bBurstWrite,MS_U16 u16Addr,MS_U16 u16GammaValue)1410*53ee8cc1Swenshuai.xi static void _hal_PNL_WriteGamma12Bit_PanelGamma(void *pInstance, MS_U8 u8Channel, MS_BOOL bBurstWrite, MS_U16 u16Addr, MS_U16 u16GammaValue)
1411*53ee8cc1Swenshuai.xi {
1412*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1413*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1414*53ee8cc1Swenshuai.xi 
1415*53ee8cc1Swenshuai.xi     MS_U16 u16Delay = 0xFFFF;
1416*53ee8cc1Swenshuai.xi 
1417*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_GAMMA, "Write [ch %d][addr 0x%x]: 0x%x \n", u8Channel, u16Addr, u16GammaValue);
1418*53ee8cc1Swenshuai.xi 
1419*53ee8cc1Swenshuai.xi     if (!bBurstWrite )
1420*53ee8cc1Swenshuai.xi     {
1421*53ee8cc1Swenshuai.xi         while (SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, 0x0C) && (--u16Delay));          // Check whether the Write chanel is ready
1422*53ee8cc1Swenshuai.xi         PNL_ASSERT(u16Delay > 0, "%s\n", "WriteGamma timeout");
1423*53ee8cc1Swenshuai.xi 
1424*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_1B_L, u16Addr, 0xFF);                          // set address port
1425*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, (REG_SC_BK24_1D_L + u8Channel *2), u16GammaValue, 0xFFF);      // Set channel data
1426*53ee8cc1Swenshuai.xi 
1427*53ee8cc1Swenshuai.xi         // kick off write
1428*53ee8cc1Swenshuai.xi         switch(u8Channel)
1429*53ee8cc1Swenshuai.xi         {
1430*53ee8cc1Swenshuai.xi             case 0:  // Red
1431*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, 0x00 , BIT(3) | BIT(2) );
1432*53ee8cc1Swenshuai.xi                 break;
1433*53ee8cc1Swenshuai.xi 
1434*53ee8cc1Swenshuai.xi             case 1:  // Green
1435*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, BIT(2) , BIT(3) | BIT(2) );
1436*53ee8cc1Swenshuai.xi                 break;
1437*53ee8cc1Swenshuai.xi 
1438*53ee8cc1Swenshuai.xi             case 2:  // Blue
1439*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, BIT(3) , BIT(3) | BIT(2) );
1440*53ee8cc1Swenshuai.xi                 break;
1441*53ee8cc1Swenshuai.xi 
1442*53ee8cc1Swenshuai.xi         }
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi         while (SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_1C_L, 0x0C) && (--u16Delay));          // Check whether the Write chanel is ready
1445*53ee8cc1Swenshuai.xi     }
1446*53ee8cc1Swenshuai.xi     else
1447*53ee8cc1Swenshuai.xi     {
1448*53ee8cc1Swenshuai.xi 
1449*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1D_L, u16GammaValue, 0xFFF);
1450*53ee8cc1Swenshuai.xi         SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK00_7F_L, 0x00); // make little time delay
1451*53ee8cc1Swenshuai.xi     }
1452*53ee8cc1Swenshuai.xi 
1453*53ee8cc1Swenshuai.xi 
1454*53ee8cc1Swenshuai.xi     PNL_ASSERT(u16Delay > 0, "%s\n", "WriteGamma timeout");
1455*53ee8cc1Swenshuai.xi }
1456*53ee8cc1Swenshuai.xi 
_hal_PNL_SetMaxGammaValue_PanelGamma(void * pInstance,MS_U8 u8Channel,MS_U16 u16MaxGammaValue)1457*53ee8cc1Swenshuai.xi static void _hal_PNL_SetMaxGammaValue_PanelGamma(void *pInstance, MS_U8 u8Channel, MS_U16 u16MaxGammaValue)
1458*53ee8cc1Swenshuai.xi {
1459*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1460*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1461*53ee8cc1Swenshuai.xi 
1462*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_GAMMA, "Max gamma of SC%tu %d is 0x%x\n", (ptrdiff_t)pPNLInstancePrivate->u32DeviceID, u8Channel, u16MaxGammaValue);
1463*53ee8cc1Swenshuai.xi         switch(u8Channel)
1464*53ee8cc1Swenshuai.xi         {
1465*53ee8cc1Swenshuai.xi             case 0:  // max. Red
1466*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_2C_L , u16MaxGammaValue, 0xFFF);           // max. base 0
1467*53ee8cc1Swenshuai.xi                 break;
1468*53ee8cc1Swenshuai.xi 
1469*53ee8cc1Swenshuai.xi             case 1:  // max. Green
1470*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_2E_L , u16MaxGammaValue, 0xFFF);           // max. base 1
1471*53ee8cc1Swenshuai.xi                 break;
1472*53ee8cc1Swenshuai.xi 
1473*53ee8cc1Swenshuai.xi             case 2:  //max.  Blue
1474*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_30_L , u16MaxGammaValue, 0xFFF);           // max. base 1
1475*53ee8cc1Swenshuai.xi                 break;
1476*53ee8cc1Swenshuai.xi            }
1477*53ee8cc1Swenshuai.xi }
1478*53ee8cc1Swenshuai.xi 
_Hal_PNL_Set12BitGammaPerChannel_PanelGamma(void * pInstance,MS_U8 u8Channel,MS_U8 * u8Tab,DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode)1479*53ee8cc1Swenshuai.xi static void _Hal_PNL_Set12BitGammaPerChannel_PanelGamma(void *pInstance, MS_U8 u8Channel, MS_U8 * u8Tab, DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode )
1480*53ee8cc1Swenshuai.xi {
1481*53ee8cc1Swenshuai.xi     MS_U16 u16Addr             = 0;
1482*53ee8cc1Swenshuai.xi     MS_U16 u16CodeTableIndex  = u16Addr/2*3;
1483*53ee8cc1Swenshuai.xi     MS_U16 u16GammaValue      = 0;
1484*53ee8cc1Swenshuai.xi     MS_U16 u16MaxGammaValue   = 0;
1485*53ee8cc1Swenshuai.xi     MS_U16 u16NumOfLevel = GammaMapMode == E_DRVPNL_GAMMA_8BIT_MAPPING ? 256 : 1024;
1486*53ee8cc1Swenshuai.xi     MS_BOOL bUsingBurstWrite = !Hal_VOP_Is_GammaSupportSignalWrite(pInstance,GammaMapMode);
1487*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1488*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1489*53ee8cc1Swenshuai.xi 
1490*53ee8cc1Swenshuai.xi     // Go to burst write if not support
1491*53ee8cc1Swenshuai.xi     if ( bUsingBurstWrite )
1492*53ee8cc1Swenshuai.xi     {
1493*53ee8cc1Swenshuai.xi         // 1.   initial burst write address, LUT_ADDR[7:0]
1494*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1B_L, 0x00 , 0xFF);
1495*53ee8cc1Swenshuai.xi 
1496*53ee8cc1Swenshuai.xi         // 2.   select burst write channel, REG_LUT_BW_CH_SEL[1:0]
1497*53ee8cc1Swenshuai.xi         switch(u8Channel)
1498*53ee8cc1Swenshuai.xi         {
1499*53ee8cc1Swenshuai.xi             case 0:  // Red
1500*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, 0x00 , BIT(3) | BIT(2) );
1501*53ee8cc1Swenshuai.xi                 break;
1502*53ee8cc1Swenshuai.xi 
1503*53ee8cc1Swenshuai.xi             case 1:  // Green
1504*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, BIT(2) , BIT(3) | BIT(2) );
1505*53ee8cc1Swenshuai.xi                 break;
1506*53ee8cc1Swenshuai.xi 
1507*53ee8cc1Swenshuai.xi             case 2:  // Blue
1508*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, BIT(3) , BIT(3) | BIT(2) );
1509*53ee8cc1Swenshuai.xi                 break;
1510*53ee8cc1Swenshuai.xi         }
1511*53ee8cc1Swenshuai.xi 
1512*53ee8cc1Swenshuai.xi         // 3.   enable burst write mode, REG_LUT_BW_MAIN_EN
1513*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, BIT(0) , BIT(0)); // Burst write enable
1514*53ee8cc1Swenshuai.xi 
1515*53ee8cc1Swenshuai.xi     }
1516*53ee8cc1Swenshuai.xi 
1517*53ee8cc1Swenshuai.xi     //printf("\33[0;31m Gamma Mapping mode %d \n \33[m",GammaMapMode );
1518*53ee8cc1Swenshuai.xi     // write gamma table per one channel
1519*53ee8cc1Swenshuai.xi     for(; u16Addr < u16NumOfLevel; u16CodeTableIndex += 3)
1520*53ee8cc1Swenshuai.xi     {
1521*53ee8cc1Swenshuai.xi         // gamma x
1522*53ee8cc1Swenshuai.xi         u16GammaValue = u8Tab[u16CodeTableIndex] & 0x0F;
1523*53ee8cc1Swenshuai.xi         u16GammaValue |= u8Tab[u16CodeTableIndex+1] << 4;
1524*53ee8cc1Swenshuai.xi 
1525*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_GAMMA,"Gamma x: SrcGTbl[%d] = 0x%x, [%d] = 0x%x, Gamma = 0x%x, GammaLvl=%d\n",
1526*53ee8cc1Swenshuai.xi                                     u16CodeTableIndex, u8Tab[u16CodeTableIndex], u16CodeTableIndex+1, u8Tab[u16CodeTableIndex+1], u16GammaValue, u16NumOfLevel);
1527*53ee8cc1Swenshuai.xi 
1528*53ee8cc1Swenshuai.xi         if(u16MaxGammaValue < u16GammaValue)
1529*53ee8cc1Swenshuai.xi         {
1530*53ee8cc1Swenshuai.xi             u16MaxGammaValue = u16GammaValue;
1531*53ee8cc1Swenshuai.xi         }
1532*53ee8cc1Swenshuai.xi 
1533*53ee8cc1Swenshuai.xi         // write gamma value
1534*53ee8cc1Swenshuai.xi         _hal_PNL_WriteGamma12Bit_PanelGamma(pInstance,u8Channel,bUsingBurstWrite, u16Addr, u16GammaValue);
1535*53ee8cc1Swenshuai.xi         u16Addr++;
1536*53ee8cc1Swenshuai.xi 
1537*53ee8cc1Swenshuai.xi         // gamma x+1
1538*53ee8cc1Swenshuai.xi         u16GammaValue = (u8Tab[u16CodeTableIndex] & 0xF0) >> 4;
1539*53ee8cc1Swenshuai.xi         u16GammaValue |= u8Tab[u16CodeTableIndex+2] << 4;
1540*53ee8cc1Swenshuai.xi 
1541*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_GAMMA, "Gamma x+1: SrcGTbl[%d] = 0x%x, [%d] = 0x%x, Gamma = 0x%x\n", u16CodeTableIndex, u8Tab[u16CodeTableIndex], u16CodeTableIndex+2, u8Tab[u16CodeTableIndex+2], u16GammaValue);
1542*53ee8cc1Swenshuai.xi 
1543*53ee8cc1Swenshuai.xi         if(u16MaxGammaValue < u16GammaValue)
1544*53ee8cc1Swenshuai.xi             {
1545*53ee8cc1Swenshuai.xi             u16MaxGammaValue = u16GammaValue;
1546*53ee8cc1Swenshuai.xi             }
1547*53ee8cc1Swenshuai.xi 
1548*53ee8cc1Swenshuai.xi         // write gamma value
1549*53ee8cc1Swenshuai.xi         _hal_PNL_WriteGamma12Bit_PanelGamma(pInstance,u8Channel,bUsingBurstWrite, u16Addr, u16GammaValue);
1550*53ee8cc1Swenshuai.xi         u16Addr++;
1551*53ee8cc1Swenshuai.xi     }
1552*53ee8cc1Swenshuai.xi 
1553*53ee8cc1Swenshuai.xi     if ( bUsingBurstWrite )
1554*53ee8cc1Swenshuai.xi     {
1555*53ee8cc1Swenshuai.xi         // 5.   after finish burst write data of one channel, disable burst write mode
1556*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK24_1C_L, 0x00 , BIT(0));
1557*53ee8cc1Swenshuai.xi     }
1558*53ee8cc1Swenshuai.xi     _hal_PNL_SetMaxGammaValue_PanelGamma(pInstance,u8Channel, u16MaxGammaValue);
1559*53ee8cc1Swenshuai.xi }
1560*53ee8cc1Swenshuai.xi 
1561*53ee8cc1Swenshuai.xi #endif
1562*53ee8cc1Swenshuai.xi 
_hal_PNL_WriteGamma12Bit(void * pInstance,MS_U8 u8Channel,MS_BOOL bBurstWrite,MS_U16 u16Addr,MS_U16 u16GammaValue)1563*53ee8cc1Swenshuai.xi static void _hal_PNL_WriteGamma12Bit(void *pInstance, MS_U8 u8Channel, MS_BOOL bBurstWrite, MS_U16 u16Addr, MS_U16 u16GammaValue)
1564*53ee8cc1Swenshuai.xi {
1565*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1566*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1567*53ee8cc1Swenshuai.xi 
1568*53ee8cc1Swenshuai.xi     MS_U16 u16Delay = 0xFFFF;
1569*53ee8cc1Swenshuai.xi 
1570*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_GAMMA, "Write [ch %d][addr 0x%x]: 0x%x \n", u8Channel, u16Addr, u16GammaValue);
1571*53ee8cc1Swenshuai.xi 
1572*53ee8cc1Swenshuai.xi     if (!bBurstWrite )
1573*53ee8cc1Swenshuai.xi     {
1574*53ee8cc1Swenshuai.xi         while (SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_6D_L, 0xE0) && (--u16Delay));          // Check whether the Write chanel is ready
1575*53ee8cc1Swenshuai.xi         PNL_ASSERT(u16Delay > 0, "%s\n", "WriteGamma timeout");
1576*53ee8cc1Swenshuai.xi 
1577*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_6C_L, u16Addr, 0x3FF);                          // set address port
1578*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, (REG_SC_BK10_6E_L + u8Channel *2), u16GammaValue, 0xFFF);      // Set channel data
1579*53ee8cc1Swenshuai.xi 
1580*53ee8cc1Swenshuai.xi         // kick off write
1581*53ee8cc1Swenshuai.xi         switch(u8Channel)
1582*53ee8cc1Swenshuai.xi         {
1583*53ee8cc1Swenshuai.xi             case 0:  // Red
1584*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_6D_L, BIT(5), BIT(5));
1585*53ee8cc1Swenshuai.xi                 break;
1586*53ee8cc1Swenshuai.xi 
1587*53ee8cc1Swenshuai.xi             case 1:  // Green
1588*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_6D_L, BIT(6), BIT(6));
1589*53ee8cc1Swenshuai.xi                 break;
1590*53ee8cc1Swenshuai.xi 
1591*53ee8cc1Swenshuai.xi             case 2:  // Blue
1592*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_6D_L, BIT(7), BIT(7));
1593*53ee8cc1Swenshuai.xi                 break;
1594*53ee8cc1Swenshuai.xi         }
1595*53ee8cc1Swenshuai.xi 
1596*53ee8cc1Swenshuai.xi         while (SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_6D_L, 0xE0) && (--u16Delay));          // Check whether the Write chanel is ready
1597*53ee8cc1Swenshuai.xi     }
1598*53ee8cc1Swenshuai.xi     else
1599*53ee8cc1Swenshuai.xi     {
1600*53ee8cc1Swenshuai.xi 
1601*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_72_L, u16GammaValue, 0xFFF);
1602*53ee8cc1Swenshuai.xi         SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK00_7F_L, 0x00); // make little time delay
1603*53ee8cc1Swenshuai.xi     }
1604*53ee8cc1Swenshuai.xi 
1605*53ee8cc1Swenshuai.xi 
1606*53ee8cc1Swenshuai.xi     PNL_ASSERT(u16Delay > 0, "%s\n", "WriteGamma timeout");
1607*53ee8cc1Swenshuai.xi }
1608*53ee8cc1Swenshuai.xi 
1609*53ee8cc1Swenshuai.xi 
_hal_PNL_SetMaxGammaValue(void * pInstance,MS_U8 u8Channel,MS_U16 u16MaxGammaValue)1610*53ee8cc1Swenshuai.xi static void _hal_PNL_SetMaxGammaValue(void *pInstance, MS_U8 u8Channel, MS_U16 u16MaxGammaValue)
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1613*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_GAMMA, "Max gamma of SC%tu %d is 0x%x\n", (ptrdiff_t)pPNLInstancePrivate->u32DeviceID, u8Channel, u16MaxGammaValue);
1616*53ee8cc1Swenshuai.xi #ifdef MONACO_SC2
1617*53ee8cc1Swenshuai.xi     if(pPNLInstancePrivate->u32DeviceID == 0)
1618*53ee8cc1Swenshuai.xi     {
1619*53ee8cc1Swenshuai.xi #endif
1620*53ee8cc1Swenshuai.xi         switch(u8Channel)
1621*53ee8cc1Swenshuai.xi         {
1622*53ee8cc1Swenshuai.xi             case 0:  // max. Red
1623*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_7D_L , u16MaxGammaValue, 0xFFF);           // max. base 0
1624*53ee8cc1Swenshuai.xi                 break;
1625*53ee8cc1Swenshuai.xi 
1626*53ee8cc1Swenshuai.xi             case 1:  // max. Green
1627*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_7E_L , u16MaxGammaValue, 0xFFF);           // max. base 1
1628*53ee8cc1Swenshuai.xi                 break;
1629*53ee8cc1Swenshuai.xi 
1630*53ee8cc1Swenshuai.xi             case 2:  //max.  Blue
1631*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_7F_L , u16MaxGammaValue, 0xFFF);           // max. base 1
1632*53ee8cc1Swenshuai.xi                 break;
1633*53ee8cc1Swenshuai.xi            }
1634*53ee8cc1Swenshuai.xi #ifdef MONACO_SC2
1635*53ee8cc1Swenshuai.xi     }else    //Nike
1636*53ee8cc1Swenshuai.xi     {
1637*53ee8cc1Swenshuai.xi     switch(u8Channel)
1638*53ee8cc1Swenshuai.xi     {
1639*53ee8cc1Swenshuai.xi         case 0:  // max. Red
1640*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_7A_L , u16MaxGammaValue, 0xFFF);           // max. base 0
1641*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_7B_L , u16MaxGammaValue, 0xFFF);           // max. base 1
1642*53ee8cc1Swenshuai.xi             break;
1643*53ee8cc1Swenshuai.xi 
1644*53ee8cc1Swenshuai.xi         case 1:  // max. Green
1645*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_7C_L , u16MaxGammaValue, 0xFFF);           // max. base 0
1646*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_7D_L , u16MaxGammaValue, 0xFFF);           // max. base 1
1647*53ee8cc1Swenshuai.xi             break;
1648*53ee8cc1Swenshuai.xi 
1649*53ee8cc1Swenshuai.xi         case 2:  //max.  Blue
1650*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_7E_L , u16MaxGammaValue, 0xFFF);           // max. base 0
1651*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_7F_L , u16MaxGammaValue, 0xFFF);           // max. base 1
1652*53ee8cc1Swenshuai.xi             break;
1653*53ee8cc1Swenshuai.xi      }
1654*53ee8cc1Swenshuai.xi 
1655*53ee8cc1Swenshuai.xi     }
1656*53ee8cc1Swenshuai.xi #endif
1657*53ee8cc1Swenshuai.xi }
1658*53ee8cc1Swenshuai.xi 
1659*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////////////////////////////
1660*53ee8cc1Swenshuai.xi // Gamma format (12 bit LUT)
1661*53ee8cc1Swenshuai.xi //      0, 1, 2, 3, ..., NumOfLevel, totally N Sets of tNormalGammaR/G/B[],
1662*53ee8cc1Swenshuai.xi //      1 set uses 2 bytes of memory.
1663*53ee8cc1Swenshuai.xi //
1664*53ee8cc1Swenshuai.xi // [T2 and before ] N = 256
1665*53ee8cc1Swenshuai.xi // [T3]             N = 256 or 1024
1666*53ee8cc1Swenshuai.xi // ______________________________________________________________________________
1667*53ee8cc1Swenshuai.xi //  Byte | 0         1           2               n-1        n
1668*53ee8cc1Swenshuai.xi //    [G1|G0]       [G0]       [G1] . ...... .  [Gmax]    [Gmax]
1669*53ee8cc1Swenshuai.xi //    3:0  3:0      11:4       11:4              3:0       11:4
1670*53ee8cc1Swenshuai.xi //
_Hal_PNL_Set12BitGammaPerChannel(void * pInstance,MS_U8 u8Channel,MS_U8 * u8Tab,DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode)1671*53ee8cc1Swenshuai.xi static void _Hal_PNL_Set12BitGammaPerChannel(void *pInstance, MS_U8 u8Channel, MS_U8 * u8Tab, DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode)
1672*53ee8cc1Swenshuai.xi {
1673*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
1674*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
1675*53ee8cc1Swenshuai.xi 
1676*53ee8cc1Swenshuai.xi     MS_U16 u16Addr            = 0;
1677*53ee8cc1Swenshuai.xi     MS_U16 u16CodeTableIndex  = u16Addr/2*3;
1678*53ee8cc1Swenshuai.xi     MS_U16 u16GammaValue      = 0;
1679*53ee8cc1Swenshuai.xi     MS_U16 u16MaxGammaValue   = 0;
1680*53ee8cc1Swenshuai.xi     MS_U16 u16NumOfLevel = GammaMapMode == E_DRVPNL_GAMMA_8BIT_MAPPING ? 256 : 1024;
1681*53ee8cc1Swenshuai.xi     MS_BOOL bUsingBurstWrite = !Hal_VOP_Is_GammaSupportSignalWrite(pInstance,GammaMapMode);
1682*53ee8cc1Swenshuai.xi 
1683*53ee8cc1Swenshuai.xi     // Go to burst write if not support
1684*53ee8cc1Swenshuai.xi     if ( bUsingBurstWrite )
1685*53ee8cc1Swenshuai.xi     {
1686*53ee8cc1Swenshuai.xi         // 1.   initial burst write address, LUT_ADDR[7:0]
1687*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_71_L, 0x00 , 0x3FF);
1688*53ee8cc1Swenshuai.xi 
1689*53ee8cc1Swenshuai.xi         // 2.   select burst write channel, REG_LUT_BW_CH_SEL[1:0]
1690*53ee8cc1Swenshuai.xi         switch(u8Channel)
1691*53ee8cc1Swenshuai.xi         {
1692*53ee8cc1Swenshuai.xi             case 0:  // Red
1693*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_70_L, 0x00 , BIT(6) | BIT(5) );
1694*53ee8cc1Swenshuai.xi                 break;
1695*53ee8cc1Swenshuai.xi 
1696*53ee8cc1Swenshuai.xi             case 1:  // Green
1697*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_70_L, BIT(5) , BIT(6) | BIT(5) );
1698*53ee8cc1Swenshuai.xi                 break;
1699*53ee8cc1Swenshuai.xi 
1700*53ee8cc1Swenshuai.xi             case 2:  // Blue
1701*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_70_L, BIT(6) , BIT(6) | BIT(5) );
1702*53ee8cc1Swenshuai.xi                 break;
1703*53ee8cc1Swenshuai.xi         }
1704*53ee8cc1Swenshuai.xi 
1705*53ee8cc1Swenshuai.xi         // 3.   enable burst write mode, REG_LUT_BW_MAIN_EN
1706*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_70_L, BIT(7) , BIT(7)); // Burst write enable
1707*53ee8cc1Swenshuai.xi 
1708*53ee8cc1Swenshuai.xi     }
1709*53ee8cc1Swenshuai.xi 
1710*53ee8cc1Swenshuai.xi     //printf("\33[0;31m Gamma Mapping mode %d \n \33[m",GammaMapMode );
1711*53ee8cc1Swenshuai.xi     // write gamma table per one channel
1712*53ee8cc1Swenshuai.xi     for(; u16Addr < u16NumOfLevel; u16CodeTableIndex += 3)
1713*53ee8cc1Swenshuai.xi     {
1714*53ee8cc1Swenshuai.xi         // gamma x
1715*53ee8cc1Swenshuai.xi         u16GammaValue = u8Tab[u16CodeTableIndex] & 0x0F;
1716*53ee8cc1Swenshuai.xi         u16GammaValue |= u8Tab[u16CodeTableIndex+1] << 4;
1717*53ee8cc1Swenshuai.xi 
1718*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_GAMMA,"Gamma x: SrcGTbl[%d] = 0x%x, [%d] = 0x%x, Gamma = 0x%x, GammaLvl=%d\n",
1719*53ee8cc1Swenshuai.xi                                     u16CodeTableIndex, u8Tab[u16CodeTableIndex], u16CodeTableIndex+1, u8Tab[u16CodeTableIndex+1], u16GammaValue, u16NumOfLevel);
1720*53ee8cc1Swenshuai.xi 
1721*53ee8cc1Swenshuai.xi         if(u16MaxGammaValue < u16GammaValue)
1722*53ee8cc1Swenshuai.xi         {
1723*53ee8cc1Swenshuai.xi             u16MaxGammaValue = u16GammaValue;
1724*53ee8cc1Swenshuai.xi         }
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi         // write gamma value
1727*53ee8cc1Swenshuai.xi         _hal_PNL_WriteGamma12Bit(pInstance,u8Channel,bUsingBurstWrite, u16Addr, u16GammaValue);
1728*53ee8cc1Swenshuai.xi         u16Addr++;
1729*53ee8cc1Swenshuai.xi 
1730*53ee8cc1Swenshuai.xi         // gamma x+1
1731*53ee8cc1Swenshuai.xi         u16GammaValue = (u8Tab[u16CodeTableIndex] & 0xF0) >> 4;
1732*53ee8cc1Swenshuai.xi         u16GammaValue |= u8Tab[u16CodeTableIndex+2] << 4;
1733*53ee8cc1Swenshuai.xi 
1734*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_GAMMA, "Gamma x+1: SrcGTbl[%d] = 0x%x, [%d] = 0x%x, Gamma = 0x%x\n", u16CodeTableIndex, u8Tab[u16CodeTableIndex], u16CodeTableIndex+2, u8Tab[u16CodeTableIndex+2], u16GammaValue);
1735*53ee8cc1Swenshuai.xi 
1736*53ee8cc1Swenshuai.xi         if(u16MaxGammaValue < u16GammaValue)
1737*53ee8cc1Swenshuai.xi         {
1738*53ee8cc1Swenshuai.xi             u16MaxGammaValue = u16GammaValue;
1739*53ee8cc1Swenshuai.xi         }
1740*53ee8cc1Swenshuai.xi 
1741*53ee8cc1Swenshuai.xi         // write gamma value
1742*53ee8cc1Swenshuai.xi         _hal_PNL_WriteGamma12Bit(pInstance,u8Channel,bUsingBurstWrite, u16Addr, u16GammaValue);
1743*53ee8cc1Swenshuai.xi         u16Addr++;
1744*53ee8cc1Swenshuai.xi     }
1745*53ee8cc1Swenshuai.xi 
1746*53ee8cc1Swenshuai.xi     if ( bUsingBurstWrite )
1747*53ee8cc1Swenshuai.xi     {
1748*53ee8cc1Swenshuai.xi         // 5.   after finish burst write data of one channel, disable burst write mode
1749*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK10_70_L, 0x00 , BIT(7));
1750*53ee8cc1Swenshuai.xi     }
1751*53ee8cc1Swenshuai.xi 
1752*53ee8cc1Swenshuai.xi     _hal_PNL_SetMaxGammaValue(pInstance,u8Channel, u16MaxGammaValue);
1753*53ee8cc1Swenshuai.xi }
1754*53ee8cc1Swenshuai.xi 
hal_PNL_WriteGamma12Bit(void * pInstance,MS_U8 u8Channel,MS_BOOL bBurstWrite,MS_U16 u16Addr,MS_U16 u16GammaValue)1755*53ee8cc1Swenshuai.xi void hal_PNL_WriteGamma12Bit(void *pInstance, MS_U8 u8Channel, MS_BOOL bBurstWrite, MS_U16 u16Addr, MS_U16 u16GammaValue)
1756*53ee8cc1Swenshuai.xi {
1757*53ee8cc1Swenshuai.xi     #ifdef USE_PANEL_GAMMA
1758*53ee8cc1Swenshuai.xi         _hal_PNL_WriteGamma12Bit_PanelGamma(pInstance, u8Channel, bBurstWrite, u16Addr, u16GammaValue);
1759*53ee8cc1Swenshuai.xi     #endif
1760*53ee8cc1Swenshuai.xi     _hal_PNL_WriteGamma12Bit(pInstance, u8Channel, bBurstWrite, u16Addr, u16GammaValue);
1761*53ee8cc1Swenshuai.xi 
1762*53ee8cc1Swenshuai.xi }
1763*53ee8cc1Swenshuai.xi 
hal_PNL_SetMaxGammaValue(void * pInstance,MS_U8 u8Channel,MS_U16 u16MaxGammaValue)1764*53ee8cc1Swenshuai.xi void hal_PNL_SetMaxGammaValue(void *pInstance, MS_U8 u8Channel, MS_U16 u16MaxGammaValue)
1765*53ee8cc1Swenshuai.xi {
1766*53ee8cc1Swenshuai.xi     #ifdef USE_PANEL_GAMMA
1767*53ee8cc1Swenshuai.xi         _hal_PNL_SetMaxGammaValue_PanelGamma(pInstance, u8Channel, u16MaxGammaValue);
1768*53ee8cc1Swenshuai.xi     #endif
1769*53ee8cc1Swenshuai.xi     _hal_PNL_SetMaxGammaValue(pInstance, u8Channel, u16MaxGammaValue);
1770*53ee8cc1Swenshuai.xi }
1771*53ee8cc1Swenshuai.xi 
Hal_PNL_Set12BitGammaPerChannel(void * pInstance,MS_U8 u8Channel,MS_U8 * u8Tab,DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode)1772*53ee8cc1Swenshuai.xi void Hal_PNL_Set12BitGammaPerChannel(void *pInstance, MS_U8 u8Channel, MS_U8 * u8Tab, DRVPNL_GAMMA_MAPPEING_MODE GammaMapMode)
1773*53ee8cc1Swenshuai.xi {
1774*53ee8cc1Swenshuai.xi     #ifdef USE_PANEL_GAMMA
1775*53ee8cc1Swenshuai.xi         _Hal_PNL_Set12BitGammaPerChannel_PanelGamma(pInstance, u8Channel, u8Tab, GammaMapMode);
1776*53ee8cc1Swenshuai.xi     #endif
1777*53ee8cc1Swenshuai.xi     _Hal_PNL_Set12BitGammaPerChannel(pInstance, u8Channel, u8Tab, GammaMapMode);
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi 
1780*53ee8cc1Swenshuai.xi // src : 1 (scaler lpll)
1781*53ee8cc1Swenshuai.xi // src : 0 (frc lpll)
MHal_PNL_FRC_lpll_src_sel(void * pInstance,MS_U8 u8src)1782*53ee8cc1Swenshuai.xi MS_U8 MHal_PNL_FRC_lpll_src_sel(void *pInstance, MS_U8 u8src)
1783*53ee8cc1Swenshuai.xi {
1784*53ee8cc1Swenshuai.xi     if (u8src > 1)
1785*53ee8cc1Swenshuai.xi     {
1786*53ee8cc1Swenshuai.xi         return FALSE;
1787*53ee8cc1Swenshuai.xi     }
1788*53ee8cc1Swenshuai.xi     else
1789*53ee8cc1Swenshuai.xi     {
1790*53ee8cc1Swenshuai.xi //Not support two LPLL (frc lpll) for Manhattan
1791*53ee8cc1Swenshuai.xi #if 0
1792*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_BK_LPLL(0x00), 0x00, 0x0F);
1793*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_BK_LPLL(0x7F), u8src?BIT(8):0, BIT(8));
1794*53ee8cc1Swenshuai.xi 
1795*53ee8cc1Swenshuai.xi         if(u8src==0)
1796*53ee8cc1Swenshuai.xi         {
1797*53ee8cc1Swenshuai.xi             W2BYTEMSK(L_BK_LPLL(0x00), 0x01, 0x0F);
1798*53ee8cc1Swenshuai.xi             W2BYTEMSK(L_BK_LPLL(0x7F), BIT(8), BIT(8));
1799*53ee8cc1Swenshuai.xi             W2BYTEMSK(L_BK_LPLL(0x00), 0x00, 0x0F); // restore to sub bnak 0
1800*53ee8cc1Swenshuai.xi         }
1801*53ee8cc1Swenshuai.xi #endif
1802*53ee8cc1Swenshuai.xi         return TRUE;
1803*53ee8cc1Swenshuai.xi     }
1804*53ee8cc1Swenshuai.xi 
1805*53ee8cc1Swenshuai.xi }
1806*53ee8cc1Swenshuai.xi 
_MHal_PNL_GetSupportedLPLLIndex(void * pInstance,PNL_TYPE eLPLL_Type,PNL_MODE eLPLL_Mode,MS_U64 ldHz,PNL_LPLL_TYPE_SEL lpll_type_sel)1807*53ee8cc1Swenshuai.xi static MS_U8 _MHal_PNL_GetSupportedLPLLIndex(void *pInstance,
1808*53ee8cc1Swenshuai.xi                                                                  PNL_TYPE eLPLL_Type,
1809*53ee8cc1Swenshuai.xi                                                                  PNL_MODE eLPLL_Mode,
1810*53ee8cc1Swenshuai.xi                                                                  MS_U64 ldHz, PNL_LPLL_TYPE_SEL lpll_type_sel)
1811*53ee8cc1Swenshuai.xi {
1812*53ee8cc1Swenshuai.xi     MS_U8 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MAX;
1813*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
1814*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]eLPLL_Type=%u, eLPLL_Mode=%u, ldHz=%lu, lpll_type_sel=%u\n", __FUNCTION__, __LINE__, eLPLL_Type, eLPLL_Mode, ldHz, lpll_type_sel);
1815*53ee8cc1Swenshuai.xi #else
1816*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]eLPLL_Type=%u, eLPLL_Mode=%u, ldHz=%llu, lpll_type_sel=%u\n", __FUNCTION__, __LINE__, eLPLL_Type, eLPLL_Mode, ldHz, lpll_type_sel);
1817*53ee8cc1Swenshuai.xi #endif
1818*53ee8cc1Swenshuai.xi 
1819*53ee8cc1Swenshuai.xi     /// Mini LVDS, EPI34/28, LVDS_1CH, Vx1_1P are 1P structure
1820*53ee8cc1Swenshuai.xi     if(!((eLPLL_Type == E_PNL_TYPE_TTL)||
1821*53ee8cc1Swenshuai.xi         ((eLPLL_Type == E_PNL_TYPE_LVDS)&&(eLPLL_Mode==E_PNL_MODE_SINGLE))||
1822*53ee8cc1Swenshuai.xi         ((eLPLL_Type == E_PNL_TYPE_HS_LVDS)&&(eLPLL_Mode==E_PNL_MODE_SINGLE))||
1823*53ee8cc1Swenshuai.xi         (eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_1LANE)||(eLPLL_Type == E_PNL_LPLL_VBY1_8BIT_1LANE)||
1824*53ee8cc1Swenshuai.xi         ((eLPLL_Type >= E_PNL_LPLL_MINILVDS_2CH_3P_8BIT)&&(eLPLL_Type <= E_PNL_LPLL_MINILVDS_1CH_6P_6BIT))||
1825*53ee8cc1Swenshuai.xi         ((eLPLL_Type >= E_PNL_LPLL_EPI34_2P)&&(eLPLL_Type <= E_PNL_LPLL_EPI28_4P))))
1826*53ee8cc1Swenshuai.xi     {
1827*53ee8cc1Swenshuai.xi         ldHz/=2;
1828*53ee8cc1Swenshuai.xi     }
1829*53ee8cc1Swenshuai.xi 
1830*53ee8cc1Swenshuai.xi     switch(lpll_type_sel)
1831*53ee8cc1Swenshuai.xi     {
1832*53ee8cc1Swenshuai.xi         default:
1833*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VIDEO:
1834*53ee8cc1Swenshuai.xi         {
1835*53ee8cc1Swenshuai.xi             switch (eLPLL_Type)
1836*53ee8cc1Swenshuai.xi             {
1837*53ee8cc1Swenshuai.xi                 case E_PNL_TYPE_TTL:
1838*53ee8cc1Swenshuai.xi                     if (ldHz < 250000000UL)
1839*53ee8cc1Swenshuai.xi                     {
1840*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_TTL_25to25MHz;
1841*53ee8cc1Swenshuai.xi                     }
1842*53ee8cc1Swenshuai.xi                     else if ((ldHz >= 250000000UL) && (ldHz < 500000000UL))
1843*53ee8cc1Swenshuai.xi                     {
1844*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_TTL_25to50MHz;
1845*53ee8cc1Swenshuai.xi                     }
1846*53ee8cc1Swenshuai.xi                     else if((ldHz >= 500000000UL) && (ldHz < 1000000000UL))
1847*53ee8cc1Swenshuai.xi                     {
1848*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_TTL_50to100MHz;
1849*53ee8cc1Swenshuai.xi                     }
1850*53ee8cc1Swenshuai.xi                     else
1851*53ee8cc1Swenshuai.xi                     {
1852*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_TTL_100to150MHz;
1853*53ee8cc1Swenshuai.xi                     }
1854*53ee8cc1Swenshuai.xi                 break;
1855*53ee8cc1Swenshuai.xi 
1856*53ee8cc1Swenshuai.xi                 case E_PNL_TYPE_LVDS:
1857*53ee8cc1Swenshuai.xi                     switch (eLPLL_Mode)
1858*53ee8cc1Swenshuai.xi                     {
1859*53ee8cc1Swenshuai.xi                         case E_PNL_MODE_SINGLE:
1860*53ee8cc1Swenshuai.xi                             if (ldHz < 500000000UL)
1861*53ee8cc1Swenshuai.xi                             {
1862*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_LVDS_1CH_50to50MHz;
1863*53ee8cc1Swenshuai.xi                             }
1864*53ee8cc1Swenshuai.xi                             else
1865*53ee8cc1Swenshuai.xi                             {
1866*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_LVDS_1CH_50to80MHz;
1867*53ee8cc1Swenshuai.xi                             }
1868*53ee8cc1Swenshuai.xi                         break;
1869*53ee8cc1Swenshuai.xi 
1870*53ee8cc1Swenshuai.xi                         default:
1871*53ee8cc1Swenshuai.xi                         case E_PNL_MODE_DUAL:
1872*53ee8cc1Swenshuai.xi                             if (ldHz < 250000000UL)
1873*53ee8cc1Swenshuai.xi                             {
1874*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_LVDS_2CH_25to25MHz;
1875*53ee8cc1Swenshuai.xi                             }
1876*53ee8cc1Swenshuai.xi                             else if ((ldHz >= 250000000UL) && (ldHz < 500000000UL))
1877*53ee8cc1Swenshuai.xi                             {
1878*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_LVDS_2CH_25to50MHz;
1879*53ee8cc1Swenshuai.xi                             }
1880*53ee8cc1Swenshuai.xi                             else
1881*53ee8cc1Swenshuai.xi                             {
1882*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_LVDS_2CH_50to80MHz;
1883*53ee8cc1Swenshuai.xi                             }
1884*53ee8cc1Swenshuai.xi                         break;
1885*53ee8cc1Swenshuai.xi                     }
1886*53ee8cc1Swenshuai.xi                 break;
1887*53ee8cc1Swenshuai.xi 
1888*53ee8cc1Swenshuai.xi                 case E_PNL_TYPE_HS_LVDS:
1889*53ee8cc1Swenshuai.xi 
1890*53ee8cc1Swenshuai.xi                     switch (eLPLL_Mode)
1891*53ee8cc1Swenshuai.xi                     {
1892*53ee8cc1Swenshuai.xi                         case E_PNL_MODE_SINGLE:
1893*53ee8cc1Swenshuai.xi                             if(ldHz < 500000000UL)
1894*53ee8cc1Swenshuai.xi                             {
1895*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_HS_LVDS_1CH_50to50MHz;
1896*53ee8cc1Swenshuai.xi                             }
1897*53ee8cc1Swenshuai.xi                             else if((ldHz >= 500000000UL) && (ldHz < 1000000000UL))
1898*53ee8cc1Swenshuai.xi                             {
1899*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_HS_LVDS_1CH_50to100MHz;
1900*53ee8cc1Swenshuai.xi                             }
1901*53ee8cc1Swenshuai.xi                             else
1902*53ee8cc1Swenshuai.xi                             {
1903*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_HS_LVDS_1CH_100to150MHz;
1904*53ee8cc1Swenshuai.xi                             }
1905*53ee8cc1Swenshuai.xi                         break;
1906*53ee8cc1Swenshuai.xi 
1907*53ee8cc1Swenshuai.xi                         default:
1908*53ee8cc1Swenshuai.xi                         case E_PNL_MODE_DUAL:
1909*53ee8cc1Swenshuai.xi                             if(ldHz < 250000000UL)
1910*53ee8cc1Swenshuai.xi                             {
1911*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_HS_LVDS_2CH_25to25MHz;
1912*53ee8cc1Swenshuai.xi                             }
1913*53ee8cc1Swenshuai.xi                             else if((ldHz >= 250000000UL) && (ldHz < 500000000UL))
1914*53ee8cc1Swenshuai.xi                             {
1915*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_HS_LVDS_2CH_25to50MHz;
1916*53ee8cc1Swenshuai.xi                             }
1917*53ee8cc1Swenshuai.xi                             else if((ldHz >= 500000000UL) && (ldHz < 1000000000UL))
1918*53ee8cc1Swenshuai.xi                             {
1919*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_HS_LVDS_2CH_50to100MHz;
1920*53ee8cc1Swenshuai.xi                             }
1921*53ee8cc1Swenshuai.xi                             else
1922*53ee8cc1Swenshuai.xi                             {
1923*53ee8cc1Swenshuai.xi                                 u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_HS_LVDS_2CH_100to150MHz;
1924*53ee8cc1Swenshuai.xi                             }
1925*53ee8cc1Swenshuai.xi                         break;
1926*53ee8cc1Swenshuai.xi                     }
1927*53ee8cc1Swenshuai.xi                 break;
1928*53ee8cc1Swenshuai.xi ///Not Support
1929*53ee8cc1Swenshuai.xi #if 0
1930*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_MINILVDS_1CH_3P_8BIT:
1931*53ee8cc1Swenshuai.xi                     u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_1CH_3PAIR_8BIT_50to80MHz;
1932*53ee8cc1Swenshuai.xi                 break;
1933*53ee8cc1Swenshuai.xi 
1934*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_MINILVDS_2CH_3P_8BIT:
1935*53ee8cc1Swenshuai.xi                     if((ldHz >= 500000000) && (ldHz < 1000000000))
1936*53ee8cc1Swenshuai.xi                     {
1937*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_3PAIR_8BIT_50to100MHz;
1938*53ee8cc1Swenshuai.xi                     }
1939*53ee8cc1Swenshuai.xi                     else
1940*53ee8cc1Swenshuai.xi                     {
1941*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_3PAIR_8BIT_100to150MHz;
1942*53ee8cc1Swenshuai.xi                     }
1943*53ee8cc1Swenshuai.xi                 break;
1944*53ee8cc1Swenshuai.xi 
1945*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_MINILVDS_2CH_6P_8BIT:
1946*53ee8cc1Swenshuai.xi                     if((ldHz >= 500000000) && (ldHz < 1000000000))
1947*53ee8cc1Swenshuai.xi                     {
1948*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_6PAIR_8BIT_50to100MHz;
1949*53ee8cc1Swenshuai.xi                     }
1950*53ee8cc1Swenshuai.xi                     else
1951*53ee8cc1Swenshuai.xi                     {
1952*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_6PAIR_8BIT_100to150MHz;
1953*53ee8cc1Swenshuai.xi                     }
1954*53ee8cc1Swenshuai.xi                 break;
1955*53ee8cc1Swenshuai.xi 
1956*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_MINILVDS_1CH_3P_6BIT:
1957*53ee8cc1Swenshuai.xi                     if((ldHz >= 500000000) && (ldHz < 666700000))
1958*53ee8cc1Swenshuai.xi                     {
1959*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_1CH_3PAIR_6BIT_50to66_67MHz;
1960*53ee8cc1Swenshuai.xi                     }
1961*53ee8cc1Swenshuai.xi                     else
1962*53ee8cc1Swenshuai.xi                     {
1963*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_1CH_3PAIR_6BIT_66_67to80MHz;
1964*53ee8cc1Swenshuai.xi                     }
1965*53ee8cc1Swenshuai.xi                 break;
1966*53ee8cc1Swenshuai.xi 
1967*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_MINILVDS_2CH_3P_6BIT:
1968*53ee8cc1Swenshuai.xi                     if ((ldHz <= 500000000) && (ldHz < 666700000))
1969*53ee8cc1Swenshuai.xi                     {
1970*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_3PAIR_6BIT_50to66_67MHz;
1971*53ee8cc1Swenshuai.xi                     }
1972*53ee8cc1Swenshuai.xi                     else if((ldHz >= 666700000) && (ldHz < 1333300000))
1973*53ee8cc1Swenshuai.xi                     {
1974*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_3PAIR_6BIT_66_67to133_33MHz;
1975*53ee8cc1Swenshuai.xi                     }
1976*53ee8cc1Swenshuai.xi                     else
1977*53ee8cc1Swenshuai.xi                     {
1978*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_3PAIR_6BIT_133_33to150MHz;
1979*53ee8cc1Swenshuai.xi                     }
1980*53ee8cc1Swenshuai.xi                 break;
1981*53ee8cc1Swenshuai.xi 
1982*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_MINILVDS_2CH_6P_6BIT:
1983*53ee8cc1Swenshuai.xi                     if ((ldHz <= 500000000) && (ldHz < 670000000))
1984*53ee8cc1Swenshuai.xi                     {
1985*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_6PAIR_6BIT_50to67MHz;
1986*53ee8cc1Swenshuai.xi                     }
1987*53ee8cc1Swenshuai.xi                     else if((ldHz >= 670000000) && (ldHz < 1330000000))
1988*53ee8cc1Swenshuai.xi                     {
1989*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_6PAIR_6BIT_67to133MHz;
1990*53ee8cc1Swenshuai.xi                     }
1991*53ee8cc1Swenshuai.xi                     else
1992*53ee8cc1Swenshuai.xi                     {
1993*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MINILVDS_2CH_6PAIR_6BIT_133to150MHz;
1994*53ee8cc1Swenshuai.xi                     }
1995*53ee8cc1Swenshuai.xi                 break;
1996*53ee8cc1Swenshuai.xi 
1997*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI34_4P:
1998*53ee8cc1Swenshuai.xi                     u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI34_10BIT_4PAIR_95to150MHz;
1999*53ee8cc1Swenshuai.xi                 break;
2000*53ee8cc1Swenshuai.xi 
2001*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI34_6P:
2002*53ee8cc1Swenshuai.xi                     u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI34_10BIT_6PAIR_80to150MHz;
2003*53ee8cc1Swenshuai.xi                 break;
2004*53ee8cc1Swenshuai.xi 
2005*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI34_8P:
2006*53ee8cc1Swenshuai.xi                     if((ldHz >= 800000000) && (ldHz < 940000000))
2007*53ee8cc1Swenshuai.xi                     {
2008*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI34_10BIT_8PAIR_80to94MHz;
2009*53ee8cc1Swenshuai.xi                     }
2010*53ee8cc1Swenshuai.xi                     else if((ldHz >= 940000000) && (ldHz < 1880000000))
2011*53ee8cc1Swenshuai.xi                     {
2012*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI34_10BIT_8PAIR_94to188MHz;
2013*53ee8cc1Swenshuai.xi                     }
2014*53ee8cc1Swenshuai.xi                     else
2015*53ee8cc1Swenshuai.xi                     {
2016*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI34_10BIT_8PAIR_188to300MHz;
2017*53ee8cc1Swenshuai.xi                     }
2018*53ee8cc1Swenshuai.xi                 break;
2019*53ee8cc1Swenshuai.xi 
2020*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI28_4P:
2021*53ee8cc1Swenshuai.xi                     if((ldHz >= 800000000) && (ldHz < 1140000000))
2022*53ee8cc1Swenshuai.xi                     {
2023*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI28_8BIT_4PAIR_80to114MHz;
2024*53ee8cc1Swenshuai.xi                     }
2025*53ee8cc1Swenshuai.xi                     else
2026*53ee8cc1Swenshuai.xi                     {
2027*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI28_8BIT_4PAIR_114to150MHz;
2028*53ee8cc1Swenshuai.xi                     }
2029*53ee8cc1Swenshuai.xi                 break;
2030*53ee8cc1Swenshuai.xi #endif
2031*53ee8cc1Swenshuai.xi 
2032*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI28_6P:
2033*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2034*53ee8cc1Swenshuai.xi                     {
2035*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_6P_150to150MHz;
2036*53ee8cc1Swenshuai.xi                     }
2037*53ee8cc1Swenshuai.xi                     else if((ldHz >= 1500000000UL) && (ldHz < 1800000000UL))
2038*53ee8cc1Swenshuai.xi                     {
2039*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_6P_150to180MHz;
2040*53ee8cc1Swenshuai.xi                     }
2041*53ee8cc1Swenshuai.xi                     else
2042*53ee8cc1Swenshuai.xi                     {
2043*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_6P_180to330MHz;
2044*53ee8cc1Swenshuai.xi                     }
2045*53ee8cc1Swenshuai.xi                 break;
2046*53ee8cc1Swenshuai.xi 
2047*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI28_8P:
2048*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2049*53ee8cc1Swenshuai.xi                     {
2050*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_8P_150to150MHz;
2051*53ee8cc1Swenshuai.xi                     }
2052*53ee8cc1Swenshuai.xi                     else if((ldHz >= 1500000000UL) && (ldHz < 2400000000UL))
2053*53ee8cc1Swenshuai.xi                     {
2054*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_8P_150to240MHz;
2055*53ee8cc1Swenshuai.xi                     }
2056*53ee8cc1Swenshuai.xi                     else
2057*53ee8cc1Swenshuai.xi                     {
2058*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_8P_240to330MHz;
2059*53ee8cc1Swenshuai.xi                     }
2060*53ee8cc1Swenshuai.xi                 break;
2061*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI24_12P:
2062*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2063*53ee8cc1Swenshuai.xi                     {
2064*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_24_12P_150to150MHz;
2065*53ee8cc1Swenshuai.xi                     }
2066*53ee8cc1Swenshuai.xi                     else
2067*53ee8cc1Swenshuai.xi                     {
2068*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_24_12P_150to330MHz;
2069*53ee8cc1Swenshuai.xi                     }
2070*53ee8cc1Swenshuai.xi                 break;
2071*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI28_12P:
2072*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2073*53ee8cc1Swenshuai.xi                     {
2074*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_12P_150to150MHz;
2075*53ee8cc1Swenshuai.xi                     }
2076*53ee8cc1Swenshuai.xi                     else
2077*53ee8cc1Swenshuai.xi                     {
2078*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EPI_28_12P_150to330MHz;
2079*53ee8cc1Swenshuai.xi                     }
2080*53ee8cc1Swenshuai.xi                 break;
2081*53ee8cc1Swenshuai.xi /*
2082*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI34_12P:
2083*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_EPI24_12P:
2084*53ee8cc1Swenshuai.xi                 break;
2085*53ee8cc1Swenshuai.xi */
2086*53ee8cc1Swenshuai.xi 
2087*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_8LANE:
2088*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2089*53ee8cc1Swenshuai.xi                     {
2090*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_8LANE_150to150MHz;
2091*53ee8cc1Swenshuai.xi                     }
2092*53ee8cc1Swenshuai.xi                     else
2093*53ee8cc1Swenshuai.xi                     {
2094*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_8LANE_150to300MHz;
2095*53ee8cc1Swenshuai.xi                     }
2096*53ee8cc1Swenshuai.xi                     printf("@@11=%u\n",u8SupportedLPLLIndex);
2097*53ee8cc1Swenshuai.xi                 break;
2098*53ee8cc1Swenshuai.xi 
2099*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_4LANE:
2100*53ee8cc1Swenshuai.xi                     if(ldHz < 750000000UL)
2101*53ee8cc1Swenshuai.xi                     {
2102*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_4LANE_75to75MHz;
2103*53ee8cc1Swenshuai.xi                     }
2104*53ee8cc1Swenshuai.xi                     else
2105*53ee8cc1Swenshuai.xi                     {
2106*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_4LANE_75to150MHz;
2107*53ee8cc1Swenshuai.xi                     }
2108*53ee8cc1Swenshuai.xi                 break;
2109*53ee8cc1Swenshuai.xi 
2110*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_2LANE:
2111*53ee8cc1Swenshuai.xi                     if(ldHz < 375000000UL)
2112*53ee8cc1Swenshuai.xi                     {
2113*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_2LANE_37_5to37_5MHz;
2114*53ee8cc1Swenshuai.xi                     }
2115*53ee8cc1Swenshuai.xi                     else
2116*53ee8cc1Swenshuai.xi                     {
2117*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_2LANE_37_5to75MHz;
2118*53ee8cc1Swenshuai.xi                     }
2119*53ee8cc1Swenshuai.xi                 break;
2120*53ee8cc1Swenshuai.xi 
2121*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_1LANE:
2122*53ee8cc1Swenshuai.xi                     if(ldHz < 400000000UL)
2123*53ee8cc1Swenshuai.xi                     {
2124*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_1LANE_40to40MHz;
2125*53ee8cc1Swenshuai.xi                     }
2126*53ee8cc1Swenshuai.xi                     else
2127*53ee8cc1Swenshuai.xi                     {
2128*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_1LANE_40to80MHz;
2129*53ee8cc1Swenshuai.xi                     }
2130*53ee8cc1Swenshuai.xi                 break;
2131*53ee8cc1Swenshuai.xi 
2132*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_8LANE:
2133*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2134*53ee8cc1Swenshuai.xi                     {
2135*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_8LANE_150to150MHz;
2136*53ee8cc1Swenshuai.xi                     }
2137*53ee8cc1Swenshuai.xi                     else if((ldHz >= 1500000000UL) && (ldHz < 2200000000UL))
2138*53ee8cc1Swenshuai.xi                     {
2139*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_8LANE_150to200MHz;
2140*53ee8cc1Swenshuai.xi                     }
2141*53ee8cc1Swenshuai.xi                     else
2142*53ee8cc1Swenshuai.xi                     {
2143*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_8LANE_200to300MHz;
2144*53ee8cc1Swenshuai.xi                     }
2145*53ee8cc1Swenshuai.xi                 break;
2146*53ee8cc1Swenshuai.xi 
2147*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_4LANE:
2148*53ee8cc1Swenshuai.xi                     if(ldHz < 750000000UL)
2149*53ee8cc1Swenshuai.xi                     {
2150*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_4LANE_75to75MHz;
2151*53ee8cc1Swenshuai.xi                     }
2152*53ee8cc1Swenshuai.xi                     else if((ldHz >= 750000000UL) && (ldHz < 1000000000UL))
2153*53ee8cc1Swenshuai.xi                     {
2154*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_4LANE_75to100MHz;
2155*53ee8cc1Swenshuai.xi                     }
2156*53ee8cc1Swenshuai.xi                     else
2157*53ee8cc1Swenshuai.xi                     {
2158*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_4LANE_100to150MHz;
2159*53ee8cc1Swenshuai.xi                     }
2160*53ee8cc1Swenshuai.xi                 break;
2161*53ee8cc1Swenshuai.xi 
2162*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_2LANE:
2163*53ee8cc1Swenshuai.xi                     if(ldHz < 375000000UL)
2164*53ee8cc1Swenshuai.xi                     {
2165*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_2LANE_37_5to37_5MHz;
2166*53ee8cc1Swenshuai.xi                     }
2167*53ee8cc1Swenshuai.xi                     else if((ldHz >= 375000000UL) && (ldHz < 500000000UL))
2168*53ee8cc1Swenshuai.xi                     {
2169*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_2LANE_37_5to50MHz;
2170*53ee8cc1Swenshuai.xi                     }
2171*53ee8cc1Swenshuai.xi                     else
2172*53ee8cc1Swenshuai.xi                     {
2173*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_2LANE_50to75MHz;
2174*53ee8cc1Swenshuai.xi                     }
2175*53ee8cc1Swenshuai.xi                 break;
2176*53ee8cc1Swenshuai.xi 
2177*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_1LANE:
2178*53ee8cc1Swenshuai.xi                     if(ldHz < 400000000UL)
2179*53ee8cc1Swenshuai.xi                     {
2180*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_1LANE_40to40MHz;
2181*53ee8cc1Swenshuai.xi                     }
2182*53ee8cc1Swenshuai.xi                     else if((ldHz >= 400000000UL) && (ldHz < 500000000UL))
2183*53ee8cc1Swenshuai.xi                     {
2184*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_1LANE_40to50MHz;
2185*53ee8cc1Swenshuai.xi                     }
2186*53ee8cc1Swenshuai.xi                     else
2187*53ee8cc1Swenshuai.xi                     {
2188*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_1LANE_50to80MHz;
2189*53ee8cc1Swenshuai.xi                     }
2190*53ee8cc1Swenshuai.xi                 break;
2191*53ee8cc1Swenshuai.xi 
2192*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_16LANE:
2193*53ee8cc1Swenshuai.xi                     if(ldHz < 2000000000UL)
2194*53ee8cc1Swenshuai.xi                     {
2195*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_16LANE_200to200MHz;
2196*53ee8cc1Swenshuai.xi                     }
2197*53ee8cc1Swenshuai.xi                     else
2198*53ee8cc1Swenshuai.xi                     {
2199*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_10BIT_16LANE_200to300MHz;
2200*53ee8cc1Swenshuai.xi                     }
2201*53ee8cc1Swenshuai.xi                 break;
2202*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_16LANE:
2203*53ee8cc1Swenshuai.xi                     if(ldHz < 2000000000UL)
2204*53ee8cc1Swenshuai.xi                     {
2205*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_16LANE_200to200MHz;
2206*53ee8cc1Swenshuai.xi                     }
2207*53ee8cc1Swenshuai.xi                     else
2208*53ee8cc1Swenshuai.xi                     {
2209*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_VBY1_8BIT_16LANE_200to300MHz;
2210*53ee8cc1Swenshuai.xi                     }
2211*53ee8cc1Swenshuai.xi                 break;
2212*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_USI_T_8BIT_12P:
2213*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2214*53ee8cc1Swenshuai.xi                     {
2215*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_USI_T_8BIT_12PAIR_150to150MHz;
2216*53ee8cc1Swenshuai.xi                     }
2217*53ee8cc1Swenshuai.xi                     else
2218*53ee8cc1Swenshuai.xi                     {
2219*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_USI_T_8BIT_12PAIR_150to330MHz;
2220*53ee8cc1Swenshuai.xi                     }
2221*53ee8cc1Swenshuai.xi                 break;
2222*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_USI_T_10BIT_12P:
2223*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2224*53ee8cc1Swenshuai.xi                     {
2225*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_USI_T_10BIT_12PAIR_150to150MHz;
2226*53ee8cc1Swenshuai.xi                     }
2227*53ee8cc1Swenshuai.xi                     else
2228*53ee8cc1Swenshuai.xi                     {
2229*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_USI_T_10BIT_12PAIR_150to330MHz;
2230*53ee8cc1Swenshuai.xi                     }
2231*53ee8cc1Swenshuai.xi                 break;
2232*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_ISP_8BIT_12P:
2233*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2234*53ee8cc1Swenshuai.xi                     {
2235*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_ISP_8BIT_12PAIR_150to150MHz;
2236*53ee8cc1Swenshuai.xi                     }
2237*53ee8cc1Swenshuai.xi                     else
2238*53ee8cc1Swenshuai.xi                     {
2239*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_ISP_8BIT_12PAIR_150to330MHz;
2240*53ee8cc1Swenshuai.xi                     }
2241*53ee8cc1Swenshuai.xi                 break;
2242*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_ISP_8BIT_6P_D:
2243*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2244*53ee8cc1Swenshuai.xi                     {
2245*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_ISP_8BIT_6PAIR_DUAL_150to150MHz;
2246*53ee8cc1Swenshuai.xi                     }
2247*53ee8cc1Swenshuai.xi                     else
2248*53ee8cc1Swenshuai.xi                     {
2249*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_ISP_8BIT_6PAIR_DUAL_150to330MHz;
2250*53ee8cc1Swenshuai.xi                     }
2251*53ee8cc1Swenshuai.xi                 break;
2252*53ee8cc1Swenshuai.xi                 default:
2253*53ee8cc1Swenshuai.xi                     u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_MAX;
2254*53ee8cc1Swenshuai.xi                 break;
2255*53ee8cc1Swenshuai.xi             }
2256*53ee8cc1Swenshuai.xi         }
2257*53ee8cc1Swenshuai.xi         break;
2258*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_OSD:
2259*53ee8cc1Swenshuai.xi         {
2260*53ee8cc1Swenshuai.xi             switch (eLPLL_Type)
2261*53ee8cc1Swenshuai.xi             {
2262*53ee8cc1Swenshuai.xi                 case E_PNL_TYPE_HS_LVDS:
2263*53ee8cc1Swenshuai.xi                 {
2264*53ee8cc1Swenshuai.xi                     if(ldHz < 250000000UL)
2265*53ee8cc1Swenshuai.xi                     {
2266*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_HS_LVDS_1CH_25to25MHz;
2267*53ee8cc1Swenshuai.xi                     }
2268*53ee8cc1Swenshuai.xi                     else if((ldHz >= 250000000UL) && (ldHz < 500000000UL))
2269*53ee8cc1Swenshuai.xi                     {
2270*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_HS_LVDS_1CH_25to50MHz;
2271*53ee8cc1Swenshuai.xi                     }
2272*53ee8cc1Swenshuai.xi                     else if((ldHz >= 500000000UL) && (ldHz < 1000000000UL))
2273*53ee8cc1Swenshuai.xi                     {
2274*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_HS_LVDS_1CH_50to100MHz;
2275*53ee8cc1Swenshuai.xi                     }
2276*53ee8cc1Swenshuai.xi                     else
2277*53ee8cc1Swenshuai.xi                     {
2278*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_HS_LVDS_1CH_100to150MHz;
2279*53ee8cc1Swenshuai.xi                     }
2280*53ee8cc1Swenshuai.xi                 }
2281*53ee8cc1Swenshuai.xi                 break;
2282*53ee8cc1Swenshuai.xi 
2283*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_4LANE:
2284*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2285*53ee8cc1Swenshuai.xi                     {
2286*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_10BIT_4LANE_150to150MHz;
2287*53ee8cc1Swenshuai.xi                     }
2288*53ee8cc1Swenshuai.xi                     else
2289*53ee8cc1Swenshuai.xi                     {
2290*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_10BIT_4LANE_150to340MHz;
2291*53ee8cc1Swenshuai.xi                     }
2292*53ee8cc1Swenshuai.xi                 break;
2293*53ee8cc1Swenshuai.xi 
2294*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_2LANE:
2295*53ee8cc1Swenshuai.xi                     if(ldHz < 750000000UL)
2296*53ee8cc1Swenshuai.xi                     {
2297*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_10BIT_2LANE_75to75MHz;
2298*53ee8cc1Swenshuai.xi                     }
2299*53ee8cc1Swenshuai.xi                     else
2300*53ee8cc1Swenshuai.xi                     {
2301*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_10BIT_2LANE_75to150MHz;
2302*53ee8cc1Swenshuai.xi                     }
2303*53ee8cc1Swenshuai.xi                 break;
2304*53ee8cc1Swenshuai.xi 
2305*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_10BIT_1LANE:
2306*53ee8cc1Swenshuai.xi                     if(ldHz < 375000000UL)
2307*53ee8cc1Swenshuai.xi                     {
2308*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_10BIT_1LANE_37_5to37_5MHz;
2309*53ee8cc1Swenshuai.xi                     }
2310*53ee8cc1Swenshuai.xi                     else
2311*53ee8cc1Swenshuai.xi                     {
2312*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_10BIT_1LANE_37_5to75MHz;
2313*53ee8cc1Swenshuai.xi                     }
2314*53ee8cc1Swenshuai.xi                 break;
2315*53ee8cc1Swenshuai.xi 
2316*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_4LANE:
2317*53ee8cc1Swenshuai.xi                     if(ldHz < 1500000000UL)
2318*53ee8cc1Swenshuai.xi                     {
2319*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_4LANE_150to150MHz;
2320*53ee8cc1Swenshuai.xi                     }
2321*53ee8cc1Swenshuai.xi                     else if((ldHz >= 1500000000UL) && (ldHz < 2200000000UL))
2322*53ee8cc1Swenshuai.xi                     {
2323*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_4LANE_150to200MHz;
2324*53ee8cc1Swenshuai.xi                     }
2325*53ee8cc1Swenshuai.xi                     else
2326*53ee8cc1Swenshuai.xi                     {
2327*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_4LANE_200to340MHz;
2328*53ee8cc1Swenshuai.xi                     }
2329*53ee8cc1Swenshuai.xi                 break;
2330*53ee8cc1Swenshuai.xi 
2331*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_2LANE:
2332*53ee8cc1Swenshuai.xi                     if(ldHz < 750000000UL)
2333*53ee8cc1Swenshuai.xi                     {
2334*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_2LANE_75to75MHz;
2335*53ee8cc1Swenshuai.xi                     }
2336*53ee8cc1Swenshuai.xi                     else if((ldHz >= 750000000UL) && (ldHz < 1000000000UL))
2337*53ee8cc1Swenshuai.xi                     {
2338*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_2LANE_75to100MHz;
2339*53ee8cc1Swenshuai.xi                     }
2340*53ee8cc1Swenshuai.xi                     else
2341*53ee8cc1Swenshuai.xi                     {
2342*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_2LANE_100to150MHz;
2343*53ee8cc1Swenshuai.xi                     }
2344*53ee8cc1Swenshuai.xi                 break;
2345*53ee8cc1Swenshuai.xi 
2346*53ee8cc1Swenshuai.xi                 case E_PNL_LPLL_VBY1_8BIT_1LANE:
2347*53ee8cc1Swenshuai.xi                     if(ldHz < 375000000UL)
2348*53ee8cc1Swenshuai.xi                     {
2349*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_1LANE_37_5to37_5MHz;
2350*53ee8cc1Swenshuai.xi                     }
2351*53ee8cc1Swenshuai.xi                     else if((ldHz >= 380000000UL) && (ldHz < 500000000UL))
2352*53ee8cc1Swenshuai.xi                     {
2353*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_1LANE_37_5to50MHz;
2354*53ee8cc1Swenshuai.xi                     }
2355*53ee8cc1Swenshuai.xi                     else
2356*53ee8cc1Swenshuai.xi                     {
2357*53ee8cc1Swenshuai.xi                         u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_VBY1_8BIT_1LANE_50to75MHz;
2358*53ee8cc1Swenshuai.xi                     }
2359*53ee8cc1Swenshuai.xi                 break;
2360*53ee8cc1Swenshuai.xi 
2361*53ee8cc1Swenshuai.xi                 default:
2362*53ee8cc1Swenshuai.xi                     u8SupportedLPLLIndex = E_PNL_SUPPORTED_LPLL_EXT_MAX;
2363*53ee8cc1Swenshuai.xi                 break;
2364*53ee8cc1Swenshuai.xi             }
2365*53ee8cc1Swenshuai.xi         }
2366*53ee8cc1Swenshuai.xi         break;
2367*53ee8cc1Swenshuai.xi     }
2368*53ee8cc1Swenshuai.xi     return u8SupportedLPLLIndex;
2369*53ee8cc1Swenshuai.xi }
2370*53ee8cc1Swenshuai.xi 
_MHal_PNL_DumpLPLLTable(void * pInstance,MS_U8 LPLLTblIndex,PNL_LPLL_TYPE_SEL lpll_type_sel)2371*53ee8cc1Swenshuai.xi static void _MHal_PNL_DumpLPLLTable(void *pInstance, MS_U8 LPLLTblIndex, PNL_LPLL_TYPE_SEL lpll_type_sel)
2372*53ee8cc1Swenshuai.xi {
2373*53ee8cc1Swenshuai.xi     if(lpll_type_sel == E_PNL_LPLL_VIDEO)
2374*53ee8cc1Swenshuai.xi     {
2375*53ee8cc1Swenshuai.xi         if (LPLLTblIndex == E_PNL_SUPPORTED_LPLL_MAX)
2376*53ee8cc1Swenshuai.xi         {
2377*53ee8cc1Swenshuai.xi             printf("[%s,%5d] Unspported LPLL Type, skip LPLL setting\n",__FUNCTION__,__LINE__);
2378*53ee8cc1Swenshuai.xi             return;
2379*53ee8cc1Swenshuai.xi         }
2380*53ee8cc1Swenshuai.xi 
2381*53ee8cc1Swenshuai.xi         int indexCounter = 0;
2382*53ee8cc1Swenshuai.xi 
2383*53ee8cc1Swenshuai.xi         for(indexCounter = 0 ; indexCounter<LPLL_REG_NUM; indexCounter++)
2384*53ee8cc1Swenshuai.xi         {
2385*53ee8cc1Swenshuai.xi             if (LPLLSettingTBL[LPLLTblIndex][indexCounter].address == 0xFF) //delay in micro second
2386*53ee8cc1Swenshuai.xi             {
2387*53ee8cc1Swenshuai.xi                 MsOS_DelayTaskUs(LPLLSettingTBL[LPLLTblIndex][indexCounter].value);
2388*53ee8cc1Swenshuai.xi                 continue; // step forward to next register setting.
2389*53ee8cc1Swenshuai.xi             }
2390*53ee8cc1Swenshuai.xi 
2391*53ee8cc1Swenshuai.xi             W2BYTEMSK(L_BK_LPLL(LPLLSettingTBL[LPLLTblIndex][indexCounter].address),
2392*53ee8cc1Swenshuai.xi                       LPLLSettingTBL[LPLLTblIndex][indexCounter].value,
2393*53ee8cc1Swenshuai.xi                       LPLLSettingTBL[LPLLTblIndex][indexCounter].mask);
2394*53ee8cc1Swenshuai.xi         }
2395*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]LPLLTblIndex=%u\n", __FUNCTION__, __LINE__, LPLLTblIndex);
2396*53ee8cc1Swenshuai.xi     }
2397*53ee8cc1Swenshuai.xi     else
2398*53ee8cc1Swenshuai.xi     {
2399*53ee8cc1Swenshuai.xi         if (LPLLTblIndex == E_PNL_SUPPORTED_LPLL_EXT_MAX)
2400*53ee8cc1Swenshuai.xi         {
2401*53ee8cc1Swenshuai.xi             printf("[%s,%5d] Unspported LPLL Type, skip LPLL setting\n",__FUNCTION__,__LINE__);
2402*53ee8cc1Swenshuai.xi             return;
2403*53ee8cc1Swenshuai.xi         }
2404*53ee8cc1Swenshuai.xi 
2405*53ee8cc1Swenshuai.xi         int indexCounter = 0;
2406*53ee8cc1Swenshuai.xi 
2407*53ee8cc1Swenshuai.xi         for(indexCounter = 0 ; indexCounter<LPLL_EXT_REG_NUM; indexCounter++)
2408*53ee8cc1Swenshuai.xi         {
2409*53ee8cc1Swenshuai.xi             if (LPLLSettingTBL_Ext[LPLLTblIndex][indexCounter].address == 0xFF) //delay in micro second
2410*53ee8cc1Swenshuai.xi             {
2411*53ee8cc1Swenshuai.xi                 MsOS_DelayTaskUs(LPLLSettingTBL_Ext[LPLLTblIndex][indexCounter].value);
2412*53ee8cc1Swenshuai.xi                 continue; // step forward to next register setting.
2413*53ee8cc1Swenshuai.xi             }
2414*53ee8cc1Swenshuai.xi 
2415*53ee8cc1Swenshuai.xi             W2BYTEMSK(L_BK_LPLL(LPLLSettingTBL_Ext[LPLLTblIndex][indexCounter].address),
2416*53ee8cc1Swenshuai.xi                       LPLLSettingTBL_Ext[LPLLTblIndex][indexCounter].value,
2417*53ee8cc1Swenshuai.xi                       LPLLSettingTBL_Ext[LPLLTblIndex][indexCounter].mask);
2418*53ee8cc1Swenshuai.xi         }
2419*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]LPLLTblIndex=%u\n", __FUNCTION__, __LINE__, LPLLTblIndex);
2420*53ee8cc1Swenshuai.xi     }
2421*53ee8cc1Swenshuai.xi }
2422*53ee8cc1Swenshuai.xi 
MHal_PNL_Init_LPLL(void * pInstance,PNL_TYPE eLPLL_Type,PNL_MODE eLPLL_Mode,MS_U64 ldHz)2423*53ee8cc1Swenshuai.xi void MHal_PNL_Init_LPLL(void *pInstance, PNL_TYPE eLPLL_Type,PNL_MODE eLPLL_Mode,MS_U64 ldHz)
2424*53ee8cc1Swenshuai.xi {
2425*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2426*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
2427*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2428*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
2429*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_LPLL_TYPE u8SupportedLPLLLIndex = E_PNL_SUPPORTED_LPLL_MAX;
2430*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]\n", __FUNCTION__, __LINE__);
2431*53ee8cc1Swenshuai.xi 
2432*53ee8cc1Swenshuai.xi     u8SupportedLPLLLIndex = _MHal_PNL_GetSupportedLPLLIndex(pInstance, eLPLL_Type,eLPLL_Mode,ldHz, E_PNL_LPLL_VIDEO);
2433*53ee8cc1Swenshuai.xi 
2434*53ee8cc1Swenshuai.xi     if (u8SupportedLPLLLIndex == E_PNL_SUPPORTED_LPLL_MAX)
2435*53ee8cc1Swenshuai.xi     {
2436*53ee8cc1Swenshuai.xi         printf("Not Supported LPLL Type, skip LPLL Init\n");
2437*53ee8cc1Swenshuai.xi         return;
2438*53ee8cc1Swenshuai.xi     }
2439*53ee8cc1Swenshuai.xi 
2440*53ee8cc1Swenshuai.xi     _MHal_PNL_DumpLPLLTable(pInstance, u8SupportedLPLLLIndex, E_PNL_LPLL_VIDEO);
2441*53ee8cc1Swenshuai.xi 
2442*53ee8cc1Swenshuai.xi     //for Maserati sync too fat, so frame lock fail
2443*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_BK_LPLL(0x3C),0x0000 ,BIT(12));
2444*53ee8cc1Swenshuai.xi 
2445*53ee8cc1Swenshuai.xi     MHal_MOD_PVDD_Power_Setting(pInstance, pPNLResourcePrivate->sthalPNL._bPVDD_2V5); // Einstein is always use 3.3V PVDD Power.
2446*53ee8cc1Swenshuai.xi }
2447*53ee8cc1Swenshuai.xi 
MHal_PNL_Get_Loop_DIV(void * pInstance,MS_U8 u8LPLL_Mode,MS_U8 eLPLL_Type,MS_U64 ldHz)2448*53ee8cc1Swenshuai.xi MS_U8 MHal_PNL_Get_Loop_DIV(void *pInstance, MS_U8 u8LPLL_Mode, MS_U8 eLPLL_Type, MS_U64 ldHz)
2449*53ee8cc1Swenshuai.xi {
2450*53ee8cc1Swenshuai.xi     MS_U16 u16loop_div = 0;
2451*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_LPLL_TYPE u8SupportedLPLLLIndex = E_PNL_SUPPORTED_LPLL_MAX;
2452*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
2453*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]E_PNL_LPLL_VIDEO : eLPLL_Type=%u, u8LPLL_Mode=%u, ldHz=%lu\n", __FUNCTION__, __LINE__, eLPLL_Type, u8LPLL_Mode, ldHz);
2454*53ee8cc1Swenshuai.xi #else
2455*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]E_PNL_LPLL_VIDEO : eLPLL_Type=%u, u8LPLL_Mode=%u, ldHz=%llu\n", __FUNCTION__, __LINE__, eLPLL_Type, u8LPLL_Mode, ldHz);
2456*53ee8cc1Swenshuai.xi #endif
2457*53ee8cc1Swenshuai.xi     u8SupportedLPLLLIndex = _MHal_PNL_GetSupportedLPLLIndex(pInstance, eLPLL_Type,u8LPLL_Mode,ldHz,E_PNL_LPLL_VIDEO);
2458*53ee8cc1Swenshuai.xi 
2459*53ee8cc1Swenshuai.xi     if (u8SupportedLPLLLIndex == E_PNL_SUPPORTED_LPLL_MAX)
2460*53ee8cc1Swenshuai.xi     {
2461*53ee8cc1Swenshuai.xi         printf("[%s,%5d] Error LPLL type\n",__FUNCTION__,__LINE__);
2462*53ee8cc1Swenshuai.xi         u16loop_div = 0 ;
2463*53ee8cc1Swenshuai.xi     }
2464*53ee8cc1Swenshuai.xi     else
2465*53ee8cc1Swenshuai.xi     {
2466*53ee8cc1Swenshuai.xi         u16loop_div = u16LoopDiv[u8SupportedLPLLLIndex];
2467*53ee8cc1Swenshuai.xi     }
2468*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "E_PNL_LPLL_VIDEO : u16loop_div=%u\n", u16loop_div);
2469*53ee8cc1Swenshuai.xi 
2470*53ee8cc1Swenshuai.xi     u16loop_div *= 2;
2471*53ee8cc1Swenshuai.xi     return u16loop_div;
2472*53ee8cc1Swenshuai.xi }
2473*53ee8cc1Swenshuai.xi 
MHal_PNL_Get_LPLL_LoopGain(void * pInstance,MS_U8 eLPLL_Mode,MS_U8 eLPLL_Type,MS_U64 ldHz)2474*53ee8cc1Swenshuai.xi MS_U16 MHal_PNL_Get_LPLL_LoopGain(void *pInstance, MS_U8 eLPLL_Mode, MS_U8 eLPLL_Type, MS_U64 ldHz)
2475*53ee8cc1Swenshuai.xi {
2476*53ee8cc1Swenshuai.xi     MS_U16 u16loop_gain = 0;
2477*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_LPLL_TYPE u8SupportedLPLLLIndex = E_PNL_SUPPORTED_LPLL_MAX;
2478*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
2479*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]E_PNL_LPLL_VIDEO : eLPLL_Type=%u, eLPLL_Mode=%u, ldHz=%lu\n", __FUNCTION__, __LINE__, eLPLL_Type, eLPLL_Mode, ldHz);
2480*53ee8cc1Swenshuai.xi #else
2481*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]E_PNL_LPLL_VIDEO : eLPLL_Type=%u, eLPLL_Mode=%u, ldHz=%llu\n", __FUNCTION__, __LINE__, eLPLL_Type, eLPLL_Mode, ldHz);
2482*53ee8cc1Swenshuai.xi #endif
2483*53ee8cc1Swenshuai.xi     u8SupportedLPLLLIndex = _MHal_PNL_GetSupportedLPLLIndex(pInstance, eLPLL_Type,eLPLL_Mode,ldHz,E_PNL_LPLL_VIDEO);
2484*53ee8cc1Swenshuai.xi 
2485*53ee8cc1Swenshuai.xi     if (u8SupportedLPLLLIndex == E_PNL_SUPPORTED_LPLL_MAX)
2486*53ee8cc1Swenshuai.xi     {
2487*53ee8cc1Swenshuai.xi         printf("[%s,%5d] Error LPLL type\n",__FUNCTION__,__LINE__);
2488*53ee8cc1Swenshuai.xi         u16loop_gain = 0 ;
2489*53ee8cc1Swenshuai.xi     }
2490*53ee8cc1Swenshuai.xi     else
2491*53ee8cc1Swenshuai.xi     {
2492*53ee8cc1Swenshuai.xi         u16loop_gain = u16LoopGain[u8SupportedLPLLLIndex];
2493*53ee8cc1Swenshuai.xi     }
2494*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "E_PNL_LPLL_VIDEO : u16loop_gain=%u\n", u16loop_gain);
2495*53ee8cc1Swenshuai.xi     return u16loop_gain;
2496*53ee8cc1Swenshuai.xi }
2497*53ee8cc1Swenshuai.xi 
2498*53ee8cc1Swenshuai.xi #define SKIP_TIMING_CHANGE_CAP  TRUE
Hal_PNL_SkipTimingChange_GetCaps(void * pInstance)2499*53ee8cc1Swenshuai.xi MS_BOOL Hal_PNL_SkipTimingChange_GetCaps(void *pInstance)
2500*53ee8cc1Swenshuai.xi {
2501*53ee8cc1Swenshuai.xi     #if (SKIP_TIMING_CHANGE_CAP)
2502*53ee8cc1Swenshuai.xi         return TRUE;
2503*53ee8cc1Swenshuai.xi     #else
2504*53ee8cc1Swenshuai.xi         return FALSE;
2505*53ee8cc1Swenshuai.xi     #endif
2506*53ee8cc1Swenshuai.xi }
2507*53ee8cc1Swenshuai.xi 
MHal_PNL_PreSetModeOn(void * pInstance,MS_BOOL bSetMode)2508*53ee8cc1Swenshuai.xi void MHal_PNL_PreSetModeOn(void *pInstance, MS_BOOL bSetMode)
2509*53ee8cc1Swenshuai.xi {
2510*53ee8cc1Swenshuai.xi     if (bSetMode == TRUE)
2511*53ee8cc1Swenshuai.xi     {
2512*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_77_L, 0, BIT(15)); //software reset, 0:reset
2513*53ee8cc1Swenshuai.xi     }
2514*53ee8cc1Swenshuai.xi     else
2515*53ee8cc1Swenshuai.xi     {
2516*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_77_L, BIT(15), BIT(15));
2517*53ee8cc1Swenshuai.xi     }
2518*53ee8cc1Swenshuai.xi }
2519*53ee8cc1Swenshuai.xi 
MHal_PNL_HWLVDSReservedtoLRFlag(void * pInstance,PNL_DrvHW_LVDSResInfo lvdsresinfo)2520*53ee8cc1Swenshuai.xi void MHal_PNL_HWLVDSReservedtoLRFlag(void *pInstance, PNL_DrvHW_LVDSResInfo lvdsresinfo)
2521*53ee8cc1Swenshuai.xi {
2522*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2523*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
2524*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2525*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
2526*53ee8cc1Swenshuai.xi 
2527*53ee8cc1Swenshuai.xi     if (lvdsresinfo.bEnable)
2528*53ee8cc1Swenshuai.xi     {
2529*53ee8cc1Swenshuai.xi         if (lvdsresinfo.u16channel & BIT(0))  // Channel A
2530*53ee8cc1Swenshuai.xi         {
2531*53ee8cc1Swenshuai.xi             if (lvdsresinfo.u32pair & BIT(3))  // pair 3
2532*53ee8cc1Swenshuai.xi             {
2533*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_04_L, BIT(15), BIT(15));
2534*53ee8cc1Swenshuai.xi             }
2535*53ee8cc1Swenshuai.xi             if (lvdsresinfo.u32pair & BIT(4))  // pair 4
2536*53ee8cc1Swenshuai.xi             {
2537*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_04_L, BIT(14), BIT(14));
2538*53ee8cc1Swenshuai.xi             }
2539*53ee8cc1Swenshuai.xi         }
2540*53ee8cc1Swenshuai.xi         if (lvdsresinfo.u16channel & BIT(1))  // Channel B
2541*53ee8cc1Swenshuai.xi         {
2542*53ee8cc1Swenshuai.xi             if (lvdsresinfo.u32pair & BIT(3))  // pair 3
2543*53ee8cc1Swenshuai.xi             {
2544*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_04_L, BIT(13), BIT(13));
2545*53ee8cc1Swenshuai.xi             }
2546*53ee8cc1Swenshuai.xi             if (lvdsresinfo.u32pair & BIT(4))  // pair 4
2547*53ee8cc1Swenshuai.xi             {
2548*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_04_L, BIT(12), BIT(12));
2549*53ee8cc1Swenshuai.xi             }
2550*53ee8cc1Swenshuai.xi         }
2551*53ee8cc1Swenshuai.xi 
2552*53ee8cc1Swenshuai.xi         if(  IsVBY1(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type) )
2553*53ee8cc1Swenshuai.xi         {
2554*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_54_L, BIT(10), BIT(10)); //reg_sel_ext_bit: sel extend bit, 0: osd_de 1: three_d_flag
2555*53ee8cc1Swenshuai.xi         }
2556*53ee8cc1Swenshuai.xi     }
2557*53ee8cc1Swenshuai.xi     else
2558*53ee8cc1Swenshuai.xi     {
2559*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_04_L, 0x0000, (BIT(15) | BIT(14) | BIT(13) | BIT(12)));
2560*53ee8cc1Swenshuai.xi 
2561*53ee8cc1Swenshuai.xi         if(  IsVBY1(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type) )
2562*53ee8cc1Swenshuai.xi         {
2563*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x00, BIT(10)); //reg_sel_ext_bit: sel extend bit, 0: osd_de 1: three_d_flag
2564*53ee8cc1Swenshuai.xi         }
2565*53ee8cc1Swenshuai.xi     }
2566*53ee8cc1Swenshuai.xi }
2567*53ee8cc1Swenshuai.xi 
2568*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////
2569*53ee8cc1Swenshuai.xi // Turn OD function
2570*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////
MHal_PNL_OverDriver_Init(void * pInstance,MS_PHY u32OD_MSB_Addr,MS_PHY u32OD_MSB_limit,MS_PHY u32OD_LSB_Addr,MS_PHY u32OD_LSB_limit,MS_U8 u8MIUSel)2571*53ee8cc1Swenshuai.xi void MHal_PNL_OverDriver_Init(void *pInstance, MS_PHY u32OD_MSB_Addr, MS_PHY u32OD_MSB_limit, MS_PHY u32OD_LSB_Addr, MS_PHY u32OD_LSB_limit, MS_U8 u8MIUSel)
2572*53ee8cc1Swenshuai.xi {
2573*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2574*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2575*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK16_61_L,u8MIUSel<<8,BIT(8)|BIT(9)); // OD MIU select
2576*53ee8cc1Swenshuai.xi 
2577*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_15_L, (MS_U16)(u32OD_MSB_Addr & 0xFFFF)); // OD MSB request base address
2578*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_16_L, (MS_U16)((u32OD_MSB_Addr >> 16) & 0x00FF), 0x00FF); // OD MSB request base address
2579*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_60_L, (MS_U16)((u32OD_MSB_Addr >> 24) & 0x0003), 0x0003); // OD MSB request base address
2580*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_17_L, (MS_U16)(u32OD_MSB_limit & 0xFFFF)); // OD MSB request address limit
2581*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_18_L, (MS_U16)((u32OD_MSB_limit >> 16) & 0x00FF), 0x00FF); // OD MSB request address limit
2582*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_60_L, (MS_U16)((u32OD_MSB_limit >> 24) & 0x0003)<<2, 0x000C); // OD MSB request address limit
2583*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_39_L, (MS_U16)(u32OD_LSB_limit & 0xFFFF)); // OD frame buffer write address limit
2584*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_3A_L, (MS_U16)((u32OD_LSB_limit >> 16) & 0x00FF), 0x00FF); // OD frame buffer write address limit
2585*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_3B_L, (MS_U16)(u32OD_LSB_limit & 0xFFFF)); // OD frame buffer read address limit
2586*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_3C_L, (MS_U16)((u32OD_LSB_limit >> 16) & 0x00FF), 0x00FF); // OD frame buffer read address limit
2587*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_4F_L, (MS_U16)(u32OD_LSB_Addr & 0xFFFF)); // OD LSB request base address
2588*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_50_L, (MS_U16)((u32OD_LSB_Addr >> 16) & 0x00FF), 0x00FF); // OD LSB request base address
2589*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_50_L, (MS_U16)((u32OD_LSB_limit & 0x00FF) << 8), 0xFF00); // OD LSB request limit address
2590*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_51_L, (MS_U16)((u32OD_LSB_limit >> 8) & 0xFFFF)); // OD LSB request limit address
2591*53ee8cc1Swenshuai.xi 
2592*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_1A_L, 0x4020); // OD request rFIFO limit threshold, priority threshold
2593*53ee8cc1Swenshuai.xi     SC_W2BYTE(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_1C_L, 0x4020); // OD request wFIFO limit threshold, priority threshold
2594*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_3A_L, 0x00, BIT(14)); // OD strength gradually bypass
2595*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_3A_L, 0x2F00, 0x3F00);    // OD strength gradually slop
2596*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_12_L, 0x0C, 0xFF);    // OD active threshold
2597*53ee8cc1Swenshuai.xi 
2598*53ee8cc1Swenshuai.xi }
2599*53ee8cc1Swenshuai.xi 
MHal_PNL_OverDriver_Enable(void * pInstance,MS_BOOL bEnable)2600*53ee8cc1Swenshuai.xi void MHal_PNL_OverDriver_Enable(void *pInstance, MS_BOOL bEnable)
2601*53ee8cc1Swenshuai.xi {
2602*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2603*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2604*53ee8cc1Swenshuai.xi 
2605*53ee8cc1Swenshuai.xi     // When OD enable, disable OD/RGBW SRAM PowerDown.
2606*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
2607*53ee8cc1Swenshuai.xi     if(pPNLInstancePrivate->u32DeviceID == 0)
2608*53ee8cc1Swenshuai.xi     {
2609*53ee8cc1Swenshuai.xi         if(bEnable)
2610*53ee8cc1Swenshuai.xi         {
2611*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_10_L, 0, BIT(0));   //OD SRAM PD Enable  : SC_SPD_BK3F_10[0]
2612*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, BIT(8), BIT(8));        //OD Clock gate : ~SC_SPD_BK3F_50[8]
2613*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, 0, BIT(15)); //OD Bypass Enable :SC_OD_BK16_6F[15]
2614*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_10_L, 0, BIT(1));   // RGBW SRAM PD Enable : SC_SPD_BK3F_10[1]
2615*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, BIT(9), BIT(9));        // RGBW Clock Gate : ~SC_SPD_BK3F_50[9]
2616*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, 0, BIT(12)); // RGBW bypass enable :SC_OD_BK16_6F[12]
2617*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, BIT(13), BIT(13));       // RGBW bypass enable : ~SC_OD_BK16_6F[13]
2618*53ee8cc1Swenshuai.xi 
2619*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_17_L, 0, BIT(0));   //M+ SRAM PD Enable  : SC_SPD_BK3F_17[0]
2620*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, BIT(10), BIT(10));        //M+ Clock gate : ~SC_SPD_BK3F_50[10]
2621*53ee8cc1Swenshuai.xi             //SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L,0 , BIT(12)); // M+ bypass enable :SC_OD_BK16_6F[12]
2622*53ee8cc1Swenshuai.xi             //SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, 0, BIT(13));       // M+ bypass enable : ~SC_OD_BK16_6F[13]
2623*53ee8cc1Swenshuai.xi 
2624*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_0B_L, 0, BIT(4));   //Demura SRAM PD Enable  : SC_SPD_BK3F_0B[4]
2625*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK77_26_L, 0, BIT(14));   //Demura Clock Gate  : SC_BK77_26[14]
2626*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_45_L, 0, BIT(0));                                              //Demura Clock gate : BK100A_CLKGEN2_45[0]
2627*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK77_26_L, 0, BIT(15));   //Demura Clock Gate  : SC_BK77_26[15]
2628*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_0B_L, 0, BIT(5));   //DGA_GAMMA SRAM PD Enable  : SC_SPD_BK3F_0B[5]
2629*53ee8cc1Swenshuai.xi         }
2630*53ee8cc1Swenshuai.xi         else
2631*53ee8cc1Swenshuai.xi         {
2632*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_10_L, BIT(0), BIT(0));   //OD SRAM PD Enable  : SC_SPD_BK3F_10[0]
2633*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, 0, BIT(8));        //OD Clock gate : ~SC_SPD_BK3F_50[8]
2634*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, BIT(15), BIT(15)); //OD Bypass Enable :SC_OD_BK16_6F[15]
2635*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_10_L, BIT(1), BIT(1));   // RGBW SRAM PD Enable : SC_SPD_BK3F_10[1]
2636*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, 0, BIT(9));        // RGBW Clock Gate : ~SC_SPD_BK3F_50[9]
2637*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, BIT(12), BIT(12)); // RGBW bypass enable :SC_OD_BK16_6F[12]
2638*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, 0, BIT(13));       // RGBW bypass enable : ~SC_OD_BK16_6F[13]
2639*53ee8cc1Swenshuai.xi 
2640*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_17_L, BIT(0), BIT(0));   //M+ SRAM PD Enable  : SC_SPD_BK3F_17[0]
2641*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, 0, BIT(10));        //M+ Clock gate : ~SC_SPD_BK3F_50[10]
2642*53ee8cc1Swenshuai.xi             //SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L,0 , BIT(12)); // M+ bypass enable :SC_OD_BK16_6F[12]
2643*53ee8cc1Swenshuai.xi             //SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, 0, BIT(13));       // M+ bypass enable : ~SC_OD_BK16_6F[13]
2644*53ee8cc1Swenshuai.xi 
2645*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_0B_L, BIT(4), BIT(4));   //Demura SRAM PD Enable  : SC_SPD_BK3F_0B[4]
2646*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK77_26_L, BIT(14), BIT(14));   //Demura Clock Gate  : SC_BK77_26[14]
2647*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_45_L, BIT(0), BIT(0));                                              //Demura Clock gate : BK100A_CLKGEN2_45[0]
2648*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK77_26_L, BIT(15), BIT(15));   //Demura Clock Gate  : SC_BK77_26[15]
2649*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_0B_L, BIT(5), BIT(5));   //DGA_GAMMA SRAM PD Enable  : SC_SPD_BK3F_0B[5]
2650*53ee8cc1Swenshuai.xi         }
2651*53ee8cc1Swenshuai.xi     }
2652*53ee8cc1Swenshuai.xi #endif
2653*53ee8cc1Swenshuai.xi 
2654*53ee8cc1Swenshuai.xi     // OD mode
2655*53ee8cc1Swenshuai.xi     // OD used user weight to output blending directly
2656*53ee8cc1Swenshuai.xi     // OD Enable
2657*53ee8cc1Swenshuai.xi     if (bEnable)
2658*53ee8cc1Swenshuai.xi     {
2659*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_10_L, 0x2D, 0x2F);
2660*53ee8cc1Swenshuai.xi     }
2661*53ee8cc1Swenshuai.xi     else
2662*53ee8cc1Swenshuai.xi     {
2663*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_10_L, 0x2C, 0x2F);
2664*53ee8cc1Swenshuai.xi     }
2665*53ee8cc1Swenshuai.xi }
2666*53ee8cc1Swenshuai.xi 
MHal_PNL_OverDriver_TBL(void * pInstance,MS_U8 u8ODTbl[1056])2667*53ee8cc1Swenshuai.xi void MHal_PNL_OverDriver_TBL(void *pInstance, MS_U8 u8ODTbl[1056])
2668*53ee8cc1Swenshuai.xi {
2669*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2670*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2671*53ee8cc1Swenshuai.xi 
2672*53ee8cc1Swenshuai.xi     MS_U16 i;
2673*53ee8cc1Swenshuai.xi     MS_U8 u8target;
2674*53ee8cc1Swenshuai.xi     MS_BOOL bEnable;
2675*53ee8cc1Swenshuai.xi 
2676*53ee8cc1Swenshuai.xi     bEnable = SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_10_L, BIT(0));
2677*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_10_L, 0x00, BIT(0)); // OD enable
2678*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_01_L, 0x0E, 0x0E); // OD table SRAM enable, RGB channel
2679*53ee8cc1Swenshuai.xi 
2680*53ee8cc1Swenshuai.xi     u8target= u8ODTbl[9];
2681*53ee8cc1Swenshuai.xi     for (i=0; i<272; i++)
2682*53ee8cc1Swenshuai.xi     {
2683*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_03_L, (i == 9)?u8target:(u8target ^ u8ODTbl[i]), 0x00FF);
2684*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_02_L, (i|0x8000), 0x81FF);
2685*53ee8cc1Swenshuai.xi         while(SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_02_L, BIT(15)));
2686*53ee8cc1Swenshuai.xi     }
2687*53ee8cc1Swenshuai.xi 
2688*53ee8cc1Swenshuai.xi     u8target= u8ODTbl[(272+19)];
2689*53ee8cc1Swenshuai.xi     for (i=0; i<272; i++)
2690*53ee8cc1Swenshuai.xi     {
2691*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_06_L, (i == 19)?u8target:(u8target ^ u8ODTbl[(272+i)]), 0x00FF);
2692*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_05_L, (i|0x8000), 0x81FF);
2693*53ee8cc1Swenshuai.xi         while(SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_05_L, BIT(15)));
2694*53ee8cc1Swenshuai.xi     }
2695*53ee8cc1Swenshuai.xi 
2696*53ee8cc1Swenshuai.xi     u8target= u8ODTbl[(272*2+29)];
2697*53ee8cc1Swenshuai.xi     for (i=0; i<256; i++)
2698*53ee8cc1Swenshuai.xi     {
2699*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_09_L, (i == 29)?u8target:(u8target ^ u8ODTbl[(272*2+i)]), 0x00FF);
2700*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_08_L, (i|0x8000), 0x81FF);
2701*53ee8cc1Swenshuai.xi         while(SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_08_L, BIT(15)));
2702*53ee8cc1Swenshuai.xi     }
2703*53ee8cc1Swenshuai.xi 
2704*53ee8cc1Swenshuai.xi     u8target= u8ODTbl[(272*2+256+39)];
2705*53ee8cc1Swenshuai.xi     for (i=0; i<256; i++)
2706*53ee8cc1Swenshuai.xi     {
2707*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_0C_L, (i == 39)?u8target:(u8target ^ u8ODTbl[(272*2+256+i)]), 0x00FF);
2708*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_0B_L, (i|0x8000), 0x81FF);
2709*53ee8cc1Swenshuai.xi         while(SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_0D_L, BIT(15)));
2710*53ee8cc1Swenshuai.xi     }
2711*53ee8cc1Swenshuai.xi 
2712*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_01_L, 0x00, 0x0E); // OD table SRAM enable, RGB channel
2713*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_10_L, bEnable, BIT(0)); // OD enable
2714*53ee8cc1Swenshuai.xi }
2715*53ee8cc1Swenshuai.xi 
_MHal_PNL_MOD_Swing_Refactor_AfterCAL(void * pInstance,MS_U16 u16Swing_Level)2716*53ee8cc1Swenshuai.xi MS_U16 _MHal_PNL_MOD_Swing_Refactor_AfterCAL(void *pInstance, MS_U16 u16Swing_Level)
2717*53ee8cc1Swenshuai.xi {
2718*53ee8cc1Swenshuai.xi     MS_U8 u8ibcal = 0x00;
2719*53ee8cc1Swenshuai.xi     MS_U16 u16AfterCal_value = 0;
2720*53ee8cc1Swenshuai.xi     MS_U16 u16Cus_value = 0;
2721*53ee8cc1Swenshuai.xi 
2722*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2723*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
2724*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2725*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
2726*53ee8cc1Swenshuai.xi     // =========
2727*53ee8cc1Swenshuai.xi     // GCR_CAL_LEVEL[1:0] : REG_MOD_A_BK00_70_L =>
2728*53ee8cc1Swenshuai.xi     // 2'b00 250mV ' GCR_ICON_CHx[5:0]=2'h15 (decimal 21)
2729*53ee8cc1Swenshuai.xi     // 2'b01 350mV ' GCR_ICON_CHx[5:0]=2'h1F (decimal 31)
2730*53ee8cc1Swenshuai.xi     // 2'b10 300mV ' GCR_ICON_CHx[5:0]=2'h1A (decimal 26)
2731*53ee8cc1Swenshuai.xi     // 2'b11 200mV ' GCR_ICON_CHx[5:0]=2'h10 (decimal 16)
2732*53ee8cc1Swenshuai.xi     // =========
2733*53ee8cc1Swenshuai.xi     switch(pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET)
2734*53ee8cc1Swenshuai.xi     {
2735*53ee8cc1Swenshuai.xi         default:
2736*53ee8cc1Swenshuai.xi         case 0:
2737*53ee8cc1Swenshuai.xi             u8ibcal = 0x15;
2738*53ee8cc1Swenshuai.xi         break;
2739*53ee8cc1Swenshuai.xi         case 1:
2740*53ee8cc1Swenshuai.xi             u8ibcal = 0x1F;
2741*53ee8cc1Swenshuai.xi         break;
2742*53ee8cc1Swenshuai.xi         case 2:
2743*53ee8cc1Swenshuai.xi             u8ibcal = 0x1A;
2744*53ee8cc1Swenshuai.xi         break;
2745*53ee8cc1Swenshuai.xi         case 3:
2746*53ee8cc1Swenshuai.xi             u8ibcal = 0x10;
2747*53ee8cc1Swenshuai.xi         break;
2748*53ee8cc1Swenshuai.xi     }
2749*53ee8cc1Swenshuai.xi     u16Cus_value = (u16Swing_Level) * (pPNLResourcePrivate->sthalPNL._u8MOD_CALI_VALUE + 4)/(u8ibcal + 4);
2750*53ee8cc1Swenshuai.xi     u16AfterCal_value = (u16Cus_value-40)/10+2;
2751*53ee8cc1Swenshuai.xi 
2752*53ee8cc1Swenshuai.xi     HAL_MOD_CAL_DBG(printf("\r\n--Swing value after refactor = %d\n", u16AfterCal_value));
2753*53ee8cc1Swenshuai.xi 
2754*53ee8cc1Swenshuai.xi     return u16AfterCal_value;
2755*53ee8cc1Swenshuai.xi }
2756*53ee8cc1Swenshuai.xi 
MHal_PNL_MODSwingRegToRealLevelValue(void * pInstance,MS_U16 u16SwingRegValue)2757*53ee8cc1Swenshuai.xi MS_U16 MHal_PNL_MODSwingRegToRealLevelValue(void *pInstance, MS_U16 u16SwingRegValue)
2758*53ee8cc1Swenshuai.xi {
2759*53ee8cc1Swenshuai.xi     MS_U8 u8ibcal = 0x00;
2760*53ee8cc1Swenshuai.xi     MS_U16 u16SwingRealLevelValue = 0;
2761*53ee8cc1Swenshuai.xi     MS_U16 u16CusValue = 0;
2762*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2763*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
2764*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2765*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
2766*53ee8cc1Swenshuai.xi     // =========
2767*53ee8cc1Swenshuai.xi     // GCR_CAL_LEVEL[1:0] : REG_MOD_A_BK00_70_L =>
2768*53ee8cc1Swenshuai.xi     // 2'b00 250mV ' GCR_ICON_CHx[5:0]=2'h15 (decimal 21)
2769*53ee8cc1Swenshuai.xi     // 2'b01 350mV ' GCR_ICON_CHx[5:0]=2'h1F (decimal 31)
2770*53ee8cc1Swenshuai.xi     // 2'b10 300mV ' GCR_ICON_CHx[5:0]=2'h1A (decimal 26)
2771*53ee8cc1Swenshuai.xi     // 2'b11 200mV ' GCR_ICON_CHx[5:0]=2'h10 (decimal 16)
2772*53ee8cc1Swenshuai.xi     // =========
2773*53ee8cc1Swenshuai.xi     switch(pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET)
2774*53ee8cc1Swenshuai.xi     {
2775*53ee8cc1Swenshuai.xi         default:
2776*53ee8cc1Swenshuai.xi         case 0:
2777*53ee8cc1Swenshuai.xi             u8ibcal = 0x15;
2778*53ee8cc1Swenshuai.xi         break;
2779*53ee8cc1Swenshuai.xi         case 1:
2780*53ee8cc1Swenshuai.xi             u8ibcal = 0x1F;
2781*53ee8cc1Swenshuai.xi         break;
2782*53ee8cc1Swenshuai.xi         case 2:
2783*53ee8cc1Swenshuai.xi             u8ibcal = 0x1A;
2784*53ee8cc1Swenshuai.xi         break;
2785*53ee8cc1Swenshuai.xi         case 3:
2786*53ee8cc1Swenshuai.xi             u8ibcal = 0x10;
2787*53ee8cc1Swenshuai.xi         break;
2788*53ee8cc1Swenshuai.xi     }
2789*53ee8cc1Swenshuai.xi 
2790*53ee8cc1Swenshuai.xi     u16CusValue =  ((u16SwingRegValue-2)*10)+40;
2791*53ee8cc1Swenshuai.xi     u16SwingRealLevelValue=(u16CusValue*(u8ibcal + 4))/(pPNLResourcePrivate->sthalPNL._u8MOD_CALI_VALUE + 4);
2792*53ee8cc1Swenshuai.xi 
2793*53ee8cc1Swenshuai.xi     HAL_MOD_CAL_DBG(printf("\r\n--Swing Real Level Value = %d\n", u16SwingRealLevelValue));
2794*53ee8cc1Swenshuai.xi 
2795*53ee8cc1Swenshuai.xi     return u16SwingRealLevelValue;
2796*53ee8cc1Swenshuai.xi }
2797*53ee8cc1Swenshuai.xi 
MHal_PNL_MOD_Control_Out_Swing(void * pInstance,MS_U16 u16Swing_Level)2798*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_MOD_Control_Out_Swing(void *pInstance, MS_U16 u16Swing_Level)
2799*53ee8cc1Swenshuai.xi {
2800*53ee8cc1Swenshuai.xi     MS_BOOL bStatus = FALSE;
2801*53ee8cc1Swenshuai.xi 
2802*53ee8cc1Swenshuai.xi     MS_U16 u16ValidSwing = 0;
2803*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2804*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
2805*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2806*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
2807*53ee8cc1Swenshuai.xi 
2808*53ee8cc1Swenshuai.xi     if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_LVDS)||
2809*53ee8cc1Swenshuai.xi       (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_HS_LVDS))
2810*53ee8cc1Swenshuai.xi     {
2811*53ee8cc1Swenshuai.xi         if(u16Swing_Level>600)
2812*53ee8cc1Swenshuai.xi             u16Swing_Level=600;
2813*53ee8cc1Swenshuai.xi         if(u16Swing_Level<40)
2814*53ee8cc1Swenshuai.xi             u16Swing_Level=40;
2815*53ee8cc1Swenshuai.xi 
2816*53ee8cc1Swenshuai.xi         u16ValidSwing = _MHal_PNL_MOD_Swing_Refactor_AfterCAL(pInstance, u16Swing_Level);
2817*53ee8cc1Swenshuai.xi     }
2818*53ee8cc1Swenshuai.xi     else
2819*53ee8cc1Swenshuai.xi     {
2820*53ee8cc1Swenshuai.xi         u16ValidSwing = u16Swing_Level;
2821*53ee8cc1Swenshuai.xi     }
2822*53ee8cc1Swenshuai.xi 
2823*53ee8cc1Swenshuai.xi     // Disable HW calibration keep mode first, to make SW icon value can write into register.
2824*53ee8cc1Swenshuai.xi     MOD_A_W2BYTEMSK(REG_MOD_A_BK00_7A_L, 0, BIT(15));
2825*53ee8cc1Swenshuai.xi 
2826*53ee8cc1Swenshuai.xi     u16ValidSwing &=0x0F;
2827*53ee8cc1Swenshuai.xi     // LVDS fill ICON
2828*53ee8cc1Swenshuai.xi     // ch0+ch1+ch2+ch3
2829*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_50_L, (u16ValidSwing << 12 | u16ValidSwing << 8 | u16ValidSwing << 4 | u16ValidSwing));
2830*53ee8cc1Swenshuai.xi     // ch4+ch5+ch6+ch7
2831*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_51_L, (u16ValidSwing << 12 | u16ValidSwing << 8 | u16ValidSwing << 4 | u16ValidSwing));
2832*53ee8cc1Swenshuai.xi     // ch8+ch9+ch10+ch11
2833*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_52_L, (u16ValidSwing << 12 | u16ValidSwing << 8 | u16ValidSwing << 4 | u16ValidSwing));
2834*53ee8cc1Swenshuai.xi     // ch12+ch13+ch14+ch15
2835*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_53_L, (u16ValidSwing << 12 | u16ValidSwing << 8 | u16ValidSwing << 4 | u16ValidSwing));
2836*53ee8cc1Swenshuai.xi 
2837*53ee8cc1Swenshuai.xi     bStatus = TRUE;
2838*53ee8cc1Swenshuai.xi 
2839*53ee8cc1Swenshuai.xi     return bStatus;
2840*53ee8cc1Swenshuai.xi }
2841*53ee8cc1Swenshuai.xi 
2842*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////
2843*53ee8cc1Swenshuai.xi // Turn Pre-Emphasis Current function
2844*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////
MHal_PNL_MOD_Control_Out_PE_Current(void * pInstance,MS_U16 u16Current_Level)2845*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_MOD_Control_Out_PE_Current (void *pInstance, MS_U16 u16Current_Level)
2846*53ee8cc1Swenshuai.xi {
2847*53ee8cc1Swenshuai.xi     MS_BOOL bStatus = FALSE;
2848*53ee8cc1Swenshuai.xi     MS_U16 u16ValidCurrent = u16Current_Level & 0x0F;
2849*53ee8cc1Swenshuai.xi 
2850*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_22_L,
2851*53ee8cc1Swenshuai.xi         ( (u16ValidCurrent  ) |(u16ValidCurrent << 4 )|(u16ValidCurrent << 8 )
2852*53ee8cc1Swenshuai.xi         |(u16ValidCurrent << 12 )));
2853*53ee8cc1Swenshuai.xi 
2854*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_23_L,
2855*53ee8cc1Swenshuai.xi         ( (u16ValidCurrent  ) |(u16ValidCurrent << 4 )|(u16ValidCurrent << 8 )
2856*53ee8cc1Swenshuai.xi         |(u16ValidCurrent << 12 )));
2857*53ee8cc1Swenshuai.xi 
2858*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_24_L,
2859*53ee8cc1Swenshuai.xi         ( (u16ValidCurrent  ) |(u16ValidCurrent << 4 )|(u16ValidCurrent << 8 )
2860*53ee8cc1Swenshuai.xi         |(u16ValidCurrent << 12 )));
2861*53ee8cc1Swenshuai.xi 
2862*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_25_L,
2863*53ee8cc1Swenshuai.xi         ( (u16ValidCurrent  ) |(u16ValidCurrent << 4 )|(u16ValidCurrent << 8 )
2864*53ee8cc1Swenshuai.xi         |(u16ValidCurrent << 12 )));
2865*53ee8cc1Swenshuai.xi 
2866*53ee8cc1Swenshuai.xi     bStatus = TRUE;
2867*53ee8cc1Swenshuai.xi 
2868*53ee8cc1Swenshuai.xi     return bStatus;
2869*53ee8cc1Swenshuai.xi }
2870*53ee8cc1Swenshuai.xi 
MHal_PNL_MOD_PECurrent_Setting(void * pInstance,MS_U16 u16Current_Level,MS_U16 u16Channel_Select)2871*53ee8cc1Swenshuai.xi void MHal_PNL_MOD_PECurrent_Setting(void *pInstance, MS_U16 u16Current_Level, MS_U16 u16Channel_Select)
2872*53ee8cc1Swenshuai.xi {
2873*53ee8cc1Swenshuai.xi     MS_U16 u16ValidCurrent = u16Current_Level & 0x0F;
2874*53ee8cc1Swenshuai.xi     MS_U16 u16Ch00_03_mask,u16Ch04_07_mask,u16Ch08_11_mask,u16Ch12_15_mask  = 0;
2875*53ee8cc1Swenshuai.xi 
2876*53ee8cc1Swenshuai.xi     u16Ch00_03_mask = (((u16Channel_Select & BIT(0))? 0x000F:0x00)|((u16Channel_Select & BIT(1))? 0x00F0:0x00)
2877*53ee8cc1Swenshuai.xi                      |((u16Channel_Select & BIT(2))? 0x0F00:0x00)|((u16Channel_Select & BIT(3))? 0xF000:0x00));
2878*53ee8cc1Swenshuai.xi     u16Ch04_07_mask = (((u16Channel_Select & BIT(4))? 0x000F:0x00)|((u16Channel_Select & BIT(5))? 0x00F0:0x00)
2879*53ee8cc1Swenshuai.xi                      |((u16Channel_Select & BIT(6))? 0x0F00:0x00)|((u16Channel_Select & BIT(7))? 0xF000:0x00));
2880*53ee8cc1Swenshuai.xi     u16Ch08_11_mask = (((u16Channel_Select & BIT(8))? 0x000F:0x00)|((u16Channel_Select & BIT(9))? 0x00F0:0x00)
2881*53ee8cc1Swenshuai.xi                      |((u16Channel_Select & BIT(10))? 0x0F00:0x00)|((u16Channel_Select & BIT(11))? 0xF000:0x00));
2882*53ee8cc1Swenshuai.xi     u16Ch12_15_mask = (((u16Channel_Select & BIT(12))? 0x000F:0x00)|((u16Channel_Select & BIT(13))? 0x00F0:0x00)
2883*53ee8cc1Swenshuai.xi                      |((u16Channel_Select & BIT(14))? 0x0F00:0x00)|((u16Channel_Select & BIT(15))? 0xF000:0x00));
2884*53ee8cc1Swenshuai.xi 
2885*53ee8cc1Swenshuai.xi     if(u16Ch00_03_mask)
2886*53ee8cc1Swenshuai.xi     {
2887*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_22_L,
2888*53ee8cc1Swenshuai.xi             ((u16ValidCurrent)|(u16ValidCurrent << 4)|(u16ValidCurrent << 8)|(u16ValidCurrent << 12 )), u16Ch00_03_mask);
2889*53ee8cc1Swenshuai.xi     }
2890*53ee8cc1Swenshuai.xi     else
2891*53ee8cc1Swenshuai.xi     {
2892*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_22_L,0x00);
2893*53ee8cc1Swenshuai.xi     }
2894*53ee8cc1Swenshuai.xi 
2895*53ee8cc1Swenshuai.xi     if(u16Ch04_07_mask)
2896*53ee8cc1Swenshuai.xi     {
2897*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_23_L,
2898*53ee8cc1Swenshuai.xi             ((u16ValidCurrent)|(u16ValidCurrent << 4)|(u16ValidCurrent << 8)|(u16ValidCurrent << 12 )), u16Ch04_07_mask);
2899*53ee8cc1Swenshuai.xi     }
2900*53ee8cc1Swenshuai.xi     else
2901*53ee8cc1Swenshuai.xi     {
2902*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_23_L,0x00);
2903*53ee8cc1Swenshuai.xi     }
2904*53ee8cc1Swenshuai.xi 
2905*53ee8cc1Swenshuai.xi     if(u16Ch08_11_mask)
2906*53ee8cc1Swenshuai.xi     {
2907*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_24_L,
2908*53ee8cc1Swenshuai.xi             ((u16ValidCurrent)|(u16ValidCurrent << 4)|(u16ValidCurrent << 8)|(u16ValidCurrent << 12 )), u16Ch08_11_mask);
2909*53ee8cc1Swenshuai.xi     }
2910*53ee8cc1Swenshuai.xi     else
2911*53ee8cc1Swenshuai.xi     {
2912*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_24_L,0x00);
2913*53ee8cc1Swenshuai.xi     }
2914*53ee8cc1Swenshuai.xi 
2915*53ee8cc1Swenshuai.xi     if(u16Ch12_15_mask)
2916*53ee8cc1Swenshuai.xi     {
2917*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_25_L,
2918*53ee8cc1Swenshuai.xi             ((u16ValidCurrent)|(u16ValidCurrent << 4)|(u16ValidCurrent << 8)|(u16ValidCurrent << 12 )), u16Ch12_15_mask);
2919*53ee8cc1Swenshuai.xi     }
2920*53ee8cc1Swenshuai.xi     else
2921*53ee8cc1Swenshuai.xi     {
2922*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_25_L,0x00);
2923*53ee8cc1Swenshuai.xi     }
2924*53ee8cc1Swenshuai.xi }
2925*53ee8cc1Swenshuai.xi 
2926*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////
2927*53ee8cc1Swenshuai.xi // 1.Turn TTL low-power mode function
2928*53ee8cc1Swenshuai.xi // 2.Turn internal termination function
2929*53ee8cc1Swenshuai.xi // 3.Turn DRIVER BIAS OP function
2930*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////
MHal_PNL_MOD_Control_Out_TTL_Resistor_OP(void * pInstance,MS_BOOL bEnble)2931*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_MOD_Control_Out_TTL_Resistor_OP (void *pInstance, MS_BOOL bEnble)
2932*53ee8cc1Swenshuai.xi {
2933*53ee8cc1Swenshuai.xi     MS_BOOL bStatus = FALSE;
2934*53ee8cc1Swenshuai.xi     if(bEnble)
2935*53ee8cc1Swenshuai.xi     {
2936*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_0A_L, 0xFFFF, 0xFFFF); //Enable TTL low-power mode
2937*53ee8cc1Swenshuai.xi 
2938*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_06_L, 0xFFFF, 0xFFFF); //GCR_EN_RINT (internal termination open)
2939*53ee8cc1Swenshuai.xi 
2940*53ee8cc1Swenshuai.xi         //MOD_W2BYTEMSK(REG_MOD_BK00_76_L, 0x003F, 0x003F);// can not find in Manhattan register table
2941*53ee8cc1Swenshuai.xi 
2942*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_08_L, 0xFFFF, 0xFFFF); //Disable DRIVER BIAS OP
2943*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_5E_L, 0x003F, 0x003F);
2944*53ee8cc1Swenshuai.xi     }
2945*53ee8cc1Swenshuai.xi     else
2946*53ee8cc1Swenshuai.xi     {
2947*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_34_L, 0x0000, 0xFFFF); //Disable TTL low-power mode
2948*53ee8cc1Swenshuai.xi //        MOD_A_W2BYTEMSK(REG_MOD_A_BK00_39_L, 0x0000, 0x001E);
2949*53ee8cc1Swenshuai.xi 
2950*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_06_L, 0x0000, 0xFFFF); //GCR_EN_RINT (internal termination close)
2951*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_76_L, 0x0000, 0x003F);
2952*53ee8cc1Swenshuai.xi 
2953*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_08_L, 0x0000, 0xFFFF); //Enable DRIVER BIAS OP
2954*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_5E_L, 0x0000, 0x003F);
2955*53ee8cc1Swenshuai.xi     }
2956*53ee8cc1Swenshuai.xi 
2957*53ee8cc1Swenshuai.xi     bStatus = TRUE;
2958*53ee8cc1Swenshuai.xi     return bStatus;
2959*53ee8cc1Swenshuai.xi }
2960*53ee8cc1Swenshuai.xi 
MHal_PNL_PreInit(void * pInstance,PNL_OUTPUT_MODE eParam)2961*53ee8cc1Swenshuai.xi void MHal_PNL_PreInit(void *pInstance, PNL_OUTPUT_MODE eParam)
2962*53ee8cc1Swenshuai.xi {
2963*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2964*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
2965*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2966*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
2967*53ee8cc1Swenshuai.xi     pPNLResourcePrivate->sthalPNL._eDrvPnlInitOptions = eParam;
2968*53ee8cc1Swenshuai.xi }
2969*53ee8cc1Swenshuai.xi 
MHal_PNL_Get_Output_MODE(void * pInstance)2970*53ee8cc1Swenshuai.xi PNL_OUTPUT_MODE MHal_PNL_Get_Output_MODE(void *pInstance)
2971*53ee8cc1Swenshuai.xi {
2972*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
2973*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
2974*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
2975*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
2976*53ee8cc1Swenshuai.xi     PNL_OUTPUT_MODE eParam = pPNLResourcePrivate->sthalPNL._eDrvPnlInitOptions;
2977*53ee8cc1Swenshuai.xi 
2978*53ee8cc1Swenshuai.xi     return eParam;
2979*53ee8cc1Swenshuai.xi }
2980*53ee8cc1Swenshuai.xi 
msReadEfuse(void * pInstance,MS_U8 u8Bank,MS_U32 u32Mask)2981*53ee8cc1Swenshuai.xi MS_U32 msReadEfuse(void *pInstance, MS_U8 u8Bank, MS_U32 u32Mask)
2982*53ee8cc1Swenshuai.xi {
2983*53ee8cc1Swenshuai.xi     MS_U32 u32Result = 0;
2984*53ee8cc1Swenshuai.xi     MS_U8 u8Count = 0;
2985*53ee8cc1Swenshuai.xi 
2986*53ee8cc1Swenshuai.xi     W2BYTEMSK(0x2050, u8Bank<<2, BMASK(8:2));  /// reg28[8:2]Addr 6~0
2987*53ee8cc1Swenshuai.xi     W2BYTEMSK(0x2050, BIT(13), BIT(13));       /// Reg28[13] Margin Read
2988*53ee8cc1Swenshuai.xi     while(R2BYTEMSK(0x2050, BIT(13)) == BIT(13))
2989*53ee8cc1Swenshuai.xi     {
2990*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
2991*53ee8cc1Swenshuai.xi         u8Count ++;
2992*53ee8cc1Swenshuai.xi 
2993*53ee8cc1Swenshuai.xi         if (u8Count >10)
2994*53ee8cc1Swenshuai.xi             break;
2995*53ee8cc1Swenshuai.xi     }
2996*53ee8cc1Swenshuai.xi 
2997*53ee8cc1Swenshuai.xi     u32Result = (R4BYTE(0x2058)& u32Mask);    /// reg2C,2D read value
2998*53ee8cc1Swenshuai.xi     printf("[%s][%d]u32Result=%tx, after mask u32Result=%tx\n", __FUNCTION__, __LINE__,(ptrdiff_t) R4BYTE(0x2058), (ptrdiff_t)u32Result);
2999*53ee8cc1Swenshuai.xi     return u32Result;
3000*53ee8cc1Swenshuai.xi 
3001*53ee8cc1Swenshuai.xi }
3002*53ee8cc1Swenshuai.xi 
msSetVBY1RconValue(void * pInstance)3003*53ee8cc1Swenshuai.xi void msSetVBY1RconValue(void *pInstance)
3004*53ee8cc1Swenshuai.xi {
3005*53ee8cc1Swenshuai.xi     MS_U16 u16DefaultICON_Max = 40, u16DefaultICON_Min = 7;
3006*53ee8cc1Swenshuai.xi     MS_U16 u16DefaultICON = 18;
3007*53ee8cc1Swenshuai.xi     MS_U32 u32Mask = 0x3F;
3008*53ee8cc1Swenshuai.xi     MS_BOOL bEfuseMode = FALSE;
3009*53ee8cc1Swenshuai.xi     MS_U16 u16SwingOffset = 0;  // by HW RD request
3010*53ee8cc1Swenshuai.xi     MS_U16 u16temp = 0;
3011*53ee8cc1Swenshuai.xi 
3012*53ee8cc1Swenshuai.xi     if(!(_Hal_MOD_External_eFuse()))
3013*53ee8cc1Swenshuai.xi     {
3014*53ee8cc1Swenshuai.xi         if (msReadEfuse(pInstance, 0x4E, BIT(6)) == BIT(6))
3015*53ee8cc1Swenshuai.xi             bEfuseMode = TRUE;
3016*53ee8cc1Swenshuai.xi 
3017*53ee8cc1Swenshuai.xi 
3018*53ee8cc1Swenshuai.xi         // Disable HW calibration keep mode first, to make SW icon value can write into register.
3019*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_7A_L, 0, BIT(15));
3020*53ee8cc1Swenshuai.xi 
3021*53ee8cc1Swenshuai.xi         if (bEfuseMode)
3022*53ee8cc1Swenshuai.xi         {
3023*53ee8cc1Swenshuai.xi             if(((MS_U16)msReadEfuse(pInstance, 0x4E, u32Mask) + u16SwingOffset) > u16DefaultICON_Max)
3024*53ee8cc1Swenshuai.xi                 u16temp = u16DefaultICON;
3025*53ee8cc1Swenshuai.xi             else if(((MS_U16)msReadEfuse(pInstance, 0x4E, u32Mask) + u16SwingOffset) < u16DefaultICON_Min)
3026*53ee8cc1Swenshuai.xi                 u16temp = u16DefaultICON;
3027*53ee8cc1Swenshuai.xi             else
3028*53ee8cc1Swenshuai.xi                 u16temp = (MS_U16)msReadEfuse(pInstance, 0x4E, u32Mask) + u16SwingOffset;
3029*53ee8cc1Swenshuai.xi         }
3030*53ee8cc1Swenshuai.xi         else
3031*53ee8cc1Swenshuai.xi         {
3032*53ee8cc1Swenshuai.xi             u16temp = u16DefaultICON;
3033*53ee8cc1Swenshuai.xi         }
3034*53ee8cc1Swenshuai.xi 
3035*53ee8cc1Swenshuai.xi         //ch0~ch13 rcon setting
3036*53ee8cc1Swenshuai.xi         u16temp &= (u16temp&(MS_U16)u32Mask);
3037*53ee8cc1Swenshuai.xi         printf("[%s][%d]u16temp= %x\n", __FUNCTION__, __LINE__, u16temp);
3038*53ee8cc1Swenshuai.xi 
3039*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_40_L, (u16temp<<8|u16temp));
3040*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_41_L, (u16temp<<8|u16temp));
3041*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_42_L, (u16temp<<8|u16temp));
3042*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_43_L, (u16temp<<8|u16temp));
3043*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_44_L, (u16temp<<8|u16temp));
3044*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_45_L, (u16temp<<8|u16temp));
3045*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_46_L, (u16temp<<8|u16temp));
3046*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_47_L, (u16temp<<8|u16temp));
3047*53ee8cc1Swenshuai.xi     }
3048*53ee8cc1Swenshuai.xi }
3049*53ee8cc1Swenshuai.xi 
MHal_PNL_SetOutputType(void * pInstance,PNL_OUTPUT_MODE eOutputMode,PNL_TYPE eLPLL_Type)3050*53ee8cc1Swenshuai.xi void MHal_PNL_SetOutputType(void *pInstance, PNL_OUTPUT_MODE eOutputMode, PNL_TYPE eLPLL_Type)
3051*53ee8cc1Swenshuai.xi {
3052*53ee8cc1Swenshuai.xi     MS_U16 u16ValidSwing2 = 0;
3053*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
3054*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
3055*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
3056*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
3057*53ee8cc1Swenshuai.xi     if( eLPLL_Type == E_PNL_TYPE_TTL)
3058*53ee8cc1Swenshuai.xi     {
3059*53ee8cc1Swenshuai.xi         // select pair output to be TTL
3060*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x2000,0x2000);
3061*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
3062*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0000);
3063*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000);
3064*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x0000,0x2000);
3065*53ee8cc1Swenshuai.xi 
3066*53ee8cc1Swenshuai.xi         // other TTL setting
3067*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6B_L, 0x0000,0x0FF0);
3068*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_74_L, 0x0000,0xFF00);
3069*53ee8cc1Swenshuai.xi 
3070*53ee8cc1Swenshuai.xi 
3071*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_66_L, 0x0000);
3072*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_67_L, 0x0000);
3073*53ee8cc1Swenshuai.xi         //MOD_W2BYTEMSK(REG_MOD_BK00_5D_L, 0x0000, 0xE000);//just debug status in Manhattan
3074*53ee8cc1Swenshuai.xi 
3075*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_74_L, (BIT(3)|BIT(2)), (BIT(3)|BIT(2)));       // TTL skew: G
3076*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_74_L, (BIT(5)|BIT(4)), (BIT(5)|BIT(4)));       // TTL skew: B
3077*53ee8cc1Swenshuai.xi 
3078*53ee8cc1Swenshuai.xi     }
3079*53ee8cc1Swenshuai.xi     else if(( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_16LANE)||
3080*53ee8cc1Swenshuai.xi             ( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_8LANE)||
3081*53ee8cc1Swenshuai.xi             ( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_4LANE)||
3082*53ee8cc1Swenshuai.xi             ( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_2LANE)||
3083*53ee8cc1Swenshuai.xi             ( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_1LANE))
3084*53ee8cc1Swenshuai.xi     {
3085*53ee8cc1Swenshuai.xi         // rcon
3086*53ee8cc1Swenshuai.xi         if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u32PNL_MISC & (MS_U32)E_APIPNL_MISC_SKIP_ICONVALUE)
3087*53ee8cc1Swenshuai.xi         {
3088*53ee8cc1Swenshuai.xi             HAL_MOD_CAL_DBG(printf("User define Swing Value=%u\n", __FUNCTION__, __LINE__, pPNLResourcePrivate->sthalPNL._u16PnlDefault_SwingLevel));
3089*53ee8cc1Swenshuai.xi             MHal_PNL_MOD_Control_Out_Swing(pInstance, pPNLResourcePrivate->sthalPNL._u16PnlDefault_SwingLevel);
3090*53ee8cc1Swenshuai.xi         }
3091*53ee8cc1Swenshuai.xi         else
3092*53ee8cc1Swenshuai.xi         {
3093*53ee8cc1Swenshuai.xi             HAL_MOD_CAL_DBG(printf("Use RconValue\n", __FUNCTION__, __LINE__));
3094*53ee8cc1Swenshuai.xi             msSetVBY1RconValue(pInstance);
3095*53ee8cc1Swenshuai.xi         }
3096*53ee8cc1Swenshuai.xi 
3097*53ee8cc1Swenshuai.xi         //reg_gcr_en_rint_ch: enable double termination function
3098*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_06_L, 0x0000);
3099*53ee8cc1Swenshuai.xi 
3100*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6B_L, 0x03F0,0x0FF0);
3101*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_74_L, 0x0000,0xFF00);
3102*53ee8cc1Swenshuai.xi 
3103*53ee8cc1Swenshuai.xi         // manhattan: reg_1ms_cnt/when 12MHz xtal clock, count 12000 times is 1ms
3104*53ee8cc1Swenshuai.xi         // maserati : reg_mod_dummy2
3105*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_7F_L, 0xFFFF);
3106*53ee8cc1Swenshuai.xi 
3107*53ee8cc1Swenshuai.xi         // mod_a_77[1]: reg_vby1_ctrl_mode, select Hdtpn/Lockn is from Atop or PAD 1: from atop 0: from PAD
3108*53ee8cc1Swenshuai.xi         //MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x0000,BIT(1));  // there is no data when soc change mod output timing, so mark this setting
3109*53ee8cc1Swenshuai.xi 
3110*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_61_L, 0x8F3F); //[15]all dk scr[13:8]aln_de_cnt [7:0] aln_pix_cnt
3111*53ee8cc1Swenshuai.xi 
3112*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_66_L, 0xFFFF);
3113*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_67_L, 0xFFFF);
3114*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_68_L, 0xFFFF);
3115*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_69_L, 0xFFFF);
3116*53ee8cc1Swenshuai.xi 
3117*53ee8cc1Swenshuai.xi         // reg 60/61:reg_gpo_oez, Disable TTL output
3118*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_60_L, 0xFFFF);
3119*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_61_L, 0xFFFF);
3120*53ee8cc1Swenshuai.xi 
3121*53ee8cc1Swenshuai.xi         // reg 62/63:reg_gpo_datain, general purpose output data
3122*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_62_L, 0xFFFF);
3123*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_63_L, 0xFFFF);
3124*53ee8cc1Swenshuai.xi 
3125*53ee8cc1Swenshuai.xi         switch(eOutputMode)
3126*53ee8cc1Swenshuai.xi         {
3127*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_NO_OUTPUT:
3128*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x2000,0x2000);
3129*53ee8cc1Swenshuai.xi                 MsOS_DelayTask(1);
3130*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0000);
3131*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000);
3132*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x0000,0x2000);
3133*53ee8cc1Swenshuai.xi                 if(1)//( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_4LANE)
3134*53ee8cc1Swenshuai.xi                 {
3135*53ee8cc1Swenshuai.xi                     //-------------------------------------
3136*53ee8cc1Swenshuai.xi                     //## icon (Swing)
3137*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_30_L, 0x0000);
3138*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_31_L, 0x0000);
3139*53ee8cc1Swenshuai.xi 
3140*53ee8cc1Swenshuai.xi                     //-------------------------------------
3141*53ee8cc1Swenshuai.xi                     //vby1
3142*53ee8cc1Swenshuai.xi                     MOD_W2BYTE(REG_MOD_BK00_61_L, 0x8f3f); //[15]all dk scr[13:8]aln_de_cnt [7:0] aln_pix_cnt
3143*53ee8cc1Swenshuai.xi                 }
3144*53ee8cc1Swenshuai.xi                 else if( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_2LANE)
3145*53ee8cc1Swenshuai.xi                 {
3146*53ee8cc1Swenshuai.xi                     //-------------------------------------
3147*53ee8cc1Swenshuai.xi                     //## icon (Swing)
3148*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_30_L, 0x0000);
3149*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_31_L, 0x0000);
3150*53ee8cc1Swenshuai.xi 
3151*53ee8cc1Swenshuai.xi                     //vby1
3152*53ee8cc1Swenshuai.xi                     MOD_W2BYTE(REG_MOD_BK00_61_L, 0x8f3f);
3153*53ee8cc1Swenshuai.xi                 }
3154*53ee8cc1Swenshuai.xi                 break;
3155*53ee8cc1Swenshuai.xi 
3156*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_CLK_ONLY:
3157*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_DATA_ONLY:
3158*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_CLK_DATA:
3159*53ee8cc1Swenshuai.xi             default:
3160*53ee8cc1Swenshuai.xi                 if(eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_16LANE)
3161*53ee8cc1Swenshuai.xi                 {
3162*53ee8cc1Swenshuai.xi                     if( APIPNL_OUTPUT_CHANNEL_ORDER_USER == pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType )
3163*53ee8cc1Swenshuai.xi                     {
3164*53ee8cc1Swenshuai.xi                         _MHal_PNL_Auto_Set_Config(pInstance,
3165*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3166*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3167*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3168*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3169*53ee8cc1Swenshuai.xi 
3170*53ee8cc1Swenshuai.xi                         _MHal_PNL_Set_Clk(pInstance,
3171*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3172*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3173*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3174*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3175*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3176*53ee8cc1Swenshuai.xi                     }
3177*53ee8cc1Swenshuai.xi                     else
3178*53ee8cc1Swenshuai.xi                     {
3179*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x5555); //[15:0]reg_output_conf[15:0]
3180*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x5555); //[15:0]reg_output_conf[15:0]
3181*53ee8cc1Swenshuai.xi                     }
3182*53ee8cc1Swenshuai.xi                 }
3183*53ee8cc1Swenshuai.xi                 else if(eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_8LANE)
3184*53ee8cc1Swenshuai.xi                 {
3185*53ee8cc1Swenshuai.xi                     //MOD_A_W2BYTE(REG_MOD_A_BK00_3A_L, 0xC100);
3186*53ee8cc1Swenshuai.xi                     if( APIPNL_OUTPUT_CHANNEL_ORDER_USER == pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType )
3187*53ee8cc1Swenshuai.xi                     {
3188*53ee8cc1Swenshuai.xi                         _MHal_PNL_Auto_Set_Config(pInstance,
3189*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3190*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3191*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3192*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3193*53ee8cc1Swenshuai.xi 
3194*53ee8cc1Swenshuai.xi                         _MHal_PNL_Set_Clk(pInstance,
3195*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3196*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3197*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3198*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3199*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3200*53ee8cc1Swenshuai.xi                     }
3201*53ee8cc1Swenshuai.xi                     else
3202*53ee8cc1Swenshuai.xi                     {
3203*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x5555); //[15:0]reg_output_conf[15:0]
3204*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000); //[15:0]reg_output_conf[15:0]
3205*53ee8cc1Swenshuai.xi                     }
3206*53ee8cc1Swenshuai.xi                 }
3207*53ee8cc1Swenshuai.xi                 else if( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_4LANE)
3208*53ee8cc1Swenshuai.xi                 {
3209*53ee8cc1Swenshuai.xi                     //ori Manhattan: MOD_W2BYTE(REG_MOD_BK00_4A_L, 0x0002);
3210*53ee8cc1Swenshuai.xi                     MOD_W2BYTEMSK(REG_MOD_BK00_52_L, 0x0000, 0xC000); //[15]:reg_abswitch_l [14]:reg_abswitch_r
3211*53ee8cc1Swenshuai.xi                     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, 0x0000, BIT(1));
3212*53ee8cc1Swenshuai.xi 
3213*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_32_L, 0x7f7f);
3214*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_33_L, 0x7f7f);
3215*53ee8cc1Swenshuai.xi 
3216*53ee8cc1Swenshuai.xi                     if( APIPNL_OUTPUT_CHANNEL_ORDER_USER == pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType )
3217*53ee8cc1Swenshuai.xi                     {
3218*53ee8cc1Swenshuai.xi                         _MHal_PNL_Auto_Set_Config(pInstance,
3219*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3220*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3221*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3222*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3223*53ee8cc1Swenshuai.xi 
3224*53ee8cc1Swenshuai.xi                         _MHal_PNL_Set_Clk(pInstance,
3225*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3226*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3227*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3228*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3229*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3230*53ee8cc1Swenshuai.xi                     }
3231*53ee8cc1Swenshuai.xi                     else
3232*53ee8cc1Swenshuai.xi                     {
3233*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0055); //[15:0]reg_output_conf[15:0]
3234*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000); //[15:0]reg_output_conf[15:0]
3235*53ee8cc1Swenshuai.xi                     }
3236*53ee8cc1Swenshuai.xi                 }
3237*53ee8cc1Swenshuai.xi                 else if( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_2LANE )
3238*53ee8cc1Swenshuai.xi                 {
3239*53ee8cc1Swenshuai.xi                     //ori Manhattan: MOD_W2BYTE(REG_MOD_BK00_4A_L, 0x0000);
3240*53ee8cc1Swenshuai.xi                     MOD_W2BYTEMSK(REG_MOD_BK00_52_L, 0x0000, 0xC000); //[15]:reg_abswitch_l [14]:reg_abswitch_r
3241*53ee8cc1Swenshuai.xi                     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, 0x0000, BIT(1));
3242*53ee8cc1Swenshuai.xi 
3243*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_32_L, 0x7f7f);
3244*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_33_L, 0x0000);
3245*53ee8cc1Swenshuai.xi 
3246*53ee8cc1Swenshuai.xi                     if( APIPNL_OUTPUT_CHANNEL_ORDER_USER == pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType )
3247*53ee8cc1Swenshuai.xi                     {
3248*53ee8cc1Swenshuai.xi                         _MHal_PNL_Auto_Set_Config(pInstance,
3249*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3250*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3251*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3252*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3253*53ee8cc1Swenshuai.xi 
3254*53ee8cc1Swenshuai.xi                         _MHal_PNL_Set_Clk(pInstance,
3255*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3256*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3257*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3258*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3259*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3260*53ee8cc1Swenshuai.xi                     }
3261*53ee8cc1Swenshuai.xi                     else
3262*53ee8cc1Swenshuai.xi                     {
3263*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0005);
3264*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000); //[15:0]reg_output_conf[15:0]
3265*53ee8cc1Swenshuai.xi                     }
3266*53ee8cc1Swenshuai.xi                 }
3267*53ee8cc1Swenshuai.xi                 else if( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_1LANE ) //Maserati Raptor output 576p/480p case
3268*53ee8cc1Swenshuai.xi                 {
3269*53ee8cc1Swenshuai.xi                     //ori Manhattan: MOD_W2BYTE(REG_MOD_BK00_4A_L, 0x0000);
3270*53ee8cc1Swenshuai.xi                     MOD_W2BYTEMSK(REG_MOD_BK00_52_L, 0x0000, 0xC000); //[15]:reg_abswitch_l [14]:reg_abswitch_r
3271*53ee8cc1Swenshuai.xi                     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, 0x0000, BIT(1));
3272*53ee8cc1Swenshuai.xi 
3273*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_32_L, 0x7f7f);
3274*53ee8cc1Swenshuai.xi                     MOD_A_W2BYTE(REG_MOD_A_BK00_33_L, 0x0000);
3275*53ee8cc1Swenshuai.xi 
3276*53ee8cc1Swenshuai.xi                     if( APIPNL_OUTPUT_CHANNEL_ORDER_USER == pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType )
3277*53ee8cc1Swenshuai.xi                     {
3278*53ee8cc1Swenshuai.xi                         _MHal_PNL_Auto_Set_Config(pInstance,
3279*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3280*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3281*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3282*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3283*53ee8cc1Swenshuai.xi 
3284*53ee8cc1Swenshuai.xi                         _MHal_PNL_Set_Clk(pInstance,
3285*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3286*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3287*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3288*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3289*53ee8cc1Swenshuai.xi                                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3290*53ee8cc1Swenshuai.xi                     }
3291*53ee8cc1Swenshuai.xi                     else
3292*53ee8cc1Swenshuai.xi                     {
3293*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0101);
3294*53ee8cc1Swenshuai.xi                         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000); //[15:0]reg_output_conf[15:0]
3295*53ee8cc1Swenshuai.xi                     }
3296*53ee8cc1Swenshuai.xi                 }
3297*53ee8cc1Swenshuai.xi                 break;
3298*53ee8cc1Swenshuai.xi         }
3299*53ee8cc1Swenshuai.xi     }
3300*53ee8cc1Swenshuai.xi     //// for osd dedicated output port, 1 port for video and 1 port for osd
3301*53ee8cc1Swenshuai.xi     else if((eLPLL_Type == E_PNL_TYPE_HS_LVDS)&&
3302*53ee8cc1Swenshuai.xi             (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Mode == E_PNL_MODE_SINGLE))
3303*53ee8cc1Swenshuai.xi     {
3304*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x001F , 0x001F); // enable clk_dot_mini_pre_osd & clk_dot_mini_osd
3305*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, BIT(13),BIT(13));
3306*53ee8cc1Swenshuai.xi 
3307*53ee8cc1Swenshuai.xi         // enable osd lvds path
3308*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x0000, BIT(14) );
3309*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_2E_L, BIT(10), BIT(10) );
3310*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_05_L, 0x0000, BIT(12) );
3311*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_00_L, 0x0000, BIT(0) );
3312*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_51_L, 0x0000, (BIT(2)|BIT(3)|BIT(4)) );
3313*53ee8cc1Swenshuai.xi 
3314*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_77_L, BIT(0), BIT(0)); //[15]sw_rst
3315*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, 0x0C00 , 0x1F00); // enable clk_dot_mini_pre_osd & clk_dot_mini_osd
3316*53ee8cc1Swenshuai.xi     }
3317*53ee8cc1Swenshuai.xi     else
3318*53ee8cc1Swenshuai.xi     {
3319*53ee8cc1Swenshuai.xi         switch(eOutputMode)
3320*53ee8cc1Swenshuai.xi         {
3321*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_NO_OUTPUT:
3322*53ee8cc1Swenshuai.xi                 // if MOD_45[5:0] = 0x3F && XC_MOD_EXT_DATA_EN_L = 0x0,
3323*53ee8cc1Swenshuai.xi                 // then if XC_MOD_OUTPUT_CONF_L = 0x0 ---> output TTL as tri-state
3324*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x2000,0x2000);
3325*53ee8cc1Swenshuai.xi                 MsOS_DelayTask(1);
3326*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0x0000);
3327*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0000);
3328*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x0000,0x2000);
3329*53ee8cc1Swenshuai.xi 
3330*53ee8cc1Swenshuai.xi                 //----------------------------------
3331*53ee8cc1Swenshuai.xi                 // Purpose: Set the output to be the GPO, and let it's level to Low
3332*53ee8cc1Swenshuai.xi                 // 1. External Enable, Pair 0~5
3333*53ee8cc1Swenshuai.xi                 // 2. GPIO Enable, pair 0~5
3334*53ee8cc1Swenshuai.xi                 // 3. GPIO Output data : All low, pair 0~5
3335*53ee8cc1Swenshuai.xi                 // 4. GPIO OEZ: output piar 0~5
3336*53ee8cc1Swenshuai.xi                 //----------------------------------
3337*53ee8cc1Swenshuai.xi 
3338*53ee8cc1Swenshuai.xi                 //1.External Enable, Pair 0~5
3339*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_66_L, 0x0FFF, 0x0FFF);
3340*53ee8cc1Swenshuai.xi                 //2.GPIO Enable, pair 0~5
3341*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_68_L, 0x0FFF, 0x0FFF);
3342*53ee8cc1Swenshuai.xi                 //3.GPIO Output data : All low, pair 0~5
3343*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_62_L, 0x0000, 0x0FFF);
3344*53ee8cc1Swenshuai.xi                 //4.GPIO OEZ: output piar 0~5
3345*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_60_L, 0x0000, 0x0FFF);
3346*53ee8cc1Swenshuai.xi 
3347*53ee8cc1Swenshuai.xi                 //1.External Enable, Pair 6~15
3348*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_66_L, 0xF000, 0xF000);
3349*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_67_L, 0xFFFF);
3350*53ee8cc1Swenshuai.xi                 //2.GPIO Enable, pair 6~15
3351*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_68_L, 0xF000, 0xF000);
3352*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_69_L, 0xFFFF);
3353*53ee8cc1Swenshuai.xi                 //3.GPIO Output data : All low, pair 6~15
3354*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_62_L, 0x0000, 0xF000);
3355*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_63_L, 0x0000);
3356*53ee8cc1Swenshuai.xi                 //4.GPIO OEZ: output piar 6~15
3357*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_60_L, 0x0000, 0xF000);
3358*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_61_L, 0x0000);
3359*53ee8cc1Swenshuai.xi 
3360*53ee8cc1Swenshuai.xi                 //1234.External Enable, Pair 16~17
3361*53ee8cc1Swenshuai.xi                 //MOD_W2BYTE(REG_MOD_BK00_7E_L, 0xFF00);//remove in Manhattan
3362*53ee8cc1Swenshuai.xi 
3363*53ee8cc1Swenshuai.xi                 //1.External Enable, Pair 18~20, 2.GPIO Enable, pair 18~20
3364*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_5C_L, 0x3F00, 0x3F00);
3365*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_64_L, 0x003F, 0x003F);
3366*53ee8cc1Swenshuai.xi                 //3.GPIO Output data : All low, pair 18~20
3367*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_5E_L, 0x0000, 0x3F00);
3368*53ee8cc1Swenshuai.xi                 //4.GPIO OEZ: output piar 18~20
3369*53ee8cc1Swenshuai.xi                 //MOD_W2BYTEMSK(REG_MOD_BK00_7F_L, 0x0000, 0xFC00); //remove in Manhattan
3370*53ee8cc1Swenshuai.xi                 break;
3371*53ee8cc1Swenshuai.xi 
3372*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_CLK_ONLY:
3373*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_18_L, 0, 0xF000);
3374*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x4004);
3375*53ee8cc1Swenshuai.xi                 break;
3376*53ee8cc1Swenshuai.xi 
3377*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_DATA_ONLY:
3378*53ee8cc1Swenshuai.xi             case E_PNL_OUTPUT_CLK_DATA:
3379*53ee8cc1Swenshuai.xi             default:
3380*53ee8cc1Swenshuai.xi 
3381*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_68_L, 0x0000, 0xF000);
3382*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_69_L, 0x0000);
3383*53ee8cc1Swenshuai.xi                 //1. set GCR_PVDD_2P5=1¡¦b1;           MOD PVDD power:    1: 2.5V
3384*53ee8cc1Swenshuai.xi                 //MOD_A_W2BYTEMSK(REG_MOD_A_BK00_39_L, 0, BIT(6));
3385*53ee8cc1Swenshuai.xi                 //2. set PD_IB_MOD=1¡¦b0;
3386*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_01_L, 0x00, BIT(0));
3387*53ee8cc1Swenshuai.xi                 //  save ch6 init value
3388*53ee8cc1Swenshuai.xi                 u16ValidSwing2 = (MOD_A_R2BYTEMSK(REG_MOD_A_BK00_33_L, 0x3F00)>>8);
3389*53ee8cc1Swenshuai.xi                 //3. set Desired Pairs: GCR_ICON[5:0]=6h3f (current all open);
3390*53ee8cc1Swenshuai.xi                 MHal_PNL_MOD_Control_Out_Swing(pInstance, MHal_PNL_MODSwingRegToRealLevelValue(pInstance, 0x3F));
3391*53ee8cc1Swenshuai.xi                 //4. set Desired Pairs: GCR_PE_ADJ[2:0]=3h7 (pre-emphasis current all open )
3392*53ee8cc1Swenshuai.xi                 MHal_PNL_MOD_Control_Out_PE_Current (pInstance, 0x07);
3393*53ee8cc1Swenshuai.xi                 //5. Enable low-power modeinternal termination Open, Enable OP
3394*53ee8cc1Swenshuai.xi                 MHal_PNL_MOD_Control_Out_TTL_Resistor_OP (pInstance, 1);
3395*53ee8cc1Swenshuai.xi 
3396*53ee8cc1Swenshuai.xi                 MsOS_DelayTask(1);
3397*53ee8cc1Swenshuai.xi 
3398*53ee8cc1Swenshuai.xi                 //6. Enable low-power modeinternal termination Open, Enable OP
3399*53ee8cc1Swenshuai.xi                 MHal_Output_LVDS_Pair_Setting(pInstance,
3400*53ee8cc1Swenshuai.xi                                               pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type,
3401*53ee8cc1Swenshuai.xi                                               pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG0_7,
3402*53ee8cc1Swenshuai.xi                                               pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG8_15,
3403*53ee8cc1Swenshuai.xi                                               pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG16_21);
3404*53ee8cc1Swenshuai.xi                 MHal_Shift_LVDS_Pair(pInstance, pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Shift);
3405*53ee8cc1Swenshuai.xi 
3406*53ee8cc1Swenshuai.xi                 //7. set Desired Pairs: GCR_PE_ADJ[2:0]=3¡¦h0 (pre-emphasis current all Close)
3407*53ee8cc1Swenshuai.xi                 MHal_PNL_MOD_Control_Out_PE_Current (pInstance, 0x00);
3408*53ee8cc1Swenshuai.xi                 //8. set Desired Pairs: GCR_ICON[5:0]    (current all init);
3409*53ee8cc1Swenshuai.xi                 MHal_PNL_MOD_Control_Out_Swing(pInstance, MHal_PNL_MODSwingRegToRealLevelValue(pInstance, u16ValidSwing2));
3410*53ee8cc1Swenshuai.xi                 //9. Disable low-power modeinternal termination Close, Disable OP
3411*53ee8cc1Swenshuai.xi                 MHal_PNL_MOD_Control_Out_TTL_Resistor_OP (pInstance, 0);
3412*53ee8cc1Swenshuai.xi 
3413*53ee8cc1Swenshuai.xi                 // other TTL setting
3414*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6B_L, 0x03F0,0x0FF0);// LVDS output enable, [5:4] Output enable: PANEL_LVDS/ PANEL_miniLVDS/ PANEL_RSDS
3415*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_74_L, 0x0000,0xFF00);
3416*53ee8cc1Swenshuai.xi 
3417*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_66_L, 0x0000, 0xF000);
3418*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTE(REG_MOD_A_BK00_67_L, 0x0000);
3419*53ee8cc1Swenshuai.xi 
3420*53ee8cc1Swenshuai.xi                 //MOD_W2BYTEMSK(REG_MOD_BK00_7E_L, 0x0000, 0x000F); //remove in Manhattan
3421*53ee8cc1Swenshuai.xi 
3422*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_74_L, 0x0000, (BIT(3)|BIT(2)));       // TTL skew: G
3423*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_74_L, 0x0000, (BIT(5)|BIT(4)));       // TTL skew: B
3424*53ee8cc1Swenshuai.xi 
3425*53ee8cc1Swenshuai.xi                 break;
3426*53ee8cc1Swenshuai.xi         }
3427*53ee8cc1Swenshuai.xi     }
3428*53ee8cc1Swenshuai.xi 
3429*53ee8cc1Swenshuai.xi //    MHal_PNL_Bringup(pInstance);
3430*53ee8cc1Swenshuai.xi }
3431*53ee8cc1Swenshuai.xi 
Mhal_PNL_Flock_LPLLSet(void * pInstance,MS_U64 ldHz)3432*53ee8cc1Swenshuai.xi void Mhal_PNL_Flock_LPLLSet(void *pInstance, MS_U64 ldHz)
3433*53ee8cc1Swenshuai.xi {
3434*53ee8cc1Swenshuai.xi     UNUSED(ldHz);
3435*53ee8cc1Swenshuai.xi }
3436*53ee8cc1Swenshuai.xi 
MHal_PNL_MISC_Control(void * pInstance,MS_U32 u32PNL_MISC)3437*53ee8cc1Swenshuai.xi void MHal_PNL_MISC_Control(void *pInstance, MS_U32 u32PNL_MISC)
3438*53ee8cc1Swenshuai.xi {
3439*53ee8cc1Swenshuai.xi     UNUSED(u32PNL_MISC);
3440*53ee8cc1Swenshuai.xi }
3441*53ee8cc1Swenshuai.xi 
MHal_PNL_Init_XC_Clk(void * pInstance,PNL_InitData * pstPanelInitData)3442*53ee8cc1Swenshuai.xi void MHal_PNL_Init_XC_Clk(void *pInstance, PNL_InitData *pstPanelInitData)
3443*53ee8cc1Swenshuai.xi {
3444*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
3445*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
3446*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
3447*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
3448*53ee8cc1Swenshuai.xi 
3449*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]\n", __FUNCTION__, __LINE__);
3450*53ee8cc1Swenshuai.xi 
3451*53ee8cc1Swenshuai.xi     //load clk table: CLKGEN0SettingTBL / CLKGEN2SettingTBL
3452*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_TYPE eCLKType= _MHal_Transfer_PanelType_To_CLKType(pstPanelInitData->eLPLL_Type, pstPanelInitData->eLPLL_Mode);
3453*53ee8cc1Swenshuai.xi     _MHal_PNL_DumpVideoClkTable(eCLKType);
3454*53ee8cc1Swenshuai.xi 
3455*53ee8cc1Swenshuai.xi     if((pPNLResourcePrivate->stapiPNL._bSkipTimingChange == FALSE))
3456*53ee8cc1Swenshuai.xi     {
3457*53ee8cc1Swenshuai.xi         //load clk table: CLKGEN0SettingTBL / CLKGEN2SettingTBL
3458*53ee8cc1Swenshuai.xi         E_PNL_SUPPORTED_CLK_TYPE eCLKType= _MHal_Transfer_PanelType_To_CLKType_OSD(0, pstPanelInitData->eLPLL_Type, pstPanelInitData->eLPLL_Mode);
3459*53ee8cc1Swenshuai.xi         _MHal_PNL_DumpOSDClkTable(eCLKType);
3460*53ee8cc1Swenshuai.xi     }
3461*53ee8cc1Swenshuai.xi 
3462*53ee8cc1Swenshuai.xi 
3463*53ee8cc1Swenshuai.xi     //set XC CLK
3464*53ee8cc1Swenshuai.xi     if( ( E_PNL_LPLL_VBY1_10BIT_16LANE == pstPanelInitData->eLPLL_Type)||
3465*53ee8cc1Swenshuai.xi         ( E_PNL_LPLL_VBY1_8BIT_16LANE == pstPanelInitData->eLPLL_Type ) )
3466*53ee8cc1Swenshuai.xi     {
3467*53ee8cc1Swenshuai.xi         //16 lane
3468*53ee8cc1Swenshuai.xi         // CLK GEN0
3469*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_GATED);                          // [0] disable clock
3470*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_INVERT);                         // [1] invert clock
3471*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), CKG_ODCLK_SEL_LPLL, CKG_ODCLK_SEL_SOURCE);          // [2] select source tobe LPLL clock,
3472*53ee8cc1Swenshuai.xi                                                                                        // 0:synthetic clock out, 1:LPLL clock out
3473*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), CKG_ODCLK_XTAL, CKG_ODCLK_MASK);                    // [4..3] LPLL clock div
3474*53ee8cc1Swenshuai.xi 
3475*53ee8cc1Swenshuai.xi         // CLK GEN2
3476*53ee8cc1Swenshuai.xi         // CLK_ODCLK_2P clock setting
3477*53ee8cc1Swenshuai.xi         // [0]:disable clock [1]:invert clock
3478*53ee8cc1Swenshuai.xi         // [2]: select clock source, 0:synthetic clock out, 1:LPLL clock out
3479*53ee8cc1Swenshuai.xi         // [3]: select clock source, 0:LPLL output clock, 1:LPLL output clk divN
3480*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_RVD_43_L, 0x0C00, 0x1F00);
3481*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_RVD_46_L, 0x0000, 0x1F1F);  //odclk_freq div n/m, [4:0]reg_ckg_odclk_div_nm_m, [12:8]reg_ckg_odclk_div_nm_n,
3482*53ee8cc1Swenshuai.xi         //set LPLL mux
3483*53ee8cc1Swenshuai.xi 
3484*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x7E), 0x0030, 0x00F0);           //LPLL_ODCLK setting  reg_ckg_odclk = reg_clkgen0_reserved0[7:2]
3485*53ee8cc1Swenshuai.xi                                                               //[0] : diable clock
3486*53ee8cc1Swenshuai.xi                                                               //[1] : invert clock
3487*53ee8cc1Swenshuai.xi                                                               //[4:2] : xx0 : floclk_odclk_synth_out
3488*53ee8cc1Swenshuai.xi                                                               // 011 / 111: LPLL output clock
3489*53ee8cc1Swenshuai.xi         if (MDrv_XC_IsSupportPipPatchUsingSc1MainAsSc0Sub())
3490*53ee8cc1Swenshuai.xi         {
3491*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_63_L, 0x04, 0x0C);//sub oclck flow main odclk
3492*53ee8cc1Swenshuai.xi         }
3493*53ee8cc1Swenshuai.xi     }
3494*53ee8cc1Swenshuai.xi     else if( ( E_PNL_LPLL_VBY1_10BIT_8LANE == pstPanelInitData->eLPLL_Type)||
3495*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_VBY1_8BIT_8LANE == pstPanelInitData->eLPLL_Type ) )
3496*53ee8cc1Swenshuai.xi     {
3497*53ee8cc1Swenshuai.xi         // 8 lane
3498*53ee8cc1Swenshuai.xi         // CLK GEN0
3499*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_GATED);                          // [0] disable clock
3500*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_INVERT);                         // [1] invert clock
3501*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), CKG_ODCLK_SEL_LPLL, CKG_ODCLK_SEL_SOURCE);          // [2] select source tobe LPLL clock,
3502*53ee8cc1Swenshuai.xi                                                                                        // 0:synthetic clock out, 1:LPLL clock out
3503*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), CKG_ODCLK_XTAL, CKG_ODCLK_MASK);               // [4..3] LPLL clock div
3504*53ee8cc1Swenshuai.xi 
3505*53ee8cc1Swenshuai.xi         // CLK GEN2
3506*53ee8cc1Swenshuai.xi         // CLK_ODCLK_2P clock setting
3507*53ee8cc1Swenshuai.xi         // [0]:disable clock [1]:invert clock
3508*53ee8cc1Swenshuai.xi         // [2]: select clock source, 0:synthetic clock out, 1:LPLL clock out
3509*53ee8cc1Swenshuai.xi         // [3]: select clock source, 0:LPLL output clock, 1:LPLL output clk divN
3510*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_RVD_43_L, 0x0400, 0x1F00);
3511*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_RVD_46_L, 0x0000, 0x1F1F);  //odclk_freq div n/m, [4:0]reg_ckg_odclk_div_nm_m, [12:8]reg_ckg_odclk_div_nm_n,
3512*53ee8cc1Swenshuai.xi 
3513*53ee8cc1Swenshuai.xi         //set LPLL mux
3514*53ee8cc1Swenshuai.xi 
3515*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x7E), 0x0010, 0x00F0);           //LPLL_ODCLK setting  reg_ckg_odclk = reg_clkgen0_reserved0[7:2]
3516*53ee8cc1Swenshuai.xi                                                               //[0] : diable clock
3517*53ee8cc1Swenshuai.xi                                                               //[1] : invert clock
3518*53ee8cc1Swenshuai.xi                                                               //[4:2] : xx0 : floclk_odclk_synth_out
3519*53ee8cc1Swenshuai.xi                                                               //001 : LPLL output clock div2
3520*53ee8cc1Swenshuai.xi         if (MDrv_XC_IsSupportPipPatchUsingSc1MainAsSc0Sub())
3521*53ee8cc1Swenshuai.xi         {
3522*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_63_L, 0x0C, 0x0C);//sub oclck flow main odclk
3523*53ee8cc1Swenshuai.xi         }
3524*53ee8cc1Swenshuai.xi 
3525*53ee8cc1Swenshuai.xi     }
3526*53ee8cc1Swenshuai.xi     else
3527*53ee8cc1Swenshuai.xi     {
3528*53ee8cc1Swenshuai.xi         // 4 lane or LVDS
3529*53ee8cc1Swenshuai.xi         // CLK GEN0
3530*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_GATED);                          // [0] disable clock
3531*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_INVERT);                         // [1] invert clock
3532*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), CKG_ODCLK_SEL_LPLL, CKG_ODCLK_SEL_SOURCE);          // [2] select source tobe LPLL clock,
3533*53ee8cc1Swenshuai.xi                                                                                        // 0:synthetic clock out, 1:LPLL clock out
3534*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), CKG_ODCLK_XTAL, CKG_ODCLK_MASK);               // [4..3] LPLL clock div
3535*53ee8cc1Swenshuai.xi 
3536*53ee8cc1Swenshuai.xi         // CLK GEN2
3537*53ee8cc1Swenshuai.xi         // CLK_ODCLK_2P clock setting
3538*53ee8cc1Swenshuai.xi         // [0]:disable clock [1]:invert clock
3539*53ee8cc1Swenshuai.xi         // [2]: select clock source, 0:synthetic clock out, 1:LPLL clock out
3540*53ee8cc1Swenshuai.xi         // [3]: select clock source, 0:LPLL output clock, 1:LPLL output clk divN
3541*53ee8cc1Swenshuai.xi         if( ( E_PNL_TYPE_TTL == pstPanelInitData->eLPLL_Type)||
3542*53ee8cc1Swenshuai.xi             ((E_PNL_TYPE_LVDS == pstPanelInitData->eLPLL_Type)&&(E_PNL_MODE_SINGLE==pstPanelInitData->eLPLL_Mode))||
3543*53ee8cc1Swenshuai.xi             ((E_PNL_TYPE_HS_LVDS == pstPanelInitData->eLPLL_Type)&&(E_PNL_MODE_SINGLE==pstPanelInitData->eLPLL_Mode)) ||
3544*53ee8cc1Swenshuai.xi             ((E_PNL_LPLL_VBY1_8BIT_1LANE == pstPanelInitData->eLPLL_Type) || (E_PNL_LPLL_VBY1_10BIT_1LANE == pstPanelInitData->eLPLL_Type)))
3545*53ee8cc1Swenshuai.xi         {
3546*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_43_L, 0x0C00, 0x1F00);  //[12:8]reg_ckg_odclk_2p, [11]Select clock source, 1: LPLL output clock divN  (control by reg_ckg_odclk_div_nm)
3547*53ee8cc1Swenshuai.xi                                                       //[4:0]reg_ckg_clk_misc,
3548*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_46_L, 0x0201, 0x1F1F);  //odclk_freq div n/m, [4:0]reg_ckg_odclk_div_nm_m, [12:8]reg_ckg_odclk_div_nm_n,
3549*53ee8cc1Swenshuai.xi 
3550*53ee8cc1Swenshuai.xi             if (MDrv_XC_IsSupportPipPatchUsingSc1MainAsSc0Sub())
3551*53ee8cc1Swenshuai.xi             {
3552*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_RVD_63_L, 0x04, 0x0C); //sub oclck flow main odclk
3553*53ee8cc1Swenshuai.xi             }
3554*53ee8cc1Swenshuai.xi         }
3555*53ee8cc1Swenshuai.xi         else
3556*53ee8cc1Swenshuai.xi         {
3557*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_43_L, 0x0400, 0x1F00);
3558*53ee8cc1Swenshuai.xi 
3559*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_46_L, 0x0000, 0x1F1F);  //odclk_freq div n/m, [4:0]reg_ckg_odclk_div_nm_m, [12:8]reg_ckg_odclk_div_nm_n,
3560*53ee8cc1Swenshuai.xi 
3561*53ee8cc1Swenshuai.xi             if (MDrv_XC_IsSupportPipPatchUsingSc1MainAsSc0Sub())
3562*53ee8cc1Swenshuai.xi             {
3563*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_RVD_63_L, 0x0C, 0x0C); //sub oclck flow main odclk
3564*53ee8cc1Swenshuai.xi             }
3565*53ee8cc1Swenshuai.xi         }
3566*53ee8cc1Swenshuai.xi 
3567*53ee8cc1Swenshuai.xi         //set LPLL mux
3568*53ee8cc1Swenshuai.xi         if( ( (E_PNL_TYPE_LVDS == pstPanelInitData->eLPLL_Type)&&(E_PNL_MODE_DUAL==pstPanelInitData->eLPLL_Mode))||
3569*53ee8cc1Swenshuai.xi              ( (E_PNL_TYPE_HS_LVDS == pstPanelInitData->eLPLL_Type)&&(E_PNL_MODE_DUAL==pstPanelInitData->eLPLL_Mode))||
3570*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_VBY1_10BIT_2LANE == pstPanelInitData->eLPLL_Type)||
3571*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_VBY1_8BIT_2LANE == pstPanelInitData->eLPLL_Type)||
3572*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_VBY1_10BIT_4LANE == pstPanelInitData->eLPLL_Type)||
3573*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_VBY1_8BIT_4LANE == pstPanelInitData->eLPLL_Type)||
3574*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_EPI24_12P == pstPanelInitData->eLPLL_Type)||
3575*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_EPI28_12P == pstPanelInitData->eLPLL_Type)||
3576*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_USI_T_8BIT_12P == pstPanelInitData->eLPLL_Type)||
3577*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_USI_T_10BIT_12P == pstPanelInitData->eLPLL_Type)||
3578*53ee8cc1Swenshuai.xi              ( E_PNL_LPLL_ISP_8BIT_12P == pstPanelInitData->eLPLL_Type)||
3579*53ee8cc1Swenshuai.xi              ( (E_PNL_LPLL_ISP_8BIT_6P_D == pstPanelInitData->eLPLL_Type)&&(E_PNL_MODE_DUAL==pstPanelInitData->eLPLL_Mode)))
3580*53ee8cc1Swenshuai.xi         {
3581*53ee8cc1Swenshuai.xi              W2BYTEMSK(L_CLKGEN0(0x7E), 0x0010, 0x00F0);      //LPLL_ODCLK setting  reg_ckg_odclk = reg_clkgen0_reserved0[7:2]
3582*53ee8cc1Swenshuai.xi                                                               //[0] : diable clock
3583*53ee8cc1Swenshuai.xi                                                               //[1] : invert clock
3584*53ee8cc1Swenshuai.xi                                                               //[4:2] : xx0 : floclk_odclk_synth_out
3585*53ee8cc1Swenshuai.xi                                                               //001 : LPLL output clock div2
3586*53ee8cc1Swenshuai.xi         }
3587*53ee8cc1Swenshuai.xi         else if( ( E_PNL_TYPE_TTL == pstPanelInitData->eLPLL_Type)||
3588*53ee8cc1Swenshuai.xi              ((E_PNL_TYPE_LVDS == pstPanelInitData->eLPLL_Type)&&(E_PNL_MODE_SINGLE==pstPanelInitData->eLPLL_Mode))||
3589*53ee8cc1Swenshuai.xi              ((E_PNL_TYPE_HS_LVDS == pstPanelInitData->eLPLL_Type)&&(E_PNL_MODE_SINGLE==pstPanelInitData->eLPLL_Mode)))
3590*53ee8cc1Swenshuai.xi         {
3591*53ee8cc1Swenshuai.xi              W2BYTEMSK(L_CLKGEN0(0x7E), 0x0050, 0x00F0);      //LPLL_ODCLK setting  reg_ckg_odclk = reg_clkgen0_reserved0[7:2]
3592*53ee8cc1Swenshuai.xi                                                               //[0] : diable clock
3593*53ee8cc1Swenshuai.xi                                                               //[1] : invert clock
3594*53ee8cc1Swenshuai.xi                                                               //[4:2] : xx0 : floclk_odclk_synth_out
3595*53ee8cc1Swenshuai.xi                                                               // 101 : LPLL output clock div4
3596*53ee8cc1Swenshuai.xi         }
3597*53ee8cc1Swenshuai.xi 
3598*53ee8cc1Swenshuai.xi     }
3599*53ee8cc1Swenshuai.xi 
3600*53ee8cc1Swenshuai.xi     if(  IsVBY1(pstPanelInitData->eLPLL_Type_Ext) )
3601*53ee8cc1Swenshuai.xi     {
3602*53ee8cc1Swenshuai.xi         // [0]reg_vx1gpi_mode, refer to tmux table : pad_list:  reg_vx1gpi_mode
3603*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_CHIP_25_L, 0x0001, 0x0001);
3604*53ee8cc1Swenshuai.xi     }
3605*53ee8cc1Swenshuai.xi 
3606*53ee8cc1Swenshuai.xi     if(  IsVBY1(pstPanelInitData->eLPLL_Type_Ext) )
3607*53ee8cc1Swenshuai.xi     {
3608*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_BK_TCON(0x00), 0x0000, 0xFFFF);
3609*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_BK_TCON(0x69), 0x0400, 0x0400);
3610*53ee8cc1Swenshuai.xi     }
3611*53ee8cc1Swenshuai.xi 
3612*53ee8cc1Swenshuai.xi     // reg_ckg_odclk_2p invert
3613*53ee8cc1Swenshuai.xi     // SW patch for Maserati only
3614*53ee8cc1Swenshuai.xi     // For sub video flicker issue, need to invert clk by default
3615*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_RVD_43_L, 0x0200, 0x0200); //FIXME:patch for PIP
3616*53ee8cc1Swenshuai.xi 
3617*53ee8cc1Swenshuai.xi #if 0
3618*53ee8cc1Swenshuai.xi     // setup output dot clock
3619*53ee8cc1Swenshuai.xi 
3620*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x53), CKG_ODCLK_CLK_LPLL, CKG_ODCLK_MASK);      // select source tobe LPLL clock
3621*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_INVERT);               // clock not invert
3622*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x53), DISABLE, CKG_ODCLK_GATED);                // enable clock
3623*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x53), 0xC0, 0xF0);      //  reg_ckg_odclk_mft
3624*53ee8cc1Swenshuai.xi 
3625*53ee8cc1Swenshuai.xi     W2BYTE(L_CLKGEN0(0x58),0x0000); //[3:0]ckg_tx_mod
3626*53ee8cc1Swenshuai.xi     W2BYTE(L_CLKGEN1(0x31), 0x0000); //[11:8]ckg_odclk_frc
3627*53ee8cc1Swenshuai.xi 
3628*53ee8cc1Swenshuai.xi 
3629*53ee8cc1Swenshuai.xi 
3630*53ee8cc1Swenshuai.xi     if(  IsVBY1(pstPanelInitData->eLPLL_Type) )
3631*53ee8cc1Swenshuai.xi     {
3632*53ee8cc1Swenshuai.xi 
3633*53ee8cc1Swenshuai.xi         W2BYTE(REG_CLKGEN0_57_L,0x0008); //[3:0]ckg_fifo
3634*53ee8cc1Swenshuai.xi         W2BYTE(L_CLKGEN0(0x63), 0x0410);   //[11:8]ckg_tx_mod_osd[4:0]osd2mod
3635*53ee8cc1Swenshuai.xi         W2BYTE(REG_RVD_09_L, 0x1800); //[12:8]ckg_vby1_fifo_osd [3:0]clk_vby1_fifo
3636*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x55), 0x00, 0xF00); //[11:8] reg_ckg_osdc
3637*53ee8cc1Swenshuai.xi     }
3638*53ee8cc1Swenshuai.xi     else
3639*53ee8cc1Swenshuai.xi     {
3640*53ee8cc1Swenshuai.xi 
3641*53ee8cc1Swenshuai.xi         W2BYTE(REG_CLKGEN0_57_L,0x0000); //[3:0]ckg_fifo
3642*53ee8cc1Swenshuai.xi         if((pstPanelInitData->eLPLL_Type == E_PNL_TYPE_HS_LVDS)&&(pstPanelInitData->eLPLL_Mode == E_PNL_MODE_SINGLE))
3643*53ee8cc1Swenshuai.xi         {
3644*53ee8cc1Swenshuai.xi             W2BYTE(L_CLKGEN0(0x63), 0x0410);   //[11:8]ckg_tx_mod_osd[4:0]osd2mod
3645*53ee8cc1Swenshuai.xi             W2BYTE(REG_RVD_09_L, 0x1000); //[12:8]ckg_vby1_fifo_osd [3:0]clk_vby1_fifo+
3646*53ee8cc1Swenshuai.xi         }
3647*53ee8cc1Swenshuai.xi         else
3648*53ee8cc1Swenshuai.xi         {
3649*53ee8cc1Swenshuai.xi             W2BYTE(L_CLKGEN0(0x63),0x0000); //[11:8]ckg_tx_mod [3:0]ckg_osd2mod
3650*53ee8cc1Swenshuai.xi             W2BYTE(REG_RVD_09_L, 0x0000); //[12:8]ckg_vby1_fifo_osd [3:0]clk_vby1_fifo
3651*53ee8cc1Swenshuai.xi         }
3652*53ee8cc1Swenshuai.xi     }
3653*53ee8cc1Swenshuai.xi #endif
3654*53ee8cc1Swenshuai.xi }
3655*53ee8cc1Swenshuai.xi 
MHal_PNL_Init_MOD(void * pInstance,PNL_InitData * pstPanelInitData)3656*53ee8cc1Swenshuai.xi void MHal_PNL_Init_MOD(void *pInstance, PNL_InitData *pstPanelInitData)
3657*53ee8cc1Swenshuai.xi {
3658*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
3659*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
3660*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
3661*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
3662*53ee8cc1Swenshuai.xi 
3663*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]\n", __FUNCTION__, __LINE__);
3664*53ee8cc1Swenshuai.xi 
3665*53ee8cc1Swenshuai.xi     //------------------------------------------------------------------------
3666*53ee8cc1Swenshuai.xi 
3667*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "u16MOD_CTRL0 = %x\n", pstPanelInitData->u16MOD_CTRL0);
3668*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "u16MOD_CTRL9 = %x\n", pstPanelInitData->u16MOD_CTRL9);
3669*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "u16MOD_CTRLA = %x\n", pstPanelInitData->u16MOD_CTRLA);
3670*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "u8MOD_CTRLB  = %x\n", pstPanelInitData->u8MOD_CTRLB);
3671*53ee8cc1Swenshuai.xi 
3672*53ee8cc1Swenshuai.xi     //-------------------------------------------------------------------------
3673*53ee8cc1Swenshuai.xi     // Set MOD registers
3674*53ee8cc1Swenshuai.xi     //-------------------------------------------------------------------------
3675*53ee8cc1Swenshuai.xi 
3676*53ee8cc1Swenshuai.xi     //reg_rsclk_testmd
3677*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, ( pstPanelInitData->u16MOD_CTRL0 & (BIT(1)) )<<14, (BIT(15)) );
3678*53ee8cc1Swenshuai.xi     //reg_lvds_ti:LVDS JEIDA/VESA mode select;l         0: JEIDAl         1: VESA
3679*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, ( pstPanelInitData->u16MOD_CTRL0 & (BIT(2)) )<<12, (BIT(14)) );
3680*53ee8cc1Swenshuai.xi     //reg_pdp_10bit:pdp_10bit
3681*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, ( pstPanelInitData->u16MOD_CTRL0 & (BIT(3)) )<<10, (BIT(13)) );
3682*53ee8cc1Swenshuai.xi     //reg_lvds_plasma:
3683*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, ( pstPanelInitData->u16MOD_CTRL0 & (BIT(4)) )<<8 , (BIT(12)) );
3684*53ee8cc1Swenshuai.xi     //reg_ch_polarity:polarity swap
3685*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, ( pstPanelInitData->u16MOD_CTRL0 & (BIT(5)) )<<6 , (BIT(11)) );
3686*53ee8cc1Swenshuai.xi     //reg_osd_on_de_a: PDP osd de on DE channel A
3687*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_51_L, ( pstPanelInitData->u16MOD_CTRL0 & (BIT(7)) )>>5, (BIT(2)) ); //reg_rsclk_testmd
3688*53ee8cc1Swenshuai.xi 
3689*53ee8cc1Swenshuai.xi     //    GPIO is controlled in drvPadConf.c
3690*53ee8cc1Swenshuai.xi     //    MDrv_Write2Byte(L_BK_MOD(0x46), 0x0000);    //EXT GPO disable
3691*53ee8cc1Swenshuai.xi     //    MDrv_Write2Byte(L_BK_MOD(0x47), 0x0000);    //EXT GPO disable
3692*53ee8cc1Swenshuai.xi 
3693*53ee8cc1Swenshuai.xi     //new setting from Masrati scripts
3694*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_3C_L, 0x0000, 0xFFFF);
3695*53ee8cc1Swenshuai.xi 
3696*53ee8cc1Swenshuai.xi     //MFT setting
3697*53ee8cc1Swenshuai.xi     _MHal_PNL_Init_MFT(pInstance,pstPanelInitData);
3698*53ee8cc1Swenshuai.xi 
3699*53ee8cc1Swenshuai.xi     if(  IsVBY1(pstPanelInitData->eLPLL_Type_Ext) )
3700*53ee8cc1Swenshuai.xi     {
3701*53ee8cc1Swenshuai.xi         //new setting from Masrati scripts
3702*53ee8cc1Swenshuai.xi         //reg_data_format: data format of digital serializer
3703*53ee8cc1Swenshuai.xi         //0: LVDS 2: mini-LVDS 3: EPI-8bit 4: EPI-10bit(case2) 5: Vby1 7: EPI-10bit(case1) 8: CMPI-10bit 9: CMPI-8bit 10: USI-T 11: ISP
3704*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_30_L, 0x5000, 0xF000);
3705*53ee8cc1Swenshuai.xi 
3706*53ee8cc1Swenshuai.xi         //new setting from Masrati scripts
3707*53ee8cc1Swenshuai.xi         //switch channel, i.e 16 lane / 8 lane / 4 lane
3708*53ee8cc1Swenshuai.xi         _Hal_MOD_VB1_CH_SWICH(pstPanelInitData->eLPLL_Type_Ext);
3709*53ee8cc1Swenshuai.xi 
3710*53ee8cc1Swenshuai.xi         //new setting from Masrati scripts
3711*53ee8cc1Swenshuai.xi         // arrange MFT 4p output order
3712*53ee8cc1Swenshuai.xi         if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_1LANE)||(pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_1LANE) )
3713*53ee8cc1Swenshuai.xi         {
3714*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_0F_L, 0xF800, 0xFF00 ); //reg_rsclk_testmd
3715*53ee8cc1Swenshuai.xi         }
3716*53ee8cc1Swenshuai.xi         else
3717*53ee8cc1Swenshuai.xi         {
3718*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_0F_L, 0xD800, 0xFF00 ); //reg_rsclk_testmd
3719*53ee8cc1Swenshuai.xi         }
3720*53ee8cc1Swenshuai.xi 
3721*53ee8cc1Swenshuai.xi         // sc4 62 [15]reg_vby1_proc_st: vby1 packer  process start
3722*53ee8cc1Swenshuai.xi         // sc4 62 [13..12]reg_vby1_byte_mode: vby1 packer byte mode;l 0x : 5 bytel  10: 4 bytel  11: 3 byte
3723*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_62_L, ( BIT(15)|BIT(13) ), 0xFFFF);
3724*53ee8cc1Swenshuai.xi 
3725*53ee8cc1Swenshuai.xi         // sc4 62 [5..4]reg_vby1_pair_mirror: mirror vby1 pairs
3726*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_62_L, (pstPanelInitData->u16MOD_CTRL9 & (BIT(12)|BIT(11)))>>7, BIT(5)|BIT(4));
3727*53ee8cc1Swenshuai.xi 
3728*53ee8cc1Swenshuai.xi         // sc4 62 [14]reg_vby1_8ch: vby1 8ch mode
3729*53ee8cc1Swenshuai.xi         if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)||(pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE) )
3730*53ee8cc1Swenshuai.xi         {
3731*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_62_L, BIT(14), BIT(14));
3732*53ee8cc1Swenshuai.xi         }
3733*53ee8cc1Swenshuai.xi         else
3734*53ee8cc1Swenshuai.xi         {
3735*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_62_L, 0x0000, BIT(14));
3736*53ee8cc1Swenshuai.xi         }
3737*53ee8cc1Swenshuai.xi 
3738*53ee8cc1Swenshuai.xi         // sc4 00[9]: reg_quadmode, LVDS dual channel;  0: dual channel  1: quad channel
3739*53ee8cc1Swenshuai.xi         if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)||(pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE)||
3740*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)||(pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE))
3741*53ee8cc1Swenshuai.xi         {
3742*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_00_L, BIT(9), BIT(9));
3743*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_00_L, BIT(0), BIT(0));
3744*53ee8cc1Swenshuai.xi         }
3745*53ee8cc1Swenshuai.xi         else
3746*53ee8cc1Swenshuai.xi         {
3747*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_00_L, 0x0000, BIT(9));
3748*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_00_L, BIT(0), BIT(0));
3749*53ee8cc1Swenshuai.xi         }
3750*53ee8cc1Swenshuai.xi 
3751*53ee8cc1Swenshuai.xi 
3752*53ee8cc1Swenshuai.xi         if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1))  // use Dual port to decide the Vx1 1 or 2 devision config
3753*53ee8cc1Swenshuai.xi         {
3754*53ee8cc1Swenshuai.xi             printf("\n[%s][%d]Vx1 2 division\n", __FUNCTION__, __LINE__);
3755*53ee8cc1Swenshuai.xi             if(pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)
3756*53ee8cc1Swenshuai.xi             {
3757*53ee8cc1Swenshuai.xi 
3758*53ee8cc1Swenshuai.xi                 //Manhattan: MOD_W2BYTEMSK(REG_MOD_BK00_21_L, 0x1002, 0xFFFF); //[11:0]reg_dly_value
3759*53ee8cc1Swenshuai.xi                 //Maserati : do not to set reg_dly_value
3760*53ee8cc1Swenshuai.xi                 // mark for Maserati subbank
3761*53ee8cc1Swenshuai.xi                 //MOD_W2BYTEMSK(REG_MOD_BK00_7F_L, BIT(0), (BIT(1)|BIT(0))); // reg.7f[1:0]=reg_vfde_dly_mux
3762*53ee8cc1Swenshuai.xi 
3763*53ee8cc1Swenshuai.xi                 //Manhattan: MOD_W2BYTEMSK(REG_MOD_BK00_7F_L, 0x0002, 0xFFFF); //[2:0]reg_sram_usage
3764*53ee8cc1Swenshuai.xi                 //Maserati : MFT have sram, so we do not set any setting.
3765*53ee8cc1Swenshuai.xi 
3766*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x0000, BIT(12)); //[12]reg_vbi_en:vbi information on lvds enable
3767*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_54_L, BIT(13), BIT(13)); //[13]reg_vfde_mask:mask vfde AND de
3768*53ee8cc1Swenshuai.xi             }
3769*53ee8cc1Swenshuai.xi         }
3770*53ee8cc1Swenshuai.xi         else
3771*53ee8cc1Swenshuai.xi         {
3772*53ee8cc1Swenshuai.xi             printf("\n[%s][%d]Vx1 1 division\n", __FUNCTION__, __LINE__);
3773*53ee8cc1Swenshuai.xi 
3774*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x0000, BIT(12)); //[12]reg_vbi_en:vbi information on lvds enable
3775*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x0000, BIT(13)); //[13]reg_vfde_mask:mask vfde AND de
3776*53ee8cc1Swenshuai.xi 
3777*53ee8cc1Swenshuai.xi         }
3778*53ee8cc1Swenshuai.xi 
3779*53ee8cc1Swenshuai.xi         if((pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)||(pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE))
3780*53ee8cc1Swenshuai.xi         {
3781*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_62_L, BIT(14), BIT(14)); // [14] enable 8ch vx1 mode
3782*53ee8cc1Swenshuai.xi         }
3783*53ee8cc1Swenshuai.xi         else if((pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)||(pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE))
3784*53ee8cc1Swenshuai.xi         {
3785*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_62_L, 0x0000, BIT(14)); // [14] enable 8ch vx1 mode
3786*53ee8cc1Swenshuai.xi 
3787*53ee8cc1Swenshuai.xi             if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1))
3788*53ee8cc1Swenshuai.xi             {
3789*53ee8cc1Swenshuai.xi                 // 2 Divisoin
3790*53ee8cc1Swenshuai.xi 
3791*53ee8cc1Swenshuai.xi                 //be deleted in Maserati
3792*53ee8cc1Swenshuai.xi                 //MOD_W2BYTEMSK(REG_MOD_BK00_63_L, BIT(11), BIT(11)); // [11:10]reg_vby1_pair_mirror2
3793*53ee8cc1Swenshuai.xi             }
3794*53ee8cc1Swenshuai.xi             else
3795*53ee8cc1Swenshuai.xi             {
3796*53ee8cc1Swenshuai.xi                 // 1 Division
3797*53ee8cc1Swenshuai.xi 
3798*53ee8cc1Swenshuai.xi                 //be deleted in Maserati
3799*53ee8cc1Swenshuai.xi                 //MOD_W2BYTEMSK(REG_MOD_BK00_63_L, 0x00, BIT(11)); // [11:10]reg_vby1_pair_mirror2
3800*53ee8cc1Swenshuai.xi             }
3801*53ee8cc1Swenshuai.xi         }
3802*53ee8cc1Swenshuai.xi         else //if   ///E_PNL_LPLL_VBY1_10BIT_4LANE, E_PNL_LPLL_VBY1_10BIT_2LANE
3803*53ee8cc1Swenshuai.xi         {
3804*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_62_L, 0x00, BIT(14)); // [14] enable 8ch vx1 mode
3805*53ee8cc1Swenshuai.xi         }
3806*53ee8cc1Swenshuai.xi 
3807*53ee8cc1Swenshuai.xi         MHal_Output_Channel_Order(pInstance,
3808*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3809*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3810*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3811*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3812*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3813*53ee8cc1Swenshuai.xi 
3814*53ee8cc1Swenshuai.xi         ////per RD's suggestion ---Start
3815*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_04_L, 0xFFFF, 0xFFFF);   //reg_gcr_pe_en_ch: Differential output pre-emphasis enable
3816*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_06_L, 0x0000, 0xFFFF);   //reg_gcr_en_rint_ch: enable double termination function
3817*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_08_L, 0xFFFF, 0xFFFF);   //vby1 channel enable: vby1 channel enable
3818*53ee8cc1Swenshuai.xi 
3819*53ee8cc1Swenshuai.xi         /// reg_gcr_pe_adj ch0~ch13: Differential output data/clock pre-emphasis level adjust of channel X
3820*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_22_L,0x2222);
3821*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_23_L,0x2222);
3822*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_24_L,0x2222);
3823*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_25_L,0x2222);
3824*53ee8cc1Swenshuai.xi 
3825*53ee8cc1Swenshuai.xi         // [15] reg_vby1_hw_lock : set Vby1 lock sequence by HW mode
3826*53ee8cc1Swenshuai.xi         // [13] reg_vby1_ext_fsm_en : config each vby1 set use same FSM state (split video/osd path)
3827*53ee8cc1Swenshuai.xi         // [12] reg_vby1_proc_auto_fix : vby1 hw auto gen proc_st trig
3828*53ee8cc1Swenshuai.xi         // [10] reg_vby1_ext_ptr_en : configure each vby1 fifo used same read/write pointer
3829*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_63_L, (BIT(15)|BIT(13)|BIT(12)|BIT(10)), 0xFF00);
3830*53ee8cc1Swenshuai.xi 
3831*53ee8cc1Swenshuai.xi         //disparity setting: for 8bits/10bits encode hw error
3832*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_3A_L, BIT(7), BIT(7));
3833*53ee8cc1Swenshuai.xi 
3834*53ee8cc1Swenshuai.xi         //The threshold value be set too strict ( ori: MOD_77/79 =0x0 )
3835*53ee8cc1Swenshuai.xi         //And this reg should be set before enable serializer function
3836*53ee8cc1Swenshuai.xi         //[15]reg_sw_rptr_fix_en: pointer fix by sw mode enable
3837*53ee8cc1Swenshuai.xi         //[14:12]reg_sw_wptr_check: sw mode to decision write point check point
3838*53ee8cc1Swenshuai.xi         //[10:8]reg_sw_rptr_fix_ini: sw mode to decision read point initial value
3839*53ee8cc1Swenshuai.xi         //[6:4]reg_sw_rptr_fix_hi_th: sw mode to decision read pointer hi boundary
3840*53ee8cc1Swenshuai.xi         //[2:0]reg_sw_rptr_fix_lo_th: sw mode to decision read pointer low boundary
3841*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_79_L,0x8142,0xFFFF);
3842*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_77_L,0x8142,0xFFFF);
3843*53ee8cc1Swenshuai.xi 
3844*53ee8cc1Swenshuai.xi         //[13]reg_seri_auto_fix_osd : enable osd serializer auto fix read/write point mis-balance
3845*53ee8cc1Swenshuai.xi         //[14]reg_seri_osd_mod:for OSD, switch chanel 8~13 as OSD path
3846*53ee8cc1Swenshuai.xi         //[15]reg_dbg_status_switch:switch debug information(reg_dbg_status_sel/reg_dbg_status) between Video/OSD path     0: Video       1: OSD
3847*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_76_L, (BIT(14)|BIT(13)) , (BIT(15)|BIT(14)|BIT(13)) );
3848*53ee8cc1Swenshuai.xi 
3849*53ee8cc1Swenshuai.xi         //[0]reg_seri_enable:enable serializer function
3850*53ee8cc1Swenshuai.xi         //[1]reg_seri_auto_fix:enable serializer auto fix read/write point mis-balance
3851*53ee8cc1Swenshuai.xi         //[2]reg_fix_cnt_clr
3852*53ee8cc1Swenshuai.xi         //[3]reg_dbg_status_sel:select debug status, read status from reg_dbg_status[15:0] 0: auto fix cnt         1: point diff value
3853*53ee8cc1Swenshuai.xi         //[15..8]reg_tester_pix_ext: test pixel extension for 16bit serializer
3854*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_78_L, 0x0003 , 0xFF0F);
3855*53ee8cc1Swenshuai.xi     }
3856*53ee8cc1Swenshuai.xi     else
3857*53ee8cc1Swenshuai.xi     {
3858*53ee8cc1Swenshuai.xi         if(pstPanelInitData->eLPLL_Type == E_PNL_TYPE_LVDS)
3859*53ee8cc1Swenshuai.xi         {
3860*53ee8cc1Swenshuai.xi             //new setting from Masrati scripts
3861*53ee8cc1Swenshuai.xi             //reg_data_format: data format of digital serializer
3862*53ee8cc1Swenshuai.xi             //0: LVDS 2: mini-LVDS 3: EPI-8bit 4: EPI-10bit(case2) 5: Vby1 7: EPI-10bit(case1) 8: CMPI-10bit 9: CMPI-8bit 10: USI-T 11: ISP
3863*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_30_L, 0x0000, 0xF000);
3864*53ee8cc1Swenshuai.xi 
3865*53ee8cc1Swenshuai.xi             //new setting from Masrati scripts
3866*53ee8cc1Swenshuai.xi             // arrange MFT 4p output order (LVDS)
3867*53ee8cc1Swenshuai.xi             if(pstPanelInitData->eLPLL_Mode == E_PNL_MODE_SINGLE)
3868*53ee8cc1Swenshuai.xi             {
3869*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_0F_L, 0xE400, 0xFF00 ); //reg_rsclk_testmd
3870*53ee8cc1Swenshuai.xi             }
3871*53ee8cc1Swenshuai.xi             else
3872*53ee8cc1Swenshuai.xi             {
3873*53ee8cc1Swenshuai.xi                 MOD_W2BYTEMSK(REG_MOD_BK00_0F_L, 0xF800, 0xFF00 ); //reg_rsclk_testmd
3874*53ee8cc1Swenshuai.xi             }
3875*53ee8cc1Swenshuai.xi 
3876*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_08_L, 0x0000, 0xFFFF);   //vby1 channel enable: vby1 channel enable
3877*53ee8cc1Swenshuai.xi 
3878*53ee8cc1Swenshuai.xi             // sc4 00[9]: reg_quadmode, LVDS dual channel;  0: dual channel  1: quad channel
3879*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_00_L, 0x0000, BIT(9));
3880*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_00_L, BIT(0), BIT(0));
3881*53ee8cc1Swenshuai.xi         }
3882*53ee8cc1Swenshuai.xi 
3883*53ee8cc1Swenshuai.xi         // [7,6] : output formate selction 10: 8bit, 01: 6bit :other 10bit, bit shift
3884*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_00_L, (pstPanelInitData->u16MOD_CTRL9 & (BIT(7)|BIT(6)))<<8 , (BIT(15)|BIT(14)));
3885*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_00_L, (pstPanelInitData->u16MOD_CTRL9 & BIT(8) )<<5 , BIT(13));
3886*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_00_L, (pstPanelInitData->u16MOD_CTRL9 & BIT(9) )<<3 , BIT(12));
3887*53ee8cc1Swenshuai.xi 
3888*53ee8cc1Swenshuai.xi         MHal_Output_Channel_Order(pInstance,
3889*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3890*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3891*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3892*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3893*53ee8cc1Swenshuai.xi                                   pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3894*53ee8cc1Swenshuai.xi     }
3895*53ee8cc1Swenshuai.xi 
3896*53ee8cc1Swenshuai.xi     // Manhattan ori :MOD_W2BYTE(REG_MOD_BK00_4A_L, pstPanelInitData->u16MOD_CTRLA);
3897*53ee8cc1Swenshuai.xi     //MOD_W2BYTEMSK(REG_MOD_BK00_52_L, (pstPanelInitData->u16MOD_CTRLA & BIT(0))<<14, BIT(14)); //[15]:reg_abswitch_l [14]:reg_abswitch_r
3898*53ee8cc1Swenshuai.xi     //MOD_W2BYTEMSK(REG_MOD_BK00_52_L, (pstPanelInitData->u16MOD_CTRLA & BIT(0))<<15, BIT(15)); //[15]:reg_abswitch_l [14]:reg_abswitch_r
3899*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, (pstPanelInitData->u16MOD_CTRLA & BIT(4))>>3 , BIT(1));// PANEL_INV_DCLK
3900*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_00_L, (pstPanelInitData->u16MOD_CTRLA & BIT(12))>>7, BIT(5));// PANEL_INV_HSYNC
3901*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_00_L, (pstPanelInitData->u16MOD_CTRLA & BIT(3))<<3, BIT(6)); // PANEL_INV_VSYNC
3902*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_00_L, (pstPanelInitData->u16MOD_CTRLA & BIT(2))<<5, BIT(7)); // PANEL_INV_DE
3903*53ee8cc1Swenshuai.xi 
3904*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, (pstPanelInitData->u8MOD_CTRLB & (BIT(0)|BIT(1)))<<2, (BIT(2)|BIT(3))); //for LVDS: [1:0]ti_bitmode / 10:8bit  11:6bit  0x:10bit
3905*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_05_L, BIT(13), BIT(13)); // for LVDS: reg_pdp_10bit
3906*53ee8cc1Swenshuai.xi 
3907*53ee8cc1Swenshuai.xi     //dual port lvds _start_//
3908*53ee8cc1Swenshuai.xi     // output configure for 26 pair output 00: TTL, 01: LVDS/RSDS/mini-LVDS data differential pair, 10: mini-LVDS clock output, 11: RSDS clock output
3909*53ee8cc1Swenshuai.xi     _MHal_PNL_Set_Clk(pInstance,
3910*53ee8cc1Swenshuai.xi                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType,
3911*53ee8cc1Swenshuai.xi                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder0_3,
3912*53ee8cc1Swenshuai.xi                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder4_7,
3913*53ee8cc1Swenshuai.xi                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder8_11,
3914*53ee8cc1Swenshuai.xi                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputOrder12_13);
3915*53ee8cc1Swenshuai.xi     //dual port lvds _end_//
3916*53ee8cc1Swenshuai.xi 
3917*53ee8cc1Swenshuai.xi     //MOD_A_W2BYTEMSK(REG_MOD_A_BK00_3A_L, (_u8PnlDiffSwingLevel << 1), 0xFE);       //differential output swing level
3918*53ee8cc1Swenshuai.xi     MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, 0x0000 , 0x1F00);       //bank selection for skew clock
3919*53ee8cc1Swenshuai.xi 
3920*53ee8cc1Swenshuai.xi     //if(!MHal_PNL_MOD_Control_Out_Swing(_u8PnlDiffSwingLevel))
3921*53ee8cc1Swenshuai.xi     //    printf(">>Swing Level setting error!!\n");
3922*53ee8cc1Swenshuai.xi 
3923*53ee8cc1Swenshuai.xi     //mark in Maserati
3924*53ee8cc1Swenshuai.xi     //if(pstPanelInitData->eLPLL_Type != E_PNL_TYPE_MINILVDS)
3925*53ee8cc1Swenshuai.xi     //{
3926*53ee8cc1Swenshuai.xi     //    MOD_W2BYTEMSK(REG_MOD_A_BK00_78_L, 0x7, 0x07);
3927*53ee8cc1Swenshuai.xi     //}
3928*53ee8cc1Swenshuai.xi 
3929*53ee8cc1Swenshuai.xi     //// Patch for Vx1 and it should be control by panel ini
3930*53ee8cc1Swenshuai.xi     if(  IsVBY1(pstPanelInitData->eLPLL_Type_Ext) )
3931*53ee8cc1Swenshuai.xi     {
3932*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_02_L, 0xFFFF, 0xFFFF);
3933*53ee8cc1Swenshuai.xi     }
3934*53ee8cc1Swenshuai.xi     else
3935*53ee8cc1Swenshuai.xi     {
3936*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_02_L, pstPanelInitData->u16LVDSTxSwapValue);
3937*53ee8cc1Swenshuai.xi     }
3938*53ee8cc1Swenshuai.xi 
3939*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
3940*53ee8cc1Swenshuai.xi     // At initial step, if non TCON panel, enable OD/RGBW/M+/Demura/DGA_Gamma SRAM PD
3941*53ee8cc1Swenshuai.xi     if((pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI34_8P)&&
3942*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI28_8P)&&
3943*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI34_6P)&&
3944*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI28_6P)&&
3945*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI34_2P)&&
3946*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI34_4P)&&
3947*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI28_2P)&&
3948*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI28_4P)&&
3949*53ee8cc1Swenshuai.xi        (pstPanelInitData->eLPLL_Type_Ext != E_PNL_LPLL_EPI28_12P))
3950*53ee8cc1Swenshuai.xi     {
3951*53ee8cc1Swenshuai.xi         if(pPNLInstancePrivate->u32DeviceID == 0)
3952*53ee8cc1Swenshuai.xi         {
3953*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_10_L, BIT(0), BIT(0));   //OD SRAM PD Enable  : SC_SPD_BK3F_10[0]
3954*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, 0, BIT(8));        //OD Clock gate : ~SC_SPD_BK3F_50[8]
3955*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, BIT(15), BIT(15)); //OD Bypass Enable :SC_OD_BK16_6F[15]
3956*53ee8cc1Swenshuai.xi 
3957*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_10_L, BIT(1), BIT(1));   // RGBW SRAM PD Enable : SC_SPD_BK3F_10[1]
3958*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, 0, BIT(9));        // RGBW Clock Gate : ~SC_SPD_BK3F_50[9]
3959*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, BIT(12), BIT(12)); // RGBW bypass enable :SC_OD_BK16_6F[12]
3960*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, 0, BIT(13));       // RGBW bypass enable : ~SC_OD_BK16_6F[13]
3961*53ee8cc1Swenshuai.xi 
3962*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_17_L, BIT(0), BIT(0));   //M+ SRAM PD Enable  : SC_SPD_BK3F_17[0]
3963*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_50_L, 0, BIT(10));        //M+ Clock gate : ~SC_SPD_BK3F_50[10]
3964*53ee8cc1Swenshuai.xi             //SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L,0 , BIT(12)); // M+ bypass enable :SC_OD_BK16_6F[12]
3965*53ee8cc1Swenshuai.xi             //SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK16_6F_L, 0, BIT(13));       // M+ bypass enable : ~SC_OD_BK16_6F[13]
3966*53ee8cc1Swenshuai.xi 
3967*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_0B_L, BIT(4), BIT(4));   //Demura SRAM PD Enable  : SC_SPD_BK3F_0B[4]
3968*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK77_26_L, BIT(14), BIT(14));   //Demura Clock Gate  : SC_BK77_26[14]
3969*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_RVD_45_L, BIT(0), BIT(0));                                              //Demura Clock gate : BK100A_CLKGEN2_45[0]
3970*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK77_26_L, BIT(15), BIT(15));   //Demura Clock Gate  : SC_BK77_26[15]
3971*53ee8cc1Swenshuai.xi 
3972*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK3F_0B_L, BIT(5), BIT(5));   //DGA_GAMMA SRAM PD Enable  : SC_SPD_BK3F_0B[5]
3973*53ee8cc1Swenshuai.xi         }
3974*53ee8cc1Swenshuai.xi     }
3975*53ee8cc1Swenshuai.xi 
3976*53ee8cc1Swenshuai.xi     // At initial step, SRAM PD for LD
3977*53ee8cc1Swenshuai.xi     // To avoid mantis 1082875: boot logo flash issue, remove  SRAM PD for LD from XC_init to PNL_init
3978*53ee8cc1Swenshuai.xi     // only used it in mboot, to avoid panel auto detect if panel type changed.
3979*53ee8cc1Swenshuai.xi #if defined (MSOS_TYPE_NOS)
3980*53ee8cc1Swenshuai.xi     if(pPNLInstancePrivate->u32DeviceID == 0)
3981*53ee8cc1Swenshuai.xi     {
3982*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BKC9_65_L, (BIT(0)), 0x0001);
3983*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BKCE_01_L, (0x0000), 0x1000);
3984*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BKCE_37_L, (BIT(15)), 0x8000);
3985*53ee8cc1Swenshuai.xi         //non-FO setting
3986*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK3F_12_L, (BIT(0)| BIT(1)), 0x0003);
3987*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK3F_50_L, (0x0000), 0x3800);
3988*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID,REG_SC_BK2E_37_L, (BIT(15)), 0x8000);
3989*53ee8cc1Swenshuai.xi     }
3990*53ee8cc1Swenshuai.xi #endif
3991*53ee8cc1Swenshuai.xi #endif
3992*53ee8cc1Swenshuai.xi 
3993*53ee8cc1Swenshuai.xi     // TODO: move from MDrv_Scaler_Init(), need to double check!
3994*53ee8cc1Swenshuai.xi     //MOD_W2BYTEMSK(REG_MOD_BK00_53_L, BIT(0), BIT(0)); //can not find this register in Manhattan register table
3995*53ee8cc1Swenshuai.xi 
3996*53ee8cc1Swenshuai.xi 
3997*53ee8cc1Swenshuai.xi     //--------------------------------------------------------------
3998*53ee8cc1Swenshuai.xi     //Depend On Bitmode to set Dither
3999*53ee8cc1Swenshuai.xi     //--------------------------------------------------------------
4000*53ee8cc1Swenshuai.xi 
4001*53ee8cc1Swenshuai.xi 
4002*53ee8cc1Swenshuai.xi     // always enable noise dither and disable TAILCUT
4003*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, ((pstPanelInitData->u8PanelNoiseDith ? XC_PAFRC_DITH_NOISEDITH_EN : (1 - XC_PAFRC_DITH_NOISEDITH_EN)) <<3) , BIT(3));
4004*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, XC_PAFRC_DITH_TAILCUT_DISABLE, BIT(4));
4005*53ee8cc1Swenshuai.xi 
4006*53ee8cc1Swenshuai.xi     switch(pstPanelInitData->u8MOD_CTRLB & 0x03)//[1:0]ti_bitmode b'10:8bit  11:6bit  0x:10bit
4007*53ee8cc1Swenshuai.xi     {
4008*53ee8cc1Swenshuai.xi         case HAL_TI_6BIT_MODE:
4009*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, BIT(0), BIT(0));
4010*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, BIT(2), BIT(2));
4011*53ee8cc1Swenshuai.xi             break;
4012*53ee8cc1Swenshuai.xi 
4013*53ee8cc1Swenshuai.xi         case HAL_TI_8BIT_MODE:
4014*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, BIT(0), BIT(0));
4015*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, 0x00, BIT(2));
4016*53ee8cc1Swenshuai.xi             break;
4017*53ee8cc1Swenshuai.xi 
4018*53ee8cc1Swenshuai.xi         case HAL_TI_10BIT_MODE:
4019*53ee8cc1Swenshuai.xi         default:
4020*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, 0x00, BIT(0));
4021*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK24_3F_L, 0x00, BIT(2));
4022*53ee8cc1Swenshuai.xi             break;
4023*53ee8cc1Swenshuai.xi     }
4024*53ee8cc1Swenshuai.xi 
4025*53ee8cc1Swenshuai.xi 
4026*53ee8cc1Swenshuai.xi     //-----depend on bitmode to set Dither------------------------------
4027*53ee8cc1Swenshuai.xi     MHal_PNL_SetOutputType(pInstance, pPNLResourcePrivate->sthalPNL._eDrvPnlInitOptions, pstPanelInitData->eLPLL_Type);     // TTL to Ursa
4028*53ee8cc1Swenshuai.xi     //MHal_PNL_Bringup(pInstance);
4029*53ee8cc1Swenshuai.xi 
4030*53ee8cc1Swenshuai.xi     MHal_PNL_MISC_Control(pInstance, pstPanelInitData->u32PNL_MISC);
4031*53ee8cc1Swenshuai.xi 
4032*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "OutputType  = %x, eLPLL_Type = %x\n", pPNLResourcePrivate->sthalPNL._eDrvPnlInitOptions, pstPanelInitData->eLPLL_Type);
4033*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "u32PNL_MISC  = %tx\n", (ptrdiff_t)pstPanelInitData->u32PNL_MISC);
4034*53ee8cc1Swenshuai.xi 
4035*53ee8cc1Swenshuai.xi }
4036*53ee8cc1Swenshuai.xi 
MHal_PNL_DumpMODReg(void * pInstance,MS_U32 u32Addr,MS_U16 u16Value,MS_BOOL bHiByte,MS_U16 u16Mask)4037*53ee8cc1Swenshuai.xi void MHal_PNL_DumpMODReg(void *pInstance, MS_U32 u32Addr, MS_U16 u16Value, MS_BOOL bHiByte, MS_U16 u16Mask)
4038*53ee8cc1Swenshuai.xi {
4039*53ee8cc1Swenshuai.xi     if (bHiByte)
4040*53ee8cc1Swenshuai.xi     {
4041*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(u32Addr, (u16Value << 8), (u16Mask << 8));
4042*53ee8cc1Swenshuai.xi     }
4043*53ee8cc1Swenshuai.xi     else
4044*53ee8cc1Swenshuai.xi     {
4045*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(u32Addr, u16Value, u16Mask);
4046*53ee8cc1Swenshuai.xi     }
4047*53ee8cc1Swenshuai.xi }
4048*53ee8cc1Swenshuai.xi 
MHal_MOD_Calibration_Init(void * pInstance,PNL_ModCali_InitData * pstModCaliInitData)4049*53ee8cc1Swenshuai.xi void MHal_MOD_Calibration_Init(void *pInstance, PNL_ModCali_InitData *pstModCaliInitData)
4050*53ee8cc1Swenshuai.xi {
4051*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4052*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
4053*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4054*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
4055*53ee8cc1Swenshuai.xi     // Setup the default swing level
4056*53ee8cc1Swenshuai.xi     pPNLResourcePrivate->sthalPNL._u16PnlDefault_SwingLevel = pstModCaliInitData->u16ExpectSwingLevel;   //mv
4057*53ee8cc1Swenshuai.xi #if 0
4058*53ee8cc1Swenshuai.xi     // Pair setting
4059*53ee8cc1Swenshuai.xi     // =========
4060*53ee8cc1Swenshuai.xi     // Select calibration source pair, 00: ch2, 01: ch6, 10:ch8, 11:ch12
4061*53ee8cc1Swenshuai.xi     //MOD_7D_L[3:2]
4062*53ee8cc1Swenshuai.xi     // =========
4063*53ee8cc1Swenshuai.xi     //in msModCurrentCalibration, it will transfer to the real data
4064*53ee8cc1Swenshuai.xi 
4065*53ee8cc1Swenshuai.xi     switch(pstModCaliInitData->u8ModCaliPairSel)
4066*53ee8cc1Swenshuai.xi     {
4067*53ee8cc1Swenshuai.xi         default:
4068*53ee8cc1Swenshuai.xi         case 0:
4069*53ee8cc1Swenshuai.xi         //ch 2
4070*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_PAIR_SEL = 0x00; // ch2
4071*53ee8cc1Swenshuai.xi         break;
4072*53ee8cc1Swenshuai.xi         case 1:
4073*53ee8cc1Swenshuai.xi         //ch 6
4074*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_PAIR_SEL = 0x01; // ch6, calibration initialized value
4075*53ee8cc1Swenshuai.xi         break;
4076*53ee8cc1Swenshuai.xi         case 2:
4077*53ee8cc1Swenshuai.xi         //ch 8
4078*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_PAIR_SEL = 0x02;
4079*53ee8cc1Swenshuai.xi         break;
4080*53ee8cc1Swenshuai.xi         case 3:
4081*53ee8cc1Swenshuai.xi         //ch 12
4082*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_PAIR_SEL = 0x03;
4083*53ee8cc1Swenshuai.xi         break;
4084*53ee8cc1Swenshuai.xi     }
4085*53ee8cc1Swenshuai.xi #endif
4086*53ee8cc1Swenshuai.xi     // Target setting
4087*53ee8cc1Swenshuai.xi     // =========
4088*53ee8cc1Swenshuai.xi     // GCR_CAL_LEVEL[1:0] : REG_MOD_A_BK00_70_L =>
4089*53ee8cc1Swenshuai.xi     // =========
4090*53ee8cc1Swenshuai.xi     //in msModCurrentCalibration, it will transfer to the real data
4091*53ee8cc1Swenshuai.xi     switch(pstModCaliInitData->u8ModCaliTarget)
4092*53ee8cc1Swenshuai.xi     {
4093*53ee8cc1Swenshuai.xi         default:
4094*53ee8cc1Swenshuai.xi         case 0:
4095*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET = 0;
4096*53ee8cc1Swenshuai.xi         break;
4097*53ee8cc1Swenshuai.xi         case 1:
4098*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET = 1;
4099*53ee8cc1Swenshuai.xi         break;
4100*53ee8cc1Swenshuai.xi         case 2:
4101*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET = 2;
4102*53ee8cc1Swenshuai.xi         break;
4103*53ee8cc1Swenshuai.xi         case 3:
4104*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET = 3;
4105*53ee8cc1Swenshuai.xi         break;
4106*53ee8cc1Swenshuai.xi     }
4107*53ee8cc1Swenshuai.xi     // Offset setting, for fine tune
4108*53ee8cc1Swenshuai.xi     //_usMOD_CALI_OFFSET = pstModCaliInitData->s8ModCaliOffset;
4109*53ee8cc1Swenshuai.xi     // _u8MOD_CALI_VALUE is a real value; the _u8MOD_CALI_VALUE is an idea value
4110*53ee8cc1Swenshuai.xi     // Target value should be the same with _u8MOD_CALI_VALUE to be a default value
4111*53ee8cc1Swenshuai.xi     pPNLResourcePrivate->sthalPNL._u8MOD_CALI_VALUE= pstModCaliInitData->u8ModCaliTarget;
4112*53ee8cc1Swenshuai.xi     // PVDD setting
4113*53ee8cc1Swenshuai.xi     pPNLResourcePrivate->sthalPNL._bPVDD_2V5 = pstModCaliInitData->bPVDD_2V5;
4114*53ee8cc1Swenshuai.xi 
4115*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]\n", __FUNCTION__, __LINE__);
4116*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "u16ExpectSwingLevel = %u\n", pstModCaliInitData->u16ExpectSwingLevel);
4117*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "u8ModCaliTarget     = %x\n", pstModCaliInitData->u8ModCaliTarget);
4118*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "_u8MOD_CALI_TARGET  = %x\n", pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET);
4119*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "_u8MOD_CALI_VALUE   = %x\n", pPNLResourcePrivate->sthalPNL._u8MOD_CALI_VALUE);
4120*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "bPVDD_2V5           = %x\n", pstModCaliInitData->bPVDD_2V5);
4121*53ee8cc1Swenshuai.xi 
4122*53ee8cc1Swenshuai.xi }
4123*53ee8cc1Swenshuai.xi 
MHal_BD_LVDS_Output_Type(void * pInstance,MS_U16 Type)4124*53ee8cc1Swenshuai.xi void MHal_BD_LVDS_Output_Type(void *pInstance, MS_U16 Type)
4125*53ee8cc1Swenshuai.xi {
4126*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4127*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
4128*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4129*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
4130*53ee8cc1Swenshuai.xi     if(Type == LVDS_DUAL_OUTPUT_SPECIAL )
4131*53ee8cc1Swenshuai.xi     {
4132*53ee8cc1Swenshuai.xi         pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Shift = LVDS_DUAL_OUTPUT_SPECIAL;
4133*53ee8cc1Swenshuai.xi         pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type = 1;
4134*53ee8cc1Swenshuai.xi     }
4135*53ee8cc1Swenshuai.xi     else
4136*53ee8cc1Swenshuai.xi     {
4137*53ee8cc1Swenshuai.xi         pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type  = Type;
4138*53ee8cc1Swenshuai.xi     }
4139*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]\n", __FUNCTION__, __LINE__);
4140*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "_u8MOD_LVDS_Pair_Type = %u\n", pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type);
4141*53ee8cc1Swenshuai.xi 
4142*53ee8cc1Swenshuai.xi }
4143*53ee8cc1Swenshuai.xi 
msModCalDDAOUT(void)4144*53ee8cc1Swenshuai.xi MS_BOOL msModCalDDAOUT(void)
4145*53ee8cc1Swenshuai.xi {
4146*53ee8cc1Swenshuai.xi    // W2BYTEMSK(BK_MOD(0x7D), ENABLE, 8:8);
4147*53ee8cc1Swenshuai.xi    // MsOS_DelayTask(10);  //10ms
4148*53ee8cc1Swenshuai.xi     return (MS_BOOL)((MOD_R2BYTEMSK(REG_MOD_A_BK00_78_L, BIT(14))) >> 14);
4149*53ee8cc1Swenshuai.xi }
4150*53ee8cc1Swenshuai.xi 
msModCurrentCalibration(void * pInstance)4151*53ee8cc1Swenshuai.xi MS_U8 msModCurrentCalibration(void *pInstance)
4152*53ee8cc1Swenshuai.xi {
4153*53ee8cc1Swenshuai.xi #if MOD_CAL_TIMER
4154*53ee8cc1Swenshuai.xi         MS_U32 delay_start_time;
4155*53ee8cc1Swenshuai.xi         delay_start_time=MsOS_GetSystemTime();
4156*53ee8cc1Swenshuai.xi #endif
4157*53ee8cc1Swenshuai.xi 
4158*53ee8cc1Swenshuai.xi #if (!ENABLE_Auto_ModCurrentCalibration)
4159*53ee8cc1Swenshuai.xi         return 0x60;
4160*53ee8cc1Swenshuai.xi #else
4161*53ee8cc1Swenshuai.xi     MS_U8 u8cur_ibcal=0;
4162*53ee8cc1Swenshuai.xi     MS_U16 u16reg_32da = 0, u16reg_32dc = 0;
4163*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4164*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
4165*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4166*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
4167*53ee8cc1Swenshuai.xi     u16reg_32da = MOD_A_R2BYTE(REG_MOD_A_BK00_18_L);
4168*53ee8cc1Swenshuai.xi     u16reg_32dc = MOD_A_R2BYTE(REG_MOD_A_BK00_19_L);
4169*53ee8cc1Swenshuai.xi 
4170*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_CALIBRATION, "[%s][%d]\n", __FUNCTION__, __LINE__);
4171*53ee8cc1Swenshuai.xi 
4172*53ee8cc1Swenshuai.xi     // (1) Set keep mode to auto write calibration result into register.
4173*53ee8cc1Swenshuai.xi     MOD_A_W2BYTEMSK(REG_MOD_A_BK00_7A_L, BIT(15), BIT(15));
4174*53ee8cc1Swenshuai.xi 
4175*53ee8cc1Swenshuai.xi     // (2) Set calibration step waiting time
4176*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_7F_L, 0x0009); // (about 5us)
4177*53ee8cc1Swenshuai.xi     //MOD_A_W2BYTEMSK(REG_MOD_A_BK00_7E_L, 0x0009, 0x00FF); //remove in Manhattan
4178*53ee8cc1Swenshuai.xi 
4179*53ee8cc1Swenshuai.xi     // (3) Set calibration toggle time
4180*53ee8cc1Swenshuai.xi     MOD_A_W2BYTEMSK(REG_MOD_A_BK00_7A_L, 0x0500, 0x0F00);
4181*53ee8cc1Swenshuai.xi 
4182*53ee8cc1Swenshuai.xi     // (4) Select calibration level (LVDS is 250mV)
4183*53ee8cc1Swenshuai.xi     MOD_A_W2BYTEMSK(REG_MOD_A_BK00_78_L, pPNLResourcePrivate->sthalPNL._u8MOD_CALI_TARGET, BIT(2)|BIT(1)|BIT(0));    // Select calibration target voltage, 00: 250mV, 01:350mV, 10: 300mV, 11: 200mV
4184*53ee8cc1Swenshuai.xi 
4185*53ee8cc1Swenshuai.xi     // (5) Store output configuration value and Enable each pair test mode
4186*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, 0xFFFF);
4187*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0xFFFF);
4188*53ee8cc1Swenshuai.xi 
4189*53ee8cc1Swenshuai.xi     // (6) Enable Calibration mode
4190*53ee8cc1Swenshuai.xi     MOD_A_W2BYTEMSK(REG_MOD_A_BK00_78_L, BIT(15), BIT(15));         // Enable calibration function
4191*53ee8cc1Swenshuai.xi 
4192*53ee8cc1Swenshuai.xi     MS_U8 u8CheckTimes = 0;
4193*53ee8cc1Swenshuai.xi     while(1)
4194*53ee8cc1Swenshuai.xi     {
4195*53ee8cc1Swenshuai.xi         // (7) Enable Hardware calibration
4196*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_79_L, BIT(15), BIT(15));
4197*53ee8cc1Swenshuai.xi 
4198*53ee8cc1Swenshuai.xi         // (8) Wait 3ms
4199*53ee8cc1Swenshuai.xi         MsOS_DelayTask(3);
4200*53ee8cc1Swenshuai.xi 
4201*53ee8cc1Swenshuai.xi         // mark this step in Maserati
4202*53ee8cc1Swenshuai.xi         // (9) Disable Hardware calibration
4203*53ee8cc1Swenshuai.xi         //MOD_A_W2BYTEMSK(REG_MOD_A_BK00_79_L, 0x0000, BIT(15));
4204*53ee8cc1Swenshuai.xi 
4205*53ee8cc1Swenshuai.xi         // (9) Check Finish and Fail flag bit
4206*53ee8cc1Swenshuai.xi         if (MOD_A_R2BYTEMSK(REG_MOD_A_BK00_79_L, 0x6000) == 0x4000)
4207*53ee8cc1Swenshuai.xi         {
4208*53ee8cc1Swenshuai.xi             //printf("\033[0;31m [%s][%d] cal ok, break  \033[0m\n", __FUNCTION__, __LINE__);
4209*53ee8cc1Swenshuai.xi             // (10)success, refine icon value
4210*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH0_1 = 0;
4211*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH2_3 = 0;
4212*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH4_5 = 0;
4213*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH6_7 = 0;
4214*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH8_9 = 0;
4215*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH10_11 = 0;
4216*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH12_13 = 0;
4217*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempCH14_15 = 0;
4218*53ee8cc1Swenshuai.xi 
4219*53ee8cc1Swenshuai.xi             u16ICONtempCH0_1   = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_30_L, 0xFFFF) );
4220*53ee8cc1Swenshuai.xi             u16ICONtempCH2_3   = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_31_L, 0xFFFF) );
4221*53ee8cc1Swenshuai.xi             u16ICONtempCH4_5   = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_32_L, 0xFFFF) );
4222*53ee8cc1Swenshuai.xi             u16ICONtempCH6_7   = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_33_L, 0xFFFF) );
4223*53ee8cc1Swenshuai.xi             u16ICONtempCH8_9   = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_34_L, 0xFFFF) );
4224*53ee8cc1Swenshuai.xi             u16ICONtempCH10_11 = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_35_L, 0xFFFF) );
4225*53ee8cc1Swenshuai.xi             u16ICONtempCH12_13 = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_36_L, 0xFFFF) );
4226*53ee8cc1Swenshuai.xi             u16ICONtempCH14_15 = _Hal_MOD_Refine_ICON( MOD_A_R2BYTEMSK(REG_MOD_A_BK00_37_L, 0xFFFF) );
4227*53ee8cc1Swenshuai.xi 
4228*53ee8cc1Swenshuai.xi             //close reg_keep_cal_value
4229*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_7A_L, 0x0000, BIT(15));
4230*53ee8cc1Swenshuai.xi 
4231*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_30_L, u16ICONtempCH0_1, 0xFFFF);
4232*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_31_L, u16ICONtempCH2_3, 0xFFFF);
4233*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_32_L, u16ICONtempCH4_5, 0xFFFF);
4234*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_33_L, u16ICONtempCH6_7, 0xFFFF);
4235*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_34_L, u16ICONtempCH8_9, 0xFFFF);
4236*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_35_L, u16ICONtempCH10_11, 0xFFFF);
4237*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_36_L, u16ICONtempCH12_13, 0xFFFF);
4238*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_37_L, u16ICONtempCH14_15, 0xFFFF);
4239*53ee8cc1Swenshuai.xi 
4240*53ee8cc1Swenshuai.xi             break;
4241*53ee8cc1Swenshuai.xi         }
4242*53ee8cc1Swenshuai.xi         else
4243*53ee8cc1Swenshuai.xi         {
4244*53ee8cc1Swenshuai.xi             u8CheckTimes ++;
4245*53ee8cc1Swenshuai.xi             //printf("\033[0;31m [%s][%d] cal ng, u8CheckTimes: %d  \033[0m\n", __FUNCTION__, __LINE__, u8CheckTimes);
4246*53ee8cc1Swenshuai.xi         }
4247*53ee8cc1Swenshuai.xi 
4248*53ee8cc1Swenshuai.xi         if (u8CheckTimes > MOD_LVDS_HW_CALI_TIME_OUT)
4249*53ee8cc1Swenshuai.xi         {
4250*53ee8cc1Swenshuai.xi             // (11)fail , set to default value
4251*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_7A_L, 0x00, BIT(15));
4252*53ee8cc1Swenshuai.xi 
4253*53ee8cc1Swenshuai.xi             MS_U16 u16ICONtempDefault = ( (MOD_LVDS_ICON_DEFAULT<<8) | (MOD_LVDS_ICON_DEFAULT) );
4254*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_30_L, u16ICONtempDefault, 0xFFFF);
4255*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_31_L, u16ICONtempDefault, 0xFFFF);
4256*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_32_L, u16ICONtempDefault, 0xFFFF);
4257*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_33_L, u16ICONtempDefault, 0xFFFF);
4258*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_34_L, u16ICONtempDefault, 0xFFFF);
4259*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_35_L, u16ICONtempDefault, 0xFFFF);
4260*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_36_L, u16ICONtempDefault, 0xFFFF);
4261*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_37_L, u16ICONtempDefault, 0xFFFF);
4262*53ee8cc1Swenshuai.xi             //printf("\033[0;31m [%s][%d] If 3 times all fail, set all pair to nominal value by disable keep mode  \033[0m\n", __FUNCTION__, __LINE__);
4263*53ee8cc1Swenshuai.xi             break;
4264*53ee8cc1Swenshuai.xi         }
4265*53ee8cc1Swenshuai.xi     }
4266*53ee8cc1Swenshuai.xi 
4267*53ee8cc1Swenshuai.xi     if (u8CheckTimes <= MOD_LVDS_HW_CALI_TIME_OUT)
4268*53ee8cc1Swenshuai.xi     {
4269*53ee8cc1Swenshuai.xi          PNL_DBG(PNL_DBGLEVEL_CALIBRATION, "\r\n----- Calibration ok \n");
4270*53ee8cc1Swenshuai.xi     }
4271*53ee8cc1Swenshuai.xi     else
4272*53ee8cc1Swenshuai.xi     {
4273*53ee8cc1Swenshuai.xi         PNL_DBG(PNL_DBGLEVEL_CALIBRATION, "\r\n----- Calibration fail: 0x%x \n", MOD_R2BYTEMSK(REG_MOD_BK00_3D_L, 0x6000));
4274*53ee8cc1Swenshuai.xi     }
4275*53ee8cc1Swenshuai.xi 
4276*53ee8cc1Swenshuai.xi     // Wait 2ms to make sure HW auto write calibration result into register
4277*53ee8cc1Swenshuai.xi     MsOS_DelayTask(2);
4278*53ee8cc1Swenshuai.xi 
4279*53ee8cc1Swenshuai.xi     // (12) Restore each pair output configuration
4280*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, u16reg_32da);
4281*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, u16reg_32dc);
4282*53ee8cc1Swenshuai.xi 
4283*53ee8cc1Swenshuai.xi     // (13) Disable calibration mode
4284*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_A_BK00_78_L, 0x00, BIT(15));         // Disable calibration function
4285*53ee8cc1Swenshuai.xi 
4286*53ee8cc1Swenshuai.xi     // With HW calibration mode, HW would cal for each channel, and each channel would get different value
4287*53ee8cc1Swenshuai.xi     // Return channel 2 vaule
4288*53ee8cc1Swenshuai.xi     u8cur_ibcal = MOD_A_R2BYTEMSK(REG_MOD_A_BK00_31_L, 0x00FF); // return ch2 calibration result
4289*53ee8cc1Swenshuai.xi 
4290*53ee8cc1Swenshuai.xi #if MOD_CAL_TIMER
4291*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_CALIBRATION, "[%s] takes %ld ms\n", __FUNCTION__, (MsOS_GetSystemTime()-delay_start_time));
4292*53ee8cc1Swenshuai.xi #endif
4293*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_CALIBRATION, "\r\n Calibration result= %x\n", u8cur_ibcal);
4294*53ee8cc1Swenshuai.xi 
4295*53ee8cc1Swenshuai.xi     return (u8cur_ibcal&0xFF);
4296*53ee8cc1Swenshuai.xi #endif
4297*53ee8cc1Swenshuai.xi }
4298*53ee8cc1Swenshuai.xi 
MHal_PNL_MOD_Calibration(void * pInstance)4299*53ee8cc1Swenshuai.xi PNL_Result MHal_PNL_MOD_Calibration(void *pInstance)
4300*53ee8cc1Swenshuai.xi {
4301*53ee8cc1Swenshuai.xi     MS_U8 u8Cab;
4302*53ee8cc1Swenshuai.xi     MS_U8 u8BackUSBPwrStatus;
4303*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4304*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
4305*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4306*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
4307*53ee8cc1Swenshuai.xi 
4308*53ee8cc1Swenshuai.xi     u8BackUSBPwrStatus = R2BYTEMSK(L_BK_UTMI1(0x04), BIT(7));
4309*53ee8cc1Swenshuai.xi 
4310*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_BK_UTMI1(0x04), 0x00, BIT(7));
4311*53ee8cc1Swenshuai.xi 
4312*53ee8cc1Swenshuai.xi     u8Cab = msModCurrentCalibration(pInstance);
4313*53ee8cc1Swenshuai.xi 
4314*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_BK_UTMI1(0x04), u8BackUSBPwrStatus, BIT(7));
4315*53ee8cc1Swenshuai.xi 
4316*53ee8cc1Swenshuai.xi     if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type !=E_PNL_TYPE_MINILVDS)
4317*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_A_BK00_78_L, u8Cab, 0x07);
4318*53ee8cc1Swenshuai.xi 
4319*53ee8cc1Swenshuai.xi     return E_PNL_OK;
4320*53ee8cc1Swenshuai.xi 
4321*53ee8cc1Swenshuai.xi }
4322*53ee8cc1Swenshuai.xi 
MHal_PNL_PowerDownLPLL(void * pInstance,MS_BOOL bEnable)4323*53ee8cc1Swenshuai.xi static void MHal_PNL_PowerDownLPLL(void *pInstance, MS_BOOL bEnable)
4324*53ee8cc1Swenshuai.xi {
4325*53ee8cc1Swenshuai.xi     if(bEnable)
4326*53ee8cc1Swenshuai.xi     {
4327*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_BK_LPLL(0x03), BIT(5), BIT(5));
4328*53ee8cc1Swenshuai.xi     }
4329*53ee8cc1Swenshuai.xi     else
4330*53ee8cc1Swenshuai.xi     {
4331*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_BK_LPLL(0x03), FALSE, BIT(5));
4332*53ee8cc1Swenshuai.xi     }
4333*53ee8cc1Swenshuai.xi }
4334*53ee8cc1Swenshuai.xi 
MHal_PNL_En(void * pInstance,MS_BOOL bPanelOn,MS_BOOL bCalEn)4335*53ee8cc1Swenshuai.xi PNL_Result MHal_PNL_En(void *pInstance, MS_BOOL bPanelOn, MS_BOOL bCalEn)
4336*53ee8cc1Swenshuai.xi {
4337*53ee8cc1Swenshuai.xi     MS_U8 u8Cab;
4338*53ee8cc1Swenshuai.xi     MS_U8 u8BackUSBPwrStatus;
4339*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4340*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
4341*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4342*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
4343*53ee8cc1Swenshuai.xi 
4344*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "[%s][%d]\n", __FUNCTION__, __LINE__);
4345*53ee8cc1Swenshuai.xi 
4346*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "u32PNL_MISC = %tx\n", (ptrdiff_t)pPNLResourcePrivate->stdrvPNL._stPnlInitData.u32PNL_MISC);
4347*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "bPanelOn = %x\n", bPanelOn);
4348*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "eLPLL_Type            = %x\n", pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type);
4349*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "_u8MOD_LVDS_Pair_Type = %x\n", pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type);
4350*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "u16OutputCFG0_7       = %x\n", pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG0_7);
4351*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "u16OutputCFG8_15      = %x\n", pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG8_15);
4352*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "u16OutputCFG16_21     = %x\n", pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG16_21);
4353*53ee8cc1Swenshuai.xi 
4354*53ee8cc1Swenshuai.xi     MS_U16 u16PortA = MOD_A_R2BYTE(REG_MOD_A_BK00_18_L);
4355*53ee8cc1Swenshuai.xi     MS_U16 u16PortB = MOD_A_R2BYTE(REG_MOD_A_BK00_19_L);
4356*53ee8cc1Swenshuai.xi 
4357*53ee8cc1Swenshuai.xi     if((u16PortA!=0)||(u16PortB!=0))
4358*53ee8cc1Swenshuai.xi     {
4359*53ee8cc1Swenshuai.xi         MHal_BD_LVDS_Output_Type(pInstance, LVDS_OUTPUT_User);
4360*53ee8cc1Swenshuai.xi     }
4361*53ee8cc1Swenshuai.xi 
4362*53ee8cc1Swenshuai.xi     if(u16PortA!=0)
4363*53ee8cc1Swenshuai.xi         pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG0_7   = MOD_A_R2BYTE(REG_MOD_A_BK00_18_L);
4364*53ee8cc1Swenshuai.xi     if(u16PortB!=0)
4365*53ee8cc1Swenshuai.xi         pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG8_15  = MOD_A_R2BYTE(REG_MOD_A_BK00_19_L);
4366*53ee8cc1Swenshuai.xi 
4367*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "==========================\n\n");
4368*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "u16OutputCFG0_7       = %x\n", pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG0_7);
4369*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "u16OutputCFG8_15      = %x\n", pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG8_15);
4370*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_PANEL_EN, "u16OutputCFG16_21     = %x\n", pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG16_21);
4371*53ee8cc1Swenshuai.xi 
4372*53ee8cc1Swenshuai.xi 
4373*53ee8cc1Swenshuai.xi     if(bPanelOn)
4374*53ee8cc1Swenshuai.xi     {
4375*53ee8cc1Swenshuai.xi         // The order is PanelVCC -> delay pnlGetOnTiming1() -> VOP -> MOD
4376*53ee8cc1Swenshuai.xi         // VOP
4377*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_46_L, 0x4000, HBMASK);
4378*53ee8cc1Swenshuai.xi 
4379*53ee8cc1Swenshuai.xi         // For Napoli compatible
4380*53ee8cc1Swenshuai.xi         // need to wait 1ms to wait LDO stable before MOD power on
4381*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
4382*53ee8cc1Swenshuai.xi 
4383*53ee8cc1Swenshuai.xi         // turn on LPLL
4384*53ee8cc1Swenshuai.xi         MHal_PNL_PowerDownLPLL(pInstance, FALSE);
4385*53ee8cc1Swenshuai.xi 
4386*53ee8cc1Swenshuai.xi         // mod power on
4387*53ee8cc1Swenshuai.xi         MHal_MOD_PowerOn(pInstance
4388*53ee8cc1Swenshuai.xi                         , ENABLE
4389*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type
4390*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type
4391*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG0_7
4392*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG8_15
4393*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG16_21);
4394*53ee8cc1Swenshuai.xi 
4395*53ee8cc1Swenshuai.xi         if(bCalEn)
4396*53ee8cc1Swenshuai.xi         {
4397*53ee8cc1Swenshuai.xi 
4398*53ee8cc1Swenshuai.xi             u8BackUSBPwrStatus = R2BYTEMSK(L_BK_UTMI1(0x04), BIT(7));
4399*53ee8cc1Swenshuai.xi 
4400*53ee8cc1Swenshuai.xi             W2BYTEMSK(L_BK_UTMI1(0x04), 0x00, BIT(7));
4401*53ee8cc1Swenshuai.xi 
4402*53ee8cc1Swenshuai.xi             u8Cab = msModCurrentCalibration(pInstance);
4403*53ee8cc1Swenshuai.xi 
4404*53ee8cc1Swenshuai.xi             W2BYTEMSK(L_BK_UTMI1(0x04), u8BackUSBPwrStatus, BIT(7));
4405*53ee8cc1Swenshuai.xi 
4406*53ee8cc1Swenshuai.xi         }
4407*53ee8cc1Swenshuai.xi         else
4408*53ee8cc1Swenshuai.xi         {
4409*53ee8cc1Swenshuai.xi             if( ( IsVBY1(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type) ) &&
4410*53ee8cc1Swenshuai.xi                 ((pPNLResourcePrivate->stdrvPNL._stPnlInitData.u32PNL_MISC & (MS_U32)E_APIPNL_MISC_SKIP_ICONVALUE) == FALSE))
4411*53ee8cc1Swenshuai.xi             {
4412*53ee8cc1Swenshuai.xi                 HAL_MOD_CAL_DBG(printf("Use RCON value \n", __FUNCTION__, __LINE__));
4413*53ee8cc1Swenshuai.xi                 msSetVBY1RconValue(pInstance);
4414*53ee8cc1Swenshuai.xi             }
4415*53ee8cc1Swenshuai.xi             else
4416*53ee8cc1Swenshuai.xi             {
4417*53ee8cc1Swenshuai.xi                 HAL_MOD_CAL_DBG(printf("User define Swing Value=%u\n", __FUNCTION__, __LINE__, pPNLResourcePrivate->sthalPNL._u16PnlDefault_SwingLevel));
4418*53ee8cc1Swenshuai.xi 
4419*53ee8cc1Swenshuai.xi                 if(!MHal_PNL_MOD_Control_Out_Swing(pInstance, pPNLResourcePrivate->sthalPNL._u16PnlDefault_SwingLevel))
4420*53ee8cc1Swenshuai.xi                     printf(">>Swing Level setting error!!\n");
4421*53ee8cc1Swenshuai.xi             }
4422*53ee8cc1Swenshuai.xi         }
4423*53ee8cc1Swenshuai.xi 
4424*53ee8cc1Swenshuai.xi         if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.bVideo_HW_Training_En)
4425*53ee8cc1Swenshuai.xi             MHal_PNL_VBY1_Hardware_TrainingMode_En(pInstance, TRUE, ENABLE);
4426*53ee8cc1Swenshuai.xi     }
4427*53ee8cc1Swenshuai.xi     else
4428*53ee8cc1Swenshuai.xi     {
4429*53ee8cc1Swenshuai.xi         // The order is LPLL -> MOD -> VOP -> delay for MOD power off -> turn off VCC
4430*53ee8cc1Swenshuai.xi 
4431*53ee8cc1Swenshuai.xi         // LPLL
4432*53ee8cc1Swenshuai.xi         // MHal_PNL_PowerDownLPLL(TRUE); //Remove to keep op vsync if panel off
4433*53ee8cc1Swenshuai.xi 
4434*53ee8cc1Swenshuai.xi         MHal_MOD_PowerOn(pInstance
4435*53ee8cc1Swenshuai.xi                         , DISABLE
4436*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type
4437*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type
4438*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG0_7
4439*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG8_15
4440*53ee8cc1Swenshuai.xi                         , pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG16_21);
4441*53ee8cc1Swenshuai.xi         // VOP
4442*53ee8cc1Swenshuai.xi         if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_LVDS ||
4443*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_DAC_I ||
4444*53ee8cc1Swenshuai.xi             pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_DAC_P)//(bIsLVDS)
4445*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_46_L, 0xFF, LBMASK);
4446*53ee8cc1Swenshuai.xi         else
4447*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_46_L, 0x00, 0xFF);
4448*53ee8cc1Swenshuai.xi     }
4449*53ee8cc1Swenshuai.xi 
4450*53ee8cc1Swenshuai.xi     return E_PNL_OK;
4451*53ee8cc1Swenshuai.xi }
4452*53ee8cc1Swenshuai.xi 
MHal_PNL_SetOutputPattern(void * pInstance,MS_BOOL bEnable,MS_U16 u16Red,MS_U16 u16Green,MS_U16 u16Blue)4453*53ee8cc1Swenshuai.xi void MHal_PNL_SetOutputPattern(void *pInstance, MS_BOOL bEnable, MS_U16 u16Red , MS_U16 u16Green, MS_U16 u16Blue)
4454*53ee8cc1Swenshuai.xi {
4455*53ee8cc1Swenshuai.xi     if (bEnable)
4456*53ee8cc1Swenshuai.xi     {
4457*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_69_L, u16Red , 0x03FF);
4458*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_6A_L, u16Green , 0x03FF);
4459*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_6B_L, u16Blue , 0x03FF);
4460*53ee8cc1Swenshuai.xi         MsOS_DelayTask(10);
4461*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_68_L, BIT(12) , BIT(12));
4462*53ee8cc1Swenshuai.xi     }
4463*53ee8cc1Swenshuai.xi     else
4464*53ee8cc1Swenshuai.xi     {
4465*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_68_L, DISABLE , BIT(12));
4466*53ee8cc1Swenshuai.xi     }
4467*53ee8cc1Swenshuai.xi 
4468*53ee8cc1Swenshuai.xi }
4469*53ee8cc1Swenshuai.xi 
MHal_PNL_Switch_LPLL_SubBank(void * pInstance,MS_U16 u16Bank)4470*53ee8cc1Swenshuai.xi void MHal_PNL_Switch_LPLL_SubBank(void *pInstance, MS_U16 u16Bank)
4471*53ee8cc1Swenshuai.xi {
4472*53ee8cc1Swenshuai.xi     UNUSED(u16Bank);
4473*53ee8cc1Swenshuai.xi }
4474*53ee8cc1Swenshuai.xi 
MHal_PNL_Switch_TCON_SubBank(void * pInstance,MS_U16 u16Bank)4475*53ee8cc1Swenshuai.xi void MHal_PNL_Switch_TCON_SubBank(void *pInstance, MS_U16 u16Bank)
4476*53ee8cc1Swenshuai.xi {
4477*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_BK_TCON(0x00), u16Bank&0xff, 0xFF);
4478*53ee8cc1Swenshuai.xi }
4479*53ee8cc1Swenshuai.xi 
MHal_PNL_Read_TCON_SubBank(void * pInstance)4480*53ee8cc1Swenshuai.xi MS_U16 MHal_PNL_Read_TCON_SubBank(void *pInstance)
4481*53ee8cc1Swenshuai.xi {
4482*53ee8cc1Swenshuai.xi     return (MS_U16)R2BYTEMSK(L_BK_TCON(0x00),0xFF);
4483*53ee8cc1Swenshuai.xi }
4484*53ee8cc1Swenshuai.xi 
MHal_PNL_Is_VBY1_Locked(void * pInstance)4485*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_Is_VBY1_Locked(void *pInstance)
4486*53ee8cc1Swenshuai.xi {
4487*53ee8cc1Swenshuai.xi     if (MOD_A_R2BYTEMSK(REG_MOD_A_BK00_47_L, 0x0300) == 0x00)
4488*53ee8cc1Swenshuai.xi     {
4489*53ee8cc1Swenshuai.xi         return TRUE;
4490*53ee8cc1Swenshuai.xi     }
4491*53ee8cc1Swenshuai.xi     else
4492*53ee8cc1Swenshuai.xi     {
4493*53ee8cc1Swenshuai.xi         return FALSE;
4494*53ee8cc1Swenshuai.xi     }
4495*53ee8cc1Swenshuai.xi }
4496*53ee8cc1Swenshuai.xi 
MHal_PNL_Is_VBY1_LockN_Locked(void * pInstance)4497*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_Is_VBY1_LockN_Locked(void *pInstance)
4498*53ee8cc1Swenshuai.xi {
4499*53ee8cc1Swenshuai.xi     if (MOD_A_R2BYTEMSK(REG_MOD_A_BK00_47_L, 0x0100) == 0x00)
4500*53ee8cc1Swenshuai.xi     {
4501*53ee8cc1Swenshuai.xi         return TRUE;
4502*53ee8cc1Swenshuai.xi     }
4503*53ee8cc1Swenshuai.xi     else
4504*53ee8cc1Swenshuai.xi     {
4505*53ee8cc1Swenshuai.xi         return FALSE;
4506*53ee8cc1Swenshuai.xi     }
4507*53ee8cc1Swenshuai.xi }
4508*53ee8cc1Swenshuai.xi 
MHal_PNL_VBY1_Handshake(void * pInstance)4509*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_VBY1_Handshake(void *pInstance)
4510*53ee8cc1Swenshuai.xi {
4511*53ee8cc1Swenshuai.xi     MS_BOOL bIsLock = FALSE;
4512*53ee8cc1Swenshuai.xi 
4513*53ee8cc1Swenshuai.xi     if (MHal_PNL_Is_VBY1_Locked(pInstance) == FALSE)
4514*53ee8cc1Swenshuai.xi     {
4515*53ee8cc1Swenshuai.xi         MS_U16 u16CheckTimes = 0;
4516*53ee8cc1Swenshuai.xi         //MS_U16 u16DeboundTimes = 0;
4517*53ee8cc1Swenshuai.xi 
4518*53ee8cc1Swenshuai.xi         // need to toggle vby1 packer  process start first
4519*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_62_L, 0x00, BIT(11));
4520*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_62_L, BIT(11), BIT(11));
4521*53ee8cc1Swenshuai.xi 
4522*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_60_L, 0x0F56); // set reg. initial value
4523*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_60_L, 0xD6, 0x00FF); // after power on go to stand-by
4524*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_60_L, 0x96, 0x00FF); // connection is established, go to Acquisition
4525*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_60_L, 0xB6, 0x00FF); // when internal clock is stable, got to CDR training
4526*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_60_L, 0xBE, 0x00FF); // enable encoder for DC blance
4527*53ee8cc1Swenshuai.xi 
4528*53ee8cc1Swenshuai.xi         while(u16CheckTimes < 10)
4529*53ee8cc1Swenshuai.xi         {
4530*53ee8cc1Swenshuai.xi #if 0
4531*53ee8cc1Swenshuai.xi             u16DeboundTimes = 2;
4532*53ee8cc1Swenshuai.xi             while ((!MHal_PNL_Is_VBY1_LockN_Locked()) && (u16DeboundTimes --))
4533*53ee8cc1Swenshuai.xi             {
4534*53ee8cc1Swenshuai.xi                 MsOS_DelayTask(1); // can't remove
4535*53ee8cc1Swenshuai.xi             }
4536*53ee8cc1Swenshuai.xi #endif
4537*53ee8cc1Swenshuai.xi             if(MHal_PNL_Is_VBY1_LockN_Locked(pInstance))
4538*53ee8cc1Swenshuai.xi             {
4539*53ee8cc1Swenshuai.xi                 //-------------------------------------------------------------------
4540*53ee8cc1Swenshuai.xi                 // step1. Toggle clock when training
4541*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_60_L, 0x0FAE);
4542*53ee8cc1Swenshuai.xi                 //--------------------------------------------------------------------
4543*53ee8cc1Swenshuai.xi                 bIsLock = TRUE;
4544*53ee8cc1Swenshuai.xi                 // pass 2 times debound to make sure VBY1 is locked
4545*53ee8cc1Swenshuai.xi                 break;
4546*53ee8cc1Swenshuai.xi             }
4547*53ee8cc1Swenshuai.xi 
4548*53ee8cc1Swenshuai.xi             u16CheckTimes++;
4549*53ee8cc1Swenshuai.xi             MsOS_DelayTaskUs(40);
4550*53ee8cc1Swenshuai.xi         }
4551*53ee8cc1Swenshuai.xi 
4552*53ee8cc1Swenshuai.xi         if(bIsLock)
4553*53ee8cc1Swenshuai.xi             {
4554*53ee8cc1Swenshuai.xi             // step3. Disable HW check when lock done, Enable when loss lock
4555*53ee8cc1Swenshuai.xi             //MOD_W2BYTEMSK(REG_MOD_BK00_33_L, 0x00, BIT15);
4556*53ee8cc1Swenshuai.xi 
4557*53ee8cc1Swenshuai.xi             /// Add the delay to increase time to send
4558*53ee8cc1Swenshuai.xi             //MDrv_TIMER_Delayms(10);
4559*53ee8cc1Swenshuai.xi         }
4560*53ee8cc1Swenshuai.xi     }
4561*53ee8cc1Swenshuai.xi     else
4562*53ee8cc1Swenshuai.xi     {
4563*53ee8cc1Swenshuai.xi         if(MOD_R2BYTEMSK(REG_MOD_BK00_60_L, 0x0FFF) != 0x0FAE)
4564*53ee8cc1Swenshuai.xi         {
4565*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_60_L, 0x0FAE);
4566*53ee8cc1Swenshuai.xi         }
4567*53ee8cc1Swenshuai.xi         bIsLock = TRUE;
4568*53ee8cc1Swenshuai.xi             }
4569*53ee8cc1Swenshuai.xi 
4570*53ee8cc1Swenshuai.xi     return bIsLock;
4571*53ee8cc1Swenshuai.xi }
4572*53ee8cc1Swenshuai.xi 
MHal_PNL_Is_VBY1_OC_Locked(void * pInstance)4573*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_Is_VBY1_OC_Locked(void *pInstance)
4574*53ee8cc1Swenshuai.xi {
4575*53ee8cc1Swenshuai.xi     if (MOD_A_R2BYTEMSK(REG_MOD_A_BK00_47_L, 0x0C00) == 0x00)  // MOD_BK00_56_L[11:10]        for OSD
4576*53ee8cc1Swenshuai.xi             {
4577*53ee8cc1Swenshuai.xi         return TRUE;
4578*53ee8cc1Swenshuai.xi     }
4579*53ee8cc1Swenshuai.xi     else
4580*53ee8cc1Swenshuai.xi     {
4581*53ee8cc1Swenshuai.xi         return FALSE;
4582*53ee8cc1Swenshuai.xi             }
4583*53ee8cc1Swenshuai.xi }
4584*53ee8cc1Swenshuai.xi 
MHal_PNL_Is_VBY1_OC_LockN_Locked(void * pInstance)4585*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_Is_VBY1_OC_LockN_Locked(void *pInstance)
4586*53ee8cc1Swenshuai.xi {
4587*53ee8cc1Swenshuai.xi     if (MOD_A_R2BYTEMSK(REG_MOD_A_BK00_47_L, 0x0400) == 0x00)  // MOD_BK00_56_L[11:10]        for OSD
4588*53ee8cc1Swenshuai.xi             {
4589*53ee8cc1Swenshuai.xi         return TRUE;
4590*53ee8cc1Swenshuai.xi     }
4591*53ee8cc1Swenshuai.xi     else
4592*53ee8cc1Swenshuai.xi     {
4593*53ee8cc1Swenshuai.xi         return FALSE;
4594*53ee8cc1Swenshuai.xi             }
4595*53ee8cc1Swenshuai.xi }
4596*53ee8cc1Swenshuai.xi 
MHal_PNL_VBY1_OC_Handshake(void * pInstance)4597*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_VBY1_OC_Handshake(void *pInstance)
4598*53ee8cc1Swenshuai.xi {
4599*53ee8cc1Swenshuai.xi     MS_BOOL bIsLock = FALSE;
4600*53ee8cc1Swenshuai.xi 
4601*53ee8cc1Swenshuai.xi     if (MHal_PNL_Is_VBY1_OC_Locked(pInstance) == FALSE)
4602*53ee8cc1Swenshuai.xi     {
4603*53ee8cc1Swenshuai.xi         MS_U16 u16CheckTimes = 0;
4604*53ee8cc1Swenshuai.xi //        MS_U16 u16DeboundTimes = 0;
4605*53ee8cc1Swenshuai.xi 
4606*53ee8cc1Swenshuai.xi         // need to toggle vby1 packer  process start first
4607*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_66_L, 0x00, BIT(11));
4608*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_66_L, BIT(11), BIT(11));
4609*53ee8cc1Swenshuai.xi 
4610*53ee8cc1Swenshuai.xi 
4611*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_64_L, 0x0F56); // set reg. initial value
4612*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_64_L, 0xD6, 0x00FF); // after power on go to stand-by
4613*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_64_L, 0x96, 0x00FF); // connection is established, go to Acquisition
4614*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_64_L, 0xB6, 0x00FF); // when internal clock is stable, got to CDR training
4615*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_64_L, 0xBE, 0x00FF); // enable encoder for DC blance
4616*53ee8cc1Swenshuai.xi 
4617*53ee8cc1Swenshuai.xi         while(u16CheckTimes < 10)
4618*53ee8cc1Swenshuai.xi         {
4619*53ee8cc1Swenshuai.xi         #if 0
4620*53ee8cc1Swenshuai.xi             u16DeboundTimes = 2;
4621*53ee8cc1Swenshuai.xi             while ((!MHal_PNL_Is_VBY1_OC_LockN_Locked()) && (u16DeboundTimes --))
4622*53ee8cc1Swenshuai.xi             {
4623*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
4624*53ee8cc1Swenshuai.xi             }
4625*53ee8cc1Swenshuai.xi         #endif
4626*53ee8cc1Swenshuai.xi             if(MHal_PNL_Is_VBY1_OC_LockN_Locked(pInstance))
4627*53ee8cc1Swenshuai.xi             {
4628*53ee8cc1Swenshuai.xi                 //-------------------------------------------------------------------
4629*53ee8cc1Swenshuai.xi                 // step1. Toggle clock when training
4630*53ee8cc1Swenshuai.xi 
4631*53ee8cc1Swenshuai.xi                 MOD_W2BYTE(REG_MOD_BK00_64_L, 0x0FAE);
4632*53ee8cc1Swenshuai.xi                 bIsLock = TRUE;
4633*53ee8cc1Swenshuai.xi                 // pass 2 times debound to make sure VBY1 is locked
4634*53ee8cc1Swenshuai.xi                 break;
4635*53ee8cc1Swenshuai.xi             }
4636*53ee8cc1Swenshuai.xi 
4637*53ee8cc1Swenshuai.xi             u16CheckTimes++;
4638*53ee8cc1Swenshuai.xi             MsOS_DelayTaskUs(40);
4639*53ee8cc1Swenshuai.xi         }
4640*53ee8cc1Swenshuai.xi 
4641*53ee8cc1Swenshuai.xi         if(bIsLock)
4642*53ee8cc1Swenshuai.xi         {
4643*53ee8cc1Swenshuai.xi             // step3. Disable HW check when lock done, Enable when loss lock
4644*53ee8cc1Swenshuai.xi //            MOD_W2BYTEMSK(REG_MOD_BK00_33_L, 0x00, BIT15);
4645*53ee8cc1Swenshuai.xi         }
4646*53ee8cc1Swenshuai.xi     }
4647*53ee8cc1Swenshuai.xi     else
4648*53ee8cc1Swenshuai.xi     {
4649*53ee8cc1Swenshuai.xi         if(MOD_R2BYTEMSK(REG_MOD_BK00_64_L, 0x0FFF) != 0x0FAE)
4650*53ee8cc1Swenshuai.xi         {
4651*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_64_L, 0x0FAE);
4652*53ee8cc1Swenshuai.xi         }
4653*53ee8cc1Swenshuai.xi         bIsLock = TRUE;
4654*53ee8cc1Swenshuai.xi     }
4655*53ee8cc1Swenshuai.xi 
4656*53ee8cc1Swenshuai.xi     return bIsLock;
4657*53ee8cc1Swenshuai.xi }
4658*53ee8cc1Swenshuai.xi 
MHal_PNL_IsYUVOutput(void * pInstance)4659*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_IsYUVOutput(void *pInstance)
4660*53ee8cc1Swenshuai.xi {
4661*53ee8cc1Swenshuai.xi    return FALSE;
4662*53ee8cc1Swenshuai.xi }
4663*53ee8cc1Swenshuai.xi 
MHal_PNL_SetOutputInterlaceTiming(void * pInstance,MS_BOOL bEnable)4664*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_SetOutputInterlaceTiming(void *pInstance, MS_BOOL bEnable)
4665*53ee8cc1Swenshuai.xi {
4666*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4667*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4668*53ee8cc1Swenshuai.xi 
4669*53ee8cc1Swenshuai.xi     if (bEnable == TRUE)
4670*53ee8cc1Swenshuai.xi     {
4671*53ee8cc1Swenshuai.xi         //interlace output vtotal modify
4672*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_21_L, BIT(9), BIT(9));
4673*53ee8cc1Swenshuai.xi 
4674*53ee8cc1Swenshuai.xi         // two different interlace information through channel A reserved bit
4675*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_05_L, BIT(12), BIT(12));
4676*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_51_L, BIT(2), BIT(2));
4677*53ee8cc1Swenshuai.xi         // two different interlace information through channel B reserved bit
4678*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_51_L, BIT(3), BIT(3));
4679*53ee8cc1Swenshuai.xi     }
4680*53ee8cc1Swenshuai.xi     else
4681*53ee8cc1Swenshuai.xi     {
4682*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_21_L  , 0, BIT(9));
4683*53ee8cc1Swenshuai.xi         // two different interlace information through channel A reserved bit
4684*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_05_L, 0x0000, BIT(12));
4685*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_51_L, 0x0000, BIT(2));
4686*53ee8cc1Swenshuai.xi         // two different interlace information through channel B reserved bit
4687*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_51_L, 0x0000, BIT(3));
4688*53ee8cc1Swenshuai.xi     }
4689*53ee8cc1Swenshuai.xi 
4690*53ee8cc1Swenshuai.xi     return TRUE;
4691*53ee8cc1Swenshuai.xi }
4692*53ee8cc1Swenshuai.xi 
MHal_PNL_GetOutputInterlaceTiming(void * pInstance)4693*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_GetOutputInterlaceTiming(void *pInstance)
4694*53ee8cc1Swenshuai.xi {
4695*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4696*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4697*53ee8cc1Swenshuai.xi 
4698*53ee8cc1Swenshuai.xi     MS_BOOL bIsInterlaceOutput = FALSE;
4699*53ee8cc1Swenshuai.xi     //interlace output vtotal modify
4700*53ee8cc1Swenshuai.xi     if (SC_R2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK10_21_L, BIT(9)) == BIT(9))
4701*53ee8cc1Swenshuai.xi     {
4702*53ee8cc1Swenshuai.xi         if (   (MOD_R2BYTEMSK(REG_MOD_BK00_05_L, BIT(12)) == (BIT(12)))
4703*53ee8cc1Swenshuai.xi             || (MOD_R2BYTEMSK(REG_MOD_BK00_51_L, (BIT(2) | BIT(3))) == (BIT(2)|BIT(3))))
4704*53ee8cc1Swenshuai.xi         {
4705*53ee8cc1Swenshuai.xi             bIsInterlaceOutput = TRUE;
4706*53ee8cc1Swenshuai.xi         }
4707*53ee8cc1Swenshuai.xi     }
4708*53ee8cc1Swenshuai.xi     else
4709*53ee8cc1Swenshuai.xi     {
4710*53ee8cc1Swenshuai.xi         bIsInterlaceOutput = FALSE;
4711*53ee8cc1Swenshuai.xi     }
4712*53ee8cc1Swenshuai.xi     return bIsInterlaceOutput;
4713*53ee8cc1Swenshuai.xi }
4714*53ee8cc1Swenshuai.xi 
4715*53ee8cc1Swenshuai.xi ////Ext LPLL setting
_MHal_PNL_Init_ExtLPLL(void * pInstance,PNL_TYPE eLPLL_Type,PNL_MODE eLPLL_Mode,MS_U64 ldHz)4716*53ee8cc1Swenshuai.xi static void _MHal_PNL_Init_ExtLPLL(void *pInstance, PNL_TYPE eLPLL_Type,PNL_MODE eLPLL_Mode,MS_U64 ldHz)
4717*53ee8cc1Swenshuai.xi {
4718*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_LPLL_EXT_TYPE u8SupportedLPLLLIndex = E_PNL_SUPPORTED_LPLL_EXT_MAX;
4719*53ee8cc1Swenshuai.xi 
4720*53ee8cc1Swenshuai.xi     u8SupportedLPLLLIndex = _MHal_PNL_GetSupportedLPLLIndex(pInstance, eLPLL_Type,eLPLL_Mode,ldHz, E_PNL_LPLL_OSD);
4721*53ee8cc1Swenshuai.xi 
4722*53ee8cc1Swenshuai.xi     if (u8SupportedLPLLLIndex == E_PNL_SUPPORTED_LPLL_EXT_MAX)
4723*53ee8cc1Swenshuai.xi     {
4724*53ee8cc1Swenshuai.xi         printf("Not Supported LPLL Type, skip LPLL Init\n");
4725*53ee8cc1Swenshuai.xi         return;
4726*53ee8cc1Swenshuai.xi     }
4727*53ee8cc1Swenshuai.xi 
4728*53ee8cc1Swenshuai.xi     _MHal_PNL_DumpLPLLTable(pInstance, u8SupportedLPLLLIndex, E_PNL_LPLL_OSD);
4729*53ee8cc1Swenshuai.xi }
4730*53ee8cc1Swenshuai.xi 
_MHal_PNL_Get_ExtLPLL_LoopDIV(void * pInstance,MS_U8 u8LPLL_Mode,MS_U8 eLPLL_Type,MS_U64 ldHz)4731*53ee8cc1Swenshuai.xi static MS_U8 _MHal_PNL_Get_ExtLPLL_LoopDIV(void *pInstance, MS_U8 u8LPLL_Mode, MS_U8 eLPLL_Type, MS_U64 ldHz)
4732*53ee8cc1Swenshuai.xi {
4733*53ee8cc1Swenshuai.xi     MS_U16 u16loop_div = 0;
4734*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_LPLL_EXT_TYPE u8SupportedLPLLLIndex = E_PNL_SUPPORTED_LPLL_EXT_MAX;
4735*53ee8cc1Swenshuai.xi     u8SupportedLPLLLIndex = _MHal_PNL_GetSupportedLPLLIndex(pInstance, eLPLL_Type,u8LPLL_Mode,ldHz,E_PNL_LPLL_OSD);
4736*53ee8cc1Swenshuai.xi 
4737*53ee8cc1Swenshuai.xi     if (u8SupportedLPLLLIndex == E_PNL_SUPPORTED_LPLL_EXT_MAX)
4738*53ee8cc1Swenshuai.xi     {
4739*53ee8cc1Swenshuai.xi         u16loop_div = 0 ;
4740*53ee8cc1Swenshuai.xi     }
4741*53ee8cc1Swenshuai.xi     else
4742*53ee8cc1Swenshuai.xi     {
4743*53ee8cc1Swenshuai.xi         u16loop_div = u16EXT_LoopDiv[u8SupportedLPLLLIndex];
4744*53ee8cc1Swenshuai.xi     }
4745*53ee8cc1Swenshuai.xi 
4746*53ee8cc1Swenshuai.xi     u16loop_div *= 2;
4747*53ee8cc1Swenshuai.xi     return u16loop_div;
4748*53ee8cc1Swenshuai.xi }
4749*53ee8cc1Swenshuai.xi 
_MHal_PNL_Get_ExtLPLL_LoopGain(void * pInstance,MS_U8 eLPLL_Mode,MS_U8 eLPLL_Type,MS_U64 ldHz)4750*53ee8cc1Swenshuai.xi static MS_U8 _MHal_PNL_Get_ExtLPLL_LoopGain(void *pInstance, MS_U8 eLPLL_Mode, MS_U8 eLPLL_Type, MS_U64 ldHz)
4751*53ee8cc1Swenshuai.xi {
4752*53ee8cc1Swenshuai.xi     MS_U16 u16loop_gain = 0;
4753*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_LPLL_EXT_TYPE u8SupportedLPLLLIndex = E_PNL_SUPPORTED_LPLL_EXT_MAX;
4754*53ee8cc1Swenshuai.xi     u8SupportedLPLLLIndex = _MHal_PNL_GetSupportedLPLLIndex(pInstance, eLPLL_Type,eLPLL_Mode,ldHz,E_PNL_LPLL_OSD);
4755*53ee8cc1Swenshuai.xi 
4756*53ee8cc1Swenshuai.xi     if (u8SupportedLPLLLIndex == E_PNL_SUPPORTED_LPLL_EXT_MAX)
4757*53ee8cc1Swenshuai.xi     {
4758*53ee8cc1Swenshuai.xi         u16loop_gain = 0 ;
4759*53ee8cc1Swenshuai.xi     }
4760*53ee8cc1Swenshuai.xi     else
4761*53ee8cc1Swenshuai.xi     {
4762*53ee8cc1Swenshuai.xi         u16loop_gain = u16EXT_LoopGain[u8SupportedLPLLLIndex];
4763*53ee8cc1Swenshuai.xi     }
4764*53ee8cc1Swenshuai.xi     return u16loop_gain;
4765*53ee8cc1Swenshuai.xi }
4766*53ee8cc1Swenshuai.xi 
4767*53ee8cc1Swenshuai.xi 
4768*53ee8cc1Swenshuai.xi // Output Dclk
MHal_PNL_CalExtLPLLSETbyDClk(void * pInstance,MS_U8 u8LPLL_Mode,MS_U8 u8LPLL_Type,MS_U64 ldHz)4769*53ee8cc1Swenshuai.xi void MHal_PNL_CalExtLPLLSETbyDClk(void *pInstance, MS_U8 u8LPLL_Mode, MS_U8 u8LPLL_Type, MS_U64 ldHz)
4770*53ee8cc1Swenshuai.xi {
4771*53ee8cc1Swenshuai.xi 
4772*53ee8cc1Swenshuai.xi     MS_U64 u64LdPllSet = 0;
4773*53ee8cc1Swenshuai.xi     MS_U64 u64DclkFactor = 0;
4774*53ee8cc1Swenshuai.xi     MS_U32 u32Div = 0;
4775*53ee8cc1Swenshuai.xi     // loop div and loop gain use default parameters to avoid dclk floating out of range and getting wrong value
4776*53ee8cc1Swenshuai.xi     MS_U32 u32Factor = 10;
4777*53ee8cc1Swenshuai.xi 
4778*53ee8cc1Swenshuai.xi     _MHal_PNL_Init_ExtLPLL(pInstance, u8LPLL_Type, u8LPLL_Mode, ldHz);
4779*53ee8cc1Swenshuai.xi 
4780*53ee8cc1Swenshuai.xi     //the first " *2 " is from  the dual mode
4781*53ee8cc1Swenshuai.xi     u32Div=(MS_U32)(_MHal_PNL_Get_ExtLPLL_LoopDIV(pInstance, u8LPLL_Mode, u8LPLL_Type, ldHz));
4782*53ee8cc1Swenshuai.xi     u64DclkFactor=((MS_U64)LVDS_MPLL_CLOCK_MHZ * (MS_U64)524288 * (MS_U64)_MHal_PNL_Get_ExtLPLL_LoopGain(pInstance, u8LPLL_Mode, u8LPLL_Type, ldHz));
4783*53ee8cc1Swenshuai.xi     u64LdPllSet = (u64DclkFactor * 1000000 * u32Factor *2) + ((ldHz * u32Div) >> 1);
4784*53ee8cc1Swenshuai.xi     do_div(u64LdPllSet, ldHz);
4785*53ee8cc1Swenshuai.xi     do_div(u64LdPllSet, u32Div);
4786*53ee8cc1Swenshuai.xi 
4787*53ee8cc1Swenshuai.xi     W4BYTE(L_BK_LPLL(0x48), (MS_U32)u64LdPllSet);
4788*53ee8cc1Swenshuai.xi     //printf("MHal_PNL_CalExtLPLLSETbyDClk u32KHz = %u, u32LpllSet = %x\n", ldHz, (MS_U32)u64LdPllSet);
4789*53ee8cc1Swenshuai.xi 
4790*53ee8cc1Swenshuai.xi }
4791*53ee8cc1Swenshuai.xi 
MHal_PNL_SetOSDCOutputType(void * pInstance,PNL_TYPE eLPLL_Type,E_PNL_OSDC_OUTPUT_FORMAT eOC_OutputFormat)4792*53ee8cc1Swenshuai.xi void MHal_PNL_SetOSDCOutputType(void *pInstance, PNL_TYPE eLPLL_Type, E_PNL_OSDC_OUTPUT_FORMAT eOC_OutputFormat)
4793*53ee8cc1Swenshuai.xi {
4794*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
4795*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
4796*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
4797*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
4798*53ee8cc1Swenshuai.xi 
4799*53ee8cc1Swenshuai.xi     PNL_TYPE eVideo_LPLL_Type = pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type;
4800*53ee8cc1Swenshuai.xi 
4801*53ee8cc1Swenshuai.xi     //load clk table: CLKGEN0SettingTBL / CLKGEN2SettingTBL
4802*53ee8cc1Swenshuai.xi     // in Maserati : the OSD path just in VBY1
4803*53ee8cc1Swenshuai.xi     if(( E_PNL_LPLL_VBY1_10BIT_4LANE == eLPLL_Type ) ||
4804*53ee8cc1Swenshuai.xi        ( E_PNL_LPLL_VBY1_8BIT_4LANE  == eLPLL_Type ) ||
4805*53ee8cc1Swenshuai.xi        ( E_PNL_LPLL_VBY1_10BIT_2LANE == eLPLL_Type ) ||
4806*53ee8cc1Swenshuai.xi        ( E_PNL_LPLL_VBY1_8BIT_2LANE  == eLPLL_Type ))
4807*53ee8cc1Swenshuai.xi     {
4808*53ee8cc1Swenshuai.xi         E_PNL_SUPPORTED_CLK_TYPE eCLKType= _MHal_Transfer_PanelType_To_CLKType_OSD(eLPLL_Type, 0, 0);
4809*53ee8cc1Swenshuai.xi         _MHal_PNL_DumpOSDClkTable(eCLKType);
4810*53ee8cc1Swenshuai.xi     }
4811*53ee8cc1Swenshuai.xi 
4812*53ee8cc1Swenshuai.xi     // VBy1 co-registers
4813*53ee8cc1Swenshuai.xi     if(  IsVBY1(eLPLL_Type) )
4814*53ee8cc1Swenshuai.xi     {
4815*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_2E_L, BIT(10), BIT(10)); //[10]enable osd lvds path
4816*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_00_L, BIT(0), BIT(0)); //sw reset
4817*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x0000, BIT(14));
4818*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_51_L, 0x0000, (BIT(2)|BIT(3)|BIT(4)) );
4819*53ee8cc1Swenshuai.xi 
4820*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_77_L, BIT(0), BIT(0)); //[0]sw_rst
4821*53ee8cc1Swenshuai.xi 
4822*53ee8cc1Swenshuai.xi         // swith osd lpllset source
4823*53ee8cc1Swenshuai.xi         // 0: osd with video lpllset
4824*53ee8cc1Swenshuai.xi         // 1: osd with osd lpllset
4825*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, BIT(10), BIT(10));
4826*53ee8cc1Swenshuai.xi 
4827*53ee8cc1Swenshuai.xi         // DIG clk en(OSD)
4828*53ee8cc1Swenshuai.xi         // reg.6F [3:0]: reg_ckg_mod_sr_rclk_osd
4829*53ee8cc1Swenshuai.xi         // reg.6F [7:4]: reg_ckg_mod_sr_rclk_pre_osd
4830*53ee8cc1Swenshuai.xi         // reg.6F [11:8]: reg_ckg_mod_sr_rclk_final_osd
4831*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_6F_L, 0x0444, 0x0FFF);
4832*53ee8cc1Swenshuai.xi 
4833*53ee8cc1Swenshuai.xi         //-------------------------------------
4834*53ee8cc1Swenshuai.xi         //## pe
4835*53ee8cc1Swenshuai.xi //        MOD_A_W2BYTE(REG_MOD_A_BK00_30_L, 0x3fff);
4836*53ee8cc1Swenshuai.xi //        MOD_W2BYTE(REG_MOD_BK00_23_L, 0x7000);
4837*53ee8cc1Swenshuai.xi //        MOD_W2BYTE(REG_MOD_BK00_24_L, 0x7fff);
4838*53ee8cc1Swenshuai.xi //        MOD_W2BYTE(REG_MOD_BK00_25_L, 0x003f);
4839*53ee8cc1Swenshuai.xi 
4840*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_5A_L, 0x8f3f); //[15]all dk scr[13:8]aln_de_cnt [7:0] aln_pix_cnt
4841*53ee8cc1Swenshuai.xi 
4842*53ee8cc1Swenshuai.xi         // maserati only
4843*53ee8cc1Swenshuai.xi         // HW force setting free swap in OSD
4844*53ee8cc1Swenshuai.xi         // in case of 8v4o: 0 1 2 3 8 9 A B ( video ) OSD0 OSD1 OSD2 OSD3 (OSD)
4845*53ee8cc1Swenshuai.xi         // in case of 4v2o: 0 1 x x 8 9 x x ( video ) OSD0 OSD1 x    x    (OSD)
4846*53ee8cc1Swenshuai.xi         // so 4v2o: need to add free swap setting ( 0x5410 0xffff ) to put video lane together
4847*53ee8cc1Swenshuai.xi         // 4v2o: 0 1 8 9 x x x x ( video ) OSD0 OSD1 x    x    (OSD)
4848*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_7C_L, BIT(0), BIT(0));
4849*53ee8cc1Swenshuai.xi 
4850*53ee8cc1Swenshuai.xi     }
4851*53ee8cc1Swenshuai.xi 
4852*53ee8cc1Swenshuai.xi     if( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_4LANE)
4853*53ee8cc1Swenshuai.xi     {
4854*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, BIT(13),BIT(13));
4855*53ee8cc1Swenshuai.xi 
4856*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0055); //[7:0]reg_output_conf[27:16]
4857*53ee8cc1Swenshuai.xi 
4858*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_2E_L, 0x0000, BIT(10)); //[10]enable osd lvds path
4859*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_00_L, BIT(0), BIT(0)); //sw reset
4860*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x0000, BIT(14));
4861*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_51_L, 0x0000, (BIT(2)|BIT(3)|BIT(4)) );
4862*53ee8cc1Swenshuai.xi 
4863*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, BIT(13),BIT(13));
4864*53ee8cc1Swenshuai.xi 
4865*53ee8cc1Swenshuai.xi         //MOD_W2BYTE(REG_MOD_BK00_71_L, 0xffff);  //can not find in Manhattan register table
4866*53ee8cc1Swenshuai.xi 
4867*53ee8cc1Swenshuai.xi         //[13]reg_seri_auto_fix_osd : enable osd serializer auto fix read/write point mis-balance
4868*53ee8cc1Swenshuai.xi         //[14]reg_seri_osd_mod:for OSD, switch chanel 8~13 as OSD path
4869*53ee8cc1Swenshuai.xi         //[15]reg_dbg_status_switch:switch debug information(reg_dbg_status_sel/reg_dbg_status) between Video/OSD path     0: Video       1: OSD
4870*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_76_L, (BIT(14)|BIT(13)) , (BIT(15)|BIT(14)|BIT(13)) );
4871*53ee8cc1Swenshuai.xi 
4872*53ee8cc1Swenshuai.xi         //[0]reg_seri_enable:enable serializer function
4873*53ee8cc1Swenshuai.xi         //[1]reg_seri_auto_fix:enable serializer auto fix read/write point mis-balance
4874*53ee8cc1Swenshuai.xi         //[2]reg_fix_cnt_clr
4875*53ee8cc1Swenshuai.xi         //[3]reg_dbg_status_sel:select debug status, read status from reg_dbg_status[15:0] 0: auto fix cnt         1: point diff value
4876*53ee8cc1Swenshuai.xi         //[15..8]reg_tester_pix_ext: test pixel extension for 16bit serializer
4877*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_78_L, 0x0003 , 0xFF0F);
4878*53ee8cc1Swenshuai.xi 
4879*53ee8cc1Swenshuai.xi         MOD_W2BYTE(REG_MOD_BK00_5A_L, 0x8f3f);
4880*53ee8cc1Swenshuai.xi         //-------------------------------------
4881*53ee8cc1Swenshuai.xi         //## icon (Swing)
4882*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_34_L, 0x7f7f);
4883*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_35_L, 0x7f7f);
4884*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_36_L, 0x0000);
4885*53ee8cc1Swenshuai.xi 
4886*53ee8cc1Swenshuai.xi         // vby1 osd 4 lane
4887*53ee8cc1Swenshuai.xi         //[15]proc_st[13:12]byte_mode 4 byte mode[6]2ch_vby1_osd[9]swap
4888*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_5B_L, 0xa260 , 0xFFE0);
4889*53ee8cc1Swenshuai.xi     }
4890*53ee8cc1Swenshuai.xi     else if( eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_2LANE)
4891*53ee8cc1Swenshuai.xi     {
4892*53ee8cc1Swenshuai.xi         MOD_A_W2BYTEMSK(REG_MOD_A_BK00_10_L, BIT(13),BIT(13));
4893*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, 0x0005);
4894*53ee8cc1Swenshuai.xi 
4895*53ee8cc1Swenshuai.xi         //-------------------------------------
4896*53ee8cc1Swenshuai.xi         //## icon (Swing)
4897*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_34_L, 0x7f7f);
4898*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_35_L, 0x0000);
4899*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_36_L, 0x0000);
4900*53ee8cc1Swenshuai.xi 
4901*53ee8cc1Swenshuai.xi         //vby1 osd 2 lane
4902*53ee8cc1Swenshuai.xi         //[15]proc_st[13:12]byte_mode 4 byte mode[6]2ch_vby1_osd[9]swap
4903*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_5B_L, 0xa240 , 0xFFE0);
4904*53ee8cc1Swenshuai.xi     }
4905*53ee8cc1Swenshuai.xi 
4906*53ee8cc1Swenshuai.xi     // Control VBY1 output format and bit orders
4907*53ee8cc1Swenshuai.xi     switch(eOC_OutputFormat)
4908*53ee8cc1Swenshuai.xi     {
4909*53ee8cc1Swenshuai.xi         case E_PNL_OSDC_OUTPUT_FORMAT_VBY1_ARGB1:
4910*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_64_L, 0x0000, BIT(10));
4911*53ee8cc1Swenshuai.xi             break;
4912*53ee8cc1Swenshuai.xi 
4913*53ee8cc1Swenshuai.xi         case E_PNL_OSDC_OUTPUT_FORMAT_VBY1_ARGB2:
4914*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_64_L, BIT(10), BIT(10));
4915*53ee8cc1Swenshuai.xi             break;
4916*53ee8cc1Swenshuai.xi 
4917*53ee8cc1Swenshuai.xi         default:
4918*53ee8cc1Swenshuai.xi             printf("OSDC output format uses default value\n");
4919*53ee8cc1Swenshuai.xi             MOD_W2BYTEMSK(REG_MOD_BK00_64_L, 0x0000, BIT(10));
4920*53ee8cc1Swenshuai.xi             break;
4921*53ee8cc1Swenshuai.xi     }
4922*53ee8cc1Swenshuai.xi 
4923*53ee8cc1Swenshuai.xi     //maserati : force set VBY1 OSD default free swap
4924*53ee8cc1Swenshuai.xi     if( (IsVBY1(eLPLL_Type)) && ( APIPNL_OUTPUT_CHANNEL_ORDER_DEFAULT == pPNLResourcePrivate->stdrvPNL._stPnlInitData.u8OutputOrderType ) )
4925*53ee8cc1Swenshuai.xi     {
4926*53ee8cc1Swenshuai.xi         if(( E_PNL_LPLL_VBY1_10BIT_8LANE == eVideo_LPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_8LANE == eVideo_LPLL_Type ))
4927*53ee8cc1Swenshuai.xi         {
4928*53ee8cc1Swenshuai.xi             if(( E_PNL_LPLL_VBY1_10BIT_4LANE == eLPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_4LANE  == eLPLL_Type ))
4929*53ee8cc1Swenshuai.xi             {
4930*53ee8cc1Swenshuai.xi                 // 8v4o
4931*53ee8cc1Swenshuai.xi                 MHal_Output_Channel_Order(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0x7632,0xBA98,0xFFFF);
4932*53ee8cc1Swenshuai.xi                 _MHal_PNL_Set_Clk(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0x7632,0xBA98,0xFFFF);
4933*53ee8cc1Swenshuai.xi             }
4934*53ee8cc1Swenshuai.xi             else if(( E_PNL_LPLL_VBY1_10BIT_2LANE == eLPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_2LANE  == eLPLL_Type ))
4935*53ee8cc1Swenshuai.xi             {
4936*53ee8cc1Swenshuai.xi                 // 8v2o
4937*53ee8cc1Swenshuai.xi                 MHal_Output_Channel_Order(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0x7632,0xFF98,0xFFFF);
4938*53ee8cc1Swenshuai.xi                 _MHal_PNL_Set_Clk(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0x7632,0xFF98,0xFFFF);
4939*53ee8cc1Swenshuai.xi             }
4940*53ee8cc1Swenshuai.xi         }
4941*53ee8cc1Swenshuai.xi         else if(( E_PNL_LPLL_VBY1_10BIT_4LANE == eVideo_LPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_4LANE == eVideo_LPLL_Type ))
4942*53ee8cc1Swenshuai.xi         {
4943*53ee8cc1Swenshuai.xi             if(( E_PNL_LPLL_VBY1_10BIT_4LANE == eLPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_4LANE  == eLPLL_Type ))
4944*53ee8cc1Swenshuai.xi             {
4945*53ee8cc1Swenshuai.xi                 // 4v4o
4946*53ee8cc1Swenshuai.xi                 MHal_Output_Channel_Order(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0xFFFF,0xBA98,0xFFFF);
4947*53ee8cc1Swenshuai.xi                 _MHal_PNL_Set_Clk(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0xFFFF,0xBA98,0xFFFF);
4948*53ee8cc1Swenshuai.xi             }
4949*53ee8cc1Swenshuai.xi             else if(( E_PNL_LPLL_VBY1_10BIT_2LANE == eLPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_2LANE  == eLPLL_Type ))
4950*53ee8cc1Swenshuai.xi             {
4951*53ee8cc1Swenshuai.xi                 // 4v2o
4952*53ee8cc1Swenshuai.xi                 MHal_Output_Channel_Order(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0xFFFF,0xFF98,0xFFFF);
4953*53ee8cc1Swenshuai.xi                 _MHal_PNL_Set_Clk(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0x5410,0xFFFF,0xFF98,0xFFFF);
4954*53ee8cc1Swenshuai.xi             }
4955*53ee8cc1Swenshuai.xi         }
4956*53ee8cc1Swenshuai.xi         else if(( E_PNL_LPLL_VBY1_10BIT_2LANE == eLPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_2LANE  == eLPLL_Type ))
4957*53ee8cc1Swenshuai.xi         {
4958*53ee8cc1Swenshuai.xi             if(( E_PNL_LPLL_VBY1_10BIT_4LANE == eLPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_4LANE  == eLPLL_Type ))
4959*53ee8cc1Swenshuai.xi             {
4960*53ee8cc1Swenshuai.xi                 // 2v4o
4961*53ee8cc1Swenshuai.xi                 MHal_Output_Channel_Order(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0xFF10,0xFFFF,0xBA98,0xFFFF);
4962*53ee8cc1Swenshuai.xi                 _MHal_PNL_Set_Clk(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0xFF10,0xFFFF,0xBA98,0xFFFF);
4963*53ee8cc1Swenshuai.xi             }
4964*53ee8cc1Swenshuai.xi             else if(( E_PNL_LPLL_VBY1_10BIT_2LANE == eLPLL_Type ) || ( E_PNL_LPLL_VBY1_8BIT_2LANE  == eLPLL_Type ))
4965*53ee8cc1Swenshuai.xi             {
4966*53ee8cc1Swenshuai.xi                 // 2v2o
4967*53ee8cc1Swenshuai.xi                 MHal_Output_Channel_Order(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0xFF10,0xFFFF,0xFF98,0xFFFF);
4968*53ee8cc1Swenshuai.xi                 _MHal_PNL_Set_Clk(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0xFF10,0xFFFF,0xFF98,0xFFFF);
4969*53ee8cc1Swenshuai.xi             }
4970*53ee8cc1Swenshuai.xi         }
4971*53ee8cc1Swenshuai.xi         else
4972*53ee8cc1Swenshuai.xi         {
4973*53ee8cc1Swenshuai.xi             // error
4974*53ee8cc1Swenshuai.xi             MHal_Output_Channel_Order(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0xFFFF,0xFFFF,0xFFFF,0xFFFF);
4975*53ee8cc1Swenshuai.xi             _MHal_PNL_Set_Clk(pInstance,APIPNL_OUTPUT_CHANNEL_ORDER_USER,0xFFFF,0xFFFF,0xFFFF,0xFFFF);
4976*53ee8cc1Swenshuai.xi         }
4977*53ee8cc1Swenshuai.xi     }
4978*53ee8cc1Swenshuai.xi }
4979*53ee8cc1Swenshuai.xi 
MHal_PNL_SetOSDSSC(void * pInstance,MS_U16 u16Fmodulation,MS_U16 u16Rdeviation,MS_BOOL bEnable)4980*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_SetOSDSSC(void *pInstance, MS_U16 u16Fmodulation, MS_U16 u16Rdeviation, MS_BOOL bEnable)
4981*53ee8cc1Swenshuai.xi {
4982*53ee8cc1Swenshuai.xi     MS_U16 u16Span;
4983*53ee8cc1Swenshuai.xi     MS_U16 u16Step;
4984*53ee8cc1Swenshuai.xi     MS_U32 u32PLL_SET;/// = MDrv_Read3Byte(L_BK_LPLL(0x0F));
4985*53ee8cc1Swenshuai.xi 
4986*53ee8cc1Swenshuai.xi     MHal_PNL_Switch_LPLL_SubBank(pInstance, 0x00);
4987*53ee8cc1Swenshuai.xi     u32PLL_SET = R4BYTE(L_BK_LPLL(0x48));
4988*53ee8cc1Swenshuai.xi     // Set SPAN
4989*53ee8cc1Swenshuai.xi     if(u16Fmodulation < 200 || u16Fmodulation > 400)
4990*53ee8cc1Swenshuai.xi         u16Fmodulation = 300;
4991*53ee8cc1Swenshuai.xi     u16Span =( ( (((MS_U32)LVDS_MPLL_CLOCK_MHZ*LVDS_SPAN_FACTOR ) / (u16Fmodulation) ) * 10000) / ((MS_U32)u32PLL_SET) ) ;
4992*53ee8cc1Swenshuai.xi 
4993*53ee8cc1Swenshuai.xi     // Set STEP
4994*53ee8cc1Swenshuai.xi     if(u16Rdeviation > 300)
4995*53ee8cc1Swenshuai.xi         u16Rdeviation = 300;
4996*53ee8cc1Swenshuai.xi     u16Step = ((MS_U32)u32PLL_SET*u16Rdeviation) / ((MS_U32)u16Span*10000);
4997*53ee8cc1Swenshuai.xi 
4998*53ee8cc1Swenshuai.xi     W2BYTE(L_BK_LPLL(0x4E), u16Step & 0x0FFF);// LPLL_STEP
4999*53ee8cc1Swenshuai.xi     W2BYTE(L_BK_LPLL(0x4F), u16Span & 0x3FFF);// LPLL_SPAN
5000*53ee8cc1Swenshuai.xi     W2BYTEMSK((L_BK_LPLL(0x4E)), (bEnable << 15), BIT(15)); // Enable ssc
5001*53ee8cc1Swenshuai.xi 
5002*53ee8cc1Swenshuai.xi 
5003*53ee8cc1Swenshuai.xi     return TRUE;
5004*53ee8cc1Swenshuai.xi }
5005*53ee8cc1Swenshuai.xi 
MHal_PNL_SetOSDSSC_En(void * pInstance,MS_BOOL bEnable)5006*53ee8cc1Swenshuai.xi void MHal_PNL_SetOSDSSC_En(void *pInstance, MS_BOOL bEnable)
5007*53ee8cc1Swenshuai.xi {
5008*53ee8cc1Swenshuai.xi     //printf("bEnable = %d\n", bEnable);
5009*53ee8cc1Swenshuai.xi     MHal_PNL_Switch_LPLL_SubBank(pInstance, 0x00);
5010*53ee8cc1Swenshuai.xi     W2BYTEMSK((L_BK_LPLL(0x4E)), (bEnable << 15), BIT(15)); // Enable ssc
5011*53ee8cc1Swenshuai.xi }
5012*53ee8cc1Swenshuai.xi 
MHal_PNL_Set_T3D_Setting(void * pInstance)5013*53ee8cc1Swenshuai.xi void MHal_PNL_Set_T3D_Setting(void *pInstance)
5014*53ee8cc1Swenshuai.xi {
5015*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
5016*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
5017*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
5018*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
5019*53ee8cc1Swenshuai.xi 
5020*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK63_55_L, pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Width, 0x1FFF);//pixel width
5021*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK63_66_L, pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Height, 0x1FFF);//reg_col_height
5022*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK63_51_L, pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Width, 0x1FFF);//reg_ln_width
5023*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK63_52_L, pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Height, 0x1FFF);//reg_col_height
5024*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK62_61_L, pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Width, 0x3FFF);//reg_ln_width
5025*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK62_62_L, pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Height, 0x1FFF);//reg_col_height
5026*53ee8cc1Swenshuai.xi 
5027*53ee8cc1Swenshuai.xi     //per designer, should always enable t3d, since it will affect osd/video's pipeline
5028*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK63_61_L, BIT(0), BIT(0));//Enable Depth Render, for osd pipe line adjustment
5029*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK62_08_L, BIT(4), BIT(4));//mtv bypass mode
5030*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK63_57_L,(BIT(0)|BIT(1)),(BIT(0)|BIT(1)));//T3D fix subde enable, fix for T3D/PIP conflict issue (bit 0)     Bug Fix miu eco (bit 1)
5031*53ee8cc1Swenshuai.xi 
5032*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK62_63_L, 0x00, BIT(0)); // default disable T3D SRAM
5033*53ee8cc1Swenshuai.xi }
5034*53ee8cc1Swenshuai.xi 
MHal_PNL_Set_Device_Bank_Offset(void * pInstance)5035*53ee8cc1Swenshuai.xi void MHal_PNL_Set_Device_Bank_Offset(void *pInstance)
5036*53ee8cc1Swenshuai.xi {
5037*53ee8cc1Swenshuai.xi     UNUSED(pInstance);
5038*53ee8cc1Swenshuai.xi     memset(u32PNL_XCDeviceBankOffset, 0, sizeof(MS_U32)*E_PNL_DEVICE_ID_NUM);
5039*53ee8cc1Swenshuai.xi     u32PNL_XCDeviceBankOffset[E_PNL_DEVICE_ID_0] = E_HALPNL_DEVICE0_XC_BANK_OFFSET; // Set SC0 reg bank offset
5040*53ee8cc1Swenshuai.xi     u32PNL_XCDeviceBankOffset[E_PNL_DEVICE_ID_1] = E_HALPNL_DEVICE1_XC_BANK_OFFSET; // Set SC2 reg bank offset
5041*53ee8cc1Swenshuai.xi }
5042*53ee8cc1Swenshuai.xi 
MHal_PNL_Init(void * pInstance)5043*53ee8cc1Swenshuai.xi void MHal_PNL_Init(void *pInstance)
5044*53ee8cc1Swenshuai.xi {
5045*53ee8cc1Swenshuai.xi     // Do nothing
5046*53ee8cc1Swenshuai.xi     //UNUSED(pInstance);
5047*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
5048*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
5049*53ee8cc1Swenshuai.xi 
5050*53ee8cc1Swenshuai.xi     // STGEN reset
5051*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(pPNLInstancePrivate->u32DeviceID, REG_SC_BK68_50_L, BIT(3), BIT(3));
5052*53ee8cc1Swenshuai.xi }
5053*53ee8cc1Swenshuai.xi 
MHal_PNL_Bringup(void * pInstance)5054*53ee8cc1Swenshuai.xi void MHal_PNL_Bringup(void *pInstance)
5055*53ee8cc1Swenshuai.xi {
5056*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
5057*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
5058*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
5059*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
5060*53ee8cc1Swenshuai.xi 
5061*53ee8cc1Swenshuai.xi     ///patch for bring up
5062*53ee8cc1Swenshuai.xi     if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_LVDS)
5063*53ee8cc1Swenshuai.xi     {
5064*53ee8cc1Swenshuai.xi     }
5065*53ee8cc1Swenshuai.xi     else if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_LPLL_VBY1_10BIT_8LANE)
5066*53ee8cc1Swenshuai.xi     {
5067*53ee8cc1Swenshuai.xi     }
5068*53ee8cc1Swenshuai.xi 
5069*53ee8cc1Swenshuai.xi }
5070*53ee8cc1Swenshuai.xi 
MHal_PNL_GetPanelVStart(void)5071*53ee8cc1Swenshuai.xi MS_U16 MHal_PNL_GetPanelVStart(void)
5072*53ee8cc1Swenshuai.xi {
5073*53ee8cc1Swenshuai.xi     return 8;
5074*53ee8cc1Swenshuai.xi }
5075*53ee8cc1Swenshuai.xi 
MHal_PNL_Check_VBY1_Handshake_Status(void * pInstance)5076*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_Check_VBY1_Handshake_Status(void *pInstance)
5077*53ee8cc1Swenshuai.xi {
5078*53ee8cc1Swenshuai.xi     if(MOD_R2BYTEMSK(REG_MOD_BK00_60_L, 0x0FFF) != 0xFAE)
5079*53ee8cc1Swenshuai.xi     {
5080*53ee8cc1Swenshuai.xi         //printf("VBY1 handshake return because the reg value is 0x%u, not 0xFAE.\n", MOD_R2BYTEMSK(REG_MOD_BK00_60_L, 0x0FFF));
5081*53ee8cc1Swenshuai.xi         return FALSE;
5082*53ee8cc1Swenshuai.xi     }
5083*53ee8cc1Swenshuai.xi     else
5084*53ee8cc1Swenshuai.xi     {
5085*53ee8cc1Swenshuai.xi         //printf("VBY handshake check success.\n");
5086*53ee8cc1Swenshuai.xi         return TRUE;
5087*53ee8cc1Swenshuai.xi     }
5088*53ee8cc1Swenshuai.xi }
5089*53ee8cc1Swenshuai.xi 
MHal_PNL_ChannelFIFOPointerADjust(void * pInstance)5090*53ee8cc1Swenshuai.xi void MHal_PNL_ChannelFIFOPointerADjust(void *pInstance)
5091*53ee8cc1Swenshuai.xi {
5092*53ee8cc1Swenshuai.xi //do not support in Maserati
5093*53ee8cc1Swenshuai.xi }
5094*53ee8cc1Swenshuai.xi 
MHal_PNL_VBY1_Hardware_TrainingMode_En(void * pInstance,MS_BOOL bIsVideoMode,MS_BOOL bEnable)5095*53ee8cc1Swenshuai.xi void MHal_PNL_VBY1_Hardware_TrainingMode_En(void *pInstance, MS_BOOL bIsVideoMode ,MS_BOOL bEnable)
5096*53ee8cc1Swenshuai.xi {
5097*53ee8cc1Swenshuai.xi     if(bIsVideoMode)
5098*53ee8cc1Swenshuai.xi     {
5099*53ee8cc1Swenshuai.xi         if(bEnable)
5100*53ee8cc1Swenshuai.xi         {
5101*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_60_L, 0x0AAE);
5102*53ee8cc1Swenshuai.xi         }
5103*53ee8cc1Swenshuai.xi         else
5104*53ee8cc1Swenshuai.xi         {
5105*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_60_L, 0x0AA6);
5106*53ee8cc1Swenshuai.xi         }
5107*53ee8cc1Swenshuai.xi     }
5108*53ee8cc1Swenshuai.xi     else
5109*53ee8cc1Swenshuai.xi     {
5110*53ee8cc1Swenshuai.xi         if(bEnable)
5111*53ee8cc1Swenshuai.xi         {
5112*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_59_L, 0x0AAE);
5113*53ee8cc1Swenshuai.xi         }
5114*53ee8cc1Swenshuai.xi         else
5115*53ee8cc1Swenshuai.xi         {
5116*53ee8cc1Swenshuai.xi             MOD_W2BYTE(REG_MOD_BK00_59_L, 0x0AA6);
5117*53ee8cc1Swenshuai.xi         }
5118*53ee8cc1Swenshuai.xi     }
5119*53ee8cc1Swenshuai.xi }
5120*53ee8cc1Swenshuai.xi 
MHal_PNL_VBY1_IsSupport_Hardware_TrainingMode(void * pInstance)5121*53ee8cc1Swenshuai.xi MS_BOOL MHal_PNL_VBY1_IsSupport_Hardware_TrainingMode(void *pInstance)
5122*53ee8cc1Swenshuai.xi {
5123*53ee8cc1Swenshuai.xi     #ifdef SUPPORT_VBY1_HWTRAINING_MODE
5124*53ee8cc1Swenshuai.xi         return TRUE;
5125*53ee8cc1Swenshuai.xi     #else
5126*53ee8cc1Swenshuai.xi         return FALSE;
5127*53ee8cc1Swenshuai.xi     #endif
5128*53ee8cc1Swenshuai.xi }
5129*53ee8cc1Swenshuai.xi 
MHal_PNL_TCON_Patch(void)5130*53ee8cc1Swenshuai.xi void MHal_PNL_TCON_Patch(void)
5131*53ee8cc1Swenshuai.xi {
5132*53ee8cc1Swenshuai.xi     // MOD sw reset
5133*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_00_L, 0x0000, BIT(0)); //sw reset
5134*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_2E_L, 0x0000, BIT(10)); //[10]enable osd lvds path
5135*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_54_L, 0x0000, BIT(14));
5136*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_51_L, 0x0000, (BIT(2)|BIT(3)|BIT(4)) );
5137*53ee8cc1Swenshuai.xi 
5138*53ee8cc1Swenshuai.xi     MOD_W2BYTEMSK(REG_MOD_BK00_00_L, BIT(0), BIT(0)); //sw reset
5139*53ee8cc1Swenshuai.xi 
5140*53ee8cc1Swenshuai.xi 
5141*53ee8cc1Swenshuai.xi     // Setting TCON signal through MOD PAD
5142*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x1818);
5143*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x9818);
5144*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x0000);
5145*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x1928);
5146*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x9928);
5147*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x0000);
5148*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x1a38);
5149*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x9a38);
5150*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x0000);
5151*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x1b78);
5152*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x9b78);
5153*53ee8cc1Swenshuai.xi     MOD_A_W2BYTE(REG_MOD_A_BK00_6A_L,0x0000);
5154*53ee8cc1Swenshuai.xi }
5155*53ee8cc1Swenshuai.xi 
_Hal_MOD_External_eFuse(void)5156*53ee8cc1Swenshuai.xi static MS_BOOL _Hal_MOD_External_eFuse(void)
5157*53ee8cc1Swenshuai.xi {
5158*53ee8cc1Swenshuai.xi #ifdef MOD_EFUSE_IN_MBOOT
5159*53ee8cc1Swenshuai.xi     return TRUE;
5160*53ee8cc1Swenshuai.xi #else
5161*53ee8cc1Swenshuai.xi     return FALSE;
5162*53ee8cc1Swenshuai.xi #endif
5163*53ee8cc1Swenshuai.xi }
5164*53ee8cc1Swenshuai.xi 
_Hal_MOD_VB1_CH_SWICH(PNL_TYPE eLPLL_Type_Ext)5165*53ee8cc1Swenshuai.xi static void _Hal_MOD_VB1_CH_SWICH(PNL_TYPE eLPLL_Type_Ext)
5166*53ee8cc1Swenshuai.xi {
5167*53ee8cc1Swenshuai.xi     //SC4 7C[11]:reg_vby1_4ch / enable 4ch vx1mode
5168*53ee8cc1Swenshuai.xi     //SC4 7C[12]:reg_vby1_16v4o / vby1 16 vedio 4 osd mode
5169*53ee8cc1Swenshuai.xi     //SC4 7C[13]:reg_vby1_8v4o_mode / vby1 8 vedio 4 osd mode
5170*53ee8cc1Swenshuai.xi     //SC4 7C[14]:reg_vby1_8ch / enable 8ch vx1mode
5171*53ee8cc1Swenshuai.xi     //SC4 7C[15]:reg_vby1_16ch / enable 16ch vx1mode
5172*53ee8cc1Swenshuai.xi     if( (eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_4LANE) || (eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_4LANE) )
5173*53ee8cc1Swenshuai.xi     {// 4 lane
5174*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_7C_L, BIT(11), 0xF800);
5175*53ee8cc1Swenshuai.xi     }
5176*53ee8cc1Swenshuai.xi     else if( (eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE) || (eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE) )
5177*53ee8cc1Swenshuai.xi     {// 8 lane
5178*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_7C_L, BIT(14), 0xF800);
5179*53ee8cc1Swenshuai.xi     }
5180*53ee8cc1Swenshuai.xi     else if( (eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE) || (eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE) )
5181*53ee8cc1Swenshuai.xi     {// 16 lane
5182*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_7C_L, BIT(15), 0xF800);
5183*53ee8cc1Swenshuai.xi     }
5184*53ee8cc1Swenshuai.xi     else
5185*53ee8cc1Swenshuai.xi     {// 2 lane
5186*53ee8cc1Swenshuai.xi         MOD_W2BYTEMSK(REG_MOD_BK00_7C_L, 0x0000, 0xF800);
5187*53ee8cc1Swenshuai.xi     }
5188*53ee8cc1Swenshuai.xi }
5189*53ee8cc1Swenshuai.xi 
_Hal_MOD_Refine_ICON(MS_U16 u16ICON)5190*53ee8cc1Swenshuai.xi static MS_U16 _Hal_MOD_Refine_ICON(MS_U16 u16ICON)
5191*53ee8cc1Swenshuai.xi {
5192*53ee8cc1Swenshuai.xi     MS_U16 u16ICON_L = (u16ICON & 0x00FF);
5193*53ee8cc1Swenshuai.xi     MS_U16 u16ICON_H = ((u16ICON & 0xFF00)>>8);
5194*53ee8cc1Swenshuai.xi     MS_U16 u16Result = 0;
5195*53ee8cc1Swenshuai.xi     if( (u16ICON_L > MOD_LVDS_ICON_HIGH_LIMIT) || (u16ICON_L < MOD_LVDS_ICON_LOW_LIMIT) )
5196*53ee8cc1Swenshuai.xi     {
5197*53ee8cc1Swenshuai.xi         u16Result = MOD_LVDS_ICON_DEFAULT;
5198*53ee8cc1Swenshuai.xi     }
5199*53ee8cc1Swenshuai.xi     else
5200*53ee8cc1Swenshuai.xi     {
5201*53ee8cc1Swenshuai.xi         u16Result = u16ICON_L;
5202*53ee8cc1Swenshuai.xi     }
5203*53ee8cc1Swenshuai.xi 
5204*53ee8cc1Swenshuai.xi     if( (u16ICON_H > MOD_LVDS_ICON_HIGH_LIMIT) || (u16ICON_H < MOD_LVDS_ICON_LOW_LIMIT) )
5205*53ee8cc1Swenshuai.xi     {
5206*53ee8cc1Swenshuai.xi         u16Result |= (MOD_LVDS_ICON_DEFAULT<<8);
5207*53ee8cc1Swenshuai.xi     }
5208*53ee8cc1Swenshuai.xi     else
5209*53ee8cc1Swenshuai.xi     {
5210*53ee8cc1Swenshuai.xi         u16Result |= (u16ICON_H<<8);
5211*53ee8cc1Swenshuai.xi     }
5212*53ee8cc1Swenshuai.xi     return u16Result;
5213*53ee8cc1Swenshuai.xi }
5214*53ee8cc1Swenshuai.xi 
_MHal_PNL_DumpVideoClkTable(MS_U8 u8CLKTblIndex)5215*53ee8cc1Swenshuai.xi static void _MHal_PNL_DumpVideoClkTable(MS_U8 u8CLKTblIndex)
5216*53ee8cc1Swenshuai.xi {
5217*53ee8cc1Swenshuai.xi     // step1. load CLK GEN0 table
5218*53ee8cc1Swenshuai.xi     if (u8CLKTblIndex == E_PNL_SUPPORTED_CLK_MAX)
5219*53ee8cc1Swenshuai.xi     {
5220*53ee8cc1Swenshuai.xi         printf("[%s,%5d] Unspported LPLL Type, skip LPLL setting\n",__FUNCTION__,__LINE__);
5221*53ee8cc1Swenshuai.xi         return;
5222*53ee8cc1Swenshuai.xi     }
5223*53ee8cc1Swenshuai.xi 
5224*53ee8cc1Swenshuai.xi     int indexCounter = 0;
5225*53ee8cc1Swenshuai.xi 
5226*53ee8cc1Swenshuai.xi     for(indexCounter = 0 ; indexCounter<CLK_GEN0_REG_VIDEO_NUM; indexCounter++)
5227*53ee8cc1Swenshuai.xi     {
5228*53ee8cc1Swenshuai.xi         if (CLKGEN0SettingTBL_Video[u8CLKTblIndex][indexCounter].address == 0xFF) //delay in micro second
5229*53ee8cc1Swenshuai.xi         {
5230*53ee8cc1Swenshuai.xi             MsOS_DelayTaskUs(CLKGEN0SettingTBL_Video[u8CLKTblIndex][indexCounter].value);
5231*53ee8cc1Swenshuai.xi             continue; // step forward to next register setting.
5232*53ee8cc1Swenshuai.xi         }
5233*53ee8cc1Swenshuai.xi 
5234*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(CLKGEN0SettingTBL_Video[u8CLKTblIndex][indexCounter].address),
5235*53ee8cc1Swenshuai.xi                   CLKGEN0SettingTBL_Video[u8CLKTblIndex][indexCounter].value,
5236*53ee8cc1Swenshuai.xi                   CLKGEN0SettingTBL_Video[u8CLKTblIndex][indexCounter].mask);
5237*53ee8cc1Swenshuai.xi     }
5238*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]LPLLTblIndex=%u\n", __FUNCTION__, __LINE__, u8CLKTblIndex);
5239*53ee8cc1Swenshuai.xi 
5240*53ee8cc1Swenshuai.xi     // step2. load CLK GEN2 table
5241*53ee8cc1Swenshuai.xi     if (u8CLKTblIndex == E_PNL_SUPPORTED_CLK_MAX)
5242*53ee8cc1Swenshuai.xi     {
5243*53ee8cc1Swenshuai.xi         printf("[%s,%5d] Unspported LPLL Type, skip LPLL setting\n",__FUNCTION__,__LINE__);
5244*53ee8cc1Swenshuai.xi         return;
5245*53ee8cc1Swenshuai.xi     }
5246*53ee8cc1Swenshuai.xi 
5247*53ee8cc1Swenshuai.xi     for(indexCounter = 0 ; indexCounter<CLK_GEN2_REG_VIDEO_NUM; indexCounter++)
5248*53ee8cc1Swenshuai.xi     {
5249*53ee8cc1Swenshuai.xi         if (CLKGEN2SettingTBL_Video[u8CLKTblIndex][indexCounter].address == 0xFF) //delay in micro second
5250*53ee8cc1Swenshuai.xi         {
5251*53ee8cc1Swenshuai.xi             MsOS_DelayTaskUs(CLKGEN2SettingTBL_Video[u8CLKTblIndex][indexCounter].value);
5252*53ee8cc1Swenshuai.xi             continue; // step forward to next register setting.
5253*53ee8cc1Swenshuai.xi         }
5254*53ee8cc1Swenshuai.xi 
5255*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN2(CLKGEN2SettingTBL_Video[u8CLKTblIndex][indexCounter].address),
5256*53ee8cc1Swenshuai.xi                   CLKGEN2SettingTBL_Video[u8CLKTblIndex][indexCounter].value,
5257*53ee8cc1Swenshuai.xi                   CLKGEN2SettingTBL_Video[u8CLKTblIndex][indexCounter].mask);
5258*53ee8cc1Swenshuai.xi     }
5259*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]LPLLTblIndex=%u\n", __FUNCTION__, __LINE__, u8CLKTblIndex);
5260*53ee8cc1Swenshuai.xi }
5261*53ee8cc1Swenshuai.xi 
_MHal_PNL_DumpOSDClkTable(MS_U8 u8CLKTblIndex)5262*53ee8cc1Swenshuai.xi static void _MHal_PNL_DumpOSDClkTable(MS_U8 u8CLKTblIndex)
5263*53ee8cc1Swenshuai.xi {
5264*53ee8cc1Swenshuai.xi     // step1. load CLK GEN0 table
5265*53ee8cc1Swenshuai.xi     if (u8CLKTblIndex == E_PNL_SUPPORTED_CLK_MAX)
5266*53ee8cc1Swenshuai.xi     {
5267*53ee8cc1Swenshuai.xi         printf("[%s,%5d] Unspported LPLL Type, skip LPLL setting\n",__FUNCTION__,__LINE__);
5268*53ee8cc1Swenshuai.xi         return;
5269*53ee8cc1Swenshuai.xi     }
5270*53ee8cc1Swenshuai.xi 
5271*53ee8cc1Swenshuai.xi     int indexCounter = 0;
5272*53ee8cc1Swenshuai.xi 
5273*53ee8cc1Swenshuai.xi     for(indexCounter = 0 ; indexCounter<CLK_GEN0_REG_OSD_NUM; indexCounter++)
5274*53ee8cc1Swenshuai.xi     {
5275*53ee8cc1Swenshuai.xi         if (CLKGEN0SettingTBL_OSD[u8CLKTblIndex][indexCounter].address == 0xFF) //delay in micro second
5276*53ee8cc1Swenshuai.xi         {
5277*53ee8cc1Swenshuai.xi             MsOS_DelayTaskUs(CLKGEN0SettingTBL_OSD[u8CLKTblIndex][indexCounter].value);
5278*53ee8cc1Swenshuai.xi             continue; // step forward to next register setting.
5279*53ee8cc1Swenshuai.xi         }
5280*53ee8cc1Swenshuai.xi 
5281*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(CLKGEN0SettingTBL_OSD[u8CLKTblIndex][indexCounter].address),
5282*53ee8cc1Swenshuai.xi                   CLKGEN0SettingTBL_OSD[u8CLKTblIndex][indexCounter].value,
5283*53ee8cc1Swenshuai.xi                   CLKGEN0SettingTBL_OSD[u8CLKTblIndex][indexCounter].mask);
5284*53ee8cc1Swenshuai.xi     }
5285*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]LPLLTblIndex=%u\n", __FUNCTION__, __LINE__, u8CLKTblIndex);
5286*53ee8cc1Swenshuai.xi 
5287*53ee8cc1Swenshuai.xi     // step2. load CLK GEN2 table
5288*53ee8cc1Swenshuai.xi     if (u8CLKTblIndex == E_PNL_SUPPORTED_CLK_MAX)
5289*53ee8cc1Swenshuai.xi     {
5290*53ee8cc1Swenshuai.xi         printf("[%s,%5d] Unspported LPLL Type, skip LPLL setting\n",__FUNCTION__,__LINE__);
5291*53ee8cc1Swenshuai.xi         return;
5292*53ee8cc1Swenshuai.xi     }
5293*53ee8cc1Swenshuai.xi 
5294*53ee8cc1Swenshuai.xi     for(indexCounter = 0 ; indexCounter<CLK_GEN2_REG_OSD_NUM; indexCounter++)
5295*53ee8cc1Swenshuai.xi     {
5296*53ee8cc1Swenshuai.xi         if (CLKGEN2SettingTBL_OSD[u8CLKTblIndex][indexCounter].address == 0xFF) //delay in micro second
5297*53ee8cc1Swenshuai.xi         {
5298*53ee8cc1Swenshuai.xi             MsOS_DelayTaskUs(CLKGEN2SettingTBL_OSD[u8CLKTblIndex][indexCounter].value);
5299*53ee8cc1Swenshuai.xi             continue; // step forward to next register setting.
5300*53ee8cc1Swenshuai.xi         }
5301*53ee8cc1Swenshuai.xi 
5302*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN2(CLKGEN2SettingTBL_OSD[u8CLKTblIndex][indexCounter].address),
5303*53ee8cc1Swenshuai.xi                   CLKGEN2SettingTBL_OSD[u8CLKTblIndex][indexCounter].value,
5304*53ee8cc1Swenshuai.xi                   CLKGEN2SettingTBL_OSD[u8CLKTblIndex][indexCounter].mask);
5305*53ee8cc1Swenshuai.xi     }
5306*53ee8cc1Swenshuai.xi     PNL_DBG(PNL_DBGLEVEL_INIT, "[%s][%d]LPLLTblIndex=%u\n", __FUNCTION__, __LINE__, u8CLKTblIndex);
5307*53ee8cc1Swenshuai.xi }
5308*53ee8cc1Swenshuai.xi 
_MHal_Transfer_PanelType_To_CLKType(PNL_TYPE eLPLL_Type,PNL_MODE eLPLL_Mode)5309*53ee8cc1Swenshuai.xi static E_PNL_SUPPORTED_CLK_TYPE _MHal_Transfer_PanelType_To_CLKType(PNL_TYPE eLPLL_Type, PNL_MODE eLPLL_Mode)
5310*53ee8cc1Swenshuai.xi {
5311*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_TYPE eCLKTypeResult = E_PNL_SUPPORTED_CLK_TTL;
5312*53ee8cc1Swenshuai.xi 
5313*53ee8cc1Swenshuai.xi     switch(eLPLL_Type)
5314*53ee8cc1Swenshuai.xi     {
5315*53ee8cc1Swenshuai.xi         case E_PNL_TYPE_TTL:
5316*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_TTL;
5317*53ee8cc1Swenshuai.xi         break;
5318*53ee8cc1Swenshuai.xi 
5319*53ee8cc1Swenshuai.xi         case E_PNL_TYPE_LVDS:
5320*53ee8cc1Swenshuai.xi             if(eLPLL_Mode == E_PNL_MODE_SINGLE)
5321*53ee8cc1Swenshuai.xi                 eCLKTypeResult = E_PNL_SUPPORTED_CLK_LVDS_1CH;
5322*53ee8cc1Swenshuai.xi             else
5323*53ee8cc1Swenshuai.xi                 eCLKTypeResult = E_PNL_SUPPORTED_CLK_LVDS_2CH;
5324*53ee8cc1Swenshuai.xi         break;
5325*53ee8cc1Swenshuai.xi 
5326*53ee8cc1Swenshuai.xi         case E_PNL_TYPE_HS_LVDS:
5327*53ee8cc1Swenshuai.xi             if(eLPLL_Mode == E_PNL_MODE_SINGLE)
5328*53ee8cc1Swenshuai.xi                 eCLKTypeResult = E_PNL_SUPPORTED_CLK_HS_LVDS_1CH;
5329*53ee8cc1Swenshuai.xi             else
5330*53ee8cc1Swenshuai.xi                 eCLKTypeResult = E_PNL_SUPPORTED_CLK_HS_LVDS_2CH;
5331*53ee8cc1Swenshuai.xi         break;
5332*53ee8cc1Swenshuai.xi 
5333*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_10BIT_16LANE:
5334*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_16CH_10BIT;
5335*53ee8cc1Swenshuai.xi         break;
5336*53ee8cc1Swenshuai.xi 
5337*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_8BIT_16LANE:
5338*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_16CH_8BIT;
5339*53ee8cc1Swenshuai.xi         break;
5340*53ee8cc1Swenshuai.xi 
5341*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_10BIT_8LANE:
5342*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_8CH_10BIT;
5343*53ee8cc1Swenshuai.xi         break;
5344*53ee8cc1Swenshuai.xi 
5345*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_8BIT_8LANE:
5346*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_8CH_8BIT;
5347*53ee8cc1Swenshuai.xi         break;
5348*53ee8cc1Swenshuai.xi 
5349*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_10BIT_4LANE:
5350*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_4CH_10BIT;
5351*53ee8cc1Swenshuai.xi         break;
5352*53ee8cc1Swenshuai.xi 
5353*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_8BIT_4LANE:
5354*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_4CH_8BIT;
5355*53ee8cc1Swenshuai.xi         break;
5356*53ee8cc1Swenshuai.xi 
5357*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_10BIT_2LANE:
5358*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_2CH_10BIT;
5359*53ee8cc1Swenshuai.xi         break;
5360*53ee8cc1Swenshuai.xi 
5361*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_8BIT_2LANE:
5362*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_2CH_8BIT;
5363*53ee8cc1Swenshuai.xi         break;
5364*53ee8cc1Swenshuai.xi 
5365*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_10BIT_1LANE:
5366*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_1CH_10BIT;
5367*53ee8cc1Swenshuai.xi         break;
5368*53ee8cc1Swenshuai.xi 
5369*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_8BIT_1LANE:
5370*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_1CH_8BIT;
5371*53ee8cc1Swenshuai.xi         break;
5372*53ee8cc1Swenshuai.xi 
5373*53ee8cc1Swenshuai.xi         default:
5374*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_TTL;
5375*53ee8cc1Swenshuai.xi         break;
5376*53ee8cc1Swenshuai.xi     }
5377*53ee8cc1Swenshuai.xi     return eCLKTypeResult;
5378*53ee8cc1Swenshuai.xi }
5379*53ee8cc1Swenshuai.xi 
_MHal_Transfer_PanelType_To_CLKType_OSD(PNL_TYPE eLPLL_OSD_Type,PNL_TYPE eLPLL_Video_Type,PNL_MODE eLPLL_Mode)5380*53ee8cc1Swenshuai.xi static E_PNL_SUPPORTED_CLK_TYPE _MHal_Transfer_PanelType_To_CLKType_OSD(PNL_TYPE eLPLL_OSD_Type,PNL_TYPE eLPLL_Video_Type,PNL_MODE eLPLL_Mode)
5381*53ee8cc1Swenshuai.xi {
5382*53ee8cc1Swenshuai.xi     E_PNL_SUPPORTED_CLK_TYPE eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_8V4O_10BIT;
5383*53ee8cc1Swenshuai.xi 
5384*53ee8cc1Swenshuai.xi     switch(eLPLL_OSD_Type)
5385*53ee8cc1Swenshuai.xi     {
5386*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_10BIT_4LANE:
5387*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_8V4O_10BIT;
5388*53ee8cc1Swenshuai.xi         break;
5389*53ee8cc1Swenshuai.xi 
5390*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_8BIT_4LANE:
5391*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_8V4O_8BIT;
5392*53ee8cc1Swenshuai.xi         break;
5393*53ee8cc1Swenshuai.xi 
5394*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_10BIT_2LANE:
5395*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_4V2O_10BIT;
5396*53ee8cc1Swenshuai.xi         break;
5397*53ee8cc1Swenshuai.xi 
5398*53ee8cc1Swenshuai.xi         case E_PNL_LPLL_VBY1_8BIT_2LANE:
5399*53ee8cc1Swenshuai.xi             eCLKTypeResult = E_PNL_SUPPORTED_CLK_VBY1_4V2O_8BIT;
5400*53ee8cc1Swenshuai.xi         break;
5401*53ee8cc1Swenshuai.xi 
5402*53ee8cc1Swenshuai.xi         default:
5403*53ee8cc1Swenshuai.xi             eCLKTypeResult = _MHal_Transfer_PanelType_To_CLKType(eLPLL_Video_Type, eLPLL_Mode);
5404*53ee8cc1Swenshuai.xi         break;
5405*53ee8cc1Swenshuai.xi     }
5406*53ee8cc1Swenshuai.xi     return eCLKTypeResult;
5407*53ee8cc1Swenshuai.xi }
5408*53ee8cc1Swenshuai.xi 
5409*53ee8cc1Swenshuai.xi #define HALFLINE_PIXEL_ALIGN 16
5410*53ee8cc1Swenshuai.xi 
_MHal_PNL_Init_MFT(void * pInstance,PNL_InitData * pstPanelInitData)5411*53ee8cc1Swenshuai.xi static void _MHal_PNL_Init_MFT(void *pInstance, PNL_InitData *pstPanelInitData)
5412*53ee8cc1Swenshuai.xi {
5413*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
5414*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
5415*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
5416*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
5417*53ee8cc1Swenshuai.xi 
5418*53ee8cc1Swenshuai.xi     MS_BOOL bMFTenable = TRUE;
5419*53ee8cc1Swenshuai.xi     MS_U16 u16halfline_pixel = 0;   //Half line pixel number of active
5420*53ee8cc1Swenshuai.xi 
5421*53ee8cc1Swenshuai.xi     if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE) || (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE) )
5422*53ee8cc1Swenshuai.xi     {
5423*53ee8cc1Swenshuai.xi         if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1))
5424*53ee8cc1Swenshuai.xi         {
5425*53ee8cc1Swenshuai.xi             // vby1 16 lane 4 division, open
5426*53ee8cc1Swenshuai.xi             bMFTenable = TRUE;
5427*53ee8cc1Swenshuai.xi         }
5428*53ee8cc1Swenshuai.xi         else
5429*53ee8cc1Swenshuai.xi         {
5430*53ee8cc1Swenshuai.xi             // vby1 16 lane 2 division, close
5431*53ee8cc1Swenshuai.xi             bMFTenable = FALSE;
5432*53ee8cc1Swenshuai.xi         }
5433*53ee8cc1Swenshuai.xi     }
5434*53ee8cc1Swenshuai.xi     else if( (IsVBY1(pstPanelInitData->eLPLL_Type_Ext)) &&
5435*53ee8cc1Swenshuai.xi              (pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1)) )
5436*53ee8cc1Swenshuai.xi     {
5437*53ee8cc1Swenshuai.xi         // vby1 1 lane / 2 lane / 4 lane / 8 lane 2 Divisoin, close
5438*53ee8cc1Swenshuai.xi         bMFTenable = FALSE;
5439*53ee8cc1Swenshuai.xi     }
5440*53ee8cc1Swenshuai.xi     else
5441*53ee8cc1Swenshuai.xi     {
5442*53ee8cc1Swenshuai.xi         // case1. single LVDS : 4P->1P, so open
5443*53ee8cc1Swenshuai.xi         // case2. vby1 1/4/8 division: format be changed, so need to open MFT
5444*53ee8cc1Swenshuai.xi         // case3. dual LVDS / TCON : 4P->1P, so open
5445*53ee8cc1Swenshuai.xi         bMFTenable = TRUE;
5446*53ee8cc1Swenshuai.xi     }
5447*53ee8cc1Swenshuai.xi 
5448*53ee8cc1Swenshuai.xi     if(bMFTenable)
5449*53ee8cc1Swenshuai.xi     {
5450*53ee8cc1Swenshuai.xi         // MFT setting
5451*53ee8cc1Swenshuai.xi         // MFT reg00[11:0] reg_halfline: Half line pixel number of active(from 0)
5452*53ee8cc1Swenshuai.xi         // 1/2/4 division: hde/4 - 1
5453*53ee8cc1Swenshuai.xi         // 8 division: hde/8 -1
5454*53ee8cc1Swenshuai.xi 
5455*53ee8cc1Swenshuai.xi         ///Maserati is 4P mode and the half line pixel align is 16
5456*53ee8cc1Swenshuai.xi         if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Width % HALFLINE_PIXEL_ALIGN)
5457*53ee8cc1Swenshuai.xi         {
5458*53ee8cc1Swenshuai.xi             u16halfline_pixel = ((pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Width + (HALFLINE_PIXEL_ALIGN-1))/HALFLINE_PIXEL_ALIGN * HALFLINE_PIXEL_ALIGN)/4 -1;
5459*53ee8cc1Swenshuai.xi         }
5460*53ee8cc1Swenshuai.xi         else
5461*53ee8cc1Swenshuai.xi             u16halfline_pixel = pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16Width/4 -1;
5462*53ee8cc1Swenshuai.xi 
5463*53ee8cc1Swenshuai.xi         if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)||
5464*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE )||
5465*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)||
5466*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE )||
5467*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_4LANE)||
5468*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_4LANE ))
5469*53ee8cc1Swenshuai.xi         {// 4k2k
5470*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MFT_00_L, u16halfline_pixel, 0x0FFF);   // half_line = hde/4-1 = 3840 / 4 - 1 = 959
5471*53ee8cc1Swenshuai.xi         }
5472*53ee8cc1Swenshuai.xi         else
5473*53ee8cc1Swenshuai.xi         {// fullHD
5474*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MFT_00_L, u16halfline_pixel, 0x0FFF);   // half_line = hde/16-1 = 1920 / 16 - 1 = 479
5475*53ee8cc1Swenshuai.xi         }
5476*53ee8cc1Swenshuai.xi 
5477*53ee8cc1Swenshuai.xi         // MFT reg01[4] reg_1ch_lvds: 1ch lvds mux
5478*53ee8cc1Swenshuai.xi         if( ((pstPanelInitData->eLPLL_Type == E_PNL_TYPE_LVDS)&&(pstPanelInitData->eLPLL_Mode==E_PNL_MODE_SINGLE)) ||
5479*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type == E_PNL_TYPE_TTL) ||
5480*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_1LANE) ||
5481*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_1LANE))
5482*53ee8cc1Swenshuai.xi         {
5483*53ee8cc1Swenshuai.xi             // single LVDS / TTL / vby1 1lane is one ch, so open
5484*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MFT_01_L, BIT(4), BIT(4));
5485*53ee8cc1Swenshuai.xi         }
5486*53ee8cc1Swenshuai.xi         else
5487*53ee8cc1Swenshuai.xi         {
5488*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MFT_01_L, 0x0000, BIT(4));
5489*53ee8cc1Swenshuai.xi         }
5490*53ee8cc1Swenshuai.xi 
5491*53ee8cc1Swenshuai.xi         // MFT reg01[3..0] reg_dout_sel: Data output select
5492*53ee8cc1Swenshuai.xi         if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)||
5493*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE )||
5494*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)||
5495*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE )||
5496*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_4LANE)||
5497*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_4LANE ) )
5498*53ee8cc1Swenshuai.xi         {
5499*53ee8cc1Swenshuai.xi             // 4p -> 4p, so close
5500*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MFT_01_L, 0x0000, BIT(0));
5501*53ee8cc1Swenshuai.xi         }
5502*53ee8cc1Swenshuai.xi         else
5503*53ee8cc1Swenshuai.xi         {
5504*53ee8cc1Swenshuai.xi             //case1. 4p->2p, so open
5505*53ee8cc1Swenshuai.xi             //case2. 4p->1p, so open
5506*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MFT_01_L, BIT(0), BIT(0));
5507*53ee8cc1Swenshuai.xi         }
5508*53ee8cc1Swenshuai.xi 
5509*53ee8cc1Swenshuai.xi         // MFT reg03[15..14] reg_mode: mode of pixel sequence, 0:LR2OE, 1:LR2LRGB, 2:OE2LR
5510*53ee8cc1Swenshuai.xi         // if 4 division, then MFT reg03[15:14]=2'b10, other default=2'b00
5511*53ee8cc1Swenshuai.xi 
5512*53ee8cc1Swenshuai.xi         // MFT reg03[11] reg_2ch_lvds: 2ch lvds mux
5513*53ee8cc1Swenshuai.xi         if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)||
5514*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE )||
5515*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)||
5516*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE )||
5517*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_4LANE)||
5518*53ee8cc1Swenshuai.xi             (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_4LANE ) )
5519*53ee8cc1Swenshuai.xi         {
5520*53ee8cc1Swenshuai.xi             // 4p -> 4p, so close
5521*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MFT_03_L, 0x0000, BIT(11));
5522*53ee8cc1Swenshuai.xi         }
5523*53ee8cc1Swenshuai.xi         else
5524*53ee8cc1Swenshuai.xi         {
5525*53ee8cc1Swenshuai.xi             //case1. 4p->2p, so open
5526*53ee8cc1Swenshuai.xi             //case2. 4p->1p, so open
5527*53ee8cc1Swenshuai.xi             if( ((pstPanelInitData->eLPLL_Type == E_PNL_TYPE_LVDS)&&(pstPanelInitData->eLPLL_Mode==E_PNL_MODE_SINGLE)) ||
5528*53ee8cc1Swenshuai.xi                 (pstPanelInitData->eLPLL_Type == E_PNL_TYPE_TTL) ||
5529*53ee8cc1Swenshuai.xi                 (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_1LANE) ||
5530*53ee8cc1Swenshuai.xi                 (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_1LANE) )
5531*53ee8cc1Swenshuai.xi             {
5532*53ee8cc1Swenshuai.xi                 // single LVDS / TTL / vby1 1lane is one ch, so close
5533*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_MFT_03_L, 0x00, BIT(11));
5534*53ee8cc1Swenshuai.xi             }
5535*53ee8cc1Swenshuai.xi             else
5536*53ee8cc1Swenshuai.xi             {
5537*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_MFT_03_L, BIT(11), BIT(11));
5538*53ee8cc1Swenshuai.xi             }
5539*53ee8cc1Swenshuai.xi         }
5540*53ee8cc1Swenshuai.xi 
5541*53ee8cc1Swenshuai.xi         if( (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE) || (pstPanelInitData->eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE) )
5542*53ee8cc1Swenshuai.xi         {
5543*53ee8cc1Swenshuai.xi             // 1 / 2 / 8 division
5544*53ee8cc1Swenshuai.xi             if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1))
5545*53ee8cc1Swenshuai.xi             {
5546*53ee8cc1Swenshuai.xi                 // vby1 16 lane 4 division
5547*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_MFT_03_L, BIT(15), (BIT(15) | BIT(14)));
5548*53ee8cc1Swenshuai.xi             }
5549*53ee8cc1Swenshuai.xi         }
5550*53ee8cc1Swenshuai.xi     }
5551*53ee8cc1Swenshuai.xi 
5552*53ee8cc1Swenshuai.xi 
5553*53ee8cc1Swenshuai.xi     // rule: for TCON, if MFT 03[10]=1 , then we have to set MFT 02[11:0]
5554*53ee8cc1Swenshuai.xi     // BUT script:MFT reg02[11..0] reg_vst_dly: control delay value
5555*53ee8cc1Swenshuai.xi     if(pstPanelInitData->eLPLL_Type == E_PNL_TYPE_LVDS)
5556*53ee8cc1Swenshuai.xi     {
5557*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_MFT_02_L, 0x000F, 0x0FFF);
5558*53ee8cc1Swenshuai.xi     }
5559*53ee8cc1Swenshuai.xi 
5560*53ee8cc1Swenshuai.xi     // MFT reg01[15] reg_mft_lb_en: Enable mft for format translate
5561*53ee8cc1Swenshuai.xi     if(bMFTenable)
5562*53ee8cc1Swenshuai.xi     {
5563*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_MFT_01_L, BIT(15), BIT(15));
5564*53ee8cc1Swenshuai.xi     }
5565*53ee8cc1Swenshuai.xi     else
5566*53ee8cc1Swenshuai.xi     {
5567*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_MFT_01_L, 0x0000, BIT(15));
5568*53ee8cc1Swenshuai.xi     }
5569*53ee8cc1Swenshuai.xi 
5570*53ee8cc1Swenshuai.xi }
5571*53ee8cc1Swenshuai.xi 
_MHal_PNL_Get_LaneNum(void * pInstance)5572*53ee8cc1Swenshuai.xi static MS_U8 _MHal_PNL_Get_LaneNum(void *pInstance)
5573*53ee8cc1Swenshuai.xi {
5574*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
5575*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
5576*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
5577*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
5578*53ee8cc1Swenshuai.xi 
5579*53ee8cc1Swenshuai.xi     MS_U8 u8LaneNum = 0;
5580*53ee8cc1Swenshuai.xi     //check lane num
5581*53ee8cc1Swenshuai.xi     if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)
5582*53ee8cc1Swenshuai.xi      ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE))
5583*53ee8cc1Swenshuai.xi     {
5584*53ee8cc1Swenshuai.xi         u8LaneNum = 16;
5585*53ee8cc1Swenshuai.xi     }
5586*53ee8cc1Swenshuai.xi     else if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)
5587*53ee8cc1Swenshuai.xi      ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE))
5588*53ee8cc1Swenshuai.xi     {
5589*53ee8cc1Swenshuai.xi         u8LaneNum = 8;
5590*53ee8cc1Swenshuai.xi     }
5591*53ee8cc1Swenshuai.xi     else if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_4LANE)
5592*53ee8cc1Swenshuai.xi           ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_4LANE))
5593*53ee8cc1Swenshuai.xi     {
5594*53ee8cc1Swenshuai.xi         u8LaneNum = 4;
5595*53ee8cc1Swenshuai.xi     }
5596*53ee8cc1Swenshuai.xi     else if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_2LANE)
5597*53ee8cc1Swenshuai.xi           ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_2LANE))
5598*53ee8cc1Swenshuai.xi     {
5599*53ee8cc1Swenshuai.xi         u8LaneNum = 2;
5600*53ee8cc1Swenshuai.xi     }
5601*53ee8cc1Swenshuai.xi     else if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_1LANE)
5602*53ee8cc1Swenshuai.xi           ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_1LANE))
5603*53ee8cc1Swenshuai.xi     {
5604*53ee8cc1Swenshuai.xi         u8LaneNum = 1;
5605*53ee8cc1Swenshuai.xi     }
5606*53ee8cc1Swenshuai.xi     else
5607*53ee8cc1Swenshuai.xi     {
5608*53ee8cc1Swenshuai.xi         u8LaneNum = 0;
5609*53ee8cc1Swenshuai.xi     }
5610*53ee8cc1Swenshuai.xi     return u8LaneNum;
5611*53ee8cc1Swenshuai.xi }
5612*53ee8cc1Swenshuai.xi 
5613*53ee8cc1Swenshuai.xi 
_MHal_PNL_Auto_Set_Config(void * pInstance,MS_U16 u16OutputOrder0_3,MS_U16 u16OutputOrder4_7,MS_U16 u16OutputOrder8_11,MS_U16 u16OutputOrder12_15)5614*53ee8cc1Swenshuai.xi static void _MHal_PNL_Auto_Set_Config(void *pInstance,
5615*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder0_3,
5616*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder4_7,
5617*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder8_11,
5618*53ee8cc1Swenshuai.xi                                       MS_U16 u16OutputOrder12_15)
5619*53ee8cc1Swenshuai.xi {
5620*53ee8cc1Swenshuai.xi     //attention : This function just support vby1 now.
5621*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
5622*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
5623*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
5624*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
5625*53ee8cc1Swenshuai.xi 
5626*53ee8cc1Swenshuai.xi 
5627*53ee8cc1Swenshuai.xi     MS_U8   u8OutputConfigCount = 0;
5628*53ee8cc1Swenshuai.xi     MS_U16  u16Config =0;
5629*53ee8cc1Swenshuai.xi     MS_U8   u8Count = 0;
5630*53ee8cc1Swenshuai.xi     MS_U8   u8LaneNum = 0;
5631*53ee8cc1Swenshuai.xi     MS_BOOL bSkip = TRUE;
5632*53ee8cc1Swenshuai.xi     MS_U16   u16LaneLimit = 0;
5633*53ee8cc1Swenshuai.xi 
5634*53ee8cc1Swenshuai.xi     //check lane num
5635*53ee8cc1Swenshuai.xi     u8LaneNum = _MHal_PNL_Get_LaneNum(pInstance);
5636*53ee8cc1Swenshuai.xi     if(u8LaneNum!=0)
5637*53ee8cc1Swenshuai.xi     {
5638*53ee8cc1Swenshuai.xi         bSkip = FALSE;
5639*53ee8cc1Swenshuai.xi     }
5640*53ee8cc1Swenshuai.xi     else
5641*53ee8cc1Swenshuai.xi     {
5642*53ee8cc1Swenshuai.xi         bSkip = TRUE;
5643*53ee8cc1Swenshuai.xi 
5644*53ee8cc1Swenshuai.xi         //use default config
5645*53ee8cc1Swenshuai.xi         MHal_Output_LVDS_Pair_Setting(pInstance,
5646*53ee8cc1Swenshuai.xi                                       pPNLResourcePrivate->sthalPNL._u8MOD_LVDS_Pair_Type,
5647*53ee8cc1Swenshuai.xi                                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG0_7,
5648*53ee8cc1Swenshuai.xi                                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG8_15,
5649*53ee8cc1Swenshuai.xi                                       pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16OutputCFG16_21);
5650*53ee8cc1Swenshuai.xi     }
5651*53ee8cc1Swenshuai.xi 
5652*53ee8cc1Swenshuai.xi     //set Lane Limit in 16 lane case
5653*53ee8cc1Swenshuai.xi     if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)
5654*53ee8cc1Swenshuai.xi      ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE))
5655*53ee8cc1Swenshuai.xi     {
5656*53ee8cc1Swenshuai.xi         // 16 lane
5657*53ee8cc1Swenshuai.xi         u16LaneLimit = PINMAPPING_MAX_LANE + 1;
5658*53ee8cc1Swenshuai.xi     }
5659*53ee8cc1Swenshuai.xi     else
5660*53ee8cc1Swenshuai.xi     {
5661*53ee8cc1Swenshuai.xi         // 1 / 2 / 4 / 8 lane
5662*53ee8cc1Swenshuai.xi         u16LaneLimit = PINMAPPING_MAX_LANE;
5663*53ee8cc1Swenshuai.xi 
5664*53ee8cc1Swenshuai.xi     }
5665*53ee8cc1Swenshuai.xi 
5666*53ee8cc1Swenshuai.xi     if(!bSkip)
5667*53ee8cc1Swenshuai.xi     {
5668*53ee8cc1Swenshuai.xi         //set output config
5669*53ee8cc1Swenshuai.xi         u16Config = 0;
5670*53ee8cc1Swenshuai.xi         u8OutputConfigCount = 0;
5671*53ee8cc1Swenshuai.xi         for( u8Count = 0 ; u8Count < LANE_NUM_EACH_PINMAPPING_GROUP1 ; u8Count++ )
5672*53ee8cc1Swenshuai.xi         {
5673*53ee8cc1Swenshuai.xi             if( ( u16OutputOrder0_3 % PINMAPPING_EXP ) < u16LaneLimit)
5674*53ee8cc1Swenshuai.xi             {
5675*53ee8cc1Swenshuai.xi                 u16Config += CONFIG_FOR_VBY1_DATA<<u8OutputConfigCount;
5676*53ee8cc1Swenshuai.xi             }
5677*53ee8cc1Swenshuai.xi             u16OutputOrder0_3 = u16OutputOrder0_3 / PINMAPPING_EXP;
5678*53ee8cc1Swenshuai.xi             u8OutputConfigCount += CONFIG_FOR_VBY1_DATA_BIT_NUM;
5679*53ee8cc1Swenshuai.xi         }
5680*53ee8cc1Swenshuai.xi         for( u8Count = 0 ; u8Count < LANE_NUM_EACH_PINMAPPING_GROUP2 ; u8Count++ )
5681*53ee8cc1Swenshuai.xi         {
5682*53ee8cc1Swenshuai.xi             if( (u16OutputOrder4_7 % PINMAPPING_EXP ) < u16LaneLimit)
5683*53ee8cc1Swenshuai.xi             {
5684*53ee8cc1Swenshuai.xi                 u16Config += CONFIG_FOR_VBY1_DATA<<u8OutputConfigCount;
5685*53ee8cc1Swenshuai.xi             }
5686*53ee8cc1Swenshuai.xi             u16OutputOrder4_7 = u16OutputOrder4_7 / PINMAPPING_EXP;
5687*53ee8cc1Swenshuai.xi             u8OutputConfigCount += CONFIG_FOR_VBY1_DATA_BIT_NUM;
5688*53ee8cc1Swenshuai.xi         }
5689*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_18_L, u16Config);
5690*53ee8cc1Swenshuai.xi 
5691*53ee8cc1Swenshuai.xi         u16Config =0;
5692*53ee8cc1Swenshuai.xi         u8OutputConfigCount = 0;
5693*53ee8cc1Swenshuai.xi         for( u8Count = 0 ; u8Count < LANE_NUM_EACH_PINMAPPING_GROUP3 ; u8Count++ )
5694*53ee8cc1Swenshuai.xi         {
5695*53ee8cc1Swenshuai.xi             if( (u16OutputOrder8_11 % PINMAPPING_EXP ) < u16LaneLimit)
5696*53ee8cc1Swenshuai.xi             {
5697*53ee8cc1Swenshuai.xi                 u16Config += CONFIG_FOR_VBY1_DATA<<u8OutputConfigCount;
5698*53ee8cc1Swenshuai.xi             }
5699*53ee8cc1Swenshuai.xi             u16OutputOrder8_11 = u16OutputOrder8_11 / PINMAPPING_EXP;
5700*53ee8cc1Swenshuai.xi             u8OutputConfigCount += CONFIG_FOR_VBY1_DATA_BIT_NUM;
5701*53ee8cc1Swenshuai.xi         }
5702*53ee8cc1Swenshuai.xi         for( u8Count = 0 ; u8Count < LANE_NUM_EACH_PINMAPPING_GROUP4 ; u8Count++ )
5703*53ee8cc1Swenshuai.xi         {
5704*53ee8cc1Swenshuai.xi             if( (u16OutputOrder12_15 % PINMAPPING_EXP ) < u16LaneLimit)
5705*53ee8cc1Swenshuai.xi             {
5706*53ee8cc1Swenshuai.xi                 u16Config += CONFIG_FOR_VBY1_DATA<<u8OutputConfigCount;
5707*53ee8cc1Swenshuai.xi             }
5708*53ee8cc1Swenshuai.xi             u16OutputOrder12_15 = u16OutputOrder12_15 / PINMAPPING_EXP;
5709*53ee8cc1Swenshuai.xi             u8OutputConfigCount += CONFIG_FOR_VBY1_DATA_BIT_NUM;
5710*53ee8cc1Swenshuai.xi         }
5711*53ee8cc1Swenshuai.xi         MOD_A_W2BYTE(REG_MOD_A_BK00_19_L, u16Config);
5712*53ee8cc1Swenshuai.xi     }
5713*53ee8cc1Swenshuai.xi }
5714*53ee8cc1Swenshuai.xi 
_MHal_PNL_Set_Clk(void * pInstance,MS_U8 Type,MS_U16 u16OutputOrder0_3,MS_U16 u16OutputOrder4_7,MS_U16 u16OutputOrder8_11,MS_U16 u16OutputOrder12_15)5715*53ee8cc1Swenshuai.xi static void _MHal_PNL_Set_Clk(void *pInstance,
5716*53ee8cc1Swenshuai.xi                               MS_U8 Type,
5717*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder0_3,
5718*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder4_7,
5719*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder8_11,
5720*53ee8cc1Swenshuai.xi                               MS_U16 u16OutputOrder12_15)
5721*53ee8cc1Swenshuai.xi {
5722*53ee8cc1Swenshuai.xi     PNL_INSTANCE_PRIVATE *pPNLInstancePrivate = NULL;
5723*53ee8cc1Swenshuai.xi     PNL_RESOURCE_PRIVATE* pPNLResourcePrivate = NULL;
5724*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&pPNLInstancePrivate);
5725*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pPNLResource[PNL_GET_INTERNAL_POOL_ID(pPNLInstancePrivate->u32DeviceID)],(void**)(&pPNLResourcePrivate));
5726*53ee8cc1Swenshuai.xi 
5727*53ee8cc1Swenshuai.xi     if(Type == APIPNL_OUTPUT_CHANNEL_ORDER_USER )
5728*53ee8cc1Swenshuai.xi     {
5729*53ee8cc1Swenshuai.xi         MS_U8 u8Clk = 0;
5730*53ee8cc1Swenshuai.xi         MS_U8   u8LaneNum = 0;
5731*53ee8cc1Swenshuai.xi         MS_BOOL bSkip = TRUE;
5732*53ee8cc1Swenshuai.xi         MS_U8   u8Count = 0;
5733*53ee8cc1Swenshuai.xi         MS_U8   u8Count1 = 0;
5734*53ee8cc1Swenshuai.xi         MS_U8   u8StartLane = 0;
5735*53ee8cc1Swenshuai.xi         MS_U16   u16LaneLimit = 0;
5736*53ee8cc1Swenshuai.xi 
5737*53ee8cc1Swenshuai.xi         //check lane num
5738*53ee8cc1Swenshuai.xi         u8LaneNum = _MHal_PNL_Get_LaneNum(pInstance);
5739*53ee8cc1Swenshuai.xi         if(u8LaneNum!=0)
5740*53ee8cc1Swenshuai.xi         {
5741*53ee8cc1Swenshuai.xi             bSkip = FALSE;
5742*53ee8cc1Swenshuai.xi         }
5743*53ee8cc1Swenshuai.xi         else
5744*53ee8cc1Swenshuai.xi         {
5745*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x1F, 0x1F); //open all clk
5746*53ee8cc1Swenshuai.xi             bSkip = TRUE;
5747*53ee8cc1Swenshuai.xi         }
5748*53ee8cc1Swenshuai.xi 
5749*53ee8cc1Swenshuai.xi         //set Lane Limit in 16 lane case
5750*53ee8cc1Swenshuai.xi         if((pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)
5751*53ee8cc1Swenshuai.xi          ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE))
5752*53ee8cc1Swenshuai.xi         {
5753*53ee8cc1Swenshuai.xi             // 16 lane
5754*53ee8cc1Swenshuai.xi             u16LaneLimit = PINMAPPING_MAX_LANE + 1;
5755*53ee8cc1Swenshuai.xi         }
5756*53ee8cc1Swenshuai.xi         else
5757*53ee8cc1Swenshuai.xi         {
5758*53ee8cc1Swenshuai.xi             // 1 / 2 / 4 / 8 lane
5759*53ee8cc1Swenshuai.xi             u16LaneLimit = PINMAPPING_MAX_LANE;
5760*53ee8cc1Swenshuai.xi         }
5761*53ee8cc1Swenshuai.xi 
5762*53ee8cc1Swenshuai.xi         //count clk
5763*53ee8cc1Swenshuai.xi         if(!bSkip)
5764*53ee8cc1Swenshuai.xi         {
5765*53ee8cc1Swenshuai.xi             u8Clk = 0;
5766*53ee8cc1Swenshuai.xi             u8StartLane = 0;
5767*53ee8cc1Swenshuai.xi             for( u8Count = u8StartLane ; u8Count < (u8StartLane+LANE_NUM_EACH_PINMAPPING_GROUP1) ; u8Count++ )
5768*53ee8cc1Swenshuai.xi             {//lane 0 - lane 3
5769*53ee8cc1Swenshuai.xi                 if( ( u16OutputOrder0_3 % PINMAPPING_EXP ) < u16LaneLimit)
5770*53ee8cc1Swenshuai.xi                 {
5771*53ee8cc1Swenshuai.xi                     u8Count1 = 0;
5772*53ee8cc1Swenshuai.xi                     do
5773*53ee8cc1Swenshuai.xi                     {
5774*53ee8cc1Swenshuai.xi                         if(u8Count>=LANE_AND_CLK_TBL[u8Count1][0] && u8Count<=LANE_AND_CLK_TBL[u8Count1][1])
5775*53ee8cc1Swenshuai.xi                         {
5776*53ee8cc1Swenshuai.xi                             u8Clk |= LANE_AND_CLK_TBL[u8Count1][2];
5777*53ee8cc1Swenshuai.xi                             break;
5778*53ee8cc1Swenshuai.xi                         }
5779*53ee8cc1Swenshuai.xi                         u8Count1 ++;
5780*53ee8cc1Swenshuai.xi                     }
5781*53ee8cc1Swenshuai.xi                     while(u8Count1<VBY1_CLK_TBL_ROW);
5782*53ee8cc1Swenshuai.xi                 }
5783*53ee8cc1Swenshuai.xi                 u16OutputOrder0_3 /= PINMAPPING_EXP;
5784*53ee8cc1Swenshuai.xi             }
5785*53ee8cc1Swenshuai.xi 
5786*53ee8cc1Swenshuai.xi             u8StartLane = 4;
5787*53ee8cc1Swenshuai.xi             for( u8Count = u8StartLane ; u8Count < (u8StartLane+LANE_NUM_EACH_PINMAPPING_GROUP2) ; u8Count++ )
5788*53ee8cc1Swenshuai.xi             {//lane 4 - lane 7
5789*53ee8cc1Swenshuai.xi                 if( ( u16OutputOrder4_7 % PINMAPPING_EXP ) < u16LaneLimit)
5790*53ee8cc1Swenshuai.xi                 {
5791*53ee8cc1Swenshuai.xi                     u8Count1 = 0;
5792*53ee8cc1Swenshuai.xi                     do
5793*53ee8cc1Swenshuai.xi                     {
5794*53ee8cc1Swenshuai.xi                         if(u8Count>=LANE_AND_CLK_TBL[u8Count1][0] && u8Count<=LANE_AND_CLK_TBL[u8Count1][1])
5795*53ee8cc1Swenshuai.xi                         {
5796*53ee8cc1Swenshuai.xi                             u8Clk |= LANE_AND_CLK_TBL[u8Count1][2];
5797*53ee8cc1Swenshuai.xi                             break;
5798*53ee8cc1Swenshuai.xi                         }
5799*53ee8cc1Swenshuai.xi                         u8Count1 ++;
5800*53ee8cc1Swenshuai.xi                     }
5801*53ee8cc1Swenshuai.xi                     while(u8Count1<VBY1_CLK_TBL_ROW);
5802*53ee8cc1Swenshuai.xi                 }
5803*53ee8cc1Swenshuai.xi                 u16OutputOrder4_7 /= PINMAPPING_EXP;
5804*53ee8cc1Swenshuai.xi             }
5805*53ee8cc1Swenshuai.xi 
5806*53ee8cc1Swenshuai.xi             u8StartLane = 8;
5807*53ee8cc1Swenshuai.xi             for( u8Count = u8StartLane ; u8Count < (u8StartLane+LANE_NUM_EACH_PINMAPPING_GROUP3) ; u8Count++ )
5808*53ee8cc1Swenshuai.xi             {//lane 8 - lane 11
5809*53ee8cc1Swenshuai.xi                 if( ( u16OutputOrder8_11 % PINMAPPING_EXP ) < u16LaneLimit)
5810*53ee8cc1Swenshuai.xi                 {
5811*53ee8cc1Swenshuai.xi                     u8Count1 = 0;
5812*53ee8cc1Swenshuai.xi                     do
5813*53ee8cc1Swenshuai.xi                     {
5814*53ee8cc1Swenshuai.xi                         if(u8Count>=LANE_AND_CLK_TBL[u8Count1][0] && u8Count<=LANE_AND_CLK_TBL[u8Count1][1])
5815*53ee8cc1Swenshuai.xi                         {
5816*53ee8cc1Swenshuai.xi                             u8Clk |= LANE_AND_CLK_TBL[u8Count1][2];
5817*53ee8cc1Swenshuai.xi                             break;
5818*53ee8cc1Swenshuai.xi                         }
5819*53ee8cc1Swenshuai.xi                         u8Count1 ++;
5820*53ee8cc1Swenshuai.xi                     }
5821*53ee8cc1Swenshuai.xi                     while(u8Count1<VBY1_CLK_TBL_ROW);
5822*53ee8cc1Swenshuai.xi                 }
5823*53ee8cc1Swenshuai.xi                 u16OutputOrder8_11 /= PINMAPPING_EXP;
5824*53ee8cc1Swenshuai.xi 
5825*53ee8cc1Swenshuai.xi             }
5826*53ee8cc1Swenshuai.xi 
5827*53ee8cc1Swenshuai.xi             u8StartLane = 12;
5828*53ee8cc1Swenshuai.xi             for( u8Count = u8StartLane ; u8Count < (u8StartLane+LANE_NUM_EACH_PINMAPPING_GROUP4) ; u8Count++ )
5829*53ee8cc1Swenshuai.xi             {//lane 12 - lane 15
5830*53ee8cc1Swenshuai.xi                 if( ( u16OutputOrder12_15 % PINMAPPING_EXP ) < u16LaneLimit)
5831*53ee8cc1Swenshuai.xi                 {
5832*53ee8cc1Swenshuai.xi                     u8Count1 = 0;
5833*53ee8cc1Swenshuai.xi                     do
5834*53ee8cc1Swenshuai.xi                     {
5835*53ee8cc1Swenshuai.xi                         if(u8Count>=LANE_AND_CLK_TBL[u8Count1][0] && u8Count<=LANE_AND_CLK_TBL[u8Count1][1])
5836*53ee8cc1Swenshuai.xi                         {
5837*53ee8cc1Swenshuai.xi                             u8Clk |= LANE_AND_CLK_TBL[u8Count1][2];
5838*53ee8cc1Swenshuai.xi                             break;
5839*53ee8cc1Swenshuai.xi                         }
5840*53ee8cc1Swenshuai.xi                         u8Count1 ++;
5841*53ee8cc1Swenshuai.xi                     }
5842*53ee8cc1Swenshuai.xi                     while(u8Count1<VBY1_CLK_TBL_ROW);
5843*53ee8cc1Swenshuai.xi                 }
5844*53ee8cc1Swenshuai.xi                 u16OutputOrder12_15 /= PINMAPPING_EXP;
5845*53ee8cc1Swenshuai.xi             }
5846*53ee8cc1Swenshuai.xi 
5847*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, u8Clk, 0x1F);
5848*53ee8cc1Swenshuai.xi         }
5849*53ee8cc1Swenshuai.xi     }
5850*53ee8cc1Swenshuai.xi     else
5851*53ee8cc1Swenshuai.xi     {
5852*53ee8cc1Swenshuai.xi         if( (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_16LANE)
5853*53ee8cc1Swenshuai.xi           ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_16LANE))
5854*53ee8cc1Swenshuai.xi         {
5855*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x000F, 0x001F);
5856*53ee8cc1Swenshuai.xi         }
5857*53ee8cc1Swenshuai.xi         else if(   (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_8LANE)
5858*53ee8cc1Swenshuai.xi                  ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_8LANE))
5859*53ee8cc1Swenshuai.xi         {
5860*53ee8cc1Swenshuai.xi             if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.u16MOD_CTRLA & BIT(1))
5861*53ee8cc1Swenshuai.xi             {
5862*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x0003, 0x001F);
5863*53ee8cc1Swenshuai.xi             }
5864*53ee8cc1Swenshuai.xi             else
5865*53ee8cc1Swenshuai.xi             {
5866*53ee8cc1Swenshuai.xi                 MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x0003, 0x001F);
5867*53ee8cc1Swenshuai.xi             }
5868*53ee8cc1Swenshuai.xi         }
5869*53ee8cc1Swenshuai.xi         else if(   (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_4LANE)
5870*53ee8cc1Swenshuai.xi                  ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_4LANE))
5871*53ee8cc1Swenshuai.xi         {
5872*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x0001, 0x001F);
5873*53ee8cc1Swenshuai.xi         }
5874*53ee8cc1Swenshuai.xi         else if(   (pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_10BIT_2LANE)
5875*53ee8cc1Swenshuai.xi                  ||(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type_Ext == E_PNL_LPLL_VBY1_8BIT_2LANE))
5876*53ee8cc1Swenshuai.xi         {
5877*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x0001, 0x001F);
5878*53ee8cc1Swenshuai.xi         }
5879*53ee8cc1Swenshuai.xi         else if(pPNLResourcePrivate->stdrvPNL._stPnlInitData.eLPLL_Type == E_PNL_TYPE_LVDS)
5880*53ee8cc1Swenshuai.xi         {//LVDS
5881*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x001F, 0x001F);
5882*53ee8cc1Swenshuai.xi         }
5883*53ee8cc1Swenshuai.xi         else
5884*53ee8cc1Swenshuai.xi         {
5885*53ee8cc1Swenshuai.xi             MOD_A_W2BYTEMSK(REG_MOD_A_BK00_00_L, 0x001F, 0x001F);
5886*53ee8cc1Swenshuai.xi         }
5887*53ee8cc1Swenshuai.xi     }
5888*53ee8cc1Swenshuai.xi }
5889*53ee8cc1Swenshuai.xi #if defined(PATCH_HW_VTT_LIMITATION)
5890*53ee8cc1Swenshuai.xi //There is the hareware bug on Maserati U1 Chip REG_SC_BK10_0D.
5891*53ee8cc1Swenshuai.xi //That is replaced by REG_SC_BK68 byMHal_PNL_SetVopVtt function.
MHal_PNL_SetVopVttByBK68(MS_U32 u32DeviceID,MS_U16 u16Vtt)5892*53ee8cc1Swenshuai.xi void MHal_PNL_SetVopVttByBK68(MS_U32 u32DeviceID, MS_U16 u16Vtt)
5893*53ee8cc1Swenshuai.xi {
5894*53ee8cc1Swenshuai.xi     MS_U16 u16temp;
5895*53ee8cc1Swenshuai.xi 
5896*53ee8cc1Swenshuai.xi     u16temp  = SC_R2BYTE(u32DeviceID, REG_SC_BK68_31_L);
5897*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(u32DeviceID, REG_SC_BK68_31_L, (u16temp & ~BIT(0) & ~BIT(8)) | BIT(1), 0xFFFF);
5898*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(u32DeviceID, REG_SC_BK68_32_L, 0xff01 , 0xFFFF);
5899*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(u32DeviceID, REG_SC_BK68_38_L, 10, 0xFFFF);
5900*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(u32DeviceID, REG_SC_BK68_36_L, u16Vtt , 0xFFFF);
5901*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(u32DeviceID, REG_SC_BK68_37_L, u16Vtt , 0xFFFF);
5902*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(u32DeviceID, REG_SC_BK0F_55_L, 0x10 , 0xFFFF);
5903*53ee8cc1Swenshuai.xi     u16temp  = SC_R2BYTE(u32DeviceID, REG_SC_BK68_31_L);
5904*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(u32DeviceID, REG_SC_BK68_31_L, (u16temp & ~BIT(8))|BIT(0) | BIT(1) , 0xFFFF);
5905*53ee8cc1Swenshuai.xi }
5906*53ee8cc1Swenshuai.xi #endif
5907*53ee8cc1Swenshuai.xi 
5908*53ee8cc1Swenshuai.xi #endif
5909*53ee8cc1Swenshuai.xi 
5910*53ee8cc1Swenshuai.xi 
5911