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