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 #define msg_mhl(x) x
114*53ee8cc1Swenshuai.xi #define MHL_DEBUG_SEND_MSC 0
115*53ee8cc1Swenshuai.xi
116*53ee8cc1Swenshuai.xi #define DMHLInit 0
117*53ee8cc1Swenshuai.xi
118*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
119*53ee8cc1Swenshuai.xi // Local Structures
120*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
121*53ee8cc1Swenshuai.xi typedef struct
122*53ee8cc1Swenshuai.xi {
123*53ee8cc1Swenshuai.xi MS_U32 addr;
124*53ee8cc1Swenshuai.xi MS_U16 mask;
125*53ee8cc1Swenshuai.xi MS_U16 databuf;
126*53ee8cc1Swenshuai.xi } msLoadTbl_S;
127*53ee8cc1Swenshuai.xi
128*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
129*53ee8cc1Swenshuai.xi // Global Variables
130*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
131*53ee8cc1Swenshuai.xi MS_BOOL bMHLSignalStable = FALSE;
132*53ee8cc1Swenshuai.xi MS_BOOL bPortConfigChange = FALSE;
133*53ee8cc1Swenshuai.xi MS_BOOL bECbusEnableFlag = FALSE;
134*53ee8cc1Swenshuai.xi MS_U8 ucMHLSupportPort = E_MUX_NOT_SUPPORT_MHL;
135*53ee8cc1Swenshuai.xi MS_U8 ucIControlValue = MHL_ICONTROL_PD_24BIT_MODE0;
136*53ee8cc1Swenshuai.xi MS_U8 ucImpedanceValue = MHL_IMPEDANCE_VALUE;
137*53ee8cc1Swenshuai.xi MS_U8 ucChipIDValue = MHL_CHIP_ID_MANHATTAN;
138*53ee8cc1Swenshuai.xi MS_U8 ucECbusTrainState = MHL_ECBUS_STATE_DISABLE;
139*53ee8cc1Swenshuai.xi MS_U8 ucECbusTrainFailCount = 0;
140*53ee8cc1Swenshuai.xi MS_U8 ucMHL3LinkRate = MHL_AV_LINK_NONE;
141*53ee8cc1Swenshuai.xi
142*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
143*53ee8cc1Swenshuai.xi // MHL initial table
144*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
145*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_INITIAL_TABLE[] =
146*53ee8cc1Swenshuai.xi {
147*53ee8cc1Swenshuai.xi // Set accepted discover pulse high pulse width to ignore USB pulse
148*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_0C, BMASK(15:0), 0x0046}, // reject cbus discovery pulse below this limit
149*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_0D, BMASK(15:0), 0x0082}, // reject cbus discovery pulse above this limit
150*53ee8cc1Swenshuai.xi // CTS 4.3.7.1
151*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_55, BMASK(7:4), BIT(4)}, // [7:4]: cbus requester transmit opportunity after arbitration
152*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_70, BIT(14), BIT(14)}, // [14]: let edid current read initial address add 1
153*53ee8cc1Swenshuai.xi
154*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_21, BIT(1), BIT(1)}, // [1]: output mhl_zxsense_tmds inv
155*53ee8cc1Swenshuai.xi
156*53ee8cc1Swenshuai.xi // For CTS 6.3.10.7
157*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_59, BMASK(15:0), 0xFBD0}, // timeout for a device receiving a packet within a command
158*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_5A, BMASK(15:0), 0x0001}, // modify to 130ms
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), 0}, // Not overwrite pull down resistor
161*53ee8cc1Swenshuai.xi
162*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE >= MHL_CBUS_HW_ISR_MODE)
163*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_23, BMASK(10:8) |BIT(4), BIT(10) |BIT(4)}, // [10]: enable HW auto response read_devcap request
164*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_6D, BMASK(11:0), BMASK(11:0)}, // Enable MHL HW mode
165*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_71, BMASK(15:14)| BMASK(11:10), BMASK(15:14)| BMASK(11:10)},
166*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_50, BIT(13), BIT(13)}, // [13]: MSC send command keep mode
167*53ee8cc1Swenshuai.xi #else
168*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_23, BMASK(10:8) |BIT(4), 0}, // [10]: enable HW auto response read_devcap request
169*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_6D, BMASK(11:0), 0}, // Enable MHL HW mode
170*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_71, BMASK(15:14)| BMASK(11:10), 0},
171*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_50, BIT(13), 0}, // [13]: MSC send command keep mode
172*53ee8cc1Swenshuai.xi #endif
173*53ee8cc1Swenshuai.xi
174*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE == MHL_CBUS_HW_REPLY_MODE)
175*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_0B, BIT(14), BIT(14)}, // [14]: MSC send command keep mode
176*53ee8cc1Swenshuai.xi #endif
177*53ee8cc1Swenshuai.xi
178*53ee8cc1Swenshuai.xi #if DMHL_INT_ENABLE
179*53ee8cc1Swenshuai.xi // Mask unused interrupt events
180*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
181*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.
182*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_30, BIT(1), BIT(1)}, // [1]: cbus conflict_int mask
183*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.
184*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_14, BIT(13), BIT(13)}, // [13]: int mask for monitor_sram_full
185*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_18, BIT(13), BIT(13)}, // [13]: send rcv_pkt_ddc_sw_overwrite_err_in mask
186*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
187*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_1B, BIT(1), BIT(1)}, // [1]: receive ddc packet valid mask
188*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
189*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_21, BIT(5), BIT(5)}, // [5]: ddc error interrupt mask
190*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
191*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_23, BIT(13), BIT(13)}, // [13]: send rcv_pkt_msc_sw_overwrite_err_in mask
192*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_24, BIT(1), BIT(1)}, // [1]: send error interrupt mask
193*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
194*53ee8cc1Swenshuai.xi {REG_MHL_CBUS_63, BIT(9), BIT(9)}, // [9]: dytycycle_bad_int mask
195*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
196*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.
197*53ee8cc1Swenshuai.xi #endif
198*53ee8cc1Swenshuai.xi };
199*53ee8cc1Swenshuai.xi
200*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
201*53ee8cc1Swenshuai.xi // MHL power on table
202*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
203*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_ON_TABLE[] =
204*53ee8cc1Swenshuai.xi {
205*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), 0}, // Not overwrite pull down resistor
206*53ee8cc1Swenshuai.xi };
207*53ee8cc1Swenshuai.xi
208*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
209*53ee8cc1Swenshuai.xi // MHL power down table
210*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
211*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_DOWN_TABLE[] =
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), BIT(5)|BMASK(3:2)},
214*53ee8cc1Swenshuai.xi };
215*53ee8cc1Swenshuai.xi
216*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
217*53ee8cc1Swenshuai.xi // MHL power saving table
218*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
219*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_SAVING_TABLE[] =
220*53ee8cc1Swenshuai.xi {
221*53ee8cc1Swenshuai.xi {REG_PM_MHL_CBUS_01, BMASK(5:2), BIT(5)|BMASK(3:2)},
222*53ee8cc1Swenshuai.xi };
223*53ee8cc1Swenshuai.xi
224*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
225*53ee8cc1Swenshuai.xi // Local Functions
226*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
227*53ee8cc1Swenshuai.xi
228*53ee8cc1Swenshuai.xi //**************************************************************************
229*53ee8cc1Swenshuai.xi // [Function Name]:
230*53ee8cc1Swenshuai.xi // _mhal_mhl_IsCbusBusy()
231*53ee8cc1Swenshuai.xi // [Description]
232*53ee8cc1Swenshuai.xi //
233*53ee8cc1Swenshuai.xi // [Arguments]:
234*53ee8cc1Swenshuai.xi //
235*53ee8cc1Swenshuai.xi // [Return]:
236*53ee8cc1Swenshuai.xi //
237*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_IsCbusBusy(void)238*53ee8cc1Swenshuai.xi MS_BOOL _mhal_mhl_IsCbusBusy(void)
239*53ee8cc1Swenshuai.xi {
240*53ee8cc1Swenshuai.xi MS_BOOL bBusyFlag = FALSE;
241*53ee8cc1Swenshuai.xi
242*53ee8cc1Swenshuai.xi if(!bECbusEnableFlag)
243*53ee8cc1Swenshuai.xi {
244*53ee8cc1Swenshuai.xi bBusyFlag = ((R2BYTE(REG_MHL_CBUS_5D) & 0x00F0) != 0 ? TRUE : FALSE);
245*53ee8cc1Swenshuai.xi }
246*53ee8cc1Swenshuai.xi return bBusyFlag;
247*53ee8cc1Swenshuai.xi }
248*53ee8cc1Swenshuai.xi
249*53ee8cc1Swenshuai.xi //**************************************************************************
250*53ee8cc1Swenshuai.xi // [Function Name]:
251*53ee8cc1Swenshuai.xi // _mhal_mhl_DviAutoEQSwitch()
252*53ee8cc1Swenshuai.xi // [Description]
253*53ee8cc1Swenshuai.xi //
254*53ee8cc1Swenshuai.xi // [Arguments]:
255*53ee8cc1Swenshuai.xi //
256*53ee8cc1Swenshuai.xi // [Return]:
257*53ee8cc1Swenshuai.xi //
258*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_DviAutoEQSwitch(MS_U8 ucCbusSelect,MS_BOOL bFlag)259*53ee8cc1Swenshuai.xi void _mhal_mhl_DviAutoEQSwitch(MS_U8 ucCbusSelect, MS_BOOL bFlag)
260*53ee8cc1Swenshuai.xi {
261*53ee8cc1Swenshuai.xi static MS_BOOL bAutoEQFlag = FALSE;
262*53ee8cc1Swenshuai.xi
263*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
264*53ee8cc1Swenshuai.xi {
265*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
266*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
267*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
268*53ee8cc1Swenshuai.xi {
269*53ee8cc1Swenshuai.xi if(!bAutoEQFlag)
270*53ee8cc1Swenshuai.xi {
271*53ee8cc1Swenshuai.xi //if((R2BYTE(REG_DVI_DTOP_DUAL_P0_2F_L) &BIT(0)) == BIT(0))
272*53ee8cc1Swenshuai.xi {
273*53ee8cc1Swenshuai.xi bAutoEQFlag = TRUE;
274*53ee8cc1Swenshuai.xi }
275*53ee8cc1Swenshuai.xi }
276*53ee8cc1Swenshuai.xi
277*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
278*53ee8cc1Swenshuai.xi {
279*53ee8cc1Swenshuai.xi if(bFlag)
280*53ee8cc1Swenshuai.xi {
281*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_00_L, BIT(4), BIT(4)); // enable EQ new mode
282*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
283*53ee8cc1Swenshuai.xi }
284*53ee8cc1Swenshuai.xi else
285*53ee8cc1Swenshuai.xi {
286*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_00_L, 0, BIT(4)); // disable EQ new mode
287*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_2F_L, 0, BIT(0)); // disable autoEQ controller
288*53ee8cc1Swenshuai.xi }
289*53ee8cc1Swenshuai.xi }
290*53ee8cc1Swenshuai.xi }
291*53ee8cc1Swenshuai.xi
292*53ee8cc1Swenshuai.xi break;
293*53ee8cc1Swenshuai.xi #endif
294*53ee8cc1Swenshuai.xi
295*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
296*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
297*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi if(!bAutoEQFlag)
300*53ee8cc1Swenshuai.xi {
301*53ee8cc1Swenshuai.xi //if((R2BYTE(REG_DVI_DTOP_DUAL_P1_2F_L) &BIT(0)) == BIT(0))
302*53ee8cc1Swenshuai.xi {
303*53ee8cc1Swenshuai.xi bAutoEQFlag = TRUE;
304*53ee8cc1Swenshuai.xi }
305*53ee8cc1Swenshuai.xi }
306*53ee8cc1Swenshuai.xi
307*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
308*53ee8cc1Swenshuai.xi {
309*53ee8cc1Swenshuai.xi if(bFlag)
310*53ee8cc1Swenshuai.xi {
311*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_00_L, BIT(4), BIT(4)); // enable EQ new mode
312*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
313*53ee8cc1Swenshuai.xi }
314*53ee8cc1Swenshuai.xi else
315*53ee8cc1Swenshuai.xi {
316*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_00_L, 0, BIT(4)); // disable EQ new mode
317*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_2F_L, 0, BIT(0)); // disable autoEQ controller
318*53ee8cc1Swenshuai.xi }
319*53ee8cc1Swenshuai.xi }
320*53ee8cc1Swenshuai.xi }
321*53ee8cc1Swenshuai.xi
322*53ee8cc1Swenshuai.xi break;
323*53ee8cc1Swenshuai.xi #endif
324*53ee8cc1Swenshuai.xi
325*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
326*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
327*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
328*53ee8cc1Swenshuai.xi {
329*53ee8cc1Swenshuai.xi if(!bAutoEQFlag)
330*53ee8cc1Swenshuai.xi {
331*53ee8cc1Swenshuai.xi //if((R2BYTE(REG_DVI_DTOP_DUAL_P2_2F_L) &BIT(0)) == BIT(0))
332*53ee8cc1Swenshuai.xi {
333*53ee8cc1Swenshuai.xi bAutoEQFlag = TRUE;
334*53ee8cc1Swenshuai.xi }
335*53ee8cc1Swenshuai.xi }
336*53ee8cc1Swenshuai.xi
337*53ee8cc1Swenshuai.xi if(bAutoEQFlag)
338*53ee8cc1Swenshuai.xi {
339*53ee8cc1Swenshuai.xi if(bFlag)
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_00_L, BIT(4), BIT(4)); // enable EQ new mode
342*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
343*53ee8cc1Swenshuai.xi }
344*53ee8cc1Swenshuai.xi else
345*53ee8cc1Swenshuai.xi {
346*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_00_L, 0, BIT(4)); // disable EQ new mode
347*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_2F_L, 0, BIT(0)); // disable autoEQ controller
348*53ee8cc1Swenshuai.xi }
349*53ee8cc1Swenshuai.xi }
350*53ee8cc1Swenshuai.xi }
351*53ee8cc1Swenshuai.xi
352*53ee8cc1Swenshuai.xi break;
353*53ee8cc1Swenshuai.xi #endif
354*53ee8cc1Swenshuai.xi
355*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
356*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
357*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
358*53ee8cc1Swenshuai.xi {
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
382*53ee8cc1Swenshuai.xi break;
383*53ee8cc1Swenshuai.xi #endif
384*53ee8cc1Swenshuai.xi
385*53ee8cc1Swenshuai.xi default:
386*53ee8cc1Swenshuai.xi
387*53ee8cc1Swenshuai.xi break;
388*53ee8cc1Swenshuai.xi };
389*53ee8cc1Swenshuai.xi }
390*53ee8cc1Swenshuai.xi
391*53ee8cc1Swenshuai.xi //**************************************************************************
392*53ee8cc1Swenshuai.xi // [Function Name]:
393*53ee8cc1Swenshuai.xi // _mhal_mhl_HdmiBypassModeSetting()
394*53ee8cc1Swenshuai.xi // [Description]
395*53ee8cc1Swenshuai.xi // MHL HDMI bypass setting
396*53ee8cc1Swenshuai.xi // [Arguments]:
397*53ee8cc1Swenshuai.xi //
398*53ee8cc1Swenshuai.xi // [Return]:
399*53ee8cc1Swenshuai.xi //
400*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_HdmiBypassModeSetting(MS_U8 ucCbusSelect)401*53ee8cc1Swenshuai.xi void _mhal_mhl_HdmiBypassModeSetting(MS_U8 ucCbusSelect)
402*53ee8cc1Swenshuai.xi {
403*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
404*53ee8cc1Swenshuai.xi {
405*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
406*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
407*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
408*53ee8cc1Swenshuai.xi {
409*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
410*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
411*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
412*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P0_09_L, 0, BIT(0)); // PP mode + HDCP eanble
413*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6F_L, 0, BIT(10)); // I-control PD overwrite write
414*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
415*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_11_L, 0, BMASK(12:0));
416*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, BIT(8), BIT(8));
417*53ee8cc1Swenshuai.xi
418*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
419*53ee8cc1Swenshuai.xi {
420*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_59_L, 0, BIT(8));
421*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6B_L, (MHL_IMPEDANCE_VALUE << 12), BMASK(15:12));
422*53ee8cc1Swenshuai.xi }
423*53ee8cc1Swenshuai.xi }
424*53ee8cc1Swenshuai.xi
425*53ee8cc1Swenshuai.xi break;
426*53ee8cc1Swenshuai.xi #endif
427*53ee8cc1Swenshuai.xi
428*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
429*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
430*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
433*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
434*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
435*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P1_09_L, 0, BIT(0)); // PP mode + HDCP eanble
436*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6F_L, 0, BIT(10)); // I-control PD overwrite write
437*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
438*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_11_L, 0, BMASK(12:0));
439*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6E_L, BIT(8), BIT(8));
440*53ee8cc1Swenshuai.xi
441*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
442*53ee8cc1Swenshuai.xi {
443*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_59_L, 0, BIT(8));
444*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6B_L, (MHL_IMPEDANCE_VALUE << 12), BMASK(15:12));
445*53ee8cc1Swenshuai.xi }
446*53ee8cc1Swenshuai.xi }
447*53ee8cc1Swenshuai.xi
448*53ee8cc1Swenshuai.xi break;
449*53ee8cc1Swenshuai.xi #endif
450*53ee8cc1Swenshuai.xi
451*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
452*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
453*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
454*53ee8cc1Swenshuai.xi {
455*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
456*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
457*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
458*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P2_09_L, 0, BIT(0)); // PP mode + HDCP eanble
459*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6F_L, 0, BIT(10)); // I-control PD overwrite write
460*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
461*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_11_L, 0, BMASK(12:0));
462*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6E_L, BIT(8), BIT(8));
463*53ee8cc1Swenshuai.xi
464*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
465*53ee8cc1Swenshuai.xi {
466*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_59_L, 0, BIT(8));
467*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6B_L, (MHL_IMPEDANCE_VALUE << 12), BMASK(15:12));
468*53ee8cc1Swenshuai.xi }
469*53ee8cc1Swenshuai.xi }
470*53ee8cc1Swenshuai.xi
471*53ee8cc1Swenshuai.xi break;
472*53ee8cc1Swenshuai.xi #endif
473*53ee8cc1Swenshuai.xi
474*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
475*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
476*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
477*53ee8cc1Swenshuai.xi {
478*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, 0, BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
479*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_73_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(4:0)); // B channel EQ
480*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_5B_L, BIT(13)| BMASK(3:0), BIT(13)| BMASK(3:0));
481*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P3_09_L, 0, BIT(0)); // PP mode + HDCP eanble
482*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6F_L, 0, BIT(10)); // I-control PD overwrite write
483*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_45_L, (MHL_HDMI_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
484*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_11_L, 0, BMASK(12:0));
485*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6E_L, BIT(8), BIT(8));
486*53ee8cc1Swenshuai.xi
487*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_59_L, 0, BIT(8));
490*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6B_L, (MHL_IMPEDANCE_VALUE << 12), BMASK(15:12));
491*53ee8cc1Swenshuai.xi }
492*53ee8cc1Swenshuai.xi }
493*53ee8cc1Swenshuai.xi
494*53ee8cc1Swenshuai.xi break;
495*53ee8cc1Swenshuai.xi #endif
496*53ee8cc1Swenshuai.xi
497*53ee8cc1Swenshuai.xi default:
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi break;
500*53ee8cc1Swenshuai.xi };
501*53ee8cc1Swenshuai.xi
502*53ee8cc1Swenshuai.xi _mhal_mhl_DviAutoEQSwitch(ucCbusSelect, TRUE);
503*53ee8cc1Swenshuai.xi }
504*53ee8cc1Swenshuai.xi
505*53ee8cc1Swenshuai.xi //**************************************************************************
506*53ee8cc1Swenshuai.xi // [Function Name]:
507*53ee8cc1Swenshuai.xi // _mhal_mhl_Mhl24bitsModeSetting()
508*53ee8cc1Swenshuai.xi // [Description]
509*53ee8cc1Swenshuai.xi // MHL 24 bits mode setting
510*53ee8cc1Swenshuai.xi // [Arguments]:
511*53ee8cc1Swenshuai.xi //
512*53ee8cc1Swenshuai.xi // [Return]:
513*53ee8cc1Swenshuai.xi //
514*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_Mhl24bitsModeSetting(MS_U8 ucCbusSelect)515*53ee8cc1Swenshuai.xi void _mhal_mhl_Mhl24bitsModeSetting(MS_U8 ucCbusSelect)
516*53ee8cc1Swenshuai.xi {
517*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
520*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
521*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
522*53ee8cc1Swenshuai.xi {
523*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
524*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
525*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_5B_L, 0, BIT(13)| BMASK(3:0));
526*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P0_09_L, 0, BIT(0)); // PP mode + HDCP eanble
527*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
528*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6C_L, (MHL_ICONTROL_PD_VALUE << 9), BMASK(13:9)); // I-control PD
529*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
530*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_11_L, BIT(12) |0x30, BMASK(12:0));
531*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_10_L, 0, BMASK(1:0));
532*53ee8cc1Swenshuai.xi
533*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
534*53ee8cc1Swenshuai.xi {
535*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_59_L, BIT(8), BIT(8));
536*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6B_L, (ucImpedanceValue << 12), BMASK(15:12));
537*53ee8cc1Swenshuai.xi }
538*53ee8cc1Swenshuai.xi }
539*53ee8cc1Swenshuai.xi
540*53ee8cc1Swenshuai.xi break;
541*53ee8cc1Swenshuai.xi #endif
542*53ee8cc1Swenshuai.xi
543*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
544*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
545*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
546*53ee8cc1Swenshuai.xi {
547*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
548*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
549*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_5B_L, 0, BIT(13)| BMASK(3:0));
550*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P1_09_L, 0, BIT(0)); // PP mode + HDCP eanble
551*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
552*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6C_L, (MHL_ICONTROL_PD_VALUE << 9), BMASK(13:9)); // I-control PD
553*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
554*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_11_L, BIT(12) |0x30, BMASK(12:0));
555*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_10_L, 0, BMASK(1:0));
556*53ee8cc1Swenshuai.xi
557*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_59_L, BIT(8), BIT(8));
560*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_6B_L, (ucImpedanceValue << 12), BMASK(15:12));
561*53ee8cc1Swenshuai.xi }
562*53ee8cc1Swenshuai.xi }
563*53ee8cc1Swenshuai.xi
564*53ee8cc1Swenshuai.xi break;
565*53ee8cc1Swenshuai.xi #endif
566*53ee8cc1Swenshuai.xi
567*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
568*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
569*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
570*53ee8cc1Swenshuai.xi {
571*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
572*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
573*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_5B_L, 0, BIT(13)| BMASK(3:0));
574*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P2_09_L, 0, BIT(0)); // PP mode + HDCP eanble
575*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
576*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6C_L, (MHL_ICONTROL_PD_VALUE << 9), BMASK(13:9)); // I-control PD
577*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
578*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_11_L, BIT(12) |0x30, BMASK(12:0));
579*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_10_L, 0, BMASK(1:0));
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
582*53ee8cc1Swenshuai.xi {
583*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_59_L, BIT(8), BIT(8));
584*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_6B_L, (ucImpedanceValue << 12), BMASK(15:12));
585*53ee8cc1Swenshuai.xi }
586*53ee8cc1Swenshuai.xi }
587*53ee8cc1Swenshuai.xi
588*53ee8cc1Swenshuai.xi break;
589*53ee8cc1Swenshuai.xi #endif
590*53ee8cc1Swenshuai.xi
591*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
592*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
593*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
594*53ee8cc1Swenshuai.xi {
595*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, BIT(6), BIT(6)| BIT(1)); // [6]: align, [1]: MHL pack-pixel mode
596*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_73_L, MHL_EQ_20_SETTING_VALUE, BMASK(4:0)); // B channel EQ
597*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_5B_L, 0, BIT(13)| BMASK(3:0));
598*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P3_09_L, 0, BIT(0)); // PP mode + HDCP eanble
599*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6F_L, BIT(10), BIT(10)); // I-control PD overwrite write
600*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6C_L, (MHL_ICONTROL_PD_VALUE << 9), BMASK(13:9)); // I-control PD
601*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_45_L, (MHL_LOCK_TIME_VALUE << 8), BMASK(14:8)); // Digital lock time value
602*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_11_L, BIT(12) |0x30, BMASK(12:0));
603*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_10_L, 0, BMASK(1:0));
604*53ee8cc1Swenshuai.xi
605*53ee8cc1Swenshuai.xi if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
606*53ee8cc1Swenshuai.xi {
607*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_59_L, BIT(8), BIT(8));
608*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_6B_L, (ucImpedanceValue << 12), BMASK(15:12));
609*53ee8cc1Swenshuai.xi }
610*53ee8cc1Swenshuai.xi }
611*53ee8cc1Swenshuai.xi
612*53ee8cc1Swenshuai.xi break;
613*53ee8cc1Swenshuai.xi #endif
614*53ee8cc1Swenshuai.xi
615*53ee8cc1Swenshuai.xi default:
616*53ee8cc1Swenshuai.xi
617*53ee8cc1Swenshuai.xi break;
618*53ee8cc1Swenshuai.xi };
619*53ee8cc1Swenshuai.xi
620*53ee8cc1Swenshuai.xi _mhal_mhl_DviAutoEQSwitch(ucCbusSelect, FALSE);
621*53ee8cc1Swenshuai.xi }
622*53ee8cc1Swenshuai.xi
623*53ee8cc1Swenshuai.xi //**************************************************************************
624*53ee8cc1Swenshuai.xi // [Function Name]:
625*53ee8cc1Swenshuai.xi // _mhal_mhl_MhlPackedPixelModeSetting()
626*53ee8cc1Swenshuai.xi // [Description]
627*53ee8cc1Swenshuai.xi // MHL packed pixel mode setting
628*53ee8cc1Swenshuai.xi // [Arguments]:
629*53ee8cc1Swenshuai.xi //
630*53ee8cc1Swenshuai.xi // [Return]:
631*53ee8cc1Swenshuai.xi //
632*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MhlPackedPixelModeSetting(MS_U8 ucCbusSelect)633*53ee8cc1Swenshuai.xi void _mhal_mhl_MhlPackedPixelModeSetting(MS_U8 ucCbusSelect)
634*53ee8cc1Swenshuai.xi {
635*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
638*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
639*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
640*53ee8cc1Swenshuai.xi {
641*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
642*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P0_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
643*53ee8cc1Swenshuai.xi }
644*53ee8cc1Swenshuai.xi
645*53ee8cc1Swenshuai.xi break;
646*53ee8cc1Swenshuai.xi #endif
647*53ee8cc1Swenshuai.xi
648*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
649*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
650*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
651*53ee8cc1Swenshuai.xi {
652*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
653*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P1_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
654*53ee8cc1Swenshuai.xi }
655*53ee8cc1Swenshuai.xi
656*53ee8cc1Swenshuai.xi break;
657*53ee8cc1Swenshuai.xi #endif
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
660*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
661*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
662*53ee8cc1Swenshuai.xi {
663*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
664*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P2_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
665*53ee8cc1Swenshuai.xi }
666*53ee8cc1Swenshuai.xi
667*53ee8cc1Swenshuai.xi break;
668*53ee8cc1Swenshuai.xi #endif
669*53ee8cc1Swenshuai.xi
670*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
671*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
672*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
673*53ee8cc1Swenshuai.xi {
674*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, BIT(1), BIT(1)); // [1]: MHL pack-pixel mode
675*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDCP_DUAL_P3_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
676*53ee8cc1Swenshuai.xi }
677*53ee8cc1Swenshuai.xi
678*53ee8cc1Swenshuai.xi break;
679*53ee8cc1Swenshuai.xi #endif
680*53ee8cc1Swenshuai.xi
681*53ee8cc1Swenshuai.xi default:
682*53ee8cc1Swenshuai.xi
683*53ee8cc1Swenshuai.xi break;
684*53ee8cc1Swenshuai.xi };
685*53ee8cc1Swenshuai.xi }
686*53ee8cc1Swenshuai.xi
687*53ee8cc1Swenshuai.xi //**************************************************************************
688*53ee8cc1Swenshuai.xi // [Function Name]:
689*53ee8cc1Swenshuai.xi // _mhal_mhl_RxRtermControl()
690*53ee8cc1Swenshuai.xi // [Description]
691*53ee8cc1Swenshuai.xi // MHL TMDS termination resistor control
692*53ee8cc1Swenshuai.xi // [Arguments]:
693*53ee8cc1Swenshuai.xi //
694*53ee8cc1Swenshuai.xi // [Return]:
695*53ee8cc1Swenshuai.xi //
696*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_RxRtermControl(MS_U8 ucCbusSelect,RXRtermControl_T rctrl)697*53ee8cc1Swenshuai.xi void _mhal_mhl_RxRtermControl(MS_U8 ucCbusSelect, RXRtermControl_T rctrl)
698*53ee8cc1Swenshuai.xi {
699*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
700*53ee8cc1Swenshuai.xi {
701*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
702*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
703*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
704*53ee8cc1Swenshuai.xi {
705*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
706*53ee8cc1Swenshuai.xi {
707*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(3:1));// data R-term
708*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(0));// clock R-term
709*53ee8cc1Swenshuai.xi }
710*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
711*53ee8cc1Swenshuai.xi {
712*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(2), BMASK(3:1));// data R-term
713*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(0));// clock R-term
714*53ee8cc1Swenshuai.xi }
715*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
716*53ee8cc1Swenshuai.xi {
717*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(3:1), BMASK(3:1));// data R-term
718*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(0), BIT(0));// clock R-term
719*53ee8cc1Swenshuai.xi }
720*53ee8cc1Swenshuai.xi }
721*53ee8cc1Swenshuai.xi
722*53ee8cc1Swenshuai.xi break;
723*53ee8cc1Swenshuai.xi #endif
724*53ee8cc1Swenshuai.xi
725*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
726*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
727*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
728*53ee8cc1Swenshuai.xi {
729*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
730*53ee8cc1Swenshuai.xi {
731*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(7:5));// data R-term
732*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(4));// clock R-term
733*53ee8cc1Swenshuai.xi }
734*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
735*53ee8cc1Swenshuai.xi {
736*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(6), BMASK(7:5));// data R-term
737*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(4));// clock R-term
738*53ee8cc1Swenshuai.xi }
739*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
740*53ee8cc1Swenshuai.xi {
741*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(7:5), BMASK(7:5));// data R-term
742*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(4), BIT(4));// clock R-term
743*53ee8cc1Swenshuai.xi }
744*53ee8cc1Swenshuai.xi }
745*53ee8cc1Swenshuai.xi
746*53ee8cc1Swenshuai.xi break;
747*53ee8cc1Swenshuai.xi #endif
748*53ee8cc1Swenshuai.xi
749*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
750*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
751*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
752*53ee8cc1Swenshuai.xi {
753*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
754*53ee8cc1Swenshuai.xi {
755*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(11:9));// data R-term
756*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(8));// clock R-term
757*53ee8cc1Swenshuai.xi }
758*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
759*53ee8cc1Swenshuai.xi {
760*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(10), BMASK(11:9));// data R-term
761*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(8));// clock R-term
762*53ee8cc1Swenshuai.xi }
763*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
764*53ee8cc1Swenshuai.xi {
765*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(11:9), BMASK(11:9));// data R-term
766*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(8), BIT(8));// clock R-term
767*53ee8cc1Swenshuai.xi }
768*53ee8cc1Swenshuai.xi }
769*53ee8cc1Swenshuai.xi
770*53ee8cc1Swenshuai.xi break;
771*53ee8cc1Swenshuai.xi #endif
772*53ee8cc1Swenshuai.xi
773*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
774*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
775*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
776*53ee8cc1Swenshuai.xi {
777*53ee8cc1Swenshuai.xi if (rctrl == RX_HDMI_RTERM)
778*53ee8cc1Swenshuai.xi {
779*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BMASK(15:13));// data R-term
780*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(12));// clock R-term
781*53ee8cc1Swenshuai.xi }
782*53ee8cc1Swenshuai.xi else if (rctrl == RX_MHL_RTERM)
783*53ee8cc1Swenshuai.xi {
784*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(14), BMASK(15:13));// data R-term
785*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, 0, BIT(12));// clock R-term
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi else if (rctrl == RX_RTERM_OFF)
788*53ee8cc1Swenshuai.xi {
789*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BMASK(15:13), BMASK(15:13));// data R-term
790*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4C_L, BIT(12), BIT(12));// clock R-term
791*53ee8cc1Swenshuai.xi }
792*53ee8cc1Swenshuai.xi }
793*53ee8cc1Swenshuai.xi
794*53ee8cc1Swenshuai.xi break;
795*53ee8cc1Swenshuai.xi #endif
796*53ee8cc1Swenshuai.xi
797*53ee8cc1Swenshuai.xi default:
798*53ee8cc1Swenshuai.xi
799*53ee8cc1Swenshuai.xi break;
800*53ee8cc1Swenshuai.xi };
801*53ee8cc1Swenshuai.xi }
802*53ee8cc1Swenshuai.xi
803*53ee8cc1Swenshuai.xi //**************************************************************************
804*53ee8cc1Swenshuai.xi // [Function Name]:
805*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusForceToStandby()
806*53ee8cc1Swenshuai.xi // [Description]
807*53ee8cc1Swenshuai.xi //
808*53ee8cc1Swenshuai.xi // [Arguments]:
809*53ee8cc1Swenshuai.xi //
810*53ee8cc1Swenshuai.xi // [Return]:
811*53ee8cc1Swenshuai.xi //
812*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusForceToStandby(void)813*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusForceToStandby(void)
814*53ee8cc1Swenshuai.xi {
815*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4), BIT(4)); // clear received FIFO
816*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(15), BIT(15)); // force enter PM mode
817*53ee8cc1Swenshuai.xi }
818*53ee8cc1Swenshuai.xi
819*53ee8cc1Swenshuai.xi //**************************************************************************
820*53ee8cc1Swenshuai.xi // [Function Name]:
821*53ee8cc1Swenshuai.xi // _mhal_mhl_MHLForceToAttach()
822*53ee8cc1Swenshuai.xi // [Description]:
823*53ee8cc1Swenshuai.xi //
824*53ee8cc1Swenshuai.xi // [Arguments]:
825*53ee8cc1Swenshuai.xi //
826*53ee8cc1Swenshuai.xi // [Return]:
827*53ee8cc1Swenshuai.xi //
828*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHLForceToAttach(void)829*53ee8cc1Swenshuai.xi void _mhal_mhl_MHLForceToAttach(void)
830*53ee8cc1Swenshuai.xi {
831*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(14), BIT(14));
832*53ee8cc1Swenshuai.xi }
833*53ee8cc1Swenshuai.xi
834*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
835*53ee8cc1Swenshuai.xi //**************************************************************************
836*53ee8cc1Swenshuai.xi // [Function Name]:
837*53ee8cc1Swenshuai.xi // _mhal_mhl_AdjustCommonModeResistor()
838*53ee8cc1Swenshuai.xi // [Description]:
839*53ee8cc1Swenshuai.xi //
840*53ee8cc1Swenshuai.xi // [Arguments]:
841*53ee8cc1Swenshuai.xi //
842*53ee8cc1Swenshuai.xi // [Return]:
843*53ee8cc1Swenshuai.xi //
844*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_AdjustCommonModeResistor(MS_U8 ucCbusSelect,MS_BOOL bflag)845*53ee8cc1Swenshuai.xi void _mhal_mhl_AdjustCommonModeResistor(MS_U8 ucCbusSelect, MS_BOOL bflag)
846*53ee8cc1Swenshuai.xi {
847*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
848*53ee8cc1Swenshuai.xi {
849*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
850*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
851*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
852*53ee8cc1Swenshuai.xi {
853*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
854*53ee8cc1Swenshuai.xi }
855*53ee8cc1Swenshuai.xi
856*53ee8cc1Swenshuai.xi break;
857*53ee8cc1Swenshuai.xi #endif
858*53ee8cc1Swenshuai.xi
859*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
860*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
861*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
862*53ee8cc1Swenshuai.xi {
863*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
864*53ee8cc1Swenshuai.xi }
865*53ee8cc1Swenshuai.xi
866*53ee8cc1Swenshuai.xi break;
867*53ee8cc1Swenshuai.xi #endif
868*53ee8cc1Swenshuai.xi
869*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
870*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
871*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
872*53ee8cc1Swenshuai.xi {
873*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
874*53ee8cc1Swenshuai.xi }
875*53ee8cc1Swenshuai.xi
876*53ee8cc1Swenshuai.xi break;
877*53ee8cc1Swenshuai.xi #endif
878*53ee8cc1Swenshuai.xi
879*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
880*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
881*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
882*53ee8cc1Swenshuai.xi {
883*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_27_L, bflag ? 0 : BIT(0), BIT(0)); // [0]: MHL mac enable
884*53ee8cc1Swenshuai.xi }
885*53ee8cc1Swenshuai.xi
886*53ee8cc1Swenshuai.xi break;
887*53ee8cc1Swenshuai.xi #endif
888*53ee8cc1Swenshuai.xi
889*53ee8cc1Swenshuai.xi default:
890*53ee8cc1Swenshuai.xi
891*53ee8cc1Swenshuai.xi break;
892*53ee8cc1Swenshuai.xi };
893*53ee8cc1Swenshuai.xi }
894*53ee8cc1Swenshuai.xi
895*53ee8cc1Swenshuai.xi #endif
896*53ee8cc1Swenshuai.xi
897*53ee8cc1Swenshuai.xi //**************************************************************************
898*53ee8cc1Swenshuai.xi // [Function Name]:
899*53ee8cc1Swenshuai.xi // _mhal_mhl_ClockBigChangeFlag()
900*53ee8cc1Swenshuai.xi // [Description]:
901*53ee8cc1Swenshuai.xi //
902*53ee8cc1Swenshuai.xi // [Arguments]:
903*53ee8cc1Swenshuai.xi //
904*53ee8cc1Swenshuai.xi // [Return]:
905*53ee8cc1Swenshuai.xi //
906*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ClockBigChangeFlag(MS_U8 ucCbusSelect)907*53ee8cc1Swenshuai.xi MS_BOOL _mhal_mhl_ClockBigChangeFlag(MS_U8 ucCbusSelect)
908*53ee8cc1Swenshuai.xi {
909*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
910*53ee8cc1Swenshuai.xi
911*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
912*53ee8cc1Swenshuai.xi {
913*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
914*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
915*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
916*53ee8cc1Swenshuai.xi {
917*53ee8cc1Swenshuai.xi //bindex = ((R2BYTE(REG_DVI_ATOP_70_L) &BIT(0)) ?TRUE: FALSE);
918*53ee8cc1Swenshuai.xi
919*53ee8cc1Swenshuai.xi if(bindex)
920*53ee8cc1Swenshuai.xi {
921*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP_71_L, BIT(8), BIT(8));
922*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP_71_L, 0, BIT(8));
923*53ee8cc1Swenshuai.xi }
924*53ee8cc1Swenshuai.xi }
925*53ee8cc1Swenshuai.xi
926*53ee8cc1Swenshuai.xi break;
927*53ee8cc1Swenshuai.xi #endif
928*53ee8cc1Swenshuai.xi
929*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
930*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
931*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
932*53ee8cc1Swenshuai.xi {
933*53ee8cc1Swenshuai.xi //bindex = ((R2BYTE(REG_DVI_ATOP1_70_L) &BIT(0)) ?TRUE: FALSE);
934*53ee8cc1Swenshuai.xi
935*53ee8cc1Swenshuai.xi if(bindex)
936*53ee8cc1Swenshuai.xi {
937*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP1_71_L, BIT(8), BIT(8));
938*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP1_71_L, 0, BIT(8));
939*53ee8cc1Swenshuai.xi }
940*53ee8cc1Swenshuai.xi }
941*53ee8cc1Swenshuai.xi
942*53ee8cc1Swenshuai.xi break;
943*53ee8cc1Swenshuai.xi #endif
944*53ee8cc1Swenshuai.xi
945*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
946*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
947*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
948*53ee8cc1Swenshuai.xi {
949*53ee8cc1Swenshuai.xi //bindex = ((R2BYTE(REG_DVI_ATOP3_70_L) &BIT(0)) ?TRUE: FALSE);
950*53ee8cc1Swenshuai.xi
951*53ee8cc1Swenshuai.xi if(bindex)
952*53ee8cc1Swenshuai.xi {
953*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP3_71_L, BIT(8), BIT(8));
954*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP3_71_L, 0, BIT(8));
955*53ee8cc1Swenshuai.xi }
956*53ee8cc1Swenshuai.xi }
957*53ee8cc1Swenshuai.xi
958*53ee8cc1Swenshuai.xi break;
959*53ee8cc1Swenshuai.xi #endif
960*53ee8cc1Swenshuai.xi
961*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
962*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
963*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
964*53ee8cc1Swenshuai.xi {
965*53ee8cc1Swenshuai.xi //bindex = ((R2BYTE(REG_DVI_ATOP2_70_L) &BIT(0)) ?TRUE: FALSE);
966*53ee8cc1Swenshuai.xi
967*53ee8cc1Swenshuai.xi if(bindex)
968*53ee8cc1Swenshuai.xi {
969*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP2_71_L, BIT(8), BIT(8));
970*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_DVI_ATOP2_71_L, 0, BIT(8));
971*53ee8cc1Swenshuai.xi }
972*53ee8cc1Swenshuai.xi }
973*53ee8cc1Swenshuai.xi
974*53ee8cc1Swenshuai.xi break;
975*53ee8cc1Swenshuai.xi #endif
976*53ee8cc1Swenshuai.xi
977*53ee8cc1Swenshuai.xi default:
978*53ee8cc1Swenshuai.xi
979*53ee8cc1Swenshuai.xi break;
980*53ee8cc1Swenshuai.xi };
981*53ee8cc1Swenshuai.xi
982*53ee8cc1Swenshuai.xi return bindex;
983*53ee8cc1Swenshuai.xi }
984*53ee8cc1Swenshuai.xi
985*53ee8cc1Swenshuai.xi //**************************************************************************
986*53ee8cc1Swenshuai.xi // [Function Name]:
987*53ee8cc1Swenshuai.xi // _mhal_mhl_CheckClockStatus()
988*53ee8cc1Swenshuai.xi // [Description]:
989*53ee8cc1Swenshuai.xi //
990*53ee8cc1Swenshuai.xi // [Arguments]:
991*53ee8cc1Swenshuai.xi //
992*53ee8cc1Swenshuai.xi // [Return]:
993*53ee8cc1Swenshuai.xi //
994*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CheckClockStatus(MS_U8 ucCbusSelect)995*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_CheckClockStatus(MS_U8 ucCbusSelect)
996*53ee8cc1Swenshuai.xi {
997*53ee8cc1Swenshuai.xi MS_BOOL bStable = FALSE;
998*53ee8cc1Swenshuai.xi MS_U16 usClkCount = 0;
999*53ee8cc1Swenshuai.xi
1000*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
1001*53ee8cc1Swenshuai.xi {
1002*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1003*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
1004*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
1005*53ee8cc1Swenshuai.xi {
1006*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P0_3C_L) & 0x0FFF;
1007*53ee8cc1Swenshuai.xi
1008*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P0_41_L) &BIT(9)) == BIT(9))
1009*53ee8cc1Swenshuai.xi {
1010*53ee8cc1Swenshuai.xi bStable = TRUE;
1011*53ee8cc1Swenshuai.xi
1012*53ee8cc1Swenshuai.xi if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1013*53ee8cc1Swenshuai.xi {
1014*53ee8cc1Swenshuai.xi bStable = FALSE;
1015*53ee8cc1Swenshuai.xi }
1016*53ee8cc1Swenshuai.xi }
1017*53ee8cc1Swenshuai.xi }
1018*53ee8cc1Swenshuai.xi
1019*53ee8cc1Swenshuai.xi break;
1020*53ee8cc1Swenshuai.xi #endif
1021*53ee8cc1Swenshuai.xi
1022*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1023*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
1024*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
1025*53ee8cc1Swenshuai.xi {
1026*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P1_3C_L) & 0x0FFF;
1027*53ee8cc1Swenshuai.xi
1028*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P1_41_L) &BIT(9)) == BIT(9))
1029*53ee8cc1Swenshuai.xi {
1030*53ee8cc1Swenshuai.xi bStable = TRUE;
1031*53ee8cc1Swenshuai.xi
1032*53ee8cc1Swenshuai.xi if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1033*53ee8cc1Swenshuai.xi {
1034*53ee8cc1Swenshuai.xi bStable = FALSE;
1035*53ee8cc1Swenshuai.xi }
1036*53ee8cc1Swenshuai.xi }
1037*53ee8cc1Swenshuai.xi }
1038*53ee8cc1Swenshuai.xi
1039*53ee8cc1Swenshuai.xi break;
1040*53ee8cc1Swenshuai.xi #endif
1041*53ee8cc1Swenshuai.xi
1042*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1043*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
1044*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
1045*53ee8cc1Swenshuai.xi {
1046*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P2_3C_L) & 0x0FFF;
1047*53ee8cc1Swenshuai.xi
1048*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P2_41_L) &BIT(9)) == BIT(9))
1049*53ee8cc1Swenshuai.xi {
1050*53ee8cc1Swenshuai.xi bStable = TRUE;
1051*53ee8cc1Swenshuai.xi
1052*53ee8cc1Swenshuai.xi if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1053*53ee8cc1Swenshuai.xi {
1054*53ee8cc1Swenshuai.xi bStable = FALSE;
1055*53ee8cc1Swenshuai.xi }
1056*53ee8cc1Swenshuai.xi }
1057*53ee8cc1Swenshuai.xi }
1058*53ee8cc1Swenshuai.xi
1059*53ee8cc1Swenshuai.xi break;
1060*53ee8cc1Swenshuai.xi #endif
1061*53ee8cc1Swenshuai.xi
1062*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1063*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
1064*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
1065*53ee8cc1Swenshuai.xi {
1066*53ee8cc1Swenshuai.xi usClkCount = R2BYTE(REG_COMBO_PHY0_P3_3C_L) & 0x0FFF;
1067*53ee8cc1Swenshuai.xi
1068*53ee8cc1Swenshuai.xi if((R2BYTE(REG_COMBO_PHY0_P3_41_L) &BIT(9)) == BIT(9))
1069*53ee8cc1Swenshuai.xi {
1070*53ee8cc1Swenshuai.xi bStable = TRUE;
1071*53ee8cc1Swenshuai.xi
1072*53ee8cc1Swenshuai.xi if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1073*53ee8cc1Swenshuai.xi {
1074*53ee8cc1Swenshuai.xi bStable = FALSE;
1075*53ee8cc1Swenshuai.xi }
1076*53ee8cc1Swenshuai.xi }
1077*53ee8cc1Swenshuai.xi }
1078*53ee8cc1Swenshuai.xi
1079*53ee8cc1Swenshuai.xi break;
1080*53ee8cc1Swenshuai.xi #endif
1081*53ee8cc1Swenshuai.xi
1082*53ee8cc1Swenshuai.xi default:
1083*53ee8cc1Swenshuai.xi
1084*53ee8cc1Swenshuai.xi break;
1085*53ee8cc1Swenshuai.xi };
1086*53ee8cc1Swenshuai.xi
1087*53ee8cc1Swenshuai.xi return bStable;
1088*53ee8cc1Swenshuai.xi }
1089*53ee8cc1Swenshuai.xi
1090*53ee8cc1Swenshuai.xi //**************************************************************************
1091*53ee8cc1Swenshuai.xi // [Function Name]:
1092*53ee8cc1Swenshuai.xi // _mhal_mhl_RtermHWControl()
1093*53ee8cc1Swenshuai.xi // [Description]
1094*53ee8cc1Swenshuai.xi //
1095*53ee8cc1Swenshuai.xi // [Arguments]:
1096*53ee8cc1Swenshuai.xi //
1097*53ee8cc1Swenshuai.xi // [Return]:
1098*53ee8cc1Swenshuai.xi //
1099*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_RtermHWControl(MS_U8 ucCbusSelect,MS_BOOL bFlag)1100*53ee8cc1Swenshuai.xi void _mhal_mhl_RtermHWControl(MS_U8 ucCbusSelect, MS_BOOL bFlag)
1101*53ee8cc1Swenshuai.xi {
1102*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
1103*53ee8cc1Swenshuai.xi {
1104*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1105*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
1106*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
1107*53ee8cc1Swenshuai.xi {
1108*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(8): 0, BIT(8));
1109*53ee8cc1Swenshuai.xi }
1110*53ee8cc1Swenshuai.xi
1111*53ee8cc1Swenshuai.xi break;
1112*53ee8cc1Swenshuai.xi #endif
1113*53ee8cc1Swenshuai.xi
1114*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1115*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
1116*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
1117*53ee8cc1Swenshuai.xi {
1118*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(9): 0, BIT(9));
1119*53ee8cc1Swenshuai.xi }
1120*53ee8cc1Swenshuai.xi
1121*53ee8cc1Swenshuai.xi break;
1122*53ee8cc1Swenshuai.xi #endif
1123*53ee8cc1Swenshuai.xi
1124*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1125*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
1126*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
1127*53ee8cc1Swenshuai.xi {
1128*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(10): 0, BIT(10));
1129*53ee8cc1Swenshuai.xi }
1130*53ee8cc1Swenshuai.xi
1131*53ee8cc1Swenshuai.xi break;
1132*53ee8cc1Swenshuai.xi #endif
1133*53ee8cc1Swenshuai.xi
1134*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1135*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
1136*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
1137*53ee8cc1Swenshuai.xi {
1138*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_SLEEP_4A_L, bFlag? BIT(11): 0, BIT(11));
1139*53ee8cc1Swenshuai.xi }
1140*53ee8cc1Swenshuai.xi
1141*53ee8cc1Swenshuai.xi break;
1142*53ee8cc1Swenshuai.xi #endif
1143*53ee8cc1Swenshuai.xi
1144*53ee8cc1Swenshuai.xi default:
1145*53ee8cc1Swenshuai.xi
1146*53ee8cc1Swenshuai.xi break;
1147*53ee8cc1Swenshuai.xi };
1148*53ee8cc1Swenshuai.xi }
1149*53ee8cc1Swenshuai.xi
1150*53ee8cc1Swenshuai.xi //**************************************************************************
1151*53ee8cc1Swenshuai.xi // [Function Name]:
1152*53ee8cc1Swenshuai.xi // _mhal_mhl_ChangeScalerMainMux()
1153*53ee8cc1Swenshuai.xi // [Description]
1154*53ee8cc1Swenshuai.xi //
1155*53ee8cc1Swenshuai.xi // [Arguments]:
1156*53ee8cc1Swenshuai.xi //
1157*53ee8cc1Swenshuai.xi // [Return]:
1158*53ee8cc1Swenshuai.xi //
1159*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ChangeScalerMainMux(MS_BOOL bFlag)1160*53ee8cc1Swenshuai.xi void _mhal_mhl_ChangeScalerMainMux(MS_BOOL bFlag)
1161*53ee8cc1Swenshuai.xi {
1162*53ee8cc1Swenshuai.xi MS_U8 ucScalerMainMux = (R2BYTE(0x102E02) &BMASK(7:4)) >> 4;
1163*53ee8cc1Swenshuai.xi
1164*53ee8cc1Swenshuai.xi if(bFlag)
1165*53ee8cc1Swenshuai.xi {
1166*53ee8cc1Swenshuai.xi if(ucScalerMainMux == MHL_SCALER_MUX_SELECT_DVI)
1167*53ee8cc1Swenshuai.xi {
1168*53ee8cc1Swenshuai.xi W2BYTEMSK(0x102E02, (MHL_SCALER_MUX_SELECT_MHL << 4), BMASK(7:4));
1169*53ee8cc1Swenshuai.xi }
1170*53ee8cc1Swenshuai.xi }
1171*53ee8cc1Swenshuai.xi else
1172*53ee8cc1Swenshuai.xi {
1173*53ee8cc1Swenshuai.xi if(ucScalerMainMux == MHL_SCALER_MUX_SELECT_MHL)
1174*53ee8cc1Swenshuai.xi {
1175*53ee8cc1Swenshuai.xi W2BYTEMSK(0x102E02, (MHL_SCALER_MUX_SELECT_DVI << 4), BMASK(7:4));
1176*53ee8cc1Swenshuai.xi }
1177*53ee8cc1Swenshuai.xi }
1178*53ee8cc1Swenshuai.xi }
1179*53ee8cc1Swenshuai.xi
1180*53ee8cc1Swenshuai.xi //**************************************************************************
1181*53ee8cc1Swenshuai.xi // [Function Name]:
1182*53ee8cc1Swenshuai.xi // _mhal_mhl_AudioPathSelect()
1183*53ee8cc1Swenshuai.xi // [Description]
1184*53ee8cc1Swenshuai.xi //
1185*53ee8cc1Swenshuai.xi // [Arguments]:
1186*53ee8cc1Swenshuai.xi //
1187*53ee8cc1Swenshuai.xi // [Return]:
1188*53ee8cc1Swenshuai.xi //
1189*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_AudioPathSelect(MS_BOOL bMHLPath)1190*53ee8cc1Swenshuai.xi void _mhal_mhl_AudioPathSelect(MS_BOOL bMHLPath)
1191*53ee8cc1Swenshuai.xi {
1192*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_HDMI2_08_L, bMHLPath ?BIT(0) :0, BIT(0)); // [0]: audio source selection, 0: HDMI / 1: MHL
1193*53ee8cc1Swenshuai.xi }
1194*53ee8cc1Swenshuai.xi
1195*53ee8cc1Swenshuai.xi //**************************************************************************
1196*53ee8cc1Swenshuai.xi // [Function Name]:
1197*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusAndClockSelect()
1198*53ee8cc1Swenshuai.xi // [Description]
1199*53ee8cc1Swenshuai.xi //
1200*53ee8cc1Swenshuai.xi // [Arguments]:
1201*53ee8cc1Swenshuai.xi //
1202*53ee8cc1Swenshuai.xi // [Return]:
1203*53ee8cc1Swenshuai.xi //
1204*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusAndClockSelect(void)1205*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusAndClockSelect(void)
1206*53ee8cc1Swenshuai.xi {
1207*53ee8cc1Swenshuai.xi MS_U8 ucClockSelect = MHL_DVI_PORT_A;
1208*53ee8cc1Swenshuai.xi
1209*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
1210*53ee8cc1Swenshuai.xi {
1211*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, 0, BIT(11));
1212*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_A;
1213*53ee8cc1Swenshuai.xi }
1214*53ee8cc1Swenshuai.xi else if(GET_MHL_PATH_SUPPORT_PORTB())
1215*53ee8cc1Swenshuai.xi {
1216*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_B;
1217*53ee8cc1Swenshuai.xi }
1218*53ee8cc1Swenshuai.xi else if(GET_MHL_PATH_SUPPORT_PORTC())
1219*53ee8cc1Swenshuai.xi {
1220*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_C;
1221*53ee8cc1Swenshuai.xi }
1222*53ee8cc1Swenshuai.xi else if(GET_MHL_PATH_SUPPORT_PORTD())
1223*53ee8cc1Swenshuai.xi {
1224*53ee8cc1Swenshuai.xi ucClockSelect = MHL_DVI_PORT_D;
1225*53ee8cc1Swenshuai.xi }
1226*53ee8cc1Swenshuai.xi
1227*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_GP_TOP_33_L, ucClockSelect, BMASK(2:0)); // [2:0]: mhl port select
1228*53ee8cc1Swenshuai.xi }
1229*53ee8cc1Swenshuai.xi
1230*53ee8cc1Swenshuai.xi //**************************************************************************
1231*53ee8cc1Swenshuai.xi // [Function Name]:
1232*53ee8cc1Swenshuai.xi // _mhal_mhl_ForcePullDown100K()
1233*53ee8cc1Swenshuai.xi // [Description]
1234*53ee8cc1Swenshuai.xi //
1235*53ee8cc1Swenshuai.xi // [Arguments]:
1236*53ee8cc1Swenshuai.xi //
1237*53ee8cc1Swenshuai.xi // [Return]:
1238*53ee8cc1Swenshuai.xi //
1239*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ForcePullDown100K(MS_BOOL bEnable)1240*53ee8cc1Swenshuai.xi void _mhal_mhl_ForcePullDown100K(MS_BOOL bEnable)
1241*53ee8cc1Swenshuai.xi {
1242*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, bEnable? BIT(7): 0, BIT(7));
1243*53ee8cc1Swenshuai.xi }
1244*53ee8cc1Swenshuai.xi
1245*53ee8cc1Swenshuai.xi //**************************************************************************
1246*53ee8cc1Swenshuai.xi // [Function Name]:
1247*53ee8cc1Swenshuai.xi // _mhal_mhl_GetEMSCOneByteCRC()
1248*53ee8cc1Swenshuai.xi // [Description]
1249*53ee8cc1Swenshuai.xi //
1250*53ee8cc1Swenshuai.xi // [Arguments]:
1251*53ee8cc1Swenshuai.xi //
1252*53ee8cc1Swenshuai.xi // [Return]:
1253*53ee8cc1Swenshuai.xi //
1254*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetEMSCOneByteCRC(MS_U8 ucOpCode)1255*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_GetEMSCOneByteCRC(MS_U8 ucOpCode)
1256*53ee8cc1Swenshuai.xi {
1257*53ee8cc1Swenshuai.xi MS_U8 ucAValue = 0;
1258*53ee8cc1Swenshuai.xi MS_U8 ucBValue = 0;
1259*53ee8cc1Swenshuai.xi MS_U8 ucCommand = BIT(7) |BIT(6) |((ucOpCode &BMASK(2:0)) << 2);
1260*53ee8cc1Swenshuai.xi
1261*53ee8cc1Swenshuai.xi ucAValue = GET_BIT(ucCommand &BIT(7)) +GET_BIT(ucCommand &BIT(5)) +GET_BIT(ucCommand &BIT(3)) +2;
1262*53ee8cc1Swenshuai.xi ucBValue = GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(4)) +GET_BIT(ucCommand &BIT(2)) +2;
1263*53ee8cc1Swenshuai.xi
1264*53ee8cc1Swenshuai.xi if(ucAValue &BIT(0))
1265*53ee8cc1Swenshuai.xi {
1266*53ee8cc1Swenshuai.xi ucCommand |= BIT(1);
1267*53ee8cc1Swenshuai.xi }
1268*53ee8cc1Swenshuai.xi
1269*53ee8cc1Swenshuai.xi if(ucBValue &BIT(0))
1270*53ee8cc1Swenshuai.xi {
1271*53ee8cc1Swenshuai.xi ucCommand |= BIT(0);
1272*53ee8cc1Swenshuai.xi }
1273*53ee8cc1Swenshuai.xi
1274*53ee8cc1Swenshuai.xi return ucCommand;
1275*53ee8cc1Swenshuai.xi }
1276*53ee8cc1Swenshuai.xi
1277*53ee8cc1Swenshuai.xi //**************************************************************************
1278*53ee8cc1Swenshuai.xi // [Function Name]:
1279*53ee8cc1Swenshuai.xi // _mhal_mhl_GetEMSCTwoByteCRC()
1280*53ee8cc1Swenshuai.xi // [Description]
1281*53ee8cc1Swenshuai.xi //
1282*53ee8cc1Swenshuai.xi // [Arguments]:
1283*53ee8cc1Swenshuai.xi //
1284*53ee8cc1Swenshuai.xi // [Return]:
1285*53ee8cc1Swenshuai.xi //
1286*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetEMSCTwoByteCRC(MS_U8 ucOpCode,MS_U8 ucValue)1287*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_GetEMSCTwoByteCRC(MS_U8 ucOpCode, MS_U8 ucValue)
1288*53ee8cc1Swenshuai.xi {
1289*53ee8cc1Swenshuai.xi MS_U8 ucAValue = 0;
1290*53ee8cc1Swenshuai.xi MS_U8 ucBValue = 0;
1291*53ee8cc1Swenshuai.xi MS_U8 ucCValue = 0;
1292*53ee8cc1Swenshuai.xi MS_U16 ucCommand = BIT(13) |(((MS_U16)ucOpCode &BMASK(1:0)) << 11) |(((MS_U16)ucValue &BMASK(7:0)) << 3);
1293*53ee8cc1Swenshuai.xi
1294*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));
1295*53ee8cc1Swenshuai.xi ucAValue = ucAValue +GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(5)) +GET_BIT(ucCommand &BIT(4)) +3;
1296*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));
1297*53ee8cc1Swenshuai.xi ucBValue = ucBValue +GET_BIT(ucCommand &BIT(7)) +GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(3)) +2;
1298*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));
1299*53ee8cc1Swenshuai.xi ucCValue = ucCValue +GET_BIT(ucCommand &BIT(6)) +GET_BIT(ucCommand &BIT(5)) +2;
1300*53ee8cc1Swenshuai.xi
1301*53ee8cc1Swenshuai.xi if(ucAValue &BIT(0))
1302*53ee8cc1Swenshuai.xi {
1303*53ee8cc1Swenshuai.xi ucCommand |= BIT(2);
1304*53ee8cc1Swenshuai.xi }
1305*53ee8cc1Swenshuai.xi
1306*53ee8cc1Swenshuai.xi if(ucBValue &BIT(0))
1307*53ee8cc1Swenshuai.xi {
1308*53ee8cc1Swenshuai.xi ucCommand |= BIT(1);
1309*53ee8cc1Swenshuai.xi }
1310*53ee8cc1Swenshuai.xi
1311*53ee8cc1Swenshuai.xi if(ucCValue &BIT(0))
1312*53ee8cc1Swenshuai.xi {
1313*53ee8cc1Swenshuai.xi ucCommand |= BIT(0);
1314*53ee8cc1Swenshuai.xi }
1315*53ee8cc1Swenshuai.xi
1316*53ee8cc1Swenshuai.xi return (ucCommand &BMASK(7:0));
1317*53ee8cc1Swenshuai.xi }
1318*53ee8cc1Swenshuai.xi
1319*53ee8cc1Swenshuai.xi //**************************************************************************
1320*53ee8cc1Swenshuai.xi // [Function Name]:
1321*53ee8cc1Swenshuai.xi // _mhal_mhl_GetEMSCPayloadCRC()
1322*53ee8cc1Swenshuai.xi // [Description]
1323*53ee8cc1Swenshuai.xi //
1324*53ee8cc1Swenshuai.xi // [Arguments]:
1325*53ee8cc1Swenshuai.xi //
1326*53ee8cc1Swenshuai.xi // [Return]:
1327*53ee8cc1Swenshuai.xi //
1328*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetEMSCPayloadCRC(MS_U8 ucOpCode,MS_U16 usCRCValus)1329*53ee8cc1Swenshuai.xi MS_U16 _mhal_mhl_GetEMSCPayloadCRC(MS_U8 ucOpCode, MS_U16 usCRCValus)
1330*53ee8cc1Swenshuai.xi {
1331*53ee8cc1Swenshuai.xi MS_U8 ucAValue = 0;
1332*53ee8cc1Swenshuai.xi MS_U8 ucBValue = 0;
1333*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));
1334*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));
1335*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));
1336*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));
1337*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));
1338*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));
1339*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));
1340*53ee8cc1Swenshuai.xi MS_U8 ucJValue = GET_BIT(ucOpCode &BIT(0)) +GET_BIT(usCRCValus &BIT(0)) +GET_BIT(usCRCValus &BIT(14));
1341*53ee8cc1Swenshuai.xi MS_U8 ucKValue = GET_BIT(usCRCValus &BIT(13));
1342*53ee8cc1Swenshuai.xi MS_U8 ucLValue = GET_BIT(usCRCValus &BIT(12));
1343*53ee8cc1Swenshuai.xi MS_U8 ucMValue = GET_BIT(usCRCValus &BIT(11));
1344*53ee8cc1Swenshuai.xi MS_U8 ucNValue = GET_BIT(usCRCValus &BIT(10));
1345*53ee8cc1Swenshuai.xi MS_U8 ucOValue = GET_BIT(usCRCValus &BIT(9));
1346*53ee8cc1Swenshuai.xi MS_U8 ucPValue = 0;
1347*53ee8cc1Swenshuai.xi MS_U16 usCommand = 0;
1348*53ee8cc1Swenshuai.xi
1349*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));
1350*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));
1351*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));
1352*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));
1353*53ee8cc1Swenshuai.xi ucPValue = ucAValue +GET_BIT(usCRCValus &BIT(8));
1354*53ee8cc1Swenshuai.xi
1355*53ee8cc1Swenshuai.xi if(ucAValue &BIT(0))
1356*53ee8cc1Swenshuai.xi {
1357*53ee8cc1Swenshuai.xi usCommand |= BIT(15);
1358*53ee8cc1Swenshuai.xi }
1359*53ee8cc1Swenshuai.xi
1360*53ee8cc1Swenshuai.xi if(ucBValue &BIT(0))
1361*53ee8cc1Swenshuai.xi {
1362*53ee8cc1Swenshuai.xi usCommand |= BIT(14);
1363*53ee8cc1Swenshuai.xi }
1364*53ee8cc1Swenshuai.xi
1365*53ee8cc1Swenshuai.xi if(ucCValue &BIT(0))
1366*53ee8cc1Swenshuai.xi {
1367*53ee8cc1Swenshuai.xi usCommand |= BIT(13);
1368*53ee8cc1Swenshuai.xi }
1369*53ee8cc1Swenshuai.xi
1370*53ee8cc1Swenshuai.xi if(ucDValue &BIT(0))
1371*53ee8cc1Swenshuai.xi {
1372*53ee8cc1Swenshuai.xi usCommand |= BIT(12);
1373*53ee8cc1Swenshuai.xi }
1374*53ee8cc1Swenshuai.xi
1375*53ee8cc1Swenshuai.xi if(ucEValue &BIT(0))
1376*53ee8cc1Swenshuai.xi {
1377*53ee8cc1Swenshuai.xi usCommand |= BIT(11);
1378*53ee8cc1Swenshuai.xi }
1379*53ee8cc1Swenshuai.xi
1380*53ee8cc1Swenshuai.xi if(ucFValue &BIT(0))
1381*53ee8cc1Swenshuai.xi {
1382*53ee8cc1Swenshuai.xi usCommand |= BIT(10);
1383*53ee8cc1Swenshuai.xi }
1384*53ee8cc1Swenshuai.xi
1385*53ee8cc1Swenshuai.xi if(ucGValue &BIT(0))
1386*53ee8cc1Swenshuai.xi {
1387*53ee8cc1Swenshuai.xi usCommand |= BIT(9);
1388*53ee8cc1Swenshuai.xi }
1389*53ee8cc1Swenshuai.xi
1390*53ee8cc1Swenshuai.xi if(ucHValue &BIT(0))
1391*53ee8cc1Swenshuai.xi {
1392*53ee8cc1Swenshuai.xi usCommand |= BIT(8);
1393*53ee8cc1Swenshuai.xi }
1394*53ee8cc1Swenshuai.xi
1395*53ee8cc1Swenshuai.xi if(ucIValue &BIT(0))
1396*53ee8cc1Swenshuai.xi {
1397*53ee8cc1Swenshuai.xi usCommand |= BIT(7);
1398*53ee8cc1Swenshuai.xi }
1399*53ee8cc1Swenshuai.xi
1400*53ee8cc1Swenshuai.xi if(ucJValue &BIT(0))
1401*53ee8cc1Swenshuai.xi {
1402*53ee8cc1Swenshuai.xi usCommand |= BIT(6);
1403*53ee8cc1Swenshuai.xi }
1404*53ee8cc1Swenshuai.xi
1405*53ee8cc1Swenshuai.xi if(ucKValue &BIT(0))
1406*53ee8cc1Swenshuai.xi {
1407*53ee8cc1Swenshuai.xi usCommand |= BIT(5);
1408*53ee8cc1Swenshuai.xi }
1409*53ee8cc1Swenshuai.xi
1410*53ee8cc1Swenshuai.xi if(ucLValue &BIT(0))
1411*53ee8cc1Swenshuai.xi {
1412*53ee8cc1Swenshuai.xi usCommand |= BIT(4);
1413*53ee8cc1Swenshuai.xi }
1414*53ee8cc1Swenshuai.xi
1415*53ee8cc1Swenshuai.xi if(ucMValue &BIT(0))
1416*53ee8cc1Swenshuai.xi {
1417*53ee8cc1Swenshuai.xi usCommand |= BIT(3);
1418*53ee8cc1Swenshuai.xi }
1419*53ee8cc1Swenshuai.xi
1420*53ee8cc1Swenshuai.xi if(ucNValue &BIT(0))
1421*53ee8cc1Swenshuai.xi {
1422*53ee8cc1Swenshuai.xi usCommand |= BIT(2);
1423*53ee8cc1Swenshuai.xi }
1424*53ee8cc1Swenshuai.xi
1425*53ee8cc1Swenshuai.xi if(ucOValue &BIT(0))
1426*53ee8cc1Swenshuai.xi {
1427*53ee8cc1Swenshuai.xi usCommand |= BIT(1);
1428*53ee8cc1Swenshuai.xi }
1429*53ee8cc1Swenshuai.xi
1430*53ee8cc1Swenshuai.xi if(ucPValue &BIT(0))
1431*53ee8cc1Swenshuai.xi {
1432*53ee8cc1Swenshuai.xi usCommand |= BIT(0);
1433*53ee8cc1Swenshuai.xi }
1434*53ee8cc1Swenshuai.xi
1435*53ee8cc1Swenshuai.xi return usCommand;
1436*53ee8cc1Swenshuai.xi }
1437*53ee8cc1Swenshuai.xi
1438*53ee8cc1Swenshuai.xi //**************************************************************************
1439*53ee8cc1Swenshuai.xi // [Function Name]:
1440*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusInitialSetting()
1441*53ee8cc1Swenshuai.xi // [Description]
1442*53ee8cc1Swenshuai.xi //
1443*53ee8cc1Swenshuai.xi // [Arguments]:
1444*53ee8cc1Swenshuai.xi //
1445*53ee8cc1Swenshuai.xi // [Return]:
1446*53ee8cc1Swenshuai.xi //
1447*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusInitialSetting(void)1448*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusInitialSetting(void)
1449*53ee8cc1Swenshuai.xi {
1450*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
1451*53ee8cc1Swenshuai.xi
1452*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4C, 0x8880, BMASK(15:4));
1453*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4D, 0x8B14, BMASK(15:1));
1454*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4E, 0x001C, BMASK(15:0));
1455*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_51, 0x0100, BMASK(15:0));
1456*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0200, BMASK(15:0));
1457*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BMASK(14:13), BMASK(14:13)); // [14:13]
1458*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BMASK(14:13), BMASK(14:13));
1459*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_55, 0, BMASK(15:4)); //[7:0]
1460*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4F, 0x00F0, BMASK(15:0)); // [7:4]:reg_ecbss_afe_tx_dri_step
1461*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_78, BIT(0), BIT(0));
1462*53ee8cc1Swenshuai.xi
1463*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_0E, 8, BMASK(4:0));
1464*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_2D, BIT(3), BIT(3));
1465*53ee8cc1Swenshuai.xi
1466*53ee8cc1Swenshuai.xi //auto reset turn on
1467*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_7F, BIT(2), BIT(2)); // [2]:reg_rst_aft_clklck_en
1468*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
1469*53ee8cc1Swenshuai.xi
1470*53ee8cc1Swenshuai.xi // ECbus initial
1471*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_02, BIT(7), BMASK(13:8)| BIT(7)); // [7]
1472*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6D, BIT(5), BMASK(6:5));
1473*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_57, 0x06, BMASK(3:0)); // [11:8]:
1474*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_68, 0x30, BMASK(6:4)); // [6:4]: pre-deglitch
1475*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
1476*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
1477*53ee8cc1Swenshuai.xi
1478*53ee8cc1Swenshuai.xi //U02 ECO item setting
1479*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
1480*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
1481*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_79, (_mhal_mhl_GetEMSCTwoByteCRC(1, 1) << 3)| (_mhal_mhl_GetEMSCTwoByteCRC(1, 2) << 6), BMASK(8:6)| BMASK(5:3)); // [8:6]:EMSC errsum cmd CRC, [5:3]:EMSC errCRC cmd CRC
1482*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_13, BIT(4), BIT(4)); //
1483*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_51, BIT(11), BIT(11)); //
1484*53ee8cc1Swenshuai.xi
1485*53ee8cc1Swenshuai.xi //eCBUS fsm timing
1486*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.
1487*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_06, 0x1C00, BMASK(14:8)); // [14:8]: reg_t_snk_tdm;
1488*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
1489*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_07, 0x104, BMASK(14:8)| BMASK(6:0)); // [14:8]: reg_t_snk_tdm;
1490*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_3F, 0, BMASK(1:0)); //
1491*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_48, 0, BMASK(2:0)); //
1492*53ee8cc1Swenshuai.xi
1493*53ee8cc1Swenshuai.xi //clock detect setting
1494*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_70, 0x032B, BMASK(15:0)); // [15:0]:reg_crlock_mid; the CR lock reference value
1495*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;
1496*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.
1497*53ee8cc1Swenshuai.xi
1498*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1499*53ee8cc1Swenshuai.xi //auto training testing
1500*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,
1501*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
1502*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
1503*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_69, BIT(10), BMASK(11:10)); // [11:10]:reg_txloc_set_time
1504*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
1505*53ee8cc1Swenshuai.xi #else
1506*53ee8cc1Swenshuai.xi // Skip atop training
1507*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
1508*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(8)| 0x33, BIT(8)| BMASK(7:4));
1509*53ee8cc1Swenshuai.xi
1510*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
1511*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BIT(8)| 0x00, BIT(8)| BMASK(7:4));
1512*53ee8cc1Swenshuai.xi
1513*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_6C, 0x8000, BMASK(15:8));
1514*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6D, BIT(8), BIT(8));
1515*53ee8cc1Swenshuai.xi
1516*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6C, 0x0000, BMASK(15:0));
1517*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_04, (30 << 8), BMASK(14:8));
1518*53ee8cc1Swenshuai.xi #endif
1519*53ee8cc1Swenshuai.xi }
1520*53ee8cc1Swenshuai.xi
1521*53ee8cc1Swenshuai.xi //**************************************************************************
1522*53ee8cc1Swenshuai.xi // [Function Name]:
1523*53ee8cc1Swenshuai.xi // _mhal_mhl_SetECbusStateChangeInterrupt()
1524*53ee8cc1Swenshuai.xi // [Description]
1525*53ee8cc1Swenshuai.xi //
1526*53ee8cc1Swenshuai.xi // [Arguments]:
1527*53ee8cc1Swenshuai.xi //
1528*53ee8cc1Swenshuai.xi // [Return]:
1529*53ee8cc1Swenshuai.xi //
1530*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_SetECbusStateChangeInterrupt(MS_BOOL bEnableFlag)1531*53ee8cc1Swenshuai.xi void _mhal_mhl_SetECbusStateChangeInterrupt(MS_BOOL bEnableFlag)
1532*53ee8cc1Swenshuai.xi {
1533*53ee8cc1Swenshuai.xi if(bEnableFlag)
1534*53ee8cc1Swenshuai.xi {
1535*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_36, 0, BIT(0)); // Ecbus state change int mask
1536*53ee8cc1Swenshuai.xi }
1537*53ee8cc1Swenshuai.xi else
1538*53ee8cc1Swenshuai.xi {
1539*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_36, BIT(0), BIT(0)); // Ecbus state change int mask
1540*53ee8cc1Swenshuai.xi }
1541*53ee8cc1Swenshuai.xi
1542*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(0), BIT(0)); // Ecbus state change int clear
1543*53ee8cc1Swenshuai.xi }
1544*53ee8cc1Swenshuai.xi
1545*53ee8cc1Swenshuai.xi //**************************************************************************
1546*53ee8cc1Swenshuai.xi // [Function Name]:
1547*53ee8cc1Swenshuai.xi // _mhal_mhl_SetEMSCReceiveInterrupt()
1548*53ee8cc1Swenshuai.xi // [Description]
1549*53ee8cc1Swenshuai.xi //
1550*53ee8cc1Swenshuai.xi // [Arguments]:
1551*53ee8cc1Swenshuai.xi //
1552*53ee8cc1Swenshuai.xi // [Return]:
1553*53ee8cc1Swenshuai.xi //
1554*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_SetEMSCReceiveInterrupt(MS_BOOL bEnableFlag)1555*53ee8cc1Swenshuai.xi void _mhal_mhl_SetEMSCReceiveInterrupt(MS_BOOL bEnableFlag)
1556*53ee8cc1Swenshuai.xi {
1557*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_36, bEnableFlag? 0: BIT(12), BIT(12)); // eMSC receive int mask
1558*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(12), BIT(12)); // eMSC receive int clear
1559*53ee8cc1Swenshuai.xi }
1560*53ee8cc1Swenshuai.xi
1561*53ee8cc1Swenshuai.xi //**************************************************************************
1562*53ee8cc1Swenshuai.xi // [Function Name]:
1563*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusConnectCheckEnable()
1564*53ee8cc1Swenshuai.xi // [Description]
1565*53ee8cc1Swenshuai.xi //
1566*53ee8cc1Swenshuai.xi // [Arguments]:
1567*53ee8cc1Swenshuai.xi //
1568*53ee8cc1Swenshuai.xi // [Return]:
1569*53ee8cc1Swenshuai.xi //
1570*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusConnectCheckEnable(MS_BOOL bEnableFlag)1571*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusConnectCheckEnable(MS_BOOL bEnableFlag)
1572*53ee8cc1Swenshuai.xi {
1573*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_0B, bEnableFlag? MHL_CBUS_CONNECT_CHECK_VALUE: 0, BMASK(15:0)); // [15:0]: Disable connection check
1574*53ee8cc1Swenshuai.xi }
1575*53ee8cc1Swenshuai.xi
1576*53ee8cc1Swenshuai.xi //**************************************************************************
1577*53ee8cc1Swenshuai.xi // [Function Name]:
1578*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusEnableSetting()
1579*53ee8cc1Swenshuai.xi // [Description]
1580*53ee8cc1Swenshuai.xi //
1581*53ee8cc1Swenshuai.xi // [Arguments]:
1582*53ee8cc1Swenshuai.xi //
1583*53ee8cc1Swenshuai.xi // [Return]:
1584*53ee8cc1Swenshuai.xi //
1585*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusEnableSetting(MS_BOOL bEnableFlag)1586*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusEnableSetting(MS_BOOL bEnableFlag)
1587*53ee8cc1Swenshuai.xi {
1588*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4D, bEnableFlag? 0: BIT(0), BIT(0)); // ECbus PLL pd
1589*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_55, bEnableFlag? 0: BIT(14), BIT(14)); // Rx power down
1590*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_57, bEnableFlag? BIT(3): BIT(2), BMASK(3:2)); //
1591*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_6F, bEnableFlag? BIT(8): 0, BIT(8)); // ECbus clock detect
1592*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, bEnableFlag? 0: BIT(13), BIT(13));
1593*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, bEnableFlag? 0: BIT(13), BIT(13));
1594*53ee8cc1Swenshuai.xi
1595*53ee8cc1Swenshuai.xi if(bEnableFlag)
1596*53ee8cc1Swenshuai.xi {
1597*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(13), BIT(13)); // [13]: ECbus on
1598*53ee8cc1Swenshuai.xi }
1599*53ee8cc1Swenshuai.xi else
1600*53ee8cc1Swenshuai.xi {
1601*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(14), BIT(14)); // [14]: ECbus off
1602*53ee8cc1Swenshuai.xi }
1603*53ee8cc1Swenshuai.xi }
1604*53ee8cc1Swenshuai.xi
1605*53ee8cc1Swenshuai.xi //**************************************************************************
1606*53ee8cc1Swenshuai.xi // [Function Name]:
1607*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusDmuxEnable()
1608*53ee8cc1Swenshuai.xi // [Description]
1609*53ee8cc1Swenshuai.xi //
1610*53ee8cc1Swenshuai.xi // [Arguments]:
1611*53ee8cc1Swenshuai.xi //
1612*53ee8cc1Swenshuai.xi // [Return]:
1613*53ee8cc1Swenshuai.xi //
1614*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusDmuxEnable(MS_BOOL bEnableFlag)1615*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusDmuxEnable(MS_BOOL bEnableFlag)
1616*53ee8cc1Swenshuai.xi {
1617*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4F, bEnableFlag? BIT(3): 0, BIT(3)); // [3]: Enable ECbus dmux
1618*53ee8cc1Swenshuai.xi }
1619*53ee8cc1Swenshuai.xi
1620*53ee8cc1Swenshuai.xi //**************************************************************************
1621*53ee8cc1Swenshuai.xi // [Function Name]:
1622*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusEngineReset()
1623*53ee8cc1Swenshuai.xi // [Description]
1624*53ee8cc1Swenshuai.xi //
1625*53ee8cc1Swenshuai.xi // [Arguments]:
1626*53ee8cc1Swenshuai.xi //
1627*53ee8cc1Swenshuai.xi // [Return]:
1628*53ee8cc1Swenshuai.xi //
1629*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusEngineReset(void)1630*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusEngineReset(void)
1631*53ee8cc1Swenshuai.xi {
1632*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(0), BIT(0));
1633*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(0));
1634*53ee8cc1Swenshuai.xi }
1635*53ee8cc1Swenshuai.xi
1636*53ee8cc1Swenshuai.xi //**************************************************************************
1637*53ee8cc1Swenshuai.xi // [Function Name]:
1638*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusStateReset()
1639*53ee8cc1Swenshuai.xi // [Description]
1640*53ee8cc1Swenshuai.xi //
1641*53ee8cc1Swenshuai.xi // [Arguments]:
1642*53ee8cc1Swenshuai.xi //
1643*53ee8cc1Swenshuai.xi // [Return]:
1644*53ee8cc1Swenshuai.xi //
1645*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusStateReset(void)1646*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusStateReset(void)
1647*53ee8cc1Swenshuai.xi {
1648*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_00, BMASK(1:0), BMASK(1:0)); // ECbus state reset
1649*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_00, 0, BMASK(1:0)); // ECbus state reset
1650*53ee8cc1Swenshuai.xi }
1651*53ee8cc1Swenshuai.xi
1652*53ee8cc1Swenshuai.xi //**************************************************************************
1653*53ee8cc1Swenshuai.xi // [Function Name]:
1654*53ee8cc1Swenshuai.xi // _mhal_mhl_SetShortReadAddress()
1655*53ee8cc1Swenshuai.xi // [Description]
1656*53ee8cc1Swenshuai.xi //
1657*53ee8cc1Swenshuai.xi // [Arguments]:
1658*53ee8cc1Swenshuai.xi //
1659*53ee8cc1Swenshuai.xi // [Return]:
1660*53ee8cc1Swenshuai.xi //
1661*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_SetShortReadAddress(MS_BOOL bECbusEnable)1662*53ee8cc1Swenshuai.xi void _mhal_mhl_SetShortReadAddress(MS_BOOL bECbusEnable)
1663*53ee8cc1Swenshuai.xi {
1664*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_17, bECbusEnable? 0x7000: 0x0800, BMASK(15:8)); // [15:8]: reg_ddc_hdcp_short_read_address
1665*53ee8cc1Swenshuai.xi
1666*53ee8cc1Swenshuai.xi bECbusEnableFlag = bECbusEnable;
1667*53ee8cc1Swenshuai.xi }
1668*53ee8cc1Swenshuai.xi
1669*53ee8cc1Swenshuai.xi //**************************************************************************
1670*53ee8cc1Swenshuai.xi // [Function Name]:
1671*53ee8cc1Swenshuai.xi // _mhal_mhl_Version3PhyEnable()
1672*53ee8cc1Swenshuai.xi // [Description]
1673*53ee8cc1Swenshuai.xi //
1674*53ee8cc1Swenshuai.xi // [Arguments]:
1675*53ee8cc1Swenshuai.xi //
1676*53ee8cc1Swenshuai.xi // [Return]:
1677*53ee8cc1Swenshuai.xi //
1678*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_Version3PhyEnable(MS_U8 ucCbusSelect,MS_BOOL bEnableFlag)1679*53ee8cc1Swenshuai.xi void _mhal_mhl_Version3PhyEnable(MS_U8 ucCbusSelect, MS_BOOL bEnableFlag)
1680*53ee8cc1Swenshuai.xi {
1681*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
1682*53ee8cc1Swenshuai.xi {
1683*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1684*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
1685*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
1686*53ee8cc1Swenshuai.xi {
1687*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1688*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
1689*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1690*53ee8cc1Swenshuai.xi }
1691*53ee8cc1Swenshuai.xi
1692*53ee8cc1Swenshuai.xi break;
1693*53ee8cc1Swenshuai.xi #endif
1694*53ee8cc1Swenshuai.xi
1695*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1696*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
1697*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
1698*53ee8cc1Swenshuai.xi {
1699*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1700*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
1701*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P1_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1702*53ee8cc1Swenshuai.xi }
1703*53ee8cc1Swenshuai.xi
1704*53ee8cc1Swenshuai.xi break;
1705*53ee8cc1Swenshuai.xi #endif
1706*53ee8cc1Swenshuai.xi
1707*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1708*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
1709*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
1710*53ee8cc1Swenshuai.xi {
1711*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1712*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
1713*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P2_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1714*53ee8cc1Swenshuai.xi }
1715*53ee8cc1Swenshuai.xi
1716*53ee8cc1Swenshuai.xi break;
1717*53ee8cc1Swenshuai.xi #endif
1718*53ee8cc1Swenshuai.xi
1719*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1720*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
1721*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
1722*53ee8cc1Swenshuai.xi {
1723*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_60_L, bEnableFlag? BMASK(10:8): 0, BMASK(10:8)); // [8]: MHL3 engine enable
1724*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
1725*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P3_60_L, bEnableFlag? 0: BIT(5), BIT(5));
1726*53ee8cc1Swenshuai.xi }
1727*53ee8cc1Swenshuai.xi
1728*53ee8cc1Swenshuai.xi break;
1729*53ee8cc1Swenshuai.xi #endif
1730*53ee8cc1Swenshuai.xi
1731*53ee8cc1Swenshuai.xi default:
1732*53ee8cc1Swenshuai.xi
1733*53ee8cc1Swenshuai.xi break;
1734*53ee8cc1Swenshuai.xi };
1735*53ee8cc1Swenshuai.xi }
1736*53ee8cc1Swenshuai.xi
1737*53ee8cc1Swenshuai.xi //**************************************************************************
1738*53ee8cc1Swenshuai.xi // [Function Name]:
1739*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusStateChangeProc()
1740*53ee8cc1Swenshuai.xi // [Description]
1741*53ee8cc1Swenshuai.xi //
1742*53ee8cc1Swenshuai.xi // [Arguments]:
1743*53ee8cc1Swenshuai.xi //
1744*53ee8cc1Swenshuai.xi // [Return]:
1745*53ee8cc1Swenshuai.xi //
1746*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusStateChangeProc(void)1747*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusStateChangeProc(void)
1748*53ee8cc1Swenshuai.xi {
1749*53ee8cc1Swenshuai.xi MS_U8 ucECbusState = (R2BYTE(REG_MHL_ECBUS_03) &0xF0) >> 4; // [7:4]: ECbus state
1750*53ee8cc1Swenshuai.xi
1751*53ee8cc1Swenshuai.xi if(ucECbusState != ucECbusTrainState)
1752*53ee8cc1Swenshuai.xi {
1753*53ee8cc1Swenshuai.xi if(ucECbusState == MHL_ECBUS_STATE_WAIT_CLOCK_LOCK)
1754*53ee8cc1Swenshuai.xi {
1755*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_4D, 0, BIT(0)); // [0]: ECbus PLL pd
1756*53ee8cc1Swenshuai.xi }
1757*53ee8cc1Swenshuai.xi else if(ucECbusState == MHL_ECBUS_STATE_WAIT_SEND_CLOCK)
1758*53ee8cc1Swenshuai.xi {
1759*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_PHY_4D) & BIT(15))
1760*53ee8cc1Swenshuai.xi {
1761*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusDmuxEnable(TRUE);
1762*53ee8cc1Swenshuai.xi }
1763*53ee8cc1Swenshuai.xi
1764*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(4), BIT(4)); // [4]
1765*53ee8cc1Swenshuai.xi }
1766*53ee8cc1Swenshuai.xi else if(ucECbusState == MHL_ECBUS_STATE_SOURCE_ACTIVE)
1767*53ee8cc1Swenshuai.xi {
1768*53ee8cc1Swenshuai.xi
1769*53ee8cc1Swenshuai.xi }
1770*53ee8cc1Swenshuai.xi else if(ucECbusState == MHL_ECBUS_STATE_ACTIVE)
1771*53ee8cc1Swenshuai.xi {
1772*53ee8cc1Swenshuai.xi
1773*53ee8cc1Swenshuai.xi }
1774*53ee8cc1Swenshuai.xi else if(ucECbusState == MHL_ECBUS_STATE_FAIL)
1775*53ee8cc1Swenshuai.xi {
1776*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusDmuxEnable(FALSE);
1777*53ee8cc1Swenshuai.xi
1778*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0207, BMASK(15:0)); //
1779*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1780*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(13), BIT(13));//
1781*53ee8cc1Swenshuai.xi #endif
1782*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_4D, BIT(0), BIT(0)); // [0]: ECbus PLL pd
1783*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1784*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BIT(13)| BIT(12), BMASK(14:12)); // delay
1785*53ee8cc1Swenshuai.xi #endif
1786*53ee8cc1Swenshuai.xi
1787*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusStateReset();
1788*53ee8cc1Swenshuai.xi
1789*53ee8cc1Swenshuai.xi ucECbusTrainFailCount++;
1790*53ee8cc1Swenshuai.xi }
1791*53ee8cc1Swenshuai.xi
1792*53ee8cc1Swenshuai.xi ucECbusTrainState = ucECbusState;
1793*53ee8cc1Swenshuai.xi }
1794*53ee8cc1Swenshuai.xi }
1795*53ee8cc1Swenshuai.xi
1796*53ee8cc1Swenshuai.xi //**************************************************************************
1797*53ee8cc1Swenshuai.xi // [Function Name]:
1798*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusModeUpProc()
1799*53ee8cc1Swenshuai.xi // [Description]
1800*53ee8cc1Swenshuai.xi //
1801*53ee8cc1Swenshuai.xi // [Arguments]:
1802*53ee8cc1Swenshuai.xi //
1803*53ee8cc1Swenshuai.xi // [Return]:
1804*53ee8cc1Swenshuai.xi //
1805*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusModeUpProc(void)1806*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusModeUpProc(void)
1807*53ee8cc1Swenshuai.xi {
1808*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(4), BIT(4)); // [4]: clear PLL lock status
1809*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, 0, BIT(4)); // [4]: clear PLL lock status
1810*53ee8cc1Swenshuai.xi
1811*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0207, BMASK(15:0));
1812*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
1813*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(13), BIT(13));
1814*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4B, BMASK(14:12), BMASK(14:12)); // delay
1815*53ee8cc1Swenshuai.xi #endif
1816*53ee8cc1Swenshuai.xi }
1817*53ee8cc1Swenshuai.xi
1818*53ee8cc1Swenshuai.xi //**************************************************************************
1819*53ee8cc1Swenshuai.xi // [Function Name]:
1820*53ee8cc1Swenshuai.xi // _mhal_mhl_ECbusModeDownProc()
1821*53ee8cc1Swenshuai.xi // [Description]
1822*53ee8cc1Swenshuai.xi //
1823*53ee8cc1Swenshuai.xi // [Arguments]:
1824*53ee8cc1Swenshuai.xi //
1825*53ee8cc1Swenshuai.xi // [Return]:
1826*53ee8cc1Swenshuai.xi //
1827*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ECbusModeDownProc(void)1828*53ee8cc1Swenshuai.xi void _mhal_mhl_ECbusModeDownProc(void)
1829*53ee8cc1Swenshuai.xi {
1830*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0207, BMASK(15:0));
1831*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, BIT(13), BIT(13));
1832*53ee8cc1Swenshuai.xi }
1833*53ee8cc1Swenshuai.xi
1834*53ee8cc1Swenshuai.xi //**************************************************************************
1835*53ee8cc1Swenshuai.xi // [Function Name]:
1836*53ee8cc1Swenshuai.xi // _mhal_mhl_MHL3MuxSetting0()
1837*53ee8cc1Swenshuai.xi // [Description]
1838*53ee8cc1Swenshuai.xi //
1839*53ee8cc1Swenshuai.xi // [Arguments]:
1840*53ee8cc1Swenshuai.xi //
1841*53ee8cc1Swenshuai.xi // [Return]:
1842*53ee8cc1Swenshuai.xi //
1843*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHL3MuxSetting0(MS_BOOL bLinkRate6GFlag)1844*53ee8cc1Swenshuai.xi void _mhal_mhl_MHL3MuxSetting0(MS_BOOL bLinkRate6GFlag)
1845*53ee8cc1Swenshuai.xi {
1846*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_HDMI2_DUAL_0_54_L, bLinkRate6GFlag? 0: BIT(1), BMASK(1:0)); // [1:0]: reg_avg_ctrl_case
1847*53ee8cc1Swenshuai.xi }
1848*53ee8cc1Swenshuai.xi
1849*53ee8cc1Swenshuai.xi //**************************************************************************
1850*53ee8cc1Swenshuai.xi // [Function Name]:
1851*53ee8cc1Swenshuai.xi // _mhal_mhl_GetSRAMReceiveEMSCData()
1852*53ee8cc1Swenshuai.xi // [Description]
1853*53ee8cc1Swenshuai.xi //
1854*53ee8cc1Swenshuai.xi // [Arguments]:
1855*53ee8cc1Swenshuai.xi //
1856*53ee8cc1Swenshuai.xi // [Return]:
1857*53ee8cc1Swenshuai.xi //
1858*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetSRAMReceiveEMSCData(void)1859*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_GetSRAMReceiveEMSCData(void)
1860*53ee8cc1Swenshuai.xi {
1861*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_23, BIT(15), BIT(15));
1862*53ee8cc1Swenshuai.xi
1863*53ee8cc1Swenshuai.xi while((R2BYTE(REG_MHL_ECBUS_23) & BIT(14)) == BIT(14));
1864*53ee8cc1Swenshuai.xi
1865*53ee8cc1Swenshuai.xi return (R2BYTE(REG_MHL_ECBUS_22) &BMASK(7:0));
1866*53ee8cc1Swenshuai.xi }
1867*53ee8cc1Swenshuai.xi
1868*53ee8cc1Swenshuai.xi //**************************************************************************
1869*53ee8cc1Swenshuai.xi // [Function Name]:
1870*53ee8cc1Swenshuai.xi // _mhal_mhl_GetSRAMReceiveEMSCData()
1871*53ee8cc1Swenshuai.xi // [Description]
1872*53ee8cc1Swenshuai.xi //
1873*53ee8cc1Swenshuai.xi // [Arguments]:
1874*53ee8cc1Swenshuai.xi //
1875*53ee8cc1Swenshuai.xi // [Return]:
1876*53ee8cc1Swenshuai.xi //
1877*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_InsertSRAMSendEMSCData(MS_U8 ucSendEMSC)1878*53ee8cc1Swenshuai.xi void _mhal_mhl_InsertSRAMSendEMSCData(MS_U8 ucSendEMSC)
1879*53ee8cc1Swenshuai.xi {
1880*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_20, ucSendEMSC, BMASK(7:0));
1881*53ee8cc1Swenshuai.xi
1882*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_21, BIT(15), BIT(15));
1883*53ee8cc1Swenshuai.xi
1884*53ee8cc1Swenshuai.xi while((R2BYTE(REG_MHL_ECBUS_21) & BIT(14)) == BIT(14));
1885*53ee8cc1Swenshuai.xi }
1886*53ee8cc1Swenshuai.xi
1887*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_COMMAND_PARSING)
1888*53ee8cc1Swenshuai.xi //**************************************************************************
1889*53ee8cc1Swenshuai.xi // [Function Name]:
1890*53ee8cc1Swenshuai.xi // _mhal_mhl_ParsingECbusCommand()
1891*53ee8cc1Swenshuai.xi // [Description]
1892*53ee8cc1Swenshuai.xi //
1893*53ee8cc1Swenshuai.xi // [Arguments]:
1894*53ee8cc1Swenshuai.xi //
1895*53ee8cc1Swenshuai.xi // [Return]:
1896*53ee8cc1Swenshuai.xi //
1897*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ParsingECbusCommand(MS_U16 * usECbusData)1898*53ee8cc1Swenshuai.xi void _mhal_mhl_ParsingECbusCommand(MS_U16 *usECbusData)
1899*53ee8cc1Swenshuai.xi {
1900*53ee8cc1Swenshuai.xi MS_U8 ucTimes = 0;
1901*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
1902*53ee8cc1Swenshuai.xi MS_U16 usCounnter = 0;
1903*53ee8cc1Swenshuai.xi MS_U16 usValue = 0;
1904*53ee8cc1Swenshuai.xi
1905*53ee8cc1Swenshuai.xi for(ustemp = 0; ustemp < MHL_BUFFER_ECBUS_DATA_LENGTH; ustemp++)
1906*53ee8cc1Swenshuai.xi {
1907*53ee8cc1Swenshuai.xi if((usECbusData[ustemp] &BMASK(7:0)) == 0x39) // Find CBUS1_START
1908*53ee8cc1Swenshuai.xi {
1909*53ee8cc1Swenshuai.xi ucTimes = 0;
1910*53ee8cc1Swenshuai.xi
1911*53ee8cc1Swenshuai.xi if(usECbusData[ustemp] &BIT(15)) // Send case
1912*53ee8cc1Swenshuai.xi {
1913*53ee8cc1Swenshuai.xi for(usCounnter = ustemp +1; usCounnter < MHL_BUFFER_ECBUS_DATA_LENGTH; usCounnter++)
1914*53ee8cc1Swenshuai.xi {
1915*53ee8cc1Swenshuai.xi if(usECbusData[usCounnter] &BIT(15))
1916*53ee8cc1Swenshuai.xi {
1917*53ee8cc1Swenshuai.xi usValue = usValue << 8;
1918*53ee8cc1Swenshuai.xi usValue = usValue |(usECbusData[usCounnter] &BMASK(7:0));
1919*53ee8cc1Swenshuai.xi
1920*53ee8cc1Swenshuai.xi ucTimes++;
1921*53ee8cc1Swenshuai.xi }
1922*53ee8cc1Swenshuai.xi
1923*53ee8cc1Swenshuai.xi if(ucTimes == 2)
1924*53ee8cc1Swenshuai.xi {
1925*53ee8cc1Swenshuai.xi usValue = usValue >> 5;
1926*53ee8cc1Swenshuai.xi ucTimes = usValue >> 8;
1927*53ee8cc1Swenshuai.xi
1928*53ee8cc1Swenshuai.xi if(ucTimes == 5)
1929*53ee8cc1Swenshuai.xi {
1930*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SK][MSC][C] = %x\r\n", (usValue &BMASK(7:0))));
1931*53ee8cc1Swenshuai.xi }
1932*53ee8cc1Swenshuai.xi else if(ucTimes == 4)
1933*53ee8cc1Swenshuai.xi {
1934*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SK][MSC][D] = %x\r\n", (usValue &BMASK(7:0))));
1935*53ee8cc1Swenshuai.xi }
1936*53ee8cc1Swenshuai.xi else if(ucTimes == 1)
1937*53ee8cc1Swenshuai.xi {
1938*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SK][DDC][C] = %x\r\n", (usValue &BMASK(7:0))));
1939*53ee8cc1Swenshuai.xi }
1940*53ee8cc1Swenshuai.xi else if(ucTimes == 0)
1941*53ee8cc1Swenshuai.xi {
1942*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SK][DDC][D] = %x\r\n", (usValue &BMASK(7:0))));
1943*53ee8cc1Swenshuai.xi }
1944*53ee8cc1Swenshuai.xi else
1945*53ee8cc1Swenshuai.xi {
1946*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SK] unknow = %x\r\n", (usValue &BMASK(7:0))));
1947*53ee8cc1Swenshuai.xi }
1948*53ee8cc1Swenshuai.xi
1949*53ee8cc1Swenshuai.xi break;
1950*53ee8cc1Swenshuai.xi }
1951*53ee8cc1Swenshuai.xi }
1952*53ee8cc1Swenshuai.xi }
1953*53ee8cc1Swenshuai.xi else // Receive case
1954*53ee8cc1Swenshuai.xi {
1955*53ee8cc1Swenshuai.xi for(usCounnter = ustemp +1; usCounnter < MHL_BUFFER_ECBUS_DATA_LENGTH; usCounnter++)
1956*53ee8cc1Swenshuai.xi {
1957*53ee8cc1Swenshuai.xi if((usECbusData[usCounnter] &BIT(15)) == 0)
1958*53ee8cc1Swenshuai.xi {
1959*53ee8cc1Swenshuai.xi usValue = usValue << 8;
1960*53ee8cc1Swenshuai.xi usValue = usValue |(usECbusData[usCounnter] &BMASK(7:0));
1961*53ee8cc1Swenshuai.xi
1962*53ee8cc1Swenshuai.xi ucTimes++;
1963*53ee8cc1Swenshuai.xi }
1964*53ee8cc1Swenshuai.xi
1965*53ee8cc1Swenshuai.xi if(ucTimes == 2)
1966*53ee8cc1Swenshuai.xi {
1967*53ee8cc1Swenshuai.xi usValue = usValue >> 5;
1968*53ee8cc1Swenshuai.xi ucTimes = usValue >> 8;
1969*53ee8cc1Swenshuai.xi
1970*53ee8cc1Swenshuai.xi if(ucTimes == 5)
1971*53ee8cc1Swenshuai.xi {
1972*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SO][MSC][C] = %x\r\n", (usValue &BMASK(7:0))));
1973*53ee8cc1Swenshuai.xi }
1974*53ee8cc1Swenshuai.xi else if(ucTimes == 4)
1975*53ee8cc1Swenshuai.xi {
1976*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SO][MSC][D] = %x\r\n", (usValue &BMASK(7:0))));
1977*53ee8cc1Swenshuai.xi }
1978*53ee8cc1Swenshuai.xi else if(ucTimes == 1)
1979*53ee8cc1Swenshuai.xi {
1980*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SO][DDC][C] = %x\r\n", (usValue &BMASK(7:0))));
1981*53ee8cc1Swenshuai.xi }
1982*53ee8cc1Swenshuai.xi else if(ucTimes == 0)
1983*53ee8cc1Swenshuai.xi {
1984*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SO][DDC][D] = %x\r\n", (usValue &BMASK(7:0))));
1985*53ee8cc1Swenshuai.xi }
1986*53ee8cc1Swenshuai.xi else
1987*53ee8cc1Swenshuai.xi {
1988*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL [SO] unknow = %x\r\n", (usValue &BMASK(7:0))));
1989*53ee8cc1Swenshuai.xi }
1990*53ee8cc1Swenshuai.xi
1991*53ee8cc1Swenshuai.xi break;
1992*53ee8cc1Swenshuai.xi }
1993*53ee8cc1Swenshuai.xi }
1994*53ee8cc1Swenshuai.xi }
1995*53ee8cc1Swenshuai.xi }
1996*53ee8cc1Swenshuai.xi }
1997*53ee8cc1Swenshuai.xi }
1998*53ee8cc1Swenshuai.xi
1999*53ee8cc1Swenshuai.xi //**************************************************************************
2000*53ee8cc1Swenshuai.xi // [Function Name]:
2001*53ee8cc1Swenshuai.xi // _mhal_mhl_GetECbusCommand()
2002*53ee8cc1Swenshuai.xi // [Description]
2003*53ee8cc1Swenshuai.xi //
2004*53ee8cc1Swenshuai.xi // [Arguments]:
2005*53ee8cc1Swenshuai.xi //
2006*53ee8cc1Swenshuai.xi // [Return]:
2007*53ee8cc1Swenshuai.xi //
2008*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_GetECbusCommand(void)2009*53ee8cc1Swenshuai.xi void _mhal_mhl_GetECbusCommand(void)
2010*53ee8cc1Swenshuai.xi {
2011*53ee8cc1Swenshuai.xi MS_BOOL bReDoFlag = TRUE;
2012*53ee8cc1Swenshuai.xi MS_U8 ucReceiveData = 0;
2013*53ee8cc1Swenshuai.xi MS_U8 ucPreReceiveData = 0;
2014*53ee8cc1Swenshuai.xi MS_U8 ucSendData = 0;
2015*53ee8cc1Swenshuai.xi MS_U8 ucPreSendData = 0;
2016*53ee8cc1Swenshuai.xi MS_U16 usECbusCData[MHL_BUFFER_ECBUS_DATA_LENGTH] = {0};
2017*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
2018*53ee8cc1Swenshuai.xi MS_U16 usCounnter = 0;
2019*53ee8cc1Swenshuai.xi static MS_U32 ulTimeout = 0;
2020*53ee8cc1Swenshuai.xi
2021*53ee8cc1Swenshuai.xi if(ulTimeout < 40000000)
2022*53ee8cc1Swenshuai.xi {
2023*53ee8cc1Swenshuai.xi do
2024*53ee8cc1Swenshuai.xi {
2025*53ee8cc1Swenshuai.xi ucReceiveData = (R2BYTE(REG_MHL_ECBUS_7C) &BMASK(7:0));
2026*53ee8cc1Swenshuai.xi ucSendData = (R2BYTE(REG_MHL_ECBUS_7C) >>8);
2027*53ee8cc1Swenshuai.xi
2028*53ee8cc1Swenshuai.xi if((ucReceiveData != 0x5A) && (ucPreReceiveData != ucReceiveData))
2029*53ee8cc1Swenshuai.xi {
2030*53ee8cc1Swenshuai.xi usECbusCData[ustemp] = ucReceiveData;
2031*53ee8cc1Swenshuai.xi ustemp++;
2032*53ee8cc1Swenshuai.xi
2033*53ee8cc1Swenshuai.xi //msg_mhl(printf(" MHL receive data = %x, %d\r\n", ucReceiveData, ustemp));
2034*53ee8cc1Swenshuai.xi
2035*53ee8cc1Swenshuai.xi ucPreReceiveData = ucReceiveData;
2036*53ee8cc1Swenshuai.xi bReDoFlag = TRUE;
2037*53ee8cc1Swenshuai.xi usCounnter = 0;
2038*53ee8cc1Swenshuai.xi }
2039*53ee8cc1Swenshuai.xi
2040*53ee8cc1Swenshuai.xi if((ucSendData != 0x5A)&& (ucPreSendData != ucSendData))
2041*53ee8cc1Swenshuai.xi {
2042*53ee8cc1Swenshuai.xi usECbusCData[ustemp] = ucSendData |BIT(15);
2043*53ee8cc1Swenshuai.xi ustemp++;
2044*53ee8cc1Swenshuai.xi
2045*53ee8cc1Swenshuai.xi //msg_mhl(printf(" MHL send data = %x, %d\r\n", ucSendData, ustemp));
2046*53ee8cc1Swenshuai.xi
2047*53ee8cc1Swenshuai.xi ucPreSendData = ucSendData;
2048*53ee8cc1Swenshuai.xi bReDoFlag = TRUE;
2049*53ee8cc1Swenshuai.xi usCounnter = 0;
2050*53ee8cc1Swenshuai.xi }
2051*53ee8cc1Swenshuai.xi
2052*53ee8cc1Swenshuai.xi if(ustemp == MHL_BUFFER_ECBUS_DATA_LENGTH)
2053*53ee8cc1Swenshuai.xi {
2054*53ee8cc1Swenshuai.xi bReDoFlag = FALSE;
2055*53ee8cc1Swenshuai.xi
2056*53ee8cc1Swenshuai.xi for(usCounnter = 0; usCounnter < MHL_BUFFER_ECBUS_DATA_LENGTH; usCounnter++)
2057*53ee8cc1Swenshuai.xi {
2058*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL DDC data = %x\r\n", usECbusCData[usCounnter]));
2059*53ee8cc1Swenshuai.xi }
2060*53ee8cc1Swenshuai.xi
2061*53ee8cc1Swenshuai.xi ustemp = 0;
2062*53ee8cc1Swenshuai.xi
2063*53ee8cc1Swenshuai.xi _mhal_mhl_ParsingECbusCommand(usECbusCData);
2064*53ee8cc1Swenshuai.xi }
2065*53ee8cc1Swenshuai.xi
2066*53ee8cc1Swenshuai.xi if(ulTimeout < 40000000)
2067*53ee8cc1Swenshuai.xi {
2068*53ee8cc1Swenshuai.xi ulTimeout++;
2069*53ee8cc1Swenshuai.xi }
2070*53ee8cc1Swenshuai.xi else
2071*53ee8cc1Swenshuai.xi {
2072*53ee8cc1Swenshuai.xi for(usCounnter = 0; usCounnter < ustemp; usCounnter++)
2073*53ee8cc1Swenshuai.xi {
2074*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL DDC data = %x\r\n", usECbusCData[usCounnter]));
2075*53ee8cc1Swenshuai.xi }
2076*53ee8cc1Swenshuai.xi
2077*53ee8cc1Swenshuai.xi bReDoFlag = FALSE;
2078*53ee8cc1Swenshuai.xi ustemp = 0;
2079*53ee8cc1Swenshuai.xi
2080*53ee8cc1Swenshuai.xi _mhal_mhl_ParsingECbusCommand(usECbusCData);
2081*53ee8cc1Swenshuai.xi }
2082*53ee8cc1Swenshuai.xi }while(bReDoFlag);
2083*53ee8cc1Swenshuai.xi }
2084*53ee8cc1Swenshuai.xi }
2085*53ee8cc1Swenshuai.xi
2086*53ee8cc1Swenshuai.xi #endif
2087*53ee8cc1Swenshuai.xi
2088*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2089*53ee8cc1Swenshuai.xi // Global Functions
2090*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2091*53ee8cc1Swenshuai.xi
2092*53ee8cc1Swenshuai.xi //**************************************************************************
2093*53ee8cc1Swenshuai.xi // [Function Name]:
2094*53ee8cc1Swenshuai.xi // mhal_mhl_GetCbusSelect()
2095*53ee8cc1Swenshuai.xi // [Description]
2096*53ee8cc1Swenshuai.xi //
2097*53ee8cc1Swenshuai.xi // [Arguments]:
2098*53ee8cc1Swenshuai.xi //
2099*53ee8cc1Swenshuai.xi // [Return]:
2100*53ee8cc1Swenshuai.xi //
2101*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetCbusSelect(MS_U8 ucPort)2102*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetCbusSelect(MS_U8 ucPort)
2103*53ee8cc1Swenshuai.xi {
2104*53ee8cc1Swenshuai.xi MS_U8 uctemp = MHL_CBUS_SELECT_MASK;
2105*53ee8cc1Swenshuai.xi
2106*53ee8cc1Swenshuai.xi switch(ucPort)
2107*53ee8cc1Swenshuai.xi {
2108*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_A:
2109*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTA;
2110*53ee8cc1Swenshuai.xi break;
2111*53ee8cc1Swenshuai.xi
2112*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_B:
2113*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTB;
2114*53ee8cc1Swenshuai.xi break;
2115*53ee8cc1Swenshuai.xi
2116*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_C:
2117*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTC;
2118*53ee8cc1Swenshuai.xi break;
2119*53ee8cc1Swenshuai.xi
2120*53ee8cc1Swenshuai.xi case MHL_DVI_PORT_D:
2121*53ee8cc1Swenshuai.xi uctemp = MHL_CBUS_SELECT_PORTD;
2122*53ee8cc1Swenshuai.xi break;
2123*53ee8cc1Swenshuai.xi
2124*53ee8cc1Swenshuai.xi default:
2125*53ee8cc1Swenshuai.xi
2126*53ee8cc1Swenshuai.xi break;
2127*53ee8cc1Swenshuai.xi };
2128*53ee8cc1Swenshuai.xi
2129*53ee8cc1Swenshuai.xi return uctemp;
2130*53ee8cc1Swenshuai.xi }
2131*53ee8cc1Swenshuai.xi
2132*53ee8cc1Swenshuai.xi //**************************************************************************
2133*53ee8cc1Swenshuai.xi // [Function Name]:
2134*53ee8cc1Swenshuai.xi // mhal_mhl_GetInputPort()
2135*53ee8cc1Swenshuai.xi // [Description]
2136*53ee8cc1Swenshuai.xi // MHL get current input port
2137*53ee8cc1Swenshuai.xi // [Arguments]:
2138*53ee8cc1Swenshuai.xi //
2139*53ee8cc1Swenshuai.xi // [Return]:
2140*53ee8cc1Swenshuai.xi //
2141*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetInputPort(void)2142*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetInputPort(void)
2143*53ee8cc1Swenshuai.xi {
2144*53ee8cc1Swenshuai.xi return (R2BYTE(REG_HDMI2_DUAL_0_50_L) &BMASK(1:0));
2145*53ee8cc1Swenshuai.xi }
2146*53ee8cc1Swenshuai.xi
2147*53ee8cc1Swenshuai.xi //**************************************************************************
2148*53ee8cc1Swenshuai.xi // [Function Name]:
2149*53ee8cc1Swenshuai.xi // mhal_mhl_CheckInputPort()
2150*53ee8cc1Swenshuai.xi // [Description]
2151*53ee8cc1Swenshuai.xi // MHL check current input port
2152*53ee8cc1Swenshuai.xi // [Arguments]:
2153*53ee8cc1Swenshuai.xi //
2154*53ee8cc1Swenshuai.xi // [Return]:
2155*53ee8cc1Swenshuai.xi //
2156*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckInputPort(MS_U8 ucCbusSelect)2157*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckInputPort(MS_U8 ucCbusSelect)
2158*53ee8cc1Swenshuai.xi {
2159*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
2160*53ee8cc1Swenshuai.xi
2161*53ee8cc1Swenshuai.xi if(mhal_mhl_GetCbusSelect(mhal_mhl_GetInputPort()) == ucCbusSelect)
2162*53ee8cc1Swenshuai.xi {
2163*53ee8cc1Swenshuai.xi bindex = TRUE;
2164*53ee8cc1Swenshuai.xi }
2165*53ee8cc1Swenshuai.xi
2166*53ee8cc1Swenshuai.xi return bindex;
2167*53ee8cc1Swenshuai.xi }
2168*53ee8cc1Swenshuai.xi
2169*53ee8cc1Swenshuai.xi //**************************************************************************
2170*53ee8cc1Swenshuai.xi // [Function Name]:
2171*53ee8cc1Swenshuai.xi // mhal_mhl_CheckPIPWindow()
2172*53ee8cc1Swenshuai.xi // [Description]
2173*53ee8cc1Swenshuai.xi //
2174*53ee8cc1Swenshuai.xi // [Arguments]:
2175*53ee8cc1Swenshuai.xi //
2176*53ee8cc1Swenshuai.xi // [Return]:
2177*53ee8cc1Swenshuai.xi //
2178*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckPIPWindow(void)2179*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckPIPWindow(void)
2180*53ee8cc1Swenshuai.xi {
2181*53ee8cc1Swenshuai.xi MS_BOOL bFlag = FALSE;
2182*53ee8cc1Swenshuai.xi MS_U8 ucScalerMainMux = R2BYTE(0x102E02) &BMASK(7:0);
2183*53ee8cc1Swenshuai.xi MS_U8 ucScalerSubMux = ucScalerMainMux &BMASK(3:0);
2184*53ee8cc1Swenshuai.xi
2185*53ee8cc1Swenshuai.xi ucScalerMainMux = (ucScalerMainMux &BMASK(7:4)) >> 4;
2186*53ee8cc1Swenshuai.xi
2187*53ee8cc1Swenshuai.xi if((ucScalerMainMux == MHL_SCALER_MUX_SELECT_DVI) || (ucScalerSubMux == MHL_SCALER_MUX_SELECT_DVI))
2188*53ee8cc1Swenshuai.xi {
2189*53ee8cc1Swenshuai.xi bFlag = TRUE;
2190*53ee8cc1Swenshuai.xi }
2191*53ee8cc1Swenshuai.xi
2192*53ee8cc1Swenshuai.xi return bFlag;
2193*53ee8cc1Swenshuai.xi }
2194*53ee8cc1Swenshuai.xi
2195*53ee8cc1Swenshuai.xi //**************************************************************************
2196*53ee8cc1Swenshuai.xi // [Function Name]:
2197*53ee8cc1Swenshuai.xi // mhal_mhl_MHLSupportPath()
2198*53ee8cc1Swenshuai.xi // [Description]
2199*53ee8cc1Swenshuai.xi // MHL support path
2200*53ee8cc1Swenshuai.xi // [Arguments]:
2201*53ee8cc1Swenshuai.xi //
2202*53ee8cc1Swenshuai.xi // [Return]:
2203*53ee8cc1Swenshuai.xi //
2204*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_MHLSupportPath(MS_U8 ucSelect)2205*53ee8cc1Swenshuai.xi void mhal_mhl_MHLSupportPath(MS_U8 ucSelect)
2206*53ee8cc1Swenshuai.xi {
2207*53ee8cc1Swenshuai.xi ucMHLSupportPort = ucSelect;
2208*53ee8cc1Swenshuai.xi }
2209*53ee8cc1Swenshuai.xi
2210*53ee8cc1Swenshuai.xi //**************************************************************************
2211*53ee8cc1Swenshuai.xi // [Function Name]:
2212*53ee8cc1Swenshuai.xi // mhal_mhl_CheckEfuseControlFlag()
2213*53ee8cc1Swenshuai.xi // [Description]
2214*53ee8cc1Swenshuai.xi //
2215*53ee8cc1Swenshuai.xi // [Arguments]:
2216*53ee8cc1Swenshuai.xi //
2217*53ee8cc1Swenshuai.xi // [Return]:
2218*53ee8cc1Swenshuai.xi //
2219*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckEfuseControlFlag(MS_BOOL bEfuseFlag)2220*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckEfuseControlFlag(MS_BOOL bEfuseFlag)
2221*53ee8cc1Swenshuai.xi {
2222*53ee8cc1Swenshuai.xi MS_BOOL bFlag = FALSE;
2223*53ee8cc1Swenshuai.xi
2224*53ee8cc1Swenshuai.xi #if(MHL_EFUSE_FUNCTION_CONTROL)
2225*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
2226*53ee8cc1Swenshuai.xi
2227*53ee8cc1Swenshuai.xi if(!bEfuseFlag)
2228*53ee8cc1Swenshuai.xi {
2229*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
2230*53ee8cc1Swenshuai.xi {
2231*53ee8cc1Swenshuai.xi mhal_mhl_CbusIsolate(uctemp, TRUE);
2232*53ee8cc1Swenshuai.xi }
2233*53ee8cc1Swenshuai.xi
2234*53ee8cc1Swenshuai.xi bFlag = TRUE;
2235*53ee8cc1Swenshuai.xi }
2236*53ee8cc1Swenshuai.xi
2237*53ee8cc1Swenshuai.xi #endif
2238*53ee8cc1Swenshuai.xi
2239*53ee8cc1Swenshuai.xi return bFlag;
2240*53ee8cc1Swenshuai.xi }
2241*53ee8cc1Swenshuai.xi
2242*53ee8cc1Swenshuai.xi //**************************************************************************
2243*53ee8cc1Swenshuai.xi // [Function Name]:
2244*53ee8cc1Swenshuai.xi // mhal_mhl_InsertChipIDforCheck()
2245*53ee8cc1Swenshuai.xi // [Description]
2246*53ee8cc1Swenshuai.xi //
2247*53ee8cc1Swenshuai.xi // [Arguments]:
2248*53ee8cc1Swenshuai.xi //
2249*53ee8cc1Swenshuai.xi // [Return]:
2250*53ee8cc1Swenshuai.xi //
2251*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InsertChipIDforCheck(MS_U8 ucChipID)2252*53ee8cc1Swenshuai.xi void mhal_mhl_InsertChipIDforCheck(MS_U8 ucChipID)
2253*53ee8cc1Swenshuai.xi {
2254*53ee8cc1Swenshuai.xi ucChipIDValue = ucChipID;
2255*53ee8cc1Swenshuai.xi
2256*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL Cbus index value %x\r\n", ucChipID));
2257*53ee8cc1Swenshuai.xi }
2258*53ee8cc1Swenshuai.xi
2259*53ee8cc1Swenshuai.xi //**************************************************************************
2260*53ee8cc1Swenshuai.xi // [Function Name]:
2261*53ee8cc1Swenshuai.xi // mhal_mhl_CbusSelectSetMux()
2262*53ee8cc1Swenshuai.xi // [Description]
2263*53ee8cc1Swenshuai.xi //
2264*53ee8cc1Swenshuai.xi // [Arguments]:
2265*53ee8cc1Swenshuai.xi //
2266*53ee8cc1Swenshuai.xi // [Return]:
2267*53ee8cc1Swenshuai.xi //
2268*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusSelectSetMux(MS_U8 ucCbusSelect)2269*53ee8cc1Swenshuai.xi void mhal_mhl_CbusSelectSetMux(MS_U8 ucCbusSelect)
2270*53ee8cc1Swenshuai.xi {
2271*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2272*53ee8cc1Swenshuai.xi {
2273*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2274*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2275*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
2276*53ee8cc1Swenshuai.xi {
2277*53ee8cc1Swenshuai.xi
2278*53ee8cc1Swenshuai.xi }
2279*53ee8cc1Swenshuai.xi
2280*53ee8cc1Swenshuai.xi break;
2281*53ee8cc1Swenshuai.xi #endif
2282*53ee8cc1Swenshuai.xi
2283*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2284*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2285*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
2286*53ee8cc1Swenshuai.xi {
2287*53ee8cc1Swenshuai.xi
2288*53ee8cc1Swenshuai.xi }
2289*53ee8cc1Swenshuai.xi
2290*53ee8cc1Swenshuai.xi break;
2291*53ee8cc1Swenshuai.xi #endif
2292*53ee8cc1Swenshuai.xi
2293*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2294*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2295*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
2296*53ee8cc1Swenshuai.xi {
2297*53ee8cc1Swenshuai.xi
2298*53ee8cc1Swenshuai.xi }
2299*53ee8cc1Swenshuai.xi
2300*53ee8cc1Swenshuai.xi break;
2301*53ee8cc1Swenshuai.xi #endif
2302*53ee8cc1Swenshuai.xi
2303*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2304*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2305*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
2306*53ee8cc1Swenshuai.xi {
2307*53ee8cc1Swenshuai.xi
2308*53ee8cc1Swenshuai.xi }
2309*53ee8cc1Swenshuai.xi
2310*53ee8cc1Swenshuai.xi break;
2311*53ee8cc1Swenshuai.xi #endif
2312*53ee8cc1Swenshuai.xi
2313*53ee8cc1Swenshuai.xi default:
2314*53ee8cc1Swenshuai.xi
2315*53ee8cc1Swenshuai.xi break;
2316*53ee8cc1Swenshuai.xi };
2317*53ee8cc1Swenshuai.xi }
2318*53ee8cc1Swenshuai.xi
2319*53ee8cc1Swenshuai.xi //**************************************************************************
2320*53ee8cc1Swenshuai.xi // [Function Name]:
2321*53ee8cc1Swenshuai.xi // mhal_mhl_CableDetect()
2322*53ee8cc1Swenshuai.xi // [Description]
2323*53ee8cc1Swenshuai.xi // MHL cable detection
2324*53ee8cc1Swenshuai.xi // [Arguments]:
2325*53ee8cc1Swenshuai.xi //
2326*53ee8cc1Swenshuai.xi // [Return]:
2327*53ee8cc1Swenshuai.xi // TRUE: MHL cable plugged
2328*53ee8cc1Swenshuai.xi // FALSE: MHL cable unplugged
2329*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableDetect(MS_U8 ucCbusSelect)2330*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CableDetect(MS_U8 ucCbusSelect)
2331*53ee8cc1Swenshuai.xi {
2332*53ee8cc1Swenshuai.xi MS_BOOL bFlag = FALSE;
2333*53ee8cc1Swenshuai.xi
2334*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2335*53ee8cc1Swenshuai.xi {
2336*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2337*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2338*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
2339*53ee8cc1Swenshuai.xi {
2340*53ee8cc1Swenshuai.xi bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
2341*53ee8cc1Swenshuai.xi }
2342*53ee8cc1Swenshuai.xi
2343*53ee8cc1Swenshuai.xi break;
2344*53ee8cc1Swenshuai.xi #endif
2345*53ee8cc1Swenshuai.xi
2346*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2347*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2348*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
2349*53ee8cc1Swenshuai.xi {
2350*53ee8cc1Swenshuai.xi
2351*53ee8cc1Swenshuai.xi }
2352*53ee8cc1Swenshuai.xi
2353*53ee8cc1Swenshuai.xi break;
2354*53ee8cc1Swenshuai.xi #endif
2355*53ee8cc1Swenshuai.xi
2356*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2357*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2358*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
2359*53ee8cc1Swenshuai.xi {
2360*53ee8cc1Swenshuai.xi bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
2361*53ee8cc1Swenshuai.xi }
2362*53ee8cc1Swenshuai.xi
2363*53ee8cc1Swenshuai.xi break;
2364*53ee8cc1Swenshuai.xi #endif
2365*53ee8cc1Swenshuai.xi
2366*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2367*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2368*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
2369*53ee8cc1Swenshuai.xi {
2370*53ee8cc1Swenshuai.xi bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
2371*53ee8cc1Swenshuai.xi }
2372*53ee8cc1Swenshuai.xi
2373*53ee8cc1Swenshuai.xi break;
2374*53ee8cc1Swenshuai.xi #endif
2375*53ee8cc1Swenshuai.xi
2376*53ee8cc1Swenshuai.xi default:
2377*53ee8cc1Swenshuai.xi
2378*53ee8cc1Swenshuai.xi break;
2379*53ee8cc1Swenshuai.xi };
2380*53ee8cc1Swenshuai.xi
2381*53ee8cc1Swenshuai.xi return bFlag;
2382*53ee8cc1Swenshuai.xi }
2383*53ee8cc1Swenshuai.xi
2384*53ee8cc1Swenshuai.xi //**************************************************************************
2385*53ee8cc1Swenshuai.xi // [Function Name]:
2386*53ee8cc1Swenshuai.xi // mhal_mhl_Accumulator_Clr()
2387*53ee8cc1Swenshuai.xi // [Description]
2388*53ee8cc1Swenshuai.xi // to clear accumulator when input is not MHL
2389*53ee8cc1Swenshuai.xi // [Arguments]:
2390*53ee8cc1Swenshuai.xi //
2391*53ee8cc1Swenshuai.xi // [Return]:
2392*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_Accumulator_Clr(MS_U8 ucCbusSelect)2393*53ee8cc1Swenshuai.xi void mhal_mhl_Accumulator_Clr(MS_U8 ucCbusSelect)
2394*53ee8cc1Swenshuai.xi {
2395*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2396*53ee8cc1Swenshuai.xi {
2397*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2398*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2399*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
2400*53ee8cc1Swenshuai.xi {
2401*53ee8cc1Swenshuai.xi
2402*53ee8cc1Swenshuai.xi }
2403*53ee8cc1Swenshuai.xi
2404*53ee8cc1Swenshuai.xi break;
2405*53ee8cc1Swenshuai.xi #endif
2406*53ee8cc1Swenshuai.xi
2407*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2408*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2409*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
2410*53ee8cc1Swenshuai.xi {
2411*53ee8cc1Swenshuai.xi
2412*53ee8cc1Swenshuai.xi }
2413*53ee8cc1Swenshuai.xi
2414*53ee8cc1Swenshuai.xi break;
2415*53ee8cc1Swenshuai.xi #endif
2416*53ee8cc1Swenshuai.xi
2417*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2418*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2419*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
2420*53ee8cc1Swenshuai.xi {
2421*53ee8cc1Swenshuai.xi
2422*53ee8cc1Swenshuai.xi }
2423*53ee8cc1Swenshuai.xi
2424*53ee8cc1Swenshuai.xi break;
2425*53ee8cc1Swenshuai.xi #endif
2426*53ee8cc1Swenshuai.xi
2427*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2428*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2429*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
2430*53ee8cc1Swenshuai.xi {
2431*53ee8cc1Swenshuai.xi
2432*53ee8cc1Swenshuai.xi }
2433*53ee8cc1Swenshuai.xi
2434*53ee8cc1Swenshuai.xi break;
2435*53ee8cc1Swenshuai.xi #endif
2436*53ee8cc1Swenshuai.xi
2437*53ee8cc1Swenshuai.xi default:
2438*53ee8cc1Swenshuai.xi
2439*53ee8cc1Swenshuai.xi break;
2440*53ee8cc1Swenshuai.xi };
2441*53ee8cc1Swenshuai.xi }
2442*53ee8cc1Swenshuai.xi
2443*53ee8cc1Swenshuai.xi //**************************************************************************
2444*53ee8cc1Swenshuai.xi // [Function Name]:
2445*53ee8cc1Swenshuai.xi // mhal_mhl_CDRModeMonitor()
2446*53ee8cc1Swenshuai.xi // [Description]:
2447*53ee8cc1Swenshuai.xi // MHL CDR mode monitor
2448*53ee8cc1Swenshuai.xi // [Arguments]:
2449*53ee8cc1Swenshuai.xi // isCbusConnected: Cbus is at connected state or not
2450*53ee8cc1Swenshuai.xi // [Return]:
2451*53ee8cc1Swenshuai.xi //
2452*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CDRModeMonitor(MS_U8 ucCbusSelect,MS_BOOL bPathEnable)2453*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CDRModeMonitor(MS_U8 ucCbusSelect, MS_BOOL bPathEnable)
2454*53ee8cc1Swenshuai.xi {
2455*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
2456*53ee8cc1Swenshuai.xi static MS_U8 ucStableCount = 0;
2457*53ee8cc1Swenshuai.xi static MS_BOOL bPLLPower[MHL_CBUS_SELECT_MASK] = {TRUE, TRUE, TRUE, TRUE};
2458*53ee8cc1Swenshuai.xi
2459*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2460*53ee8cc1Swenshuai.xi {
2461*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2462*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2463*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
2464*53ee8cc1Swenshuai.xi {
2465*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
2466*53ee8cc1Swenshuai.xi {
2467*53ee8cc1Swenshuai.xi if(ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
2468*53ee8cc1Swenshuai.xi {
2469*53ee8cc1Swenshuai.xi ucStableCount++;
2470*53ee8cc1Swenshuai.xi }
2471*53ee8cc1Swenshuai.xi
2472*53ee8cc1Swenshuai.xi if(!bPLLPower[ucCbusSelect])
2473*53ee8cc1Swenshuai.xi {
2474*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, 0, BIT(8));
2475*53ee8cc1Swenshuai.xi
2476*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = TRUE;
2477*53ee8cc1Swenshuai.xi }
2478*53ee8cc1Swenshuai.xi
2479*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P0_31_L) &BIT(6)) == BIT(6)) // DE stable
2480*53ee8cc1Swenshuai.xi {
2481*53ee8cc1Swenshuai.xi if(ucStableCount < MHL_CDR_STABLE_THRESHOLD)
2482*53ee8cc1Swenshuai.xi {
2483*53ee8cc1Swenshuai.xi ucStableCount = MHL_CDR_STABLE_THRESHOLD;
2484*53ee8cc1Swenshuai.xi }
2485*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
2486*53ee8cc1Swenshuai.xi {
2487*53ee8cc1Swenshuai.xi if(bECbusEnableFlag)
2488*53ee8cc1Swenshuai.xi {
2489*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_72_L, BIT(13), BIT(13));
2490*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
2491*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P0_72_L, 0, BIT(13));
2492*53ee8cc1Swenshuai.xi
2493*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL toggle ~~~\r\n"));
2494*53ee8cc1Swenshuai.xi }
2495*53ee8cc1Swenshuai.xi }
2496*53ee8cc1Swenshuai.xi }
2497*53ee8cc1Swenshuai.xi else // DE unstable
2498*53ee8cc1Swenshuai.xi {
2499*53ee8cc1Swenshuai.xi if(ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
2500*53ee8cc1Swenshuai.xi {
2501*53ee8cc1Swenshuai.xi ucStableCount = 0;
2502*53ee8cc1Swenshuai.xi }
2503*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
2504*53ee8cc1Swenshuai.xi {
2505*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL time change toggle CDR mode\r\n"));
2506*53ee8cc1Swenshuai.xi
2507*53ee8cc1Swenshuai.xi ucStableCount = 0;
2508*53ee8cc1Swenshuai.xi }
2509*53ee8cc1Swenshuai.xi }
2510*53ee8cc1Swenshuai.xi }
2511*53ee8cc1Swenshuai.xi else
2512*53ee8cc1Swenshuai.xi {
2513*53ee8cc1Swenshuai.xi if(bPLLPower[ucCbusSelect])
2514*53ee8cc1Swenshuai.xi {
2515*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY0_P0_6E_L, BIT(8), BIT(8));
2516*53ee8cc1Swenshuai.xi
2517*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = FALSE;
2518*53ee8cc1Swenshuai.xi ucStableCount = 0;
2519*53ee8cc1Swenshuai.xi }
2520*53ee8cc1Swenshuai.xi }
2521*53ee8cc1Swenshuai.xi }
2522*53ee8cc1Swenshuai.xi
2523*53ee8cc1Swenshuai.xi break;
2524*53ee8cc1Swenshuai.xi #endif
2525*53ee8cc1Swenshuai.xi
2526*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2527*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2528*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
2529*53ee8cc1Swenshuai.xi {
2530*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
2531*53ee8cc1Swenshuai.xi {
2532*53ee8cc1Swenshuai.xi if(ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
2533*53ee8cc1Swenshuai.xi {
2534*53ee8cc1Swenshuai.xi ucStableCount++;
2535*53ee8cc1Swenshuai.xi }
2536*53ee8cc1Swenshuai.xi
2537*53ee8cc1Swenshuai.xi if(!bPLLPower[ucCbusSelect])
2538*53ee8cc1Swenshuai.xi {
2539*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = TRUE;
2540*53ee8cc1Swenshuai.xi }
2541*53ee8cc1Swenshuai.xi
2542*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P1_31_L) &BIT(6)) == BIT(6)) // DE stable
2543*53ee8cc1Swenshuai.xi {
2544*53ee8cc1Swenshuai.xi if(ucStableCount < MHL_CDR_STABLE_THRESHOLD)
2545*53ee8cc1Swenshuai.xi {
2546*53ee8cc1Swenshuai.xi ucStableCount = MHL_CDR_STABLE_THRESHOLD;
2547*53ee8cc1Swenshuai.xi }
2548*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
2549*53ee8cc1Swenshuai.xi {
2550*53ee8cc1Swenshuai.xi if(bECbusEnableFlag)
2551*53ee8cc1Swenshuai.xi {
2552*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_72_L, BIT(13), BIT(13));
2553*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
2554*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P1_72_L, 0, BIT(13));
2555*53ee8cc1Swenshuai.xi
2556*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL toggle ~~~\r\n"));
2557*53ee8cc1Swenshuai.xi }
2558*53ee8cc1Swenshuai.xi }
2559*53ee8cc1Swenshuai.xi }
2560*53ee8cc1Swenshuai.xi else // DE unstable
2561*53ee8cc1Swenshuai.xi {
2562*53ee8cc1Swenshuai.xi if(ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
2563*53ee8cc1Swenshuai.xi {
2564*53ee8cc1Swenshuai.xi ucStableCount = 0;
2565*53ee8cc1Swenshuai.xi }
2566*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
2567*53ee8cc1Swenshuai.xi {
2568*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL time change toggle CDR mode\r\n"));
2569*53ee8cc1Swenshuai.xi
2570*53ee8cc1Swenshuai.xi ucStableCount = 0;
2571*53ee8cc1Swenshuai.xi }
2572*53ee8cc1Swenshuai.xi }
2573*53ee8cc1Swenshuai.xi }
2574*53ee8cc1Swenshuai.xi else
2575*53ee8cc1Swenshuai.xi {
2576*53ee8cc1Swenshuai.xi if(bPLLPower[ucCbusSelect])
2577*53ee8cc1Swenshuai.xi {
2578*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = FALSE;
2579*53ee8cc1Swenshuai.xi ucStableCount = 0;
2580*53ee8cc1Swenshuai.xi }
2581*53ee8cc1Swenshuai.xi }
2582*53ee8cc1Swenshuai.xi }
2583*53ee8cc1Swenshuai.xi
2584*53ee8cc1Swenshuai.xi break;
2585*53ee8cc1Swenshuai.xi #endif
2586*53ee8cc1Swenshuai.xi
2587*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2588*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2589*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
2590*53ee8cc1Swenshuai.xi {
2591*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
2592*53ee8cc1Swenshuai.xi {
2593*53ee8cc1Swenshuai.xi if(ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
2594*53ee8cc1Swenshuai.xi {
2595*53ee8cc1Swenshuai.xi ucStableCount++;
2596*53ee8cc1Swenshuai.xi }
2597*53ee8cc1Swenshuai.xi
2598*53ee8cc1Swenshuai.xi if(!bPLLPower[ucCbusSelect])
2599*53ee8cc1Swenshuai.xi {
2600*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = TRUE;
2601*53ee8cc1Swenshuai.xi }
2602*53ee8cc1Swenshuai.xi
2603*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P2_31_L) &BIT(6)) == BIT(6)) // DE stable
2604*53ee8cc1Swenshuai.xi {
2605*53ee8cc1Swenshuai.xi if(ucStableCount < MHL_CDR_STABLE_THRESHOLD)
2606*53ee8cc1Swenshuai.xi {
2607*53ee8cc1Swenshuai.xi ucStableCount = MHL_CDR_STABLE_THRESHOLD;
2608*53ee8cc1Swenshuai.xi }
2609*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
2610*53ee8cc1Swenshuai.xi {
2611*53ee8cc1Swenshuai.xi if(bECbusEnableFlag)
2612*53ee8cc1Swenshuai.xi {
2613*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_72_L, BIT(13), BIT(13));
2614*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
2615*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P2_72_L, 0, BIT(13));
2616*53ee8cc1Swenshuai.xi
2617*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL toggle ~~~\r\n"));
2618*53ee8cc1Swenshuai.xi }
2619*53ee8cc1Swenshuai.xi }
2620*53ee8cc1Swenshuai.xi }
2621*53ee8cc1Swenshuai.xi else // DE unstable
2622*53ee8cc1Swenshuai.xi {
2623*53ee8cc1Swenshuai.xi if(ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
2624*53ee8cc1Swenshuai.xi {
2625*53ee8cc1Swenshuai.xi ucStableCount = 0;
2626*53ee8cc1Swenshuai.xi }
2627*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
2628*53ee8cc1Swenshuai.xi {
2629*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL time change toggle CDR mode\r\n"));
2630*53ee8cc1Swenshuai.xi
2631*53ee8cc1Swenshuai.xi ucStableCount = 0;
2632*53ee8cc1Swenshuai.xi }
2633*53ee8cc1Swenshuai.xi }
2634*53ee8cc1Swenshuai.xi }
2635*53ee8cc1Swenshuai.xi else
2636*53ee8cc1Swenshuai.xi {
2637*53ee8cc1Swenshuai.xi if(bPLLPower[ucCbusSelect])
2638*53ee8cc1Swenshuai.xi {
2639*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = FALSE;
2640*53ee8cc1Swenshuai.xi ucStableCount = 0;
2641*53ee8cc1Swenshuai.xi }
2642*53ee8cc1Swenshuai.xi }
2643*53ee8cc1Swenshuai.xi }
2644*53ee8cc1Swenshuai.xi
2645*53ee8cc1Swenshuai.xi break;
2646*53ee8cc1Swenshuai.xi #endif
2647*53ee8cc1Swenshuai.xi
2648*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2649*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2650*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
2651*53ee8cc1Swenshuai.xi {
2652*53ee8cc1Swenshuai.xi if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
2653*53ee8cc1Swenshuai.xi {
2654*53ee8cc1Swenshuai.xi if(ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
2655*53ee8cc1Swenshuai.xi {
2656*53ee8cc1Swenshuai.xi ucStableCount++;
2657*53ee8cc1Swenshuai.xi }
2658*53ee8cc1Swenshuai.xi
2659*53ee8cc1Swenshuai.xi if(!bPLLPower[ucCbusSelect])
2660*53ee8cc1Swenshuai.xi {
2661*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = TRUE;
2662*53ee8cc1Swenshuai.xi }
2663*53ee8cc1Swenshuai.xi
2664*53ee8cc1Swenshuai.xi if((R2BYTE(REG_DVI_DTOP_DUAL_P3_31_L) &BIT(6)) == BIT(6)) // DE stable
2665*53ee8cc1Swenshuai.xi {
2666*53ee8cc1Swenshuai.xi if(ucStableCount < MHL_CDR_STABLE_THRESHOLD)
2667*53ee8cc1Swenshuai.xi {
2668*53ee8cc1Swenshuai.xi ucStableCount = MHL_CDR_STABLE_THRESHOLD;
2669*53ee8cc1Swenshuai.xi }
2670*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_FORCE_THRESHOLD -1))
2671*53ee8cc1Swenshuai.xi {
2672*53ee8cc1Swenshuai.xi if(bECbusEnableFlag)
2673*53ee8cc1Swenshuai.xi {
2674*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_72_L, BIT(13), BIT(13));
2675*53ee8cc1Swenshuai.xi //MsOS_DelayTaskUs(1);
2676*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_DVI_DTOP_DUAL_P3_72_L, 0, BIT(13));
2677*53ee8cc1Swenshuai.xi
2678*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL toggle ~~~\r\n"));
2679*53ee8cc1Swenshuai.xi }
2680*53ee8cc1Swenshuai.xi }
2681*53ee8cc1Swenshuai.xi }
2682*53ee8cc1Swenshuai.xi else // DE unstable
2683*53ee8cc1Swenshuai.xi {
2684*53ee8cc1Swenshuai.xi if(ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
2685*53ee8cc1Swenshuai.xi {
2686*53ee8cc1Swenshuai.xi ucStableCount = 0;
2687*53ee8cc1Swenshuai.xi }
2688*53ee8cc1Swenshuai.xi else if(ucStableCount == (MHL_CDR_STABLE_THRESHOLD -1))
2689*53ee8cc1Swenshuai.xi {
2690*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL time change toggle CDR mode\r\n"));
2691*53ee8cc1Swenshuai.xi
2692*53ee8cc1Swenshuai.xi ucStableCount = 0;
2693*53ee8cc1Swenshuai.xi }
2694*53ee8cc1Swenshuai.xi }
2695*53ee8cc1Swenshuai.xi }
2696*53ee8cc1Swenshuai.xi else
2697*53ee8cc1Swenshuai.xi {
2698*53ee8cc1Swenshuai.xi if(bPLLPower[ucCbusSelect])
2699*53ee8cc1Swenshuai.xi {
2700*53ee8cc1Swenshuai.xi bPLLPower[ucCbusSelect] = FALSE;
2701*53ee8cc1Swenshuai.xi ucStableCount = 0;
2702*53ee8cc1Swenshuai.xi }
2703*53ee8cc1Swenshuai.xi }
2704*53ee8cc1Swenshuai.xi }
2705*53ee8cc1Swenshuai.xi
2706*53ee8cc1Swenshuai.xi break;
2707*53ee8cc1Swenshuai.xi #endif
2708*53ee8cc1Swenshuai.xi
2709*53ee8cc1Swenshuai.xi default:
2710*53ee8cc1Swenshuai.xi
2711*53ee8cc1Swenshuai.xi break;
2712*53ee8cc1Swenshuai.xi };
2713*53ee8cc1Swenshuai.xi
2714*53ee8cc1Swenshuai.xi if(ucStableCount >= MHL_CDR_FORCE_THRESHOLD)
2715*53ee8cc1Swenshuai.xi {
2716*53ee8cc1Swenshuai.xi bMHLSignalStable = TRUE;
2717*53ee8cc1Swenshuai.xi }
2718*53ee8cc1Swenshuai.xi else if(bMHLSignalStable)
2719*53ee8cc1Swenshuai.xi {
2720*53ee8cc1Swenshuai.xi bMHLSignalStable = FALSE;
2721*53ee8cc1Swenshuai.xi }
2722*53ee8cc1Swenshuai.xi
2723*53ee8cc1Swenshuai.xi return bindex;
2724*53ee8cc1Swenshuai.xi }
2725*53ee8cc1Swenshuai.xi
2726*53ee8cc1Swenshuai.xi //**************************************************************************
2727*53ee8cc1Swenshuai.xi // [Function Name]:
2728*53ee8cc1Swenshuai.xi // mhal_mhl_CbusIsolate()
2729*53ee8cc1Swenshuai.xi // [Description]
2730*53ee8cc1Swenshuai.xi // MHL cable isolate
2731*53ee8cc1Swenshuai.xi // [Arguments]:
2732*53ee8cc1Swenshuai.xi //
2733*53ee8cc1Swenshuai.xi // [Return]:
2734*53ee8cc1Swenshuai.xi //
2735*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIsolate(MS_U8 ucCbusSelect,MS_BOOL bFlag)2736*53ee8cc1Swenshuai.xi void mhal_mhl_CbusIsolate(MS_U8 ucCbusSelect, MS_BOOL bFlag)
2737*53ee8cc1Swenshuai.xi {
2738*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2739*53ee8cc1Swenshuai.xi {
2740*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2741*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2742*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
2743*53ee8cc1Swenshuai.xi {
2744*53ee8cc1Swenshuai.xi if(bFlag)
2745*53ee8cc1Swenshuai.xi {
2746*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
2747*53ee8cc1Swenshuai.xi }
2748*53ee8cc1Swenshuai.xi else
2749*53ee8cc1Swenshuai.xi {
2750*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
2751*53ee8cc1Swenshuai.xi }
2752*53ee8cc1Swenshuai.xi }
2753*53ee8cc1Swenshuai.xi
2754*53ee8cc1Swenshuai.xi break;
2755*53ee8cc1Swenshuai.xi #endif
2756*53ee8cc1Swenshuai.xi
2757*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2758*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2759*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
2760*53ee8cc1Swenshuai.xi {
2761*53ee8cc1Swenshuai.xi
2762*53ee8cc1Swenshuai.xi }
2763*53ee8cc1Swenshuai.xi
2764*53ee8cc1Swenshuai.xi break;
2765*53ee8cc1Swenshuai.xi #endif
2766*53ee8cc1Swenshuai.xi
2767*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2768*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2769*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
2770*53ee8cc1Swenshuai.xi {
2771*53ee8cc1Swenshuai.xi if(bFlag)
2772*53ee8cc1Swenshuai.xi {
2773*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
2774*53ee8cc1Swenshuai.xi }
2775*53ee8cc1Swenshuai.xi else
2776*53ee8cc1Swenshuai.xi {
2777*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
2778*53ee8cc1Swenshuai.xi }
2779*53ee8cc1Swenshuai.xi }
2780*53ee8cc1Swenshuai.xi
2781*53ee8cc1Swenshuai.xi break;
2782*53ee8cc1Swenshuai.xi #endif
2783*53ee8cc1Swenshuai.xi
2784*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2785*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2786*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
2787*53ee8cc1Swenshuai.xi {
2788*53ee8cc1Swenshuai.xi if(bFlag)
2789*53ee8cc1Swenshuai.xi {
2790*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
2791*53ee8cc1Swenshuai.xi }
2792*53ee8cc1Swenshuai.xi else
2793*53ee8cc1Swenshuai.xi {
2794*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
2795*53ee8cc1Swenshuai.xi }
2796*53ee8cc1Swenshuai.xi }
2797*53ee8cc1Swenshuai.xi
2798*53ee8cc1Swenshuai.xi break;
2799*53ee8cc1Swenshuai.xi #endif
2800*53ee8cc1Swenshuai.xi
2801*53ee8cc1Swenshuai.xi default:
2802*53ee8cc1Swenshuai.xi
2803*53ee8cc1Swenshuai.xi break;
2804*53ee8cc1Swenshuai.xi };
2805*53ee8cc1Swenshuai.xi }
2806*53ee8cc1Swenshuai.xi
2807*53ee8cc1Swenshuai.xi //**************************************************************************
2808*53ee8cc1Swenshuai.xi // [Function Name]:
2809*53ee8cc1Swenshuai.xi // mhal_mhl_VbusCharge()
2810*53ee8cc1Swenshuai.xi // [Description]
2811*53ee8cc1Swenshuai.xi // MHL Vbus charge
2812*53ee8cc1Swenshuai.xi // [Arguments]:
2813*53ee8cc1Swenshuai.xi //
2814*53ee8cc1Swenshuai.xi // [Return]:
2815*53ee8cc1Swenshuai.xi //
2816*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_VbusCharge(MS_U8 ucCbusSelect,MS_U8 bState)2817*53ee8cc1Swenshuai.xi void mhal_mhl_VbusCharge(MS_U8 ucCbusSelect, MS_U8 bState)
2818*53ee8cc1Swenshuai.xi {
2819*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
2820*53ee8cc1Swenshuai.xi {
2821*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2822*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
2823*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
2824*53ee8cc1Swenshuai.xi {
2825*53ee8cc1Swenshuai.xi if(bState == VBUS_SW_CHARGE)
2826*53ee8cc1Swenshuai.xi {
2827*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
2828*53ee8cc1Swenshuai.xi }
2829*53ee8cc1Swenshuai.xi else if(bState == VBUS_SW_UNCHARGE)
2830*53ee8cc1Swenshuai.xi {
2831*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
2832*53ee8cc1Swenshuai.xi }
2833*53ee8cc1Swenshuai.xi else
2834*53ee8cc1Swenshuai.xi {
2835*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
2836*53ee8cc1Swenshuai.xi }
2837*53ee8cc1Swenshuai.xi }
2838*53ee8cc1Swenshuai.xi
2839*53ee8cc1Swenshuai.xi break;
2840*53ee8cc1Swenshuai.xi #endif
2841*53ee8cc1Swenshuai.xi
2842*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2843*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
2844*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
2845*53ee8cc1Swenshuai.xi {
2846*53ee8cc1Swenshuai.xi
2847*53ee8cc1Swenshuai.xi }
2848*53ee8cc1Swenshuai.xi
2849*53ee8cc1Swenshuai.xi break;
2850*53ee8cc1Swenshuai.xi #endif
2851*53ee8cc1Swenshuai.xi
2852*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2853*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
2854*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
2855*53ee8cc1Swenshuai.xi {
2856*53ee8cc1Swenshuai.xi if(bState == VBUS_SW_CHARGE)
2857*53ee8cc1Swenshuai.xi {
2858*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
2859*53ee8cc1Swenshuai.xi }
2860*53ee8cc1Swenshuai.xi else if(bState == VBUS_SW_UNCHARGE)
2861*53ee8cc1Swenshuai.xi {
2862*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
2863*53ee8cc1Swenshuai.xi }
2864*53ee8cc1Swenshuai.xi else
2865*53ee8cc1Swenshuai.xi {
2866*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
2867*53ee8cc1Swenshuai.xi }
2868*53ee8cc1Swenshuai.xi }
2869*53ee8cc1Swenshuai.xi
2870*53ee8cc1Swenshuai.xi break;
2871*53ee8cc1Swenshuai.xi #endif
2872*53ee8cc1Swenshuai.xi
2873*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2874*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
2875*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
2876*53ee8cc1Swenshuai.xi {
2877*53ee8cc1Swenshuai.xi if(bState == VBUS_SW_CHARGE)
2878*53ee8cc1Swenshuai.xi {
2879*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
2880*53ee8cc1Swenshuai.xi }
2881*53ee8cc1Swenshuai.xi else if(bState == VBUS_SW_UNCHARGE)
2882*53ee8cc1Swenshuai.xi {
2883*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
2884*53ee8cc1Swenshuai.xi }
2885*53ee8cc1Swenshuai.xi else
2886*53ee8cc1Swenshuai.xi {
2887*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
2888*53ee8cc1Swenshuai.xi }
2889*53ee8cc1Swenshuai.xi }
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_CbusFloating()
2903*53ee8cc1Swenshuai.xi // [Description]
2904*53ee8cc1Swenshuai.xi // MHL cable floating
2905*53ee8cc1Swenshuai.xi // [Arguments]:
2906*53ee8cc1Swenshuai.xi //
2907*53ee8cc1Swenshuai.xi // [Return]:
2908*53ee8cc1Swenshuai.xi //
2909*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusFloating(MS_BOOL bFlag)2910*53ee8cc1Swenshuai.xi void mhal_mhl_CbusFloating(MS_BOOL bFlag)
2911*53ee8cc1Swenshuai.xi {
2912*53ee8cc1Swenshuai.xi if(bFlag)
2913*53ee8cc1Swenshuai.xi {
2914*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(5), BIT(5));
2915*53ee8cc1Swenshuai.xi }
2916*53ee8cc1Swenshuai.xi else
2917*53ee8cc1Swenshuai.xi {
2918*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, 0, BIT(5));
2919*53ee8cc1Swenshuai.xi }
2920*53ee8cc1Swenshuai.xi }
2921*53ee8cc1Swenshuai.xi
2922*53ee8cc1Swenshuai.xi //**************************************************************************
2923*53ee8cc1Swenshuai.xi // [Function Name]:
2924*53ee8cc1Swenshuai.xi // mhal_mhl_CbusStucktoLow()
2925*53ee8cc1Swenshuai.xi // [Description]
2926*53ee8cc1Swenshuai.xi //
2927*53ee8cc1Swenshuai.xi // [Arguments]:
2928*53ee8cc1Swenshuai.xi //
2929*53ee8cc1Swenshuai.xi // [Return]:
2930*53ee8cc1Swenshuai.xi //
2931*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLow(MS_BOOL bFlag)2932*53ee8cc1Swenshuai.xi void mhal_mhl_CbusStucktoLow(MS_BOOL bFlag)
2933*53ee8cc1Swenshuai.xi {
2934*53ee8cc1Swenshuai.xi if(bFlag)
2935*53ee8cc1Swenshuai.xi {
2936*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, 0, BIT(1)); // cbus stuck to low int mask
2937*53ee8cc1Swenshuai.xi }
2938*53ee8cc1Swenshuai.xi else
2939*53ee8cc1Swenshuai.xi {
2940*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(1), BIT(1)); // cbus stuck to low int mask
2941*53ee8cc1Swenshuai.xi }
2942*53ee8cc1Swenshuai.xi
2943*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(0), BIT(0)); // Clear cbus stuck to low int flag
2944*53ee8cc1Swenshuai.xi }
2945*53ee8cc1Swenshuai.xi
2946*53ee8cc1Swenshuai.xi //**************************************************************************
2947*53ee8cc1Swenshuai.xi // [Function Name]:
2948*53ee8cc1Swenshuai.xi // mhal_mhl_CbusWakeupInterrupt()
2949*53ee8cc1Swenshuai.xi // [Description]
2950*53ee8cc1Swenshuai.xi //
2951*53ee8cc1Swenshuai.xi // [Arguments]:
2952*53ee8cc1Swenshuai.xi //
2953*53ee8cc1Swenshuai.xi // [Return]:
2954*53ee8cc1Swenshuai.xi //
2955*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupInterrupt(MS_BOOL bFlag)2956*53ee8cc1Swenshuai.xi void mhal_mhl_CbusWakeupInterrupt(MS_BOOL bFlag)
2957*53ee8cc1Swenshuai.xi {
2958*53ee8cc1Swenshuai.xi if(bFlag)
2959*53ee8cc1Swenshuai.xi {
2960*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, 0, BIT(5)); // wake up pulse int mask
2961*53ee8cc1Swenshuai.xi }
2962*53ee8cc1Swenshuai.xi else
2963*53ee8cc1Swenshuai.xi {
2964*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(5), BIT(5)); // wake up pulse int mask
2965*53ee8cc1Swenshuai.xi }
2966*53ee8cc1Swenshuai.xi
2967*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(4), BIT(4)); // Clear wake up pulse int flag
2968*53ee8cc1Swenshuai.xi }
2969*53ee8cc1Swenshuai.xi
2970*53ee8cc1Swenshuai.xi //**************************************************************************
2971*53ee8cc1Swenshuai.xi // [Function Name]:
2972*53ee8cc1Swenshuai.xi // mhal_mhl_SetVenderID()
2973*53ee8cc1Swenshuai.xi // [Description]
2974*53ee8cc1Swenshuai.xi //
2975*53ee8cc1Swenshuai.xi // [Arguments]:
2976*53ee8cc1Swenshuai.xi //
2977*53ee8cc1Swenshuai.xi // [Return]:
2978*53ee8cc1Swenshuai.xi //
2979*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetVenderID(MS_U8 ucVenderID)2980*53ee8cc1Swenshuai.xi void mhal_mhl_SetVenderID(MS_U8 ucVenderID)
2981*53ee8cc1Swenshuai.xi {
2982*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_00, (ucVenderID << 8), BMASK(15:8));
2983*53ee8cc1Swenshuai.xi }
2984*53ee8cc1Swenshuai.xi
2985*53ee8cc1Swenshuai.xi //**************************************************************************
2986*53ee8cc1Swenshuai.xi // [Function Name]:
2987*53ee8cc1Swenshuai.xi // mhal_mhl_LoadEDID()
2988*53ee8cc1Swenshuai.xi // [Description]
2989*53ee8cc1Swenshuai.xi //
2990*53ee8cc1Swenshuai.xi // [Arguments]:
2991*53ee8cc1Swenshuai.xi //
2992*53ee8cc1Swenshuai.xi // [Return]:
2993*53ee8cc1Swenshuai.xi //
2994*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadEDID(MS_U8 * edid)2995*53ee8cc1Swenshuai.xi void mhal_mhl_LoadEDID(MS_U8 *edid)
2996*53ee8cc1Swenshuai.xi {
2997*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
2998*53ee8cc1Swenshuai.xi
2999*53ee8cc1Swenshuai.xi if(edid != NULL)
3000*53ee8cc1Swenshuai.xi {
3001*53ee8cc1Swenshuai.xi // Load EDID
3002*53ee8cc1Swenshuai.xi msg_mhl(printf("** Manhattan Load MHL EDID...\r\n"));
3003*53ee8cc1Swenshuai.xi
3004*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, BIT(1), BIT(1)); // CPU write enable
3005*53ee8cc1Swenshuai.xi
3006*53ee8cc1Swenshuai.xi for(ustemp = 0; ustemp <256; ustemp++)
3007*53ee8cc1Swenshuai.xi {
3008*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, ustemp <<8, 0xFF00); // address
3009*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_53, edid[ustemp], 0x00FF); // data
3010*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, BIT(0), BIT(0)); // write trigger
3011*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(0));
3012*53ee8cc1Swenshuai.xi while(R2BYTE(REG_MHL_CBUS_52) & BIT(5));
3013*53ee8cc1Swenshuai.xi }
3014*53ee8cc1Swenshuai.xi
3015*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(1)); // CPU write disable
3016*53ee8cc1Swenshuai.xi }
3017*53ee8cc1Swenshuai.xi }
3018*53ee8cc1Swenshuai.xi
3019*53ee8cc1Swenshuai.xi //**************************************************************************
3020*53ee8cc1Swenshuai.xi // [Function Name]:
3021*53ee8cc1Swenshuai.xi // mhal_mhl_ReadEDID()
3022*53ee8cc1Swenshuai.xi // [Description]
3023*53ee8cc1Swenshuai.xi //
3024*53ee8cc1Swenshuai.xi // [Arguments]:
3025*53ee8cc1Swenshuai.xi //
3026*53ee8cc1Swenshuai.xi // [Return]:
3027*53ee8cc1Swenshuai.xi //
3028*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ReadEDID(MS_U16 usSize,MS_U8 * edid)3029*53ee8cc1Swenshuai.xi void mhal_mhl_ReadEDID(MS_U16 usSize, MS_U8 *edid)
3030*53ee8cc1Swenshuai.xi {
3031*53ee8cc1Swenshuai.xi MS_U16 ustemp = 0;
3032*53ee8cc1Swenshuai.xi
3033*53ee8cc1Swenshuai.xi if(edid != NULL)
3034*53ee8cc1Swenshuai.xi {
3035*53ee8cc1Swenshuai.xi // Read EDID
3036*53ee8cc1Swenshuai.xi msg_mhl(printf("** Manhattan Read MHL EDID...\r\n"));
3037*53ee8cc1Swenshuai.xi
3038*53ee8cc1Swenshuai.xi for(ustemp = 0; ustemp < usSize; ustemp++)
3039*53ee8cc1Swenshuai.xi {
3040*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, ustemp <<8, 0xFF00); // address
3041*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, BIT(3), BIT(3)); // read trigger
3042*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(0));
3043*53ee8cc1Swenshuai.xi while(R2BYTE(REG_MHL_CBUS_52) & BIT(4));
3044*53ee8cc1Swenshuai.xi
3045*53ee8cc1Swenshuai.xi edid[ustemp] = (MS_U8)((R2BYTE(REG_MHL_CBUS_53) & 0xFF00) >> 8); // data
3046*53ee8cc1Swenshuai.xi }
3047*53ee8cc1Swenshuai.xi }
3048*53ee8cc1Swenshuai.xi }
3049*53ee8cc1Swenshuai.xi
3050*53ee8cc1Swenshuai.xi //**************************************************************************
3051*53ee8cc1Swenshuai.xi // [Function Name]:
3052*53ee8cc1Swenshuai.xi // mhal_mhl_LoadDeviceCapability()
3053*53ee8cc1Swenshuai.xi // [Description]
3054*53ee8cc1Swenshuai.xi //
3055*53ee8cc1Swenshuai.xi // [Arguments]:
3056*53ee8cc1Swenshuai.xi //
3057*53ee8cc1Swenshuai.xi // [Return]:
3058*53ee8cc1Swenshuai.xi //
3059*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadDeviceCapability(MS_U8 * devcap)3060*53ee8cc1Swenshuai.xi void mhal_mhl_LoadDeviceCapability(MS_U8 *devcap)
3061*53ee8cc1Swenshuai.xi {
3062*53ee8cc1Swenshuai.xi MS_U8 ucIndex = 0;
3063*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
3064*53ee8cc1Swenshuai.xi
3065*53ee8cc1Swenshuai.xi if(devcap != NULL)
3066*53ee8cc1Swenshuai.xi {
3067*53ee8cc1Swenshuai.xi msg_mhl(printf("** Manhattan Load DevCap...\r\n"));
3068*53ee8cc1Swenshuai.xi
3069*53ee8cc1Swenshuai.xi // Load MHL device capability
3070*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <8; uctemp++)
3071*53ee8cc1Swenshuai.xi {
3072*53ee8cc1Swenshuai.xi if(uctemp == 2)
3073*53ee8cc1Swenshuai.xi {
3074*53ee8cc1Swenshuai.xi ucIndex = 1;
3075*53ee8cc1Swenshuai.xi }
3076*53ee8cc1Swenshuai.xi
3077*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_01 +(uctemp *2), (devcap[(uctemp *2) +1 -ucIndex] <<8) | devcap[uctemp *2 -ucIndex]);
3078*53ee8cc1Swenshuai.xi }
3079*53ee8cc1Swenshuai.xi
3080*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_03, (devcap[3] <<8) | devcap[4]);
3081*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_07, (devcap[11] <<8) | devcap[12]);
3082*53ee8cc1Swenshuai.xi
3083*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_09, devcap[15], BMASK(7:0));
3084*53ee8cc1Swenshuai.xi
3085*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <2; uctemp++)
3086*53ee8cc1Swenshuai.xi {
3087*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_19 +(uctemp *2), (devcap[(uctemp *2) +17] <<8) | devcap[(uctemp *2) +16]); // [15:0], MHL_ECBUS_SPEEDS
3088*53ee8cc1Swenshuai.xi }
3089*53ee8cc1Swenshuai.xi }
3090*53ee8cc1Swenshuai.xi }
3091*53ee8cc1Swenshuai.xi
3092*53ee8cc1Swenshuai.xi //**************************************************************************
3093*53ee8cc1Swenshuai.xi // [Function Name]:
3094*53ee8cc1Swenshuai.xi // mhal_mhl_initial()
3095*53ee8cc1Swenshuai.xi // [Description]
3096*53ee8cc1Swenshuai.xi // MHL init
3097*53ee8cc1Swenshuai.xi // [Arguments]:
3098*53ee8cc1Swenshuai.xi // *edid: MHL EDID data
3099*53ee8cc1Swenshuai.xi // *devcap: MHL device capability
3100*53ee8cc1Swenshuai.xi // [Return]:
3101*53ee8cc1Swenshuai.xi //
3102*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_initial(MS_U8 * edid,MS_U8 * devcap,MS_U8 ucVenderID)3103*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_initial(MS_U8 *edid, MS_U8 *devcap, MS_U8 ucVenderID)
3104*53ee8cc1Swenshuai.xi {
3105*53ee8cc1Swenshuai.xi MS_U16 uctemp = 0;
3106*53ee8cc1Swenshuai.xi
3107*53ee8cc1Swenshuai.xi // Initial setting
3108*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_INITIAL_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
3109*53ee8cc1Swenshuai.xi {
3110*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_INITIAL_TABLE[uctemp].addr, tMHL_INITIAL_TABLE[uctemp].databuf, tMHL_INITIAL_TABLE[uctemp].mask);
3111*53ee8cc1Swenshuai.xi }
3112*53ee8cc1Swenshuai.xi
3113*53ee8cc1Swenshuai.xi // ECbus initial setting
3114*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusInitialSetting();
3115*53ee8cc1Swenshuai.xi
3116*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
3117*53ee8cc1Swenshuai.xi
3118*53ee8cc1Swenshuai.xi _mhal_mhl_CbusAndClockSelect();
3119*53ee8cc1Swenshuai.xi
3120*53ee8cc1Swenshuai.xi #if(MHL_INTERRUPT_USE_PM_IRQ)
3121*53ee8cc1Swenshuai.xi // Open PM irq mask
3122*53ee8cc1Swenshuai.xi W2BYTEMSK(0x2B28, 0, BIT(11));
3123*53ee8cc1Swenshuai.xi #endif
3124*53ee8cc1Swenshuai.xi
3125*53ee8cc1Swenshuai.xi // Load EDID
3126*53ee8cc1Swenshuai.xi mhal_mhl_LoadEDID(edid);
3127*53ee8cc1Swenshuai.xi
3128*53ee8cc1Swenshuai.xi // Load vendor ID
3129*53ee8cc1Swenshuai.xi mhal_mhl_SetVenderID(ucVenderID);
3130*53ee8cc1Swenshuai.xi
3131*53ee8cc1Swenshuai.xi // Load DevCap
3132*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(devcap);
3133*53ee8cc1Swenshuai.xi
3134*53ee8cc1Swenshuai.xi // Clear Cbus received interrupt status
3135*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4)|BIT(0), BIT(4)|BIT(1)|BIT(0)); // [1]: receive packet valid mask
3136*53ee8cc1Swenshuai.xi
3137*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(FALSE);
3138*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(FALSE);
3139*53ee8cc1Swenshuai.xi
3140*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3141*53ee8cc1Swenshuai.xi
3142*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
3143*53ee8cc1Swenshuai.xi {
3144*53ee8cc1Swenshuai.xi _mhal_mhl_RtermHWControl(uctemp, FALSE);
3145*53ee8cc1Swenshuai.xi }
3146*53ee8cc1Swenshuai.xi
3147*53ee8cc1Swenshuai.xi _mhal_mhl_ForcePullDown100K(TRUE);
3148*53ee8cc1Swenshuai.xi
3149*53ee8cc1Swenshuai.xi mhal_mhl_CbusFloating(TRUE);
3150*53ee8cc1Swenshuai.xi
3151*53ee8cc1Swenshuai.xi return MHL_CHIP_FUNCTION_CAPABILITY;
3152*53ee8cc1Swenshuai.xi }
3153*53ee8cc1Swenshuai.xi
3154*53ee8cc1Swenshuai.xi //**************************************************************************
3155*53ee8cc1Swenshuai.xi // [Function Name]:
3156*53ee8cc1Swenshuai.xi // mhal_mhl_InvertCableDetect()
3157*53ee8cc1Swenshuai.xi // [Description]
3158*53ee8cc1Swenshuai.xi //
3159*53ee8cc1Swenshuai.xi // [Arguments]:
3160*53ee8cc1Swenshuai.xi //
3161*53ee8cc1Swenshuai.xi // [Return]:
3162*53ee8cc1Swenshuai.xi //
3163*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InvertCableDetect(MS_U8 ucCbusSelect,MS_BOOL bCableDetectInvert)3164*53ee8cc1Swenshuai.xi void mhal_mhl_InvertCableDetect(MS_U8 ucCbusSelect, MS_BOOL bCableDetectInvert)
3165*53ee8cc1Swenshuai.xi {
3166*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3167*53ee8cc1Swenshuai.xi {
3168*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3169*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3170*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
3171*53ee8cc1Swenshuai.xi {
3172*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
3173*53ee8cc1Swenshuai.xi }
3174*53ee8cc1Swenshuai.xi
3175*53ee8cc1Swenshuai.xi break;
3176*53ee8cc1Swenshuai.xi #endif
3177*53ee8cc1Swenshuai.xi
3178*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3179*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3180*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
3181*53ee8cc1Swenshuai.xi {
3182*53ee8cc1Swenshuai.xi
3183*53ee8cc1Swenshuai.xi }
3184*53ee8cc1Swenshuai.xi
3185*53ee8cc1Swenshuai.xi break;
3186*53ee8cc1Swenshuai.xi #endif
3187*53ee8cc1Swenshuai.xi
3188*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3189*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3190*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
3191*53ee8cc1Swenshuai.xi {
3192*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
3193*53ee8cc1Swenshuai.xi }
3194*53ee8cc1Swenshuai.xi
3195*53ee8cc1Swenshuai.xi break;
3196*53ee8cc1Swenshuai.xi #endif
3197*53ee8cc1Swenshuai.xi
3198*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3199*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3200*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
3201*53ee8cc1Swenshuai.xi {
3202*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
3203*53ee8cc1Swenshuai.xi }
3204*53ee8cc1Swenshuai.xi
3205*53ee8cc1Swenshuai.xi break;
3206*53ee8cc1Swenshuai.xi #endif
3207*53ee8cc1Swenshuai.xi
3208*53ee8cc1Swenshuai.xi default:
3209*53ee8cc1Swenshuai.xi
3210*53ee8cc1Swenshuai.xi break;
3211*53ee8cc1Swenshuai.xi };
3212*53ee8cc1Swenshuai.xi }
3213*53ee8cc1Swenshuai.xi
3214*53ee8cc1Swenshuai.xi //**************************************************************************
3215*53ee8cc1Swenshuai.xi // [Function Name]:
3216*53ee8cc1Swenshuai.xi // mhal_mhl_VbusConfigSetting()
3217*53ee8cc1Swenshuai.xi // [Description]
3218*53ee8cc1Swenshuai.xi //
3219*53ee8cc1Swenshuai.xi // [Arguments]:
3220*53ee8cc1Swenshuai.xi //
3221*53ee8cc1Swenshuai.xi // [Return]:
3222*53ee8cc1Swenshuai.xi //
3223*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_VbusConfigSetting(MS_U8 ucCbusSelect,MS_U8 ucState)3224*53ee8cc1Swenshuai.xi void mhal_mhl_VbusConfigSetting(MS_U8 ucCbusSelect, MS_U8 ucState)
3225*53ee8cc1Swenshuai.xi {
3226*53ee8cc1Swenshuai.xi MS_U8 ucOutputState = ucState &(MHL_VBUS_LOW_ENABLE_MODE | MHL_VBUS_HIGH_ENABLE_MODE);
3227*53ee8cc1Swenshuai.xi
3228*53ee8cc1Swenshuai.xi ucState = ucState &(MHL_VBUS_OUTPUT_MODE | MHL_VBUS_INVERSE_MODE);
3229*53ee8cc1Swenshuai.xi
3230*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3231*53ee8cc1Swenshuai.xi {
3232*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3233*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3234*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
3235*53ee8cc1Swenshuai.xi {
3236*53ee8cc1Swenshuai.xi if(ucState == MHL_VBUS_OUTPUT_MODE)
3237*53ee8cc1Swenshuai.xi {
3238*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3239*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
3240*53ee8cc1Swenshuai.xi }
3241*53ee8cc1Swenshuai.xi else if(ucState > 0)
3242*53ee8cc1Swenshuai.xi {
3243*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3244*53ee8cc1Swenshuai.xi }
3245*53ee8cc1Swenshuai.xi
3246*53ee8cc1Swenshuai.xi if(ucOutputState > 0)
3247*53ee8cc1Swenshuai.xi {
3248*53ee8cc1Swenshuai.xi if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
3249*53ee8cc1Swenshuai.xi {
3250*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
3251*53ee8cc1Swenshuai.xi }
3252*53ee8cc1Swenshuai.xi else
3253*53ee8cc1Swenshuai.xi {
3254*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
3255*53ee8cc1Swenshuai.xi }
3256*53ee8cc1Swenshuai.xi }
3257*53ee8cc1Swenshuai.xi }
3258*53ee8cc1Swenshuai.xi
3259*53ee8cc1Swenshuai.xi break;
3260*53ee8cc1Swenshuai.xi #endif
3261*53ee8cc1Swenshuai.xi
3262*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3263*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3264*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
3265*53ee8cc1Swenshuai.xi {
3266*53ee8cc1Swenshuai.xi
3267*53ee8cc1Swenshuai.xi }
3268*53ee8cc1Swenshuai.xi
3269*53ee8cc1Swenshuai.xi break;
3270*53ee8cc1Swenshuai.xi #endif
3271*53ee8cc1Swenshuai.xi
3272*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3273*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3274*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
3275*53ee8cc1Swenshuai.xi {
3276*53ee8cc1Swenshuai.xi if(ucState == MHL_VBUS_OUTPUT_MODE)
3277*53ee8cc1Swenshuai.xi {
3278*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3279*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
3280*53ee8cc1Swenshuai.xi }
3281*53ee8cc1Swenshuai.xi else if(ucState > 0)
3282*53ee8cc1Swenshuai.xi {
3283*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3284*53ee8cc1Swenshuai.xi }
3285*53ee8cc1Swenshuai.xi
3286*53ee8cc1Swenshuai.xi if(ucOutputState > 0)
3287*53ee8cc1Swenshuai.xi {
3288*53ee8cc1Swenshuai.xi if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
3289*53ee8cc1Swenshuai.xi {
3290*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
3291*53ee8cc1Swenshuai.xi }
3292*53ee8cc1Swenshuai.xi else
3293*53ee8cc1Swenshuai.xi {
3294*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
3295*53ee8cc1Swenshuai.xi }
3296*53ee8cc1Swenshuai.xi }
3297*53ee8cc1Swenshuai.xi }
3298*53ee8cc1Swenshuai.xi
3299*53ee8cc1Swenshuai.xi break;
3300*53ee8cc1Swenshuai.xi #endif
3301*53ee8cc1Swenshuai.xi
3302*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3303*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3304*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
3305*53ee8cc1Swenshuai.xi {
3306*53ee8cc1Swenshuai.xi if(ucState == MHL_VBUS_OUTPUT_MODE)
3307*53ee8cc1Swenshuai.xi {
3308*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3309*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
3310*53ee8cc1Swenshuai.xi }
3311*53ee8cc1Swenshuai.xi else if(ucState > 0)
3312*53ee8cc1Swenshuai.xi {
3313*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
3314*53ee8cc1Swenshuai.xi }
3315*53ee8cc1Swenshuai.xi
3316*53ee8cc1Swenshuai.xi if(ucOutputState > 0)
3317*53ee8cc1Swenshuai.xi {
3318*53ee8cc1Swenshuai.xi if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
3319*53ee8cc1Swenshuai.xi {
3320*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
3321*53ee8cc1Swenshuai.xi }
3322*53ee8cc1Swenshuai.xi else
3323*53ee8cc1Swenshuai.xi {
3324*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
3325*53ee8cc1Swenshuai.xi }
3326*53ee8cc1Swenshuai.xi }
3327*53ee8cc1Swenshuai.xi }
3328*53ee8cc1Swenshuai.xi
3329*53ee8cc1Swenshuai.xi break;
3330*53ee8cc1Swenshuai.xi #endif
3331*53ee8cc1Swenshuai.xi
3332*53ee8cc1Swenshuai.xi default:
3333*53ee8cc1Swenshuai.xi
3334*53ee8cc1Swenshuai.xi break;
3335*53ee8cc1Swenshuai.xi };
3336*53ee8cc1Swenshuai.xi }
3337*53ee8cc1Swenshuai.xi
3338*53ee8cc1Swenshuai.xi //**************************************************************************
3339*53ee8cc1Swenshuai.xi // [Function Name]:
3340*53ee8cc1Swenshuai.xi // mhal_mhl_CableDetectPadSetting()
3341*53ee8cc1Swenshuai.xi // [Description]
3342*53ee8cc1Swenshuai.xi //
3343*53ee8cc1Swenshuai.xi // [Arguments]:
3344*53ee8cc1Swenshuai.xi //
3345*53ee8cc1Swenshuai.xi // [Return]:
3346*53ee8cc1Swenshuai.xi //
3347*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableDetectPadSetting(MS_U8 ucSelect)3348*53ee8cc1Swenshuai.xi void mhal_mhl_CableDetectPadSetting(MS_U8 ucSelect)
3349*53ee8cc1Swenshuai.xi {
3350*53ee8cc1Swenshuai.xi // Nothing
3351*53ee8cc1Swenshuai.xi }
3352*53ee8cc1Swenshuai.xi
3353*53ee8cc1Swenshuai.xi //**************************************************************************
3354*53ee8cc1Swenshuai.xi // [Function Name]:
3355*53ee8cc1Swenshuai.xi // mhal_mhl_CbusPadConfigSwitch()
3356*53ee8cc1Swenshuai.xi // [Description]
3357*53ee8cc1Swenshuai.xi //
3358*53ee8cc1Swenshuai.xi // [Arguments]:
3359*53ee8cc1Swenshuai.xi //
3360*53ee8cc1Swenshuai.xi // [Return]:
3361*53ee8cc1Swenshuai.xi //
3362*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusPadConfigSwitch(MS_U8 ucCbusSelect,MS_BOOL bFlag)3363*53ee8cc1Swenshuai.xi void mhal_mhl_CbusPadConfigSwitch(MS_U8 ucCbusSelect, MS_BOOL bFlag)
3364*53ee8cc1Swenshuai.xi {
3365*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
3366*53ee8cc1Swenshuai.xi {
3367*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
3368*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
3369*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
3370*53ee8cc1Swenshuai.xi {
3371*53ee8cc1Swenshuai.xi if(bFlag)
3372*53ee8cc1Swenshuai.xi {
3373*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3374*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3375*53ee8cc1Swenshuai.xi }
3376*53ee8cc1Swenshuai.xi else
3377*53ee8cc1Swenshuai.xi {
3378*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3379*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
3380*53ee8cc1Swenshuai.xi }
3381*53ee8cc1Swenshuai.xi }
3382*53ee8cc1Swenshuai.xi
3383*53ee8cc1Swenshuai.xi break;
3384*53ee8cc1Swenshuai.xi #endif
3385*53ee8cc1Swenshuai.xi
3386*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
3387*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
3388*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
3389*53ee8cc1Swenshuai.xi {
3390*53ee8cc1Swenshuai.xi
3391*53ee8cc1Swenshuai.xi }
3392*53ee8cc1Swenshuai.xi
3393*53ee8cc1Swenshuai.xi break;
3394*53ee8cc1Swenshuai.xi #endif
3395*53ee8cc1Swenshuai.xi
3396*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
3397*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
3398*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
3399*53ee8cc1Swenshuai.xi {
3400*53ee8cc1Swenshuai.xi if(bFlag)
3401*53ee8cc1Swenshuai.xi {
3402*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3403*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3404*53ee8cc1Swenshuai.xi }
3405*53ee8cc1Swenshuai.xi else
3406*53ee8cc1Swenshuai.xi {
3407*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3408*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
3409*53ee8cc1Swenshuai.xi }
3410*53ee8cc1Swenshuai.xi }
3411*53ee8cc1Swenshuai.xi
3412*53ee8cc1Swenshuai.xi break;
3413*53ee8cc1Swenshuai.xi #endif
3414*53ee8cc1Swenshuai.xi
3415*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
3416*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
3417*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
3418*53ee8cc1Swenshuai.xi {
3419*53ee8cc1Swenshuai.xi if(bFlag)
3420*53ee8cc1Swenshuai.xi {
3421*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3422*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3423*53ee8cc1Swenshuai.xi }
3424*53ee8cc1Swenshuai.xi else
3425*53ee8cc1Swenshuai.xi {
3426*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3427*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
3428*53ee8cc1Swenshuai.xi }
3429*53ee8cc1Swenshuai.xi }
3430*53ee8cc1Swenshuai.xi
3431*53ee8cc1Swenshuai.xi break;
3432*53ee8cc1Swenshuai.xi #endif
3433*53ee8cc1Swenshuai.xi
3434*53ee8cc1Swenshuai.xi default:
3435*53ee8cc1Swenshuai.xi
3436*53ee8cc1Swenshuai.xi break;
3437*53ee8cc1Swenshuai.xi };
3438*53ee8cc1Swenshuai.xi }
3439*53ee8cc1Swenshuai.xi
3440*53ee8cc1Swenshuai.xi //**************************************************************************
3441*53ee8cc1Swenshuai.xi // [Function Name]:
3442*53ee8cc1Swenshuai.xi // _mhal_mhl_CbusStatus()
3443*53ee8cc1Swenshuai.xi // [Description]:
3444*53ee8cc1Swenshuai.xi // MHL Cbus status
3445*53ee8cc1Swenshuai.xi // [Arguments]:
3446*53ee8cc1Swenshuai.xi //
3447*53ee8cc1Swenshuai.xi // [Return]:
3448*53ee8cc1Swenshuai.xi // Cbus status value
3449*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStatus(void)3450*53ee8cc1Swenshuai.xi MS_U16 mhal_mhl_CbusStatus(void)
3451*53ee8cc1Swenshuai.xi {
3452*53ee8cc1Swenshuai.xi return (R2BYTE(REG_PM_MHL_CBUS_17));
3453*53ee8cc1Swenshuai.xi }
3454*53ee8cc1Swenshuai.xi
3455*53ee8cc1Swenshuai.xi //**************************************************************************
3456*53ee8cc1Swenshuai.xi // [Function Name]:
3457*53ee8cc1Swenshuai.xi // mhal_mhl_CbusIsMscMsgReceived()
3458*53ee8cc1Swenshuai.xi // [Description]
3459*53ee8cc1Swenshuai.xi // MHL Cbus check whether msc message is received or not
3460*53ee8cc1Swenshuai.xi // [Arguments]:
3461*53ee8cc1Swenshuai.xi //
3462*53ee8cc1Swenshuai.xi // [Return]:
3463*53ee8cc1Swenshuai.xi // TRUE: recieved
3464*53ee8cc1Swenshuai.xi // FALSE: not yet
3465*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIsMscMsgReceived(void)3466*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusIsMscMsgReceived(void)
3467*53ee8cc1Swenshuai.xi {
3468*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_MHL_CBUS_3A) &BIT(3)) ?TRUE: FALSE);
3469*53ee8cc1Swenshuai.xi
3470*53ee8cc1Swenshuai.xi if(bindex)
3471*53ee8cc1Swenshuai.xi {
3472*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(0), BIT(0));
3473*53ee8cc1Swenshuai.xi }
3474*53ee8cc1Swenshuai.xi
3475*53ee8cc1Swenshuai.xi return bindex;
3476*53ee8cc1Swenshuai.xi }
3477*53ee8cc1Swenshuai.xi
3478*53ee8cc1Swenshuai.xi //**************************************************************************
3479*53ee8cc1Swenshuai.xi // [Function Name]:
3480*53ee8cc1Swenshuai.xi // mhal_mhl_CbusStucktoLowFlag()
3481*53ee8cc1Swenshuai.xi // [Description]
3482*53ee8cc1Swenshuai.xi //
3483*53ee8cc1Swenshuai.xi // [Arguments]:
3484*53ee8cc1Swenshuai.xi //
3485*53ee8cc1Swenshuai.xi // [Return]:
3486*53ee8cc1Swenshuai.xi //
3487*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLowFlag(void)3488*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusStucktoLowFlag(void)
3489*53ee8cc1Swenshuai.xi {
3490*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_PM_MHL_CBUS_18) &BIT(3)) ?TRUE: FALSE);
3491*53ee8cc1Swenshuai.xi
3492*53ee8cc1Swenshuai.xi if(bindex)
3493*53ee8cc1Swenshuai.xi {
3494*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(0), BIT(0));
3495*53ee8cc1Swenshuai.xi }
3496*53ee8cc1Swenshuai.xi
3497*53ee8cc1Swenshuai.xi return bindex;
3498*53ee8cc1Swenshuai.xi }
3499*53ee8cc1Swenshuai.xi
3500*53ee8cc1Swenshuai.xi //**************************************************************************
3501*53ee8cc1Swenshuai.xi // [Function Name]:
3502*53ee8cc1Swenshuai.xi // mhal_mhl_CbusWakeupIntFlag()
3503*53ee8cc1Swenshuai.xi // [Description]
3504*53ee8cc1Swenshuai.xi //
3505*53ee8cc1Swenshuai.xi // [Arguments]:
3506*53ee8cc1Swenshuai.xi //
3507*53ee8cc1Swenshuai.xi // [Return]:
3508*53ee8cc1Swenshuai.xi //
3509*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupIntFlag(void)3510*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusWakeupIntFlag(void)
3511*53ee8cc1Swenshuai.xi {
3512*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_PM_MHL_CBUS_18) &BIT(7)) ?TRUE: FALSE);
3513*53ee8cc1Swenshuai.xi
3514*53ee8cc1Swenshuai.xi if(bindex)
3515*53ee8cc1Swenshuai.xi {
3516*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(4), BIT(4));
3517*53ee8cc1Swenshuai.xi }
3518*53ee8cc1Swenshuai.xi
3519*53ee8cc1Swenshuai.xi return bindex;
3520*53ee8cc1Swenshuai.xi }
3521*53ee8cc1Swenshuai.xi
3522*53ee8cc1Swenshuai.xi //**************************************************************************
3523*53ee8cc1Swenshuai.xi // [Function Name]:
3524*53ee8cc1Swenshuai.xi // mhal_mhl_GetECbusStateChangeFlag()
3525*53ee8cc1Swenshuai.xi // [Description]
3526*53ee8cc1Swenshuai.xi //
3527*53ee8cc1Swenshuai.xi // [Arguments]:
3528*53ee8cc1Swenshuai.xi //
3529*53ee8cc1Swenshuai.xi // [Return]:
3530*53ee8cc1Swenshuai.xi //
3531*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetECbusStateChangeFlag(void)3532*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_GetECbusStateChangeFlag(void)
3533*53ee8cc1Swenshuai.xi {
3534*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_MHL_ECBUS_3A) &BIT(0)) ?TRUE: FALSE);
3535*53ee8cc1Swenshuai.xi
3536*53ee8cc1Swenshuai.xi if(bindex)
3537*53ee8cc1Swenshuai.xi {
3538*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(0), BIT(0));
3539*53ee8cc1Swenshuai.xi
3540*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusStateChangeProc();
3541*53ee8cc1Swenshuai.xi }
3542*53ee8cc1Swenshuai.xi
3543*53ee8cc1Swenshuai.xi return bindex;
3544*53ee8cc1Swenshuai.xi }
3545*53ee8cc1Swenshuai.xi
3546*53ee8cc1Swenshuai.xi //**************************************************************************
3547*53ee8cc1Swenshuai.xi // [Function Name]:
3548*53ee8cc1Swenshuai.xi // mhal_mhl_GetEMSCReceiveFlag()
3549*53ee8cc1Swenshuai.xi // [Description]
3550*53ee8cc1Swenshuai.xi //
3551*53ee8cc1Swenshuai.xi // [Arguments]:
3552*53ee8cc1Swenshuai.xi //
3553*53ee8cc1Swenshuai.xi // [Return]:
3554*53ee8cc1Swenshuai.xi //
3555*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetEMSCReceiveFlag(void)3556*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_GetEMSCReceiveFlag(void)
3557*53ee8cc1Swenshuai.xi {
3558*53ee8cc1Swenshuai.xi MS_BOOL bindex = ((R2BYTE(REG_MHL_ECBUS_3A) &BIT(12)) ?TRUE: FALSE);
3559*53ee8cc1Swenshuai.xi
3560*53ee8cc1Swenshuai.xi if(bindex)
3561*53ee8cc1Swenshuai.xi {
3562*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(12), BIT(12));
3563*53ee8cc1Swenshuai.xi }
3564*53ee8cc1Swenshuai.xi
3565*53ee8cc1Swenshuai.xi return bindex;
3566*53ee8cc1Swenshuai.xi }
3567*53ee8cc1Swenshuai.xi
3568*53ee8cc1Swenshuai.xi //**************************************************************************
3569*53ee8cc1Swenshuai.xi // [Function Name]:
3570*53ee8cc1Swenshuai.xi // mhal_mhl_GetEMSCSendStatus()
3571*53ee8cc1Swenshuai.xi // [Description]
3572*53ee8cc1Swenshuai.xi //
3573*53ee8cc1Swenshuai.xi // [Arguments]:
3574*53ee8cc1Swenshuai.xi //
3575*53ee8cc1Swenshuai.xi // [Return]:
3576*53ee8cc1Swenshuai.xi //
3577*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetEMSCSendStatus(void)3578*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetEMSCSendStatus(void)
3579*53ee8cc1Swenshuai.xi {
3580*53ee8cc1Swenshuai.xi MS_U8 ucSendStatus = MHL_EMSC_SEND_NONE;
3581*53ee8cc1Swenshuai.xi
3582*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(10)) // eMSC send pass interrupt.
3583*53ee8cc1Swenshuai.xi {
3584*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(10), BIT(10)); // eMSC send pass clear
3585*53ee8cc1Swenshuai.xi
3586*53ee8cc1Swenshuai.xi ucSendStatus = MHL_EMSC_SEND_PASS;
3587*53ee8cc1Swenshuai.xi }
3588*53ee8cc1Swenshuai.xi else if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(9)) // eMSC send fail interrupt.
3589*53ee8cc1Swenshuai.xi {
3590*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_34, BIT(9), BIT(9)); // eMSC send fail clear
3591*53ee8cc1Swenshuai.xi
3592*53ee8cc1Swenshuai.xi ucSendStatus = MHL_EMSC_SEND_FAIL;
3593*53ee8cc1Swenshuai.xi }
3594*53ee8cc1Swenshuai.xi
3595*53ee8cc1Swenshuai.xi return ucSendStatus;
3596*53ee8cc1Swenshuai.xi }
3597*53ee8cc1Swenshuai.xi
3598*53ee8cc1Swenshuai.xi //**************************************************************************
3599*53ee8cc1Swenshuai.xi // [Function Name]:
3600*53ee8cc1Swenshuai.xi // mhal_mhl_CBusWrite()
3601*53ee8cc1Swenshuai.xi // [Description]
3602*53ee8cc1Swenshuai.xi // MHL Cbus write trigger
3603*53ee8cc1Swenshuai.xi // [Arguments]:
3604*53ee8cc1Swenshuai.xi // *pdatabuf: Cbus tx data
3605*53ee8cc1Swenshuai.xi // [Return]:
3606*53ee8cc1Swenshuai.xi //
3607*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CBusWrite(mhalCbusFifo_S * pdatabuf)3608*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CBusWrite(mhalCbusFifo_S *pdatabuf)
3609*53ee8cc1Swenshuai.xi {
3610*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
3611*53ee8cc1Swenshuai.xi
3612*53ee8cc1Swenshuai.xi if(_mhal_mhl_IsCbusBusy())
3613*53ee8cc1Swenshuai.xi {
3614*53ee8cc1Swenshuai.xi return FALSE;
3615*53ee8cc1Swenshuai.xi }
3616*53ee8cc1Swenshuai.xi
3617*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < pdatabuf->lens; uctemp++)
3618*53ee8cc1Swenshuai.xi {
3619*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_26 +uctemp *2, pdatabuf->databuf[uctemp]);
3620*53ee8cc1Swenshuai.xi }
3621*53ee8cc1Swenshuai.xi
3622*53ee8cc1Swenshuai.xi // clear the unsed parts
3623*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_CBUS_26 +((pdatabuf->lens) *2), 0);
3624*53ee8cc1Swenshuai.xi
3625*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_25, BIT(12), BIT(12)); // trigger to send
3626*53ee8cc1Swenshuai.xi
3627*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SEND_MSC)
3628*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < pdatabuf->lens; uctemp++)
3629*53ee8cc1Swenshuai.xi {
3630*53ee8cc1Swenshuai.xi if((pdatabuf->databuf[uctemp]) &BIT(8))
3631*53ee8cc1Swenshuai.xi {
3632*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL send MSG command = %x\r\n", (pdatabuf->databuf[uctemp] &BMASK(7:0))));
3633*53ee8cc1Swenshuai.xi }
3634*53ee8cc1Swenshuai.xi else
3635*53ee8cc1Swenshuai.xi {
3636*53ee8cc1Swenshuai.xi msg_mhl(printf(" MHL send MSG data = %x\r\n", (pdatabuf->databuf[uctemp] &BMASK(7:0))));
3637*53ee8cc1Swenshuai.xi }
3638*53ee8cc1Swenshuai.xi }
3639*53ee8cc1Swenshuai.xi
3640*53ee8cc1Swenshuai.xi #endif
3641*53ee8cc1Swenshuai.xi
3642*53ee8cc1Swenshuai.xi return TRUE;
3643*53ee8cc1Swenshuai.xi }
3644*53ee8cc1Swenshuai.xi
3645*53ee8cc1Swenshuai.xi //**************************************************************************
3646*53ee8cc1Swenshuai.xi // [Function Name]:
3647*53ee8cc1Swenshuai.xi // _mhal_mhl_Cbus_SetPathEn()
3648*53ee8cc1Swenshuai.xi // [Description]:
3649*53ee8cc1Swenshuai.xi // MHL Cbus set path enable
3650*53ee8cc1Swenshuai.xi // [Arguments]:
3651*53ee8cc1Swenshuai.xi // TRUE: Enable
3652*53ee8cc1Swenshuai.xi // FALSE: Disable
3653*53ee8cc1Swenshuai.xi // [Return]:
3654*53ee8cc1Swenshuai.xi //
3655*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_Cbus_SetPathEn(MS_BOOL bflag)3656*53ee8cc1Swenshuai.xi void mhal_mhl_Cbus_SetPathEn(MS_BOOL bflag)
3657*53ee8cc1Swenshuai.xi {
3658*53ee8cc1Swenshuai.xi if(bflag) // set state to PATH_EN
3659*53ee8cc1Swenshuai.xi {
3660*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(12), BIT(12));
3661*53ee8cc1Swenshuai.xi }
3662*53ee8cc1Swenshuai.xi else // clear state to not PATH_EN
3663*53ee8cc1Swenshuai.xi {
3664*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(13), BIT(13));
3665*53ee8cc1Swenshuai.xi }
3666*53ee8cc1Swenshuai.xi }
3667*53ee8cc1Swenshuai.xi
3668*53ee8cc1Swenshuai.xi //**************************************************************************
3669*53ee8cc1Swenshuai.xi // [Function Name]:
3670*53ee8cc1Swenshuai.xi // mhal_mhl_CbusIntCB()
3671*53ee8cc1Swenshuai.xi // [Description]
3672*53ee8cc1Swenshuai.xi // MHL Cbus Interrupt Call Back function
3673*53ee8cc1Swenshuai.xi // [Arguments]:
3674*53ee8cc1Swenshuai.xi // *rcstate: recevied state, 0:normal / 1:timeout
3675*53ee8cc1Swenshuai.xi // *rccmd: recevied command
3676*53ee8cc1Swenshuai.xi // *rcdata: recevied data
3677*53ee8cc1Swenshuai.xi // *rclen: received length
3678*53ee8cc1Swenshuai.xi // *bIsCmdInData: Is command in data field
3679*53ee8cc1Swenshuai.xi // [Return]:
3680*53ee8cc1Swenshuai.xi //
3681*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIntCB(MS_U8 * rcstate,MS_U8 * rccmd,MS_U8 * rcdata,MS_U8 * rclen,MS_U8 * bIsCmdInData)3682*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusIntCB(MS_U8 *rcstate, MS_U8 *rccmd, MS_U8 *rcdata, MS_U8 *rclen, MS_U8 *bIsCmdInData)
3683*53ee8cc1Swenshuai.xi {
3684*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
3685*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
3686*53ee8cc1Swenshuai.xi MS_U16 reg_val;
3687*53ee8cc1Swenshuai.xi
3688*53ee8cc1Swenshuai.xi *rcstate = R2BYTE(REG_MHL_CBUS_3B) & 0x000F; // received state, 0: normal, 1: timeout
3689*53ee8cc1Swenshuai.xi
3690*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_CBUS_3A, BIT(0), BIT(0)); // clear INT
3691*53ee8cc1Swenshuai.xi
3692*53ee8cc1Swenshuai.xi reg_val = R2BYTE(REG_MHL_CBUS_3C);
3693*53ee8cc1Swenshuai.xi
3694*53ee8cc1Swenshuai.xi if(!(reg_val &BIT(8))) // Received data
3695*53ee8cc1Swenshuai.xi {
3696*53ee8cc1Swenshuai.xi bindex = TRUE;
3697*53ee8cc1Swenshuai.xi }
3698*53ee8cc1Swenshuai.xi
3699*53ee8cc1Swenshuai.xi *rccmd = reg_val & 0x00FF;
3700*53ee8cc1Swenshuai.xi *bIsCmdInData = FALSE;
3701*53ee8cc1Swenshuai.xi
3702*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <=(MHL_CBUS_DATA_SIZE +1); uctemp++) // offset+16bytes+EOF
3703*53ee8cc1Swenshuai.xi {
3704*53ee8cc1Swenshuai.xi reg_val = R2BYTE(REG_MHL_CBUS_3D +(uctemp *2));
3705*53ee8cc1Swenshuai.xi
3706*53ee8cc1Swenshuai.xi if(reg_val & BIT(15))
3707*53ee8cc1Swenshuai.xi {
3708*53ee8cc1Swenshuai.xi rcdata[uctemp] = reg_val & 0x00FF;
3709*53ee8cc1Swenshuai.xi
3710*53ee8cc1Swenshuai.xi if(((uctemp <= 2) ||(uctemp == (MHL_CBUS_DATA_SIZE +1))) && !(*bIsCmdInData))
3711*53ee8cc1Swenshuai.xi {
3712*53ee8cc1Swenshuai.xi *bIsCmdInData = (reg_val & BIT(8)) ? TRUE : FALSE;
3713*53ee8cc1Swenshuai.xi }
3714*53ee8cc1Swenshuai.xi }
3715*53ee8cc1Swenshuai.xi else
3716*53ee8cc1Swenshuai.xi {
3717*53ee8cc1Swenshuai.xi *rclen = uctemp;
3718*53ee8cc1Swenshuai.xi break;
3719*53ee8cc1Swenshuai.xi }
3720*53ee8cc1Swenshuai.xi }
3721*53ee8cc1Swenshuai.xi
3722*53ee8cc1Swenshuai.xi // CTS 6.3.11.19
3723*53ee8cc1Swenshuai.xi if(uctemp >(MHL_CBUS_DATA_SIZE +1))
3724*53ee8cc1Swenshuai.xi {
3725*53ee8cc1Swenshuai.xi *rclen = MHL_CBUS_DATA_SIZE +2;
3726*53ee8cc1Swenshuai.xi }
3727*53ee8cc1Swenshuai.xi
3728*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4), BIT(4)); // clear received FIFO
3729*53ee8cc1Swenshuai.xi
3730*53ee8cc1Swenshuai.xi return bindex;
3731*53ee8cc1Swenshuai.xi }
3732*53ee8cc1Swenshuai.xi
3733*53ee8cc1Swenshuai.xi //**************************************************************************
3734*53ee8cc1Swenshuai.xi // [Function Name]:
3735*53ee8cc1Swenshuai.xi // mdrv_mhl_CBusCheckBCHError()
3736*53ee8cc1Swenshuai.xi // [Description]:
3737*53ee8cc1Swenshuai.xi // MHL Cbus check BCH error
3738*53ee8cc1Swenshuai.xi // [Arguments]:
3739*53ee8cc1Swenshuai.xi //
3740*53ee8cc1Swenshuai.xi // [Return]:
3741*53ee8cc1Swenshuai.xi //
3742*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CBusCheckBCHError(void)3743*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CBusCheckBCHError(void)
3744*53ee8cc1Swenshuai.xi {
3745*53ee8cc1Swenshuai.xi MS_BOOL bindex = FALSE;
3746*53ee8cc1Swenshuai.xi
3747*53ee8cc1Swenshuai.xi return bindex;
3748*53ee8cc1Swenshuai.xi }
3749*53ee8cc1Swenshuai.xi
3750*53ee8cc1Swenshuai.xi //**************************************************************************
3751*53ee8cc1Swenshuai.xi // [Function Name]:
3752*53ee8cc1Swenshuai.xi // mhal_mhl_CablePlugProc()
3753*53ee8cc1Swenshuai.xi // [Description]
3754*53ee8cc1Swenshuai.xi //
3755*53ee8cc1Swenshuai.xi // [Arguments]:
3756*53ee8cc1Swenshuai.xi //
3757*53ee8cc1Swenshuai.xi // [Return]:
3758*53ee8cc1Swenshuai.xi //
3759*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CablePlugProc(MS_U8 ucCbusSelect)3760*53ee8cc1Swenshuai.xi void mhal_mhl_CablePlugProc(MS_U8 ucCbusSelect)
3761*53ee8cc1Swenshuai.xi {
3762*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
3763*53ee8cc1Swenshuai.xi
3764*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
3765*53ee8cc1Swenshuai.xi _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, TRUE);
3766*53ee8cc1Swenshuai.xi #endif
3767*53ee8cc1Swenshuai.xi
3768*53ee8cc1Swenshuai.xi _mhal_mhl_Mhl24bitsModeSetting(ucCbusSelect);
3769*53ee8cc1Swenshuai.xi
3770*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckInputPort(ucCbusSelect))
3771*53ee8cc1Swenshuai.xi {
3772*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(TRUE);
3773*53ee8cc1Swenshuai.xi }
3774*53ee8cc1Swenshuai.xi
3775*53ee8cc1Swenshuai.xi _mhal_mhl_ForcePullDown100K(FALSE);
3776*53ee8cc1Swenshuai.xi }
3777*53ee8cc1Swenshuai.xi
3778*53ee8cc1Swenshuai.xi //**************************************************************************
3779*53ee8cc1Swenshuai.xi // [Function Name]:
3780*53ee8cc1Swenshuai.xi // mhal_mhl_CableRemoveProc()
3781*53ee8cc1Swenshuai.xi // [Description]
3782*53ee8cc1Swenshuai.xi //
3783*53ee8cc1Swenshuai.xi // [Arguments]:
3784*53ee8cc1Swenshuai.xi //
3785*53ee8cc1Swenshuai.xi // [Return]:
3786*53ee8cc1Swenshuai.xi //
3787*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableRemoveProc(MS_U8 ucCbusSelect)3788*53ee8cc1Swenshuai.xi void mhal_mhl_CableRemoveProc(MS_U8 ucCbusSelect)
3789*53ee8cc1Swenshuai.xi {
3790*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_HDMI_RTERM);
3791*53ee8cc1Swenshuai.xi
3792*53ee8cc1Swenshuai.xi _mhal_mhl_HdmiBypassModeSetting(ucCbusSelect);
3793*53ee8cc1Swenshuai.xi
3794*53ee8cc1Swenshuai.xi // Disable ECbus state change IRQ
3795*53ee8cc1Swenshuai.xi _mhal_mhl_SetECbusStateChangeInterrupt(FALSE);
3796*53ee8cc1Swenshuai.xi // Disable eMSC receive IRQ
3797*53ee8cc1Swenshuai.xi _mhal_mhl_SetEMSCReceiveInterrupt(FALSE);
3798*53ee8cc1Swenshuai.xi
3799*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckInputPort(ucCbusSelect))
3800*53ee8cc1Swenshuai.xi {
3801*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(FALSE);
3802*53ee8cc1Swenshuai.xi }
3803*53ee8cc1Swenshuai.xi
3804*53ee8cc1Swenshuai.xi _mhal_mhl_ForcePullDown100K(TRUE);
3805*53ee8cc1Swenshuai.xi
3806*53ee8cc1Swenshuai.xi _mhal_mhl_Version3PhyEnable(ucCbusSelect, FALSE);
3807*53ee8cc1Swenshuai.xi // Disable ECbus
3808*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusEnableSetting(FALSE);
3809*53ee8cc1Swenshuai.xi // Set short read address to 0x08
3810*53ee8cc1Swenshuai.xi _mhal_mhl_SetShortReadAddress(FALSE);
3811*53ee8cc1Swenshuai.xi }
3812*53ee8cc1Swenshuai.xi
3813*53ee8cc1Swenshuai.xi //**************************************************************************
3814*53ee8cc1Swenshuai.xi // [Function Name]:
3815*53ee8cc1Swenshuai.xi // mhal_mhl_CbusConnectProc()
3816*53ee8cc1Swenshuai.xi // [Description]
3817*53ee8cc1Swenshuai.xi //
3818*53ee8cc1Swenshuai.xi // [Arguments]:
3819*53ee8cc1Swenshuai.xi //
3820*53ee8cc1Swenshuai.xi // [Return]:
3821*53ee8cc1Swenshuai.xi //
3822*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusConnectProc(MS_U8 ucCbusSelect)3823*53ee8cc1Swenshuai.xi void mhal_mhl_CbusConnectProc(MS_U8 ucCbusSelect)
3824*53ee8cc1Swenshuai.xi {
3825*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_MHL_RTERM);
3826*53ee8cc1Swenshuai.xi
3827*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
3828*53ee8cc1Swenshuai.xi _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, FALSE);
3829*53ee8cc1Swenshuai.xi #endif
3830*53ee8cc1Swenshuai.xi
3831*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(TRUE);
3832*53ee8cc1Swenshuai.xi }
3833*53ee8cc1Swenshuai.xi
3834*53ee8cc1Swenshuai.xi //**************************************************************************
3835*53ee8cc1Swenshuai.xi // [Function Name]:
3836*53ee8cc1Swenshuai.xi // mhal_mhl_CbusStucktoLowProc()
3837*53ee8cc1Swenshuai.xi // [Description]
3838*53ee8cc1Swenshuai.xi //
3839*53ee8cc1Swenshuai.xi // [Arguments]:
3840*53ee8cc1Swenshuai.xi //
3841*53ee8cc1Swenshuai.xi // [Return]:
3842*53ee8cc1Swenshuai.xi //
3843*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLowProc(MS_U8 ucCbusSelect)3844*53ee8cc1Swenshuai.xi void mhal_mhl_CbusStucktoLowProc(MS_U8 ucCbusSelect)
3845*53ee8cc1Swenshuai.xi {
3846*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
3847*53ee8cc1Swenshuai.xi
3848*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
3849*53ee8cc1Swenshuai.xi _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, TRUE);
3850*53ee8cc1Swenshuai.xi #endif
3851*53ee8cc1Swenshuai.xi
3852*53ee8cc1Swenshuai.xi mhal_mhl_CDRModeMonitor(ucCbusSelect, FALSE);
3853*53ee8cc1Swenshuai.xi // Set short read address to 0x08
3854*53ee8cc1Swenshuai.xi _mhal_mhl_SetShortReadAddress(FALSE);
3855*53ee8cc1Swenshuai.xi }
3856*53ee8cc1Swenshuai.xi
3857*53ee8cc1Swenshuai.xi //**************************************************************************
3858*53ee8cc1Swenshuai.xi // [Function Name]:
3859*53ee8cc1Swenshuai.xi // mhal_mhl_SourceChangeProc()
3860*53ee8cc1Swenshuai.xi // [Description]
3861*53ee8cc1Swenshuai.xi //
3862*53ee8cc1Swenshuai.xi // [Arguments]:
3863*53ee8cc1Swenshuai.xi //
3864*53ee8cc1Swenshuai.xi // [Return]:
3865*53ee8cc1Swenshuai.xi //
3866*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SourceChangeProc(MS_U8 ucCbusSelect)3867*53ee8cc1Swenshuai.xi void mhal_mhl_SourceChangeProc(MS_U8 ucCbusSelect)
3868*53ee8cc1Swenshuai.xi {
3869*53ee8cc1Swenshuai.xi MS_BOOL bLinkRate6GFlag = FALSE;
3870*53ee8cc1Swenshuai.xi
3871*53ee8cc1Swenshuai.xi if(ucMHL3LinkRate == MHL_AV_LINK_600)
3872*53ee8cc1Swenshuai.xi {
3873*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
3874*53ee8cc1Swenshuai.xi }
3875*53ee8cc1Swenshuai.xi
3876*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckInputPort(ucCbusSelect))
3877*53ee8cc1Swenshuai.xi {
3878*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(TRUE);
3879*53ee8cc1Swenshuai.xi }
3880*53ee8cc1Swenshuai.xi else
3881*53ee8cc1Swenshuai.xi {
3882*53ee8cc1Swenshuai.xi _mhal_mhl_AudioPathSelect(FALSE);
3883*53ee8cc1Swenshuai.xi }
3884*53ee8cc1Swenshuai.xi }
3885*53ee8cc1Swenshuai.xi
3886*53ee8cc1Swenshuai.xi //**************************************************************************
3887*53ee8cc1Swenshuai.xi // [Function Name]:
3888*53ee8cc1Swenshuai.xi // mhal_mhl_ClockModeSwitchProc()
3889*53ee8cc1Swenshuai.xi // [Description]
3890*53ee8cc1Swenshuai.xi //
3891*53ee8cc1Swenshuai.xi // [Arguments]:
3892*53ee8cc1Swenshuai.xi //
3893*53ee8cc1Swenshuai.xi // [Return]:
3894*53ee8cc1Swenshuai.xi //
3895*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ClockModeSwitchProc(MS_U8 ucCbusSelect,MS_BOOL bPPmode)3896*53ee8cc1Swenshuai.xi void mhal_mhl_ClockModeSwitchProc(MS_U8 ucCbusSelect, MS_BOOL bPPmode)
3897*53ee8cc1Swenshuai.xi {
3898*53ee8cc1Swenshuai.xi if(bPPmode)
3899*53ee8cc1Swenshuai.xi {
3900*53ee8cc1Swenshuai.xi _mhal_mhl_MhlPackedPixelModeSetting(ucCbusSelect);
3901*53ee8cc1Swenshuai.xi }
3902*53ee8cc1Swenshuai.xi else
3903*53ee8cc1Swenshuai.xi {
3904*53ee8cc1Swenshuai.xi _mhal_mhl_Mhl24bitsModeSetting(ucCbusSelect);
3905*53ee8cc1Swenshuai.xi }
3906*53ee8cc1Swenshuai.xi }
3907*53ee8cc1Swenshuai.xi
3908*53ee8cc1Swenshuai.xi //**************************************************************************
3909*53ee8cc1Swenshuai.xi // [Function Name]:
3910*53ee8cc1Swenshuai.xi // mhal_mhl_CbusWakeupIntSetting()
3911*53ee8cc1Swenshuai.xi // [Description]
3912*53ee8cc1Swenshuai.xi //
3913*53ee8cc1Swenshuai.xi // [Arguments]:
3914*53ee8cc1Swenshuai.xi //
3915*53ee8cc1Swenshuai.xi // [Return]:
3916*53ee8cc1Swenshuai.xi //
3917*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupIntSetting(MS_U8 ucCbusSelect,MS_BOOL bFlag)3918*53ee8cc1Swenshuai.xi void mhal_mhl_CbusWakeupIntSetting(MS_U8 ucCbusSelect, MS_BOOL bFlag)
3919*53ee8cc1Swenshuai.xi {
3920*53ee8cc1Swenshuai.xi if(bFlag)
3921*53ee8cc1Swenshuai.xi {
3922*53ee8cc1Swenshuai.xi _mhal_mhl_CbusForceToStandby();
3923*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(TRUE);
3924*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_CHARGE);
3925*53ee8cc1Swenshuai.xi }
3926*53ee8cc1Swenshuai.xi else
3927*53ee8cc1Swenshuai.xi {
3928*53ee8cc1Swenshuai.xi _mhal_mhl_MHLForceToAttach();
3929*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(FALSE);
3930*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3931*53ee8cc1Swenshuai.xi }
3932*53ee8cc1Swenshuai.xi }
3933*53ee8cc1Swenshuai.xi
3934*53ee8cc1Swenshuai.xi //**************************************************************************
3935*53ee8cc1Swenshuai.xi // [Function Name]:
3936*53ee8cc1Swenshuai.xi // mhal_mhl_RtermControlHWMode()
3937*53ee8cc1Swenshuai.xi // [Description]
3938*53ee8cc1Swenshuai.xi //
3939*53ee8cc1Swenshuai.xi // [Arguments]:
3940*53ee8cc1Swenshuai.xi //
3941*53ee8cc1Swenshuai.xi // [Return]:
3942*53ee8cc1Swenshuai.xi //
3943*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_RtermControlHWMode(MS_U8 ucCbusSelect,MS_BOOL bFlag)3944*53ee8cc1Swenshuai.xi void mhal_mhl_RtermControlHWMode(MS_U8 ucCbusSelect, MS_BOOL bFlag)
3945*53ee8cc1Swenshuai.xi {
3946*53ee8cc1Swenshuai.xi MS_U16 ustemp = mhal_mhl_CbusStatus();
3947*53ee8cc1Swenshuai.xi
3948*53ee8cc1Swenshuai.xi if(!bFlag) // HW to SW control rterm
3949*53ee8cc1Swenshuai.xi {
3950*53ee8cc1Swenshuai.xi if((ustemp & BMASK(1:0)) == 0x03)
3951*53ee8cc1Swenshuai.xi {
3952*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_MHL_RTERM);
3953*53ee8cc1Swenshuai.xi }
3954*53ee8cc1Swenshuai.xi else
3955*53ee8cc1Swenshuai.xi {
3956*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
3957*53ee8cc1Swenshuai.xi }
3958*53ee8cc1Swenshuai.xi }
3959*53ee8cc1Swenshuai.xi
3960*53ee8cc1Swenshuai.xi _mhal_mhl_RtermHWControl(ucCbusSelect, bFlag);
3961*53ee8cc1Swenshuai.xi }
3962*53ee8cc1Swenshuai.xi
3963*53ee8cc1Swenshuai.xi //**************************************************************************
3964*53ee8cc1Swenshuai.xi // [Function Name]:
3965*53ee8cc1Swenshuai.xi // mhal_mhl_AdjustSettingIControl()
3966*53ee8cc1Swenshuai.xi // [Description]
3967*53ee8cc1Swenshuai.xi //
3968*53ee8cc1Swenshuai.xi // [Arguments]:
3969*53ee8cc1Swenshuai.xi //
3970*53ee8cc1Swenshuai.xi // [Return]:
3971*53ee8cc1Swenshuai.xi //
3972*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_AdjustSettingIControl(MS_U8 ucIControl)3973*53ee8cc1Swenshuai.xi void mhal_mhl_AdjustSettingIControl(MS_U8 ucIControl)
3974*53ee8cc1Swenshuai.xi {
3975*53ee8cc1Swenshuai.xi ucIControlValue = ucIControl;
3976*53ee8cc1Swenshuai.xi }
3977*53ee8cc1Swenshuai.xi
3978*53ee8cc1Swenshuai.xi //**************************************************************************
3979*53ee8cc1Swenshuai.xi // [Function Name]:
3980*53ee8cc1Swenshuai.xi // mhal_mhl_AdjustImpedanceSetting()
3981*53ee8cc1Swenshuai.xi // [Description]
3982*53ee8cc1Swenshuai.xi //
3983*53ee8cc1Swenshuai.xi // [Arguments]:
3984*53ee8cc1Swenshuai.xi //
3985*53ee8cc1Swenshuai.xi // [Return]:
3986*53ee8cc1Swenshuai.xi //
3987*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)3988*53ee8cc1Swenshuai.xi void mhal_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)
3989*53ee8cc1Swenshuai.xi {
3990*53ee8cc1Swenshuai.xi ucImpedanceValue = ucImpedance;
3991*53ee8cc1Swenshuai.xi }
3992*53ee8cc1Swenshuai.xi
3993*53ee8cc1Swenshuai.xi //**************************************************************************
3994*53ee8cc1Swenshuai.xi // [Function Name]:
3995*53ee8cc1Swenshuai.xi // mhal_mhl_GetSignalStableFlag()
3996*53ee8cc1Swenshuai.xi // [Description]
3997*53ee8cc1Swenshuai.xi //
3998*53ee8cc1Swenshuai.xi // [Arguments]:
3999*53ee8cc1Swenshuai.xi //
4000*53ee8cc1Swenshuai.xi // [Return]:
4001*53ee8cc1Swenshuai.xi //
4002*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetSignalStableFlag(void)4003*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_GetSignalStableFlag(void)
4004*53ee8cc1Swenshuai.xi {
4005*53ee8cc1Swenshuai.xi return bMHLSignalStable;
4006*53ee8cc1Swenshuai.xi }
4007*53ee8cc1Swenshuai.xi
4008*53ee8cc1Swenshuai.xi //**************************************************************************
4009*53ee8cc1Swenshuai.xi // [Function Name]:
4010*53ee8cc1Swenshuai.xi // mhal_mhl_PowerControl()
4011*53ee8cc1Swenshuai.xi // [Description]
4012*53ee8cc1Swenshuai.xi // MHL power control
4013*53ee8cc1Swenshuai.xi // [Arguments]:
4014*53ee8cc1Swenshuai.xi //
4015*53ee8cc1Swenshuai.xi // [Return]:
4016*53ee8cc1Swenshuai.xi //
4017*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadPowerOnTbl(void)4018*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerOnTbl(void)
4019*53ee8cc1Swenshuai.xi {
4020*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4021*53ee8cc1Swenshuai.xi
4022*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_ON_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
4023*53ee8cc1Swenshuai.xi {
4024*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_POWER_ON_TABLE[uctemp].addr, tMHL_POWER_ON_TABLE[uctemp].databuf, tMHL_POWER_ON_TABLE[uctemp].mask);
4025*53ee8cc1Swenshuai.xi }
4026*53ee8cc1Swenshuai.xi
4027*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
4028*53ee8cc1Swenshuai.xi {
4029*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(uctemp, RX_HDMI_RTERM);
4030*53ee8cc1Swenshuai.xi }
4031*53ee8cc1Swenshuai.xi }
4032*53ee8cc1Swenshuai.xi
mhal_mhl_LoadPowerStandbyTbl(void)4033*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerStandbyTbl(void)
4034*53ee8cc1Swenshuai.xi {
4035*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4036*53ee8cc1Swenshuai.xi
4037*53ee8cc1Swenshuai.xi //_mhal_mhl_CbusForceToStandby();
4038*53ee8cc1Swenshuai.xi
4039*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_SAVING_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
4040*53ee8cc1Swenshuai.xi {
4041*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_POWER_SAVING_TABLE[uctemp].addr, tMHL_POWER_SAVING_TABLE[uctemp].databuf, tMHL_POWER_SAVING_TABLE[uctemp].mask);
4042*53ee8cc1Swenshuai.xi }
4043*53ee8cc1Swenshuai.xi
4044*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
4045*53ee8cc1Swenshuai.xi {
4046*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(uctemp, RX_RTERM_OFF);
4047*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(uctemp, VBUS_SW_CHARGE);
4048*53ee8cc1Swenshuai.xi }
4049*53ee8cc1Swenshuai.xi }
4050*53ee8cc1Swenshuai.xi
mhal_mhl_LoadPowerDownTbl(void)4051*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerDownTbl(void)
4052*53ee8cc1Swenshuai.xi {
4053*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4054*53ee8cc1Swenshuai.xi
4055*53ee8cc1Swenshuai.xi //_mhal_mhl_CbusForceToStandby();
4056*53ee8cc1Swenshuai.xi
4057*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_DOWN_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
4058*53ee8cc1Swenshuai.xi {
4059*53ee8cc1Swenshuai.xi W2BYTEMSK(tMHL_POWER_DOWN_TABLE[uctemp].addr, tMHL_POWER_DOWN_TABLE[uctemp].databuf, tMHL_POWER_DOWN_TABLE[uctemp].mask);
4060*53ee8cc1Swenshuai.xi }
4061*53ee8cc1Swenshuai.xi
4062*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
4063*53ee8cc1Swenshuai.xi {
4064*53ee8cc1Swenshuai.xi _mhal_mhl_RxRtermControl(uctemp, RX_RTERM_OFF);
4065*53ee8cc1Swenshuai.xi }
4066*53ee8cc1Swenshuai.xi }
4067*53ee8cc1Swenshuai.xi
4068*53ee8cc1Swenshuai.xi //**************************************************************************
4069*53ee8cc1Swenshuai.xi // [Function Name]:
4070*53ee8cc1Swenshuai.xi // mhal_mhl_SetHPD()
4071*53ee8cc1Swenshuai.xi // [Description]
4072*53ee8cc1Swenshuai.xi // config HPD in combo(MHL/HDMI) port A
4073*53ee8cc1Swenshuai.xi // [Arguments]:
4074*53ee8cc1Swenshuai.xi //
4075*53ee8cc1Swenshuai.xi // [Return]:
4076*53ee8cc1Swenshuai.xi //
4077*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetHPD(MS_BOOL bflag)4078*53ee8cc1Swenshuai.xi void mhal_mhl_SetHPD(MS_BOOL bflag)
4079*53ee8cc1Swenshuai.xi {
4080*53ee8cc1Swenshuai.xi if(bflag) // HPD is high
4081*53ee8cc1Swenshuai.xi {
4082*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(3), BMASK(4:3)); // [4]: output val, [3]: oen
4083*53ee8cc1Swenshuai.xi //msg_mhl(printf("**MHL_HPD is High"));
4084*53ee8cc1Swenshuai.xi }
4085*53ee8cc1Swenshuai.xi else // hpd is low
4086*53ee8cc1Swenshuai.xi {
4087*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(4:3)); // [4]: output val, [3]: oen
4088*53ee8cc1Swenshuai.xi //msg_mhl(printf("**MHL_HPD is Low"));
4089*53ee8cc1Swenshuai.xi }
4090*53ee8cc1Swenshuai.xi }
4091*53ee8cc1Swenshuai.xi
4092*53ee8cc1Swenshuai.xi //**************************************************************************
4093*53ee8cc1Swenshuai.xi // [Function Name]:
4094*53ee8cc1Swenshuai.xi // mhal_mhl_GetDDCErrorCode()
4095*53ee8cc1Swenshuai.xi // [Description]
4096*53ee8cc1Swenshuai.xi // Get DDC error code
4097*53ee8cc1Swenshuai.xi // [Arguments]:
4098*53ee8cc1Swenshuai.xi //
4099*53ee8cc1Swenshuai.xi // [Return]:
4100*53ee8cc1Swenshuai.xi //
4101*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetDDCErrorCode(void)4102*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetDDCErrorCode(void)
4103*53ee8cc1Swenshuai.xi {
4104*53ee8cc1Swenshuai.xi return (R2BYTE(REG_MHL_CBUS_21)>>8);
4105*53ee8cc1Swenshuai.xi }
4106*53ee8cc1Swenshuai.xi
4107*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE == MHL_CBUS_HW_REPLY_MODE)
4108*53ee8cc1Swenshuai.xi //**************************************************************************
4109*53ee8cc1Swenshuai.xi // [Function Name]:
4110*53ee8cc1Swenshuai.xi // mhal_mhl_CheckSRAMReceiveBuffer()
4111*53ee8cc1Swenshuai.xi // [Description]
4112*53ee8cc1Swenshuai.xi //
4113*53ee8cc1Swenshuai.xi // [Arguments]:
4114*53ee8cc1Swenshuai.xi //
4115*53ee8cc1Swenshuai.xi // [Return]:
4116*53ee8cc1Swenshuai.xi //
4117*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckSRAMReceiveBuffer(void)4118*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckSRAMReceiveBuffer(void)
4119*53ee8cc1Swenshuai.xi {
4120*53ee8cc1Swenshuai.xi return ((R2BYTE(REG_MHL_CBUS_10) &BIT(4)) ?FALSE: TRUE);
4121*53ee8cc1Swenshuai.xi }
4122*53ee8cc1Swenshuai.xi
4123*53ee8cc1Swenshuai.xi //**************************************************************************
4124*53ee8cc1Swenshuai.xi // [Function Name]:
4125*53ee8cc1Swenshuai.xi // mhal_mhl_GetSRAMReceiveData()
4126*53ee8cc1Swenshuai.xi // [Description]
4127*53ee8cc1Swenshuai.xi //
4128*53ee8cc1Swenshuai.xi // [Arguments]:
4129*53ee8cc1Swenshuai.xi //
4130*53ee8cc1Swenshuai.xi // [Return]:
4131*53ee8cc1Swenshuai.xi //
4132*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetSRAMReceiveData(void)4133*53ee8cc1Swenshuai.xi MS_U16 mhal_mhl_GetSRAMReceiveData(void)
4134*53ee8cc1Swenshuai.xi {
4135*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_CBUS_10, BIT(15), BIT(15));
4136*53ee8cc1Swenshuai.xi
4137*53ee8cc1Swenshuai.xi while((R2BYTE(REG_MHL_CBUS_10) & BIT(14)) == BIT(14));
4138*53ee8cc1Swenshuai.xi
4139*53ee8cc1Swenshuai.xi return R2BYTE(REG_MHL_CBUS_0F);
4140*53ee8cc1Swenshuai.xi }
4141*53ee8cc1Swenshuai.xi
4142*53ee8cc1Swenshuai.xi #endif
4143*53ee8cc1Swenshuai.xi
4144*53ee8cc1Swenshuai.xi #if(DMHL_TEST_SIGNAL_SUPPORT)
4145*53ee8cc1Swenshuai.xi //**************************************************************************
4146*53ee8cc1Swenshuai.xi // [Function Name]:
4147*53ee8cc1Swenshuai.xi // mhal_mhl_AdjustCommonModeResistor()
4148*53ee8cc1Swenshuai.xi // [Description]:
4149*53ee8cc1Swenshuai.xi //
4150*53ee8cc1Swenshuai.xi // [Arguments]:
4151*53ee8cc1Swenshuai.xi //
4152*53ee8cc1Swenshuai.xi // [Return]:
4153*53ee8cc1Swenshuai.xi //
4154*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_TestSignal(MS_BOOL bflag)4155*53ee8cc1Swenshuai.xi void mhal_mhl_TestSignal(MS_BOOL bflag)
4156*53ee8cc1Swenshuai.xi {
4157*53ee8cc1Swenshuai.xi if(bflag)
4158*53ee8cc1Swenshuai.xi {
4159*53ee8cc1Swenshuai.xi W2BYTEMSK(0x001106, BIT(10), BIT(10));
4160*53ee8cc1Swenshuai.xi }
4161*53ee8cc1Swenshuai.xi else
4162*53ee8cc1Swenshuai.xi {
4163*53ee8cc1Swenshuai.xi W2BYTEMSK(0x001106, 0, BIT(10));
4164*53ee8cc1Swenshuai.xi }
4165*53ee8cc1Swenshuai.xi }
4166*53ee8cc1Swenshuai.xi
4167*53ee8cc1Swenshuai.xi #endif
4168*53ee8cc1Swenshuai.xi
4169*53ee8cc1Swenshuai.xi //**************************************************************************
4170*53ee8cc1Swenshuai.xi // [Function Name]:
4171*53ee8cc1Swenshuai.xi // mhal_mhl_SetMainLinkRate()
4172*53ee8cc1Swenshuai.xi // [Description]
4173*53ee8cc1Swenshuai.xi //
4174*53ee8cc1Swenshuai.xi // [Arguments]:
4175*53ee8cc1Swenshuai.xi //
4176*53ee8cc1Swenshuai.xi // [Return]:
4177*53ee8cc1Swenshuai.xi //
4178*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetMainLinkRate(MS_U8 ucCbusSelect,MS_U8 ucLinkRate)4179*53ee8cc1Swenshuai.xi void mhal_mhl_SetMainLinkRate(MS_U8 ucCbusSelect, MS_U8 ucLinkRate)
4180*53ee8cc1Swenshuai.xi {
4181*53ee8cc1Swenshuai.xi MS_BOOL bLinkRate6GFlag = FALSE;
4182*53ee8cc1Swenshuai.xi
4183*53ee8cc1Swenshuai.xi _mhal_mhl_Version3PhyEnable(ucCbusSelect, TRUE);
4184*53ee8cc1Swenshuai.xi
4185*53ee8cc1Swenshuai.xi switch(ucCbusSelect)
4186*53ee8cc1Swenshuai.xi {
4187*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
4188*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTA:
4189*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTA())
4190*53ee8cc1Swenshuai.xi {
4191*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4192*53ee8cc1Swenshuai.xi {
4193*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4194*53ee8cc1Swenshuai.xi }
4195*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4196*53ee8cc1Swenshuai.xi {
4197*53ee8cc1Swenshuai.xi
4198*53ee8cc1Swenshuai.xi }
4199*53ee8cc1Swenshuai.xi
4200*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P0_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4201*53ee8cc1Swenshuai.xi }
4202*53ee8cc1Swenshuai.xi
4203*53ee8cc1Swenshuai.xi break;
4204*53ee8cc1Swenshuai.xi #endif
4205*53ee8cc1Swenshuai.xi
4206*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
4207*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTB:
4208*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTB())
4209*53ee8cc1Swenshuai.xi {
4210*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4211*53ee8cc1Swenshuai.xi {
4212*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4213*53ee8cc1Swenshuai.xi }
4214*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4215*53ee8cc1Swenshuai.xi {
4216*53ee8cc1Swenshuai.xi
4217*53ee8cc1Swenshuai.xi }
4218*53ee8cc1Swenshuai.xi
4219*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P1_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4220*53ee8cc1Swenshuai.xi }
4221*53ee8cc1Swenshuai.xi
4222*53ee8cc1Swenshuai.xi break;
4223*53ee8cc1Swenshuai.xi #endif
4224*53ee8cc1Swenshuai.xi
4225*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
4226*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTC:
4227*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTC())
4228*53ee8cc1Swenshuai.xi {
4229*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4230*53ee8cc1Swenshuai.xi {
4231*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4232*53ee8cc1Swenshuai.xi }
4233*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4234*53ee8cc1Swenshuai.xi {
4235*53ee8cc1Swenshuai.xi
4236*53ee8cc1Swenshuai.xi }
4237*53ee8cc1Swenshuai.xi
4238*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P2_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4239*53ee8cc1Swenshuai.xi }
4240*53ee8cc1Swenshuai.xi
4241*53ee8cc1Swenshuai.xi break;
4242*53ee8cc1Swenshuai.xi #endif
4243*53ee8cc1Swenshuai.xi
4244*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
4245*53ee8cc1Swenshuai.xi case MHL_CBUS_SELECT_PORTD:
4246*53ee8cc1Swenshuai.xi if(GET_MHL_PATH_SUPPORT_PORTD())
4247*53ee8cc1Swenshuai.xi {
4248*53ee8cc1Swenshuai.xi if(ucLinkRate == MHL_AV_LINK_600)
4249*53ee8cc1Swenshuai.xi {
4250*53ee8cc1Swenshuai.xi bLinkRate6GFlag = TRUE;
4251*53ee8cc1Swenshuai.xi }
4252*53ee8cc1Swenshuai.xi else // MHL_AV_LINK_150 or MHL_AV_LINK_300
4253*53ee8cc1Swenshuai.xi {
4254*53ee8cc1Swenshuai.xi
4255*53ee8cc1Swenshuai.xi }
4256*53ee8cc1Swenshuai.xi
4257*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_COMBO_PHY1_P3_0D_L, (ucLinkRate << 12), BMASK(13:12)); // [13:12]: Select MHL3 data rate
4258*53ee8cc1Swenshuai.xi }
4259*53ee8cc1Swenshuai.xi
4260*53ee8cc1Swenshuai.xi break;
4261*53ee8cc1Swenshuai.xi #endif
4262*53ee8cc1Swenshuai.xi
4263*53ee8cc1Swenshuai.xi default:
4264*53ee8cc1Swenshuai.xi
4265*53ee8cc1Swenshuai.xi break;
4266*53ee8cc1Swenshuai.xi };
4267*53ee8cc1Swenshuai.xi
4268*53ee8cc1Swenshuai.xi ucMHL3LinkRate = ucLinkRate;
4269*53ee8cc1Swenshuai.xi }
4270*53ee8cc1Swenshuai.xi
4271*53ee8cc1Swenshuai.xi //**************************************************************************
4272*53ee8cc1Swenshuai.xi // [Function Name]:
4273*53ee8cc1Swenshuai.xi // mhal_mhl_GetECbusStatusFlag()
4274*53ee8cc1Swenshuai.xi // [Description]:
4275*53ee8cc1Swenshuai.xi //
4276*53ee8cc1Swenshuai.xi // [Arguments]:
4277*53ee8cc1Swenshuai.xi //
4278*53ee8cc1Swenshuai.xi // [Return]:
4279*53ee8cc1Swenshuai.xi //
4280*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetECbusStatusFlag(void)4281*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetECbusStatusFlag(void)
4282*53ee8cc1Swenshuai.xi {
4283*53ee8cc1Swenshuai.xi MS_U8 ucTrainState = (R2BYTE(REG_MHL_ECBUS_PHY_69) >> 12);
4284*53ee8cc1Swenshuai.xi MS_U8 ucECbusStatusFlag = 0;
4285*53ee8cc1Swenshuai.xi
4286*53ee8cc1Swenshuai.xi if((ucECbusTrainState < MHL_ECBUS_STATE_FAIL) && (ucECbusTrainState >= MHL_ECBUS_STATE_SOURCE_ACTIVE))
4287*53ee8cc1Swenshuai.xi {
4288*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_TRAINING_PASS;
4289*53ee8cc1Swenshuai.xi }
4290*53ee8cc1Swenshuai.xi
4291*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_PHY_6F) &BIT(13)) // [13]: ECbus clock lock flag
4292*53ee8cc1Swenshuai.xi {
4293*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_CLOCK_LOCK;
4294*53ee8cc1Swenshuai.xi }
4295*53ee8cc1Swenshuai.xi
4296*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.
4297*53ee8cc1Swenshuai.xi {
4298*53ee8cc1Swenshuai.xi //W2BYTEMSK(REG_MHL_ECBUS_PHY_56, 0x0200, BMASK(15:0)); // for auto train
4299*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_AUTO_TRAINING)
4300*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_PHY_4A, 0, BIT(13));
4301*53ee8cc1Swenshuai.xi #endif
4302*53ee8cc1Swenshuai.xi }
4303*53ee8cc1Swenshuai.xi
4304*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(7)) // REG_MHL_CBUS2_3A[7]
4305*53ee8cc1Swenshuai.xi {
4306*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_SLOT_SYNC_DONE;
4307*53ee8cc1Swenshuai.xi }
4308*53ee8cc1Swenshuai.xi
4309*53ee8cc1Swenshuai.xi if(R2BYTE(REG_MHL_ECBUS_3A) &BIT(15)) // REG_MHL_CBUS2_3A[15]
4310*53ee8cc1Swenshuai.xi {
4311*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_EMSC_SYNC_DONE;
4312*53ee8cc1Swenshuai.xi }
4313*53ee8cc1Swenshuai.xi
4314*53ee8cc1Swenshuai.xi if(ucECbusTrainFailCount > 10)
4315*53ee8cc1Swenshuai.xi {
4316*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_RETRY_TIMEOUT;
4317*53ee8cc1Swenshuai.xi
4318*53ee8cc1Swenshuai.xi ucECbusTrainFailCount = 0;
4319*53ee8cc1Swenshuai.xi }
4320*53ee8cc1Swenshuai.xi
4321*53ee8cc1Swenshuai.xi return ucECbusStatusFlag;
4322*53ee8cc1Swenshuai.xi }
4323*53ee8cc1Swenshuai.xi
4324*53ee8cc1Swenshuai.xi //**************************************************************************
4325*53ee8cc1Swenshuai.xi // [Function Name]:
4326*53ee8cc1Swenshuai.xi // mhal_mhl_ECbusEventProc()
4327*53ee8cc1Swenshuai.xi // [Description]
4328*53ee8cc1Swenshuai.xi //
4329*53ee8cc1Swenshuai.xi // [Arguments]:
4330*53ee8cc1Swenshuai.xi //
4331*53ee8cc1Swenshuai.xi // [Return]:
4332*53ee8cc1Swenshuai.xi //
4333*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ECbusEventProc(MS_U8 ucCbusSelect,MS_U8 ucECbusEvent)4334*53ee8cc1Swenshuai.xi void mhal_mhl_ECbusEventProc(MS_U8 ucCbusSelect, MS_U8 ucECbusEvent)
4335*53ee8cc1Swenshuai.xi {
4336*53ee8cc1Swenshuai.xi static MS_U8 ucECbusState = MHL_ECBUS_STATE_DISABLE;
4337*53ee8cc1Swenshuai.xi
4338*53ee8cc1Swenshuai.xi if(ucECbusTrainState != ucECbusState)
4339*53ee8cc1Swenshuai.xi {
4340*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL eCbus state %x\r\n", ucECbusTrainState));
4341*53ee8cc1Swenshuai.xi
4342*53ee8cc1Swenshuai.xi ucECbusState = ucECbusTrainState;
4343*53ee8cc1Swenshuai.xi }
4344*53ee8cc1Swenshuai.xi
4345*53ee8cc1Swenshuai.xi switch(ucECbusEvent)
4346*53ee8cc1Swenshuai.xi {
4347*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_PREPARE_MODE_UP:
4348*53ee8cc1Swenshuai.xi // Disable stuck to low interrupt
4349*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(FALSE);
4350*53ee8cc1Swenshuai.xi // Disable connect detect
4351*53ee8cc1Swenshuai.xi _mhal_mhl_CbusConnectCheckEnable(FALSE);
4352*53ee8cc1Swenshuai.xi
4353*53ee8cc1Swenshuai.xi break;
4354*53ee8cc1Swenshuai.xi
4355*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_MODE_UP_PROCESS:
4356*53ee8cc1Swenshuai.xi // Enable ECbus
4357*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusEnableSetting(TRUE);
4358*53ee8cc1Swenshuai.xi // Set short read address to 0x70
4359*53ee8cc1Swenshuai.xi _mhal_mhl_SetShortReadAddress(TRUE);
4360*53ee8cc1Swenshuai.xi // Enable ECbus state change IRQ
4361*53ee8cc1Swenshuai.xi _mhal_mhl_SetECbusStateChangeInterrupt(TRUE);
4362*53ee8cc1Swenshuai.xi // Enable eMSC receive IRQ
4363*53ee8cc1Swenshuai.xi _mhal_mhl_SetEMSCReceiveInterrupt(TRUE);
4364*53ee8cc1Swenshuai.xi
4365*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusModeUpProc();
4366*53ee8cc1Swenshuai.xi
4367*53ee8cc1Swenshuai.xi ucECbusTrainFailCount = 0;
4368*53ee8cc1Swenshuai.xi
4369*53ee8cc1Swenshuai.xi break;
4370*53ee8cc1Swenshuai.xi
4371*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_PREPARE_MODE_DOWN:
4372*53ee8cc1Swenshuai.xi
4373*53ee8cc1Swenshuai.xi break;
4374*53ee8cc1Swenshuai.xi
4375*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_MODE_DOWN_PROCESS:
4376*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_STUCK_TO_LOW:
4377*53ee8cc1Swenshuai.xi // Enable connect detect
4378*53ee8cc1Swenshuai.xi _mhal_mhl_CbusConnectCheckEnable(TRUE);
4379*53ee8cc1Swenshuai.xi // Disable ECbus
4380*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusEnableSetting(FALSE);
4381*53ee8cc1Swenshuai.xi // Clear short read address to 0x08
4382*53ee8cc1Swenshuai.xi _mhal_mhl_SetShortReadAddress(FALSE);
4383*53ee8cc1Swenshuai.xi // Disable ECbus state change IRQ
4384*53ee8cc1Swenshuai.xi _mhal_mhl_SetECbusStateChangeInterrupt(FALSE);
4385*53ee8cc1Swenshuai.xi // Disable eMSC receive IRQ
4386*53ee8cc1Swenshuai.xi _mhal_mhl_SetEMSCReceiveInterrupt(FALSE);
4387*53ee8cc1Swenshuai.xi // Disable MHL3 phy
4388*53ee8cc1Swenshuai.xi _mhal_mhl_Version3PhyEnable(ucCbusSelect, FALSE);
4389*53ee8cc1Swenshuai.xi // Reset all status
4390*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_ECBUS_34, 0xFFFF);
4391*53ee8cc1Swenshuai.xi
4392*53ee8cc1Swenshuai.xi _mhal_mhl_CbusEngineReset();
4393*53ee8cc1Swenshuai.xi
4394*53ee8cc1Swenshuai.xi break;
4395*53ee8cc1Swenshuai.xi
4396*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_UNLOCK_RESET:
4397*53ee8cc1Swenshuai.xi //_mhal_mhl_ECbusDmuxEnable(FALSE);
4398*53ee8cc1Swenshuai.xi _mhal_mhl_ECbusStateReset();
4399*53ee8cc1Swenshuai.xi
4400*53ee8cc1Swenshuai.xi ucECbusTrainFailCount = 0;
4401*53ee8cc1Swenshuai.xi
4402*53ee8cc1Swenshuai.xi break;
4403*53ee8cc1Swenshuai.xi
4404*53ee8cc1Swenshuai.xi #if(MHL_ECBUS_COMMAND_PARSING)
4405*53ee8cc1Swenshuai.xi case MHL_ECBUS_EVENT_ECBUS_COMMAND_PARSING:
4406*53ee8cc1Swenshuai.xi _mhal_mhl_GetECbusCommand();
4407*53ee8cc1Swenshuai.xi
4408*53ee8cc1Swenshuai.xi break;
4409*53ee8cc1Swenshuai.xi
4410*53ee8cc1Swenshuai.xi #endif
4411*53ee8cc1Swenshuai.xi
4412*53ee8cc1Swenshuai.xi default:
4413*53ee8cc1Swenshuai.xi
4414*53ee8cc1Swenshuai.xi break;
4415*53ee8cc1Swenshuai.xi };
4416*53ee8cc1Swenshuai.xi }
4417*53ee8cc1Swenshuai.xi
4418*53ee8cc1Swenshuai.xi //**************************************************************************
4419*53ee8cc1Swenshuai.xi // [Function Name]:
4420*53ee8cc1Swenshuai.xi // mhal_mhl_GetEMSCReceiveData()
4421*53ee8cc1Swenshuai.xi // [Description]
4422*53ee8cc1Swenshuai.xi //
4423*53ee8cc1Swenshuai.xi // [Arguments]:
4424*53ee8cc1Swenshuai.xi //
4425*53ee8cc1Swenshuai.xi // [Return]:
4426*53ee8cc1Swenshuai.xi //
4427*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetEMSCReceiveData(MS_U8 * bReveiceEMSC)4428*53ee8cc1Swenshuai.xi void mhal_mhl_GetEMSCReceiveData(MS_U8 *bReveiceEMSC)
4429*53ee8cc1Swenshuai.xi {
4430*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4431*53ee8cc1Swenshuai.xi MS_U16 usEMSCFreeBuffer = 0;
4432*53ee8cc1Swenshuai.xi
4433*53ee8cc1Swenshuai.xi usEMSCFreeBuffer = (R2BYTE(REG_MHL_ECBUS_24) &BMASK(9:0)); // REG_MHL_ECBUS_24[9:0]
4434*53ee8cc1Swenshuai.xi
4435*53ee8cc1Swenshuai.xi usEMSCFreeBuffer = MHL_EMSC_DATA_SIZE - usEMSCFreeBuffer;
4436*53ee8cc1Swenshuai.xi
4437*53ee8cc1Swenshuai.xi bReveiceEMSC[0] = usEMSCFreeBuffer;
4438*53ee8cc1Swenshuai.xi
4439*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL eMSC length %d\r\n", usEMSCFreeBuffer));
4440*53ee8cc1Swenshuai.xi
4441*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < usEMSCFreeBuffer; uctemp++)
4442*53ee8cc1Swenshuai.xi {
4443*53ee8cc1Swenshuai.xi bReveiceEMSC[uctemp +1] = _mhal_mhl_GetSRAMReceiveEMSCData();
4444*53ee8cc1Swenshuai.xi
4445*53ee8cc1Swenshuai.xi if(uctemp == 1) // Check length remaining
4446*53ee8cc1Swenshuai.xi {
4447*53ee8cc1Swenshuai.xi usEMSCFreeBuffer = bReveiceEMSC[uctemp +1] +2;
4448*53ee8cc1Swenshuai.xi }
4449*53ee8cc1Swenshuai.xi
4450*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL eMSC data %x\r\n", bReveiceEMSC[uctemp +1]));
4451*53ee8cc1Swenshuai.xi }
4452*53ee8cc1Swenshuai.xi
4453*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1C, usEMSCFreeBuffer, BMASK(9:0));
4454*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1C, BIT(15), BIT(15));
4455*53ee8cc1Swenshuai.xi }
4456*53ee8cc1Swenshuai.xi
4457*53ee8cc1Swenshuai.xi //**************************************************************************
4458*53ee8cc1Swenshuai.xi // [Function Name]:
4459*53ee8cc1Swenshuai.xi // mhal_mhl_InsertEMSCSendData()
4460*53ee8cc1Swenshuai.xi // [Description]
4461*53ee8cc1Swenshuai.xi //
4462*53ee8cc1Swenshuai.xi // [Arguments]:
4463*53ee8cc1Swenshuai.xi //
4464*53ee8cc1Swenshuai.xi // [Return]:
4465*53ee8cc1Swenshuai.xi //
4466*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InsertEMSCSendData(MS_U8 ucLength,MS_U8 * bSendEMSC)4467*53ee8cc1Swenshuai.xi void mhal_mhl_InsertEMSCSendData(MS_U8 ucLength, MS_U8 *bSendEMSC)
4468*53ee8cc1Swenshuai.xi {
4469*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4470*53ee8cc1Swenshuai.xi MS_U16 usPayloadCRC = 0xFFFF;
4471*53ee8cc1Swenshuai.xi
4472*53ee8cc1Swenshuai.xi if((ucLength > 0) && (bSendEMSC != NULL))
4473*53ee8cc1Swenshuai.xi {
4474*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1B, (ucLength -1), BMASK(9:0)); // Request command byte count
4475*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_79, _mhal_mhl_GetEMSCTwoByteCRC(0, (ucLength -1)) , BMASK(2:0)); // byte count CRC
4476*53ee8cc1Swenshuai.xi
4477*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_21, 0, BMASK(9:0)); // SRAM address set 0
4478*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_21, BIT(13), BIT(13)); // Trigger address
4479*53ee8cc1Swenshuai.xi
4480*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < ucLength; uctemp++)
4481*53ee8cc1Swenshuai.xi {
4482*53ee8cc1Swenshuai.xi _mhal_mhl_InsertSRAMSendEMSCData(bSendEMSC[uctemp]);
4483*53ee8cc1Swenshuai.xi
4484*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL payload value %x\r\n", bSendEMSC[uctemp]));
4485*53ee8cc1Swenshuai.xi
4486*53ee8cc1Swenshuai.xi usPayloadCRC = _mhal_mhl_GetEMSCPayloadCRC(bSendEMSC[uctemp], usPayloadCRC);
4487*53ee8cc1Swenshuai.xi }
4488*53ee8cc1Swenshuai.xi
4489*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_19, BIT(15), BIT(15)); // eMSC payload CRC ove
4490*53ee8cc1Swenshuai.xi W2BYTE(REG_MHL_ECBUS_1A, (usPayloadCRC ^0xFFFF)); // eMSC payload CRC value
4491*53ee8cc1Swenshuai.xi
4492*53ee8cc1Swenshuai.xi msg_mhl(printf("** MHL payload CRC value %x\r\n", (usPayloadCRC ^0xFFFF)));
4493*53ee8cc1Swenshuai.xi
4494*53ee8cc1Swenshuai.xi W2BYTEMSK(REG_MHL_ECBUS_1B, BIT(15), BIT(15)); // REG_MHL_ECBUS2_1B[15]
4495*53ee8cc1Swenshuai.xi }
4496*53ee8cc1Swenshuai.xi }
4497*53ee8cc1Swenshuai.xi
4498*53ee8cc1Swenshuai.xi #endif // _MHAL_MHL_C_
4499*53ee8cc1Swenshuai.xi
4500