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