1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi ///
80*53ee8cc1Swenshuai.xi /// file mhal_mhl.c
81*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
82*53ee8cc1Swenshuai.xi /// @brief MHL driver Function
83*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
84*53ee8cc1Swenshuai.xi
85*53ee8cc1Swenshuai.xi #ifndef _MHAL_MHL_C_
86*53ee8cc1Swenshuai.xi #define _MHAL_MHL_C_
87*53ee8cc1Swenshuai.xi
88*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
89*53ee8cc1Swenshuai.xi // Include Files
90*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
91*53ee8cc1Swenshuai.xi // Common Definition
92*53ee8cc1Swenshuai.xi #include "MsCommon.h"
93*53ee8cc1Swenshuai.xi #include "MsVersion.h"
94*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
95*53ee8cc1Swenshuai.xi #include <linux/string.h>
96*53ee8cc1Swenshuai.xi #else
97*53ee8cc1Swenshuai.xi #include <string.h>
98*53ee8cc1Swenshuai.xi #endif
99*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
100*53ee8cc1Swenshuai.xi #include "MsOS.h"
101*53ee8cc1Swenshuai.xi #include "mhal_xc_chip_config.h"
102*53ee8cc1Swenshuai.xi #include "mhl_hwreg_utility2.h"
103*53ee8cc1Swenshuai.xi #include "hwreg_pm_sleep.h"
104*53ee8cc1Swenshuai.xi #include "hwreg_hdmi.h"
105*53ee8cc1Swenshuai.xi #include "hwreg_hdcp.h"
106*53ee8cc1Swenshuai.xi #include "hwregMHL.h"
107*53ee8cc1Swenshuai.xi #include "mdrv_mhl_st.h"
108*53ee8cc1Swenshuai.xi #include "halMHL.h"
109*53ee8cc1Swenshuai.xi
110*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
111*53ee8cc1Swenshuai.xi // Local Defines
112*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
113*53ee8cc1Swenshuai.xi #if(defined(CONFIG_MLOG))
114*53ee8cc1Swenshuai.xi #include "ULog.h"
115*53ee8cc1Swenshuai.xi
116*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_INFO(format, args...) ULOGI("MHL", format, ##args)
117*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_WARNING(format, args...) ULOGW("MHL", format, ##args)
118*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_DEBUG(format, args...) ULOGD("MHL", format, ##args)
119*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_ERROR(format, args...) ULOGE("MHL", format, ##args)
120*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_FATAL(format, args...) ULOGF("MHL", format, ##args)
121*53ee8cc1Swenshuai.xi
122*53ee8cc1Swenshuai.xi #else
123*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_INFO(format, args...) printf(format, ##args)
124*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_WARNING(format, args...) printf(format, ##args)
125*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_DEBUG(format, args...) printf(format, ##args)
126*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_ERROR(format, args...) printf(format, ##args)
127*53ee8cc1Swenshuai.xi #define MHAL_MHL_MSG_FATAL(format, args...) printf(format, ##args)
128*53ee8cc1Swenshuai.xi
129*53ee8cc1Swenshuai.xi #endif
130*53ee8cc1Swenshuai.xi
131*53ee8cc1Swenshuai.xi #define MHL_DEBUG_SEND_MSC 0
132*53ee8cc1Swenshuai.xi #define MHL_DEBUG_RECEIVE_EMSC 0
133*53ee8cc1Swenshuai.xi
134*53ee8cc1Swenshuai.xi #define DMHLInit 0
135*53ee8cc1Swenshuai.xi
136*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
137*53ee8cc1Swenshuai.xi // Local Structures
138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi typedef struct
140*53ee8cc1Swenshuai.xi {
141*53ee8cc1Swenshuai.xi MS_U32 addr;
142*53ee8cc1Swenshuai.xi MS_U16 mask;
143*53ee8cc1Swenshuai.xi MS_U16 databuf;
144*53ee8cc1Swenshuai.xi } msLoadTbl_S;
145*53ee8cc1Swenshuai.xi
146*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
147*53ee8cc1Swenshuai.xi // Global Variables
148*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
149*53ee8cc1Swenshuai.xi MS_U8 ucChipIDValue = MHL_CHIP_ID_MANHATTAN;
150*53ee8cc1Swenshuai.xi MS_VIRT MHL_XC_RIU_BASE;
151*53ee8cc1Swenshuai.xi MS_VIRT MHL_PM_RIU_BASE;
152*53ee8cc1Swenshuai.xi
153*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
154*53ee8cc1Swenshuai.xi // MHL initial table
155*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
156*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_INITIAL_TABLE[] =
157*53ee8cc1Swenshuai.xi {
158*53ee8cc1Swenshuai.xi // Set accepted discover pulse high pulse width to ignore USB pulse
159*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_0C, BMASK(15:0), 0x0046}, // reject cbus discovery pulse below this limit
160*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_0D, BMASK(15:0), 0x0082}, // reject cbus discovery pulse above this limit
161*53ee8cc1Swenshuai.xi // CTS 4.3.7.1
162*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_55, BMASK(7:4), BIT(4)}, // [7:4]: cbus requester transmit opportunity after arbitration
163*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_70, BIT(14), BIT(14)}, // [14]: let edid current read initial address add 1
164*53ee8cc1Swenshuai.xi
165*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_21, BIT(1), BIT(1)}, // [1]: output mhl_zxsense_tmds inv
166*53ee8cc1Swenshuai.xi
167*53ee8cc1Swenshuai.xi // For CTS 6.3.10.7
168*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_59, BMASK(15:0), 0xFBD0}, // timeout for a device receiving a packet within a command
169*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_5A, BMASK(15:0), 0x0001}, // modify to 130ms
170*53ee8cc1Swenshuai.xi
171*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), 0}, // Not overwrite pull down resistor
172*53ee8cc1Swenshuai.xi
173*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE >= MHL_CBUS_HW_ISR_MODE)
174*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_23, BMASK(10:8) |BIT(4), BIT(10) |BIT(4)}, // [10]: enable HW auto response read_devcap request
175*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_6D, BMASK(11:0), BMASK(11:0)}, // Enable MHL HW mode
176*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_71, BMASK(15:14)| BMASK(11:10), BMASK(15:14)| BMASK(11:10)},
177*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_50, BIT(13), BIT(13)}, // [13]: MSC send command keep mode
178*53ee8cc1Swenshuai.xi #else
179*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_23, BMASK(10:8) |BIT(4), 0}, // [10]: enable HW auto response read_devcap request
180*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_6D, BMASK(11:0), 0}, // Enable MHL HW mode
181*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_71, BMASK(15:14)| BMASK(11:10), 0},
182*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_50, BIT(13), 0}, // [13]: MSC send command keep mode
183*53ee8cc1Swenshuai.xi #endif
184*53ee8cc1Swenshuai.xi
185*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE == MHL_CBUS_HW_REPLY_MODE)
186*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_0B, BIT(14), BIT(14)}, // [14]: MSC send command keep mode
187*53ee8cc1Swenshuai.xi #endif
188*53ee8cc1Swenshuai.xi
189*53ee8cc1Swenshuai.xi #if DMHL_INT_ENABLE
190*53ee8cc1Swenshuai.xi // Mask unused interrupt events
191*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_16, BIT(13)|BIT(9), BIT(13)|BIT(9)}, // [13]: lnk_lay_en_chg_int mask, [9]: conn_state_chg_int mask
192*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_18, BIT(9)|BIT(5)|BIT(1), BIT(9)|BIT(5)|BIT(1)}, // [9]: cbus_discover_pul_confirm_int mask, [5]: wakeup_pul_confirm_int mask, [1]: cbus_stuck_to_low_int mask.
193*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_30, BIT(1), BIT(1)}, // [1]: cbus conflict_int mask
194*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_38, BIT(13)|BIT(9)|BIT(5)|BIT(1), BIT(13)|BIT(9)|BIT(5)|BIT(1)}, // [13]: unused mask, [9]: unused mask, [5]: unused mask, [1]: unused mask.
195*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_14, BIT(13), BIT(13)}, // [13]: int mask for monitor_sram_full
196*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_18, BIT(13), BIT(13)}, // [13]: send rcv_pkt_ddc_sw_overwrite_err_in mask
197*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_19, BIT(5)|BIT(1), BIT(5)|BIT(1)}, // [5]: send ddc send complete interrupt mask, [1]: send ddc error interrupt mask
198*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_1B, BIT(1), BIT(1)}, // [1]: receive ddc packet valid mask
199*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_1F, BIT(5)|BIT(1), BIT(5)|BIT(1)}, // [5]: ddc access edid timeout int mask, [1]: client_wrt_ddc_ram interrupt mask
200*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_21, BIT(5), BIT(5)}, // [5]: ddc error interrupt mask
201*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_22, BIT(9)|BIT(5)|BIT(1), BIT(9)|BIT(5)|BIT(1)}, // [9]: ddc access hdcp timeout int mask, [5]: receive nack pkt int_mask, [1]: receive abort pkt int mask
202*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_23, BIT(13), BIT(13)}, // [13]: send rcv_pkt_msc_sw_overwrite_err_in mask
203*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_24, BIT(1), BIT(1)}, // [1]: send error interrupt mask
204*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_25, BIT(9)|BIT(5)|BIT(1), BIT(9)|BIT(5)|BIT(1)}, // [9]: response_pkt_msc_hw_int mask, [5]: snd_pkt_msc_hw_int mask, [1]: msc sw send complete interrupt mask
205*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_63, BIT(9), BIT(9)}, // [9]: dytycycle_bad_int mask
206*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_65, BIT(9)|BIT(5)|BIT(1), BIT(9)|BIT(5)|BIT(1)}, // [9]: rcv_parity_err_int mask, [5]: rcv_data_err_int mask, [1]: rcv_sync_err_int mask
207*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_78, BIT(13)|BIT(9)|BIT(5)|BIT(1), BIT(13)|BIT(9)|BIT(5)|BIT(1)}, // [13]: unused mask, [9]: unused mask, [5]: unused mask, [1]: unused mask.
208*53ee8cc1Swenshuai.xi #endif
209*53ee8cc1Swenshuai.xi };
210*53ee8cc1Swenshuai.xi
211*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
212*53ee8cc1Swenshuai.xi // MHL power on table
213*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
214*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_ON_TABLE[] =
215*53ee8cc1Swenshuai.xi {
216*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), 0}, // Not overwrite pull down resistor
217*53ee8cc1Swenshuai.xi };
218*53ee8cc1Swenshuai.xi
219*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
220*53ee8cc1Swenshuai.xi // MHL power down table
221*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
222*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_DOWN_TABLE[] =
223*53ee8cc1Swenshuai.xi {
224*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), BIT(5)|BMASK(3:2)},
225*53ee8cc1Swenshuai.xi };
226*53ee8cc1Swenshuai.xi
227*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
228*53ee8cc1Swenshuai.xi // MHL power saving table
229*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
230*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_SAVING_TABLE[] =
231*53ee8cc1Swenshuai.xi {
232*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), BIT(5)|BMASK(3:2)},
233*53ee8cc1Swenshuai.xi };
234*53ee8cc1Swenshuai.xi
235*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
236*53ee8cc1Swenshuai.xi // Local Functions
237*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
238*53ee8cc1Swenshuai.xi
239*53ee8cc1Swenshuai.xi //**************************************************************************
240*53ee8cc1Swenshuai.xi // [Function Name]:
241*53ee8cc1Swenshuai.xi // _mhal_mhl_IsCbusBusy()
242*53ee8cc1Swenshuai.xi // [Description]
243*53ee8cc1Swenshuai.xi //
244*53ee8cc1Swenshuai.xi // [Arguments]:
245*53ee8cc1Swenshuai.xi //
246*53ee8cc1Swenshuai.xi // [Return]:
247*53ee8cc1Swenshuai.xi //
248*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_IsCbusBusy(MS_BOOL bECbusEnableFlag)249*53ee8cc1Swenshuai.xi MS_BOOL _mhal_mhl_IsCbusBusy(MS_BOOL bECbusEnableFlag)
250*53ee8cc1Swenshuai.xi {
251*53ee8cc1Swenshuai.xi MS_BOOL bBusyFlag = FALSE;
252*53ee8cc1Swenshuai.xi
253*53ee8cc1Swenshuai.xi if(!bECbusEnableFlag)
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi bBusyFlag = ((R2BYTE(REG_MHL_CBUS_5D) & 0x00F0) != 0 ? TRUE : FALSE);
256*53ee8cc1Swenshuai.xi }
257*53ee8cc1Swenshuai.xi return bBusyFlag;
258*53ee8cc1Swenshuai.xi }
259*53ee8cc1Swenshuai.xi
260*53ee8cc1Swenshuai.xi //**************************************************************************
261*53ee8cc1Swenshuai.xi // [Function Name]:
262*53ee8cc1Swenshuai.xi // _mhal_mhl_DviAutoEQSwitch()
263*53ee8cc1Swenshuai.xi // [Description]
264*53ee8cc1Swenshuai.xi //
265*53ee8cc1Swenshuai.xi // [Arguments]:
266*53ee8cc1Swenshuai.xi //
267*53ee8cc1Swenshuai.xi // [Return]:
268*53ee8cc1Swenshuai.xi //
269*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_DviAutoEQSwitch(MS_U8 ucCbusSelect,MS_BOOL bFlag)270*53ee8cc1Swenshuai.xi void _mhal_mhl_DviAutoEQSwitch(MS_U8 ucCbusSelect, MS_BOOL bFlag)
271*53ee8cc1Swenshuai.xi {
272*53ee8cc1Swenshuai.xi static MS_BOOL bAutoEQFlag = FALSE;
273*53ee8cc1Swenshuai.xi
274*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
275*53ee8cc1Swenshuai.xi {
276*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
277*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
278*53ee8cc1Swenshuai.xi if(!bAutoEQFlag)
279*53ee8cc1Swenshuai.xi {
280*53ee8cc1Swenshuai.xi //if((R2BYTE(REG_DVI_DTOP_DUAL_P0_2F_L) &BIT(0)) == BIT(0))
281*53ee8cc1Swenshuai.xi {
282*53ee8cc1Swenshuai.xi bAutoEQFlag = TRUE;
283*53ee8cc1Swenshuai.xi }
284*53ee8cc1Swenshuai.xi }
285*53ee8cc1Swenshuai.xi
286*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
287*53ee8cc1Swenshuai.xi {
288*53ee8cc1Swenshuai.xi if(bFlag)
289*53ee8cc1Swenshuai.xi {
290*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_00_L, BIT(4), BIT(4)); // enable EQ new mode
291*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
292*53ee8cc1Swenshuai.xi }
293*53ee8cc1Swenshuai.xi else
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_00_L, 0, BIT(4)); // disable EQ new mode
296*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_2F_L, 0, BIT(0)); // disable autoEQ controller
297*53ee8cc1Swenshuai.xi }
298*53ee8cc1Swenshuai.xi }
299*53ee8cc1Swenshuai.xi
300*53ee8cc1Swenshuai.xi break;
301*53ee8cc1Swenshuai.xi #endif
302*53ee8cc1Swenshuai.xi
303*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
304*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
305*53ee8cc1Swenshuai.xi if(!bAutoEQFlag)
306*53ee8cc1Swenshuai.xi {
307*53ee8cc1Swenshuai.xi //if((R2BYTE(REG_DVI_DTOP_DUAL_P1_2F_L) &BIT(0)) == BIT(0))
308*53ee8cc1Swenshuai.xi {
309*53ee8cc1Swenshuai.xi bAutoEQFlag = TRUE;
310*53ee8cc1Swenshuai.xi }
311*53ee8cc1Swenshuai.xi }
312*53ee8cc1Swenshuai.xi
313*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
314*53ee8cc1Swenshuai.xi {
315*53ee8cc1Swenshuai.xi if(bFlag)
316*53ee8cc1Swenshuai.xi {
317*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_00_L, BIT(4), BIT(4)); // enable EQ new mode
318*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
319*53ee8cc1Swenshuai.xi }
320*53ee8cc1Swenshuai.xi else
321*53ee8cc1Swenshuai.xi {
322*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_00_L, 0, BIT(4)); // disable EQ new mode
323*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_2F_L, 0, BIT(0)); // disable autoEQ controller
324*53ee8cc1Swenshuai.xi }
325*53ee8cc1Swenshuai.xi }
326*53ee8cc1Swenshuai.xi
327*53ee8cc1Swenshuai.xi break;
328*53ee8cc1Swenshuai.xi #endif
329*53ee8cc1Swenshuai.xi
330*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
331*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
332*53ee8cc1Swenshuai.xi if(!bAutoEQFlag)
333*53ee8cc1Swenshuai.xi {
334*53ee8cc1Swenshuai.xi //if((R2BYTE(REG_DVI_DTOP_DUAL_P2_2F_L) &BIT(0)) == BIT(0))
335*53ee8cc1Swenshuai.xi {
336*53ee8cc1Swenshuai.xi bAutoEQFlag = TRUE;
337*53ee8cc1Swenshuai.xi }
338*53ee8cc1Swenshuai.xi }
339*53ee8cc1Swenshuai.xi
340*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
341*53ee8cc1Swenshuai.xi {
342*53ee8cc1Swenshuai.xi if(bFlag)
343*53ee8cc1Swenshuai.xi {
344*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_00_L, BIT(4), BIT(4)); // enable EQ new mode
345*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
346*53ee8cc1Swenshuai.xi }
347*53ee8cc1Swenshuai.xi else
348*53ee8cc1Swenshuai.xi {
349*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_00_L, 0, BIT(4)); // disable EQ new mode
350*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_2F_L, 0, BIT(0)); // disable autoEQ controller
351*53ee8cc1Swenshuai.xi }
352*53ee8cc1Swenshuai.xi }
353*53ee8cc1Swenshuai.xi
354*53ee8cc1Swenshuai.xi break;
355*53ee8cc1Swenshuai.xi #endif
356*53ee8cc1Swenshuai.xi
357*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
358*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
359*53ee8cc1Swenshuai.xi if(!bAutoEQFlag)
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi //if((R2BYTE(REG_DVI_DTOP_DUAL_P3_2F_L) &BIT(0)) == BIT(0))
362*53ee8cc1Swenshuai.xi {
363*53ee8cc1Swenshuai.xi bAutoEQFlag = TRUE;
364*53ee8cc1Swenshuai.xi }
365*53ee8cc1Swenshuai.xi }
366*53ee8cc1Swenshuai.xi
367*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
368*53ee8cc1Swenshuai.xi {
369*53ee8cc1Swenshuai.xi if(bFlag)
370*53ee8cc1Swenshuai.xi {
371*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_00_L, BIT(4), BIT(4)); // enable EQ new mode
372*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
373*53ee8cc1Swenshuai.xi }
374*53ee8cc1Swenshuai.xi else
375*53ee8cc1Swenshuai.xi {
376*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_00_L, 0, BIT(4)); // disable EQ new mode
377*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_2F_L, 0, BIT(0)); // disable autoEQ controller
378*53ee8cc1Swenshuai.xi }
379*53ee8cc1Swenshuai.xi }
380*53ee8cc1Swenshuai.xi
381*53ee8cc1Swenshuai.xi break;
382*53ee8cc1Swenshuai.xi #endif
383*53ee8cc1Swenshuai.xi
384*53ee8cc1Swenshuai.xi default:
385*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
386*53ee8cc1Swenshuai.xi {
387*53ee8cc1Swenshuai.xi
388*53ee8cc1Swenshuai.xi }
389*53ee8cc1Swenshuai.xi
390*53ee8cc1Swenshuai.xi break;
391*53ee8cc1Swenshuai.xi };
392*53ee8cc1Swenshuai.xi }
393*53ee8cc1Swenshuai.xi
394*53ee8cc1Swenshuai.xi //**************************************************************************
395*53ee8cc1Swenshuai.xi // [Function Name]:
396*53ee8cc1Swenshuai.xi // _mhal_mhl_HdmiBypassModeSetting()
397*53ee8cc1Swenshuai.xi // [Description]
398*53ee8cc1Swenshuai.xi // MHL HDMI bypass setting
399*53ee8cc1Swenshuai.xi // [Arguments]:
400*53ee8cc1Swenshuai.xi //
401*53ee8cc1Swenshuai.xi // [Return]:
402*53ee8cc1Swenshuai.xi //
403*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_HdmiBypassModeSetting(MS_U8 ucCbusSelect,stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus)404*53ee8cc1Swenshuai.xi void _mhal_mhl_HdmiBypassModeSetting(MS_U8 ucCbusSelect, stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus)
405*53ee8cc1Swenshuai.xi {
406*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
409*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
410*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
411*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
412*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
413*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P0_09_L, 0, BIT(0)); // PP mode + HDCP eanble
414*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6F_L, 0, BIT(10)); // I-control PD overwrite write
415*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
416*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_11_L, 0, BMASK(12:0));
417*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, BIT(8), BIT(8));
418*53ee8cc1Swenshuai.xi
419*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
420*53ee8cc1Swenshuai.xi {
421*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P0_6B_L) >> 12;
422*53ee8cc1Swenshuai.xi }
423*53ee8cc1Swenshuai.xi
424*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
425*53ee8cc1Swenshuai.xi {
426*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6B_L, (pMHLSignalStatus->ucImpedanceValue << 12), BMASK(15:12));
427*53ee8cc1Swenshuai.xi }
428*53ee8cc1Swenshuai.xi
429*53ee8cc1Swenshuai.xi break;
430*53ee8cc1Swenshuai.xi #endif
431*53ee8cc1Swenshuai.xi
432*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
433*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
434*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
435*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
436*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
437*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P1_09_L, 0, BIT(0)); // PP mode + HDCP eanble
438*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6F_L, 0, BIT(10)); // I-control PD overwrite write
439*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
440*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_11_L, 0, BMASK(12:0));
441*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6E_L, BIT(8), BIT(8));
442*53ee8cc1Swenshuai.xi
443*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
444*53ee8cc1Swenshuai.xi {
445*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P1_6B_L) >> 12;
446*53ee8cc1Swenshuai.xi }
447*53ee8cc1Swenshuai.xi
448*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
449*53ee8cc1Swenshuai.xi {
450*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6B_L, (pMHLSignalStatus->ucImpedanceValue << 12), BMASK(15:12));
451*53ee8cc1Swenshuai.xi }
452*53ee8cc1Swenshuai.xi
453*53ee8cc1Swenshuai.xi break;
454*53ee8cc1Swenshuai.xi #endif
455*53ee8cc1Swenshuai.xi
456*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
457*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
458*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
459*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
460*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
461*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P2_09_L, 0, BIT(0)); // PP mode + HDCP eanble
462*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6F_L, 0, BIT(10)); // I-control PD overwrite write
463*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
464*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_11_L, 0, BMASK(12:0));
465*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6E_L, BIT(8), BIT(8));
466*53ee8cc1Swenshuai.xi
467*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
468*53ee8cc1Swenshuai.xi {
469*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P2_6B_L) >> 12;
470*53ee8cc1Swenshuai.xi }
471*53ee8cc1Swenshuai.xi
472*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
473*53ee8cc1Swenshuai.xi {
474*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6B_L, (pMHLSignalStatus->ucImpedanceValue << 12), BMASK(15:12));
475*53ee8cc1Swenshuai.xi }
476*53ee8cc1Swenshuai.xi
477*53ee8cc1Swenshuai.xi break;
478*53ee8cc1Swenshuai.xi #endif
479*53ee8cc1Swenshuai.xi
480*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
481*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
482*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
483*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
484*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
485*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P3_09_L, 0, BIT(0)); // PP mode + HDCP eanble
486*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6F_L, 0, BIT(10)); // I-control PD overwrite write
487*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
488*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_11_L, 0, BMASK(12:0));
489*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6E_L, BIT(8), BIT(8));
490*53ee8cc1Swenshuai.xi
491*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
492*53ee8cc1Swenshuai.xi {
493*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P3_6B_L) >> 12;
494*53ee8cc1Swenshuai.xi }
495*53ee8cc1Swenshuai.xi
496*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6B_L, (pMHLSignalStatus->ucImpedanceValue << 12), BMASK(15:12));
499*53ee8cc1Swenshuai.xi }
500*53ee8cc1Swenshuai.xi
501*53ee8cc1Swenshuai.xi break;
502*53ee8cc1Swenshuai.xi #endif
503*53ee8cc1Swenshuai.xi
504*53ee8cc1Swenshuai.xi default:
505*53ee8cc1Swenshuai.xi
506*53ee8cc1Swenshuai.xi break;
507*53ee8cc1Swenshuai.xi };
508*53ee8cc1Swenshuai.xi
509*53ee8cc1Swenshuai.xi _mhal_mhl_DviAutoEQSwitch(ucCbusSelect, TRUE);
510*53ee8cc1Swenshuai.xi }
511*53ee8cc1Swenshuai.xi
512*53ee8cc1Swenshuai.xi //**************************************************************************
513*53ee8cc1Swenshuai.xi // [Function Name]:
514*53ee8cc1Swenshuai.xi // _mhal_mhl_Mhl24bitsModeSetting()
515*53ee8cc1Swenshuai.xi // [Description]
516*53ee8cc1Swenshuai.xi // MHL 24 bits mode setting
517*53ee8cc1Swenshuai.xi // [Arguments]:
518*53ee8cc1Swenshuai.xi //
519*53ee8cc1Swenshuai.xi // [Return]:
520*53ee8cc1Swenshuai.xi //
521*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_Mhl24bitsModeSetting(MS_U8 ucCbusSelect,stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus)522*53ee8cc1Swenshuai.xi void _mhal_mhl_Mhl24bitsModeSetting(MS_U8 ucCbusSelect, stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus)
523*53ee8cc1Swenshuai.xi {
524*53ee8cc1Swenshuai.xi MS_U16 usImpedanceSetting = 0;
525*53ee8cc1Swenshuai.xi
526*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
527*53ee8cc1Swenshuai.xi {
528*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
529*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
530*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
531*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
532*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_5B_L, 0, BIT(13)| BMASK(3:0));
533*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P0_09_L, 0, BIT(0)); // PP mode + HDCP eanble
534*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
535*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6C_L, (MHL_ICONTROL_PD_20_VALUE << 9), BMASK(13:9)); // I-control PD
536*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
537*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_11_L, BIT(12) |0x30, BMASK(12:0));
538*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_10_L, 0, BMASK(1:0));
539*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P0_60_L, 0);
540*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P0_61_L, 0);
541*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P0_62_L, 0);
542*53ee8cc1Swenshuai.xi
543*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
544*53ee8cc1Swenshuai.xi {
545*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P0_6B_L) >> 12;
546*53ee8cc1Swenshuai.xi }
547*53ee8cc1Swenshuai.xi
548*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
549*53ee8cc1Swenshuai.xi {
550*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset &BIT(7))
551*53ee8cc1Swenshuai.xi {
552*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue +pMHLSignalStatus->ucImpedanceOffset) << 12;
553*53ee8cc1Swenshuai.xi }
554*53ee8cc1Swenshuai.xi else
555*53ee8cc1Swenshuai.xi {
556*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue -pMHLSignalStatus->ucImpedanceOffset) << 12;
557*53ee8cc1Swenshuai.xi }
558*53ee8cc1Swenshuai.xi
559*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6B_L, usImpedanceSetting, BMASK(15:12));
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi
562*53ee8cc1Swenshuai.xi break;
563*53ee8cc1Swenshuai.xi #endif
564*53ee8cc1Swenshuai.xi
565*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
566*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
567*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
568*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
569*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_5B_L, 0, BIT(13)| BMASK(3:0));
570*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P1_09_L, 0, BIT(0)); // PP mode + HDCP eanble
571*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
572*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6C_L, (MHL_ICONTROL_PD_20_VALUE << 9), BMASK(13:9)); // I-control PD
573*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
574*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_11_L, BIT(12) |0x30, BMASK(12:0));
575*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_10_L, 0, BMASK(1:0));
576*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P1_60_L, 0);
577*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P1_61_L, 0);
578*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P1_62_L, 0);
579*53ee8cc1Swenshuai.xi
580*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
581*53ee8cc1Swenshuai.xi {
582*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P1_6B_L) >> 12;
583*53ee8cc1Swenshuai.xi }
584*53ee8cc1Swenshuai.xi
585*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
586*53ee8cc1Swenshuai.xi {
587*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset &BIT(7))
588*53ee8cc1Swenshuai.xi {
589*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue +pMHLSignalStatus->ucImpedanceOffset) << 12;
590*53ee8cc1Swenshuai.xi }
591*53ee8cc1Swenshuai.xi else
592*53ee8cc1Swenshuai.xi {
593*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue -pMHLSignalStatus->ucImpedanceOffset) << 12;
594*53ee8cc1Swenshuai.xi }
595*53ee8cc1Swenshuai.xi
596*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6B_L, usImpedanceSetting, BMASK(15:12));
597*53ee8cc1Swenshuai.xi }
598*53ee8cc1Swenshuai.xi
599*53ee8cc1Swenshuai.xi break;
600*53ee8cc1Swenshuai.xi #endif
601*53ee8cc1Swenshuai.xi
602*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
603*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
604*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
605*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
606*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_5B_L, 0, BIT(13)| BMASK(3:0));
607*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P2_09_L, 0, BIT(0)); // PP mode + HDCP eanble
608*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
609*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6C_L, (MHL_ICONTROL_PD_20_VALUE << 9), BMASK(13:9)); // I-control PD
610*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
611*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_11_L, BIT(12) |0x30, BMASK(12:0));
612*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_10_L, 0, BMASK(1:0));
613*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P2_60_L, 0);
614*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P2_61_L, 0);
615*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P2_62_L, 0);
616*53ee8cc1Swenshuai.xi
617*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
618*53ee8cc1Swenshuai.xi {
619*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P2_6B_L) >> 12;
620*53ee8cc1Swenshuai.xi }
621*53ee8cc1Swenshuai.xi
622*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset &BIT(7))
625*53ee8cc1Swenshuai.xi {
626*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue +pMHLSignalStatus->ucImpedanceOffset) << 12;
627*53ee8cc1Swenshuai.xi }
628*53ee8cc1Swenshuai.xi else
629*53ee8cc1Swenshuai.xi {
630*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue -pMHLSignalStatus->ucImpedanceOffset) << 12;
631*53ee8cc1Swenshuai.xi }
632*53ee8cc1Swenshuai.xi
633*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6B_L, usImpedanceSetting, BMASK(15:12));
634*53ee8cc1Swenshuai.xi }
635*53ee8cc1Swenshuai.xi
636*53ee8cc1Swenshuai.xi break;
637*53ee8cc1Swenshuai.xi #endif
638*53ee8cc1Swenshuai.xi
639*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
640*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
641*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
642*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
643*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_5B_L, 0, BIT(13)| BMASK(3:0));
644*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P3_09_L, 0, BIT(0)); // PP mode + HDCP eanble
645*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
646*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6C_L, (MHL_ICONTROL_PD_20_VALUE << 9), BMASK(13:9)); // I-control PD
647*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
648*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_11_L, BIT(12) |0x30, BMASK(12:0));
649*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_10_L, 0, BMASK(1:0));
650*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P3_60_L, 0);
651*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P3_61_L, 0);
652*53ee8cc1Swenshuai.xi W2BYTE(REG_COMBO_PHY0_P3_62_L, 0);
653*53ee8cc1Swenshuai.xi
654*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceValue == MHL_IMPEDANCE_VALUE)
655*53ee8cc1Swenshuai.xi {
656*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucImpedanceValue = R2BYTE(REG_COMBO_PHY0_P3_6B_L) >> 12;
657*53ee8cc1Swenshuai.xi }
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset > 0)
660*53ee8cc1Swenshuai.xi {
661*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucImpedanceOffset &BIT(7))
662*53ee8cc1Swenshuai.xi {
663*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue +pMHLSignalStatus->ucImpedanceOffset) << 12;
664*53ee8cc1Swenshuai.xi }
665*53ee8cc1Swenshuai.xi else
666*53ee8cc1Swenshuai.xi {
667*53ee8cc1Swenshuai.xi usImpedanceSetting = (pMHLSignalStatus->ucImpedanceValue -pMHLSignalStatus->ucImpedanceOffset) << 12;
668*53ee8cc1Swenshuai.xi }
669*53ee8cc1Swenshuai.xi
670*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6B_L, usImpedanceSetting, BMASK(15:12));
671*53ee8cc1Swenshuai.xi }
672*53ee8cc1Swenshuai.xi
673*53ee8cc1Swenshuai.xi break;
674*53ee8cc1Swenshuai.xi #endif
675*53ee8cc1Swenshuai.xi
676*53ee8cc1Swenshuai.xi default:
677*53ee8cc1Swenshuai.xi usImpedanceSetting = 0;
678*53ee8cc1Swenshuai.xi break;
679*53ee8cc1Swenshuai.xi };
680*53ee8cc1Swenshuai.xi
681*53ee8cc1Swenshuai.xi _mhal_mhl_DviAutoEQSwitch(ucCbusSelect, FALSE);
682*53ee8cc1Swenshuai.xi }
683*53ee8cc1Swenshuai.xi
684*53ee8cc1Swenshuai.xi //**************************************************************************
685*53ee8cc1Swenshuai.xi // [Function Name]:
686*53ee8cc1Swenshuai.xi // _mhal_mhl_MhlPackedPixelModeSetting()
687*53ee8cc1Swenshuai.xi // [Description]
688*53ee8cc1Swenshuai.xi // MHL packed pixel mode setting
689*53ee8cc1Swenshuai.xi // [Arguments]:
690*53ee8cc1Swenshuai.xi //
691*53ee8cc1Swenshuai.xi // [Return]:
692*53ee8cc1Swenshuai.xi //
693*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MhlPackedPixelModeSetting(MS_U8 ucCbusSelect)694*53ee8cc1Swenshuai.xi void _mhal_mhl_MhlPackedPixelModeSetting(MS_U8 ucCbusSelect)
695*53ee8cc1Swenshuai.xi {
696*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
697*53ee8cc1Swenshuai.xi {
698*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
699*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
700*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
701*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P0_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
702*53ee8cc1Swenshuai.xi
703*53ee8cc1Swenshuai.xi break;
704*53ee8cc1Swenshuai.xi #endif
705*53ee8cc1Swenshuai.xi
706*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
707*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
708*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
709*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P1_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
710*53ee8cc1Swenshuai.xi
711*53ee8cc1Swenshuai.xi break;
712*53ee8cc1Swenshuai.xi #endif
713*53ee8cc1Swenshuai.xi
714*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
715*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
716*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
717*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P2_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
718*53ee8cc1Swenshuai.xi
719*53ee8cc1Swenshuai.xi break;
720*53ee8cc1Swenshuai.xi #endif
721*53ee8cc1Swenshuai.xi
722*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
723*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
724*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
725*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P3_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
726*53ee8cc1Swenshuai.xi
727*53ee8cc1Swenshuai.xi break;
728*53ee8cc1Swenshuai.xi #endif
729*53ee8cc1Swenshuai.xi
730*53ee8cc1Swenshuai.xi default:
731*53ee8cc1Swenshuai.xi
732*53ee8cc1Swenshuai.xi break;
733*53ee8cc1Swenshuai.xi };
734*53ee8cc1Swenshuai.xi }
735*53ee8cc1Swenshuai.xi
736*53ee8cc1Swenshuai.xi //**************************************************************************
737*53ee8cc1Swenshuai.xi // [Function Name]:
738*53ee8cc1Swenshuai.xi // _mhal_mhl_RxRtermControl()
739*53ee8cc1Swenshuai.xi // [Description]
740*53ee8cc1Swenshuai.xi // MHL TMDS termination resistor control
741*53ee8cc1Swenshuai.xi // [Arguments]:
742*53ee8cc1Swenshuai.xi //
743*53ee8cc1Swenshuai.xi // [Return]:
744*53ee8cc1Swenshuai.xi //
745*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_RxRtermControl(MS_U8 ucCbusSelect,RXRtermControl_T rctrl)746*53ee8cc1Swenshuai.xi void _mhal_mhl_RxRtermControl(MS_U8 ucCbusSelect, RXRtermControl_T rctrl)
747*53ee8cc1Swenshuai.xi {
748*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
749*53ee8cc1Swenshuai.xi {
750*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
751*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
752*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
753*53ee8cc1Swenshuai.xi {
754*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(3:1));// data R-term
755*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(0));// clock R-term
756*53ee8cc1Swenshuai.xi }
757*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
758*53ee8cc1Swenshuai.xi {
759*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(2), BMASK(3:1));// data R-term
760*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(0));// clock R-term
761*53ee8cc1Swenshuai.xi }
762*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
763*53ee8cc1Swenshuai.xi {
764*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(3:1), BMASK(3:1));// data R-term
765*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(0), BIT(0));// clock R-term
766*53ee8cc1Swenshuai.xi }
767*53ee8cc1Swenshuai.xi
768*53ee8cc1Swenshuai.xi break;
769*53ee8cc1Swenshuai.xi #endif
770*53ee8cc1Swenshuai.xi
771*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
772*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
773*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
774*53ee8cc1Swenshuai.xi {
775*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(7:5));// data R-term
776*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(4));// clock R-term
777*53ee8cc1Swenshuai.xi }
778*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
779*53ee8cc1Swenshuai.xi {
780*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(6), BMASK(7:5));// data R-term
781*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(4));// clock R-term
782*53ee8cc1Swenshuai.xi }
783*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
784*53ee8cc1Swenshuai.xi {
785*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(7:5), BMASK(7:5));// data R-term
786*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(4), BIT(4));// clock R-term
787*53ee8cc1Swenshuai.xi }
788*53ee8cc1Swenshuai.xi
789*53ee8cc1Swenshuai.xi break;
790*53ee8cc1Swenshuai.xi #endif
791*53ee8cc1Swenshuai.xi
792*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
793*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
794*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
795*53ee8cc1Swenshuai.xi {
796*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(11:9));// data R-term
797*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(8));// clock R-term
798*53ee8cc1Swenshuai.xi }
799*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
800*53ee8cc1Swenshuai.xi {
801*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(10), BMASK(11:9));// data R-term
802*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(8));// clock R-term
803*53ee8cc1Swenshuai.xi }
804*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
805*53ee8cc1Swenshuai.xi {
806*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(11:9), BMASK(11:9));// data R-term
807*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(8), BIT(8));// clock R-term
808*53ee8cc1Swenshuai.xi }
809*53ee8cc1Swenshuai.xi
810*53ee8cc1Swenshuai.xi break;
811*53ee8cc1Swenshuai.xi #endif
812*53ee8cc1Swenshuai.xi
813*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
814*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
815*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
816*53ee8cc1Swenshuai.xi {
817*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(15:13));// data R-term
818*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(12));// clock R-term
819*53ee8cc1Swenshuai.xi }
820*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
821*53ee8cc1Swenshuai.xi {
822*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(14), BMASK(15:13));// data R-term
823*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(12));// clock R-term
824*53ee8cc1Swenshuai.xi }
825*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
826*53ee8cc1Swenshuai.xi {
827*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(15:13), BMASK(15:13));// data R-term
828*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(12), BIT(12));// clock R-term
829*53ee8cc1Swenshuai.xi }
830*53ee8cc1Swenshuai.xi
831*53ee8cc1Swenshuai.xi break;
832*53ee8cc1Swenshuai.xi #endif
833*53ee8cc1Swenshuai.xi
834*53ee8cc1Swenshuai.xi default:
835*53ee8cc1Swenshuai.xi
836*53ee8cc1Swenshuai.xi break;
837*53ee8cc1Swenshuai.xi };
838*53ee8cc1Swenshuai.xi }
839*53ee8cc1Swenshuai.xi
840*53ee8cc1Swenshuai.xi //**************************************************************************
841*53ee8cc1Swenshuai.xi // [Function Name]:
842*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusForceToStandby()
843*53ee8cc1Swenshuai.xi // [Description]
844*53ee8cc1Swenshuai.xi //
845*53ee8cc1Swenshuai.xi // [Arguments]:
846*53ee8cc1Swenshuai.xi //
847*53ee8cc1Swenshuai.xi // [Return]:
848*53ee8cc1Swenshuai.xi //
849*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusForceToStandby(void)850*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusForceToStandby(void)
851*53ee8cc1Swenshuai.xi {
852*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4), BIT(4)); // clear received FIFO
853*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(15), BIT(15)); // force enter PM mode
854*53ee8cc1Swenshuai.xi }
855*53ee8cc1Swenshuai.xi
856*53ee8cc1Swenshuai.xi //**************************************************************************
857*53ee8cc1Swenshuai.xi // [Function Name]:
858*53ee8cc1Swenshuai.xi // _mhal_mhl_MHLForceToAttach()
859*53ee8cc1Swenshuai.xi // [Description]:
860*53ee8cc1Swenshuai.xi //
861*53ee8cc1Swenshuai.xi // [Arguments]:
862*53ee8cc1Swenshuai.xi //
863*53ee8cc1Swenshuai.xi // [Return]:
864*53ee8cc1Swenshuai.xi //
865*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHLForceToAttach(void)866*53ee8cc1Swenshuai.xi void _mhal_mhl_MHLForceToAttach(void)
867*53ee8cc1Swenshuai.xi {
868*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(14), BIT(14));
869*53ee8cc1Swenshuai.xi }
870*53ee8cc1Swenshuai.xi
871*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
872*53ee8cc1Swenshuai.xi //**************************************************************************
873*53ee8cc1Swenshuai.xi // [Function Name]:
874*53ee8cc1Swenshuai.xi // _mhal_mhl_AdjustCommonModeResistor()
875*53ee8cc1Swenshuai.xi // [Description]:
876*53ee8cc1Swenshuai.xi //
877*53ee8cc1Swenshuai.xi // [Arguments]:
878*53ee8cc1Swenshuai.xi //
879*53ee8cc1Swenshuai.xi // [Return]:
880*53ee8cc1Swenshuai.xi //
881*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_AdjustCommonModeResistor(MS_U8 ucCbusSelect,MS_BOOL bflag)882*53ee8cc1Swenshuai.xi void _mhal_mhl_AdjustCommonModeResistor(MS_U8 ucCbusSelect, MS_BOOL bflag)
883*53ee8cc1Swenshuai.xi {
884*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
885*53ee8cc1Swenshuai.xi {
886*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
887*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
888*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
889*53ee8cc1Swenshuai.xi break;
890*53ee8cc1Swenshuai.xi #endif
891*53ee8cc1Swenshuai.xi
892*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
893*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
894*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
895*53ee8cc1Swenshuai.xi break;
896*53ee8cc1Swenshuai.xi #endif
897*53ee8cc1Swenshuai.xi
898*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
899*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
900*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
901*53ee8cc1Swenshuai.xi break;
902*53ee8cc1Swenshuai.xi #endif
903*53ee8cc1Swenshuai.xi
904*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
905*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
906*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
907*53ee8cc1Swenshuai.xi break;
908*53ee8cc1Swenshuai.xi #endif
909*53ee8cc1Swenshuai.xi
910*53ee8cc1Swenshuai.xi default:
911*53ee8cc1Swenshuai.xi
912*53ee8cc1Swenshuai.xi break;
913*53ee8cc1Swenshuai.xi };
914*53ee8cc1Swenshuai.xi }
915*53ee8cc1Swenshuai.xi
916*53ee8cc1Swenshuai.xi #endif
917*53ee8cc1Swenshuai.xi
918*53ee8cc1Swenshuai.xi //**************************************************************************
919*53ee8cc1Swenshuai.xi // [Function Name]:
920*53ee8cc1Swenshuai.xi // _mhal_mhl_CheckClockStatus()
921*53ee8cc1Swenshuai.xi // [Description]:
922*53ee8cc1Swenshuai.xi //
923*53ee8cc1Swenshuai.xi // [Arguments]:
924*53ee8cc1Swenshuai.xi //
925*53ee8cc1Swenshuai.xi // [Return]:
926*53ee8cc1Swenshuai.xi //
927*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CheckClockStatus(MS_U8 ucCbusSelect)928*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_CheckClockStatus(MS_U8 ucCbusSelect)
929*53ee8cc1Swenshuai.xi {
930*53ee8cc1Swenshuai.xi MS_BOOL bStable = FALSE;
931*53ee8cc1Swenshuai.xi MS_U16 usClkCount = 0;
932*53ee8cc1Swenshuai.xi
933*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
934*53ee8cc1Swenshuai.xi {
935*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
936*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
937*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P0_3C_L) & 0x0FFF;
938*53ee8cc1Swenshuai.xi
939*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P0_41_L) &BIT(9)) == BIT(9))
940*53ee8cc1Swenshuai.xi {
941*53ee8cc1Swenshuai.xi bStable = TRUE;
942*53ee8cc1Swenshuai.xi
943*53ee8cc1Swenshuai.xi if(usClkCount < CBUS_CLOCK_DETECT_LEVEL)
944*53ee8cc1Swenshuai.xi {
945*53ee8cc1Swenshuai.xi bStable = FALSE;
946*53ee8cc1Swenshuai.xi }
947*53ee8cc1Swenshuai.xi }
948*53ee8cc1Swenshuai.xi
949*53ee8cc1Swenshuai.xi break;
950*53ee8cc1Swenshuai.xi #endif
951*53ee8cc1Swenshuai.xi
952*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
953*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
954*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P1_3C_L) & 0x0FFF;
955*53ee8cc1Swenshuai.xi
956*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P1_41_L) &BIT(9)) == BIT(9))
957*53ee8cc1Swenshuai.xi {
958*53ee8cc1Swenshuai.xi bStable = TRUE;
959*53ee8cc1Swenshuai.xi
960*53ee8cc1Swenshuai.xi if(usClkCount < CBUS_CLOCK_DETECT_LEVEL)
961*53ee8cc1Swenshuai.xi {
962*53ee8cc1Swenshuai.xi bStable = FALSE;
963*53ee8cc1Swenshuai.xi }
964*53ee8cc1Swenshuai.xi }
965*53ee8cc1Swenshuai.xi
966*53ee8cc1Swenshuai.xi break;
967*53ee8cc1Swenshuai.xi #endif
968*53ee8cc1Swenshuai.xi
969*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
970*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
971*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P2_3C_L) & 0x0FFF;
972*53ee8cc1Swenshuai.xi
973*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P2_41_L) &BIT(9)) == BIT(9))
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi bStable = TRUE;
976*53ee8cc1Swenshuai.xi
977*53ee8cc1Swenshuai.xi if(usClkCount < CBUS_CLOCK_DETECT_LEVEL)
978*53ee8cc1Swenshuai.xi {
979*53ee8cc1Swenshuai.xi bStable = FALSE;
980*53ee8cc1Swenshuai.xi }
981*53ee8cc1Swenshuai.xi }
982*53ee8cc1Swenshuai.xi
983*53ee8cc1Swenshuai.xi break;
984*53ee8cc1Swenshuai.xi #endif
985*53ee8cc1Swenshuai.xi
986*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
987*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
988*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P3_3C_L) & 0x0FFF;
989*53ee8cc1Swenshuai.xi
990*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P3_41_L) &BIT(9)) == BIT(9))
991*53ee8cc1Swenshuai.xi {
992*53ee8cc1Swenshuai.xi bStable = TRUE;
993*53ee8cc1Swenshuai.xi
994*53ee8cc1Swenshuai.xi if(usClkCount < CBUS_CLOCK_DETECT_LEVEL)
995*53ee8cc1Swenshuai.xi {
996*53ee8cc1Swenshuai.xi bStable = FALSE;
997*53ee8cc1Swenshuai.xi }
998*53ee8cc1Swenshuai.xi }
999*53ee8cc1Swenshuai.xi
1000*53ee8cc1Swenshuai.xi break;
1001*53ee8cc1Swenshuai.xi #endif
1002*53ee8cc1Swenshuai.xi
1003*53ee8cc1Swenshuai.xi default:
1004*53ee8cc1Swenshuai.xi usClkCount = 0;
1005*53ee8cc1Swenshuai.xi break;
1006*53ee8cc1Swenshuai.xi };
1007*53ee8cc1Swenshuai.xi
1008*53ee8cc1Swenshuai.xi return bStable;
1009*53ee8cc1Swenshuai.xi }
1010*53ee8cc1Swenshuai.xi
1011*53ee8cc1Swenshuai.xi //**************************************************************************
1012*53ee8cc1Swenshuai.xi // [Function Name]:
1013*53ee8cc1Swenshuai.xi // _mhal_mhl_RtermHWControl()
1014*53ee8cc1Swenshuai.xi // [Description]
1015*53ee8cc1Swenshuai.xi //
1016*53ee8cc1Swenshuai.xi // [Arguments]:
1017*53ee8cc1Swenshuai.xi //
1018*53ee8cc1Swenshuai.xi // [Return]:
1019*53ee8cc1Swenshuai.xi //
1020*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_RtermHWControl(MS_U8 ucCbusSelect,MS_BOOL bFlag)1021*53ee8cc1Swenshuai.xi void _mhal_mhl_RtermHWControl(MS_U8 ucCbusSelect, MS_BOOL bFlag)
1022*53ee8cc1Swenshuai.xi {
1023*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
1024*53ee8cc1Swenshuai.xi {
1025*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1026*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
1027*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(8): 0, BIT(8));
1028*53ee8cc1Swenshuai.xi break;
1029*53ee8cc1Swenshuai.xi #endif
1030*53ee8cc1Swenshuai.xi
1031*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1032*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
1033*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(9): 0, BIT(9));
1034*53ee8cc1Swenshuai.xi break;
1035*53ee8cc1Swenshuai.xi #endif
1036*53ee8cc1Swenshuai.xi
1037*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1038*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
1039*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(10): 0, BIT(10));
1040*53ee8cc1Swenshuai.xi break;
1041*53ee8cc1Swenshuai.xi #endif
1042*53ee8cc1Swenshuai.xi
1043*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1044*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
1045*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(11): 0, BIT(11));
1046*53ee8cc1Swenshuai.xi break;
1047*53ee8cc1Swenshuai.xi #endif
1048*53ee8cc1Swenshuai.xi
1049*53ee8cc1Swenshuai.xi default:
1050*53ee8cc1Swenshuai.xi
1051*53ee8cc1Swenshuai.xi break;
1052*53ee8cc1Swenshuai.xi };
1053*53ee8cc1Swenshuai.xi }
1054*53ee8cc1Swenshuai.xi
1055*53ee8cc1Swenshuai.xi //**************************************************************************
1056*53ee8cc1Swenshuai.xi // [Function Name]:
1057*53ee8cc1Swenshuai.xi // _mhal_mhl_ChangeScalerMainMux()
1058*53ee8cc1Swenshuai.xi // [Description]
1059*53ee8cc1Swenshuai.xi //
1060*53ee8cc1Swenshuai.xi // [Arguments]:
1061*53ee8cc1Swenshuai.xi //
1062*53ee8cc1Swenshuai.xi // [Return]:
1063*53ee8cc1Swenshuai.xi //
1064*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ChangeScalerMainMux(MS_BOOL bFlag)1065*53ee8cc1Swenshuai.xi void _mhal_mhl_ChangeScalerMainMux(MS_BOOL bFlag)
1066*53ee8cc1Swenshuai.xi {
1067*53ee8cc1Swenshuai.xi MS_U8 ucScalerMainMux = (R2BYTE(0x102E02) &BMASK(7:4)) >> 4;
1068*53ee8cc1Swenshuai.xi
1069*53ee8cc1Swenshuai.xi if(bFlag)
1070*53ee8cc1Swenshuai.xi {
1071*53ee8cc1Swenshuai.xi if(ucScalerMainMux == MHL_SCALER_MUX_SELECT_DVI)
1072*53ee8cc1Swenshuai.xi {
1073*53ee8cc1Swenshuai.xi W2BYTEMSK(0x102E02, (MHL_SCALER_MUX_SELECT_MHL << 4), BMASK(7:4));
1074*53ee8cc1Swenshuai.xi }
1075*53ee8cc1Swenshuai.xi }
1076*53ee8cc1Swenshuai.xi else
1077*53ee8cc1Swenshuai.xi {
1078*53ee8cc1Swenshuai.xi if(ucScalerMainMux == MHL_SCALER_MUX_SELECT_MHL)
1079*53ee8cc1Swenshuai.xi {
1080*53ee8cc1Swenshuai.xi W2BYTEMSK(0x102E02, (MHL_SCALER_MUX_SELECT_DVI << 4), BMASK(7:4));
1081*53ee8cc1Swenshuai.xi }
1082*53ee8cc1Swenshuai.xi }
1083*53ee8cc1Swenshuai.xi }
1084*53ee8cc1Swenshuai.xi
1085*53ee8cc1Swenshuai.xi //**************************************************************************
1086*53ee8cc1Swenshuai.xi // [Function Name]:
1087*53ee8cc1Swenshuai.xi // _mhal_mhl_AudioPathSelect()
1088*53ee8cc1Swenshuai.xi // [Description]
1089*53ee8cc1Swenshuai.xi //
1090*53ee8cc1Swenshuai.xi // [Arguments]:
1091*53ee8cc1Swenshuai.xi //
1092*53ee8cc1Swenshuai.xi // [Return]:
1093*53ee8cc1Swenshuai.xi //
1094*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_AudioPathSelect(MS_BOOL bMHLPath)1095*53ee8cc1Swenshuai.xi void _mhal_mhl_AudioPathSelect(MS_BOOL bMHLPath)
1096*53ee8cc1Swenshuai.xi {
1097*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_HDMI2_08_L, bMHLPath ?BIT(0) :0, BIT(0)); // [0]: audio source selection, 0: HDMI / 1: MHL
1098*53ee8cc1Swenshuai.xi }
1099*53ee8cc1Swenshuai.xi
1100*53ee8cc1Swenshuai.xi //**************************************************************************
1101*53ee8cc1Swenshuai.xi // [Function Name]:
1102*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusAndClockSelect()
1103*53ee8cc1Swenshuai.xi // [Description]
1104*53ee8cc1Swenshuai.xi //
1105*53ee8cc1Swenshuai.xi // [Arguments]:
1106*53ee8cc1Swenshuai.xi //
1107*53ee8cc1Swenshuai.xi // [Return]:
1108*53ee8cc1Swenshuai.xi //
1109*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusAndClockSelect(MS_U8 ucCbusSelect)1110*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusAndClockSelect(MS_U8 ucCbusSelect)
1111*53ee8cc1Swenshuai.xi {
1112*53ee8cc1Swenshuai.xi MS_U8 bSupportFlag = FALSE;
1113*53ee8cc1Swenshuai.xi MS_U8 ucClockSelect = MHL_DVI_PORT_A;
1114*53ee8cc1Swenshuai.xi
1115*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
1116*53ee8cc1Swenshuai.xi {
1117*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1118*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
1119*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_A;
1120*53ee8cc1Swenshuai.xi bSupportFlag = TRUE;
1121*53ee8cc1Swenshuai.xi
1122*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_45_L, 0x6, BMASK(3:0));
1123*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_47_L, 0x33, BMASK(9:0));
1124*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_18_L, 0x361, BMASK(9:0));
1125*53ee8cc1Swenshuai.xi
1126*53ee8cc1Swenshuai.xi break;
1127*53ee8cc1Swenshuai.xi #endif
1128*53ee8cc1Swenshuai.xi
1129*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1130*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
1131*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_B;
1132*53ee8cc1Swenshuai.xi bSupportFlag = TRUE;
1133*53ee8cc1Swenshuai.xi
1134*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_45_L, 0x6, BMASK(3:0));
1135*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_47_L, 0x33, BMASK(9:0));
1136*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_18_L, 0x361, BMASK(9:0));
1137*53ee8cc1Swenshuai.xi
1138*53ee8cc1Swenshuai.xi break;
1139*53ee8cc1Swenshuai.xi #endif
1140*53ee8cc1Swenshuai.xi
1141*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1142*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
1143*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_C;
1144*53ee8cc1Swenshuai.xi bSupportFlag = TRUE;
1145*53ee8cc1Swenshuai.xi
1146*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_45_L, 0x6, BMASK(3:0));
1147*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_47_L, 0x33, BMASK(9:0));
1148*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_18_L, 0x361, BMASK(9:0));
1149*53ee8cc1Swenshuai.xi
1150*53ee8cc1Swenshuai.xi break;
1151*53ee8cc1Swenshuai.xi #endif
1152*53ee8cc1Swenshuai.xi
1153*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1154*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
1155*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_D;
1156*53ee8cc1Swenshuai.xi bSupportFlag = TRUE;
1157*53ee8cc1Swenshuai.xi
1158*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_45_L, 0x6, BMASK(3:0));
1159*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_47_L, 0x33, BMASK(9:0));
1160*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_18_L, 0x361, BMASK(9:0));
1161*53ee8cc1Swenshuai.xi
1162*53ee8cc1Swenshuai.xi break;
1163*53ee8cc1Swenshuai.xi #endif
1164*53ee8cc1Swenshuai.xi
1165*53ee8cc1Swenshuai.xi default:
1166*53ee8cc1Swenshuai.xi
1167*53ee8cc1Swenshuai.xi break;
1168*53ee8cc1Swenshuai.xi };
1169*53ee8cc1Swenshuai.xi
1170*53ee8cc1Swenshuai.xi if(bSupportFlag)
1171*53ee8cc1Swenshuai.xi {
1172*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_GP_TOP_33_L, ucClockSelect, BMASK(2:0)); // [2:0]: mhl port select
1173*53ee8cc1Swenshuai.xi }
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi
1176*53ee8cc1Swenshuai.xi //**************************************************************************
1177*53ee8cc1Swenshuai.xi // [Function Name]:
1178*53ee8cc1Swenshuai.xi // _mhal_mhl_ForcePullDown100K()
1179*53ee8cc1Swenshuai.xi // [Description]
1180*53ee8cc1Swenshuai.xi //
1181*53ee8cc1Swenshuai.xi // [Arguments]:
1182*53ee8cc1Swenshuai.xi //
1183*53ee8cc1Swenshuai.xi // [Return]:
1184*53ee8cc1Swenshuai.xi //
1185*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ForcePullDown100K(MS_BOOL bEnable)1186*53ee8cc1Swenshuai.xi void _mhal_mhl_ForcePullDown100K(MS_BOOL bEnable)
1187*53ee8cc1Swenshuai.xi {
1188*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, bEnable? BIT(7): 0, BIT(7));
1189*53ee8cc1Swenshuai.xi }
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi //**************************************************************************
1192*53ee8cc1Swenshuai.xi // [Function Name]:
1193*53ee8cc1Swenshuai.xi // _mhal_mhl_GetEMSCOneByteCRC()
1194*53ee8cc1Swenshuai.xi // [Description]
1195*53ee8cc1Swenshuai.xi //
1196*53ee8cc1Swenshuai.xi // [Arguments]:
1197*53ee8cc1Swenshuai.xi //
1198*53ee8cc1Swenshuai.xi // [Return]:
1199*53ee8cc1Swenshuai.xi //
1200*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetEMSCOneByteCRC(MS_U8 ucOpCode)1201*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_GetEMSCOneByteCRC(MS_U8 ucOpCode)
1202*53ee8cc1Swenshuai.xi {
1203*53ee8cc1Swenshuai.xi MS_U8 ucAValue = 0;
1204*53ee8cc1Swenshuai.xi MS_U8 ucBValue = 0;
1205*53ee8cc1Swenshuai.xi MS_U8 ucCommand = BIT(7) |BIT(6) |((ucOpCode &BMASK(2:0)) << 2);
1206*53ee8cc1Swenshuai.xi
1207*53ee8cc1Swenshuai.xi ucAValue = GET_BIT(ucCommand &BIT(7)) +GET_BIT(ucCommand &BIT(5)) +GET_BIT(ucCommand &BIT(3)) +2;
1208*53ee8cc1Swenshuai.xi ucBValue = GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(4)) +GET_BIT(ucCommand &BIT(2)) +2;
1209*53ee8cc1Swenshuai.xi
1210*53ee8cc1Swenshuai.xi if(ucAValue &BIT(0))
1211*53ee8cc1Swenshuai.xi {
1212*53ee8cc1Swenshuai.xi ucCommand |= BIT(1);
1213*53ee8cc1Swenshuai.xi }
1214*53ee8cc1Swenshuai.xi
1215*53ee8cc1Swenshuai.xi if(ucBValue &BIT(0))
1216*53ee8cc1Swenshuai.xi {
1217*53ee8cc1Swenshuai.xi ucCommand |= BIT(0);
1218*53ee8cc1Swenshuai.xi }
1219*53ee8cc1Swenshuai.xi
1220*53ee8cc1Swenshuai.xi return ucCommand;
1221*53ee8cc1Swenshuai.xi }
1222*53ee8cc1Swenshuai.xi
1223*53ee8cc1Swenshuai.xi //**************************************************************************
1224*53ee8cc1Swenshuai.xi // [Function Name]:
1225*53ee8cc1Swenshuai.xi // _mhal_mhl_GetEMSCTwoByteCRC()
1226*53ee8cc1Swenshuai.xi // [Description]
1227*53ee8cc1Swenshuai.xi //
1228*53ee8cc1Swenshuai.xi // [Arguments]:
1229*53ee8cc1Swenshuai.xi //
1230*53ee8cc1Swenshuai.xi // [Return]:
1231*53ee8cc1Swenshuai.xi //
1232*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetEMSCTwoByteCRC(MS_U8 ucOpCode,MS_U8 ucValue)1233*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_GetEMSCTwoByteCRC(MS_U8 ucOpCode, MS_U8 ucValue)
1234*53ee8cc1Swenshuai.xi {
1235*53ee8cc1Swenshuai.xi MS_U8 ucAValue = 0;
1236*53ee8cc1Swenshuai.xi MS_U8 ucBValue = 0;
1237*53ee8cc1Swenshuai.xi MS_U8 ucCValue = 0;
1238*53ee8cc1Swenshuai.xi MS_U16 ucCommand = BIT(13) |(((MS_U16)ucOpCode &BMASK(1:0)) << 11) |(((MS_U16)ucValue &BMASK(7:0)) << 3);
1239*53ee8cc1Swenshuai.xi
1240*53ee8cc1Swenshuai.xi ucAValue = GET_BIT(ucCommand &BIT(15)) +GET_BIT(ucCommand &BIT(13)) +GET_BIT(ucCommand &BIT(12)) +GET_BIT(ucCommand &BIT(11)) +GET_BIT(ucCommand &BIT(8));
1241*53ee8cc1Swenshuai.xi ucAValue = ucAValue +GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(5)) +GET_BIT(ucCommand &BIT(4)) +3;
1242*53ee8cc1Swenshuai.xi ucBValue = GET_BIT(ucCommand &BIT(15)) +GET_BIT(ucCommand &BIT(14)) +GET_BIT(ucCommand &BIT(13)) +GET_BIT(ucCommand &BIT(10)) +GET_BIT(ucCommand &BIT(8));
1243*53ee8cc1Swenshuai.xi ucBValue = ucBValue +GET_BIT(ucCommand &BIT(7)) +GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(3)) +2;
1244*53ee8cc1Swenshuai.xi ucCValue = GET_BIT(ucCommand &BIT(14)) +GET_BIT(ucCommand &BIT(13)) +GET_BIT(ucCommand &BIT(12)) +GET_BIT(ucCommand &BIT(9)) +GET_BIT(ucCommand &BIT(7));
1245*53ee8cc1Swenshuai.xi ucCValue = ucCValue +GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(5)) +2;
1246*53ee8cc1Swenshuai.xi
1247*53ee8cc1Swenshuai.xi if(ucAValue &BIT(0))
1248*53ee8cc1Swenshuai.xi {
1249*53ee8cc1Swenshuai.xi ucCommand |= BIT(2);
1250*53ee8cc1Swenshuai.xi }
1251*53ee8cc1Swenshuai.xi
1252*53ee8cc1Swenshuai.xi if(ucBValue &BIT(0))
1253*53ee8cc1Swenshuai.xi {
1254*53ee8cc1Swenshuai.xi ucCommand |= BIT(1);
1255*53ee8cc1Swenshuai.xi }
1256*53ee8cc1Swenshuai.xi
1257*53ee8cc1Swenshuai.xi if(ucCValue &BIT(0))
1258*53ee8cc1Swenshuai.xi {
1259*53ee8cc1Swenshuai.xi ucCommand |= BIT(0);
1260*53ee8cc1Swenshuai.xi }
1261*53ee8cc1Swenshuai.xi
1262*53ee8cc1Swenshuai.xi return (ucCommand &BMASK(7:0));
1263*53ee8cc1Swenshuai.xi }
1264*53ee8cc1Swenshuai.xi
1265*53ee8cc1Swenshuai.xi //**************************************************************************
1266*53ee8cc1Swenshuai.xi // [Function Name]:
1267*53ee8cc1Swenshuai.xi // _mhal_mhl_GetEMSCPayloadCRC()
1268*53ee8cc1Swenshuai.xi // [Description]
1269*53ee8cc1Swenshuai.xi //
1270*53ee8cc1Swenshuai.xi // [Arguments]:
1271*53ee8cc1Swenshuai.xi //
1272*53ee8cc1Swenshuai.xi // [Return]:
1273*53ee8cc1Swenshuai.xi //
1274*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetEMSCPayloadCRC(MS_U8 ucOpCode,MS_U16 usCRCValus)1275*53ee8cc1Swenshuai.xi MS_U16 _mhal_mhl_GetEMSCPayloadCRC(MS_U8 ucOpCode, MS_U16 usCRCValus)
1276*53ee8cc1Swenshuai.xi {
1277*53ee8cc1Swenshuai.xi MS_U8 ucAValue = 0;
1278*53ee8cc1Swenshuai.xi MS_U8 ucBValue = 0;
1279*53ee8cc1Swenshuai.xi MS_U8 ucCValue = GET_BIT(ucOpCode &BIT(7)) +GET_BIT(ucOpCode &BIT(6)) +GET_BIT(usCRCValus &BIT(6)) +GET_BIT(usCRCValus &BIT(7));
1280*53ee8cc1Swenshuai.xi MS_U8 ucDValue = GET_BIT(ucOpCode &BIT(6)) +GET_BIT(ucOpCode &BIT(5)) +GET_BIT(usCRCValus &BIT(5)) +GET_BIT(usCRCValus &BIT(6));
1281*53ee8cc1Swenshuai.xi MS_U8 ucEValue = GET_BIT(ucOpCode &BIT(5)) +GET_BIT(ucOpCode &BIT(4)) +GET_BIT(usCRCValus &BIT(4)) +GET_BIT(usCRCValus &BIT(5));
1282*53ee8cc1Swenshuai.xi MS_U8 ucFValue = GET_BIT(ucOpCode &BIT(4)) +GET_BIT(ucOpCode &BIT(3)) +GET_BIT(usCRCValus &BIT(3)) +GET_BIT(usCRCValus &BIT(4));
1283*53ee8cc1Swenshuai.xi MS_U8 ucGValue = GET_BIT(ucOpCode &BIT(3)) +GET_BIT(ucOpCode &BIT(2)) +GET_BIT(usCRCValus &BIT(2)) +GET_BIT(usCRCValus &BIT(3));
1284*53ee8cc1Swenshuai.xi MS_U8 ucHValue = GET_BIT(ucOpCode &BIT(2)) +GET_BIT(ucOpCode &BIT(1)) +GET_BIT(usCRCValus &BIT(1)) +GET_BIT(usCRCValus &BIT(2));
1285*53ee8cc1Swenshuai.xi MS_U8 ucIValue = GET_BIT(ucOpCode &BIT(1)) +GET_BIT(ucOpCode &BIT(0)) +GET_BIT(usCRCValus &BIT(0)) +GET_BIT(usCRCValus &BIT(1)) +GET_BIT(usCRCValus &BIT(15));
1286*53ee8cc1Swenshuai.xi MS_U8 ucJValue = GET_BIT(ucOpCode &BIT(0)) +GET_BIT(usCRCValus &BIT(0)) +GET_BIT(usCRCValus &BIT(14));
1287*53ee8cc1Swenshuai.xi MS_U8 ucKValue = GET_BIT(usCRCValus &BIT(13));
1288*53ee8cc1Swenshuai.xi MS_U8 ucLValue = GET_BIT(usCRCValus &BIT(12));
1289*53ee8cc1Swenshuai.xi MS_U8 ucMValue = GET_BIT(usCRCValus &BIT(11));
1290*53ee8cc1Swenshuai.xi MS_U8 ucNValue = GET_BIT(usCRCValus &BIT(10));
1291*53ee8cc1Swenshuai.xi MS_U8 ucOValue = GET_BIT(usCRCValus &BIT(9));
1292*53ee8cc1Swenshuai.xi MS_U8 ucPValue = 0;
1293*53ee8cc1Swenshuai.xi MS_U16 usCommand = 0;
1294*53ee8cc1Swenshuai.xi
1295*53ee8cc1Swenshuai.xi ucAValue = GET_BIT(ucOpCode &BIT(7)) +GET_BIT(ucOpCode &BIT(6)) +GET_BIT(ucOpCode &BIT(5)) +GET_BIT(ucOpCode &BIT(4)) +GET_BIT(ucOpCode &BIT(3)) +GET_BIT(ucOpCode &BIT(2)) +GET_BIT(ucOpCode &BIT(1)) +GET_BIT(ucOpCode &BIT(0));
1296*53ee8cc1Swenshuai.xi ucAValue = ucAValue +GET_BIT(usCRCValus &BIT(0)) +GET_BIT(usCRCValus &BIT(1)) +GET_BIT(usCRCValus &BIT(2)) +GET_BIT(usCRCValus &BIT(3)) +GET_BIT(usCRCValus &BIT(4)) +GET_BIT(usCRCValus &BIT(5)) +GET_BIT(usCRCValus &BIT(6)) +GET_BIT(usCRCValus &BIT(7));
1297*53ee8cc1Swenshuai.xi ucBValue = GET_BIT(ucOpCode &BIT(6)) +GET_BIT(ucOpCode &BIT(5)) +GET_BIT(ucOpCode &BIT(4)) +GET_BIT(ucOpCode &BIT(3)) +GET_BIT(ucOpCode &BIT(2)) +GET_BIT(ucOpCode &BIT(1)) +GET_BIT(ucOpCode &BIT(0));
1298*53ee8cc1Swenshuai.xi ucBValue = ucBValue +GET_BIT(usCRCValus &BIT(0)) +GET_BIT(usCRCValus &BIT(1)) +GET_BIT(usCRCValus &BIT(2)) +GET_BIT(usCRCValus &BIT(3)) +GET_BIT(usCRCValus &BIT(4)) +GET_BIT(usCRCValus &BIT(5)) +GET_BIT(usCRCValus &BIT(6));
1299*53ee8cc1Swenshuai.xi ucPValue = ucAValue +GET_BIT(usCRCValus &BIT(8));
1300*53ee8cc1Swenshuai.xi
1301*53ee8cc1Swenshuai.xi if(ucAValue &BIT(0))
1302*53ee8cc1Swenshuai.xi {
1303*53ee8cc1Swenshuai.xi usCommand |= BIT(15);
1304*53ee8cc1Swenshuai.xi }
1305*53ee8cc1Swenshuai.xi
1306*53ee8cc1Swenshuai.xi if(ucBValue &BIT(0))
1307*53ee8cc1Swenshuai.xi {
1308*53ee8cc1Swenshuai.xi usCommand |= BIT(14);
1309*53ee8cc1Swenshuai.xi }
1310*53ee8cc1Swenshuai.xi
1311*53ee8cc1Swenshuai.xi if(ucCValue &BIT(0))
1312*53ee8cc1Swenshuai.xi {
1313*53ee8cc1Swenshuai.xi usCommand |= BIT(13);
1314*53ee8cc1Swenshuai.xi }
1315*53ee8cc1Swenshuai.xi
1316*53ee8cc1Swenshuai.xi if(ucDValue &BIT(0))
1317*53ee8cc1Swenshuai.xi {
1318*53ee8cc1Swenshuai.xi usCommand |= BIT(12);
1319*53ee8cc1Swenshuai.xi }
1320*53ee8cc1Swenshuai.xi
1321*53ee8cc1Swenshuai.xi if(ucEValue &BIT(0))
1322*53ee8cc1Swenshuai.xi {
1323*53ee8cc1Swenshuai.xi usCommand |= BIT(11);
1324*53ee8cc1Swenshuai.xi }
1325*53ee8cc1Swenshuai.xi
1326*53ee8cc1Swenshuai.xi if(ucFValue &BIT(0))
1327*53ee8cc1Swenshuai.xi {
1328*53ee8cc1Swenshuai.xi usCommand |= BIT(10);
1329*53ee8cc1Swenshuai.xi }
1330*53ee8cc1Swenshuai.xi
1331*53ee8cc1Swenshuai.xi if(ucGValue &BIT(0))
1332*53ee8cc1Swenshuai.xi {
1333*53ee8cc1Swenshuai.xi usCommand |= BIT(9);
1334*53ee8cc1Swenshuai.xi }
1335*53ee8cc1Swenshuai.xi
1336*53ee8cc1Swenshuai.xi if(ucHValue &BIT(0))
1337*53ee8cc1Swenshuai.xi {
1338*53ee8cc1Swenshuai.xi usCommand |= BIT(8);
1339*53ee8cc1Swenshuai.xi }
1340*53ee8cc1Swenshuai.xi
1341*53ee8cc1Swenshuai.xi if(ucIValue &BIT(0))
1342*53ee8cc1Swenshuai.xi {
1343*53ee8cc1Swenshuai.xi usCommand |= BIT(7);
1344*53ee8cc1Swenshuai.xi }
1345*53ee8cc1Swenshuai.xi
1346*53ee8cc1Swenshuai.xi if(ucJValue &BIT(0))
1347*53ee8cc1Swenshuai.xi {
1348*53ee8cc1Swenshuai.xi usCommand |= BIT(6);
1349*53ee8cc1Swenshuai.xi }
1350*53ee8cc1Swenshuai.xi
1351*53ee8cc1Swenshuai.xi if(ucKValue &BIT(0))
1352*53ee8cc1Swenshuai.xi {
1353*53ee8cc1Swenshuai.xi usCommand |= BIT(5);
1354*53ee8cc1Swenshuai.xi }
1355*53ee8cc1Swenshuai.xi
1356*53ee8cc1Swenshuai.xi if(ucLValue &BIT(0))
1357*53ee8cc1Swenshuai.xi {
1358*53ee8cc1Swenshuai.xi usCommand |= BIT(4);
1359*53ee8cc1Swenshuai.xi }
1360*53ee8cc1Swenshuai.xi
1361*53ee8cc1Swenshuai.xi if(ucMValue &BIT(0))
1362*53ee8cc1Swenshuai.xi {
1363*53ee8cc1Swenshuai.xi usCommand |= BIT(3);
1364*53ee8cc1Swenshuai.xi }
1365*53ee8cc1Swenshuai.xi
1366*53ee8cc1Swenshuai.xi if(ucNValue &BIT(0))
1367*53ee8cc1Swenshuai.xi {
1368*53ee8cc1Swenshuai.xi usCommand |= BIT(2);
1369*53ee8cc1Swenshuai.xi }
1370*53ee8cc1Swenshuai.xi
1371*53ee8cc1Swenshuai.xi if(ucOValue &BIT(0))
1372*53ee8cc1Swenshuai.xi {
1373*53ee8cc1Swenshuai.xi usCommand |= BIT(1);
1374*53ee8cc1Swenshuai.xi }
1375*53ee8cc1Swenshuai.xi
1376*53ee8cc1Swenshuai.xi if(ucPValue &BIT(0))
1377*53ee8cc1Swenshuai.xi {
1378*53ee8cc1Swenshuai.xi usCommand |= BIT(0);
1379*53ee8cc1Swenshuai.xi }
1380*53ee8cc1Swenshuai.xi
1381*53ee8cc1Swenshuai.xi return usCommand;
1382*53ee8cc1Swenshuai.xi }
1383*53ee8cc1Swenshuai.xi
1384*53ee8cc1Swenshuai.xi //**************************************************************************
1385*53ee8cc1Swenshuai.xi // [Function Name]:
1386*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusInitialSetting()
1387*53ee8cc1Swenshuai.xi // [Description]
1388*53ee8cc1Swenshuai.xi //
1389*53ee8cc1Swenshuai.xi // [Arguments]:
1390*53ee8cc1Swenshuai.xi //
1391*53ee8cc1Swenshuai.xi // [Return]:
1392*53ee8cc1Swenshuai.xi //
1393*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusInitialSetting(void)1394*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusInitialSetting(void)
1395*53ee8cc1Swenshuai.xi {
1396*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_69, 0x35, BMASK(6:4)| BMASK(2:0)); // [6:4]: rasing pattern type, [2:0]: deglitch after reorder
1397*53ee8cc1Swenshuai.xi
1398*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4C, 0x8880, BMASK(15:4));
1399*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4D, 0x8B14, BMASK(15:1));
1400*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4E, 0x001C, BMASK(15:0));
1401*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_51, 0x0100, BMASK(15:0));
1402*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0200, BMASK(15:0));
1403*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BMASK(14:13), BMASK(14:13)); // [14:13]
1404*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BMASK(14:13), BMASK(14:13));
1405*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_55, 0, BMASK(15:4)); //[7:0]
1406*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4F, 0x00F0, BMASK(15:0)); // [7:4]:reg_ecbss_afe_tx_dri_step
1407*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_78, BIT(0), BIT(0));
1408*53ee8cc1Swenshuai.xi
1409*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_0E, 8, BMASK(4:0));
1410*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2D, BIT(3), BIT(3));
1411*53ee8cc1Swenshuai.xi
1412*53ee8cc1Swenshuai.xi //auto reset turn on
1413*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_7F, BIT(2), BIT(2)); // [2]:reg_rst_aft_clklck_en
1414*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_00, BMASK(4:3), BMASK(4:3)); // [4]:reg_rst_aft_fail_en, [3]:reg_rst_aft_clklck_en
1415*53ee8cc1Swenshuai.xi
1416*53ee8cc1Swenshuai.xi // ECbus initial
1417*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_02, BIT(7), BMASK(13:8)| BIT(7)); // [7]
1418*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6D, BIT(5), BMASK(6:5));
1419*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_57, 0x700, BMASK(11:8)); // [11:8]:
1420*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_68, 0x30, BMASK(6:4)); // [6:4]: pre-deglitch
1421*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_69, 0x50, BMASK(6:4)| BMASK(2:0)); // [6:4]: rasing pattern type, [2:0]: deglitch after reorder
1422*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_65, 0x08, BMASK(5:0)); // [5:0]: reg_dat_lsb_mask; after analog rwa data deglicth,re-order,the lsb data 1 will be mask
1423*53ee8cc1Swenshuai.xi
1424*53ee8cc1Swenshuai.xi //U02 ECO item setting
1425*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_77, (_mhal_mhl_GetEMSCOneByteCRC(5) << 8)| _mhal_mhl_GetEMSCOneByteCRC(4), BMASK(15:0)); // [15:8]:EMSC neck, [7:0]:EMSC ack
1426*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_78, (_mhal_mhl_GetEMSCOneByteCRC(7) << 8)| _mhal_mhl_GetEMSCOneByteCRC(6), BMASK(15:0)); // [15:8]:Dstart, [7:0]:grant
1427*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_79, BIT(11)| (_mhal_mhl_GetEMSCTwoByteCRC(1, 1) << 3)| (_mhal_mhl_GetEMSCTwoByteCRC(1, 2) << 6), BIT(11)| BMASK(8:6)| BMASK(5:3)); // [8:6]:EMSC errsum cmd CRC, [5:3]:EMSC errCRC cmd CRC
1428*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_13, BIT(4), BIT(4)); //
1429*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_51, BIT(11), BIT(11)); //
1430*53ee8cc1Swenshuai.xi
1431*53ee8cc1Swenshuai.xi //eCBUS fsm timing
1432*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_04, 0xE0E, BMASK(14:8)| BMASK(6:0)); // [14:8]: reg_t_sink_cal, [6:0]: reg_t_snk_cal 1; sink sends eCBUS clock after detecting eCBUS clock form source.
1433*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_06, 0x1C00, BMASK(14:8)); // [14:8]: reg_t_snk_tdm;
1434*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_03, BMASK(15:14), BMASK(15:14)); // [15]:reg_wait_tdm_timer_dis [14]:reg_wait_comma2_timer_dis
1435*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_07, 0x104, BMASK(14:8)| BMASK(6:0)); // [14:8]: reg_t_snk_tdm;
1436*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_3F, 0, BMASK(1:0)); //
1437*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_48, 0, BMASK(2:0)); //
1438*53ee8cc1Swenshuai.xi
1439*53ee8cc1Swenshuai.xi //clock detect setting
1440*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_70, 0x032B, BMASK(15:0)); // [15:0]:reg_crlock_mid; the CR lock reference value
1441*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_71, 0x0C04, BMASK(15:0)); // [15:8]:reg_crlock_thr, the CR lock reference failure threshold range; [7:0]:reg_crlock_thr, the CR lock reference correct threshold range;
1442*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_72, 0x0007, BMASK(15:0)); // [12:8]:reg_cr_unlock_num, clock unlock threshold; [4:0]:reg_cr_lock_num; CR lock success threshold time.
1443*53ee8cc1Swenshuai.xi
1444*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1445*53ee8cc1Swenshuai.xi //auto training testing
1446*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_5C, 0x010A, BMASK(15:0)); // [10:8]:reg_txloc_golden_lowr_tol, [5:0]:reg_txloc_golden_lower,
1447*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_66, 0x2117, BMASK(15:0)); // [14:12]:reg_txloc_golden2_tol, [10:8]:reg_txloc_rev_golden_tol, [5:0]:reg_txloc_rev_golden
1448*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_67, 0x0403, BMASK(15:0)); // [14:12]:reg_val_aft_adj_ok, [10:8]:reg_txloc_txdelay_add, [6:4]:reg_flow_retry_r, [2:0]:reg_flow_retry
1449*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_69, BIT(10), BMASK(11:10)); // [11:10]:reg_txloc_set_time
1450*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6A, 0xf117, BMASK(15:0)); // [15:12]:reg_txloc_lck_thr, [10:8]:reg_txloc_golden_tol, [5:0]:ret_txloc_golden
1451*53ee8cc1Swenshuai.xi #else
1452*53ee8cc1Swenshuai.xi // Skip atop training
1453*53ee8cc1Swenshuai.xi // REG_PM_MHL_CBUS2_4A [14]tx_rep_pd_ove = 1 [13]tx_rep_pd_ov [8]:tx_width_ove = 1 [7:4]:tx_width_ov
1454*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(8)| 0x22, BIT(8)| BMASK(7:4));
1455*53ee8cc1Swenshuai.xi
1456*53ee8cc1Swenshuai.xi // REG_PM_MHL_CBUS2_4B ,[14]tx_pd_ove = 1 [13]tx_pd_ov [8]:tx_delay_ove = 1 [7:4]:tx_delay_ov
1457*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BIT(8)| 0x00, BIT(8)| BMASK(7:4));
1458*53ee8cc1Swenshuai.xi
1459*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_6C, 0x8000, BMASK(15:8));
1460*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6D, BIT(8), BIT(8));
1461*53ee8cc1Swenshuai.xi
1462*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6C, 0x0000, BMASK(15:0));
1463*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_04, (30 << 8), BMASK(14:8));
1464*53ee8cc1Swenshuai.xi #endif
1465*53ee8cc1Swenshuai.xi }
1466*53ee8cc1Swenshuai.xi
1467*53ee8cc1Swenshuai.xi //**************************************************************************
1468*53ee8cc1Swenshuai.xi // [Function Name]:
1469*53ee8cc1Swenshuai.xi // _mhal_mhl_SetECbusStateChangeInterrupt()
1470*53ee8cc1Swenshuai.xi // [Description]
1471*53ee8cc1Swenshuai.xi //
1472*53ee8cc1Swenshuai.xi // [Arguments]:
1473*53ee8cc1Swenshuai.xi //
1474*53ee8cc1Swenshuai.xi // [Return]:
1475*53ee8cc1Swenshuai.xi //
1476*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_SetECbusStateChangeInterrupt(MS_BOOL bEnableFlag)1477*53ee8cc1Swenshuai.xi void _mhal_mhl_SetECbusStateChangeInterrupt(MS_BOOL bEnableFlag)
1478*53ee8cc1Swenshuai.xi {
1479*53ee8cc1Swenshuai.xi if(bEnableFlag)
1480*53ee8cc1Swenshuai.xi {
1481*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_36, 0, BIT(0)); // Ecbus state change int mask
1482*53ee8cc1Swenshuai.xi }
1483*53ee8cc1Swenshuai.xi else
1484*53ee8cc1Swenshuai.xi {
1485*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_36, BIT(0), BIT(0)); // Ecbus state change int mask
1486*53ee8cc1Swenshuai.xi }
1487*53ee8cc1Swenshuai.xi
1488*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(0), BIT(0)); // Ecbus state change int clear
1489*53ee8cc1Swenshuai.xi }
1490*53ee8cc1Swenshuai.xi
1491*53ee8cc1Swenshuai.xi //**************************************************************************
1492*53ee8cc1Swenshuai.xi // [Function Name]:
1493*53ee8cc1Swenshuai.xi // _mhal_mhl_SetEMSCReceiveInterrupt()
1494*53ee8cc1Swenshuai.xi // [Description]
1495*53ee8cc1Swenshuai.xi //
1496*53ee8cc1Swenshuai.xi // [Arguments]:
1497*53ee8cc1Swenshuai.xi //
1498*53ee8cc1Swenshuai.xi // [Return]:
1499*53ee8cc1Swenshuai.xi //
1500*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_SetEMSCReceiveInterrupt(MS_BOOL bEnableFlag)1501*53ee8cc1Swenshuai.xi void _mhal_mhl_SetEMSCReceiveInterrupt(MS_BOOL bEnableFlag)
1502*53ee8cc1Swenshuai.xi {
1503*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_36, bEnableFlag? 0: BIT(12), BIT(12)); // eMSC receive int mask
1504*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(12), BIT(12)); // eMSC receive int clear
1505*53ee8cc1Swenshuai.xi }
1506*53ee8cc1Swenshuai.xi
1507*53ee8cc1Swenshuai.xi //**************************************************************************
1508*53ee8cc1Swenshuai.xi // [Function Name]:
1509*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusConnectCheckEnable()
1510*53ee8cc1Swenshuai.xi // [Description]
1511*53ee8cc1Swenshuai.xi //
1512*53ee8cc1Swenshuai.xi // [Arguments]:
1513*53ee8cc1Swenshuai.xi //
1514*53ee8cc1Swenshuai.xi // [Return]:
1515*53ee8cc1Swenshuai.xi //
1516*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusConnectCheckEnable(MS_BOOL bEnableFlag)1517*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusConnectCheckEnable(MS_BOOL bEnableFlag)
1518*53ee8cc1Swenshuai.xi {
1519*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_0B, bEnableFlag? MHL_CBUS_CONNECT_CHECK_VALUE: 0, BMASK(15:0)); // [15:0]: Disable connection check
1520*53ee8cc1Swenshuai.xi }
1521*53ee8cc1Swenshuai.xi
1522*53ee8cc1Swenshuai.xi //**************************************************************************
1523*53ee8cc1Swenshuai.xi // [Function Name]:
1524*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusEnableSetting()
1525*53ee8cc1Swenshuai.xi // [Description]
1526*53ee8cc1Swenshuai.xi //
1527*53ee8cc1Swenshuai.xi // [Arguments]:
1528*53ee8cc1Swenshuai.xi //
1529*53ee8cc1Swenshuai.xi // [Return]:
1530*53ee8cc1Swenshuai.xi //
1531*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusEnableSetting(MS_BOOL bEnableFlag)1532*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusEnableSetting(MS_BOOL bEnableFlag)
1533*53ee8cc1Swenshuai.xi {
1534*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4D, bEnableFlag? 0: BIT(0), BIT(0)); // ECbus PLL pd
1535*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_55, bEnableFlag? 0: BIT(14), BIT(14)); // Rx power down
1536*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_57, bEnableFlag? BIT(3): BIT(2), BMASK(3:2)); //
1537*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6F, bEnableFlag? BIT(8): 0, BIT(8)); // ECbus clock detect
1538*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, bEnableFlag? 0: BIT(13), BIT(13));
1539*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, bEnableFlag? 0: BIT(13), BIT(13));
1540*53ee8cc1Swenshuai.xi
1541*53ee8cc1Swenshuai.xi if(bEnableFlag)
1542*53ee8cc1Swenshuai.xi {
1543*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(13), BIT(13)); // [13]: ECbus on
1544*53ee8cc1Swenshuai.xi }
1545*53ee8cc1Swenshuai.xi else
1546*53ee8cc1Swenshuai.xi {
1547*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(14), BIT(14)); // [14]: ECbus off
1548*53ee8cc1Swenshuai.xi }
1549*53ee8cc1Swenshuai.xi }
1550*53ee8cc1Swenshuai.xi
1551*53ee8cc1Swenshuai.xi //**************************************************************************
1552*53ee8cc1Swenshuai.xi // [Function Name]:
1553*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusBISTSetting()
1554*53ee8cc1Swenshuai.xi // [Description]
1555*53ee8cc1Swenshuai.xi //
1556*53ee8cc1Swenshuai.xi // [Arguments]:
1557*53ee8cc1Swenshuai.xi //
1558*53ee8cc1Swenshuai.xi // [Return]:
1559*53ee8cc1Swenshuai.xi //
1560*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusBISTSetting(MS_BOOL bEnableFlag,stMHL_BIST_MODE_INFO * pBISTParameterInfo)1561*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusBISTSetting(MS_BOOL bEnableFlag, stMHL_BIST_MODE_INFO *pBISTParameterInfo)
1562*53ee8cc1Swenshuai.xi {
1563*53ee8cc1Swenshuai.xi if(bEnableFlag)
1564*53ee8cc1Swenshuai.xi {
1565*53ee8cc1Swenshuai.xi if(pBISTParameterInfo->bBISTeCbusRxFlag || pBISTParameterInfo->bBISTeCbusTxFlag)
1566*53ee8cc1Swenshuai.xi {
1567*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1568*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, 0, BIT(13));
1569*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, 0, BIT(13));
1570*53ee8cc1Swenshuai.xi #else
1571*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(14), BMASK(14:13));
1572*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BIT(14), BMASK(14:13));
1573*53ee8cc1Swenshuai.xi #endif
1574*53ee8cc1Swenshuai.xi }
1575*53ee8cc1Swenshuai.xi else
1576*53ee8cc1Swenshuai.xi {
1577*53ee8cc1Swenshuai.xi switch(pBISTParameterInfo->ucBISTImpedanceMode)
1578*53ee8cc1Swenshuai.xi {
1579*53ee8cc1Swenshuai.xi case MHL_BIST_IMPEDANCE_AV_LINK_TX_LOW:
1580*53ee8cc1Swenshuai.xi case MHL_BIST_IMPEDANCE_ECBUS_S_RX:
1581*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BMASK(14:13), BMASK(14:13));
1582*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BMASK(14:13), BMASK(14:13));
1583*53ee8cc1Swenshuai.xi break;
1584*53ee8cc1Swenshuai.xi
1585*53ee8cc1Swenshuai.xi case MHL_BIST_IMPEDANCE_AV_LINK_TX_HIGH:
1586*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_56, BIT(8), BIT(8));
1587*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BMASK(14:13), BMASK(14:13));
1588*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, 0, BMASK(14:13));
1589*53ee8cc1Swenshuai.xi break;
1590*53ee8cc1Swenshuai.xi
1591*53ee8cc1Swenshuai.xi default:
1592*53ee8cc1Swenshuai.xi break;
1593*53ee8cc1Swenshuai.xi };
1594*53ee8cc1Swenshuai.xi }
1595*53ee8cc1Swenshuai.xi }
1596*53ee8cc1Swenshuai.xi else
1597*53ee8cc1Swenshuai.xi {
1598*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(14), BIT(14)); // [14]: ECbus off
1599*53ee8cc1Swenshuai.xi
1600*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1601*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(13), BIT(13));
1602*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BIT(13), BIT(13));
1603*53ee8cc1Swenshuai.xi #else
1604*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BMASK(14:13), BMASK(14:13));
1605*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BMASK(14:13), BMASK(14:13));
1606*53ee8cc1Swenshuai.xi #endif
1607*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0, BIT(8));
1608*53ee8cc1Swenshuai.xi }
1609*53ee8cc1Swenshuai.xi }
1610*53ee8cc1Swenshuai.xi
1611*53ee8cc1Swenshuai.xi //**************************************************************************
1612*53ee8cc1Swenshuai.xi // [Function Name]:
1613*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusDmuxEnable()
1614*53ee8cc1Swenshuai.xi // [Description]
1615*53ee8cc1Swenshuai.xi //
1616*53ee8cc1Swenshuai.xi // [Arguments]:
1617*53ee8cc1Swenshuai.xi //
1618*53ee8cc1Swenshuai.xi // [Return]:
1619*53ee8cc1Swenshuai.xi //
1620*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusDmuxEnable(MS_BOOL bEnableFlag)1621*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusDmuxEnable(MS_BOOL bEnableFlag)
1622*53ee8cc1Swenshuai.xi {
1623*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4F, bEnableFlag? BIT(3): 0, BIT(3)); // [3]: Enable ECbus dmux
1624*53ee8cc1Swenshuai.xi }
1625*53ee8cc1Swenshuai.xi
1626*53ee8cc1Swenshuai.xi //**************************************************************************
1627*53ee8cc1Swenshuai.xi // [Function Name]:
1628*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusEngineReset()
1629*53ee8cc1Swenshuai.xi // [Description]
1630*53ee8cc1Swenshuai.xi //
1631*53ee8cc1Swenshuai.xi // [Arguments]:
1632*53ee8cc1Swenshuai.xi //
1633*53ee8cc1Swenshuai.xi // [Return]:
1634*53ee8cc1Swenshuai.xi //
1635*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusEngineReset(void)1636*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusEngineReset(void)
1637*53ee8cc1Swenshuai.xi {
1638*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(0), BIT(0));
1639*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(0));
1640*53ee8cc1Swenshuai.xi }
1641*53ee8cc1Swenshuai.xi
1642*53ee8cc1Swenshuai.xi //**************************************************************************
1643*53ee8cc1Swenshuai.xi // [Function Name]:
1644*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusStateReset()
1645*53ee8cc1Swenshuai.xi // [Description]
1646*53ee8cc1Swenshuai.xi //
1647*53ee8cc1Swenshuai.xi // [Arguments]:
1648*53ee8cc1Swenshuai.xi //
1649*53ee8cc1Swenshuai.xi // [Return]:
1650*53ee8cc1Swenshuai.xi //
1651*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusStateReset(void)1652*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusStateReset(void)
1653*53ee8cc1Swenshuai.xi {
1654*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_00, BMASK(1:0), BMASK(1:0)); // ECbus state reset
1655*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_00, 0, BMASK(1:0)); // ECbus state reset
1656*53ee8cc1Swenshuai.xi }
1657*53ee8cc1Swenshuai.xi
1658*53ee8cc1Swenshuai.xi //**************************************************************************
1659*53ee8cc1Swenshuai.xi // [Function Name]:
1660*53ee8cc1Swenshuai.xi // _mhal_mhl_SetShortReadAddress()
1661*53ee8cc1Swenshuai.xi // [Description]
1662*53ee8cc1Swenshuai.xi //
1663*53ee8cc1Swenshuai.xi // [Arguments]:
1664*53ee8cc1Swenshuai.xi //
1665*53ee8cc1Swenshuai.xi // [Return]:
1666*53ee8cc1Swenshuai.xi //
1667*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_SetShortReadAddress(MS_BOOL bECbusEnable)1668*53ee8cc1Swenshuai.xi void _mhal_mhl_SetShortReadAddress(MS_BOOL bECbusEnable)
1669*53ee8cc1Swenshuai.xi {
1670*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_17, bECbusEnable? 0x7000: 0x0800, BMASK(15:8)); // [15:8]: reg_ddc_hdcp_short_read_address
1671*53ee8cc1Swenshuai.xi }
1672*53ee8cc1Swenshuai.xi
1673*53ee8cc1Swenshuai.xi //**************************************************************************
1674*53ee8cc1Swenshuai.xi // [Function Name]:
1675*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusStateOverwrite()
1676*53ee8cc1Swenshuai.xi // [Description]
1677*53ee8cc1Swenshuai.xi //
1678*53ee8cc1Swenshuai.xi // [Arguments]:
1679*53ee8cc1Swenshuai.xi //
1680*53ee8cc1Swenshuai.xi // [Return]:
1681*53ee8cc1Swenshuai.xi //
1682*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusStateOverwrite(MS_BOOL bEnableFlag)1683*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusStateOverwrite(MS_BOOL bEnableFlag)
1684*53ee8cc1Swenshuai.xi {
1685*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_03, bEnableFlag? (BIT(8)| 0x8): 0, BIT(8)| BMASK(3:0));
1686*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_0F, bEnableFlag? (BIT(8)| 0x4): 0, BIT(8)| BMASK(3:0));
1687*53ee8cc1Swenshuai.xi }
1688*53ee8cc1Swenshuai.xi
1689*53ee8cc1Swenshuai.xi //**************************************************************************
1690*53ee8cc1Swenshuai.xi // [Function Name]:
1691*53ee8cc1Swenshuai.xi // _mhal_mhl_Version3PhyEnable()
1692*53ee8cc1Swenshuai.xi // [Description]
1693*53ee8cc1Swenshuai.xi //
1694*53ee8cc1Swenshuai.xi // [Arguments]:
1695*53ee8cc1Swenshuai.xi //
1696*53ee8cc1Swenshuai.xi // [Return]:
1697*53ee8cc1Swenshuai.xi //
1698*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_Version3PhyEnable(MS_U8 ucCbusSelect,MS_BOOL bEnableFlag)1699*53ee8cc1Swenshuai.xi void _mhal_mhl_Version3PhyEnable(MS_U8 ucCbusSelect, MS_BOOL bEnableFlag)
1700*53ee8cc1Swenshuai.xi {
1701*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
1702*53ee8cc1Swenshuai.xi {
1703*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1704*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
1705*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1706*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_73_L, bEnableFlag? MHL_EQ_30_SETTING_VALUE: MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
1707*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6C_L, ((bEnableFlag? MHL_ICONTROL_PD_30_VALUE: MHL_ICONTROL_PD_20_VALUE) << 9), BMASK(13:9)); // I-control PD
1708*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1709*53ee8cc1Swenshuai.xi
1710*53ee8cc1Swenshuai.xi break;
1711*53ee8cc1Swenshuai.xi #endif
1712*53ee8cc1Swenshuai.xi
1713*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1714*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
1715*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1716*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_73_L, bEnableFlag? MHL_EQ_30_SETTING_VALUE: MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
1717*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6C_L, ((bEnableFlag? MHL_ICONTROL_PD_30_VALUE: MHL_ICONTROL_PD_20_VALUE) << 9), BMASK(13:9)); // I-control PD
1718*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1719*53ee8cc1Swenshuai.xi
1720*53ee8cc1Swenshuai.xi break;
1721*53ee8cc1Swenshuai.xi #endif
1722*53ee8cc1Swenshuai.xi
1723*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1724*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
1725*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1726*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_73_L, bEnableFlag? MHL_EQ_30_SETTING_VALUE: MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
1727*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6C_L, ((bEnableFlag? MHL_ICONTROL_PD_30_VALUE: MHL_ICONTROL_PD_20_VALUE) << 9), BMASK(13:9)); // I-control PD
1728*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1729*53ee8cc1Swenshuai.xi
1730*53ee8cc1Swenshuai.xi break;
1731*53ee8cc1Swenshuai.xi #endif
1732*53ee8cc1Swenshuai.xi
1733*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1734*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
1735*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1736*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_73_L, bEnableFlag? MHL_EQ_30_SETTING_VALUE: MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
1737*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6C_L, ((bEnableFlag? MHL_ICONTROL_PD_30_VALUE: MHL_ICONTROL_PD_20_VALUE) << 9), BMASK(13:9)); // I-control PD
1738*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1739*53ee8cc1Swenshuai.xi
1740*53ee8cc1Swenshuai.xi break;
1741*53ee8cc1Swenshuai.xi #endif
1742*53ee8cc1Swenshuai.xi
1743*53ee8cc1Swenshuai.xi default:
1744*53ee8cc1Swenshuai.xi
1745*53ee8cc1Swenshuai.xi break;
1746*53ee8cc1Swenshuai.xi };
1747*53ee8cc1Swenshuai.xi }
1748*53ee8cc1Swenshuai.xi
1749*53ee8cc1Swenshuai.xi //**************************************************************************
1750*53ee8cc1Swenshuai.xi // [Function Name]:
1751*53ee8cc1Swenshuai.xi // _mhal_mhl_SetECbusBISTTrigger()
1752*53ee8cc1Swenshuai.xi // [Description]
1753*53ee8cc1Swenshuai.xi //
1754*53ee8cc1Swenshuai.xi // [Arguments]:
1755*53ee8cc1Swenshuai.xi //
1756*53ee8cc1Swenshuai.xi // [Return]:
1757*53ee8cc1Swenshuai.xi //
1758*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_SetECbusBISTTrigger(MS_BOOL bEnableFlag,MS_BOOL bBISTeCbusTxFlag,MS_BOOL bBISTeCbusRxFlag)1759*53ee8cc1Swenshuai.xi void _mhal_mhl_SetECbusBISTTrigger(MS_BOOL bEnableFlag, MS_BOOL bBISTeCbusTxFlag, MS_BOOL bBISTeCbusRxFlag)
1760*53ee8cc1Swenshuai.xi {
1761*53ee8cc1Swenshuai.xi if(bBISTeCbusTxFlag)
1762*53ee8cc1Swenshuai.xi {
1763*53ee8cc1Swenshuai.xi if(bEnableFlag)
1764*53ee8cc1Swenshuai.xi {
1765*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_3D, BIT(1), BIT(1));
1766*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2A, BIT(12), BMASK(13:12));
1767*53ee8cc1Swenshuai.xi }
1768*53ee8cc1Swenshuai.xi else
1769*53ee8cc1Swenshuai.xi {
1770*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2A, BIT(13), BMASK(13:12));
1771*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_3D, 0, BIT(1));
1772*53ee8cc1Swenshuai.xi }
1773*53ee8cc1Swenshuai.xi }
1774*53ee8cc1Swenshuai.xi
1775*53ee8cc1Swenshuai.xi if(bBISTeCbusRxFlag)
1776*53ee8cc1Swenshuai.xi {
1777*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2E, bEnableFlag? BIT(12): BIT(13), BMASK(13:12));
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi }
1780*53ee8cc1Swenshuai.xi
1781*53ee8cc1Swenshuai.xi //**************************************************************************
1782*53ee8cc1Swenshuai.xi // [Function Name]:
1783*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusStateChangeProc()
1784*53ee8cc1Swenshuai.xi // [Description]
1785*53ee8cc1Swenshuai.xi //
1786*53ee8cc1Swenshuai.xi // [Arguments]:
1787*53ee8cc1Swenshuai.xi //
1788*53ee8cc1Swenshuai.xi // [Return]:
1789*53ee8cc1Swenshuai.xi //
1790*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusStateChangeProc(stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus,stMHL_BIST_MODE_INFO * pBISTParameterInfo)1791*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusStateChangeProc(stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus, stMHL_BIST_MODE_INFO *pBISTParameterInfo)
1792*53ee8cc1Swenshuai.xi {
1793*53ee8cc1Swenshuai.xi MS_U8 ucECbusTrainState = (R2BYTE(REG_MHL_ECBUS_03) &0xF0) >> 4; // [7:4]: ECbus state
1794*53ee8cc1Swenshuai.xi
1795*53ee8cc1Swenshuai.xi if(ucECbusTrainState != pMHLSignalStatus->ucECbusTrainState)
1796*53ee8cc1Swenshuai.xi {
1797*53ee8cc1Swenshuai.xi if(ucECbusTrainState == MHL_ECBUS_STATE_ACTIVE)
1798*53ee8cc1Swenshuai.xi {
1799*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bBISTEnableFlag)
1800*53ee8cc1Swenshuai.xi {
1801*53ee8cc1Swenshuai.xi _mhal_mhl_SetECbusBISTTrigger(TRUE, pBISTParameterInfo->bBISTeCbusTxFlag, pBISTParameterInfo->bBISTeCbusRxFlag);
1802*53ee8cc1Swenshuai.xi }
1803*53ee8cc1Swenshuai.xi }
1804*53ee8cc1Swenshuai.xi
1805*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucECbusTrainState = ucECbusTrainState;
1806*53ee8cc1Swenshuai.xi }
1807*53ee8cc1Swenshuai.xi }
1808*53ee8cc1Swenshuai.xi
1809*53ee8cc1Swenshuai.xi //**************************************************************************
1810*53ee8cc1Swenshuai.xi // [Function Name]:
1811*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusModeUpProc()
1812*53ee8cc1Swenshuai.xi // [Description]
1813*53ee8cc1Swenshuai.xi //
1814*53ee8cc1Swenshuai.xi // [Arguments]:
1815*53ee8cc1Swenshuai.xi //
1816*53ee8cc1Swenshuai.xi // [Return]:
1817*53ee8cc1Swenshuai.xi //
1818*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusModeUpProc(void)1819*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusModeUpProc(void)
1820*53ee8cc1Swenshuai.xi {
1821*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(4), BIT(4)); // [4]: clear PLL lock status
1822*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, 0, BIT(4)); // [4]: clear PLL lock status
1823*53ee8cc1Swenshuai.xi
1824*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0207, BMASK(15:0));
1825*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1826*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(13), BIT(13));
1827*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BMASK(14:12), BMASK(14:12)); // delay
1828*53ee8cc1Swenshuai.xi #endif
1829*53ee8cc1Swenshuai.xi }
1830*53ee8cc1Swenshuai.xi
1831*53ee8cc1Swenshuai.xi //**************************************************************************
1832*53ee8cc1Swenshuai.xi // [Function Name]:
1833*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusModeDownProc()
1834*53ee8cc1Swenshuai.xi // [Description]
1835*53ee8cc1Swenshuai.xi //
1836*53ee8cc1Swenshuai.xi // [Arguments]:
1837*53ee8cc1Swenshuai.xi //
1838*53ee8cc1Swenshuai.xi // [Return]:
1839*53ee8cc1Swenshuai.xi //
1840*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusModeDownProc(void)1841*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusModeDownProc(void)
1842*53ee8cc1Swenshuai.xi {
1843*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0207, BMASK(15:0));
1844*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(13), BIT(13));
1845*53ee8cc1Swenshuai.xi }
1846*53ee8cc1Swenshuai.xi
1847*53ee8cc1Swenshuai.xi //**************************************************************************
1848*53ee8cc1Swenshuai.xi // [Function Name]:
1849*53ee8cc1Swenshuai.xi // _mhal_mhl_MHL3MuxSetting0()
1850*53ee8cc1Swenshuai.xi // [Description]
1851*53ee8cc1Swenshuai.xi //
1852*53ee8cc1Swenshuai.xi // [Arguments]:
1853*53ee8cc1Swenshuai.xi //
1854*53ee8cc1Swenshuai.xi // [Return]:
1855*53ee8cc1Swenshuai.xi //
1856*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHL3MuxSetting0(MS_BOOL bLinkRate6GFlag)1857*53ee8cc1Swenshuai.xi void _mhal_mhl_MHL3MuxSetting0(MS_BOOL bLinkRate6GFlag)
1858*53ee8cc1Swenshuai.xi {
1859*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDMI2_DUAL_0_54_L, bLinkRate6GFlag? 0: BIT(1), BMASK(1:0)); // [1:0]: reg_avg_ctrl_case
1860*53ee8cc1Swenshuai.xi }
1861*53ee8cc1Swenshuai.xi
1862*53ee8cc1Swenshuai.xi //**************************************************************************
1863*53ee8cc1Swenshuai.xi // [Function Name]:
1864*53ee8cc1Swenshuai.xi // _mhal_mhl_GetSRAMReceiveEMSCData()
1865*53ee8cc1Swenshuai.xi // [Description]
1866*53ee8cc1Swenshuai.xi //
1867*53ee8cc1Swenshuai.xi // [Arguments]:
1868*53ee8cc1Swenshuai.xi //
1869*53ee8cc1Swenshuai.xi // [Return]:
1870*53ee8cc1Swenshuai.xi //
1871*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetSRAMReceiveEMSCData(void)1872*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_GetSRAMReceiveEMSCData(void)
1873*53ee8cc1Swenshuai.xi {
1874*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_23, BIT(15), BIT(15));
1875*53ee8cc1Swenshuai.xi
1876*53ee8cc1Swenshuai.xi while((R2BYTE(REG_MHL_ECBUS_23) & BIT(14)) == BIT(14));
1877*53ee8cc1Swenshuai.xi
1878*53ee8cc1Swenshuai.xi return (R2BYTE(REG_MHL_ECBUS_22) &BMASK(7:0));
1879*53ee8cc1Swenshuai.xi }
1880*53ee8cc1Swenshuai.xi
1881*53ee8cc1Swenshuai.xi //**************************************************************************
1882*53ee8cc1Swenshuai.xi // [Function Name]:
1883*53ee8cc1Swenshuai.xi // _mhal_mhl_GetSRAMReceiveEMSCData()
1884*53ee8cc1Swenshuai.xi // [Description]
1885*53ee8cc1Swenshuai.xi //
1886*53ee8cc1Swenshuai.xi // [Arguments]:
1887*53ee8cc1Swenshuai.xi //
1888*53ee8cc1Swenshuai.xi // [Return]:
1889*53ee8cc1Swenshuai.xi //
1890*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_InsertSRAMSendEMSCData(MS_U8 ucSendEMSC)1891*53ee8cc1Swenshuai.xi void _mhal_mhl_InsertSRAMSendEMSCData(MS_U8 ucSendEMSC)
1892*53ee8cc1Swenshuai.xi {
1893*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_20, ucSendEMSC, BMASK(7:0));
1894*53ee8cc1Swenshuai.xi
1895*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_21, BIT(15), BIT(15));
1896*53ee8cc1Swenshuai.xi
1897*53ee8cc1Swenshuai.xi while((R2BYTE(REG_MHL_ECBUS_21) & BIT(14)) == BIT(14));
1898*53ee8cc1Swenshuai.xi }
1899*53ee8cc1Swenshuai.xi
1900*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_COMMAND_PARSING)
1901*53ee8cc1Swenshuai.xi //**************************************************************************
1902*53ee8cc1Swenshuai.xi // [Function Name]:
1903*53ee8cc1Swenshuai.xi // _mhal_mhl_ParsingECbusCommand()
1904*53ee8cc1Swenshuai.xi // [Description]
1905*53ee8cc1Swenshuai.xi //
1906*53ee8cc1Swenshuai.xi // [Arguments]:
1907*53ee8cc1Swenshuai.xi //
1908*53ee8cc1Swenshuai.xi // [Return]:
1909*53ee8cc1Swenshuai.xi //
1910*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ParsingECbusCommand(MS_U16 * usECbusData)1911*53ee8cc1Swenshuai.xi void _mhal_mhl_ParsingECbusCommand(MS_U16 *usECbusData)
1912*53ee8cc1Swenshuai.xi {
1913*53ee8cc1Swenshuai.xi MS_U8 ucTimes = 0;
1914*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
1915*53ee8cc1Swenshuai.xi MS_U16 usCounnter = 0;
1916*53ee8cc1Swenshuai.xi MS_U16 usValue = 0;
1917*53ee8cc1Swenshuai.xi
1918*53ee8cc1Swenshuai.xi for(ustemp = 0; ustemp < MHL_BUFFER_ECBUS_DATA_LENGTH; ustemp++)
1919*53ee8cc1Swenshuai.xi {
1920*53ee8cc1Swenshuai.xi if((usECbusData[ustemp] &BMASK(7:0)) == 0x39) // Find CBUS1_START
1921*53ee8cc1Swenshuai.xi {
1922*53ee8cc1Swenshuai.xi ucTimes = 0;
1923*53ee8cc1Swenshuai.xi
1924*53ee8cc1Swenshuai.xi if(usECbusData[ustemp] &BIT(15)) // Send case
1925*53ee8cc1Swenshuai.xi {
1926*53ee8cc1Swenshuai.xi for(usCounnter = ustemp +1; usCounnter < MHL_BUFFER_ECBUS_DATA_LENGTH; usCounnter++)
1927*53ee8cc1Swenshuai.xi {
1928*53ee8cc1Swenshuai.xi if(usECbusData[usCounnter] &BIT(15))
1929*53ee8cc1Swenshuai.xi {
1930*53ee8cc1Swenshuai.xi usValue = usValue << 8;
1931*53ee8cc1Swenshuai.xi usValue = usValue |(usECbusData[usCounnter] &BMASK(7:0));
1932*53ee8cc1Swenshuai.xi
1933*53ee8cc1Swenshuai.xi ucTimes++;
1934*53ee8cc1Swenshuai.xi }
1935*53ee8cc1Swenshuai.xi
1936*53ee8cc1Swenshuai.xi if(ucTimes == 2)
1937*53ee8cc1Swenshuai.xi {
1938*53ee8cc1Swenshuai.xi usValue = usValue >> 5;
1939*53ee8cc1Swenshuai.xi ucTimes = usValue >> 8;
1940*53ee8cc1Swenshuai.xi
1941*53ee8cc1Swenshuai.xi if(ucTimes == 5)
1942*53ee8cc1Swenshuai.xi {
1943*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SK][MSC][C] = %x\r\n", (usValue &BMASK(7:0)));
1944*53ee8cc1Swenshuai.xi }
1945*53ee8cc1Swenshuai.xi else if(ucTimes == 4)
1946*53ee8cc1Swenshuai.xi {
1947*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SK][MSC][D] = %x\r\n", (usValue &BMASK(7:0)));
1948*53ee8cc1Swenshuai.xi }
1949*53ee8cc1Swenshuai.xi else if(ucTimes == 1)
1950*53ee8cc1Swenshuai.xi {
1951*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SK][DDC][C] = %x\r\n", (usValue &BMASK(7:0)));
1952*53ee8cc1Swenshuai.xi }
1953*53ee8cc1Swenshuai.xi else if(ucTimes == 0)
1954*53ee8cc1Swenshuai.xi {
1955*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SK][DDC][D] = %x\r\n", (usValue &BMASK(7:0)));
1956*53ee8cc1Swenshuai.xi }
1957*53ee8cc1Swenshuai.xi else
1958*53ee8cc1Swenshuai.xi {
1959*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SK] unknow = %x\r\n", (usValue &BMASK(7:0)));
1960*53ee8cc1Swenshuai.xi }
1961*53ee8cc1Swenshuai.xi
1962*53ee8cc1Swenshuai.xi break;
1963*53ee8cc1Swenshuai.xi }
1964*53ee8cc1Swenshuai.xi }
1965*53ee8cc1Swenshuai.xi }
1966*53ee8cc1Swenshuai.xi else // Receive case
1967*53ee8cc1Swenshuai.xi {
1968*53ee8cc1Swenshuai.xi for(usCounnter = ustemp +1; usCounnter < MHL_BUFFER_ECBUS_DATA_LENGTH; usCounnter++)
1969*53ee8cc1Swenshuai.xi {
1970*53ee8cc1Swenshuai.xi if((usECbusData[usCounnter] &BIT(15)) == 0)
1971*53ee8cc1Swenshuai.xi {
1972*53ee8cc1Swenshuai.xi usValue = usValue << 8;
1973*53ee8cc1Swenshuai.xi usValue = usValue |(usECbusData[usCounnter] &BMASK(7:0));
1974*53ee8cc1Swenshuai.xi
1975*53ee8cc1Swenshuai.xi ucTimes++;
1976*53ee8cc1Swenshuai.xi }
1977*53ee8cc1Swenshuai.xi
1978*53ee8cc1Swenshuai.xi if(ucTimes == 2)
1979*53ee8cc1Swenshuai.xi {
1980*53ee8cc1Swenshuai.xi usValue = usValue >> 5;
1981*53ee8cc1Swenshuai.xi ucTimes = usValue >> 8;
1982*53ee8cc1Swenshuai.xi
1983*53ee8cc1Swenshuai.xi if(ucTimes == 5)
1984*53ee8cc1Swenshuai.xi {
1985*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SO][MSC][C] = %x\r\n", (usValue &BMASK(7:0)));
1986*53ee8cc1Swenshuai.xi }
1987*53ee8cc1Swenshuai.xi else if(ucTimes == 4)
1988*53ee8cc1Swenshuai.xi {
1989*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SO][MSC][D] = %x\r\n", (usValue &BMASK(7:0)));
1990*53ee8cc1Swenshuai.xi }
1991*53ee8cc1Swenshuai.xi else if(ucTimes == 1)
1992*53ee8cc1Swenshuai.xi {
1993*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SO][DDC][C] = %x\r\n", (usValue &BMASK(7:0)));
1994*53ee8cc1Swenshuai.xi }
1995*53ee8cc1Swenshuai.xi else if(ucTimes == 0)
1996*53ee8cc1Swenshuai.xi {
1997*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SO][DDC][D] = %x\r\n", (usValue &BMASK(7:0)));
1998*53ee8cc1Swenshuai.xi }
1999*53ee8cc1Swenshuai.xi else
2000*53ee8cc1Swenshuai.xi {
2001*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL [SO] unknow = %x\r\n", (usValue &BMASK(7:0)));
2002*53ee8cc1Swenshuai.xi }
2003*53ee8cc1Swenshuai.xi
2004*53ee8cc1Swenshuai.xi break;
2005*53ee8cc1Swenshuai.xi }
2006*53ee8cc1Swenshuai.xi }
2007*53ee8cc1Swenshuai.xi }
2008*53ee8cc1Swenshuai.xi }
2009*53ee8cc1Swenshuai.xi }
2010*53ee8cc1Swenshuai.xi }
2011*53ee8cc1Swenshuai.xi
2012*53ee8cc1Swenshuai.xi //**************************************************************************
2013*53ee8cc1Swenshuai.xi // [Function Name]:
2014*53ee8cc1Swenshuai.xi // _mhal_mhl_GetECbusCommand()
2015*53ee8cc1Swenshuai.xi // [Description]
2016*53ee8cc1Swenshuai.xi //
2017*53ee8cc1Swenshuai.xi // [Arguments]:
2018*53ee8cc1Swenshuai.xi //
2019*53ee8cc1Swenshuai.xi // [Return]:
2020*53ee8cc1Swenshuai.xi //
2021*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetECbusCommand(void)2022*53ee8cc1Swenshuai.xi void _mhal_mhl_GetECbusCommand(void)
2023*53ee8cc1Swenshuai.xi {
2024*53ee8cc1Swenshuai.xi MS_BOOL bReDoFlag = TRUE;
2025*53ee8cc1Swenshuai.xi MS_U16 usReceiveData = 0;
2026*53ee8cc1Swenshuai.xi MS_U16 usPreReceiveData = 0;
2027*53ee8cc1Swenshuai.xi MS_U16 usECbusCData[MHL_BUFFER_ECBUS_DATA_LENGTH] = {0};
2028*53ee8cc1Swenshuai.xi MS_U32 ulTimerValue[MHL_BUFFER_ECBUS_DATA_LENGTH] = {0};
2029*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
2030*53ee8cc1Swenshuai.xi MS_U16 usCounnter = 0;
2031*53ee8cc1Swenshuai.xi static MS_U32 ulTimeout = 0;
2032*53ee8cc1Swenshuai.xi
2033*53ee8cc1Swenshuai.xi if(ulTimeout < 40000000)
2034*53ee8cc1Swenshuai.xi {
2035*53ee8cc1Swenshuai.xi do
2036*53ee8cc1Swenshuai.xi {
2037*53ee8cc1Swenshuai.xi usReceiveData = R2BYTE(REG_MHL_ECBUS_7C);
2038*53ee8cc1Swenshuai.xi
2039*53ee8cc1Swenshuai.xi if(usReceiveData != usPreReceiveData)
2040*53ee8cc1Swenshuai.xi {
2041*53ee8cc1Swenshuai.xi usECbusCData[ustemp] = usReceiveData;
2042*53ee8cc1Swenshuai.xi ulTimerValue[ustemp] = ulTimeout;
2043*53ee8cc1Swenshuai.xi ustemp++;
2044*53ee8cc1Swenshuai.xi
2045*53ee8cc1Swenshuai.xi usPreReceiveData = usReceiveData;
2046*53ee8cc1Swenshuai.xi bReDoFlag = TRUE;
2047*53ee8cc1Swenshuai.xi usCounnter = 0;
2048*53ee8cc1Swenshuai.xi }
2049*53ee8cc1Swenshuai.xi
2050*53ee8cc1Swenshuai.xi if(ulTimeout < 40000000)
2051*53ee8cc1Swenshuai.xi {
2052*53ee8cc1Swenshuai.xi ulTimeout++;
2053*53ee8cc1Swenshuai.xi }
2054*53ee8cc1Swenshuai.xi else
2055*53ee8cc1Swenshuai.xi {
2056*53ee8cc1Swenshuai.xi for(usCounnter = 0; usCounnter < ustemp; usCounnter++)
2057*53ee8cc1Swenshuai.xi {
2058*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL eCbus data = %x, %d\r\n", usECbusCData[usCounnter], ulTimerValue[usCounnter]);
2059*53ee8cc1Swenshuai.xi }
2060*53ee8cc1Swenshuai.xi
2061*53ee8cc1Swenshuai.xi bReDoFlag = FALSE;
2062*53ee8cc1Swenshuai.xi ustemp = 0;
2063*53ee8cc1Swenshuai.xi
2064*53ee8cc1Swenshuai.xi //_mhal_mhl_ParsingECbusCommand(usECbusCData);
2065*53ee8cc1Swenshuai.xi }
2066*53ee8cc1Swenshuai.xi }while(bReDoFlag);
2067*53ee8cc1Swenshuai.xi }
2068*53ee8cc1Swenshuai.xi }
2069*53ee8cc1Swenshuai.xi
2070*53ee8cc1Swenshuai.xi #endif
2071*53ee8cc1Swenshuai.xi
2072*53ee8cc1Swenshuai.xi //**************************************************************************
2073*53ee8cc1Swenshuai.xi // [Function Name]:
2074*53ee8cc1Swenshuai.xi // _mhal_mhl_BISTECbusEnable()
2075*53ee8cc1Swenshuai.xi // [Description]
2076*53ee8cc1Swenshuai.xi //
2077*53ee8cc1Swenshuai.xi // [Arguments]:
2078*53ee8cc1Swenshuai.xi //
2079*53ee8cc1Swenshuai.xi // [Return]:
2080*53ee8cc1Swenshuai.xi //
2081*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_BISTECbusEnable(MS_BOOL bEnableFlag)2082*53ee8cc1Swenshuai.xi void _mhal_mhl_BISTECbusEnable(MS_BOOL bEnableFlag)
2083*53ee8cc1Swenshuai.xi {
2084*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_7A, bEnableFlag? BIT(5)| BIT(4)| BMASK(3:0): 0, BIT(5)| BIT(4)| BMASK(3:0));
2085*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_06, bEnableFlag? 0x1800: 0x1C00, BMASK(14:8));
2086*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2D, bEnableFlag? BIT(4): BIT(5), BMASK(5:4));
2087*53ee8cc1Swenshuai.xi }
2088*53ee8cc1Swenshuai.xi
2089*53ee8cc1Swenshuai.xi //**************************************************************************
2090*53ee8cc1Swenshuai.xi // [Function Name]:
2091*53ee8cc1Swenshuai.xi // _mhal_mhl_BISTAVLinkEnable()
2092*53ee8cc1Swenshuai.xi // [Description]
2093*53ee8cc1Swenshuai.xi //
2094*53ee8cc1Swenshuai.xi // [Arguments]:
2095*53ee8cc1Swenshuai.xi //
2096*53ee8cc1Swenshuai.xi // [Return]:
2097*53ee8cc1Swenshuai.xi //
2098*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_BISTAVLinkEnable(MS_U8 ucCbusSelect,MS_BOOL bEnableFlag)2099*53ee8cc1Swenshuai.xi void _mhal_mhl_BISTAVLinkEnable(MS_U8 ucCbusSelect, MS_BOOL bEnableFlag)
2100*53ee8cc1Swenshuai.xi {
2101*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2102*53ee8cc1Swenshuai.xi {
2103*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2104*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2105*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_76_L, bEnableFlag? BIT(0): BIT(2), BIT(2)| BIT(0));
2106*53ee8cc1Swenshuai.xi
2107*53ee8cc1Swenshuai.xi if(bEnableFlag)
2108*53ee8cc1Swenshuai.xi {
2109*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_76_L, BIT(1), BIT(1));
2110*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_76_L, 0, BIT(1));
2111*53ee8cc1Swenshuai.xi }
2112*53ee8cc1Swenshuai.xi
2113*53ee8cc1Swenshuai.xi break;
2114*53ee8cc1Swenshuai.xi #endif
2115*53ee8cc1Swenshuai.xi
2116*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2117*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2118*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_76_L, bEnableFlag? BIT(0): BIT(2), BIT(2)| BIT(0));
2119*53ee8cc1Swenshuai.xi
2120*53ee8cc1Swenshuai.xi if(bEnableFlag)
2121*53ee8cc1Swenshuai.xi {
2122*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_76_L, BIT(1), BIT(1));
2123*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_76_L, 0, BIT(1));
2124*53ee8cc1Swenshuai.xi }
2125*53ee8cc1Swenshuai.xi
2126*53ee8cc1Swenshuai.xi break;
2127*53ee8cc1Swenshuai.xi #endif
2128*53ee8cc1Swenshuai.xi
2129*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2130*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2131*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_76_L, bEnableFlag? BIT(0): BIT(2), BIT(2)| BIT(0));
2132*53ee8cc1Swenshuai.xi
2133*53ee8cc1Swenshuai.xi if(bEnableFlag)
2134*53ee8cc1Swenshuai.xi {
2135*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_76_L, BIT(1), BIT(1));
2136*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_76_L, 0, BIT(1));
2137*53ee8cc1Swenshuai.xi }
2138*53ee8cc1Swenshuai.xi
2139*53ee8cc1Swenshuai.xi break;
2140*53ee8cc1Swenshuai.xi #endif
2141*53ee8cc1Swenshuai.xi
2142*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2143*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2144*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_76_L, bEnableFlag? BIT(0): BIT(2), BIT(2)| BIT(0));
2145*53ee8cc1Swenshuai.xi
2146*53ee8cc1Swenshuai.xi if(bEnableFlag)
2147*53ee8cc1Swenshuai.xi {
2148*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_76_L, BIT(1), BIT(1));
2149*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_76_L, 0, BIT(1));
2150*53ee8cc1Swenshuai.xi }
2151*53ee8cc1Swenshuai.xi
2152*53ee8cc1Swenshuai.xi break;
2153*53ee8cc1Swenshuai.xi #endif
2154*53ee8cc1Swenshuai.xi
2155*53ee8cc1Swenshuai.xi default:
2156*53ee8cc1Swenshuai.xi
2157*53ee8cc1Swenshuai.xi break;
2158*53ee8cc1Swenshuai.xi };
2159*53ee8cc1Swenshuai.xi }
2160*53ee8cc1Swenshuai.xi
2161*53ee8cc1Swenshuai.xi //**************************************************************************
2162*53ee8cc1Swenshuai.xi // [Function Name]:
2163*53ee8cc1Swenshuai.xi // _mhal_mhl_GetBISTECbusErrorCount()
2164*53ee8cc1Swenshuai.xi // [Description]
2165*53ee8cc1Swenshuai.xi //
2166*53ee8cc1Swenshuai.xi // [Arguments]:
2167*53ee8cc1Swenshuai.xi //
2168*53ee8cc1Swenshuai.xi // [Return]:
2169*53ee8cc1Swenshuai.xi //
2170*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetBISTECbusErrorCount(void)2171*53ee8cc1Swenshuai.xi MS_U16 _mhal_mhl_GetBISTECbusErrorCount(void)
2172*53ee8cc1Swenshuai.xi {
2173*53ee8cc1Swenshuai.xi MS_U16 ucECbusErrorCount = 0;
2174*53ee8cc1Swenshuai.xi
2175*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_30) &BIT(15))
2176*53ee8cc1Swenshuai.xi {
2177*53ee8cc1Swenshuai.xi ucECbusErrorCount = R2BYTE(REG_MHL_ECBUS_31);
2178*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG("** MHL eCbus error count vaild %x\r\n", ucECbusErrorCount);
2179*53ee8cc1Swenshuai.xi }
2180*53ee8cc1Swenshuai.xi
2181*53ee8cc1Swenshuai.xi return ucECbusErrorCount;
2182*53ee8cc1Swenshuai.xi }
2183*53ee8cc1Swenshuai.xi
2184*53ee8cc1Swenshuai.xi //**************************************************************************
2185*53ee8cc1Swenshuai.xi // [Function Name]:
2186*53ee8cc1Swenshuai.xi // _mhal_mhl_GetBISTAVLinkErrorCount()
2187*53ee8cc1Swenshuai.xi // [Description]
2188*53ee8cc1Swenshuai.xi //
2189*53ee8cc1Swenshuai.xi // [Arguments]:
2190*53ee8cc1Swenshuai.xi //
2191*53ee8cc1Swenshuai.xi // [Return]:
2192*53ee8cc1Swenshuai.xi //
2193*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetBISTAVLinkErrorCount(MS_U8 ucCbusSelect)2194*53ee8cc1Swenshuai.xi MS_U16 _mhal_mhl_GetBISTAVLinkErrorCount(MS_U8 ucCbusSelect)
2195*53ee8cc1Swenshuai.xi {
2196*53ee8cc1Swenshuai.xi MS_U16 ucAVLinkErrorCount = 0;
2197*53ee8cc1Swenshuai.xi
2198*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2199*53ee8cc1Swenshuai.xi {
2200*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2201*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2202*53ee8cc1Swenshuai.xi ucAVLinkErrorCount = R2BYTE(REG_DVI_DTOP_DUAL_P0_73_L);
2203*53ee8cc1Swenshuai.xi
2204*53ee8cc1Swenshuai.xi break;
2205*53ee8cc1Swenshuai.xi #endif
2206*53ee8cc1Swenshuai.xi
2207*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2208*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2209*53ee8cc1Swenshuai.xi ucAVLinkErrorCount = R2BYTE(REG_DVI_DTOP_DUAL_P1_73_L);
2210*53ee8cc1Swenshuai.xi
2211*53ee8cc1Swenshuai.xi break;
2212*53ee8cc1Swenshuai.xi #endif
2213*53ee8cc1Swenshuai.xi
2214*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2215*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2216*53ee8cc1Swenshuai.xi ucAVLinkErrorCount = R2BYTE(REG_DVI_DTOP_DUAL_P2_73_L);
2217*53ee8cc1Swenshuai.xi
2218*53ee8cc1Swenshuai.xi break;
2219*53ee8cc1Swenshuai.xi #endif
2220*53ee8cc1Swenshuai.xi
2221*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2222*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2223*53ee8cc1Swenshuai.xi ucAVLinkErrorCount = R2BYTE(REG_DVI_DTOP_DUAL_P3_73_L);
2224*53ee8cc1Swenshuai.xi
2225*53ee8cc1Swenshuai.xi break;
2226*53ee8cc1Swenshuai.xi #endif
2227*53ee8cc1Swenshuai.xi
2228*53ee8cc1Swenshuai.xi default:
2229*53ee8cc1Swenshuai.xi
2230*53ee8cc1Swenshuai.xi break;
2231*53ee8cc1Swenshuai.xi };
2232*53ee8cc1Swenshuai.xi
2233*53ee8cc1Swenshuai.xi return ucAVLinkErrorCount;
2234*53ee8cc1Swenshuai.xi }
2235*53ee8cc1Swenshuai.xi
2236*53ee8cc1Swenshuai.xi //**************************************************************************
2237*53ee8cc1Swenshuai.xi // [Function Name]:
2238*53ee8cc1Swenshuai.xi // _mhal_mhl_CheckDEChangeFlag()
2239*53ee8cc1Swenshuai.xi // [Description]
2240*53ee8cc1Swenshuai.xi //
2241*53ee8cc1Swenshuai.xi // [Arguments]:
2242*53ee8cc1Swenshuai.xi //
2243*53ee8cc1Swenshuai.xi // [Return]:
2244*53ee8cc1Swenshuai.xi //
2245*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CheckDEChangeFlag(void)2246*53ee8cc1Swenshuai.xi MS_BOOL _mhal_mhl_CheckDEChangeFlag(void)
2247*53ee8cc1Swenshuai.xi {
2248*53ee8cc1Swenshuai.xi MS_BOOL bDEChangeFlag = ((R2BYTE(REG_HDMI_DUAL_0_02_L) & BIT(5)) ? TRUE : FALSE);
2249*53ee8cc1Swenshuai.xi static MS_U8 ucStableCount = 0;
2250*53ee8cc1Swenshuai.xi
2251*53ee8cc1Swenshuai.xi if(bDEChangeFlag)
2252*53ee8cc1Swenshuai.xi {
2253*53ee8cc1Swenshuai.xi W2BYTE(REG_HDMI_DUAL_0_02_L, BIT(5));
2254*53ee8cc1Swenshuai.xi
2255*53ee8cc1Swenshuai.xi ucStableCount = 0;
2256*53ee8cc1Swenshuai.xi }
2257*53ee8cc1Swenshuai.xi else if(ucStableCount <= 10)
2258*53ee8cc1Swenshuai.xi {
2259*53ee8cc1Swenshuai.xi ucStableCount++;
2260*53ee8cc1Swenshuai.xi }
2261*53ee8cc1Swenshuai.xi
2262*53ee8cc1Swenshuai.xi if(ucStableCount == 10)
2263*53ee8cc1Swenshuai.xi {
2264*53ee8cc1Swenshuai.xi bDEChangeFlag = TRUE;
2265*53ee8cc1Swenshuai.xi }
2266*53ee8cc1Swenshuai.xi else
2267*53ee8cc1Swenshuai.xi {
2268*53ee8cc1Swenshuai.xi bDEChangeFlag = FALSE;
2269*53ee8cc1Swenshuai.xi }
2270*53ee8cc1Swenshuai.xi
2271*53ee8cc1Swenshuai.xi return bDEChangeFlag;
2272*53ee8cc1Swenshuai.xi }
2273*53ee8cc1Swenshuai.xi
2274*53ee8cc1Swenshuai.xi //**************************************************************************
2275*53ee8cc1Swenshuai.xi // [Function Name]:
2276*53ee8cc1Swenshuai.xi // _mhal_mhl_MHL30AutoEQSetting()
2277*53ee8cc1Swenshuai.xi // [Description]
2278*53ee8cc1Swenshuai.xi //
2279*53ee8cc1Swenshuai.xi // [Arguments]:
2280*53ee8cc1Swenshuai.xi //
2281*53ee8cc1Swenshuai.xi // [Return]:
2282*53ee8cc1Swenshuai.xi //
2283*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHL30AutoEQSetting(MS_U8 ucCbusSelect)2284*53ee8cc1Swenshuai.xi void _mhal_mhl_MHL30AutoEQSetting(MS_U8 ucCbusSelect)
2285*53ee8cc1Swenshuai.xi {
2286*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2287*53ee8cc1Swenshuai.xi {
2288*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2289*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2290*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_45_L, MHL_COARSE_TUNE_30_MIN, BMASK(4:0));
2291*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_49_L, BIT(5), BIT(5));
2292*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_29_L, BIT(8), BMASK(15:0));
2293*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_11_L, BIT(4), BIT(4));
2294*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_42_L, MHL_COARSE_TUNE_30_DETECT_TIME, BMASK(15:0));
2295*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_4A_L, MHL_COARSE_TUNE_30_AABA_NUMBER, BMASK(15:0));
2296*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_4B_L, MHL_FINE_TUNE_AABA_30_NUMBER, BMASK(15:0));
2297*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_4C_L, MHL_FINE_TUNE_UNDER_30_THRESHOLD, BMASK(15:0));
2298*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_26_L, BIT(11)| BIT(9), BMASK(13:8));
2299*53ee8cc1Swenshuai.xi
2300*53ee8cc1Swenshuai.xi break;
2301*53ee8cc1Swenshuai.xi #endif
2302*53ee8cc1Swenshuai.xi
2303*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2304*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2305*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_45_L, MHL_COARSE_TUNE_30_MIN, BMASK(4:0));
2306*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_49_L, BIT(5), BIT(5));
2307*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_29_L, BIT(8), BMASK(15:0));
2308*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_11_L, BIT(4), BIT(4));
2309*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_42_L, MHL_COARSE_TUNE_30_DETECT_TIME, BMASK(15:0));
2310*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_4A_L, MHL_COARSE_TUNE_30_AABA_NUMBER, BMASK(15:0));
2311*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_4B_L, MHL_FINE_TUNE_AABA_30_NUMBER, BMASK(15:0));
2312*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_4C_L, MHL_FINE_TUNE_UNDER_30_THRESHOLD, BMASK(15:0));
2313*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_26_L, BIT(11)| BIT(9), BMASK(13:8));
2314*53ee8cc1Swenshuai.xi
2315*53ee8cc1Swenshuai.xi break;
2316*53ee8cc1Swenshuai.xi #endif
2317*53ee8cc1Swenshuai.xi
2318*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2319*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2320*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_45_L, MHL_COARSE_TUNE_30_MIN, BMASK(4:0));
2321*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_49_L, BIT(5), BIT(5));
2322*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_29_L, BIT(8), BMASK(15:0));
2323*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_11_L, BIT(4), BIT(4));
2324*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_42_L, MHL_COARSE_TUNE_30_DETECT_TIME, BMASK(15:0));
2325*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_4A_L, MHL_COARSE_TUNE_30_AABA_NUMBER, BMASK(15:0));
2326*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_4B_L, MHL_FINE_TUNE_AABA_30_NUMBER, BMASK(15:0));
2327*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_4C_L, MHL_FINE_TUNE_UNDER_30_THRESHOLD, BMASK(15:0));
2328*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_26_L, BIT(11)| BIT(9), BMASK(13:8));
2329*53ee8cc1Swenshuai.xi
2330*53ee8cc1Swenshuai.xi break;
2331*53ee8cc1Swenshuai.xi #endif
2332*53ee8cc1Swenshuai.xi
2333*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2334*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2335*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_45_L, MHL_COARSE_TUNE_30_MIN, BMASK(4:0));
2336*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_49_L, BIT(5), BIT(5));
2337*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_29_L, BIT(8), BMASK(15:0));
2338*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_11_L, BIT(4), BIT(4));
2339*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_42_L, MHL_COARSE_TUNE_30_DETECT_TIME, BMASK(15:0));
2340*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_4A_L, MHL_COARSE_TUNE_30_AABA_NUMBER, BMASK(15:0));
2341*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_4B_L, MHL_FINE_TUNE_AABA_30_NUMBER, BMASK(15:0));
2342*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_4C_L, MHL_FINE_TUNE_UNDER_30_THRESHOLD, BMASK(15:0));
2343*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_26_L, BIT(11)| BIT(9), BMASK(13:8));
2344*53ee8cc1Swenshuai.xi
2345*53ee8cc1Swenshuai.xi break;
2346*53ee8cc1Swenshuai.xi #endif
2347*53ee8cc1Swenshuai.xi
2348*53ee8cc1Swenshuai.xi default:
2349*53ee8cc1Swenshuai.xi
2350*53ee8cc1Swenshuai.xi break;
2351*53ee8cc1Swenshuai.xi };
2352*53ee8cc1Swenshuai.xi }
2353*53ee8cc1Swenshuai.xi
2354*53ee8cc1Swenshuai.xi //**************************************************************************
2355*53ee8cc1Swenshuai.xi // [Function Name]:
2356*53ee8cc1Swenshuai.xi // _mhal_mhl_MHL3AutoEQTrigger()
2357*53ee8cc1Swenshuai.xi // [Description]
2358*53ee8cc1Swenshuai.xi //
2359*53ee8cc1Swenshuai.xi // [Arguments]:
2360*53ee8cc1Swenshuai.xi //
2361*53ee8cc1Swenshuai.xi // [Return]:
2362*53ee8cc1Swenshuai.xi //
2363*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHL3AutoEQTrigger(MS_U8 ucCbusSelect)2364*53ee8cc1Swenshuai.xi void _mhal_mhl_MHL3AutoEQTrigger(MS_U8 ucCbusSelect)
2365*53ee8cc1Swenshuai.xi {
2366*53ee8cc1Swenshuai.xi MS_U16 ustemp = 1000;
2367*53ee8cc1Swenshuai.xi
2368*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2369*53ee8cc1Swenshuai.xi {
2370*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2371*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2372*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_33_L, BIT(2), BIT(2));
2373*53ee8cc1Swenshuai.xi
2374*53ee8cc1Swenshuai.xi while(ustemp--);
2375*53ee8cc1Swenshuai.xi
2376*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_33_L, 0, BIT(2));
2377*53ee8cc1Swenshuai.xi
2378*53ee8cc1Swenshuai.xi break;
2379*53ee8cc1Swenshuai.xi #endif
2380*53ee8cc1Swenshuai.xi
2381*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2382*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2383*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_33_L, BIT(2), BIT(2));
2384*53ee8cc1Swenshuai.xi
2385*53ee8cc1Swenshuai.xi while(ustemp--);
2386*53ee8cc1Swenshuai.xi
2387*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_33_L, 0, BIT(2));
2388*53ee8cc1Swenshuai.xi
2389*53ee8cc1Swenshuai.xi break;
2390*53ee8cc1Swenshuai.xi #endif
2391*53ee8cc1Swenshuai.xi
2392*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2393*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2394*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_33_L, BIT(2), BIT(2));
2395*53ee8cc1Swenshuai.xi
2396*53ee8cc1Swenshuai.xi while(ustemp--);
2397*53ee8cc1Swenshuai.xi
2398*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_33_L, 0, BIT(2));
2399*53ee8cc1Swenshuai.xi
2400*53ee8cc1Swenshuai.xi break;
2401*53ee8cc1Swenshuai.xi #endif
2402*53ee8cc1Swenshuai.xi
2403*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2404*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2405*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_33_L, BIT(2), BIT(2));
2406*53ee8cc1Swenshuai.xi
2407*53ee8cc1Swenshuai.xi while(ustemp--);
2408*53ee8cc1Swenshuai.xi
2409*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_33_L, 0, BIT(2));
2410*53ee8cc1Swenshuai.xi
2411*53ee8cc1Swenshuai.xi break;
2412*53ee8cc1Swenshuai.xi #endif
2413*53ee8cc1Swenshuai.xi
2414*53ee8cc1Swenshuai.xi default:
2415*53ee8cc1Swenshuai.xi ustemp = 0;
2416*53ee8cc1Swenshuai.xi break;
2417*53ee8cc1Swenshuai.xi };
2418*53ee8cc1Swenshuai.xi }
2419*53ee8cc1Swenshuai.xi
2420*53ee8cc1Swenshuai.xi //**************************************************************************
2421*53ee8cc1Swenshuai.xi // [Function Name]:
2422*53ee8cc1Swenshuai.xi // _mhal_mhl_GetAutoEQDoneFlag()
2423*53ee8cc1Swenshuai.xi // [Description]
2424*53ee8cc1Swenshuai.xi //
2425*53ee8cc1Swenshuai.xi // [Arguments]:
2426*53ee8cc1Swenshuai.xi //
2427*53ee8cc1Swenshuai.xi // [Return]:
2428*53ee8cc1Swenshuai.xi //
2429*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetAutoEQDoneFlag(MS_U8 ucCbusSelect)2430*53ee8cc1Swenshuai.xi MS_BOOL _mhal_mhl_GetAutoEQDoneFlag(MS_U8 ucCbusSelect)
2431*53ee8cc1Swenshuai.xi {
2432*53ee8cc1Swenshuai.xi MS_BOOL bAutoEQDone = FALSE;
2433*53ee8cc1Swenshuai.xi
2434*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2435*53ee8cc1Swenshuai.xi {
2436*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2437*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2438*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_41_L, 0, BMASK(15:14));
2439*53ee8cc1Swenshuai.xi
2440*53ee8cc1Swenshuai.xi if(R2BYTE(REG_COMBO_PHY0_P0_41_L) &BIT(8))
2441*53ee8cc1Swenshuai.xi {
2442*53ee8cc1Swenshuai.xi bAutoEQDone = TRUE;
2443*53ee8cc1Swenshuai.xi }
2444*53ee8cc1Swenshuai.xi
2445*53ee8cc1Swenshuai.xi break;
2446*53ee8cc1Swenshuai.xi #endif
2447*53ee8cc1Swenshuai.xi
2448*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2449*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2450*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_41_L, 0, BMASK(15:14));
2451*53ee8cc1Swenshuai.xi
2452*53ee8cc1Swenshuai.xi if(R2BYTE(REG_COMBO_PHY0_P1_41_L) &BIT(8))
2453*53ee8cc1Swenshuai.xi {
2454*53ee8cc1Swenshuai.xi bAutoEQDone = TRUE;
2455*53ee8cc1Swenshuai.xi }
2456*53ee8cc1Swenshuai.xi
2457*53ee8cc1Swenshuai.xi break;
2458*53ee8cc1Swenshuai.xi #endif
2459*53ee8cc1Swenshuai.xi
2460*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2461*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2462*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_41_L, 0, BMASK(15:14));
2463*53ee8cc1Swenshuai.xi
2464*53ee8cc1Swenshuai.xi if(R2BYTE(REG_COMBO_PHY0_P2_41_L) &BIT(8))
2465*53ee8cc1Swenshuai.xi {
2466*53ee8cc1Swenshuai.xi bAutoEQDone = TRUE;
2467*53ee8cc1Swenshuai.xi }
2468*53ee8cc1Swenshuai.xi
2469*53ee8cc1Swenshuai.xi break;
2470*53ee8cc1Swenshuai.xi #endif
2471*53ee8cc1Swenshuai.xi
2472*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2473*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2474*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_41_L, 0, BMASK(15:14));
2475*53ee8cc1Swenshuai.xi
2476*53ee8cc1Swenshuai.xi if(R2BYTE(REG_COMBO_PHY0_P3_41_L) &BIT(8))
2477*53ee8cc1Swenshuai.xi {
2478*53ee8cc1Swenshuai.xi bAutoEQDone = TRUE;
2479*53ee8cc1Swenshuai.xi }
2480*53ee8cc1Swenshuai.xi
2481*53ee8cc1Swenshuai.xi break;
2482*53ee8cc1Swenshuai.xi #endif
2483*53ee8cc1Swenshuai.xi
2484*53ee8cc1Swenshuai.xi default:
2485*53ee8cc1Swenshuai.xi
2486*53ee8cc1Swenshuai.xi break;
2487*53ee8cc1Swenshuai.xi };
2488*53ee8cc1Swenshuai.xi
2489*53ee8cc1Swenshuai.xi return bAutoEQDone;
2490*53ee8cc1Swenshuai.xi }
2491*53ee8cc1Swenshuai.xi
2492*53ee8cc1Swenshuai.xi //**************************************************************************
2493*53ee8cc1Swenshuai.xi // [Function Name]:
2494*53ee8cc1Swenshuai.xi // _mhal_mhl_MHL30AutoEQEnable()
2495*53ee8cc1Swenshuai.xi // [Description]
2496*53ee8cc1Swenshuai.xi //
2497*53ee8cc1Swenshuai.xi // [Arguments]:
2498*53ee8cc1Swenshuai.xi //
2499*53ee8cc1Swenshuai.xi // [Return]:
2500*53ee8cc1Swenshuai.xi //
2501*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHL30AutoEQEnable(MS_U8 ucCbusSelect,MS_BOOL bAutoEQEnable)2502*53ee8cc1Swenshuai.xi void _mhal_mhl_MHL30AutoEQEnable(MS_U8 ucCbusSelect, MS_BOOL bAutoEQEnable)
2503*53ee8cc1Swenshuai.xi {
2504*53ee8cc1Swenshuai.xi MS_BOOL bAutoEQTrigger = FALSE;
2505*53ee8cc1Swenshuai.xi
2506*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2507*53ee8cc1Swenshuai.xi {
2508*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2509*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2510*53ee8cc1Swenshuai.xi if(bAutoEQEnable) // Disable overwrite EQ, then enable auto EQ and trigger auto EQ
2511*53ee8cc1Swenshuai.xi {
2512*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, 0, BMASK(7:4));
2513*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_25_L, BIT(2), BIT(2));
2514*53ee8cc1Swenshuai.xi
2515*53ee8cc1Swenshuai.xi bAutoEQTrigger = TRUE;
2516*53ee8cc1Swenshuai.xi }
2517*53ee8cc1Swenshuai.xi else // Disable auto EQ, then overwrite EQ
2518*53ee8cc1Swenshuai.xi {
2519*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_25_L, 0, BIT(2));
2520*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, BMASK(7:4), BMASK(7:4));
2521*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
2522*53ee8cc1Swenshuai.xi }
2523*53ee8cc1Swenshuai.xi
2524*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_15_L, bAutoEQEnable? BIT(15): 0, BIT(15));
2525*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_44_L, bAutoEQEnable? 0: BIT(0), BIT(0));
2526*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_49_L, bAutoEQEnable? 0: BIT(5), BIT(5));
2527*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_11_L, bAutoEQEnable? 0: BIT(4), BIT(4));
2528*53ee8cc1Swenshuai.xi
2529*53ee8cc1Swenshuai.xi break;
2530*53ee8cc1Swenshuai.xi #endif
2531*53ee8cc1Swenshuai.xi
2532*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2533*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2534*53ee8cc1Swenshuai.xi if(bAutoEQEnable) // Disable overwrite EQ, then enable auto EQ and trigger auto EQ
2535*53ee8cc1Swenshuai.xi {
2536*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6E_L, 0, BMASK(7:4));
2537*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_25_L, BIT(2), BIT(2));
2538*53ee8cc1Swenshuai.xi
2539*53ee8cc1Swenshuai.xi bAutoEQTrigger = TRUE;
2540*53ee8cc1Swenshuai.xi }
2541*53ee8cc1Swenshuai.xi else // Disable auto EQ, then overwrite EQ
2542*53ee8cc1Swenshuai.xi {
2543*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_25_L, 0, BIT(2));
2544*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6E_L, BMASK(7:4), BMASK(7:4));
2545*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
2546*53ee8cc1Swenshuai.xi }
2547*53ee8cc1Swenshuai.xi
2548*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_15_L, bAutoEQEnable? BIT(15): 0, BIT(15));
2549*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_44_L, bAutoEQEnable? 0: BIT(0), BIT(0));
2550*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_49_L, bAutoEQEnable? 0: BIT(5), BIT(5));
2551*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_11_L, bAutoEQEnable? 0: BIT(4), BIT(4));
2552*53ee8cc1Swenshuai.xi
2553*53ee8cc1Swenshuai.xi break;
2554*53ee8cc1Swenshuai.xi #endif
2555*53ee8cc1Swenshuai.xi
2556*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2557*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2558*53ee8cc1Swenshuai.xi if(bAutoEQEnable) // Disable overwrite EQ, then enable auto EQ and trigger auto EQ
2559*53ee8cc1Swenshuai.xi {
2560*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6E_L, 0, BMASK(7:4));
2561*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_25_L, BIT(2), BIT(2));
2562*53ee8cc1Swenshuai.xi
2563*53ee8cc1Swenshuai.xi bAutoEQTrigger = TRUE;
2564*53ee8cc1Swenshuai.xi }
2565*53ee8cc1Swenshuai.xi else // Disable auto EQ, then overwrite EQ
2566*53ee8cc1Swenshuai.xi {
2567*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_25_L, 0, BIT(2));
2568*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6E_L, BMASK(7:4), BMASK(7:4));
2569*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
2570*53ee8cc1Swenshuai.xi }
2571*53ee8cc1Swenshuai.xi
2572*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_15_L, bAutoEQEnable? BIT(15): 0, BIT(15));
2573*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_44_L, bAutoEQEnable? 0: BIT(0), BIT(0));
2574*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_49_L, bAutoEQEnable? 0: BIT(5), BIT(5));
2575*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_11_L, bAutoEQEnable? 0: BIT(4), BIT(4));
2576*53ee8cc1Swenshuai.xi
2577*53ee8cc1Swenshuai.xi break;
2578*53ee8cc1Swenshuai.xi #endif
2579*53ee8cc1Swenshuai.xi
2580*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2581*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2582*53ee8cc1Swenshuai.xi if(bAutoEQEnable) // Disable overwrite EQ, then enable auto EQ and trigger auto EQ
2583*53ee8cc1Swenshuai.xi {
2584*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6E_L, 0, BMASK(7:4));
2585*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_25_L, BIT(2), BIT(2));
2586*53ee8cc1Swenshuai.xi
2587*53ee8cc1Swenshuai.xi bAutoEQTrigger = TRUE;
2588*53ee8cc1Swenshuai.xi }
2589*53ee8cc1Swenshuai.xi else // Disable auto EQ, then overwrite EQ
2590*53ee8cc1Swenshuai.xi {
2591*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_25_L, 0, BIT(2));
2592*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6E_L, BMASK(7:4), BMASK(7:4));
2593*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
2594*53ee8cc1Swenshuai.xi }
2595*53ee8cc1Swenshuai.xi
2596*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_15_L, bAutoEQEnable? BIT(15): 0, BIT(15));
2597*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_44_L, bAutoEQEnable? 0: BIT(0), BIT(0));
2598*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_49_L, bAutoEQEnable? 0: BIT(5), BIT(5));
2599*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_11_L, bAutoEQEnable? 0: BIT(4), BIT(4));
2600*53ee8cc1Swenshuai.xi
2601*53ee8cc1Swenshuai.xi break;
2602*53ee8cc1Swenshuai.xi #endif
2603*53ee8cc1Swenshuai.xi
2604*53ee8cc1Swenshuai.xi default:
2605*53ee8cc1Swenshuai.xi
2606*53ee8cc1Swenshuai.xi break;
2607*53ee8cc1Swenshuai.xi };
2608*53ee8cc1Swenshuai.xi
2609*53ee8cc1Swenshuai.xi if(bAutoEQTrigger)
2610*53ee8cc1Swenshuai.xi {
2611*53ee8cc1Swenshuai.xi _mhal_mhl_GetAutoEQDoneFlag(ucCbusSelect);
2612*53ee8cc1Swenshuai.xi _mhal_mhl_MHL3AutoEQTrigger(ucCbusSelect);
2613*53ee8cc1Swenshuai.xi }
2614*53ee8cc1Swenshuai.xi }
2615*53ee8cc1Swenshuai.xi
2616*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2617*53ee8cc1Swenshuai.xi // Global Functions
2618*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2619*53ee8cc1Swenshuai.xi
2620*53ee8cc1Swenshuai.xi //**************************************************************************
2621*53ee8cc1Swenshuai.xi // [Function Name]:
2622*53ee8cc1Swenshuai.xi // mhal_mhl_SetRegisterBaseAddress()
2623*53ee8cc1Swenshuai.xi // [Description]
2624*53ee8cc1Swenshuai.xi //
2625*53ee8cc1Swenshuai.xi // [Arguments]:
2626*53ee8cc1Swenshuai.xi //
2627*53ee8cc1Swenshuai.xi // [Return]:
2628*53ee8cc1Swenshuai.xi //
2629*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetRegisterBaseAddress(MS_VIRT ulRiuBassAddress,MS_VIRT ulPMRiuBassAddress)2630*53ee8cc1Swenshuai.xi void mhal_mhl_SetRegisterBaseAddress(MS_VIRT ulRiuBassAddress, MS_VIRT ulPMRiuBassAddress)
2631*53ee8cc1Swenshuai.xi {
2632*53ee8cc1Swenshuai.xi MHL_XC_RIU_BASE = ulPMRiuBassAddress;
2633*53ee8cc1Swenshuai.xi MHL_PM_RIU_BASE = ulPMRiuBassAddress;
2634*53ee8cc1Swenshuai.xi
2635*53ee8cc1Swenshuai.xi ulRiuBassAddress = ulPMRiuBassAddress;
2636*53ee8cc1Swenshuai.xi }
2637*53ee8cc1Swenshuai.xi
2638*53ee8cc1Swenshuai.xi //**************************************************************************
2639*53ee8cc1Swenshuai.xi // [Function Name]:
2640*53ee8cc1Swenshuai.xi // mhal_mhl_GetCbusSelect()
2641*53ee8cc1Swenshuai.xi // [Description]
2642*53ee8cc1Swenshuai.xi //
2643*53ee8cc1Swenshuai.xi // [Arguments]:
2644*53ee8cc1Swenshuai.xi //
2645*53ee8cc1Swenshuai.xi // [Return]:
2646*53ee8cc1Swenshuai.xi //
2647*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetCbusSelect(MS_U8 ucPort)2648*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetCbusSelect(MS_U8 ucPort)
2649*53ee8cc1Swenshuai.xi {
2650*53ee8cc1Swenshuai.xi MS_U8 uctemp = MHL_CBUS_SELECT_MASK;
2651*53ee8cc1Swenshuai.xi
2652*53ee8cc1Swenshuai.xi switch(ucPort)
2653*53ee8cc1Swenshuai.xi {
2654*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_A:
2655*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTA;
2656*53ee8cc1Swenshuai.xi break;
2657*53ee8cc1Swenshuai.xi
2658*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_B:
2659*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTB;
2660*53ee8cc1Swenshuai.xi break;
2661*53ee8cc1Swenshuai.xi
2662*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_C:
2663*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTC;
2664*53ee8cc1Swenshuai.xi break;
2665*53ee8cc1Swenshuai.xi
2666*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_D:
2667*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTD;
2668*53ee8cc1Swenshuai.xi break;
2669*53ee8cc1Swenshuai.xi
2670*53ee8cc1Swenshuai.xi default:
2671*53ee8cc1Swenshuai.xi
2672*53ee8cc1Swenshuai.xi break;
2673*53ee8cc1Swenshuai.xi };
2674*53ee8cc1Swenshuai.xi
2675*53ee8cc1Swenshuai.xi return uctemp;
2676*53ee8cc1Swenshuai.xi }
2677*53ee8cc1Swenshuai.xi
2678*53ee8cc1Swenshuai.xi //**************************************************************************
2679*53ee8cc1Swenshuai.xi // [Function Name]:
2680*53ee8cc1Swenshuai.xi // mhal_mhl_GetInputPort()
2681*53ee8cc1Swenshuai.xi // [Description]
2682*53ee8cc1Swenshuai.xi // MHL get current input port
2683*53ee8cc1Swenshuai.xi // [Arguments]:
2684*53ee8cc1Swenshuai.xi //
2685*53ee8cc1Swenshuai.xi // [Return]:
2686*53ee8cc1Swenshuai.xi //
2687*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetInputPort(void)2688*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetInputPort(void)
2689*53ee8cc1Swenshuai.xi {
2690*53ee8cc1Swenshuai.xi return (R2BYTE(REG_HDMI2_DUAL_0_50_L) &BMASK(1:0));
2691*53ee8cc1Swenshuai.xi }
2692*53ee8cc1Swenshuai.xi
2693*53ee8cc1Swenshuai.xi //**************************************************************************
2694*53ee8cc1Swenshuai.xi // [Function Name]:
2695*53ee8cc1Swenshuai.xi // mhal_mhl_CheckInputPort()
2696*53ee8cc1Swenshuai.xi // [Description]
2697*53ee8cc1Swenshuai.xi // MHL check current input port
2698*53ee8cc1Swenshuai.xi // [Arguments]:
2699*53ee8cc1Swenshuai.xi //
2700*53ee8cc1Swenshuai.xi // [Return]:
2701*53ee8cc1Swenshuai.xi //
2702*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckInputPort(MS_U8 ucCbusSelect)2703*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckInputPort(MS_U8 ucCbusSelect)
2704*53ee8cc1Swenshuai.xi {
2705*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
2706*53ee8cc1Swenshuai.xi
2707*53ee8cc1Swenshuai.xi if(mhal_mhl_GetCbusSelect(mhal_mhl_GetInputPort()) == ucCbusSelect)
2708*53ee8cc1Swenshuai.xi {
2709*53ee8cc1Swenshuai.xi bindex = TRUE;
2710*53ee8cc1Swenshuai.xi }
2711*53ee8cc1Swenshuai.xi
2712*53ee8cc1Swenshuai.xi return bindex;
2713*53ee8cc1Swenshuai.xi }
2714*53ee8cc1Swenshuai.xi
2715*53ee8cc1Swenshuai.xi //**************************************************************************
2716*53ee8cc1Swenshuai.xi // [Function Name]:
2717*53ee8cc1Swenshuai.xi // mhal_mhl_CheckPIPWindow()
2718*53ee8cc1Swenshuai.xi // [Description]
2719*53ee8cc1Swenshuai.xi //
2720*53ee8cc1Swenshuai.xi // [Arguments]:
2721*53ee8cc1Swenshuai.xi //
2722*53ee8cc1Swenshuai.xi // [Return]:
2723*53ee8cc1Swenshuai.xi //
2724*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckPIPWindow(void)2725*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckPIPWindow(void)
2726*53ee8cc1Swenshuai.xi {
2727*53ee8cc1Swenshuai.xi MS_BOOL bFlag = FALSE;
2728*53ee8cc1Swenshuai.xi MS_U8 ucScalerMainMux = R2BYTE(0x102E02) &BMASK(7:0);
2729*53ee8cc1Swenshuai.xi MS_U8 ucScalerSubMux = ucScalerMainMux &BMASK(3:0);
2730*53ee8cc1Swenshuai.xi
2731*53ee8cc1Swenshuai.xi ucScalerMainMux = (ucScalerMainMux &BMASK(7:4)) >> 4;
2732*53ee8cc1Swenshuai.xi
2733*53ee8cc1Swenshuai.xi if((ucScalerMainMux == MHL_SCALER_MUX_SELECT_DVI) || (ucScalerSubMux == MHL_SCALER_MUX_SELECT_DVI))
2734*53ee8cc1Swenshuai.xi {
2735*53ee8cc1Swenshuai.xi bFlag = TRUE;
2736*53ee8cc1Swenshuai.xi }
2737*53ee8cc1Swenshuai.xi
2738*53ee8cc1Swenshuai.xi return bFlag;
2739*53ee8cc1Swenshuai.xi }
2740*53ee8cc1Swenshuai.xi
2741*53ee8cc1Swenshuai.xi //**************************************************************************
2742*53ee8cc1Swenshuai.xi // [Function Name]:
2743*53ee8cc1Swenshuai.xi // mhal_mhl_MHLSupportPath()
2744*53ee8cc1Swenshuai.xi // [Description]
2745*53ee8cc1Swenshuai.xi // MHL support path
2746*53ee8cc1Swenshuai.xi // [Arguments]:
2747*53ee8cc1Swenshuai.xi //
2748*53ee8cc1Swenshuai.xi // [Return]:
2749*53ee8cc1Swenshuai.xi //
2750*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_MHLSupportPath(MS_U8 ucSelect)2751*53ee8cc1Swenshuai.xi void mhal_mhl_MHLSupportPath(MS_U8 ucSelect)
2752*53ee8cc1Swenshuai.xi {
2753*53ee8cc1Swenshuai.xi if(ucSelect > 0)
2754*53ee8cc1Swenshuai.xi {
2755*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_72_L, BMASK(7:6), BMASK(8:6)); // [8]: reg_cbus_debug_sel, [7]: reg_vbus_en_sel , [6]: reg_mhl_cable_detect_sel
2756*53ee8cc1Swenshuai.xi }
2757*53ee8cc1Swenshuai.xi }
2758*53ee8cc1Swenshuai.xi
2759*53ee8cc1Swenshuai.xi //**************************************************************************
2760*53ee8cc1Swenshuai.xi // [Function Name]:
2761*53ee8cc1Swenshuai.xi // mhal_mhl_CheckEfuseControlFlag()
2762*53ee8cc1Swenshuai.xi // [Description]
2763*53ee8cc1Swenshuai.xi //
2764*53ee8cc1Swenshuai.xi // [Arguments]:
2765*53ee8cc1Swenshuai.xi //
2766*53ee8cc1Swenshuai.xi // [Return]:
2767*53ee8cc1Swenshuai.xi //
2768*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckEfuseControlFlag(MS_BOOL bEfuseFlag)2769*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckEfuseControlFlag(MS_BOOL bEfuseFlag)
2770*53ee8cc1Swenshuai.xi {
2771*53ee8cc1Swenshuai.xi MS_BOOL bFlag = FALSE;
2772*53ee8cc1Swenshuai.xi
2773*53ee8cc1Swenshuai.xi #if(MHL_EFUSE_FUNCTION_CONTROL)
2774*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
2775*53ee8cc1Swenshuai.xi
2776*53ee8cc1Swenshuai.xi if(!bEfuseFlag)
2777*53ee8cc1Swenshuai.xi {
2778*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
2779*53ee8cc1Swenshuai.xi {
2780*53ee8cc1Swenshuai.xi mhal_mhl_CbusIsolate(uctemp, TRUE);
2781*53ee8cc1Swenshuai.xi }
2782*53ee8cc1Swenshuai.xi
2783*53ee8cc1Swenshuai.xi bFlag = TRUE;
2784*53ee8cc1Swenshuai.xi }
2785*53ee8cc1Swenshuai.xi
2786*53ee8cc1Swenshuai.xi #endif
2787*53ee8cc1Swenshuai.xi
2788*53ee8cc1Swenshuai.xi return bFlag;
2789*53ee8cc1Swenshuai.xi }
2790*53ee8cc1Swenshuai.xi
2791*53ee8cc1Swenshuai.xi //**************************************************************************
2792*53ee8cc1Swenshuai.xi // [Function Name]:
2793*53ee8cc1Swenshuai.xi // mhal_mhl_InsertChipIDforCheck()
2794*53ee8cc1Swenshuai.xi // [Description]
2795*53ee8cc1Swenshuai.xi //
2796*53ee8cc1Swenshuai.xi // [Arguments]:
2797*53ee8cc1Swenshuai.xi //
2798*53ee8cc1Swenshuai.xi // [Return]:
2799*53ee8cc1Swenshuai.xi //
2800*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InsertChipIDforCheck(MS_U8 ucChipID)2801*53ee8cc1Swenshuai.xi void mhal_mhl_InsertChipIDforCheck(MS_U8 ucChipID)
2802*53ee8cc1Swenshuai.xi {
2803*53ee8cc1Swenshuai.xi ucChipIDValue = ucChipID;
2804*53ee8cc1Swenshuai.xi
2805*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL Cbus index value %x\r\n", ucChipID);
2806*53ee8cc1Swenshuai.xi }
2807*53ee8cc1Swenshuai.xi
2808*53ee8cc1Swenshuai.xi //**************************************************************************
2809*53ee8cc1Swenshuai.xi // [Function Name]:
2810*53ee8cc1Swenshuai.xi // mhal_mhl_CableDetect()
2811*53ee8cc1Swenshuai.xi // [Description]
2812*53ee8cc1Swenshuai.xi // MHL cable detection
2813*53ee8cc1Swenshuai.xi // [Arguments]:
2814*53ee8cc1Swenshuai.xi //
2815*53ee8cc1Swenshuai.xi // [Return]:
2816*53ee8cc1Swenshuai.xi // TRUE: MHL cable plugged
2817*53ee8cc1Swenshuai.xi // FALSE: MHL cable unplugged
2818*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableDetect(MS_U8 ucCbusSelect)2819*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CableDetect(MS_U8 ucCbusSelect)
2820*53ee8cc1Swenshuai.xi {
2821*53ee8cc1Swenshuai.xi MS_BOOL bFlag = FALSE;
2822*53ee8cc1Swenshuai.xi
2823*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2824*53ee8cc1Swenshuai.xi {
2825*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2826*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2827*53ee8cc1Swenshuai.xi bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
2828*53ee8cc1Swenshuai.xi break;
2829*53ee8cc1Swenshuai.xi #endif
2830*53ee8cc1Swenshuai.xi
2831*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2832*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2833*53ee8cc1Swenshuai.xi bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
2834*53ee8cc1Swenshuai.xi break;
2835*53ee8cc1Swenshuai.xi #endif
2836*53ee8cc1Swenshuai.xi
2837*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2838*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2839*53ee8cc1Swenshuai.xi bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
2840*53ee8cc1Swenshuai.xi break;
2841*53ee8cc1Swenshuai.xi #endif
2842*53ee8cc1Swenshuai.xi
2843*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2844*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2845*53ee8cc1Swenshuai.xi bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
2846*53ee8cc1Swenshuai.xi break;
2847*53ee8cc1Swenshuai.xi #endif
2848*53ee8cc1Swenshuai.xi
2849*53ee8cc1Swenshuai.xi default:
2850*53ee8cc1Swenshuai.xi
2851*53ee8cc1Swenshuai.xi break;
2852*53ee8cc1Swenshuai.xi };
2853*53ee8cc1Swenshuai.xi
2854*53ee8cc1Swenshuai.xi return bFlag;
2855*53ee8cc1Swenshuai.xi }
2856*53ee8cc1Swenshuai.xi
2857*53ee8cc1Swenshuai.xi //**************************************************************************
2858*53ee8cc1Swenshuai.xi // [Function Name]:
2859*53ee8cc1Swenshuai.xi // mhal_mhl_Accumulator_Clr()
2860*53ee8cc1Swenshuai.xi // [Description]
2861*53ee8cc1Swenshuai.xi // to clear accumulator when input is not MHL
2862*53ee8cc1Swenshuai.xi // [Arguments]:
2863*53ee8cc1Swenshuai.xi //
2864*53ee8cc1Swenshuai.xi // [Return]:
2865*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_Accumulator_Clr(MS_U8 ucCbusSelect)2866*53ee8cc1Swenshuai.xi void mhal_mhl_Accumulator_Clr(MS_U8 ucCbusSelect)
2867*53ee8cc1Swenshuai.xi {
2868*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2869*53ee8cc1Swenshuai.xi {
2870*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2871*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2872*53ee8cc1Swenshuai.xi
2873*53ee8cc1Swenshuai.xi break;
2874*53ee8cc1Swenshuai.xi #endif
2875*53ee8cc1Swenshuai.xi
2876*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2877*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2878*53ee8cc1Swenshuai.xi
2879*53ee8cc1Swenshuai.xi break;
2880*53ee8cc1Swenshuai.xi #endif
2881*53ee8cc1Swenshuai.xi
2882*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2883*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2884*53ee8cc1Swenshuai.xi
2885*53ee8cc1Swenshuai.xi break;
2886*53ee8cc1Swenshuai.xi #endif
2887*53ee8cc1Swenshuai.xi
2888*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2889*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2890*53ee8cc1Swenshuai.xi
2891*53ee8cc1Swenshuai.xi break;
2892*53ee8cc1Swenshuai.xi #endif
2893*53ee8cc1Swenshuai.xi
2894*53ee8cc1Swenshuai.xi default:
2895*53ee8cc1Swenshuai.xi
2896*53ee8cc1Swenshuai.xi break;
2897*53ee8cc1Swenshuai.xi };
2898*53ee8cc1Swenshuai.xi }
2899*53ee8cc1Swenshuai.xi
2900*53ee8cc1Swenshuai.xi //**************************************************************************
2901*53ee8cc1Swenshuai.xi // [Function Name]:
2902*53ee8cc1Swenshuai.xi // mhal_mhl_CDRModeMonitor()
2903*53ee8cc1Swenshuai.xi // [Description]:
2904*53ee8cc1Swenshuai.xi // MHL CDR mode monitor
2905*53ee8cc1Swenshuai.xi // [Arguments]:
2906*53ee8cc1Swenshuai.xi // isCbusConnected: Cbus is at connected state or not
2907*53ee8cc1Swenshuai.xi // [Return]:
2908*53ee8cc1Swenshuai.xi //
2909*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CDRModeMonitor(MS_U8 ucCbusSelect,MS_BOOL bPathEnable,stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus)2910*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CDRModeMonitor(MS_U8 ucCbusSelect, MS_BOOL bPathEnable, stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus)
2911*53ee8cc1Swenshuai.xi {
2912*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
2913*53ee8cc1Swenshuai.xi
2914*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2915*53ee8cc1Swenshuai.xi {
2916*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2917*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2918*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
2919*53ee8cc1Swenshuai.xi {
2920*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
2921*53ee8cc1Swenshuai.xi {
2922*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount++;
2923*53ee8cc1Swenshuai.xi }
2924*53ee8cc1Swenshuai.xi
2925*53ee8cc1Swenshuai.xi if(!pMHLSignalStatus->bClockStableFlag)
2926*53ee8cc1Swenshuai.xi {
2927*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, 0, BIT(8));
2928*53ee8cc1Swenshuai.xi
2929*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = TRUE;
2930*53ee8cc1Swenshuai.xi
2931*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
2932*53ee8cc1Swenshuai.xi {
2933*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = TRUE;
2934*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_START;
2935*53ee8cc1Swenshuai.xi }
2936*53ee8cc1Swenshuai.xi }
2937*53ee8cc1Swenshuai.xi
2938*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P0_31_L) &BIT(6)) == BIT(6)) // DE stable
2939*53ee8cc1Swenshuai.xi {
2940*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < MHL_CDR_STABLE_THRESHOLD)
2941*53ee8cc1Swenshuai.xi {
2942*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = MHL_CDR_STABLE_THRESHOLD;
2943*53ee8cc1Swenshuai.xi }
2944*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
2945*53ee8cc1Swenshuai.xi {
2946*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
2947*53ee8cc1Swenshuai.xi {
2948*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_72_L, BIT(13), BIT(13));
2949*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
2950*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_72_L, 0, BIT(13));
2951*53ee8cc1Swenshuai.xi
2952*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL toggle reset patch ~~~\r\n");
2953*53ee8cc1Swenshuai.xi }
2954*53ee8cc1Swenshuai.xi
2955*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = TRUE;
2956*53ee8cc1Swenshuai.xi }
2957*53ee8cc1Swenshuai.xi
2958*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bBISTEnableFlag)
2959*53ee8cc1Swenshuai.xi {
2960*53ee8cc1Swenshuai.xi if(_mhal_mhl_CheckDEChangeFlag())
2961*53ee8cc1Swenshuai.xi {
2962*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL trigger AV link BIST yo~~\r\n");
2963*53ee8cc1Swenshuai.xi
2964*53ee8cc1Swenshuai.xi _mhal_mhl_BISTAVLinkEnable(ucCbusSelect, TRUE);
2965*53ee8cc1Swenshuai.xi }
2966*53ee8cc1Swenshuai.xi }
2967*53ee8cc1Swenshuai.xi }
2968*53ee8cc1Swenshuai.xi else // DE unstable
2969*53ee8cc1Swenshuai.xi {
2970*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
2971*53ee8cc1Swenshuai.xi {
2972*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
2973*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
2974*53ee8cc1Swenshuai.xi }
2975*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
2976*53ee8cc1Swenshuai.xi {
2977*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL time change toggle CDR mode\r\n");
2978*53ee8cc1Swenshuai.xi
2979*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
2980*53ee8cc1Swenshuai.xi }
2981*53ee8cc1Swenshuai.xi }
2982*53ee8cc1Swenshuai.xi }
2983*53ee8cc1Swenshuai.xi else
2984*53ee8cc1Swenshuai.xi {
2985*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bClockStableFlag)
2986*53ee8cc1Swenshuai.xi {
2987*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, BIT(8), BIT(8));
2988*53ee8cc1Swenshuai.xi
2989*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = FALSE;
2990*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
2991*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = FALSE;
2992*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
2993*53ee8cc1Swenshuai.xi }
2994*53ee8cc1Swenshuai.xi }
2995*53ee8cc1Swenshuai.xi
2996*53ee8cc1Swenshuai.xi break;
2997*53ee8cc1Swenshuai.xi #endif
2998*53ee8cc1Swenshuai.xi
2999*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3000*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3001*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
3002*53ee8cc1Swenshuai.xi {
3003*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
3004*53ee8cc1Swenshuai.xi {
3005*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount++;
3006*53ee8cc1Swenshuai.xi }
3007*53ee8cc1Swenshuai.xi
3008*53ee8cc1Swenshuai.xi if(!pMHLSignalStatus->bClockStableFlag)
3009*53ee8cc1Swenshuai.xi {
3010*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6E_L, 0, BIT(8));
3011*53ee8cc1Swenshuai.xi
3012*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = TRUE;
3013*53ee8cc1Swenshuai.xi
3014*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
3015*53ee8cc1Swenshuai.xi {
3016*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = TRUE;
3017*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_START;
3018*53ee8cc1Swenshuai.xi }
3019*53ee8cc1Swenshuai.xi }
3020*53ee8cc1Swenshuai.xi
3021*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P1_31_L) &BIT(6)) == BIT(6)) // DE stable
3022*53ee8cc1Swenshuai.xi {
3023*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < MHL_CDR_STABLE_THRESHOLD)
3024*53ee8cc1Swenshuai.xi {
3025*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = MHL_CDR_STABLE_THRESHOLD;
3026*53ee8cc1Swenshuai.xi }
3027*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
3028*53ee8cc1Swenshuai.xi {
3029*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
3030*53ee8cc1Swenshuai.xi {
3031*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_72_L, BIT(13), BIT(13));
3032*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
3033*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_72_L, 0, BIT(13));
3034*53ee8cc1Swenshuai.xi
3035*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL toggle reset patch ~~~\r\n");
3036*53ee8cc1Swenshuai.xi }
3037*53ee8cc1Swenshuai.xi
3038*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = TRUE;
3039*53ee8cc1Swenshuai.xi }
3040*53ee8cc1Swenshuai.xi
3041*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bBISTEnableFlag)
3042*53ee8cc1Swenshuai.xi {
3043*53ee8cc1Swenshuai.xi if(_mhal_mhl_CheckDEChangeFlag())
3044*53ee8cc1Swenshuai.xi {
3045*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL trigger AV link BIST yo~~\r\n");
3046*53ee8cc1Swenshuai.xi
3047*53ee8cc1Swenshuai.xi _mhal_mhl_BISTAVLinkEnable(ucCbusSelect, TRUE);
3048*53ee8cc1Swenshuai.xi }
3049*53ee8cc1Swenshuai.xi }
3050*53ee8cc1Swenshuai.xi }
3051*53ee8cc1Swenshuai.xi else // DE unstable
3052*53ee8cc1Swenshuai.xi {
3053*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
3054*53ee8cc1Swenshuai.xi {
3055*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3056*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
3057*53ee8cc1Swenshuai.xi }
3058*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
3059*53ee8cc1Swenshuai.xi {
3060*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL time change toggle CDR mode\r\n");
3061*53ee8cc1Swenshuai.xi
3062*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3063*53ee8cc1Swenshuai.xi }
3064*53ee8cc1Swenshuai.xi }
3065*53ee8cc1Swenshuai.xi }
3066*53ee8cc1Swenshuai.xi else
3067*53ee8cc1Swenshuai.xi {
3068*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bClockStableFlag)
3069*53ee8cc1Swenshuai.xi {
3070*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6E_L, BIT(8), BIT(8));
3071*53ee8cc1Swenshuai.xi
3072*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = FALSE;
3073*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3074*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = FALSE;
3075*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
3076*53ee8cc1Swenshuai.xi }
3077*53ee8cc1Swenshuai.xi }
3078*53ee8cc1Swenshuai.xi
3079*53ee8cc1Swenshuai.xi break;
3080*53ee8cc1Swenshuai.xi #endif
3081*53ee8cc1Swenshuai.xi
3082*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3083*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3084*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
3085*53ee8cc1Swenshuai.xi {
3086*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
3087*53ee8cc1Swenshuai.xi {
3088*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount++;
3089*53ee8cc1Swenshuai.xi }
3090*53ee8cc1Swenshuai.xi
3091*53ee8cc1Swenshuai.xi if(!pMHLSignalStatus->bClockStableFlag)
3092*53ee8cc1Swenshuai.xi {
3093*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6E_L, 0, BIT(8));
3094*53ee8cc1Swenshuai.xi
3095*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = TRUE;
3096*53ee8cc1Swenshuai.xi
3097*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
3098*53ee8cc1Swenshuai.xi {
3099*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = TRUE;
3100*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_START;
3101*53ee8cc1Swenshuai.xi }
3102*53ee8cc1Swenshuai.xi }
3103*53ee8cc1Swenshuai.xi
3104*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P2_31_L) &BIT(6)) == BIT(6)) // DE stable
3105*53ee8cc1Swenshuai.xi {
3106*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < MHL_CDR_STABLE_THRESHOLD)
3107*53ee8cc1Swenshuai.xi {
3108*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = MHL_CDR_STABLE_THRESHOLD;
3109*53ee8cc1Swenshuai.xi }
3110*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
3111*53ee8cc1Swenshuai.xi {
3112*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
3113*53ee8cc1Swenshuai.xi {
3114*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_72_L, BIT(13), BIT(13));
3115*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
3116*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_72_L, 0, BIT(13));
3117*53ee8cc1Swenshuai.xi
3118*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL toggle reset patch ~~~\r\n");
3119*53ee8cc1Swenshuai.xi }
3120*53ee8cc1Swenshuai.xi
3121*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = TRUE;
3122*53ee8cc1Swenshuai.xi }
3123*53ee8cc1Swenshuai.xi
3124*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bBISTEnableFlag)
3125*53ee8cc1Swenshuai.xi {
3126*53ee8cc1Swenshuai.xi if(_mhal_mhl_CheckDEChangeFlag())
3127*53ee8cc1Swenshuai.xi {
3128*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL trigger AV link BIST yo~~\r\n");
3129*53ee8cc1Swenshuai.xi
3130*53ee8cc1Swenshuai.xi _mhal_mhl_BISTAVLinkEnable(ucCbusSelect, TRUE);
3131*53ee8cc1Swenshuai.xi }
3132*53ee8cc1Swenshuai.xi }
3133*53ee8cc1Swenshuai.xi }
3134*53ee8cc1Swenshuai.xi else // DE unstable
3135*53ee8cc1Swenshuai.xi {
3136*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
3137*53ee8cc1Swenshuai.xi {
3138*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3139*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
3140*53ee8cc1Swenshuai.xi }
3141*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
3142*53ee8cc1Swenshuai.xi {
3143*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL time change toggle CDR mode\r\n");
3144*53ee8cc1Swenshuai.xi
3145*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3146*53ee8cc1Swenshuai.xi }
3147*53ee8cc1Swenshuai.xi }
3148*53ee8cc1Swenshuai.xi }
3149*53ee8cc1Swenshuai.xi else
3150*53ee8cc1Swenshuai.xi {
3151*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bClockStableFlag)
3152*53ee8cc1Swenshuai.xi {
3153*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6E_L, BIT(8), BIT(8));
3154*53ee8cc1Swenshuai.xi
3155*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = FALSE;
3156*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3157*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = FALSE;
3158*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
3159*53ee8cc1Swenshuai.xi }
3160*53ee8cc1Swenshuai.xi }
3161*53ee8cc1Swenshuai.xi
3162*53ee8cc1Swenshuai.xi break;
3163*53ee8cc1Swenshuai.xi #endif
3164*53ee8cc1Swenshuai.xi
3165*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3166*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3167*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
3168*53ee8cc1Swenshuai.xi {
3169*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
3170*53ee8cc1Swenshuai.xi {
3171*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount++;
3172*53ee8cc1Swenshuai.xi }
3173*53ee8cc1Swenshuai.xi
3174*53ee8cc1Swenshuai.xi if(!pMHLSignalStatus->bClockStableFlag)
3175*53ee8cc1Swenshuai.xi {
3176*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6E_L, 0, BIT(8));
3177*53ee8cc1Swenshuai.xi
3178*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = TRUE;
3179*53ee8cc1Swenshuai.xi
3180*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
3181*53ee8cc1Swenshuai.xi {
3182*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = TRUE;
3183*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_START;
3184*53ee8cc1Swenshuai.xi }
3185*53ee8cc1Swenshuai.xi }
3186*53ee8cc1Swenshuai.xi
3187*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P3_31_L) &BIT(6)) == BIT(6)) // DE stable
3188*53ee8cc1Swenshuai.xi {
3189*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount < MHL_CDR_STABLE_THRESHOLD)
3190*53ee8cc1Swenshuai.xi {
3191*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = MHL_CDR_STABLE_THRESHOLD;
3192*53ee8cc1Swenshuai.xi }
3193*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
3194*53ee8cc1Swenshuai.xi {
3195*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bECbusEnableFlag)
3196*53ee8cc1Swenshuai.xi {
3197*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_72_L, BIT(13), BIT(13));
3198*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
3199*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_72_L, 0, BIT(13));
3200*53ee8cc1Swenshuai.xi
3201*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL toggle reset patch ~~~\r\n");
3202*53ee8cc1Swenshuai.xi }
3203*53ee8cc1Swenshuai.xi
3204*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = TRUE;
3205*53ee8cc1Swenshuai.xi }
3206*53ee8cc1Swenshuai.xi
3207*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bBISTEnableFlag)
3208*53ee8cc1Swenshuai.xi {
3209*53ee8cc1Swenshuai.xi if(_mhal_mhl_CheckDEChangeFlag())
3210*53ee8cc1Swenshuai.xi {
3211*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL trigger AV link BIST yo~~\r\n");
3212*53ee8cc1Swenshuai.xi
3213*53ee8cc1Swenshuai.xi _mhal_mhl_BISTAVLinkEnable(ucCbusSelect, TRUE);
3214*53ee8cc1Swenshuai.xi }
3215*53ee8cc1Swenshuai.xi }
3216*53ee8cc1Swenshuai.xi }
3217*53ee8cc1Swenshuai.xi else // DE unstable
3218*53ee8cc1Swenshuai.xi {
3219*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
3220*53ee8cc1Swenshuai.xi {
3221*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3222*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
3223*53ee8cc1Swenshuai.xi }
3224*53ee8cc1Swenshuai.xi else if(pMHLSignalStatus->ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
3225*53ee8cc1Swenshuai.xi {
3226*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL time change toggle CDR mode\r\n");
3227*53ee8cc1Swenshuai.xi
3228*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3229*53ee8cc1Swenshuai.xi }
3230*53ee8cc1Swenshuai.xi }
3231*53ee8cc1Swenshuai.xi }
3232*53ee8cc1Swenshuai.xi else
3233*53ee8cc1Swenshuai.xi {
3234*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bClockStableFlag)
3235*53ee8cc1Swenshuai.xi {
3236*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6E_L, BIT(8), BIT(8));
3237*53ee8cc1Swenshuai.xi
3238*53ee8cc1Swenshuai.xi pMHLSignalStatus->bClockStableFlag = FALSE;
3239*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucStableCount = 0;
3240*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = FALSE;
3241*53ee8cc1Swenshuai.xi pMHLSignalStatus->bSignalStableFlag = FALSE;
3242*53ee8cc1Swenshuai.xi }
3243*53ee8cc1Swenshuai.xi }
3244*53ee8cc1Swenshuai.xi
3245*53ee8cc1Swenshuai.xi break;
3246*53ee8cc1Swenshuai.xi #endif
3247*53ee8cc1Swenshuai.xi
3248*53ee8cc1Swenshuai.xi default:
3249*53ee8cc1Swenshuai.xi
3250*53ee8cc1Swenshuai.xi break;
3251*53ee8cc1Swenshuai.xi };
3252*53ee8cc1Swenshuai.xi
3253*53ee8cc1Swenshuai.xi return bindex;
3254*53ee8cc1Swenshuai.xi }
3255*53ee8cc1Swenshuai.xi
3256*53ee8cc1Swenshuai.xi //**************************************************************************
3257*53ee8cc1Swenshuai.xi // [Function Name]:
3258*53ee8cc1Swenshuai.xi // mhal_mhl_CbusIsolate()
3259*53ee8cc1Swenshuai.xi // [Description]
3260*53ee8cc1Swenshuai.xi // MHL cable isolate
3261*53ee8cc1Swenshuai.xi // [Arguments]:
3262*53ee8cc1Swenshuai.xi //
3263*53ee8cc1Swenshuai.xi // [Return]:
3264*53ee8cc1Swenshuai.xi //
3265*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIsolate(MS_U8 ucCbusSelect,MS_BOOL bFlag)3266*53ee8cc1Swenshuai.xi void mhal_mhl_CbusIsolate(MS_U8 ucCbusSelect, MS_BOOL bFlag)
3267*53ee8cc1Swenshuai.xi {
3268*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3269*53ee8cc1Swenshuai.xi {
3270*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3271*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3272*53ee8cc1Swenshuai.xi if(bFlag)
3273*53ee8cc1Swenshuai.xi {
3274*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
3275*53ee8cc1Swenshuai.xi }
3276*53ee8cc1Swenshuai.xi else
3277*53ee8cc1Swenshuai.xi {
3278*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
3279*53ee8cc1Swenshuai.xi }
3280*53ee8cc1Swenshuai.xi
3281*53ee8cc1Swenshuai.xi break;
3282*53ee8cc1Swenshuai.xi #endif
3283*53ee8cc1Swenshuai.xi
3284*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3285*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3286*53ee8cc1Swenshuai.xi if(bFlag)
3287*53ee8cc1Swenshuai.xi {
3288*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
3289*53ee8cc1Swenshuai.xi }
3290*53ee8cc1Swenshuai.xi else
3291*53ee8cc1Swenshuai.xi {
3292*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
3293*53ee8cc1Swenshuai.xi }
3294*53ee8cc1Swenshuai.xi
3295*53ee8cc1Swenshuai.xi break;
3296*53ee8cc1Swenshuai.xi #endif
3297*53ee8cc1Swenshuai.xi
3298*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3299*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3300*53ee8cc1Swenshuai.xi if(bFlag)
3301*53ee8cc1Swenshuai.xi {
3302*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
3303*53ee8cc1Swenshuai.xi }
3304*53ee8cc1Swenshuai.xi else
3305*53ee8cc1Swenshuai.xi {
3306*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
3307*53ee8cc1Swenshuai.xi }
3308*53ee8cc1Swenshuai.xi
3309*53ee8cc1Swenshuai.xi break;
3310*53ee8cc1Swenshuai.xi #endif
3311*53ee8cc1Swenshuai.xi
3312*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3313*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3314*53ee8cc1Swenshuai.xi if(bFlag)
3315*53ee8cc1Swenshuai.xi {
3316*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
3317*53ee8cc1Swenshuai.xi }
3318*53ee8cc1Swenshuai.xi else
3319*53ee8cc1Swenshuai.xi {
3320*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
3321*53ee8cc1Swenshuai.xi }
3322*53ee8cc1Swenshuai.xi
3323*53ee8cc1Swenshuai.xi break;
3324*53ee8cc1Swenshuai.xi #endif
3325*53ee8cc1Swenshuai.xi
3326*53ee8cc1Swenshuai.xi default:
3327*53ee8cc1Swenshuai.xi
3328*53ee8cc1Swenshuai.xi break;
3329*53ee8cc1Swenshuai.xi };
3330*53ee8cc1Swenshuai.xi }
3331*53ee8cc1Swenshuai.xi
3332*53ee8cc1Swenshuai.xi //**************************************************************************
3333*53ee8cc1Swenshuai.xi // [Function Name]:
3334*53ee8cc1Swenshuai.xi // mhal_mhl_VbusCharge()
3335*53ee8cc1Swenshuai.xi // [Description]
3336*53ee8cc1Swenshuai.xi // MHL Vbus charge
3337*53ee8cc1Swenshuai.xi // [Arguments]:
3338*53ee8cc1Swenshuai.xi //
3339*53ee8cc1Swenshuai.xi // [Return]:
3340*53ee8cc1Swenshuai.xi //
3341*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_VbusCharge(MS_U8 ucCbusSelect,MS_U8 bState)3342*53ee8cc1Swenshuai.xi void mhal_mhl_VbusCharge(MS_U8 ucCbusSelect, MS_U8 bState)
3343*53ee8cc1Swenshuai.xi {
3344*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3345*53ee8cc1Swenshuai.xi {
3346*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3347*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3348*53ee8cc1Swenshuai.xi if(bState == VBUS_SW_CHARGE)
3349*53ee8cc1Swenshuai.xi {
3350*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
3351*53ee8cc1Swenshuai.xi }
3352*53ee8cc1Swenshuai.xi else if(bState == VBUS_SW_UNCHARGE)
3353*53ee8cc1Swenshuai.xi {
3354*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
3355*53ee8cc1Swenshuai.xi }
3356*53ee8cc1Swenshuai.xi else
3357*53ee8cc1Swenshuai.xi {
3358*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
3359*53ee8cc1Swenshuai.xi }
3360*53ee8cc1Swenshuai.xi
3361*53ee8cc1Swenshuai.xi break;
3362*53ee8cc1Swenshuai.xi #endif
3363*53ee8cc1Swenshuai.xi
3364*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3365*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3366*53ee8cc1Swenshuai.xi if(bState == VBUS_SW_CHARGE)
3367*53ee8cc1Swenshuai.xi {
3368*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
3369*53ee8cc1Swenshuai.xi }
3370*53ee8cc1Swenshuai.xi else if(bState == VBUS_SW_UNCHARGE)
3371*53ee8cc1Swenshuai.xi {
3372*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
3373*53ee8cc1Swenshuai.xi }
3374*53ee8cc1Swenshuai.xi else
3375*53ee8cc1Swenshuai.xi {
3376*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
3377*53ee8cc1Swenshuai.xi }
3378*53ee8cc1Swenshuai.xi
3379*53ee8cc1Swenshuai.xi break;
3380*53ee8cc1Swenshuai.xi #endif
3381*53ee8cc1Swenshuai.xi
3382*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3383*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3384*53ee8cc1Swenshuai.xi if(bState == VBUS_SW_CHARGE)
3385*53ee8cc1Swenshuai.xi {
3386*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
3387*53ee8cc1Swenshuai.xi }
3388*53ee8cc1Swenshuai.xi else if(bState == VBUS_SW_UNCHARGE)
3389*53ee8cc1Swenshuai.xi {
3390*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
3391*53ee8cc1Swenshuai.xi }
3392*53ee8cc1Swenshuai.xi else
3393*53ee8cc1Swenshuai.xi {
3394*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
3395*53ee8cc1Swenshuai.xi }
3396*53ee8cc1Swenshuai.xi
3397*53ee8cc1Swenshuai.xi break;
3398*53ee8cc1Swenshuai.xi #endif
3399*53ee8cc1Swenshuai.xi
3400*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3401*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3402*53ee8cc1Swenshuai.xi if(bState == VBUS_SW_CHARGE)
3403*53ee8cc1Swenshuai.xi {
3404*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
3405*53ee8cc1Swenshuai.xi }
3406*53ee8cc1Swenshuai.xi else if(bState == VBUS_SW_UNCHARGE)
3407*53ee8cc1Swenshuai.xi {
3408*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
3409*53ee8cc1Swenshuai.xi }
3410*53ee8cc1Swenshuai.xi else
3411*53ee8cc1Swenshuai.xi {
3412*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
3413*53ee8cc1Swenshuai.xi }
3414*53ee8cc1Swenshuai.xi
3415*53ee8cc1Swenshuai.xi break;
3416*53ee8cc1Swenshuai.xi #endif
3417*53ee8cc1Swenshuai.xi
3418*53ee8cc1Swenshuai.xi default:
3419*53ee8cc1Swenshuai.xi
3420*53ee8cc1Swenshuai.xi break;
3421*53ee8cc1Swenshuai.xi };
3422*53ee8cc1Swenshuai.xi }
3423*53ee8cc1Swenshuai.xi
3424*53ee8cc1Swenshuai.xi //**************************************************************************
3425*53ee8cc1Swenshuai.xi // [Function Name]:
3426*53ee8cc1Swenshuai.xi // mhal_mhl_CbusFloating()
3427*53ee8cc1Swenshuai.xi // [Description]
3428*53ee8cc1Swenshuai.xi // MHL cable floating
3429*53ee8cc1Swenshuai.xi // [Arguments]:
3430*53ee8cc1Swenshuai.xi //
3431*53ee8cc1Swenshuai.xi // [Return]:
3432*53ee8cc1Swenshuai.xi //
3433*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusFloating(MS_BOOL bFlag)3434*53ee8cc1Swenshuai.xi void mhal_mhl_CbusFloating(MS_BOOL bFlag)
3435*53ee8cc1Swenshuai.xi {
3436*53ee8cc1Swenshuai.xi if(bFlag)
3437*53ee8cc1Swenshuai.xi {
3438*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(5), BIT(5));
3439*53ee8cc1Swenshuai.xi }
3440*53ee8cc1Swenshuai.xi else
3441*53ee8cc1Swenshuai.xi {
3442*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, 0, BIT(5));
3443*53ee8cc1Swenshuai.xi }
3444*53ee8cc1Swenshuai.xi }
3445*53ee8cc1Swenshuai.xi
3446*53ee8cc1Swenshuai.xi //**************************************************************************
3447*53ee8cc1Swenshuai.xi // [Function Name]:
3448*53ee8cc1Swenshuai.xi // mhal_mhl_CbusStucktoLow()
3449*53ee8cc1Swenshuai.xi // [Description]
3450*53ee8cc1Swenshuai.xi //
3451*53ee8cc1Swenshuai.xi // [Arguments]:
3452*53ee8cc1Swenshuai.xi //
3453*53ee8cc1Swenshuai.xi // [Return]:
3454*53ee8cc1Swenshuai.xi //
3455*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLow(MS_BOOL bFlag)3456*53ee8cc1Swenshuai.xi void mhal_mhl_CbusStucktoLow(MS_BOOL bFlag)
3457*53ee8cc1Swenshuai.xi {
3458*53ee8cc1Swenshuai.xi if(bFlag)
3459*53ee8cc1Swenshuai.xi {
3460*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, 0, BIT(1)); // cbus stuck to low int mask
3461*53ee8cc1Swenshuai.xi }
3462*53ee8cc1Swenshuai.xi else
3463*53ee8cc1Swenshuai.xi {
3464*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(1), BIT(1)); // cbus stuck to low int mask
3465*53ee8cc1Swenshuai.xi }
3466*53ee8cc1Swenshuai.xi
3467*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(0), BIT(0)); // Clear cbus stuck to low int flag
3468*53ee8cc1Swenshuai.xi }
3469*53ee8cc1Swenshuai.xi
3470*53ee8cc1Swenshuai.xi //**************************************************************************
3471*53ee8cc1Swenshuai.xi // [Function Name]:
3472*53ee8cc1Swenshuai.xi // mhal_mhl_CbusWakeupInterrupt()
3473*53ee8cc1Swenshuai.xi // [Description]
3474*53ee8cc1Swenshuai.xi //
3475*53ee8cc1Swenshuai.xi // [Arguments]:
3476*53ee8cc1Swenshuai.xi //
3477*53ee8cc1Swenshuai.xi // [Return]:
3478*53ee8cc1Swenshuai.xi //
3479*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupInterrupt(MS_BOOL bFlag)3480*53ee8cc1Swenshuai.xi void mhal_mhl_CbusWakeupInterrupt(MS_BOOL bFlag)
3481*53ee8cc1Swenshuai.xi {
3482*53ee8cc1Swenshuai.xi if(bFlag)
3483*53ee8cc1Swenshuai.xi {
3484*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, 0, BIT(5)); // wake up pulse int mask
3485*53ee8cc1Swenshuai.xi }
3486*53ee8cc1Swenshuai.xi else
3487*53ee8cc1Swenshuai.xi {
3488*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(5), BIT(5)); // wake up pulse int mask
3489*53ee8cc1Swenshuai.xi }
3490*53ee8cc1Swenshuai.xi
3491*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(4), BIT(4)); // Clear wake up pulse int flag
3492*53ee8cc1Swenshuai.xi }
3493*53ee8cc1Swenshuai.xi
3494*53ee8cc1Swenshuai.xi //**************************************************************************
3495*53ee8cc1Swenshuai.xi // [Function Name]:
3496*53ee8cc1Swenshuai.xi // mhal_mhl_SetVenderID()
3497*53ee8cc1Swenshuai.xi // [Description]
3498*53ee8cc1Swenshuai.xi //
3499*53ee8cc1Swenshuai.xi // [Arguments]:
3500*53ee8cc1Swenshuai.xi //
3501*53ee8cc1Swenshuai.xi // [Return]:
3502*53ee8cc1Swenshuai.xi //
3503*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetVenderID(MS_U8 ucVenderID)3504*53ee8cc1Swenshuai.xi void mhal_mhl_SetVenderID(MS_U8 ucVenderID)
3505*53ee8cc1Swenshuai.xi {
3506*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_00, (ucVenderID << 8), BMASK(15:8));
3507*53ee8cc1Swenshuai.xi }
3508*53ee8cc1Swenshuai.xi
3509*53ee8cc1Swenshuai.xi //**************************************************************************
3510*53ee8cc1Swenshuai.xi // [Function Name]:
3511*53ee8cc1Swenshuai.xi // mhal_mhl_LoadEDID()
3512*53ee8cc1Swenshuai.xi // [Description]
3513*53ee8cc1Swenshuai.xi //
3514*53ee8cc1Swenshuai.xi // [Arguments]:
3515*53ee8cc1Swenshuai.xi //
3516*53ee8cc1Swenshuai.xi // [Return]:
3517*53ee8cc1Swenshuai.xi //
3518*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadEDID(MS_U8 * edid)3519*53ee8cc1Swenshuai.xi void mhal_mhl_LoadEDID(MS_U8 *edid)
3520*53ee8cc1Swenshuai.xi {
3521*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
3522*53ee8cc1Swenshuai.xi
3523*53ee8cc1Swenshuai.xi if(edid != NULL)
3524*53ee8cc1Swenshuai.xi {
3525*53ee8cc1Swenshuai.xi // Load EDID
3526*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** Manhattan Load MHL EDID...\r\n");
3527*53ee8cc1Swenshuai.xi
3528*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, BIT(1), BIT(1)); // CPU write enable
3529*53ee8cc1Swenshuai.xi
3530*53ee8cc1Swenshuai.xi for(ustemp = 0; ustemp <256; ustemp++)
3531*53ee8cc1Swenshuai.xi {
3532*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, ustemp <<8, 0xFF00); // address
3533*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_53, edid[ustemp], 0x00FF); // data
3534*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, BIT(0), BIT(0)); // write trigger
3535*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(0));
3536*53ee8cc1Swenshuai.xi while(R2BYTE(REG_MHL_CBUS_52) & BIT(5));
3537*53ee8cc1Swenshuai.xi }
3538*53ee8cc1Swenshuai.xi
3539*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(1)); // CPU write disable
3540*53ee8cc1Swenshuai.xi }
3541*53ee8cc1Swenshuai.xi }
3542*53ee8cc1Swenshuai.xi
3543*53ee8cc1Swenshuai.xi //**************************************************************************
3544*53ee8cc1Swenshuai.xi // [Function Name]:
3545*53ee8cc1Swenshuai.xi // mhal_mhl_ReadEDID()
3546*53ee8cc1Swenshuai.xi // [Description]
3547*53ee8cc1Swenshuai.xi //
3548*53ee8cc1Swenshuai.xi // [Arguments]:
3549*53ee8cc1Swenshuai.xi //
3550*53ee8cc1Swenshuai.xi // [Return]:
3551*53ee8cc1Swenshuai.xi //
3552*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ReadEDID(MS_U16 usSize,MS_U8 * edid)3553*53ee8cc1Swenshuai.xi void mhal_mhl_ReadEDID(MS_U16 usSize, MS_U8 *edid)
3554*53ee8cc1Swenshuai.xi {
3555*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
3556*53ee8cc1Swenshuai.xi
3557*53ee8cc1Swenshuai.xi if(edid != NULL)
3558*53ee8cc1Swenshuai.xi {
3559*53ee8cc1Swenshuai.xi // Read EDID
3560*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** Manhattan Read MHL EDID...\r\n");
3561*53ee8cc1Swenshuai.xi
3562*53ee8cc1Swenshuai.xi for(ustemp = 0; ustemp < usSize; ustemp++)
3563*53ee8cc1Swenshuai.xi {
3564*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, ustemp <<8, 0xFF00); // address
3565*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, BIT(3), BIT(3)); // read trigger
3566*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(0));
3567*53ee8cc1Swenshuai.xi while(R2BYTE(REG_MHL_CBUS_52) & BIT(4));
3568*53ee8cc1Swenshuai.xi
3569*53ee8cc1Swenshuai.xi edid[ustemp] = (MS_U8)((R2BYTE(REG_MHL_CBUS_53) & 0xFF00) >> 8); // data
3570*53ee8cc1Swenshuai.xi }
3571*53ee8cc1Swenshuai.xi }
3572*53ee8cc1Swenshuai.xi }
3573*53ee8cc1Swenshuai.xi
3574*53ee8cc1Swenshuai.xi //**************************************************************************
3575*53ee8cc1Swenshuai.xi // [Function Name]:
3576*53ee8cc1Swenshuai.xi // mhal_mhl_LoadDeviceCapability()
3577*53ee8cc1Swenshuai.xi // [Description]
3578*53ee8cc1Swenshuai.xi //
3579*53ee8cc1Swenshuai.xi // [Arguments]:
3580*53ee8cc1Swenshuai.xi //
3581*53ee8cc1Swenshuai.xi // [Return]:
3582*53ee8cc1Swenshuai.xi //
3583*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadDeviceCapability(MS_U8 * devcap)3584*53ee8cc1Swenshuai.xi void mhal_mhl_LoadDeviceCapability(MS_U8 *devcap)
3585*53ee8cc1Swenshuai.xi {
3586*53ee8cc1Swenshuai.xi MS_U8 ucIndex = 0;
3587*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
3588*53ee8cc1Swenshuai.xi
3589*53ee8cc1Swenshuai.xi if(devcap != NULL)
3590*53ee8cc1Swenshuai.xi {
3591*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** Manhattan Load DevCap...\r\n");
3592*53ee8cc1Swenshuai.xi
3593*53ee8cc1Swenshuai.xi // Load MHL device capability
3594*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <8; uctemp++)
3595*53ee8cc1Swenshuai.xi {
3596*53ee8cc1Swenshuai.xi if(uctemp == 2)
3597*53ee8cc1Swenshuai.xi {
3598*53ee8cc1Swenshuai.xi ucIndex = 1;
3599*53ee8cc1Swenshuai.xi }
3600*53ee8cc1Swenshuai.xi
3601*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_01 +(uctemp *2), (devcap[(uctemp *2) +1 -ucIndex] <<8) | devcap[uctemp *2 -ucIndex]);
3602*53ee8cc1Swenshuai.xi }
3603*53ee8cc1Swenshuai.xi
3604*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_03, (devcap[3] <<8) | devcap[4]);
3605*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_07, (devcap[11] <<8) | devcap[12]);
3606*53ee8cc1Swenshuai.xi
3607*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_09, devcap[15], BMASK(7:0));
3608*53ee8cc1Swenshuai.xi
3609*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <2; uctemp++)
3610*53ee8cc1Swenshuai.xi {
3611*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_19 +(uctemp *2), (devcap[(uctemp *2) +17] <<8) | devcap[(uctemp *2) +16]); // [15:0], MHL_ECBUS_SPEEDS
3612*53ee8cc1Swenshuai.xi }
3613*53ee8cc1Swenshuai.xi }
3614*53ee8cc1Swenshuai.xi }
3615*53ee8cc1Swenshuai.xi
3616*53ee8cc1Swenshuai.xi //**************************************************************************
3617*53ee8cc1Swenshuai.xi // [Function Name]:
3618*53ee8cc1Swenshuai.xi // mhal_mhl_initial()
3619*53ee8cc1Swenshuai.xi // [Description]
3620*53ee8cc1Swenshuai.xi // MHL init
3621*53ee8cc1Swenshuai.xi // [Arguments]:
3622*53ee8cc1Swenshuai.xi // *edid: MHL EDID data
3623*53ee8cc1Swenshuai.xi // *devcap: MHL device capability
3624*53ee8cc1Swenshuai.xi // [Return]:
3625*53ee8cc1Swenshuai.xi //
3626*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_initial(MS_U8 ucCbusSelect,MS_U8 * edid,MS_U8 * devcap,MS_U8 ucVenderID)3627*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_initial(MS_U8 ucCbusSelect, MS_U8 *edid, MS_U8 *devcap, MS_U8 ucVenderID)
3628*53ee8cc1Swenshuai.xi {
3629*53ee8cc1Swenshuai.xi MS_U16 uctemp = 0;
3630*53ee8cc1Swenshuai.xi
3631*53ee8cc1Swenshuai.xi // Initial setting
3632*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_INITIAL_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
3633*53ee8cc1Swenshuai.xi {
3634*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_INITIAL_TABLE[uctemp].addr, tMHL_INITIAL_TABLE[uctemp].databuf, tMHL_INITIAL_TABLE[uctemp].mask);
3635*53ee8cc1Swenshuai.xi }
3636*53ee8cc1Swenshuai.xi
3637*53ee8cc1Swenshuai.xi // ECbus initial setting
3638*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusInitialSetting();
3639*53ee8cc1Swenshuai.xi
3640*53ee8cc1Swenshuai.xi _mhal_mhl_CbusAndClockSelect(ucCbusSelect);
3641*53ee8cc1Swenshuai.xi
3642*53ee8cc1Swenshuai.xi #if(MHL_INTERRUPT_USE_PM_IRQ)
3643*53ee8cc1Swenshuai.xi // Open PM irq mask
3644*53ee8cc1Swenshuai.xi W2BYTEMSK(0x2B28, 0, BIT(11));
3645*53ee8cc1Swenshuai.xi #endif
3646*53ee8cc1Swenshuai.xi
3647*53ee8cc1Swenshuai.xi // Load EDID
3648*53ee8cc1Swenshuai.xi mhal_mhl_LoadEDID(edid);
3649*53ee8cc1Swenshuai.xi
3650*53ee8cc1Swenshuai.xi // Load vendor ID
3651*53ee8cc1Swenshuai.xi mhal_mhl_SetVenderID(ucVenderID);
3652*53ee8cc1Swenshuai.xi
3653*53ee8cc1Swenshuai.xi // Load DevCap
3654*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(devcap);
3655*53ee8cc1Swenshuai.xi
3656*53ee8cc1Swenshuai.xi // Clear Cbus received interrupt status
3657*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4)|BIT(0), BIT(4)|BIT(1)|BIT(0)); // [1]: receive packet valid mask
3658*53ee8cc1Swenshuai.xi
3659*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(FALSE);
3660*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(FALSE);
3661*53ee8cc1Swenshuai.xi
3662*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3663*53ee8cc1Swenshuai.xi
3664*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
3665*53ee8cc1Swenshuai.xi {
3666*53ee8cc1Swenshuai.xi _mhal_mhl_RtermHWControl(uctemp, FALSE);
3667*53ee8cc1Swenshuai.xi }
3668*53ee8cc1Swenshuai.xi
3669*53ee8cc1Swenshuai.xi _mhal_mhl_ForcePullDown100K(TRUE);
3670*53ee8cc1Swenshuai.xi
3671*53ee8cc1Swenshuai.xi mhal_mhl_CbusFloating(TRUE);
3672*53ee8cc1Swenshuai.xi
3673*53ee8cc1Swenshuai.xi return MHL_CHIP_FUNCTION_CAPABILITY;
3674*53ee8cc1Swenshuai.xi }
3675*53ee8cc1Swenshuai.xi
3676*53ee8cc1Swenshuai.xi //**************************************************************************
3677*53ee8cc1Swenshuai.xi // [Function Name]:
3678*53ee8cc1Swenshuai.xi // mhal_mhl_InvertCableDetect()
3679*53ee8cc1Swenshuai.xi // [Description]
3680*53ee8cc1Swenshuai.xi //
3681*53ee8cc1Swenshuai.xi // [Arguments]:
3682*53ee8cc1Swenshuai.xi //
3683*53ee8cc1Swenshuai.xi // [Return]:
3684*53ee8cc1Swenshuai.xi //
3685*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InvertCableDetect(MS_U8 ucCbusSelect,MS_BOOL bCableDetectInvert)3686*53ee8cc1Swenshuai.xi void mhal_mhl_InvertCableDetect(MS_U8 ucCbusSelect, MS_BOOL bCableDetectInvert)
3687*53ee8cc1Swenshuai.xi {
3688*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3689*53ee8cc1Swenshuai.xi {
3690*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3691*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3692*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
3693*53ee8cc1Swenshuai.xi break;
3694*53ee8cc1Swenshuai.xi #endif
3695*53ee8cc1Swenshuai.xi
3696*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3697*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3698*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
3699*53ee8cc1Swenshuai.xi break;
3700*53ee8cc1Swenshuai.xi #endif
3701*53ee8cc1Swenshuai.xi
3702*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3703*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3704*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
3705*53ee8cc1Swenshuai.xi break;
3706*53ee8cc1Swenshuai.xi #endif
3707*53ee8cc1Swenshuai.xi
3708*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3709*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3710*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
3711*53ee8cc1Swenshuai.xi break;
3712*53ee8cc1Swenshuai.xi #endif
3713*53ee8cc1Swenshuai.xi
3714*53ee8cc1Swenshuai.xi default:
3715*53ee8cc1Swenshuai.xi
3716*53ee8cc1Swenshuai.xi break;
3717*53ee8cc1Swenshuai.xi };
3718*53ee8cc1Swenshuai.xi }
3719*53ee8cc1Swenshuai.xi
3720*53ee8cc1Swenshuai.xi //**************************************************************************
3721*53ee8cc1Swenshuai.xi // [Function Name]:
3722*53ee8cc1Swenshuai.xi // mhal_mhl_VbusConfigSetting()
3723*53ee8cc1Swenshuai.xi // [Description]
3724*53ee8cc1Swenshuai.xi //
3725*53ee8cc1Swenshuai.xi // [Arguments]:
3726*53ee8cc1Swenshuai.xi //
3727*53ee8cc1Swenshuai.xi // [Return]:
3728*53ee8cc1Swenshuai.xi //
3729*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_VbusConfigSetting(MS_U8 ucCbusSelect,MS_U8 ucState)3730*53ee8cc1Swenshuai.xi void mhal_mhl_VbusConfigSetting(MS_U8 ucCbusSelect, MS_U8 ucState)
3731*53ee8cc1Swenshuai.xi {
3732*53ee8cc1Swenshuai.xi MS_U8 ucOutputState = ucState &(MHL_VBUS_LOW_ENABLE_MODE | MHL_VBUS_HIGH_ENABLE_MODE);
3733*53ee8cc1Swenshuai.xi
3734*53ee8cc1Swenshuai.xi ucState = ucState &(MHL_VBUS_OUTPUT_MODE | MHL_VBUS_INVERSE_MODE);
3735*53ee8cc1Swenshuai.xi
3736*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3737*53ee8cc1Swenshuai.xi {
3738*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3739*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3740*53ee8cc1Swenshuai.xi if(ucState == MHL_VBUS_OUTPUT_MODE)
3741*53ee8cc1Swenshuai.xi {
3742*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3743*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
3744*53ee8cc1Swenshuai.xi }
3745*53ee8cc1Swenshuai.xi else if(ucState > 0)
3746*53ee8cc1Swenshuai.xi {
3747*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3748*53ee8cc1Swenshuai.xi }
3749*53ee8cc1Swenshuai.xi
3750*53ee8cc1Swenshuai.xi if(ucOutputState > 0)
3751*53ee8cc1Swenshuai.xi {
3752*53ee8cc1Swenshuai.xi if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
3753*53ee8cc1Swenshuai.xi {
3754*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
3755*53ee8cc1Swenshuai.xi }
3756*53ee8cc1Swenshuai.xi else
3757*53ee8cc1Swenshuai.xi {
3758*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
3759*53ee8cc1Swenshuai.xi }
3760*53ee8cc1Swenshuai.xi }
3761*53ee8cc1Swenshuai.xi
3762*53ee8cc1Swenshuai.xi break;
3763*53ee8cc1Swenshuai.xi #endif
3764*53ee8cc1Swenshuai.xi
3765*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3766*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3767*53ee8cc1Swenshuai.xi if(ucState == MHL_VBUS_OUTPUT_MODE)
3768*53ee8cc1Swenshuai.xi {
3769*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3770*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
3771*53ee8cc1Swenshuai.xi }
3772*53ee8cc1Swenshuai.xi else if(ucState > 0)
3773*53ee8cc1Swenshuai.xi {
3774*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3775*53ee8cc1Swenshuai.xi }
3776*53ee8cc1Swenshuai.xi
3777*53ee8cc1Swenshuai.xi if(ucOutputState > 0)
3778*53ee8cc1Swenshuai.xi {
3779*53ee8cc1Swenshuai.xi if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
3780*53ee8cc1Swenshuai.xi {
3781*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
3782*53ee8cc1Swenshuai.xi }
3783*53ee8cc1Swenshuai.xi else
3784*53ee8cc1Swenshuai.xi {
3785*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
3786*53ee8cc1Swenshuai.xi }
3787*53ee8cc1Swenshuai.xi }
3788*53ee8cc1Swenshuai.xi
3789*53ee8cc1Swenshuai.xi break;
3790*53ee8cc1Swenshuai.xi #endif
3791*53ee8cc1Swenshuai.xi
3792*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3793*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3794*53ee8cc1Swenshuai.xi if(ucState == MHL_VBUS_OUTPUT_MODE)
3795*53ee8cc1Swenshuai.xi {
3796*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3797*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
3798*53ee8cc1Swenshuai.xi }
3799*53ee8cc1Swenshuai.xi else if(ucState > 0)
3800*53ee8cc1Swenshuai.xi {
3801*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3802*53ee8cc1Swenshuai.xi }
3803*53ee8cc1Swenshuai.xi
3804*53ee8cc1Swenshuai.xi if(ucOutputState > 0)
3805*53ee8cc1Swenshuai.xi {
3806*53ee8cc1Swenshuai.xi if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
3807*53ee8cc1Swenshuai.xi {
3808*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
3809*53ee8cc1Swenshuai.xi }
3810*53ee8cc1Swenshuai.xi else
3811*53ee8cc1Swenshuai.xi {
3812*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
3813*53ee8cc1Swenshuai.xi }
3814*53ee8cc1Swenshuai.xi }
3815*53ee8cc1Swenshuai.xi
3816*53ee8cc1Swenshuai.xi break;
3817*53ee8cc1Swenshuai.xi #endif
3818*53ee8cc1Swenshuai.xi
3819*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3820*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3821*53ee8cc1Swenshuai.xi if(ucState == MHL_VBUS_OUTPUT_MODE)
3822*53ee8cc1Swenshuai.xi {
3823*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3824*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
3825*53ee8cc1Swenshuai.xi }
3826*53ee8cc1Swenshuai.xi else if(ucState > 0)
3827*53ee8cc1Swenshuai.xi {
3828*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3829*53ee8cc1Swenshuai.xi }
3830*53ee8cc1Swenshuai.xi
3831*53ee8cc1Swenshuai.xi if(ucOutputState > 0)
3832*53ee8cc1Swenshuai.xi {
3833*53ee8cc1Swenshuai.xi if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
3834*53ee8cc1Swenshuai.xi {
3835*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
3836*53ee8cc1Swenshuai.xi }
3837*53ee8cc1Swenshuai.xi else
3838*53ee8cc1Swenshuai.xi {
3839*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
3840*53ee8cc1Swenshuai.xi }
3841*53ee8cc1Swenshuai.xi }
3842*53ee8cc1Swenshuai.xi
3843*53ee8cc1Swenshuai.xi break;
3844*53ee8cc1Swenshuai.xi #endif
3845*53ee8cc1Swenshuai.xi
3846*53ee8cc1Swenshuai.xi default:
3847*53ee8cc1Swenshuai.xi ucOutputState = 0;
3848*53ee8cc1Swenshuai.xi break;
3849*53ee8cc1Swenshuai.xi };
3850*53ee8cc1Swenshuai.xi }
3851*53ee8cc1Swenshuai.xi
3852*53ee8cc1Swenshuai.xi //**************************************************************************
3853*53ee8cc1Swenshuai.xi // [Function Name]:
3854*53ee8cc1Swenshuai.xi // mhal_mhl_CableDetectPadSetting()
3855*53ee8cc1Swenshuai.xi // [Description]
3856*53ee8cc1Swenshuai.xi //
3857*53ee8cc1Swenshuai.xi // [Arguments]:
3858*53ee8cc1Swenshuai.xi //
3859*53ee8cc1Swenshuai.xi // [Return]:
3860*53ee8cc1Swenshuai.xi //
3861*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableDetectPadSetting(MS_U8 ucSelect)3862*53ee8cc1Swenshuai.xi void mhal_mhl_CableDetectPadSetting(MS_U8 ucSelect)
3863*53ee8cc1Swenshuai.xi {
3864*53ee8cc1Swenshuai.xi // Nothing
3865*53ee8cc1Swenshuai.xi }
3866*53ee8cc1Swenshuai.xi
3867*53ee8cc1Swenshuai.xi //**************************************************************************
3868*53ee8cc1Swenshuai.xi // [Function Name]:
3869*53ee8cc1Swenshuai.xi // mhal_mhl_CbusPadConfigSwitch()
3870*53ee8cc1Swenshuai.xi // [Description]
3871*53ee8cc1Swenshuai.xi //
3872*53ee8cc1Swenshuai.xi // [Arguments]:
3873*53ee8cc1Swenshuai.xi //
3874*53ee8cc1Swenshuai.xi // [Return]:
3875*53ee8cc1Swenshuai.xi //
3876*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusPadConfigSwitch(MS_U8 ucCbusSelect,MS_BOOL bFlag)3877*53ee8cc1Swenshuai.xi void mhal_mhl_CbusPadConfigSwitch(MS_U8 ucCbusSelect, MS_BOOL bFlag)
3878*53ee8cc1Swenshuai.xi {
3879*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3880*53ee8cc1Swenshuai.xi {
3881*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3882*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3883*53ee8cc1Swenshuai.xi if(bFlag)
3884*53ee8cc1Swenshuai.xi {
3885*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3886*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3887*53ee8cc1Swenshuai.xi }
3888*53ee8cc1Swenshuai.xi else
3889*53ee8cc1Swenshuai.xi {
3890*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3891*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
3892*53ee8cc1Swenshuai.xi }
3893*53ee8cc1Swenshuai.xi
3894*53ee8cc1Swenshuai.xi break;
3895*53ee8cc1Swenshuai.xi #endif
3896*53ee8cc1Swenshuai.xi
3897*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3898*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3899*53ee8cc1Swenshuai.xi if(bFlag)
3900*53ee8cc1Swenshuai.xi {
3901*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3902*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3903*53ee8cc1Swenshuai.xi }
3904*53ee8cc1Swenshuai.xi else
3905*53ee8cc1Swenshuai.xi {
3906*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3907*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
3908*53ee8cc1Swenshuai.xi }
3909*53ee8cc1Swenshuai.xi
3910*53ee8cc1Swenshuai.xi break;
3911*53ee8cc1Swenshuai.xi #endif
3912*53ee8cc1Swenshuai.xi
3913*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3914*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3915*53ee8cc1Swenshuai.xi if(bFlag)
3916*53ee8cc1Swenshuai.xi {
3917*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3918*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3919*53ee8cc1Swenshuai.xi }
3920*53ee8cc1Swenshuai.xi else
3921*53ee8cc1Swenshuai.xi {
3922*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3923*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
3924*53ee8cc1Swenshuai.xi }
3925*53ee8cc1Swenshuai.xi
3926*53ee8cc1Swenshuai.xi break;
3927*53ee8cc1Swenshuai.xi #endif
3928*53ee8cc1Swenshuai.xi
3929*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3930*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3931*53ee8cc1Swenshuai.xi if(bFlag)
3932*53ee8cc1Swenshuai.xi {
3933*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3934*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3935*53ee8cc1Swenshuai.xi }
3936*53ee8cc1Swenshuai.xi else
3937*53ee8cc1Swenshuai.xi {
3938*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3939*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
3940*53ee8cc1Swenshuai.xi }
3941*53ee8cc1Swenshuai.xi
3942*53ee8cc1Swenshuai.xi break;
3943*53ee8cc1Swenshuai.xi #endif
3944*53ee8cc1Swenshuai.xi
3945*53ee8cc1Swenshuai.xi default:
3946*53ee8cc1Swenshuai.xi
3947*53ee8cc1Swenshuai.xi break;
3948*53ee8cc1Swenshuai.xi };
3949*53ee8cc1Swenshuai.xi }
3950*53ee8cc1Swenshuai.xi
3951*53ee8cc1Swenshuai.xi //**************************************************************************
3952*53ee8cc1Swenshuai.xi // [Function Name]:
3953*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusStatus()
3954*53ee8cc1Swenshuai.xi // [Description]:
3955*53ee8cc1Swenshuai.xi // MHL Cbus status
3956*53ee8cc1Swenshuai.xi // [Arguments]:
3957*53ee8cc1Swenshuai.xi //
3958*53ee8cc1Swenshuai.xi // [Return]:
3959*53ee8cc1Swenshuai.xi // Cbus status value
3960*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStatus(void)3961*53ee8cc1Swenshuai.xi MS_U16 mhal_mhl_CbusStatus(void)
3962*53ee8cc1Swenshuai.xi {
3963*53ee8cc1Swenshuai.xi return (R2BYTE(REG_PM_MHL_CBUS_17));
3964*53ee8cc1Swenshuai.xi }
3965*53ee8cc1Swenshuai.xi
3966*53ee8cc1Swenshuai.xi //**************************************************************************
3967*53ee8cc1Swenshuai.xi // [Function Name]:
3968*53ee8cc1Swenshuai.xi // mhal_mhl_CbusIsMscMsgReceived()
3969*53ee8cc1Swenshuai.xi // [Description]
3970*53ee8cc1Swenshuai.xi // MHL Cbus check whether msc message is received or not
3971*53ee8cc1Swenshuai.xi // [Arguments]:
3972*53ee8cc1Swenshuai.xi //
3973*53ee8cc1Swenshuai.xi // [Return]:
3974*53ee8cc1Swenshuai.xi // TRUE: recieved
3975*53ee8cc1Swenshuai.xi // FALSE: not yet
3976*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIsMscMsgReceived(void)3977*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusIsMscMsgReceived(void)
3978*53ee8cc1Swenshuai.xi {
3979*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_MHL_CBUS_3A) &BIT(3)) ?TRUE: FALSE);
3980*53ee8cc1Swenshuai.xi
3981*53ee8cc1Swenshuai.xi if(bindex)
3982*53ee8cc1Swenshuai.xi {
3983*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(0), BIT(0));
3984*53ee8cc1Swenshuai.xi }
3985*53ee8cc1Swenshuai.xi
3986*53ee8cc1Swenshuai.xi return bindex;
3987*53ee8cc1Swenshuai.xi }
3988*53ee8cc1Swenshuai.xi
3989*53ee8cc1Swenshuai.xi //**************************************************************************
3990*53ee8cc1Swenshuai.xi // [Function Name]:
3991*53ee8cc1Swenshuai.xi // mhal_mhl_CbusStucktoLowFlag()
3992*53ee8cc1Swenshuai.xi // [Description]
3993*53ee8cc1Swenshuai.xi //
3994*53ee8cc1Swenshuai.xi // [Arguments]:
3995*53ee8cc1Swenshuai.xi //
3996*53ee8cc1Swenshuai.xi // [Return]:
3997*53ee8cc1Swenshuai.xi //
3998*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLowFlag(void)3999*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusStucktoLowFlag(void)
4000*53ee8cc1Swenshuai.xi {
4001*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_PM_MHL_CBUS_18) &BIT(3)) ?TRUE: FALSE);
4002*53ee8cc1Swenshuai.xi
4003*53ee8cc1Swenshuai.xi if(bindex)
4004*53ee8cc1Swenshuai.xi {
4005*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(0), BIT(0));
4006*53ee8cc1Swenshuai.xi }
4007*53ee8cc1Swenshuai.xi
4008*53ee8cc1Swenshuai.xi return bindex;
4009*53ee8cc1Swenshuai.xi }
4010*53ee8cc1Swenshuai.xi
4011*53ee8cc1Swenshuai.xi //**************************************************************************
4012*53ee8cc1Swenshuai.xi // [Function Name]:
4013*53ee8cc1Swenshuai.xi // mhal_mhl_CbusWakeupIntFlag()
4014*53ee8cc1Swenshuai.xi // [Description]
4015*53ee8cc1Swenshuai.xi //
4016*53ee8cc1Swenshuai.xi // [Arguments]:
4017*53ee8cc1Swenshuai.xi //
4018*53ee8cc1Swenshuai.xi // [Return]:
4019*53ee8cc1Swenshuai.xi //
4020*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupIntFlag(void)4021*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusWakeupIntFlag(void)
4022*53ee8cc1Swenshuai.xi {
4023*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_PM_MHL_CBUS_18) &BIT(7)) ?TRUE: FALSE);
4024*53ee8cc1Swenshuai.xi
4025*53ee8cc1Swenshuai.xi if(bindex)
4026*53ee8cc1Swenshuai.xi {
4027*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(4), BIT(4));
4028*53ee8cc1Swenshuai.xi }
4029*53ee8cc1Swenshuai.xi
4030*53ee8cc1Swenshuai.xi return bindex;
4031*53ee8cc1Swenshuai.xi }
4032*53ee8cc1Swenshuai.xi
4033*53ee8cc1Swenshuai.xi //**************************************************************************
4034*53ee8cc1Swenshuai.xi // [Function Name]:
4035*53ee8cc1Swenshuai.xi // mhal_mhl_GetECbusStateChangeFlag()
4036*53ee8cc1Swenshuai.xi // [Description]
4037*53ee8cc1Swenshuai.xi //
4038*53ee8cc1Swenshuai.xi // [Arguments]:
4039*53ee8cc1Swenshuai.xi //
4040*53ee8cc1Swenshuai.xi // [Return]:
4041*53ee8cc1Swenshuai.xi //
4042*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetECbusStateChangeFlag(stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus,stMHL_BIST_MODE_INFO * pBISTParameterInfo)4043*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_GetECbusStateChangeFlag(stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus, stMHL_BIST_MODE_INFO *pBISTParameterInfo)
4044*53ee8cc1Swenshuai.xi {
4045*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_MHL_ECBUS_3A) &BIT(0)) ?TRUE: FALSE);
4046*53ee8cc1Swenshuai.xi
4047*53ee8cc1Swenshuai.xi if(bindex)
4048*53ee8cc1Swenshuai.xi {
4049*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(0), BIT(0));
4050*53ee8cc1Swenshuai.xi
4051*53ee8cc1Swenshuai.xi if((pMHLSignalStatus != NULL) && (pBISTParameterInfo != NULL))
4052*53ee8cc1Swenshuai.xi {
4053*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusStateChangeProc(pMHLSignalStatus, pBISTParameterInfo);
4054*53ee8cc1Swenshuai.xi }
4055*53ee8cc1Swenshuai.xi }
4056*53ee8cc1Swenshuai.xi
4057*53ee8cc1Swenshuai.xi return bindex;
4058*53ee8cc1Swenshuai.xi }
4059*53ee8cc1Swenshuai.xi
4060*53ee8cc1Swenshuai.xi //**************************************************************************
4061*53ee8cc1Swenshuai.xi // [Function Name]:
4062*53ee8cc1Swenshuai.xi // mhal_mhl_GetEMSCReceiveFlag()
4063*53ee8cc1Swenshuai.xi // [Description]
4064*53ee8cc1Swenshuai.xi //
4065*53ee8cc1Swenshuai.xi // [Arguments]:
4066*53ee8cc1Swenshuai.xi //
4067*53ee8cc1Swenshuai.xi // [Return]:
4068*53ee8cc1Swenshuai.xi //
4069*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetEMSCReceiveFlag(void)4070*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_GetEMSCReceiveFlag(void)
4071*53ee8cc1Swenshuai.xi {
4072*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_MHL_ECBUS_3A) &BIT(12)) ?TRUE: FALSE);
4073*53ee8cc1Swenshuai.xi
4074*53ee8cc1Swenshuai.xi if(bindex)
4075*53ee8cc1Swenshuai.xi {
4076*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(12), BIT(12));
4077*53ee8cc1Swenshuai.xi }
4078*53ee8cc1Swenshuai.xi
4079*53ee8cc1Swenshuai.xi return bindex;
4080*53ee8cc1Swenshuai.xi }
4081*53ee8cc1Swenshuai.xi
4082*53ee8cc1Swenshuai.xi //**************************************************************************
4083*53ee8cc1Swenshuai.xi // [Function Name]:
4084*53ee8cc1Swenshuai.xi // mhal_mhl_GetEMSCSendStatus()
4085*53ee8cc1Swenshuai.xi // [Description]
4086*53ee8cc1Swenshuai.xi //
4087*53ee8cc1Swenshuai.xi // [Arguments]:
4088*53ee8cc1Swenshuai.xi //
4089*53ee8cc1Swenshuai.xi // [Return]:
4090*53ee8cc1Swenshuai.xi //
4091*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetEMSCSendStatus(void)4092*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetEMSCSendStatus(void)
4093*53ee8cc1Swenshuai.xi {
4094*53ee8cc1Swenshuai.xi MS_U8 ucSendStatus = MHL_EMSC_SEND_NONE;
4095*53ee8cc1Swenshuai.xi
4096*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(10)) // eMSC send pass interrupt.
4097*53ee8cc1Swenshuai.xi {
4098*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(10), BIT(10)); // eMSC send pass clear
4099*53ee8cc1Swenshuai.xi
4100*53ee8cc1Swenshuai.xi ucSendStatus = MHL_EMSC_SEND_PASS;
4101*53ee8cc1Swenshuai.xi }
4102*53ee8cc1Swenshuai.xi else if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(9)) // eMSC send fail interrupt.
4103*53ee8cc1Swenshuai.xi {
4104*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(9), BIT(9)); // eMSC send fail clear
4105*53ee8cc1Swenshuai.xi
4106*53ee8cc1Swenshuai.xi ucSendStatus = MHL_EMSC_SEND_FAIL;
4107*53ee8cc1Swenshuai.xi }
4108*53ee8cc1Swenshuai.xi
4109*53ee8cc1Swenshuai.xi return ucSendStatus;
4110*53ee8cc1Swenshuai.xi }
4111*53ee8cc1Swenshuai.xi
4112*53ee8cc1Swenshuai.xi //**************************************************************************
4113*53ee8cc1Swenshuai.xi // [Function Name]:
4114*53ee8cc1Swenshuai.xi // mhal_mhl_CBusWrite()
4115*53ee8cc1Swenshuai.xi // [Description]
4116*53ee8cc1Swenshuai.xi // MHL Cbus write trigger
4117*53ee8cc1Swenshuai.xi // [Arguments]:
4118*53ee8cc1Swenshuai.xi // *pdatabuf: Cbus tx data
4119*53ee8cc1Swenshuai.xi // [Return]:
4120*53ee8cc1Swenshuai.xi //
4121*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CBusWrite(MS_BOOL bECbusEnableFlag,mhalCbusFifo_S * pdatabuf)4122*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CBusWrite(MS_BOOL bECbusEnableFlag, mhalCbusFifo_S *pdatabuf)
4123*53ee8cc1Swenshuai.xi {
4124*53ee8cc1Swenshuai.xi MS_BOOL bSendDondFlag = FALSE;
4125*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4126*53ee8cc1Swenshuai.xi
4127*53ee8cc1Swenshuai.xi if(!_mhal_mhl_IsCbusBusy(bECbusEnableFlag))
4128*53ee8cc1Swenshuai.xi {
4129*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < pdatabuf->lens; uctemp++)
4130*53ee8cc1Swenshuai.xi {
4131*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_26 +uctemp *2, pdatabuf->databuf[uctemp]);
4132*53ee8cc1Swenshuai.xi }
4133*53ee8cc1Swenshuai.xi
4134*53ee8cc1Swenshuai.xi // clear the unsed parts
4135*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_26 +((pdatabuf->lens) *2), 0);
4136*53ee8cc1Swenshuai.xi
4137*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_25, BIT(12), BIT(12)); // trigger to send
4138*53ee8cc1Swenshuai.xi
4139*53ee8cc1Swenshuai.xi bSendDondFlag = TRUE;
4140*53ee8cc1Swenshuai.xi
4141*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SEND_MSC)
4142*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < pdatabuf->lens; uctemp++)
4143*53ee8cc1Swenshuai.xi {
4144*53ee8cc1Swenshuai.xi if((pdatabuf->databuf[uctemp]) &BIT(8))
4145*53ee8cc1Swenshuai.xi {
4146*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL send MSG command = %x\r\n", (pdatabuf->databuf[uctemp] &BMASK(7:0)));
4147*53ee8cc1Swenshuai.xi }
4148*53ee8cc1Swenshuai.xi else
4149*53ee8cc1Swenshuai.xi {
4150*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_DEBUG(" MHL send MSG data = %x\r\n", (pdatabuf->databuf[uctemp] &BMASK(7:0)));
4151*53ee8cc1Swenshuai.xi }
4152*53ee8cc1Swenshuai.xi }
4153*53ee8cc1Swenshuai.xi
4154*53ee8cc1Swenshuai.xi #endif
4155*53ee8cc1Swenshuai.xi }
4156*53ee8cc1Swenshuai.xi
4157*53ee8cc1Swenshuai.xi return bSendDondFlag;
4158*53ee8cc1Swenshuai.xi }
4159*53ee8cc1Swenshuai.xi
4160*53ee8cc1Swenshuai.xi //**************************************************************************
4161*53ee8cc1Swenshuai.xi // [Function Name]:
4162*53ee8cc1Swenshuai.xi // _mhal_mhl_Cbus_SetPathEn()
4163*53ee8cc1Swenshuai.xi // [Description]:
4164*53ee8cc1Swenshuai.xi // MHL Cbus set path enable
4165*53ee8cc1Swenshuai.xi // [Arguments]:
4166*53ee8cc1Swenshuai.xi // TRUE: Enable
4167*53ee8cc1Swenshuai.xi // FALSE: Disable
4168*53ee8cc1Swenshuai.xi // [Return]:
4169*53ee8cc1Swenshuai.xi //
4170*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_Cbus_SetPathEn(MS_BOOL bflag)4171*53ee8cc1Swenshuai.xi void mhal_mhl_Cbus_SetPathEn(MS_BOOL bflag)
4172*53ee8cc1Swenshuai.xi {
4173*53ee8cc1Swenshuai.xi if(bflag) // set state to PATH_EN
4174*53ee8cc1Swenshuai.xi {
4175*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(12), BIT(12));
4176*53ee8cc1Swenshuai.xi }
4177*53ee8cc1Swenshuai.xi else // clear state to not PATH_EN
4178*53ee8cc1Swenshuai.xi {
4179*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(13), BIT(13));
4180*53ee8cc1Swenshuai.xi }
4181*53ee8cc1Swenshuai.xi }
4182*53ee8cc1Swenshuai.xi
4183*53ee8cc1Swenshuai.xi //**************************************************************************
4184*53ee8cc1Swenshuai.xi // [Function Name]:
4185*53ee8cc1Swenshuai.xi // mhal_mhl_CbusIntCB()
4186*53ee8cc1Swenshuai.xi // [Description]
4187*53ee8cc1Swenshuai.xi // MHL Cbus Interrupt Call Back function
4188*53ee8cc1Swenshuai.xi // [Arguments]:
4189*53ee8cc1Swenshuai.xi // *rcstate: recevied state, 0:normal / 1:timeout
4190*53ee8cc1Swenshuai.xi // *rccmd: recevied command
4191*53ee8cc1Swenshuai.xi // *rcdata: recevied data
4192*53ee8cc1Swenshuai.xi // *rclen: received length
4193*53ee8cc1Swenshuai.xi // *bIsCmdInData: Is command in data field
4194*53ee8cc1Swenshuai.xi // [Return]:
4195*53ee8cc1Swenshuai.xi //
4196*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIntCB(MS_U8 * rcstate,MS_U8 * rccmd,MS_U8 * rcdata,MS_U8 * rclen,MS_U8 * bIsCmdInData)4197*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusIntCB(MS_U8 *rcstate, MS_U8 *rccmd, MS_U8 *rcdata, MS_U8 *rclen, MS_U8 *bIsCmdInData)
4198*53ee8cc1Swenshuai.xi {
4199*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
4200*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4201*53ee8cc1Swenshuai.xi MS_U16 reg_val;
4202*53ee8cc1Swenshuai.xi
4203*53ee8cc1Swenshuai.xi *rcstate = R2BYTE(REG_MHL_CBUS_3B) & 0x000F; // received state, 0: normal, 1: timeout
4204*53ee8cc1Swenshuai.xi
4205*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_CBUS_3A, BIT(0), BIT(0)); // clear INT
4206*53ee8cc1Swenshuai.xi
4207*53ee8cc1Swenshuai.xi reg_val = R2BYTE(REG_MHL_CBUS_3C);
4208*53ee8cc1Swenshuai.xi
4209*53ee8cc1Swenshuai.xi if(!(reg_val &BIT(8))) // Received data
4210*53ee8cc1Swenshuai.xi {
4211*53ee8cc1Swenshuai.xi bindex = TRUE;
4212*53ee8cc1Swenshuai.xi }
4213*53ee8cc1Swenshuai.xi
4214*53ee8cc1Swenshuai.xi *rccmd = reg_val & 0x00FF;
4215*53ee8cc1Swenshuai.xi *bIsCmdInData = FALSE;
4216*53ee8cc1Swenshuai.xi
4217*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <=(MHL_CBUS_DATA_SIZE +1); uctemp++) // offset+16bytes+EOF
4218*53ee8cc1Swenshuai.xi {
4219*53ee8cc1Swenshuai.xi reg_val = R2BYTE(REG_MHL_CBUS_3D +(uctemp *2));
4220*53ee8cc1Swenshuai.xi
4221*53ee8cc1Swenshuai.xi if(reg_val & BIT(15))
4222*53ee8cc1Swenshuai.xi {
4223*53ee8cc1Swenshuai.xi rcdata[uctemp] = reg_val & 0x00FF;
4224*53ee8cc1Swenshuai.xi
4225*53ee8cc1Swenshuai.xi if(((uctemp <= 2) ||(uctemp == (MHL_CBUS_DATA_SIZE +1))) && !(*bIsCmdInData))
4226*53ee8cc1Swenshuai.xi {
4227*53ee8cc1Swenshuai.xi *bIsCmdInData = (reg_val & BIT(8)) ? TRUE : FALSE;
4228*53ee8cc1Swenshuai.xi }
4229*53ee8cc1Swenshuai.xi }
4230*53ee8cc1Swenshuai.xi else
4231*53ee8cc1Swenshuai.xi {
4232*53ee8cc1Swenshuai.xi *rclen = uctemp;
4233*53ee8cc1Swenshuai.xi break;
4234*53ee8cc1Swenshuai.xi }
4235*53ee8cc1Swenshuai.xi }
4236*53ee8cc1Swenshuai.xi
4237*53ee8cc1Swenshuai.xi // CTS 6.3.11.19
4238*53ee8cc1Swenshuai.xi if(uctemp >(MHL_CBUS_DATA_SIZE +1))
4239*53ee8cc1Swenshuai.xi {
4240*53ee8cc1Swenshuai.xi *rclen = MHL_CBUS_DATA_SIZE +2;
4241*53ee8cc1Swenshuai.xi }
4242*53ee8cc1Swenshuai.xi
4243*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4), BIT(4)); // clear received FIFO
4244*53ee8cc1Swenshuai.xi
4245*53ee8cc1Swenshuai.xi return bindex;
4246*53ee8cc1Swenshuai.xi }
4247*53ee8cc1Swenshuai.xi
4248*53ee8cc1Swenshuai.xi //**************************************************************************
4249*53ee8cc1Swenshuai.xi // [Function Name]:
4250*53ee8cc1Swenshuai.xi // mdrv_mhl_CBusCheckBCHError()
4251*53ee8cc1Swenshuai.xi // [Description]:
4252*53ee8cc1Swenshuai.xi // MHL Cbus check BCH error
4253*53ee8cc1Swenshuai.xi // [Arguments]:
4254*53ee8cc1Swenshuai.xi //
4255*53ee8cc1Swenshuai.xi // [Return]:
4256*53ee8cc1Swenshuai.xi //
4257*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CBusCheckBCHError(void)4258*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CBusCheckBCHError(void)
4259*53ee8cc1Swenshuai.xi {
4260*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
4261*53ee8cc1Swenshuai.xi
4262*53ee8cc1Swenshuai.xi return bindex;
4263*53ee8cc1Swenshuai.xi }
4264*53ee8cc1Swenshuai.xi
4265*53ee8cc1Swenshuai.xi //**************************************************************************
4266*53ee8cc1Swenshuai.xi // [Function Name]:
4267*53ee8cc1Swenshuai.xi // mhal_mhl_CablePlugProc()
4268*53ee8cc1Swenshuai.xi // [Description]
4269*53ee8cc1Swenshuai.xi //
4270*53ee8cc1Swenshuai.xi // [Arguments]:
4271*53ee8cc1Swenshuai.xi //
4272*53ee8cc1Swenshuai.xi // [Return]:
4273*53ee8cc1Swenshuai.xi //
4274*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CablePlugProc(MS_U8 ucCbusSelect,stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus)4275*53ee8cc1Swenshuai.xi void mhal_mhl_CablePlugProc(MS_U8 ucCbusSelect, stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus)
4276*53ee8cc1Swenshuai.xi {
4277*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
4278*53ee8cc1Swenshuai.xi
4279*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
4280*53ee8cc1Swenshuai.xi _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, TRUE);
4281*53ee8cc1Swenshuai.xi #endif
4282*53ee8cc1Swenshuai.xi
4283*53ee8cc1Swenshuai.xi _mhal_mhl_Mhl24bitsModeSetting(ucCbusSelect, pMHLSignalStatus);
4284*53ee8cc1Swenshuai.xi
4285*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckInputPort(ucCbusSelect))
4286*53ee8cc1Swenshuai.xi {
4287*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(TRUE);
4288*53ee8cc1Swenshuai.xi }
4289*53ee8cc1Swenshuai.xi
4290*53ee8cc1Swenshuai.xi _mhal_mhl_ForcePullDown100K(FALSE);
4291*53ee8cc1Swenshuai.xi }
4292*53ee8cc1Swenshuai.xi
4293*53ee8cc1Swenshuai.xi //**************************************************************************
4294*53ee8cc1Swenshuai.xi // [Function Name]:
4295*53ee8cc1Swenshuai.xi // mhal_mhl_CableRemoveProc()
4296*53ee8cc1Swenshuai.xi // [Description]
4297*53ee8cc1Swenshuai.xi //
4298*53ee8cc1Swenshuai.xi // [Arguments]:
4299*53ee8cc1Swenshuai.xi //
4300*53ee8cc1Swenshuai.xi // [Return]:
4301*53ee8cc1Swenshuai.xi //
4302*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableRemoveProc(MS_U8 ucCbusSelect,stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus)4303*53ee8cc1Swenshuai.xi void mhal_mhl_CableRemoveProc(MS_U8 ucCbusSelect, stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus)
4304*53ee8cc1Swenshuai.xi {
4305*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_HDMI_RTERM);
4306*53ee8cc1Swenshuai.xi
4307*53ee8cc1Swenshuai.xi _mhal_mhl_HdmiBypassModeSetting(ucCbusSelect, pMHLSignalStatus);
4308*53ee8cc1Swenshuai.xi
4309*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
4310*53ee8cc1Swenshuai.xi _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, TRUE);
4311*53ee8cc1Swenshuai.xi #endif
4312*53ee8cc1Swenshuai.xi
4313*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckInputPort(ucCbusSelect))
4314*53ee8cc1Swenshuai.xi {
4315*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(FALSE);
4316*53ee8cc1Swenshuai.xi }
4317*53ee8cc1Swenshuai.xi
4318*53ee8cc1Swenshuai.xi _mhal_mhl_ForcePullDown100K(TRUE);
4319*53ee8cc1Swenshuai.xi }
4320*53ee8cc1Swenshuai.xi
4321*53ee8cc1Swenshuai.xi //**************************************************************************
4322*53ee8cc1Swenshuai.xi // [Function Name]:
4323*53ee8cc1Swenshuai.xi // mhal_mhl_CbusConnectProc()
4324*53ee8cc1Swenshuai.xi // [Description]
4325*53ee8cc1Swenshuai.xi //
4326*53ee8cc1Swenshuai.xi // [Arguments]:
4327*53ee8cc1Swenshuai.xi //
4328*53ee8cc1Swenshuai.xi // [Return]:
4329*53ee8cc1Swenshuai.xi //
4330*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusConnectProc(MS_U8 ucCbusSelect)4331*53ee8cc1Swenshuai.xi void mhal_mhl_CbusConnectProc(MS_U8 ucCbusSelect)
4332*53ee8cc1Swenshuai.xi {
4333*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_MHL_RTERM);
4334*53ee8cc1Swenshuai.xi
4335*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
4336*53ee8cc1Swenshuai.xi _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, FALSE);
4337*53ee8cc1Swenshuai.xi #endif
4338*53ee8cc1Swenshuai.xi
4339*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(TRUE);
4340*53ee8cc1Swenshuai.xi }
4341*53ee8cc1Swenshuai.xi
4342*53ee8cc1Swenshuai.xi //**************************************************************************
4343*53ee8cc1Swenshuai.xi // [Function Name]:
4344*53ee8cc1Swenshuai.xi // mhal_mhl_CbusStucktoLowProc()
4345*53ee8cc1Swenshuai.xi // [Description]
4346*53ee8cc1Swenshuai.xi //
4347*53ee8cc1Swenshuai.xi // [Arguments]:
4348*53ee8cc1Swenshuai.xi //
4349*53ee8cc1Swenshuai.xi // [Return]:
4350*53ee8cc1Swenshuai.xi //
4351*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLowProc(MS_U8 ucCbusSelect)4352*53ee8cc1Swenshuai.xi void mhal_mhl_CbusStucktoLowProc(MS_U8 ucCbusSelect)
4353*53ee8cc1Swenshuai.xi {
4354*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
4355*53ee8cc1Swenshuai.xi
4356*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
4357*53ee8cc1Swenshuai.xi _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, TRUE);
4358*53ee8cc1Swenshuai.xi #endif
4359*53ee8cc1Swenshuai.xi
4360*53ee8cc1Swenshuai.xi // Set short read address to 0x08
4361*53ee8cc1Swenshuai.xi _mhal_mhl_SetShortReadAddress(FALSE);
4362*53ee8cc1Swenshuai.xi }
4363*53ee8cc1Swenshuai.xi
4364*53ee8cc1Swenshuai.xi //**************************************************************************
4365*53ee8cc1Swenshuai.xi // [Function Name]:
4366*53ee8cc1Swenshuai.xi // mhal_mhl_SourceChangeProc()
4367*53ee8cc1Swenshuai.xi // [Description]
4368*53ee8cc1Swenshuai.xi //
4369*53ee8cc1Swenshuai.xi // [Arguments]:
4370*53ee8cc1Swenshuai.xi //
4371*53ee8cc1Swenshuai.xi // [Return]:
4372*53ee8cc1Swenshuai.xi //
4373*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SourceChangeProc(MS_U8 ucCbusSelect,MS_U8 ucLinkRate)4374*53ee8cc1Swenshuai.xi void mhal_mhl_SourceChangeProc(MS_U8 ucCbusSelect, MS_U8 ucLinkRate)
4375*53ee8cc1Swenshuai.xi {
4376*53ee8cc1Swenshuai.xi MS_BOOL bLinkRate6GFlag = FALSE;
4377*53ee8cc1Swenshuai.xi
4378*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4379*53ee8cc1Swenshuai.xi {
4380*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4381*53ee8cc1Swenshuai.xi }
4382*53ee8cc1Swenshuai.xi
4383*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckInputPort(ucCbusSelect))
4384*53ee8cc1Swenshuai.xi {
4385*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(TRUE);
4386*53ee8cc1Swenshuai.xi }
4387*53ee8cc1Swenshuai.xi else
4388*53ee8cc1Swenshuai.xi {
4389*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(FALSE);
4390*53ee8cc1Swenshuai.xi }
4391*53ee8cc1Swenshuai.xi }
4392*53ee8cc1Swenshuai.xi
4393*53ee8cc1Swenshuai.xi //**************************************************************************
4394*53ee8cc1Swenshuai.xi // [Function Name]:
4395*53ee8cc1Swenshuai.xi // mhal_mhl_ClockModeSwitchProc()
4396*53ee8cc1Swenshuai.xi // [Description]
4397*53ee8cc1Swenshuai.xi //
4398*53ee8cc1Swenshuai.xi // [Arguments]:
4399*53ee8cc1Swenshuai.xi //
4400*53ee8cc1Swenshuai.xi // [Return]:
4401*53ee8cc1Swenshuai.xi //
4402*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ClockModeSwitchProc(MS_U8 ucCbusSelect,MS_BOOL bPPmode,stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus)4403*53ee8cc1Swenshuai.xi void mhal_mhl_ClockModeSwitchProc(MS_U8 ucCbusSelect, MS_BOOL bPPmode, stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus)
4404*53ee8cc1Swenshuai.xi {
4405*53ee8cc1Swenshuai.xi if(bPPmode)
4406*53ee8cc1Swenshuai.xi {
4407*53ee8cc1Swenshuai.xi _mhal_mhl_MhlPackedPixelModeSetting(ucCbusSelect);
4408*53ee8cc1Swenshuai.xi }
4409*53ee8cc1Swenshuai.xi else
4410*53ee8cc1Swenshuai.xi {
4411*53ee8cc1Swenshuai.xi _mhal_mhl_Mhl24bitsModeSetting(ucCbusSelect, pMHLSignalStatus);
4412*53ee8cc1Swenshuai.xi }
4413*53ee8cc1Swenshuai.xi }
4414*53ee8cc1Swenshuai.xi
4415*53ee8cc1Swenshuai.xi //**************************************************************************
4416*53ee8cc1Swenshuai.xi // [Function Name]:
4417*53ee8cc1Swenshuai.xi // mhal_mhl_CbusWakeupIntSetting()
4418*53ee8cc1Swenshuai.xi // [Description]
4419*53ee8cc1Swenshuai.xi //
4420*53ee8cc1Swenshuai.xi // [Arguments]:
4421*53ee8cc1Swenshuai.xi //
4422*53ee8cc1Swenshuai.xi // [Return]:
4423*53ee8cc1Swenshuai.xi //
4424*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupIntSetting(MS_U8 ucCbusSelect,MS_BOOL bFlag)4425*53ee8cc1Swenshuai.xi void mhal_mhl_CbusWakeupIntSetting(MS_U8 ucCbusSelect, MS_BOOL bFlag)
4426*53ee8cc1Swenshuai.xi {
4427*53ee8cc1Swenshuai.xi if(bFlag)
4428*53ee8cc1Swenshuai.xi {
4429*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
4430*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(TRUE);
4431*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_CHARGE);
4432*53ee8cc1Swenshuai.xi }
4433*53ee8cc1Swenshuai.xi else
4434*53ee8cc1Swenshuai.xi {
4435*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
4436*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(FALSE);
4437*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
4438*53ee8cc1Swenshuai.xi }
4439*53ee8cc1Swenshuai.xi }
4440*53ee8cc1Swenshuai.xi
4441*53ee8cc1Swenshuai.xi //**************************************************************************
4442*53ee8cc1Swenshuai.xi // [Function Name]:
4443*53ee8cc1Swenshuai.xi // mhal_mhl_RtermControlHWMode()
4444*53ee8cc1Swenshuai.xi // [Description]
4445*53ee8cc1Swenshuai.xi //
4446*53ee8cc1Swenshuai.xi // [Arguments]:
4447*53ee8cc1Swenshuai.xi //
4448*53ee8cc1Swenshuai.xi // [Return]:
4449*53ee8cc1Swenshuai.xi //
4450*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_RtermControlHWMode(MS_U8 ucCbusSelect,MS_BOOL bFlag)4451*53ee8cc1Swenshuai.xi void mhal_mhl_RtermControlHWMode(MS_U8 ucCbusSelect, MS_BOOL bFlag)
4452*53ee8cc1Swenshuai.xi {
4453*53ee8cc1Swenshuai.xi MS_U16 ustemp = mhal_mhl_CbusStatus();
4454*53ee8cc1Swenshuai.xi
4455*53ee8cc1Swenshuai.xi if(!bFlag) // HW to SW control rterm
4456*53ee8cc1Swenshuai.xi {
4457*53ee8cc1Swenshuai.xi if((ustemp & BMASK(1:0)) == 0x03)
4458*53ee8cc1Swenshuai.xi {
4459*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_MHL_RTERM);
4460*53ee8cc1Swenshuai.xi }
4461*53ee8cc1Swenshuai.xi else
4462*53ee8cc1Swenshuai.xi {
4463*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
4464*53ee8cc1Swenshuai.xi }
4465*53ee8cc1Swenshuai.xi }
4466*53ee8cc1Swenshuai.xi
4467*53ee8cc1Swenshuai.xi _mhal_mhl_RtermHWControl(ucCbusSelect, bFlag);
4468*53ee8cc1Swenshuai.xi }
4469*53ee8cc1Swenshuai.xi
4470*53ee8cc1Swenshuai.xi //**************************************************************************
4471*53ee8cc1Swenshuai.xi // [Function Name]:
4472*53ee8cc1Swenshuai.xi // mhal_mhl_PowerControl()
4473*53ee8cc1Swenshuai.xi // [Description]
4474*53ee8cc1Swenshuai.xi // MHL power control
4475*53ee8cc1Swenshuai.xi // [Arguments]:
4476*53ee8cc1Swenshuai.xi //
4477*53ee8cc1Swenshuai.xi // [Return]:
4478*53ee8cc1Swenshuai.xi //
4479*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadPowerOnTbl(void)4480*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerOnTbl(void)
4481*53ee8cc1Swenshuai.xi {
4482*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4483*53ee8cc1Swenshuai.xi
4484*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_ON_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
4485*53ee8cc1Swenshuai.xi {
4486*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_POWER_ON_TABLE[uctemp].addr, tMHL_POWER_ON_TABLE[uctemp].databuf, tMHL_POWER_ON_TABLE[uctemp].mask);
4487*53ee8cc1Swenshuai.xi }
4488*53ee8cc1Swenshuai.xi
4489*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
4490*53ee8cc1Swenshuai.xi {
4491*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(uctemp, RX_HDMI_RTERM);
4492*53ee8cc1Swenshuai.xi }
4493*53ee8cc1Swenshuai.xi }
4494*53ee8cc1Swenshuai.xi
mhal_mhl_LoadPowerStandbyTbl(void)4495*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerStandbyTbl(void)
4496*53ee8cc1Swenshuai.xi {
4497*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4498*53ee8cc1Swenshuai.xi
4499*53ee8cc1Swenshuai.xi //_mhal_mhl_CbusForceToStandby();
4500*53ee8cc1Swenshuai.xi
4501*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_SAVING_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
4502*53ee8cc1Swenshuai.xi {
4503*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_POWER_SAVING_TABLE[uctemp].addr, tMHL_POWER_SAVING_TABLE[uctemp].databuf, tMHL_POWER_SAVING_TABLE[uctemp].mask);
4504*53ee8cc1Swenshuai.xi }
4505*53ee8cc1Swenshuai.xi
4506*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
4507*53ee8cc1Swenshuai.xi {
4508*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(uctemp, RX_RTERM_OFF);
4509*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(uctemp, VBUS_SW_CHARGE);
4510*53ee8cc1Swenshuai.xi }
4511*53ee8cc1Swenshuai.xi }
4512*53ee8cc1Swenshuai.xi
mhal_mhl_LoadPowerDownTbl(void)4513*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerDownTbl(void)
4514*53ee8cc1Swenshuai.xi {
4515*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4516*53ee8cc1Swenshuai.xi
4517*53ee8cc1Swenshuai.xi //_mhal_mhl_CbusForceToStandby();
4518*53ee8cc1Swenshuai.xi
4519*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_DOWN_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
4520*53ee8cc1Swenshuai.xi {
4521*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_POWER_DOWN_TABLE[uctemp].addr, tMHL_POWER_DOWN_TABLE[uctemp].databuf, tMHL_POWER_DOWN_TABLE[uctemp].mask);
4522*53ee8cc1Swenshuai.xi }
4523*53ee8cc1Swenshuai.xi
4524*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
4525*53ee8cc1Swenshuai.xi {
4526*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(uctemp, RX_RTERM_OFF);
4527*53ee8cc1Swenshuai.xi }
4528*53ee8cc1Swenshuai.xi }
4529*53ee8cc1Swenshuai.xi
4530*53ee8cc1Swenshuai.xi //**************************************************************************
4531*53ee8cc1Swenshuai.xi // [Function Name]:
4532*53ee8cc1Swenshuai.xi // mhal_mhl_SetHPD()
4533*53ee8cc1Swenshuai.xi // [Description]
4534*53ee8cc1Swenshuai.xi // config HPD in combo(MHL/HDMI) port A
4535*53ee8cc1Swenshuai.xi // [Arguments]:
4536*53ee8cc1Swenshuai.xi //
4537*53ee8cc1Swenshuai.xi // [Return]:
4538*53ee8cc1Swenshuai.xi //
4539*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetHPD(MS_BOOL bflag)4540*53ee8cc1Swenshuai.xi void mhal_mhl_SetHPD(MS_BOOL bflag)
4541*53ee8cc1Swenshuai.xi {
4542*53ee8cc1Swenshuai.xi if(bflag) // HPD is high
4543*53ee8cc1Swenshuai.xi {
4544*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(3), BMASK(4:3)); // [4]: output val, [3]: oen
4545*53ee8cc1Swenshuai.xi }
4546*53ee8cc1Swenshuai.xi else // hpd is low
4547*53ee8cc1Swenshuai.xi {
4548*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(4:3)); // [4]: output val, [3]: oen
4549*53ee8cc1Swenshuai.xi }
4550*53ee8cc1Swenshuai.xi }
4551*53ee8cc1Swenshuai.xi
4552*53ee8cc1Swenshuai.xi //**************************************************************************
4553*53ee8cc1Swenshuai.xi // [Function Name]:
4554*53ee8cc1Swenshuai.xi // mhal_mhl_GetDDCErrorCode()
4555*53ee8cc1Swenshuai.xi // [Description]
4556*53ee8cc1Swenshuai.xi // Get DDC error code
4557*53ee8cc1Swenshuai.xi // [Arguments]:
4558*53ee8cc1Swenshuai.xi //
4559*53ee8cc1Swenshuai.xi // [Return]:
4560*53ee8cc1Swenshuai.xi //
4561*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetDDCErrorCode(void)4562*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetDDCErrorCode(void)
4563*53ee8cc1Swenshuai.xi {
4564*53ee8cc1Swenshuai.xi return (R2BYTE(REG_MHL_CBUS_21)>>8);
4565*53ee8cc1Swenshuai.xi }
4566*53ee8cc1Swenshuai.xi
4567*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE == MHL_CBUS_HW_REPLY_MODE)
4568*53ee8cc1Swenshuai.xi //**************************************************************************
4569*53ee8cc1Swenshuai.xi // [Function Name]:
4570*53ee8cc1Swenshuai.xi // mhal_mhl_CheckSRAMReceiveBuffer()
4571*53ee8cc1Swenshuai.xi // [Description]
4572*53ee8cc1Swenshuai.xi //
4573*53ee8cc1Swenshuai.xi // [Arguments]:
4574*53ee8cc1Swenshuai.xi //
4575*53ee8cc1Swenshuai.xi // [Return]:
4576*53ee8cc1Swenshuai.xi //
4577*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckSRAMReceiveBuffer(void)4578*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckSRAMReceiveBuffer(void)
4579*53ee8cc1Swenshuai.xi {
4580*53ee8cc1Swenshuai.xi return ((R2BYTE(REG_MHL_CBUS_10) &BIT(4)) ?FALSE: TRUE);
4581*53ee8cc1Swenshuai.xi }
4582*53ee8cc1Swenshuai.xi
4583*53ee8cc1Swenshuai.xi //**************************************************************************
4584*53ee8cc1Swenshuai.xi // [Function Name]:
4585*53ee8cc1Swenshuai.xi // mhal_mhl_GetSRAMReceiveData()
4586*53ee8cc1Swenshuai.xi // [Description]
4587*53ee8cc1Swenshuai.xi //
4588*53ee8cc1Swenshuai.xi // [Arguments]:
4589*53ee8cc1Swenshuai.xi //
4590*53ee8cc1Swenshuai.xi // [Return]:
4591*53ee8cc1Swenshuai.xi //
4592*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetSRAMReceiveData(void)4593*53ee8cc1Swenshuai.xi MS_U16 mhal_mhl_GetSRAMReceiveData(void)
4594*53ee8cc1Swenshuai.xi {
4595*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_10, BIT(15), BIT(15));
4596*53ee8cc1Swenshuai.xi
4597*53ee8cc1Swenshuai.xi while((R2BYTE(REG_MHL_CBUS_10) & BIT(14)) == BIT(14));
4598*53ee8cc1Swenshuai.xi
4599*53ee8cc1Swenshuai.xi return R2BYTE(REG_MHL_CBUS_0F);
4600*53ee8cc1Swenshuai.xi }
4601*53ee8cc1Swenshuai.xi
4602*53ee8cc1Swenshuai.xi #endif
4603*53ee8cc1Swenshuai.xi
4604*53ee8cc1Swenshuai.xi #if(DMHL_TEST_SIGNAL_SUPPORT)
4605*53ee8cc1Swenshuai.xi //**************************************************************************
4606*53ee8cc1Swenshuai.xi // [Function Name]:
4607*53ee8cc1Swenshuai.xi // mhal_mhl_AdjustCommonModeResistor()
4608*53ee8cc1Swenshuai.xi // [Description]:
4609*53ee8cc1Swenshuai.xi //
4610*53ee8cc1Swenshuai.xi // [Arguments]:
4611*53ee8cc1Swenshuai.xi //
4612*53ee8cc1Swenshuai.xi // [Return]:
4613*53ee8cc1Swenshuai.xi //
4614*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_TestSignal(MS_BOOL bflag)4615*53ee8cc1Swenshuai.xi void mhal_mhl_TestSignal(MS_BOOL bflag)
4616*53ee8cc1Swenshuai.xi {
4617*53ee8cc1Swenshuai.xi if(bflag)
4618*53ee8cc1Swenshuai.xi {
4619*53ee8cc1Swenshuai.xi W2BYTEMSK(0x001106, BIT(10), BIT(10));
4620*53ee8cc1Swenshuai.xi }
4621*53ee8cc1Swenshuai.xi else
4622*53ee8cc1Swenshuai.xi {
4623*53ee8cc1Swenshuai.xi W2BYTEMSK(0x001106, 0, BIT(10));
4624*53ee8cc1Swenshuai.xi }
4625*53ee8cc1Swenshuai.xi }
4626*53ee8cc1Swenshuai.xi
4627*53ee8cc1Swenshuai.xi #endif
4628*53ee8cc1Swenshuai.xi
4629*53ee8cc1Swenshuai.xi //**************************************************************************
4630*53ee8cc1Swenshuai.xi // [Function Name]:
4631*53ee8cc1Swenshuai.xi // mhal_mhl_SetMainLinkRate()
4632*53ee8cc1Swenshuai.xi // [Description]
4633*53ee8cc1Swenshuai.xi //
4634*53ee8cc1Swenshuai.xi // [Arguments]:
4635*53ee8cc1Swenshuai.xi //
4636*53ee8cc1Swenshuai.xi // [Return]:
4637*53ee8cc1Swenshuai.xi //
4638*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetMainLinkRate(MS_U8 ucCbusSelect,MS_U8 ucLinkRate)4639*53ee8cc1Swenshuai.xi void mhal_mhl_SetMainLinkRate(MS_U8 ucCbusSelect, MS_U8 ucLinkRate)
4640*53ee8cc1Swenshuai.xi {
4641*53ee8cc1Swenshuai.xi MS_BOOL bLinkRate6GFlag = FALSE;
4642*53ee8cc1Swenshuai.xi
4643*53ee8cc1Swenshuai.xi _mhal_mhl_Version3PhyEnable(ucCbusSelect, TRUE);
4644*53ee8cc1Swenshuai.xi
4645*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
4646*53ee8cc1Swenshuai.xi {
4647*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
4648*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
4649*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4650*53ee8cc1Swenshuai.xi {
4651*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4652*53ee8cc1Swenshuai.xi }
4653*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4654*53ee8cc1Swenshuai.xi {
4655*53ee8cc1Swenshuai.xi
4656*53ee8cc1Swenshuai.xi }
4657*53ee8cc1Swenshuai.xi
4658*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4659*53ee8cc1Swenshuai.xi
4660*53ee8cc1Swenshuai.xi break;
4661*53ee8cc1Swenshuai.xi #endif
4662*53ee8cc1Swenshuai.xi
4663*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
4664*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
4665*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4666*53ee8cc1Swenshuai.xi {
4667*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4668*53ee8cc1Swenshuai.xi }
4669*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4670*53ee8cc1Swenshuai.xi {
4671*53ee8cc1Swenshuai.xi
4672*53ee8cc1Swenshuai.xi }
4673*53ee8cc1Swenshuai.xi
4674*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4675*53ee8cc1Swenshuai.xi
4676*53ee8cc1Swenshuai.xi break;
4677*53ee8cc1Swenshuai.xi #endif
4678*53ee8cc1Swenshuai.xi
4679*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
4680*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
4681*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4682*53ee8cc1Swenshuai.xi {
4683*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4684*53ee8cc1Swenshuai.xi }
4685*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4686*53ee8cc1Swenshuai.xi {
4687*53ee8cc1Swenshuai.xi
4688*53ee8cc1Swenshuai.xi }
4689*53ee8cc1Swenshuai.xi
4690*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4691*53ee8cc1Swenshuai.xi
4692*53ee8cc1Swenshuai.xi break;
4693*53ee8cc1Swenshuai.xi #endif
4694*53ee8cc1Swenshuai.xi
4695*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
4696*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
4697*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4698*53ee8cc1Swenshuai.xi {
4699*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4700*53ee8cc1Swenshuai.xi }
4701*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4702*53ee8cc1Swenshuai.xi {
4703*53ee8cc1Swenshuai.xi
4704*53ee8cc1Swenshuai.xi }
4705*53ee8cc1Swenshuai.xi
4706*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4707*53ee8cc1Swenshuai.xi
4708*53ee8cc1Swenshuai.xi break;
4709*53ee8cc1Swenshuai.xi #endif
4710*53ee8cc1Swenshuai.xi
4711*53ee8cc1Swenshuai.xi default:
4712*53ee8cc1Swenshuai.xi bLinkRate6GFlag = FALSE;
4713*53ee8cc1Swenshuai.xi break;
4714*53ee8cc1Swenshuai.xi };
4715*53ee8cc1Swenshuai.xi
4716*53ee8cc1Swenshuai.xi _mhal_mhl_MHL30AutoEQSetting(ucCbusSelect);
4717*53ee8cc1Swenshuai.xi }
4718*53ee8cc1Swenshuai.xi
4719*53ee8cc1Swenshuai.xi //**************************************************************************
4720*53ee8cc1Swenshuai.xi // [Function Name]:
4721*53ee8cc1Swenshuai.xi // mhal_mhl_GetECbusStatusFlag()
4722*53ee8cc1Swenshuai.xi // [Description]:
4723*53ee8cc1Swenshuai.xi //
4724*53ee8cc1Swenshuai.xi // [Arguments]:
4725*53ee8cc1Swenshuai.xi //
4726*53ee8cc1Swenshuai.xi // [Return]:
4727*53ee8cc1Swenshuai.xi //
4728*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetECbusStatusFlag(void)4729*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetECbusStatusFlag(void)
4730*53ee8cc1Swenshuai.xi {
4731*53ee8cc1Swenshuai.xi MS_U8 ucTrainState = (R2BYTE(REG_MHL_ECBUS_PHY_69) >> 12);
4732*53ee8cc1Swenshuai.xi MS_U8 ucECbusStatusFlag = 0;
4733*53ee8cc1Swenshuai.xi
4734*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_PHY_6F) &BIT(13)) // [13]: ECbus clock lock flag
4735*53ee8cc1Swenshuai.xi {
4736*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_CLOCK_LOCK;
4737*53ee8cc1Swenshuai.xi }
4738*53ee8cc1Swenshuai.xi
4739*53ee8cc1Swenshuai.xi if((ucTrainState >= MHL_ECBUS_TRAIN_WAIT_RRCEIVE_COMMA2) && (ucTrainState <= MHL_ECBUS_TRAIN_DONE))//Whan state of REG_PM_MHL_CBUS2_56 is equla 3, than state of REG_PM_MHL_CBUS2_69[51:12] will from 1 to 7.
4740*53ee8cc1Swenshuai.xi {
4741*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0200, BMASK(15:0)); // for auto train
4742*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
4743*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, 0, BIT(13));
4744*53ee8cc1Swenshuai.xi #endif
4745*53ee8cc1Swenshuai.xi }
4746*53ee8cc1Swenshuai.xi
4747*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(7)) // REG_MHL_CBUS2_3A[7]
4748*53ee8cc1Swenshuai.xi {
4749*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_SLOT_SYNC_DONE;
4750*53ee8cc1Swenshuai.xi }
4751*53ee8cc1Swenshuai.xi
4752*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(15)) // REG_MHL_CBUS2_3A[15]
4753*53ee8cc1Swenshuai.xi {
4754*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_EMSC_SYNC_DONE;
4755*53ee8cc1Swenshuai.xi }
4756*53ee8cc1Swenshuai.xi
4757*53ee8cc1Swenshuai.xi return ucECbusStatusFlag;
4758*53ee8cc1Swenshuai.xi }
4759*53ee8cc1Swenshuai.xi
4760*53ee8cc1Swenshuai.xi //**************************************************************************
4761*53ee8cc1Swenshuai.xi // [Function Name]:
4762*53ee8cc1Swenshuai.xi // mhal_mhl_ECbusEventProc()
4763*53ee8cc1Swenshuai.xi // [Description]
4764*53ee8cc1Swenshuai.xi //
4765*53ee8cc1Swenshuai.xi // [Arguments]:
4766*53ee8cc1Swenshuai.xi //
4767*53ee8cc1Swenshuai.xi // [Return]:
4768*53ee8cc1Swenshuai.xi //
4769*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ECbusEventProc(MS_U8 ucCbusSelect,MS_U8 ucECbusEvent,MS_BOOL bBISTEnableFlag,stMHL_BIST_MODE_INFO * pBISTParameterInfo)4770*53ee8cc1Swenshuai.xi void mhal_mhl_ECbusEventProc(MS_U8 ucCbusSelect, MS_U8 ucECbusEvent, MS_BOOL bBISTEnableFlag, stMHL_BIST_MODE_INFO *pBISTParameterInfo)
4771*53ee8cc1Swenshuai.xi {
4772*53ee8cc1Swenshuai.xi switch(ucECbusEvent)
4773*53ee8cc1Swenshuai.xi {
4774*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_PREPARE_MODE_UP:
4775*53ee8cc1Swenshuai.xi // Disable stuck to low interrupt
4776*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(FALSE);
4777*53ee8cc1Swenshuai.xi // Disable connect detect
4778*53ee8cc1Swenshuai.xi _mhal_mhl_CbusConnectCheckEnable(FALSE);
4779*53ee8cc1Swenshuai.xi
4780*53ee8cc1Swenshuai.xi break;
4781*53ee8cc1Swenshuai.xi
4782*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_MODE_UP_PROCESS:
4783*53ee8cc1Swenshuai.xi // Enable ECbus
4784*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusEnableSetting(TRUE);
4785*53ee8cc1Swenshuai.xi
4786*53ee8cc1Swenshuai.xi if(bBISTEnableFlag)
4787*53ee8cc1Swenshuai.xi {
4788*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusBISTSetting(TRUE, pBISTParameterInfo);
4789*53ee8cc1Swenshuai.xi _mhal_mhl_BISTECbusEnable(TRUE);
4790*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusStateOverwrite(TRUE);
4791*53ee8cc1Swenshuai.xi }
4792*53ee8cc1Swenshuai.xi
4793*53ee8cc1Swenshuai.xi // Set short read address to 0x70
4794*53ee8cc1Swenshuai.xi _mhal_mhl_SetShortReadAddress(TRUE);
4795*53ee8cc1Swenshuai.xi // Enable ECbus state change IRQ
4796*53ee8cc1Swenshuai.xi _mhal_mhl_SetECbusStateChangeInterrupt(TRUE);
4797*53ee8cc1Swenshuai.xi // Enable eMSC receive IRQ
4798*53ee8cc1Swenshuai.xi _mhal_mhl_SetEMSCReceiveInterrupt(TRUE);
4799*53ee8cc1Swenshuai.xi
4800*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusModeUpProc();
4801*53ee8cc1Swenshuai.xi
4802*53ee8cc1Swenshuai.xi mhal_mhl_SetMainLinkRate(ucCbusSelect, MHL_AV_LINK_150);
4803*53ee8cc1Swenshuai.xi
4804*53ee8cc1Swenshuai.xi break;
4805*53ee8cc1Swenshuai.xi
4806*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_PREPARE_MODE_DOWN:
4807*53ee8cc1Swenshuai.xi
4808*53ee8cc1Swenshuai.xi break;
4809*53ee8cc1Swenshuai.xi
4810*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_MODE_DOWN_PROCESS:
4811*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_STUCK_TO_LOW:
4812*53ee8cc1Swenshuai.xi // Enable connect detect
4813*53ee8cc1Swenshuai.xi _mhal_mhl_CbusConnectCheckEnable(TRUE);
4814*53ee8cc1Swenshuai.xi // Disable ECbus
4815*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusEnableSetting(FALSE);
4816*53ee8cc1Swenshuai.xi
4817*53ee8cc1Swenshuai.xi if(bBISTEnableFlag)
4818*53ee8cc1Swenshuai.xi {
4819*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusBISTSetting(FALSE, pBISTParameterInfo);
4820*53ee8cc1Swenshuai.xi }
4821*53ee8cc1Swenshuai.xi
4822*53ee8cc1Swenshuai.xi // Clear short read address to 0x08
4823*53ee8cc1Swenshuai.xi _mhal_mhl_SetShortReadAddress(FALSE);
4824*53ee8cc1Swenshuai.xi // Disable ECbus state change IRQ
4825*53ee8cc1Swenshuai.xi _mhal_mhl_SetECbusStateChangeInterrupt(FALSE);
4826*53ee8cc1Swenshuai.xi // Disable eMSC receive IRQ
4827*53ee8cc1Swenshuai.xi _mhal_mhl_SetEMSCReceiveInterrupt(FALSE);
4828*53ee8cc1Swenshuai.xi // Disable MHL3 phy
4829*53ee8cc1Swenshuai.xi _mhal_mhl_Version3PhyEnable(ucCbusSelect, FALSE);
4830*53ee8cc1Swenshuai.xi // Reset all status
4831*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_ECBUS_34, 0xFFFF);
4832*53ee8cc1Swenshuai.xi
4833*53ee8cc1Swenshuai.xi _mhal_mhl_CbusEngineReset();
4834*53ee8cc1Swenshuai.xi
4835*53ee8cc1Swenshuai.xi break;
4836*53ee8cc1Swenshuai.xi
4837*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_UNLOCK_RESET:
4838*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusDmuxEnable(FALSE);
4839*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusStateReset();
4840*53ee8cc1Swenshuai.xi
4841*53ee8cc1Swenshuai.xi break;
4842*53ee8cc1Swenshuai.xi
4843*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_COMMAND_PARSING)
4844*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_ECBUS_COMMAND_PARSING:
4845*53ee8cc1Swenshuai.xi _mhal_mhl_GetECbusCommand();
4846*53ee8cc1Swenshuai.xi
4847*53ee8cc1Swenshuai.xi break;
4848*53ee8cc1Swenshuai.xi
4849*53ee8cc1Swenshuai.xi #endif
4850*53ee8cc1Swenshuai.xi
4851*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_BIST_TRIGGER:
4852*53ee8cc1Swenshuai.xi //_mhal_mhl_BISTECbusEnable(TRUE);
4853*53ee8cc1Swenshuai.xi //_mhal_mhl_SetECbusBISTTrigger(TRUE, pBISTParameterInfo->bBISTeCbusTxFlag, pBISTParameterInfo->bBISTeCbusRxFlag);
4854*53ee8cc1Swenshuai.xi
4855*53ee8cc1Swenshuai.xi break;
4856*53ee8cc1Swenshuai.xi
4857*53ee8cc1Swenshuai.xi default:
4858*53ee8cc1Swenshuai.xi
4859*53ee8cc1Swenshuai.xi break;
4860*53ee8cc1Swenshuai.xi };
4861*53ee8cc1Swenshuai.xi }
4862*53ee8cc1Swenshuai.xi
4863*53ee8cc1Swenshuai.xi //**************************************************************************
4864*53ee8cc1Swenshuai.xi // [Function Name]:
4865*53ee8cc1Swenshuai.xi // mhal_mhl_SetBISTParameterInfo()
4866*53ee8cc1Swenshuai.xi // [Description]
4867*53ee8cc1Swenshuai.xi //
4868*53ee8cc1Swenshuai.xi // [Arguments]:
4869*53ee8cc1Swenshuai.xi //
4870*53ee8cc1Swenshuai.xi // [Return]:
4871*53ee8cc1Swenshuai.xi //
4872*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetBISTParameterInfo(MS_U8 ucCbusSelect,stMHL_BIST_MODE_INFO * pBISTParameterInfo)4873*53ee8cc1Swenshuai.xi void mhal_mhl_SetBISTParameterInfo(MS_U8 ucCbusSelect, stMHL_BIST_MODE_INFO *pBISTParameterInfo)
4874*53ee8cc1Swenshuai.xi {
4875*53ee8cc1Swenshuai.xi MS_U8 ucBISTeCbusPattern = pBISTParameterInfo->ucBISTeCbusPattern;
4876*53ee8cc1Swenshuai.xi MS_U8 ucBISTAVLinkRate = pBISTParameterInfo->ucBISTAVLinkRate;
4877*53ee8cc1Swenshuai.xi MS_U16 usBISTeCbusSettingValue = 0;
4878*53ee8cc1Swenshuai.xi MS_U16 usBISTAVLinkSettingValue = (pBISTParameterInfo->ucBISTAVLinkPattern << 8)| 0xFF;
4879*53ee8cc1Swenshuai.xi
4880*53ee8cc1Swenshuai.xi if(ucBISTeCbusPattern > 0)
4881*53ee8cc1Swenshuai.xi {
4882*53ee8cc1Swenshuai.xi ucBISTeCbusPattern = ucBISTeCbusPattern -1;
4883*53ee8cc1Swenshuai.xi }
4884*53ee8cc1Swenshuai.xi
4885*53ee8cc1Swenshuai.xi usBISTeCbusSettingValue = (ucBISTeCbusPattern << 12)| pBISTParameterInfo->usBISTeCbusPatternFixed;
4886*53ee8cc1Swenshuai.xi
4887*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2B, usBISTeCbusSettingValue, BMASK(13:12)| BMASK(7:0)); // ecbus bist send pattern type, ecbus bist send fix pattern value
4888*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2F, usBISTeCbusSettingValue, BMASK(13:12)| BMASK(7:0)); // ecbus bist receive pattern type, ecbus bist receive fix pattern value
4889*53ee8cc1Swenshuai.xi
4890*53ee8cc1Swenshuai.xi if(pBISTParameterInfo->ucBISTAVLinkRateRandomizer > 0)
4891*53ee8cc1Swenshuai.xi {
4892*53ee8cc1Swenshuai.xi usBISTAVLinkSettingValue = usBISTAVLinkSettingValue| BIT(15);
4893*53ee8cc1Swenshuai.xi }
4894*53ee8cc1Swenshuai.xi
4895*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
4896*53ee8cc1Swenshuai.xi {
4897*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
4898*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
4899*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P0_74_L, pBISTParameterInfo->usBISTAVLinkFixed);
4900*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P0_75_L, usBISTAVLinkSettingValue);
4901*53ee8cc1Swenshuai.xi
4902*53ee8cc1Swenshuai.xi if(pBISTParameterInfo->ucBISTAVLinkPattern == MHL_BIST_LINK_PATTERN_FIXED10)
4903*53ee8cc1Swenshuai.xi {
4904*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_71_L, 0, BIT(0));
4905*53ee8cc1Swenshuai.xi }
4906*53ee8cc1Swenshuai.xi else
4907*53ee8cc1Swenshuai.xi {
4908*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_71_L, BIT(0), BIT(0));
4909*53ee8cc1Swenshuai.xi }
4910*53ee8cc1Swenshuai.xi
4911*53ee8cc1Swenshuai.xi break;
4912*53ee8cc1Swenshuai.xi #endif
4913*53ee8cc1Swenshuai.xi
4914*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
4915*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
4916*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P1_74_L, pBISTParameterInfo->usBISTAVLinkFixed);
4917*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P1_75_L, usBISTAVLinkSettingValue);
4918*53ee8cc1Swenshuai.xi
4919*53ee8cc1Swenshuai.xi if(pBISTParameterInfo->ucBISTAVLinkPattern == MHL_BIST_LINK_PATTERN_FIXED10)
4920*53ee8cc1Swenshuai.xi {
4921*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_71_L, 0, BIT(0));
4922*53ee8cc1Swenshuai.xi }
4923*53ee8cc1Swenshuai.xi else
4924*53ee8cc1Swenshuai.xi {
4925*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_71_L, BIT(0), BIT(0));
4926*53ee8cc1Swenshuai.xi }
4927*53ee8cc1Swenshuai.xi
4928*53ee8cc1Swenshuai.xi break;
4929*53ee8cc1Swenshuai.xi #endif
4930*53ee8cc1Swenshuai.xi
4931*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
4932*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
4933*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P2_74_L, pBISTParameterInfo->usBISTAVLinkFixed);
4934*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P2_75_L, usBISTAVLinkSettingValue);
4935*53ee8cc1Swenshuai.xi
4936*53ee8cc1Swenshuai.xi if(pBISTParameterInfo->ucBISTAVLinkPattern == MHL_BIST_LINK_PATTERN_FIXED10)
4937*53ee8cc1Swenshuai.xi {
4938*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_71_L, 0, BIT(0));
4939*53ee8cc1Swenshuai.xi }
4940*53ee8cc1Swenshuai.xi else
4941*53ee8cc1Swenshuai.xi {
4942*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_71_L, BIT(0), BIT(0));
4943*53ee8cc1Swenshuai.xi }
4944*53ee8cc1Swenshuai.xi
4945*53ee8cc1Swenshuai.xi break;
4946*53ee8cc1Swenshuai.xi #endif
4947*53ee8cc1Swenshuai.xi
4948*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
4949*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
4950*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P3_74_L, pBISTParameterInfo->usBISTAVLinkFixed);
4951*53ee8cc1Swenshuai.xi W2BYTE(REG_DVI_DTOP_DUAL_P3_75_L, usBISTAVLinkSettingValue);
4952*53ee8cc1Swenshuai.xi
4953*53ee8cc1Swenshuai.xi if(pBISTParameterInfo->ucBISTAVLinkPattern == MHL_BIST_LINK_PATTERN_FIXED10)
4954*53ee8cc1Swenshuai.xi {
4955*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_73_L, 0, BIT(0));
4956*53ee8cc1Swenshuai.xi }
4957*53ee8cc1Swenshuai.xi else
4958*53ee8cc1Swenshuai.xi {
4959*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_73_L, BIT(0), BIT(0));
4960*53ee8cc1Swenshuai.xi }
4961*53ee8cc1Swenshuai.xi
4962*53ee8cc1Swenshuai.xi break;
4963*53ee8cc1Swenshuai.xi #endif
4964*53ee8cc1Swenshuai.xi
4965*53ee8cc1Swenshuai.xi default:
4966*53ee8cc1Swenshuai.xi
4967*53ee8cc1Swenshuai.xi break;
4968*53ee8cc1Swenshuai.xi };
4969*53ee8cc1Swenshuai.xi
4970*53ee8cc1Swenshuai.xi if(ucBISTAVLinkRate > 0)
4971*53ee8cc1Swenshuai.xi {
4972*53ee8cc1Swenshuai.xi ucBISTAVLinkRate = ucBISTAVLinkRate -1;
4973*53ee8cc1Swenshuai.xi }
4974*53ee8cc1Swenshuai.xi
4975*53ee8cc1Swenshuai.xi mhal_mhl_SetMainLinkRate(ucCbusSelect, ucBISTAVLinkRate);
4976*53ee8cc1Swenshuai.xi }
4977*53ee8cc1Swenshuai.xi
4978*53ee8cc1Swenshuai.xi //**************************************************************************
4979*53ee8cc1Swenshuai.xi // [Function Name]:
4980*53ee8cc1Swenshuai.xi // mhal_mhl_GetBISTErrorCount()
4981*53ee8cc1Swenshuai.xi // [Description]
4982*53ee8cc1Swenshuai.xi //
4983*53ee8cc1Swenshuai.xi // [Arguments]:
4984*53ee8cc1Swenshuai.xi //
4985*53ee8cc1Swenshuai.xi // [Return]:
4986*53ee8cc1Swenshuai.xi //
4987*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetBISTErrorCount(MS_U8 ucCbusSelect,stMHL_BIST_MODE_INFO * pBISTParameterInfo)4988*53ee8cc1Swenshuai.xi void mhal_mhl_GetBISTErrorCount(MS_U8 ucCbusSelect, stMHL_BIST_MODE_INFO *pBISTParameterInfo)
4989*53ee8cc1Swenshuai.xi {
4990*53ee8cc1Swenshuai.xi if(pBISTParameterInfo != NULL)
4991*53ee8cc1Swenshuai.xi {
4992*53ee8cc1Swenshuai.xi pBISTParameterInfo->usBISTeCbusErrorCount = _mhal_mhl_GetBISTECbusErrorCount();
4993*53ee8cc1Swenshuai.xi pBISTParameterInfo->usBISTAVLinkErrorCount = _mhal_mhl_GetBISTAVLinkErrorCount(ucCbusSelect);
4994*53ee8cc1Swenshuai.xi
4995*53ee8cc1Swenshuai.xi _mhal_mhl_SetECbusBISTTrigger(FALSE, pBISTParameterInfo->bBISTeCbusTxFlag, pBISTParameterInfo->bBISTeCbusRxFlag);
4996*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusStateOverwrite(FALSE);
4997*53ee8cc1Swenshuai.xi _mhal_mhl_BISTECbusEnable(FALSE);
4998*53ee8cc1Swenshuai.xi _mhal_mhl_BISTAVLinkEnable(ucCbusSelect, FALSE);
4999*53ee8cc1Swenshuai.xi }
5000*53ee8cc1Swenshuai.xi }
5001*53ee8cc1Swenshuai.xi
5002*53ee8cc1Swenshuai.xi //**************************************************************************
5003*53ee8cc1Swenshuai.xi // [Function Name]:
5004*53ee8cc1Swenshuai.xi // mhal_mhl_GetEMSCReceiveData()
5005*53ee8cc1Swenshuai.xi // [Description]
5006*53ee8cc1Swenshuai.xi //
5007*53ee8cc1Swenshuai.xi // [Arguments]:
5008*53ee8cc1Swenshuai.xi //
5009*53ee8cc1Swenshuai.xi // [Return]:
5010*53ee8cc1Swenshuai.xi //
5011*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetEMSCReceiveData(MS_U8 * bReveiceEMSC)5012*53ee8cc1Swenshuai.xi void mhal_mhl_GetEMSCReceiveData(MS_U8 *bReveiceEMSC)
5013*53ee8cc1Swenshuai.xi {
5014*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
5015*53ee8cc1Swenshuai.xi MS_U16 usEMSCFreeBuffer = 0;
5016*53ee8cc1Swenshuai.xi
5017*53ee8cc1Swenshuai.xi usEMSCFreeBuffer = (R2BYTE(REG_MHL_ECBUS_24) &BMASK(9:0)); // REG_MHL_ECBUS_24[9:0]
5018*53ee8cc1Swenshuai.xi
5019*53ee8cc1Swenshuai.xi usEMSCFreeBuffer = MHL_EMSC_DATA_SIZE - usEMSCFreeBuffer;
5020*53ee8cc1Swenshuai.xi
5021*53ee8cc1Swenshuai.xi bReveiceEMSC[0] = usEMSCFreeBuffer;
5022*53ee8cc1Swenshuai.xi
5023*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_EMSC)
5024*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL eMSC length %d\r\n", usEMSCFreeBuffer);
5025*53ee8cc1Swenshuai.xi #endif
5026*53ee8cc1Swenshuai.xi
5027*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < usEMSCFreeBuffer; uctemp++)
5028*53ee8cc1Swenshuai.xi {
5029*53ee8cc1Swenshuai.xi bReveiceEMSC[uctemp +1] = _mhal_mhl_GetSRAMReceiveEMSCData();
5030*53ee8cc1Swenshuai.xi
5031*53ee8cc1Swenshuai.xi if(uctemp == 1) // Check length remaining
5032*53ee8cc1Swenshuai.xi {
5033*53ee8cc1Swenshuai.xi usEMSCFreeBuffer = bReveiceEMSC[uctemp +1] +2;
5034*53ee8cc1Swenshuai.xi }
5035*53ee8cc1Swenshuai.xi
5036*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_EMSC)
5037*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL eMSC data %x\r\n", bReveiceEMSC[uctemp +1]);
5038*53ee8cc1Swenshuai.xi #endif
5039*53ee8cc1Swenshuai.xi }
5040*53ee8cc1Swenshuai.xi
5041*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1C, usEMSCFreeBuffer, BMASK(9:0));
5042*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1C, BIT(15), BIT(15));
5043*53ee8cc1Swenshuai.xi }
5044*53ee8cc1Swenshuai.xi
5045*53ee8cc1Swenshuai.xi //**************************************************************************
5046*53ee8cc1Swenshuai.xi // [Function Name]:
5047*53ee8cc1Swenshuai.xi // mhal_mhl_InsertEMSCSendData()
5048*53ee8cc1Swenshuai.xi // [Description]
5049*53ee8cc1Swenshuai.xi //
5050*53ee8cc1Swenshuai.xi // [Arguments]:
5051*53ee8cc1Swenshuai.xi //
5052*53ee8cc1Swenshuai.xi // [Return]:
5053*53ee8cc1Swenshuai.xi //
5054*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InsertEMSCSendData(MS_U8 ucLength,MS_U8 * bSendEMSC)5055*53ee8cc1Swenshuai.xi void mhal_mhl_InsertEMSCSendData(MS_U8 ucLength, MS_U8 *bSendEMSC)
5056*53ee8cc1Swenshuai.xi {
5057*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
5058*53ee8cc1Swenshuai.xi MS_U16 usPayloadCRC = 0xFFFF;
5059*53ee8cc1Swenshuai.xi
5060*53ee8cc1Swenshuai.xi if((ucLength > 0) && (bSendEMSC != NULL))
5061*53ee8cc1Swenshuai.xi {
5062*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1B, (ucLength -1), BMASK(9:0)); // Request command byte count
5063*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_79, _mhal_mhl_GetEMSCTwoByteCRC(0, (ucLength -1)) , BMASK(2:0)); // byte count CRC
5064*53ee8cc1Swenshuai.xi
5065*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_21, 0, BMASK(9:0)); // SRAM address set 0
5066*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_21, BIT(13), BIT(13)); // Trigger address
5067*53ee8cc1Swenshuai.xi
5068*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < ucLength; uctemp++)
5069*53ee8cc1Swenshuai.xi {
5070*53ee8cc1Swenshuai.xi _mhal_mhl_InsertSRAMSendEMSCData(bSendEMSC[uctemp]);
5071*53ee8cc1Swenshuai.xi
5072*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL payload value %x\r\n", bSendEMSC[uctemp]);
5073*53ee8cc1Swenshuai.xi
5074*53ee8cc1Swenshuai.xi usPayloadCRC = _mhal_mhl_GetEMSCPayloadCRC(bSendEMSC[uctemp], usPayloadCRC);
5075*53ee8cc1Swenshuai.xi }
5076*53ee8cc1Swenshuai.xi
5077*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_19, BIT(15), BIT(15)); // eMSC payload CRC ove
5078*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_ECBUS_1A, (usPayloadCRC ^0xFFFF)); // eMSC payload CRC value
5079*53ee8cc1Swenshuai.xi
5080*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL payload CRC value %x\r\n", (usPayloadCRC ^0xFFFF));
5081*53ee8cc1Swenshuai.xi
5082*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1B, BIT(15), BIT(15)); // REG_MHL_ECBUS2_1B[15]
5083*53ee8cc1Swenshuai.xi }
5084*53ee8cc1Swenshuai.xi }
5085*53ee8cc1Swenshuai.xi
5086*53ee8cc1Swenshuai.xi //**************************************************************************
5087*53ee8cc1Swenshuai.xi // [Function Name]:
5088*53ee8cc1Swenshuai.xi // mhal_mhl_AutoEQEventProc()
5089*53ee8cc1Swenshuai.xi // [Description]
5090*53ee8cc1Swenshuai.xi //
5091*53ee8cc1Swenshuai.xi // [Arguments]:
5092*53ee8cc1Swenshuai.xi //
5093*53ee8cc1Swenshuai.xi // [Return]:
5094*53ee8cc1Swenshuai.xi //
5095*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_AutoEQEventProc(MS_U8 ucCbusSelect,stMHL_SIGNAL_STATUS_INFO * pMHLSignalStatus)5096*53ee8cc1Swenshuai.xi void mhal_mhl_AutoEQEventProc(MS_U8 ucCbusSelect, stMHL_SIGNAL_STATUS_INFO *pMHLSignalStatus)
5097*53ee8cc1Swenshuai.xi {
5098*53ee8cc1Swenshuai.xi MS_BOOL bAutoEQTrigger = FALSE;
5099*53ee8cc1Swenshuai.xi MS_BOOL bAutoEQContinueFlag = FALSE;
5100*53ee8cc1Swenshuai.xi
5101*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->bAutoEnableFlag)
5102*53ee8cc1Swenshuai.xi {
5103*53ee8cc1Swenshuai.xi do
5104*53ee8cc1Swenshuai.xi {
5105*53ee8cc1Swenshuai.xi switch(pMHLSignalStatus->ucAutoEQState)
5106*53ee8cc1Swenshuai.xi {
5107*53ee8cc1Swenshuai.xi case MHL_AUTO_EQ_START:
5108*53ee8cc1Swenshuai.xi if(pMHLSignalStatus->ucStableCount >= MHL_AUTO_EQ_ENABLE_COUNTER)
5109*53ee8cc1Swenshuai.xi {
5110*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_ENABLE;
5111*53ee8cc1Swenshuai.xi }
5112*53ee8cc1Swenshuai.xi break;
5113*53ee8cc1Swenshuai.xi
5114*53ee8cc1Swenshuai.xi case MHL_AUTO_EQ_ENABLE:
5115*53ee8cc1Swenshuai.xi _mhal_mhl_MHL30AutoEQEnable(ucCbusSelect, TRUE);
5116*53ee8cc1Swenshuai.xi
5117*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_WAIT_DONE;
5118*53ee8cc1Swenshuai.xi bAutoEQTrigger = TRUE;
5119*53ee8cc1Swenshuai.xi
5120*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL auto EQ enable port %d\r\n", ucCbusSelect);
5121*53ee8cc1Swenshuai.xi
5122*53ee8cc1Swenshuai.xi break;
5123*53ee8cc1Swenshuai.xi
5124*53ee8cc1Swenshuai.xi case MHL_AUTO_EQ_WAIT_DONE:
5125*53ee8cc1Swenshuai.xi if(_mhal_mhl_GetAutoEQDoneFlag(ucCbusSelect))
5126*53ee8cc1Swenshuai.xi {
5127*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL auto EQ done flag port %d\r\n", ucCbusSelect);
5128*53ee8cc1Swenshuai.xi
5129*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_STABLE_DONE;
5130*53ee8cc1Swenshuai.xi }
5131*53ee8cc1Swenshuai.xi break;
5132*53ee8cc1Swenshuai.xi
5133*53ee8cc1Swenshuai.xi case MHL_AUTO_EQ_STABLE_DONE:
5134*53ee8cc1Swenshuai.xi MHAL_MHL_MSG_INFO("** MHL auto EQ done completely port %d\r\n", ucCbusSelect);
5135*53ee8cc1Swenshuai.xi
5136*53ee8cc1Swenshuai.xi pMHLSignalStatus->bAutoEnableFlag = FALSE;
5137*53ee8cc1Swenshuai.xi
5138*53ee8cc1Swenshuai.xi break;
5139*53ee8cc1Swenshuai.xi
5140*53ee8cc1Swenshuai.xi default:
5141*53ee8cc1Swenshuai.xi
5142*53ee8cc1Swenshuai.xi break;
5143*53ee8cc1Swenshuai.xi };
5144*53ee8cc1Swenshuai.xi }while(bAutoEQContinueFlag);
5145*53ee8cc1Swenshuai.xi
5146*53ee8cc1Swenshuai.xi if(bAutoEQTrigger)
5147*53ee8cc1Swenshuai.xi {
5148*53ee8cc1Swenshuai.xi _mhal_mhl_MHL3AutoEQTrigger(ucCbusSelect);
5149*53ee8cc1Swenshuai.xi
5150*53ee8cc1Swenshuai.xi pMHLSignalStatus->ucAutoEQState = MHL_AUTO_EQ_WAIT_DONE;
5151*53ee8cc1Swenshuai.xi }
5152*53ee8cc1Swenshuai.xi }
5153*53ee8cc1Swenshuai.xi }
5154*53ee8cc1Swenshuai.xi
5155*53ee8cc1Swenshuai.xi #endif // _MHAL_MHL_C_
5156*53ee8cc1Swenshuai.xi
5157