xref: /utopia/UTPA2-700.0.x/modules/hdmi/hal/maldives/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 
115*53ee8cc1Swenshuai.xi #define DMHLInit    0
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
118*53ee8cc1Swenshuai.xi //  Local Structures
119*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
120*53ee8cc1Swenshuai.xi typedef struct
121*53ee8cc1Swenshuai.xi {
122*53ee8cc1Swenshuai.xi     MS_U32 addr;
123*53ee8cc1Swenshuai.xi     MS_U16 mask;
124*53ee8cc1Swenshuai.xi     MS_U16 databuf;
125*53ee8cc1Swenshuai.xi } msLoadTbl_S;
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
128*53ee8cc1Swenshuai.xi //  Global Variables
129*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
130*53ee8cc1Swenshuai.xi MS_BOOL bMHLSignalStable = FALSE;
131*53ee8cc1Swenshuai.xi MS_U8 ucMHLSupportPort = E_MUX_NOT_SUPPORT_MHL;
132*53ee8cc1Swenshuai.xi MS_U8 ucIControlValue = MHL_ICONTROL_VALUE;
133*53ee8cc1Swenshuai.xi MS_U8 ucImpedanceValue = MHL_IMPEDANCE_VALUE;
134*53ee8cc1Swenshuai.xi MS_U8 ucChipIDValue = MHL_CHIP_ID_MUNICH;
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
137*53ee8cc1Swenshuai.xi //  MHL initial table
138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_INITIAL_TABLE[] =
140*53ee8cc1Swenshuai.xi {
141*53ee8cc1Swenshuai.xi     // Set accepted discover pulse high pulse width to ignore USB pulse
142*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_0C, BMASK(15:0), 0x0046}, // reject cbus discovery pulse below this limit
143*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_0D, BMASK(15:0), 0x0082}, // reject cbus discovery pulse above this limit
144*53ee8cc1Swenshuai.xi     // CTS 4.3.7.1
145*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_55, BMASK(7:4), BIT(4)}, // [7:4]: cbus requester transmit opportunity after arbitration
146*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_70, BIT(14), BIT(14)}, // [14]: let edid current read initial address add 1
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_21, BIT(1), BIT(1)}, // [1]: output mhl_zxsense_tmds inv
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi     // For CTS 6.3.10.7
151*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_59, BMASK(15:0), 0xADB0}, // timeout for a device receiving a packet within a command
152*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_5A, BMASK(15:0), 0x0001}, // modify to 110ms
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_01, BMASK(5:2), 0}, // Not overwrite pull down resistor
155*53ee8cc1Swenshuai.xi 
156*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE >= MHL_CBUS_HW_ISR_MODE)
157*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_23, BMASK(10:8) |BIT(4), BIT(10) |BIT(4)}, // [10]: enable HW auto response read_devcap request
158*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_6D, BMASK(11:0), BMASK(11:0)}, // Enable MHL HW mode
159*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_71, BMASK(15:14), BMASK(15:14)},
160*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_50, BIT(13), BIT(13)}, // [13]: MSC send command keep mode
161*53ee8cc1Swenshuai.xi #else
162*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_23, BMASK(10:8) |BIT(4), 0}, // [10]: enable HW auto response read_devcap request
163*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_6D, BMASK(11:0), 0}, // Enable MHL HW mode
164*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_71, BMASK(15:14), 0},
165*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_50, BIT(13), 0}, // [13]: MSC send command keep mode
166*53ee8cc1Swenshuai.xi #endif
167*53ee8cc1Swenshuai.xi 
168*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE == MHL_CBUS_HW_REPLY_MODE)
169*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_0B, BIT(14), BIT(14)}, // [14]: MSC send command keep mode
170*53ee8cc1Swenshuai.xi #endif
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi #if DMHL_INT_ENABLE
173*53ee8cc1Swenshuai.xi     // Mask unused interrupt events
174*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
175*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.
176*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_30, BIT(1), BIT(1)}, // [1]: cbus conflict_int mask
177*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.
178*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_14, BIT(13), BIT(13)}, // [13]: int mask for monitor_sram_full
179*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_18, BIT(13), BIT(13)}, // [13]: send rcv_pkt_ddc_sw_overwrite_err_in mask
180*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
181*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_1B, BIT(1), BIT(1)}, // [1]: receive ddc packet valid mask
182*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
183*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_21, BIT(5), BIT(5)}, // [5]: ddc error interrupt mask
184*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
185*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_23, BIT(13), BIT(13)}, // [13]: send rcv_pkt_msc_sw_overwrite_err_in mask
186*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_24, BIT(1), BIT(1)}, // [1]: send error interrupt mask
187*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
188*53ee8cc1Swenshuai.xi     {REG_MHL_CBUS_63, BIT(9), BIT(9)}, // [9]: dytycycle_bad_int mask
189*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
190*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.
191*53ee8cc1Swenshuai.xi #endif
192*53ee8cc1Swenshuai.xi };
193*53ee8cc1Swenshuai.xi 
194*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
195*53ee8cc1Swenshuai.xi //  MHL power on table
196*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
197*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_ON_TABLE[] =
198*53ee8cc1Swenshuai.xi {
199*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_01, BMASK(5:2), 0}, // Not overwrite pull down resistor
200*53ee8cc1Swenshuai.xi };
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
203*53ee8cc1Swenshuai.xi //  MHL power down table
204*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
205*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_DOWN_TABLE[] =
206*53ee8cc1Swenshuai.xi {
207*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_01, BMASK(5:2), BIT(5)|BMASK(3:2)},
208*53ee8cc1Swenshuai.xi };
209*53ee8cc1Swenshuai.xi 
210*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
211*53ee8cc1Swenshuai.xi //  MHL power saving table
212*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
213*53ee8cc1Swenshuai.xi static msLoadTbl_S tMHL_POWER_SAVING_TABLE[] =
214*53ee8cc1Swenshuai.xi {
215*53ee8cc1Swenshuai.xi     {REG_PM_MHL_CBUS_01, BMASK(5:2), BIT(5)|BMASK(3:2)},
216*53ee8cc1Swenshuai.xi };
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
219*53ee8cc1Swenshuai.xi //  Local Functions
220*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
221*53ee8cc1Swenshuai.xi 
222*53ee8cc1Swenshuai.xi //**************************************************************************
223*53ee8cc1Swenshuai.xi //  [Function Name]:
224*53ee8cc1Swenshuai.xi //                  _mhal_mhl_IsCbusBusy()
225*53ee8cc1Swenshuai.xi //  [Description]
226*53ee8cc1Swenshuai.xi //
227*53ee8cc1Swenshuai.xi //  [Arguments]:
228*53ee8cc1Swenshuai.xi //
229*53ee8cc1Swenshuai.xi //  [Return]:
230*53ee8cc1Swenshuai.xi //
231*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_IsCbusBusy(void)232*53ee8cc1Swenshuai.xi MS_BOOL _mhal_mhl_IsCbusBusy(void)
233*53ee8cc1Swenshuai.xi {
234*53ee8cc1Swenshuai.xi     return ((R2BYTE(REG_MHL_CBUS_5D) & 0x00F0) != 0 ? TRUE : FALSE);
235*53ee8cc1Swenshuai.xi }
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi //**************************************************************************
238*53ee8cc1Swenshuai.xi //  [Function Name]:
239*53ee8cc1Swenshuai.xi //                  _mhal_mhl_DviAutoEQSwitch()
240*53ee8cc1Swenshuai.xi //  [Description]
241*53ee8cc1Swenshuai.xi //
242*53ee8cc1Swenshuai.xi //  [Arguments]:
243*53ee8cc1Swenshuai.xi //
244*53ee8cc1Swenshuai.xi //  [Return]:
245*53ee8cc1Swenshuai.xi //
246*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_DviAutoEQSwitch(MS_U8 ucCbusSelect,MS_BOOL bFlag)247*53ee8cc1Swenshuai.xi void _mhal_mhl_DviAutoEQSwitch(MS_U8 ucCbusSelect, MS_BOOL bFlag)
248*53ee8cc1Swenshuai.xi {
249*53ee8cc1Swenshuai.xi     static MS_BOOL bAutoEQFlag = FALSE;
250*53ee8cc1Swenshuai.xi 
251*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
252*53ee8cc1Swenshuai.xi     {
253*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
254*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
255*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
256*53ee8cc1Swenshuai.xi             {
257*53ee8cc1Swenshuai.xi                 if(!bAutoEQFlag)
258*53ee8cc1Swenshuai.xi                 {
259*53ee8cc1Swenshuai.xi                     if((R2BYTE(REG_DVI_DTOP_2F_L) &BIT(0)) == BIT(0))
260*53ee8cc1Swenshuai.xi                     {
261*53ee8cc1Swenshuai.xi                         bAutoEQFlag = TRUE;
262*53ee8cc1Swenshuai.xi                     }
263*53ee8cc1Swenshuai.xi                 }
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi                 if(bAutoEQFlag)
266*53ee8cc1Swenshuai.xi                 {
267*53ee8cc1Swenshuai.xi                     if(bFlag)
268*53ee8cc1Swenshuai.xi                     {
269*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP_00_L, BIT(4), BIT(4)); // enable EQ new mode
270*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
271*53ee8cc1Swenshuai.xi                     }
272*53ee8cc1Swenshuai.xi                     else
273*53ee8cc1Swenshuai.xi                     {
274*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP_00_L, 0, BIT(4)); // disable EQ new mode
275*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP_2F_L, 0, BIT(0)); // disable autoEQ controller
276*53ee8cc1Swenshuai.xi                     }
277*53ee8cc1Swenshuai.xi                 }
278*53ee8cc1Swenshuai.xi             }
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi             break;
281*53ee8cc1Swenshuai.xi #endif
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
284*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
285*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
286*53ee8cc1Swenshuai.xi             {
287*53ee8cc1Swenshuai.xi                 if(!bAutoEQFlag)
288*53ee8cc1Swenshuai.xi                 {
289*53ee8cc1Swenshuai.xi                     if((R2BYTE(REG_DVI_DTOP1_2F_L) &BIT(0)) == BIT(0))
290*53ee8cc1Swenshuai.xi                     {
291*53ee8cc1Swenshuai.xi                         bAutoEQFlag = TRUE;
292*53ee8cc1Swenshuai.xi                     }
293*53ee8cc1Swenshuai.xi                 }
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi                 if(bAutoEQFlag)
296*53ee8cc1Swenshuai.xi                 {
297*53ee8cc1Swenshuai.xi                     if(bFlag)
298*53ee8cc1Swenshuai.xi                     {
299*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP1_00_L, BIT(4), BIT(4)); // enable EQ new mode
300*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP1_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
301*53ee8cc1Swenshuai.xi                     }
302*53ee8cc1Swenshuai.xi                     else
303*53ee8cc1Swenshuai.xi                     {
304*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP1_00_L, 0, BIT(4)); // disable EQ new mode
305*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP1_2F_L, 0, BIT(0)); // disable autoEQ controller
306*53ee8cc1Swenshuai.xi                     }
307*53ee8cc1Swenshuai.xi                 }
308*53ee8cc1Swenshuai.xi             }
309*53ee8cc1Swenshuai.xi 
310*53ee8cc1Swenshuai.xi             break;
311*53ee8cc1Swenshuai.xi #endif
312*53ee8cc1Swenshuai.xi 
313*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
314*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
315*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
316*53ee8cc1Swenshuai.xi             {
317*53ee8cc1Swenshuai.xi                 if(!bAutoEQFlag)
318*53ee8cc1Swenshuai.xi                 {
319*53ee8cc1Swenshuai.xi                     if((R2BYTE(REG_DVI_DTOP3_2F_L) &BIT(0)) == BIT(0))
320*53ee8cc1Swenshuai.xi                     {
321*53ee8cc1Swenshuai.xi                         bAutoEQFlag = TRUE;
322*53ee8cc1Swenshuai.xi                     }
323*53ee8cc1Swenshuai.xi                 }
324*53ee8cc1Swenshuai.xi 
325*53ee8cc1Swenshuai.xi                 if(bAutoEQFlag)
326*53ee8cc1Swenshuai.xi                 {
327*53ee8cc1Swenshuai.xi                     if(bFlag)
328*53ee8cc1Swenshuai.xi                     {
329*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP3_00_L, BIT(4), BIT(4)); // enable EQ new mode
330*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP3_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
331*53ee8cc1Swenshuai.xi                     }
332*53ee8cc1Swenshuai.xi                     else
333*53ee8cc1Swenshuai.xi                     {
334*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP3_00_L, 0, BIT(4)); // disable EQ new mode
335*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP3_2F_L, 0, BIT(0)); // disable autoEQ controller
336*53ee8cc1Swenshuai.xi                     }
337*53ee8cc1Swenshuai.xi                 }
338*53ee8cc1Swenshuai.xi             }
339*53ee8cc1Swenshuai.xi 
340*53ee8cc1Swenshuai.xi             break;
341*53ee8cc1Swenshuai.xi #endif
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
344*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
345*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
346*53ee8cc1Swenshuai.xi             {
347*53ee8cc1Swenshuai.xi                 if(!bAutoEQFlag)
348*53ee8cc1Swenshuai.xi                 {
349*53ee8cc1Swenshuai.xi                     if((R2BYTE(REG_DVI_DTOP2_2F_L) &BIT(0)) == BIT(0))
350*53ee8cc1Swenshuai.xi                     {
351*53ee8cc1Swenshuai.xi                         bAutoEQFlag = TRUE;
352*53ee8cc1Swenshuai.xi                     }
353*53ee8cc1Swenshuai.xi                 }
354*53ee8cc1Swenshuai.xi 
355*53ee8cc1Swenshuai.xi                 if(bAutoEQFlag)
356*53ee8cc1Swenshuai.xi                 {
357*53ee8cc1Swenshuai.xi                     if(bFlag)
358*53ee8cc1Swenshuai.xi                     {
359*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP2_00_L, BIT(4), BIT(4)); // enable EQ new mode
360*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP2_2F_L, BIT(0), BIT(0)); // enable autoEQ controller
361*53ee8cc1Swenshuai.xi                     }
362*53ee8cc1Swenshuai.xi                     else
363*53ee8cc1Swenshuai.xi                     {
364*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP2_00_L, 0, BIT(4)); // disable EQ new mode
365*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_DVI_DTOP2_2F_L, 0, BIT(0)); // disable autoEQ controller
366*53ee8cc1Swenshuai.xi                     }
367*53ee8cc1Swenshuai.xi                 }
368*53ee8cc1Swenshuai.xi             }
369*53ee8cc1Swenshuai.xi 
370*53ee8cc1Swenshuai.xi             break;
371*53ee8cc1Swenshuai.xi #endif
372*53ee8cc1Swenshuai.xi 
373*53ee8cc1Swenshuai.xi         default:
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi             break;
376*53ee8cc1Swenshuai.xi     };
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi //**************************************************************************
380*53ee8cc1Swenshuai.xi //  [Function Name]:
381*53ee8cc1Swenshuai.xi //                  _mhal_mhl_HdmiBypassModeSetting()
382*53ee8cc1Swenshuai.xi //  [Description]
383*53ee8cc1Swenshuai.xi //                  MHL HDMI bypass setting
384*53ee8cc1Swenshuai.xi //  [Arguments]:
385*53ee8cc1Swenshuai.xi //
386*53ee8cc1Swenshuai.xi //  [Return]:
387*53ee8cc1Swenshuai.xi //
388*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_HdmiBypassModeSetting(MS_U8 ucCbusSelect)389*53ee8cc1Swenshuai.xi void _mhal_mhl_HdmiBypassModeSetting(MS_U8 ucCbusSelect)
390*53ee8cc1Swenshuai.xi {
391*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
392*53ee8cc1Swenshuai.xi     {
393*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
394*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
395*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
396*53ee8cc1Swenshuai.xi             {
397*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_27_L, 0, BMASK(2:1)); // [2:1]: MHL_SEL
398*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_20_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
399*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_0E_L, BIT(4), BIT(4)); // auto clear phase accumulator
400*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3B_L, 0, BIT(4)); // overwirte enable
401*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3D_L, 0, BIT(4)); // overwirte enable
402*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3F_L, 0, BIT(4)); // overwirte enable
403*53ee8cc1Swenshuai.xi                 W2BYTE(REG_DVI_DTOP_30_L, 0);
404*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_2F_L, 0, BMASK(15:4)| BMASK(3:2));
405*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_32_L, BIT(8), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
406*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_38_L, 0, BIT(10) |BIT(8)); // [10]: auto acdr mode selection, [8]: enable auto acdr function
407*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_5E_L, 0, BMASK(4:0)); //[4]: overwrtie DPL ICTL value, [3:0]: ictl overwrtie value
408*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_0E_L, 0, BIT(4)); // auto clear phase accumulator
409*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP_09_L, 0, BIT(0)); // PP mode + HDCP eanble
410*53ee8cc1Swenshuai.xi 
411*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
412*53ee8cc1Swenshuai.xi                 {
413*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP_0C_L, MHL_IMPEDANCE_VALUE, BIT(9)| BMASK(3:0));
414*53ee8cc1Swenshuai.xi                 }
415*53ee8cc1Swenshuai.xi             }
416*53ee8cc1Swenshuai.xi 
417*53ee8cc1Swenshuai.xi             break;
418*53ee8cc1Swenshuai.xi #endif
419*53ee8cc1Swenshuai.xi 
420*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
421*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
422*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
423*53ee8cc1Swenshuai.xi             {
424*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_27_L, 0, BMASK(2:1)); // [2:1]: MHL_SEL
425*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_20_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
426*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_0E_L, BIT(4), BIT(4)); // auto clear phase accumulator
427*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3B_L, 0, BIT(4)); // overwirte enable
428*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3D_L, 0, BIT(4)); // overwirte enable
429*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3F_L, 0, BIT(4)); // overwirte enable
430*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_32_L, BIT(8), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
431*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_5E_L, 0, BMASK(4:0)); //[4]: overwrtie DPL ICTL value, [3:0]: ictl overwrtie value
432*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_60_L, 0, BIT(7)); // power on DVI PLL
433*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_0E_L, 0, BIT(4)); // auto clear phase accumulator
434*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_60_L, 0, BMASK(2:1)); // [2:0]: power down RD
435*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_74_L, 0, BMASK(5:0)); // [2:0]: power down DPLPHI, [5:3]: power down DPLPHQ
436*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP1_09_L, 0, BIT(0)); // PP mode + HDCP eanble
437*53ee8cc1Swenshuai.xi 
438*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
439*53ee8cc1Swenshuai.xi                 {
440*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP1_0C_L, MHL_IMPEDANCE_VALUE, BIT(9) |BMASK(3:0));
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_DTOP3_27_L, 0, BMASK(2:1)); // [2:1]: MHL_SEL
452*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_20_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
453*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_0E_L, BIT(4), BIT(4)); // auto clear phase accumulator
454*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3B_L, 0, BIT(4)); // overwirte enable
455*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3D_L, 0, BIT(4)); // overwirte enable
456*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3F_L, 0, BIT(4)); // overwirte enable
457*53ee8cc1Swenshuai.xi                 W2BYTE(REG_DVI_DTOP3_30_L, 0);
458*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_2F_L, 0, BMASK(15:4)| BMASK(3:2));
459*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_32_L, BIT(8), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
460*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_35_L, 0, BIT(10) |BIT(8)); // [10]: auto acdr mode selection, [8]: enable auto acdr function
461*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_5E_L, 0, BMASK(4:0)); //[4]: overwrtie DPL ICTL value, [3:0]: ictl overwrtie value
462*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_0E_L, 0, BIT(4)); // auto clear phase accumulator
463*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP3_09_L, 0, BIT(0)); // PP mode + HDCP eanble
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
466*53ee8cc1Swenshuai.xi                 {
467*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP3_0C_L, MHL_IMPEDANCE_VALUE, BIT(9)| BMASK(3:0));
468*53ee8cc1Swenshuai.xi                 }
469*53ee8cc1Swenshuai.xi             }
470*53ee8cc1Swenshuai.xi 
471*53ee8cc1Swenshuai.xi             break;
472*53ee8cc1Swenshuai.xi #endif
473*53ee8cc1Swenshuai.xi 
474*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
475*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
476*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
477*53ee8cc1Swenshuai.xi             {
478*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_27_L, 0x2C6C, BMASK(14:0)); // [7]: MHL HW mode, [1]: MHL pack-pixel mode, [0]: MHL enable
479*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_20_L, MHL_HDMI_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
480*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_0E_L, BIT(4), BIT(4)); // auto clear phase accumulator
481*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3B_L, 0, BIT(4)); // overwirte enable
482*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3D_L, 0, BIT(4)); // overwirte enable
483*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3F_L, 0, BIT(4)); // overwirte enable
484*53ee8cc1Swenshuai.xi                 W2BYTE(REG_DVI_DTOP2_30_L, 0);
485*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_2F_L, 0, BMASK(15:4)| BMASK(3:2));
486*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_32_L, BIT(8), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
487*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_35_L, 0, BIT(10) |BIT(8)); // [10]: auto acdr mode selection, [8]: enable auto acdr function
488*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_5E_L, 0, BMASK(4:0)); //[4]: overwrtie DPL ICTL value, [3:0]: ictl overwrtie value
489*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_0E_L, 0, BIT(4)); // auto clear phase accumulator
490*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP2_09_L, 0, BIT(0)); // PP mode + HDCP eanble
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
493*53ee8cc1Swenshuai.xi                 {
494*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP2_0C_L, MHL_IMPEDANCE_VALUE, BIT(9) |BMASK(3:0));
495*53ee8cc1Swenshuai.xi                 }
496*53ee8cc1Swenshuai.xi             }
497*53ee8cc1Swenshuai.xi 
498*53ee8cc1Swenshuai.xi             break;
499*53ee8cc1Swenshuai.xi #endif
500*53ee8cc1Swenshuai.xi 
501*53ee8cc1Swenshuai.xi         default:
502*53ee8cc1Swenshuai.xi 
503*53ee8cc1Swenshuai.xi             break;
504*53ee8cc1Swenshuai.xi     };
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi     _mhal_mhl_DviAutoEQSwitch(ucCbusSelect, TRUE);
507*53ee8cc1Swenshuai.xi }
508*53ee8cc1Swenshuai.xi 
509*53ee8cc1Swenshuai.xi //**************************************************************************
510*53ee8cc1Swenshuai.xi //  [Function Name]:
511*53ee8cc1Swenshuai.xi //                  _mhal_mhl_Mhl24bitsModeSetting()
512*53ee8cc1Swenshuai.xi //  [Description]
513*53ee8cc1Swenshuai.xi //                  MHL 24 bits mode setting
514*53ee8cc1Swenshuai.xi //  [Arguments]:
515*53ee8cc1Swenshuai.xi //
516*53ee8cc1Swenshuai.xi //  [Return]:
517*53ee8cc1Swenshuai.xi //
518*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_Mhl24bitsModeSetting(MS_U8 ucCbusSelect)519*53ee8cc1Swenshuai.xi void _mhal_mhl_Mhl24bitsModeSetting(MS_U8 ucCbusSelect)
520*53ee8cc1Swenshuai.xi {
521*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
522*53ee8cc1Swenshuai.xi     {
523*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
524*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
525*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
526*53ee8cc1Swenshuai.xi             {
527*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_27_L, BIT(2), BMASK(2:1)); // [2:1]: MHL_SEL
528*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_20_L, MHL_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
529*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_0E_L, 0, BIT(4)); // auto clear phase accumulator
530*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3A_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
531*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3B_L, BIT(4), BIT(4)); // overwirte enable
532*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3C_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
533*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3D_L, BIT(4), BIT(4)); // overwirte enable
534*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3E_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
535*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_3F_L, BIT(4), BIT(4)); // overwirte enable
536*53ee8cc1Swenshuai.xi                 W2BYTE(REG_DVI_DTOP_30_L, (MHL_UNLOCK_RESOLUTION << 8) |MHL_LOCK_RESOLUTION);
537*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_2F_L, (MHL_DIGITAL_UNLOCK_RANGE << 4)| BMASK(3:2), BMASK(15:4)| BMASK(3:2));
538*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_32_L, BIT(8) |BIT(4) |BIT(0), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
539*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_38_L, BIT(10) |BIT(8), BIT(10) |BIT(8)); // [10]: auto acdr mode selection, [8]: enable auto acdr function
540*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_5E_L, BIT(4)| ucIControlValue, BMASK(4:0)); //[4]: overwrtie DPL ICTL value, [3:0]: ictl overwrtie value
541*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP_09_L, 0, BIT(0)); // PP mode + HDCP eanble
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
544*53ee8cc1Swenshuai.xi                 {
545*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP_0C_L, BIT(9)| ucImpedanceValue, BIT(9)| BMASK(3:0));
546*53ee8cc1Swenshuai.xi                 }
547*53ee8cc1Swenshuai.xi             }
548*53ee8cc1Swenshuai.xi 
549*53ee8cc1Swenshuai.xi             break;
550*53ee8cc1Swenshuai.xi #endif
551*53ee8cc1Swenshuai.xi 
552*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
553*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
554*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
555*53ee8cc1Swenshuai.xi             {
556*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_27_L, BIT(2), BMASK(2:1)); // [2:1]: MHL_SEL
557*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_20_L, MHL_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
558*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_0E_L, 0, BIT(4)); // auto clear phase accumulator
559*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3A_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
560*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3B_L, BIT(4), BIT(4)); // overwirte enable
561*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3C_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
562*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3D_L, BIT(4), BIT(4)); // overwirte enable
563*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3E_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
564*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_3F_L, BIT(4), BIT(4)); // overwirte enable
565*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_32_L, BIT(8) |BIT(4) |BIT(0), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
566*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_5E_L, BIT(4) |ucIControlValue, BMASK(4:0)); // enable to overwrtie DPL ICTL value
567*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_60_L, BMASK(2:1), BMASK(2:1)); // [2:0]: power down RD
568*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_74_L, BMASK(5:0), BMASK(5:0)); // [2:0]: power down DPLPHI, [5:3]: power down DPLPHQ
569*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP1_09_L, 0, BIT(0)); // PP mode + HDCP eanble
570*53ee8cc1Swenshuai.xi 
571*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
572*53ee8cc1Swenshuai.xi                 {
573*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP1_0C_L, BIT(9)| ucImpedanceValue, BIT(9)| BMASK(3:0));
574*53ee8cc1Swenshuai.xi                 }
575*53ee8cc1Swenshuai.xi             }
576*53ee8cc1Swenshuai.xi 
577*53ee8cc1Swenshuai.xi             break;
578*53ee8cc1Swenshuai.xi #endif
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
581*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
582*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
583*53ee8cc1Swenshuai.xi             {
584*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_27_L, BIT(2), BMASK(2:1)); // [7]: MHL HW mode, [1]: MHL pack-pixel mode, [0]: MHL enable
585*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_20_L, MHL_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
586*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_0E_L, 0, BIT(4)); // auto clear phase accumulator
587*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3A_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
588*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3B_L, BIT(4), BIT(4)); // overwirte enable
589*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3C_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
590*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3D_L, BIT(4), BIT(4)); // overwirte enable
591*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3E_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
592*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_3F_L, BIT(4), BIT(4)); // overwirte enable
593*53ee8cc1Swenshuai.xi                 W2BYTE(REG_DVI_DTOP3_30_L, (MHL_UNLOCK_RESOLUTION << 8) |MHL_LOCK_RESOLUTION);
594*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_2F_L, (MHL_DIGITAL_UNLOCK_RANGE << 4)| BMASK(3:2), BMASK(15:4)| BMASK(3:2));
595*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_32_L, BIT(8) |BIT(4) |BIT(0), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
596*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_35_L, BIT(10) |BIT(8), BIT(10) |BIT(8)); // [10]: auto acdr mode selection, [8]: enable auto acdr function
597*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_5E_L, BIT(4)| ucIControlValue, BMASK(4:0)); //[4]: overwrtie DPL ICTL value, [3:0]: ictl overwrtie value
598*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP3_09_L, 0, BIT(0)); // PP mode + HDCP eanble
599*53ee8cc1Swenshuai.xi 
600*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
601*53ee8cc1Swenshuai.xi                 {
602*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP3_0C_L, BIT(9)| ucImpedanceValue, BIT(9)| BMASK(3:0));
603*53ee8cc1Swenshuai.xi                 }
604*53ee8cc1Swenshuai.xi             }
605*53ee8cc1Swenshuai.xi 
606*53ee8cc1Swenshuai.xi             break;
607*53ee8cc1Swenshuai.xi #endif
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
610*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
611*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
612*53ee8cc1Swenshuai.xi             {
613*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_27_L, BIT(2), BMASK(2:1)); // [7]: MHL HW mode, [1]: MHL pack-pixel mode, [0]: MHL enable
614*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_20_L, MHL_EQ_SETTING_VALUE, BMASK(3:0)); // EQ strength
615*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_0E_L, 0, BIT(4)); // auto clear phase accumulator
616*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3A_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
617*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3B_L, BIT(4), BIT(4)); // overwirte enable
618*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3C_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
619*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3D_L, BIT(4), BIT(4)); // overwirte enable
620*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3E_L, MHL_PHASE_CODE_VALUE, 0xFFFF); // phase code = 0x0A
621*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_3F_L, BIT(4), BIT(4)); // overwirte enable
622*53ee8cc1Swenshuai.xi                 W2BYTE(REG_DVI_DTOP2_30_L, (MHL_UNLOCK_RESOLUTION << 8) |MHL_LOCK_RESOLUTION);
623*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_2F_L, (MHL_DIGITAL_UNLOCK_RANGE << 4)| BMASK(3:2), BMASK(15:4)| BMASK(3:2));
624*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_32_L, BIT(8) |BIT(4) |BIT(0), BMASK(9:8) |BMASK(6:4) |BMASK(2:0)); // HF, Enable ACDR, Bypass CLK
625*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_35_L, BIT(10) |BIT(8), BIT(10) |BIT(8)); // [10]: auto acdr mode selection, [8]: enable auto acdr function
626*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_5E_L, BIT(4) |ucIControlValue, BMASK(4:0)); // enable to overwrtie DPL ICTL value
627*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP2_09_L, 0, BIT(0)); // PP mode + HDCP eanble
628*53ee8cc1Swenshuai.xi 
629*53ee8cc1Swenshuai.xi                 if(ucImpedanceValue != MHL_IMPEDANCE_VALUE)
630*53ee8cc1Swenshuai.xi                 {
631*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_DTOP2_0C_L, BIT(9)| ucImpedanceValue, BIT(9)| BMASK(3:0));
632*53ee8cc1Swenshuai.xi                 }
633*53ee8cc1Swenshuai.xi             }
634*53ee8cc1Swenshuai.xi 
635*53ee8cc1Swenshuai.xi             break;
636*53ee8cc1Swenshuai.xi #endif
637*53ee8cc1Swenshuai.xi 
638*53ee8cc1Swenshuai.xi         default:
639*53ee8cc1Swenshuai.xi 
640*53ee8cc1Swenshuai.xi             break;
641*53ee8cc1Swenshuai.xi     };
642*53ee8cc1Swenshuai.xi 
643*53ee8cc1Swenshuai.xi     _mhal_mhl_DviAutoEQSwitch(ucCbusSelect, FALSE);
644*53ee8cc1Swenshuai.xi }
645*53ee8cc1Swenshuai.xi 
646*53ee8cc1Swenshuai.xi //**************************************************************************
647*53ee8cc1Swenshuai.xi //  [Function Name]:
648*53ee8cc1Swenshuai.xi //                  _mhal_mhl_MhlPackedPixelModeSetting()
649*53ee8cc1Swenshuai.xi //  [Description]
650*53ee8cc1Swenshuai.xi //                  MHL packed pixel mode setting
651*53ee8cc1Swenshuai.xi //  [Arguments]:
652*53ee8cc1Swenshuai.xi //
653*53ee8cc1Swenshuai.xi //  [Return]:
654*53ee8cc1Swenshuai.xi //
655*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MhlPackedPixelModeSetting(MS_U8 ucCbusSelect)656*53ee8cc1Swenshuai.xi void _mhal_mhl_MhlPackedPixelModeSetting(MS_U8 ucCbusSelect)
657*53ee8cc1Swenshuai.xi {
658*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
659*53ee8cc1Swenshuai.xi     {
660*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
661*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
662*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
663*53ee8cc1Swenshuai.xi             {
664*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_27_L, BMASK(2:1), BMASK(2:1)); // [2:1]: MHL_SEL
665*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_32_L, BMASK(9:8), BMASK(9:8)); // HF
666*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
667*53ee8cc1Swenshuai.xi             }
668*53ee8cc1Swenshuai.xi 
669*53ee8cc1Swenshuai.xi             break;
670*53ee8cc1Swenshuai.xi #endif
671*53ee8cc1Swenshuai.xi 
672*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
673*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
674*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
675*53ee8cc1Swenshuai.xi             {
676*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_27_L, BMASK(2:1), BMASK(2:1)); // [2:1]: MHL_SEL
677*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP1_32_L, BMASK(9:8), BMASK(9:8)); // HF
678*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP1_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
679*53ee8cc1Swenshuai.xi             }
680*53ee8cc1Swenshuai.xi 
681*53ee8cc1Swenshuai.xi             break;
682*53ee8cc1Swenshuai.xi #endif
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
685*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
686*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
687*53ee8cc1Swenshuai.xi             {
688*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_27_L, BMASK(2:1), BMASK(2:1)); // [2:1]: MHL_SEL
689*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_32_L, BMASK(9:8), BMASK(9:8)); // HF
690*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP3_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
691*53ee8cc1Swenshuai.xi             }
692*53ee8cc1Swenshuai.xi 
693*53ee8cc1Swenshuai.xi             break;
694*53ee8cc1Swenshuai.xi #endif
695*53ee8cc1Swenshuai.xi 
696*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
697*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
698*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
699*53ee8cc1Swenshuai.xi             {
700*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_27_L, BMASK(2:1), BMASK(2:1)); // [2:1]: MHL_SEL
701*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_32_L, BMASK(9:8), BMASK(9:8)); // HF
702*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_HDCP2_09_L, BIT(0), BIT(0)); // PP mode + HDCP eanble
703*53ee8cc1Swenshuai.xi             }
704*53ee8cc1Swenshuai.xi 
705*53ee8cc1Swenshuai.xi             break;
706*53ee8cc1Swenshuai.xi #endif
707*53ee8cc1Swenshuai.xi 
708*53ee8cc1Swenshuai.xi         default:
709*53ee8cc1Swenshuai.xi 
710*53ee8cc1Swenshuai.xi             break;
711*53ee8cc1Swenshuai.xi     };
712*53ee8cc1Swenshuai.xi }
713*53ee8cc1Swenshuai.xi 
714*53ee8cc1Swenshuai.xi //**************************************************************************
715*53ee8cc1Swenshuai.xi //  [Function Name]:
716*53ee8cc1Swenshuai.xi //                  _mhal_mhl_RxRtermControl()
717*53ee8cc1Swenshuai.xi //  [Description]
718*53ee8cc1Swenshuai.xi //                  MHL TMDS termination resistor control
719*53ee8cc1Swenshuai.xi //  [Arguments]:
720*53ee8cc1Swenshuai.xi //
721*53ee8cc1Swenshuai.xi //  [Return]:
722*53ee8cc1Swenshuai.xi //
723*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_RxRtermControl(MS_U8 ucCbusSelect,RXRtermControl_T rctrl)724*53ee8cc1Swenshuai.xi void _mhal_mhl_RxRtermControl(MS_U8 ucCbusSelect, RXRtermControl_T rctrl)
725*53ee8cc1Swenshuai.xi {
726*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
727*53ee8cc1Swenshuai.xi     {
728*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
729*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
730*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
731*53ee8cc1Swenshuai.xi             {
732*53ee8cc1Swenshuai.xi                 if (rctrl == RX_HDMI_RTERM)
733*53ee8cc1Swenshuai.xi                 {
734*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP_60_L, 0, BMASK(13:11));// data R-term
735*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(8));// clock R-term
736*53ee8cc1Swenshuai.xi                 }
737*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_MHL_RTERM)
738*53ee8cc1Swenshuai.xi                 {
739*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP_60_L, BMASK(13:12), BMASK(13:11));// data R-term
740*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(8));// clock R-term
741*53ee8cc1Swenshuai.xi                 }
742*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_RTERM_OFF)
743*53ee8cc1Swenshuai.xi                 {
744*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP_60_L, BMASK(13:11), BMASK(13:11));// data R-term
745*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, BIT(8), BIT(8));// clock R-term
746*53ee8cc1Swenshuai.xi                 }
747*53ee8cc1Swenshuai.xi             }
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi             break;
750*53ee8cc1Swenshuai.xi #endif
751*53ee8cc1Swenshuai.xi 
752*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
753*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
754*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
755*53ee8cc1Swenshuai.xi             {
756*53ee8cc1Swenshuai.xi                 if (rctrl == RX_HDMI_RTERM)
757*53ee8cc1Swenshuai.xi                 {
758*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP1_60_L, 0, BMASK(13:11));// data R-term
759*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(9));// clock R-term
760*53ee8cc1Swenshuai.xi                 }
761*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_MHL_RTERM)
762*53ee8cc1Swenshuai.xi                 {
763*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP1_60_L, BMASK(13:12), BMASK(13:11));// data R-term
764*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(9));// clock R-term
765*53ee8cc1Swenshuai.xi                 }
766*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_RTERM_OFF)
767*53ee8cc1Swenshuai.xi                 {
768*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP1_60_L, BMASK(13:11), BMASK(13:11));// data R-term
769*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, BIT(9), BIT(9));// clock R-term
770*53ee8cc1Swenshuai.xi                 }
771*53ee8cc1Swenshuai.xi             }
772*53ee8cc1Swenshuai.xi 
773*53ee8cc1Swenshuai.xi             break;
774*53ee8cc1Swenshuai.xi #endif
775*53ee8cc1Swenshuai.xi 
776*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
777*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
778*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
779*53ee8cc1Swenshuai.xi             {
780*53ee8cc1Swenshuai.xi                 if (rctrl == RX_HDMI_RTERM)
781*53ee8cc1Swenshuai.xi                 {
782*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP3_60_L, 0, BMASK(13:11));// data R-term
783*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(11));// clock R-term
784*53ee8cc1Swenshuai.xi                 }
785*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_MHL_RTERM)
786*53ee8cc1Swenshuai.xi                 {
787*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP3_60_L, BMASK(13:12), BMASK(13:11));// data R-term
788*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(11));// clock R-term
789*53ee8cc1Swenshuai.xi                 }
790*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_RTERM_OFF)
791*53ee8cc1Swenshuai.xi                 {
792*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP3_60_L, BMASK(13:11), BMASK(13:11));// data R-term
793*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, BIT(11), BIT(11));// clock R-term
794*53ee8cc1Swenshuai.xi                 }
795*53ee8cc1Swenshuai.xi             }
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi             break;
798*53ee8cc1Swenshuai.xi #endif
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
801*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
802*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
803*53ee8cc1Swenshuai.xi             {
804*53ee8cc1Swenshuai.xi                 if (rctrl == RX_HDMI_RTERM)
805*53ee8cc1Swenshuai.xi                 {
806*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP2_60_L, 0, BMASK(13:11));// data R-term
807*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(10));// clock R-term
808*53ee8cc1Swenshuai.xi                 }
809*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_MHL_RTERM)
810*53ee8cc1Swenshuai.xi                 {
811*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP2_60_L, BMASK(13:12), BMASK(13:11));// data R-term
812*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, 0, BIT(10));// clock R-term
813*53ee8cc1Swenshuai.xi                 }
814*53ee8cc1Swenshuai.xi                 else if (rctrl == RX_RTERM_OFF)
815*53ee8cc1Swenshuai.xi                 {
816*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP2_60_L, BMASK(13:11), BMASK(13:11));// data R-term
817*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_SLEEP_4B_L, BIT(10), BIT(10));// clock R-term
818*53ee8cc1Swenshuai.xi                 }
819*53ee8cc1Swenshuai.xi             }
820*53ee8cc1Swenshuai.xi 
821*53ee8cc1Swenshuai.xi             break;
822*53ee8cc1Swenshuai.xi #endif
823*53ee8cc1Swenshuai.xi 
824*53ee8cc1Swenshuai.xi         default:
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi             break;
827*53ee8cc1Swenshuai.xi     };
828*53ee8cc1Swenshuai.xi }
829*53ee8cc1Swenshuai.xi 
830*53ee8cc1Swenshuai.xi //**************************************************************************
831*53ee8cc1Swenshuai.xi //  [Function Name]:
832*53ee8cc1Swenshuai.xi //                  _mhal_mhl_CbusForceToStandby()
833*53ee8cc1Swenshuai.xi //  [Description]
834*53ee8cc1Swenshuai.xi //
835*53ee8cc1Swenshuai.xi //  [Arguments]:
836*53ee8cc1Swenshuai.xi //
837*53ee8cc1Swenshuai.xi //  [Return]:
838*53ee8cc1Swenshuai.xi //
839*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusForceToStandby(void)840*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusForceToStandby(void)
841*53ee8cc1Swenshuai.xi {
842*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4), BIT(4)); // clear received FIFO
843*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(15), BIT(15)); // force enter PM mode
844*53ee8cc1Swenshuai.xi }
845*53ee8cc1Swenshuai.xi 
846*53ee8cc1Swenshuai.xi //**************************************************************************
847*53ee8cc1Swenshuai.xi //  [Function Name]:
848*53ee8cc1Swenshuai.xi //                  _mhal_mhl_MHLForceToAttach()
849*53ee8cc1Swenshuai.xi //  [Description]:
850*53ee8cc1Swenshuai.xi //
851*53ee8cc1Swenshuai.xi //  [Arguments]:
852*53ee8cc1Swenshuai.xi //
853*53ee8cc1Swenshuai.xi //  [Return]:
854*53ee8cc1Swenshuai.xi //
855*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_MHLForceToAttach(void)856*53ee8cc1Swenshuai.xi void _mhal_mhl_MHLForceToAttach(void)
857*53ee8cc1Swenshuai.xi {
858*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(14), BIT(14));
859*53ee8cc1Swenshuai.xi }
860*53ee8cc1Swenshuai.xi 
861*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
862*53ee8cc1Swenshuai.xi //**************************************************************************
863*53ee8cc1Swenshuai.xi //  [Function Name]:
864*53ee8cc1Swenshuai.xi //                  _mhal_mhl_AdjustCommonModeResistor()
865*53ee8cc1Swenshuai.xi //  [Description]:
866*53ee8cc1Swenshuai.xi //
867*53ee8cc1Swenshuai.xi //  [Arguments]:
868*53ee8cc1Swenshuai.xi //
869*53ee8cc1Swenshuai.xi //  [Return]:
870*53ee8cc1Swenshuai.xi //
871*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_AdjustCommonModeResistor(MS_U8 ucCbusSelect,MS_BOOL bflag)872*53ee8cc1Swenshuai.xi void _mhal_mhl_AdjustCommonModeResistor(MS_U8 ucCbusSelect, MS_BOOL bflag)
873*53ee8cc1Swenshuai.xi {
874*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
875*53ee8cc1Swenshuai.xi     {
876*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
877*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
878*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
879*53ee8cc1Swenshuai.xi             {
880*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_27_L, bflag ?0 :BIT(0), BIT(0)); // [0]: MHL enable
881*53ee8cc1Swenshuai.xi             }
882*53ee8cc1Swenshuai.xi 
883*53ee8cc1Swenshuai.xi             break;
884*53ee8cc1Swenshuai.xi #endif
885*53ee8cc1Swenshuai.xi 
886*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
887*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
888*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
889*53ee8cc1Swenshuai.xi             {
890*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP1_27_L, bflag ?0 :BIT(0), BIT(0)); // [0]: MHL enable
891*53ee8cc1Swenshuai.xi             }
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi             break;
894*53ee8cc1Swenshuai.xi #endif
895*53ee8cc1Swenshuai.xi 
896*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
897*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
898*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
899*53ee8cc1Swenshuai.xi             {
900*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_27_L, bflag ?0 :BIT(0), BIT(0)); // [0]: MHL enable
901*53ee8cc1Swenshuai.xi             }
902*53ee8cc1Swenshuai.xi 
903*53ee8cc1Swenshuai.xi             break;
904*53ee8cc1Swenshuai.xi #endif
905*53ee8cc1Swenshuai.xi 
906*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
907*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
908*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
909*53ee8cc1Swenshuai.xi             {
910*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_27_L, bflag ?0 :BIT(0), BIT(0)); // [0]: MHL enable
911*53ee8cc1Swenshuai.xi             }
912*53ee8cc1Swenshuai.xi 
913*53ee8cc1Swenshuai.xi             break;
914*53ee8cc1Swenshuai.xi #endif
915*53ee8cc1Swenshuai.xi 
916*53ee8cc1Swenshuai.xi         default:
917*53ee8cc1Swenshuai.xi 
918*53ee8cc1Swenshuai.xi             break;
919*53ee8cc1Swenshuai.xi     };
920*53ee8cc1Swenshuai.xi }
921*53ee8cc1Swenshuai.xi 
922*53ee8cc1Swenshuai.xi #endif
923*53ee8cc1Swenshuai.xi 
924*53ee8cc1Swenshuai.xi //**************************************************************************
925*53ee8cc1Swenshuai.xi //  [Function Name]:
926*53ee8cc1Swenshuai.xi //                  _mhal_mhl_ClockBigChangeFlag()
927*53ee8cc1Swenshuai.xi //  [Description]:
928*53ee8cc1Swenshuai.xi //
929*53ee8cc1Swenshuai.xi //  [Arguments]:
930*53ee8cc1Swenshuai.xi //
931*53ee8cc1Swenshuai.xi //  [Return]:
932*53ee8cc1Swenshuai.xi //
933*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ClockBigChangeFlag(MS_U8 ucCbusSelect)934*53ee8cc1Swenshuai.xi MS_BOOL _mhal_mhl_ClockBigChangeFlag(MS_U8 ucCbusSelect)
935*53ee8cc1Swenshuai.xi {
936*53ee8cc1Swenshuai.xi     MS_BOOL bindex = FALSE;
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
939*53ee8cc1Swenshuai.xi     {
940*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
941*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
942*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
943*53ee8cc1Swenshuai.xi             {
944*53ee8cc1Swenshuai.xi                 bindex = ((R2BYTE(REG_DVI_ATOP_70_L) &BIT(0)) ?TRUE: FALSE);
945*53ee8cc1Swenshuai.xi 
946*53ee8cc1Swenshuai.xi                 if(bindex)
947*53ee8cc1Swenshuai.xi                 {
948*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP_71_L, BIT(8), BIT(8));
949*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP_71_L, 0, BIT(8));
950*53ee8cc1Swenshuai.xi                 }
951*53ee8cc1Swenshuai.xi             }
952*53ee8cc1Swenshuai.xi 
953*53ee8cc1Swenshuai.xi             break;
954*53ee8cc1Swenshuai.xi #endif
955*53ee8cc1Swenshuai.xi 
956*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
957*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
958*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
959*53ee8cc1Swenshuai.xi             {
960*53ee8cc1Swenshuai.xi                 bindex = ((R2BYTE(REG_DVI_ATOP1_70_L) &BIT(0)) ?TRUE: FALSE);
961*53ee8cc1Swenshuai.xi 
962*53ee8cc1Swenshuai.xi                 if(bindex)
963*53ee8cc1Swenshuai.xi                 {
964*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP1_71_L, BIT(8), BIT(8));
965*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP1_71_L, 0, BIT(8));
966*53ee8cc1Swenshuai.xi                 }
967*53ee8cc1Swenshuai.xi             }
968*53ee8cc1Swenshuai.xi 
969*53ee8cc1Swenshuai.xi             break;
970*53ee8cc1Swenshuai.xi #endif
971*53ee8cc1Swenshuai.xi 
972*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
973*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
974*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
975*53ee8cc1Swenshuai.xi             {
976*53ee8cc1Swenshuai.xi                 bindex = ((R2BYTE(REG_DVI_ATOP3_70_L) &BIT(0)) ?TRUE: FALSE);
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi                 if(bindex)
979*53ee8cc1Swenshuai.xi                 {
980*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP3_71_L, BIT(8), BIT(8));
981*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP3_71_L, 0, BIT(8));
982*53ee8cc1Swenshuai.xi                 }
983*53ee8cc1Swenshuai.xi             }
984*53ee8cc1Swenshuai.xi 
985*53ee8cc1Swenshuai.xi             break;
986*53ee8cc1Swenshuai.xi #endif
987*53ee8cc1Swenshuai.xi 
988*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
989*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
990*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
991*53ee8cc1Swenshuai.xi             {
992*53ee8cc1Swenshuai.xi                 bindex = ((R2BYTE(REG_DVI_ATOP2_70_L) &BIT(0)) ?TRUE: FALSE);
993*53ee8cc1Swenshuai.xi 
994*53ee8cc1Swenshuai.xi                 if(bindex)
995*53ee8cc1Swenshuai.xi                 {
996*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP2_71_L, BIT(8), BIT(8));
997*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_DVI_ATOP2_71_L, 0, BIT(8));
998*53ee8cc1Swenshuai.xi                 }
999*53ee8cc1Swenshuai.xi             }
1000*53ee8cc1Swenshuai.xi 
1001*53ee8cc1Swenshuai.xi             break;
1002*53ee8cc1Swenshuai.xi #endif
1003*53ee8cc1Swenshuai.xi 
1004*53ee8cc1Swenshuai.xi         default:
1005*53ee8cc1Swenshuai.xi 
1006*53ee8cc1Swenshuai.xi             break;
1007*53ee8cc1Swenshuai.xi     };
1008*53ee8cc1Swenshuai.xi 
1009*53ee8cc1Swenshuai.xi     return bindex;
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi 
1012*53ee8cc1Swenshuai.xi //**************************************************************************
1013*53ee8cc1Swenshuai.xi //  [Function Name]:
1014*53ee8cc1Swenshuai.xi //                  _mhal_mhl_CheckClockStatus()
1015*53ee8cc1Swenshuai.xi //  [Description]:
1016*53ee8cc1Swenshuai.xi //
1017*53ee8cc1Swenshuai.xi //  [Arguments]:
1018*53ee8cc1Swenshuai.xi //
1019*53ee8cc1Swenshuai.xi //  [Return]:
1020*53ee8cc1Swenshuai.xi //
1021*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CheckClockStatus(MS_U8 ucCbusSelect)1022*53ee8cc1Swenshuai.xi MS_U8 _mhal_mhl_CheckClockStatus(MS_U8 ucCbusSelect)
1023*53ee8cc1Swenshuai.xi {
1024*53ee8cc1Swenshuai.xi     MS_BOOL bStable = FALSE;
1025*53ee8cc1Swenshuai.xi     MS_U16 usClkCount = 0;
1026*53ee8cc1Swenshuai.xi 
1027*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1028*53ee8cc1Swenshuai.xi     {
1029*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1030*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1031*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1032*53ee8cc1Swenshuai.xi             {
1033*53ee8cc1Swenshuai.xi                 usClkCount = R2BYTE(REG_DVI_DTOP_17_L) & 0x0FFF;
1034*53ee8cc1Swenshuai.xi 
1035*53ee8cc1Swenshuai.xi                 if((R2BYTE(REG_DVI_DTOP_16_L) &BIT(9)) == BIT(9))
1036*53ee8cc1Swenshuai.xi                 {
1037*53ee8cc1Swenshuai.xi                     bStable = TRUE;
1038*53ee8cc1Swenshuai.xi 
1039*53ee8cc1Swenshuai.xi                     if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1040*53ee8cc1Swenshuai.xi                     {
1041*53ee8cc1Swenshuai.xi                         bStable = FALSE;
1042*53ee8cc1Swenshuai.xi                     }
1043*53ee8cc1Swenshuai.xi                 }
1044*53ee8cc1Swenshuai.xi             }
1045*53ee8cc1Swenshuai.xi 
1046*53ee8cc1Swenshuai.xi             break;
1047*53ee8cc1Swenshuai.xi #endif
1048*53ee8cc1Swenshuai.xi 
1049*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1050*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1051*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1052*53ee8cc1Swenshuai.xi             {
1053*53ee8cc1Swenshuai.xi                 usClkCount = R2BYTE(REG_DVI_DTOP1_17_L) & 0x0FFF;
1054*53ee8cc1Swenshuai.xi 
1055*53ee8cc1Swenshuai.xi                 if((R2BYTE(REG_DVI_DTOP1_16_L) &BIT(9)) == BIT(9))
1056*53ee8cc1Swenshuai.xi                 {
1057*53ee8cc1Swenshuai.xi                     bStable = TRUE;
1058*53ee8cc1Swenshuai.xi 
1059*53ee8cc1Swenshuai.xi                     if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1060*53ee8cc1Swenshuai.xi                     {
1061*53ee8cc1Swenshuai.xi                         bStable = FALSE;
1062*53ee8cc1Swenshuai.xi                     }
1063*53ee8cc1Swenshuai.xi                 }
1064*53ee8cc1Swenshuai.xi             }
1065*53ee8cc1Swenshuai.xi 
1066*53ee8cc1Swenshuai.xi             break;
1067*53ee8cc1Swenshuai.xi #endif
1068*53ee8cc1Swenshuai.xi 
1069*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1070*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1071*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1072*53ee8cc1Swenshuai.xi             {
1073*53ee8cc1Swenshuai.xi                 usClkCount = R2BYTE(REG_DVI_DTOP3_17_L) & 0x0FFF;
1074*53ee8cc1Swenshuai.xi 
1075*53ee8cc1Swenshuai.xi                 if((R2BYTE(REG_DVI_DTOP3_16_L) &BIT(9)) == BIT(9))
1076*53ee8cc1Swenshuai.xi                 {
1077*53ee8cc1Swenshuai.xi                     bStable = TRUE;
1078*53ee8cc1Swenshuai.xi 
1079*53ee8cc1Swenshuai.xi                     if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1080*53ee8cc1Swenshuai.xi                     {
1081*53ee8cc1Swenshuai.xi                         bStable = FALSE;
1082*53ee8cc1Swenshuai.xi                     }
1083*53ee8cc1Swenshuai.xi                 }
1084*53ee8cc1Swenshuai.xi             }
1085*53ee8cc1Swenshuai.xi 
1086*53ee8cc1Swenshuai.xi             break;
1087*53ee8cc1Swenshuai.xi #endif
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1090*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1091*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1092*53ee8cc1Swenshuai.xi             {
1093*53ee8cc1Swenshuai.xi                 usClkCount = R2BYTE(REG_DVI_DTOP2_17_L) & 0x0FFF;
1094*53ee8cc1Swenshuai.xi 
1095*53ee8cc1Swenshuai.xi                 if((R2BYTE(REG_DVI_DTOP2_16_L) &BIT(9)) == BIT(9))
1096*53ee8cc1Swenshuai.xi                 {
1097*53ee8cc1Swenshuai.xi                     bStable = TRUE;
1098*53ee8cc1Swenshuai.xi 
1099*53ee8cc1Swenshuai.xi                     if((usClkCount < CBUS_CLOCK_DETECT_LEVEL) || _mhal_mhl_ClockBigChangeFlag(ucCbusSelect))
1100*53ee8cc1Swenshuai.xi                     {
1101*53ee8cc1Swenshuai.xi                         bStable = FALSE;
1102*53ee8cc1Swenshuai.xi                     }
1103*53ee8cc1Swenshuai.xi                 }
1104*53ee8cc1Swenshuai.xi             }
1105*53ee8cc1Swenshuai.xi 
1106*53ee8cc1Swenshuai.xi             break;
1107*53ee8cc1Swenshuai.xi #endif
1108*53ee8cc1Swenshuai.xi 
1109*53ee8cc1Swenshuai.xi         default:
1110*53ee8cc1Swenshuai.xi 
1111*53ee8cc1Swenshuai.xi             break;
1112*53ee8cc1Swenshuai.xi     };
1113*53ee8cc1Swenshuai.xi 
1114*53ee8cc1Swenshuai.xi     return bStable;
1115*53ee8cc1Swenshuai.xi }
1116*53ee8cc1Swenshuai.xi 
1117*53ee8cc1Swenshuai.xi //**************************************************************************
1118*53ee8cc1Swenshuai.xi //  [Function Name]:
1119*53ee8cc1Swenshuai.xi //                  _mhal_mhl_RtermHWControl()
1120*53ee8cc1Swenshuai.xi //  [Description]
1121*53ee8cc1Swenshuai.xi //
1122*53ee8cc1Swenshuai.xi //  [Arguments]:
1123*53ee8cc1Swenshuai.xi //
1124*53ee8cc1Swenshuai.xi //  [Return]:
1125*53ee8cc1Swenshuai.xi //
1126*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_RtermHWControl(MS_U8 ucCbusSelect,MS_BOOL bFlag)1127*53ee8cc1Swenshuai.xi void _mhal_mhl_RtermHWControl(MS_U8 ucCbusSelect, MS_BOOL bFlag)
1128*53ee8cc1Swenshuai.xi {
1129*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1130*53ee8cc1Swenshuai.xi     {
1131*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1132*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1133*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1134*53ee8cc1Swenshuai.xi             {
1135*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP_7F_L, bFlag ?BIT(14) :0, BIT(14));
1136*53ee8cc1Swenshuai.xi             }
1137*53ee8cc1Swenshuai.xi 
1138*53ee8cc1Swenshuai.xi             break;
1139*53ee8cc1Swenshuai.xi #endif
1140*53ee8cc1Swenshuai.xi 
1141*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1142*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1143*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1144*53ee8cc1Swenshuai.xi             {
1145*53ee8cc1Swenshuai.xi 
1146*53ee8cc1Swenshuai.xi             }
1147*53ee8cc1Swenshuai.xi 
1148*53ee8cc1Swenshuai.xi             break;
1149*53ee8cc1Swenshuai.xi #endif
1150*53ee8cc1Swenshuai.xi 
1151*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1152*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1153*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1154*53ee8cc1Swenshuai.xi             {
1155*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP3_01_L, bFlag ?BIT(0) :0, BIT(0));
1156*53ee8cc1Swenshuai.xi             }
1157*53ee8cc1Swenshuai.xi 
1158*53ee8cc1Swenshuai.xi             break;
1159*53ee8cc1Swenshuai.xi #endif
1160*53ee8cc1Swenshuai.xi 
1161*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1162*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1163*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1164*53ee8cc1Swenshuai.xi             {
1165*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_ATOP2_00_L, bFlag ?BIT(0) :0, BIT(0));
1166*53ee8cc1Swenshuai.xi             }
1167*53ee8cc1Swenshuai.xi 
1168*53ee8cc1Swenshuai.xi             break;
1169*53ee8cc1Swenshuai.xi #endif
1170*53ee8cc1Swenshuai.xi 
1171*53ee8cc1Swenshuai.xi         default:
1172*53ee8cc1Swenshuai.xi 
1173*53ee8cc1Swenshuai.xi             break;
1174*53ee8cc1Swenshuai.xi     };
1175*53ee8cc1Swenshuai.xi }
1176*53ee8cc1Swenshuai.xi 
1177*53ee8cc1Swenshuai.xi //**************************************************************************
1178*53ee8cc1Swenshuai.xi //  [Function Name]:
1179*53ee8cc1Swenshuai.xi //                  _mhal_mhl_ChangeScalerMainMux()
1180*53ee8cc1Swenshuai.xi //  [Description]
1181*53ee8cc1Swenshuai.xi //
1182*53ee8cc1Swenshuai.xi //  [Arguments]:
1183*53ee8cc1Swenshuai.xi //
1184*53ee8cc1Swenshuai.xi //  [Return]:
1185*53ee8cc1Swenshuai.xi //
1186*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_ChangeScalerMainMux(MS_BOOL bFlag)1187*53ee8cc1Swenshuai.xi void _mhal_mhl_ChangeScalerMainMux(MS_BOOL bFlag)
1188*53ee8cc1Swenshuai.xi {
1189*53ee8cc1Swenshuai.xi     MS_U8 ucScalerMainMux = (R2BYTE(0x102E02) &BMASK(7:4)) >> 4;
1190*53ee8cc1Swenshuai.xi 
1191*53ee8cc1Swenshuai.xi     if(bFlag)
1192*53ee8cc1Swenshuai.xi     {
1193*53ee8cc1Swenshuai.xi         if(ucScalerMainMux == MHL_SCALER_MUX_SELECT_DVI)
1194*53ee8cc1Swenshuai.xi         {
1195*53ee8cc1Swenshuai.xi             W2BYTEMSK(0x102E02, (MHL_SCALER_MUX_SELECT_MHL << 4), BMASK(7:4));
1196*53ee8cc1Swenshuai.xi         }
1197*53ee8cc1Swenshuai.xi     }
1198*53ee8cc1Swenshuai.xi     else
1199*53ee8cc1Swenshuai.xi     {
1200*53ee8cc1Swenshuai.xi         if(ucScalerMainMux == MHL_SCALER_MUX_SELECT_MHL)
1201*53ee8cc1Swenshuai.xi         {
1202*53ee8cc1Swenshuai.xi             W2BYTEMSK(0x102E02, (MHL_SCALER_MUX_SELECT_DVI << 4), BMASK(7:4));
1203*53ee8cc1Swenshuai.xi         }
1204*53ee8cc1Swenshuai.xi     }
1205*53ee8cc1Swenshuai.xi }
1206*53ee8cc1Swenshuai.xi 
1207*53ee8cc1Swenshuai.xi //**************************************************************************
1208*53ee8cc1Swenshuai.xi //  [Function Name]:
1209*53ee8cc1Swenshuai.xi //                  _mhal_mhl_AudioPathSelect()
1210*53ee8cc1Swenshuai.xi //  [Description]
1211*53ee8cc1Swenshuai.xi //
1212*53ee8cc1Swenshuai.xi //  [Arguments]:
1213*53ee8cc1Swenshuai.xi //
1214*53ee8cc1Swenshuai.xi //  [Return]:
1215*53ee8cc1Swenshuai.xi //
1216*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_AudioPathSelect(MS_BOOL bMHLPath)1217*53ee8cc1Swenshuai.xi void _mhal_mhl_AudioPathSelect(MS_BOOL bMHLPath)
1218*53ee8cc1Swenshuai.xi {
1219*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_HDMI2_08_L, bMHLPath ?BIT(0) :0, BIT(0)); // [0]: audio source selection, 0: HDMI / 1: MHL
1220*53ee8cc1Swenshuai.xi }
1221*53ee8cc1Swenshuai.xi 
1222*53ee8cc1Swenshuai.xi //**************************************************************************
1223*53ee8cc1Swenshuai.xi //  [Function Name]:
1224*53ee8cc1Swenshuai.xi //                  _mhal_mhl_CbusAndClockSelect()
1225*53ee8cc1Swenshuai.xi //  [Description]
1226*53ee8cc1Swenshuai.xi //
1227*53ee8cc1Swenshuai.xi //  [Arguments]:
1228*53ee8cc1Swenshuai.xi //
1229*53ee8cc1Swenshuai.xi //  [Return]:
1230*53ee8cc1Swenshuai.xi //
1231*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_CbusAndClockSelect(void)1232*53ee8cc1Swenshuai.xi void _mhal_mhl_CbusAndClockSelect(void)
1233*53ee8cc1Swenshuai.xi {
1234*53ee8cc1Swenshuai.xi     MS_U8 ucClockSelect = MHL_DVI_PORT_A;
1235*53ee8cc1Swenshuai.xi 
1236*53ee8cc1Swenshuai.xi     if(GET_MHL_PATH_SUPPORT_PORTA())
1237*53ee8cc1Swenshuai.xi     {
1238*53ee8cc1Swenshuai.xi         ucClockSelect = MHL_DVI_PORT_A;
1239*53ee8cc1Swenshuai.xi     }
1240*53ee8cc1Swenshuai.xi     else if(GET_MHL_PATH_SUPPORT_PORTB())
1241*53ee8cc1Swenshuai.xi     {
1242*53ee8cc1Swenshuai.xi         ucClockSelect = MHL_DVI_PORT_B;
1243*53ee8cc1Swenshuai.xi     }
1244*53ee8cc1Swenshuai.xi     else if(GET_MHL_PATH_SUPPORT_PORTC())
1245*53ee8cc1Swenshuai.xi     {
1246*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_SLEEP_73_L, BIT(0), BIT(6)| BIT(8)| BIT(0)); // [0]: reg_hplugc_mhl_en
1247*53ee8cc1Swenshuai.xi         ucClockSelect = MHL_DVI_PORT_C;
1248*53ee8cc1Swenshuai.xi     }
1249*53ee8cc1Swenshuai.xi     else if(GET_MHL_PATH_SUPPORT_PORTD())
1250*53ee8cc1Swenshuai.xi     {
1251*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_SLEEP_73_L, BIT(8), BIT(14)| BIT(8)| BIT(0)); // [8]: reg_hpluga_mhl_en
1252*53ee8cc1Swenshuai.xi         ucClockSelect = MHL_DVI_PORT_D;
1253*53ee8cc1Swenshuai.xi     }
1254*53ee8cc1Swenshuai.xi 
1255*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_DVI_ATOP_6A_L, (ucClockSelect << 2), BMASK(3:2)); // [3:2]: HDCP clock select
1256*53ee8cc1Swenshuai.xi }
1257*53ee8cc1Swenshuai.xi 
1258*53ee8cc1Swenshuai.xi //**************************************************************************
1259*53ee8cc1Swenshuai.xi //  [Function Name]:
1260*53ee8cc1Swenshuai.xi //                  _mhal_mhl_PhyInitialSetting()
1261*53ee8cc1Swenshuai.xi //  [Description]
1262*53ee8cc1Swenshuai.xi //
1263*53ee8cc1Swenshuai.xi //  [Arguments]:
1264*53ee8cc1Swenshuai.xi //
1265*53ee8cc1Swenshuai.xi //  [Return]:
1266*53ee8cc1Swenshuai.xi //
1267*53ee8cc1Swenshuai.xi //**************************************************************************
_mhal_mhl_PhyInitialSetting(MS_U8 ucCbusSelect)1268*53ee8cc1Swenshuai.xi void _mhal_mhl_PhyInitialSetting(MS_U8 ucCbusSelect)
1269*53ee8cc1Swenshuai.xi {
1270*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1271*53ee8cc1Swenshuai.xi     {
1272*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1273*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1274*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1275*53ee8cc1Swenshuai.xi             {
1276*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_27_L, BIT(15), BIT(15)); // [15]: Enable MHL packed-pixel mode criteria
1277*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP_28_L, BIT(0), BIT(0)); // [0]: MHL v1.2
1278*53ee8cc1Swenshuai.xi             }
1279*53ee8cc1Swenshuai.xi 
1280*53ee8cc1Swenshuai.xi             break;
1281*53ee8cc1Swenshuai.xi #endif
1282*53ee8cc1Swenshuai.xi 
1283*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1284*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1285*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1286*53ee8cc1Swenshuai.xi             {
1287*53ee8cc1Swenshuai.xi 
1288*53ee8cc1Swenshuai.xi             }
1289*53ee8cc1Swenshuai.xi 
1290*53ee8cc1Swenshuai.xi             break;
1291*53ee8cc1Swenshuai.xi #endif
1292*53ee8cc1Swenshuai.xi 
1293*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1294*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1295*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1296*53ee8cc1Swenshuai.xi             {
1297*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_27_L, BIT(15), BIT(15)); // [15]: Enable MHL packed-pixel mode criteria
1298*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP3_28_L, BIT(0), BIT(0)); // [0]: MHL v1.2
1299*53ee8cc1Swenshuai.xi             }
1300*53ee8cc1Swenshuai.xi 
1301*53ee8cc1Swenshuai.xi             break;
1302*53ee8cc1Swenshuai.xi #endif
1303*53ee8cc1Swenshuai.xi 
1304*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1305*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1306*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1307*53ee8cc1Swenshuai.xi             {
1308*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_27_L, BIT(15), BIT(15)); // [15]: Enable MHL packed-pixel mode criteria
1309*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_DVI_DTOP2_28_L, BIT(0), BIT(0)); // [0]: MHL v1.2
1310*53ee8cc1Swenshuai.xi             }
1311*53ee8cc1Swenshuai.xi 
1312*53ee8cc1Swenshuai.xi             break;
1313*53ee8cc1Swenshuai.xi #endif
1314*53ee8cc1Swenshuai.xi 
1315*53ee8cc1Swenshuai.xi         default:
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi             break;
1318*53ee8cc1Swenshuai.xi     };
1319*53ee8cc1Swenshuai.xi }
1320*53ee8cc1Swenshuai.xi 
1321*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1322*53ee8cc1Swenshuai.xi //  Global Functions
1323*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1324*53ee8cc1Swenshuai.xi 
1325*53ee8cc1Swenshuai.xi //**************************************************************************
1326*53ee8cc1Swenshuai.xi //  [Function Name]:
1327*53ee8cc1Swenshuai.xi //                  mhal_mhl_GetCbusSelect()
1328*53ee8cc1Swenshuai.xi //  [Description]
1329*53ee8cc1Swenshuai.xi //
1330*53ee8cc1Swenshuai.xi //  [Arguments]:
1331*53ee8cc1Swenshuai.xi //
1332*53ee8cc1Swenshuai.xi //  [Return]:
1333*53ee8cc1Swenshuai.xi //
1334*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetCbusSelect(MS_U8 ucPort)1335*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetCbusSelect(MS_U8 ucPort)
1336*53ee8cc1Swenshuai.xi {
1337*53ee8cc1Swenshuai.xi     MS_U8 uctemp = MHL_CBUS_SELECT_MASK;
1338*53ee8cc1Swenshuai.xi 
1339*53ee8cc1Swenshuai.xi     switch(ucPort)
1340*53ee8cc1Swenshuai.xi     {
1341*53ee8cc1Swenshuai.xi         case MHL_DVI_PORT_A:
1342*53ee8cc1Swenshuai.xi             uctemp = MHL_CBUS_SELECT_PORTA;
1343*53ee8cc1Swenshuai.xi             break;
1344*53ee8cc1Swenshuai.xi 
1345*53ee8cc1Swenshuai.xi         case MHL_DVI_PORT_B:
1346*53ee8cc1Swenshuai.xi             uctemp = MHL_CBUS_SELECT_PORTB;
1347*53ee8cc1Swenshuai.xi             break;
1348*53ee8cc1Swenshuai.xi 
1349*53ee8cc1Swenshuai.xi         case MHL_DVI_PORT_C:
1350*53ee8cc1Swenshuai.xi             uctemp = MHL_CBUS_SELECT_PORTC;
1351*53ee8cc1Swenshuai.xi             break;
1352*53ee8cc1Swenshuai.xi 
1353*53ee8cc1Swenshuai.xi         case MHL_DVI_PORT_D:
1354*53ee8cc1Swenshuai.xi             uctemp = MHL_CBUS_SELECT_PORTD;
1355*53ee8cc1Swenshuai.xi             break;
1356*53ee8cc1Swenshuai.xi 
1357*53ee8cc1Swenshuai.xi         default:
1358*53ee8cc1Swenshuai.xi 
1359*53ee8cc1Swenshuai.xi             break;
1360*53ee8cc1Swenshuai.xi     };
1361*53ee8cc1Swenshuai.xi 
1362*53ee8cc1Swenshuai.xi     return uctemp;
1363*53ee8cc1Swenshuai.xi }
1364*53ee8cc1Swenshuai.xi 
1365*53ee8cc1Swenshuai.xi //**************************************************************************
1366*53ee8cc1Swenshuai.xi //  [Function Name]:
1367*53ee8cc1Swenshuai.xi //                  mhal_mhl_GetInputPort()
1368*53ee8cc1Swenshuai.xi //  [Description]
1369*53ee8cc1Swenshuai.xi //                  MHL get current input port
1370*53ee8cc1Swenshuai.xi //  [Arguments]:
1371*53ee8cc1Swenshuai.xi //
1372*53ee8cc1Swenshuai.xi //  [Return]:
1373*53ee8cc1Swenshuai.xi //
1374*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetInputPort(void)1375*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetInputPort(void)
1376*53ee8cc1Swenshuai.xi {
1377*53ee8cc1Swenshuai.xi     return (R2BYTE(REG_DVI_ATOP_6A_L) &BMASK(1:0));
1378*53ee8cc1Swenshuai.xi }
1379*53ee8cc1Swenshuai.xi 
1380*53ee8cc1Swenshuai.xi //**************************************************************************
1381*53ee8cc1Swenshuai.xi //  [Function Name]:
1382*53ee8cc1Swenshuai.xi //                  mhal_mhl_CheckInputPort()
1383*53ee8cc1Swenshuai.xi //  [Description]
1384*53ee8cc1Swenshuai.xi //                  MHL check current input port
1385*53ee8cc1Swenshuai.xi //  [Arguments]:
1386*53ee8cc1Swenshuai.xi //
1387*53ee8cc1Swenshuai.xi //  [Return]:
1388*53ee8cc1Swenshuai.xi //
1389*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckInputPort(MS_U8 ucCbusSelect)1390*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckInputPort(MS_U8 ucCbusSelect)
1391*53ee8cc1Swenshuai.xi {
1392*53ee8cc1Swenshuai.xi     MS_BOOL bindex = FALSE;
1393*53ee8cc1Swenshuai.xi 
1394*53ee8cc1Swenshuai.xi     if(mhal_mhl_GetCbusSelect(mhal_mhl_GetInputPort()) == ucCbusSelect)
1395*53ee8cc1Swenshuai.xi     {
1396*53ee8cc1Swenshuai.xi         bindex = TRUE;
1397*53ee8cc1Swenshuai.xi     }
1398*53ee8cc1Swenshuai.xi 
1399*53ee8cc1Swenshuai.xi     return bindex;
1400*53ee8cc1Swenshuai.xi }
1401*53ee8cc1Swenshuai.xi 
1402*53ee8cc1Swenshuai.xi //**************************************************************************
1403*53ee8cc1Swenshuai.xi //  [Function Name]:
1404*53ee8cc1Swenshuai.xi //                  mhal_mhl_CheckPIPWindow()
1405*53ee8cc1Swenshuai.xi //  [Description]
1406*53ee8cc1Swenshuai.xi //
1407*53ee8cc1Swenshuai.xi //  [Arguments]:
1408*53ee8cc1Swenshuai.xi //
1409*53ee8cc1Swenshuai.xi //  [Return]:
1410*53ee8cc1Swenshuai.xi //
1411*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckPIPWindow(void)1412*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckPIPWindow(void)
1413*53ee8cc1Swenshuai.xi {
1414*53ee8cc1Swenshuai.xi     MS_BOOL bFlag = FALSE;
1415*53ee8cc1Swenshuai.xi     MS_U8 ucScalerMainMux = R2BYTE(0x102E02) &BMASK(7:0);
1416*53ee8cc1Swenshuai.xi     MS_U8 ucScalerSubMux = ucScalerMainMux &BMASK(3:0);
1417*53ee8cc1Swenshuai.xi 
1418*53ee8cc1Swenshuai.xi     ucScalerMainMux = (ucScalerMainMux &BMASK(7:4)) >> 4;
1419*53ee8cc1Swenshuai.xi 
1420*53ee8cc1Swenshuai.xi     if((ucScalerMainMux == MHL_SCALER_MUX_SELECT_DVI) || (ucScalerMainMux == MHL_SCALER_MUX_SELECT_MHL)) // Check scaler main window mux
1421*53ee8cc1Swenshuai.xi     {
1422*53ee8cc1Swenshuai.xi         bFlag = TRUE;
1423*53ee8cc1Swenshuai.xi     }
1424*53ee8cc1Swenshuai.xi     else if((ucScalerSubMux == MHL_SCALER_MUX_SELECT_DVI) || (ucScalerSubMux == MHL_SCALER_MUX_SELECT_MHL)) // Check scaler sub window mux
1425*53ee8cc1Swenshuai.xi     {
1426*53ee8cc1Swenshuai.xi         bFlag = TRUE;
1427*53ee8cc1Swenshuai.xi     }
1428*53ee8cc1Swenshuai.xi 
1429*53ee8cc1Swenshuai.xi     return bFlag;
1430*53ee8cc1Swenshuai.xi }
1431*53ee8cc1Swenshuai.xi 
1432*53ee8cc1Swenshuai.xi //**************************************************************************
1433*53ee8cc1Swenshuai.xi //  [Function Name]:
1434*53ee8cc1Swenshuai.xi //                  mhal_mhl_MHLSupportPath()
1435*53ee8cc1Swenshuai.xi //  [Description]
1436*53ee8cc1Swenshuai.xi //                  MHL support path
1437*53ee8cc1Swenshuai.xi //  [Arguments]:
1438*53ee8cc1Swenshuai.xi //
1439*53ee8cc1Swenshuai.xi //  [Return]:
1440*53ee8cc1Swenshuai.xi //
1441*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_MHLSupportPath(MS_U8 ucSelect)1442*53ee8cc1Swenshuai.xi void mhal_mhl_MHLSupportPath(MS_U8 ucSelect)
1443*53ee8cc1Swenshuai.xi {
1444*53ee8cc1Swenshuai.xi     ucMHLSupportPort = ucSelect;
1445*53ee8cc1Swenshuai.xi 
1446*53ee8cc1Swenshuai.xi     if(GET_MHL_PATH_SUPPORT_PORTC() && GET_MHL_PATH_SUPPORT_PORTD())
1447*53ee8cc1Swenshuai.xi     {
1448*53ee8cc1Swenshuai.xi         msg_mhl(printf("** MHL Cbus illegal support path T^T\r\n"));
1449*53ee8cc1Swenshuai.xi     }
1450*53ee8cc1Swenshuai.xi }
1451*53ee8cc1Swenshuai.xi 
1452*53ee8cc1Swenshuai.xi //**************************************************************************
1453*53ee8cc1Swenshuai.xi //  [Function Name]:
1454*53ee8cc1Swenshuai.xi //                  mhal_mhl_CheckEfuseControlFlag()
1455*53ee8cc1Swenshuai.xi //  [Description]
1456*53ee8cc1Swenshuai.xi //
1457*53ee8cc1Swenshuai.xi //  [Arguments]:
1458*53ee8cc1Swenshuai.xi //
1459*53ee8cc1Swenshuai.xi //  [Return]:
1460*53ee8cc1Swenshuai.xi //
1461*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CheckEfuseControlFlag(MS_BOOL bEfuseFlag)1462*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckEfuseControlFlag(MS_BOOL bEfuseFlag)
1463*53ee8cc1Swenshuai.xi {
1464*53ee8cc1Swenshuai.xi     MS_BOOL bFlag = FALSE;
1465*53ee8cc1Swenshuai.xi 
1466*53ee8cc1Swenshuai.xi #if(MHL_EFUSE_FUNCTION_CONTROL)
1467*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1468*53ee8cc1Swenshuai.xi 
1469*53ee8cc1Swenshuai.xi     if(!bEfuseFlag)
1470*53ee8cc1Swenshuai.xi     {
1471*53ee8cc1Swenshuai.xi         for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
1472*53ee8cc1Swenshuai.xi         {
1473*53ee8cc1Swenshuai.xi             mhal_mhl_CbusIsolate(uctemp, TRUE);
1474*53ee8cc1Swenshuai.xi         }
1475*53ee8cc1Swenshuai.xi 
1476*53ee8cc1Swenshuai.xi         bFlag = TRUE;
1477*53ee8cc1Swenshuai.xi     }
1478*53ee8cc1Swenshuai.xi 
1479*53ee8cc1Swenshuai.xi #endif
1480*53ee8cc1Swenshuai.xi 
1481*53ee8cc1Swenshuai.xi     return bFlag;
1482*53ee8cc1Swenshuai.xi }
1483*53ee8cc1Swenshuai.xi 
1484*53ee8cc1Swenshuai.xi //**************************************************************************
1485*53ee8cc1Swenshuai.xi //  [Function Name]:
1486*53ee8cc1Swenshuai.xi //                  mhal_mhl_InsertChipIDforCheck()
1487*53ee8cc1Swenshuai.xi //  [Description]
1488*53ee8cc1Swenshuai.xi //
1489*53ee8cc1Swenshuai.xi //  [Arguments]:
1490*53ee8cc1Swenshuai.xi //
1491*53ee8cc1Swenshuai.xi //  [Return]:
1492*53ee8cc1Swenshuai.xi //
1493*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InsertChipIDforCheck(MS_U8 ucChipID)1494*53ee8cc1Swenshuai.xi void mhal_mhl_InsertChipIDforCheck(MS_U8 ucChipID)
1495*53ee8cc1Swenshuai.xi {
1496*53ee8cc1Swenshuai.xi     ucChipIDValue = ucChipID;
1497*53ee8cc1Swenshuai.xi 
1498*53ee8cc1Swenshuai.xi     msg_mhl(printf("** MHL Cbus index value %x\r\n", ucChipID));
1499*53ee8cc1Swenshuai.xi }
1500*53ee8cc1Swenshuai.xi 
1501*53ee8cc1Swenshuai.xi //**************************************************************************
1502*53ee8cc1Swenshuai.xi //  [Function Name]:
1503*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusSelectSetMux()
1504*53ee8cc1Swenshuai.xi //  [Description]
1505*53ee8cc1Swenshuai.xi //
1506*53ee8cc1Swenshuai.xi //  [Arguments]:
1507*53ee8cc1Swenshuai.xi //
1508*53ee8cc1Swenshuai.xi //  [Return]:
1509*53ee8cc1Swenshuai.xi //
1510*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusSelectSetMux(MS_U8 ucCbusSelect)1511*53ee8cc1Swenshuai.xi void mhal_mhl_CbusSelectSetMux(MS_U8 ucCbusSelect)
1512*53ee8cc1Swenshuai.xi {
1513*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1514*53ee8cc1Swenshuai.xi     {
1515*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1516*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1517*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1518*53ee8cc1Swenshuai.xi             {
1519*53ee8cc1Swenshuai.xi 
1520*53ee8cc1Swenshuai.xi             }
1521*53ee8cc1Swenshuai.xi 
1522*53ee8cc1Swenshuai.xi             break;
1523*53ee8cc1Swenshuai.xi #endif
1524*53ee8cc1Swenshuai.xi 
1525*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1526*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1527*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1528*53ee8cc1Swenshuai.xi             {
1529*53ee8cc1Swenshuai.xi 
1530*53ee8cc1Swenshuai.xi             }
1531*53ee8cc1Swenshuai.xi 
1532*53ee8cc1Swenshuai.xi             break;
1533*53ee8cc1Swenshuai.xi #endif
1534*53ee8cc1Swenshuai.xi 
1535*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1536*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1537*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1538*53ee8cc1Swenshuai.xi             {
1539*53ee8cc1Swenshuai.xi 
1540*53ee8cc1Swenshuai.xi             }
1541*53ee8cc1Swenshuai.xi 
1542*53ee8cc1Swenshuai.xi             break;
1543*53ee8cc1Swenshuai.xi #endif
1544*53ee8cc1Swenshuai.xi 
1545*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1546*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1547*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1548*53ee8cc1Swenshuai.xi             {
1549*53ee8cc1Swenshuai.xi 
1550*53ee8cc1Swenshuai.xi             }
1551*53ee8cc1Swenshuai.xi 
1552*53ee8cc1Swenshuai.xi             break;
1553*53ee8cc1Swenshuai.xi #endif
1554*53ee8cc1Swenshuai.xi 
1555*53ee8cc1Swenshuai.xi         default:
1556*53ee8cc1Swenshuai.xi 
1557*53ee8cc1Swenshuai.xi             break;
1558*53ee8cc1Swenshuai.xi     };
1559*53ee8cc1Swenshuai.xi }
1560*53ee8cc1Swenshuai.xi 
1561*53ee8cc1Swenshuai.xi //**************************************************************************
1562*53ee8cc1Swenshuai.xi //  [Function Name]:
1563*53ee8cc1Swenshuai.xi //                  mhal_mhl_CableDetect()
1564*53ee8cc1Swenshuai.xi //  [Description]
1565*53ee8cc1Swenshuai.xi //                  MHL cable detection
1566*53ee8cc1Swenshuai.xi //  [Arguments]:
1567*53ee8cc1Swenshuai.xi //
1568*53ee8cc1Swenshuai.xi //  [Return]:
1569*53ee8cc1Swenshuai.xi //                  TRUE: MHL cable plugged
1570*53ee8cc1Swenshuai.xi //                  FALSE: MHL cable unplugged
1571*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableDetect(MS_U8 ucCbusSelect)1572*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CableDetect(MS_U8 ucCbusSelect)
1573*53ee8cc1Swenshuai.xi {
1574*53ee8cc1Swenshuai.xi     MS_BOOL bFlag = FALSE;
1575*53ee8cc1Swenshuai.xi 
1576*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1577*53ee8cc1Swenshuai.xi     {
1578*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1579*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1580*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1581*53ee8cc1Swenshuai.xi             {
1582*53ee8cc1Swenshuai.xi                 bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
1583*53ee8cc1Swenshuai.xi             }
1584*53ee8cc1Swenshuai.xi 
1585*53ee8cc1Swenshuai.xi             break;
1586*53ee8cc1Swenshuai.xi #endif
1587*53ee8cc1Swenshuai.xi 
1588*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1589*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1590*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1591*53ee8cc1Swenshuai.xi             {
1592*53ee8cc1Swenshuai.xi 
1593*53ee8cc1Swenshuai.xi             }
1594*53ee8cc1Swenshuai.xi 
1595*53ee8cc1Swenshuai.xi             break;
1596*53ee8cc1Swenshuai.xi #endif
1597*53ee8cc1Swenshuai.xi 
1598*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1599*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1600*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1601*53ee8cc1Swenshuai.xi             {
1602*53ee8cc1Swenshuai.xi                 bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
1603*53ee8cc1Swenshuai.xi             }
1604*53ee8cc1Swenshuai.xi 
1605*53ee8cc1Swenshuai.xi             break;
1606*53ee8cc1Swenshuai.xi #endif
1607*53ee8cc1Swenshuai.xi 
1608*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1609*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1610*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1611*53ee8cc1Swenshuai.xi             {
1612*53ee8cc1Swenshuai.xi                 bFlag = ((R2BYTE(REG_PM_MHL_CBUS_00) & BIT(10)) ? TRUE : FALSE);
1613*53ee8cc1Swenshuai.xi             }
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi             break;
1616*53ee8cc1Swenshuai.xi #endif
1617*53ee8cc1Swenshuai.xi 
1618*53ee8cc1Swenshuai.xi         default:
1619*53ee8cc1Swenshuai.xi 
1620*53ee8cc1Swenshuai.xi             break;
1621*53ee8cc1Swenshuai.xi     };
1622*53ee8cc1Swenshuai.xi 
1623*53ee8cc1Swenshuai.xi     return bFlag;
1624*53ee8cc1Swenshuai.xi }
1625*53ee8cc1Swenshuai.xi 
1626*53ee8cc1Swenshuai.xi //**************************************************************************
1627*53ee8cc1Swenshuai.xi //  [Function Name]:
1628*53ee8cc1Swenshuai.xi //                  mhal_mhl_Accumulator_Clr()
1629*53ee8cc1Swenshuai.xi //  [Description]
1630*53ee8cc1Swenshuai.xi //                  to clear accumulator when input is not MHL
1631*53ee8cc1Swenshuai.xi //  [Arguments]:
1632*53ee8cc1Swenshuai.xi //
1633*53ee8cc1Swenshuai.xi //  [Return]:
1634*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_Accumulator_Clr(MS_U8 ucCbusSelect)1635*53ee8cc1Swenshuai.xi void mhal_mhl_Accumulator_Clr(MS_U8 ucCbusSelect)
1636*53ee8cc1Swenshuai.xi {
1637*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1638*53ee8cc1Swenshuai.xi     {
1639*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1640*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1641*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1642*53ee8cc1Swenshuai.xi             {
1643*53ee8cc1Swenshuai.xi                 if(R2BYTE(REG_DVI_DTOP_16_L) & BIT(9)) // clk stable
1644*53ee8cc1Swenshuai.xi     			{
1645*53ee8cc1Swenshuai.xi     				if((R2BYTE(REG_DVI_DTOP_01_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP_01_L) == 0x7FF7) ||
1646*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP_02_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP_02_L) == 0x7FF7) ||
1647*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP_03_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP_03_L) == 0x7FF7))
1648*53ee8cc1Swenshuai.xi     				{
1649*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP_0E_L, BIT(4), BIT(4)); // clear accumulator
1650*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP_0E_L, 0, BIT(4));
1651*53ee8cc1Swenshuai.xi     				}
1652*53ee8cc1Swenshuai.xi     			}
1653*53ee8cc1Swenshuai.xi             }
1654*53ee8cc1Swenshuai.xi 
1655*53ee8cc1Swenshuai.xi             break;
1656*53ee8cc1Swenshuai.xi #endif
1657*53ee8cc1Swenshuai.xi 
1658*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1659*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1660*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1661*53ee8cc1Swenshuai.xi             {
1662*53ee8cc1Swenshuai.xi                 if(R2BYTE(REG_DVI_DTOP1_16_L) & BIT(9)) // clk stable
1663*53ee8cc1Swenshuai.xi     			{
1664*53ee8cc1Swenshuai.xi     				if((R2BYTE(REG_DVI_DTOP1_01_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP1_01_L) == 0x7FF7) ||
1665*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP1_02_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP1_02_L) == 0x7FF7) ||
1666*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP1_03_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP1_03_L) == 0x7FF7))
1667*53ee8cc1Swenshuai.xi     				{
1668*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP1_0E_L, BIT(4), BIT(4)); // clear accumulator
1669*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP1_0E_L, 0, BIT(4));
1670*53ee8cc1Swenshuai.xi     				}
1671*53ee8cc1Swenshuai.xi     			}
1672*53ee8cc1Swenshuai.xi             }
1673*53ee8cc1Swenshuai.xi 
1674*53ee8cc1Swenshuai.xi             break;
1675*53ee8cc1Swenshuai.xi #endif
1676*53ee8cc1Swenshuai.xi 
1677*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1678*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1679*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1680*53ee8cc1Swenshuai.xi             {
1681*53ee8cc1Swenshuai.xi                 if(R2BYTE(REG_DVI_DTOP3_16_L) & BIT(9)) // clk stable
1682*53ee8cc1Swenshuai.xi     			{
1683*53ee8cc1Swenshuai.xi     				if((R2BYTE(REG_DVI_DTOP3_01_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP3_01_L) == 0x7FF7) ||
1684*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP3_02_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP3_02_L) == 0x7FF7) ||
1685*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP3_03_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP3_03_L) == 0x7FF7))
1686*53ee8cc1Swenshuai.xi     				{
1687*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP3_0E_L, BIT(4), BIT(4)); // clear accumulator
1688*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP3_0E_L, 0, BIT(4));
1689*53ee8cc1Swenshuai.xi     				}
1690*53ee8cc1Swenshuai.xi     			}
1691*53ee8cc1Swenshuai.xi             }
1692*53ee8cc1Swenshuai.xi 
1693*53ee8cc1Swenshuai.xi             break;
1694*53ee8cc1Swenshuai.xi #endif
1695*53ee8cc1Swenshuai.xi 
1696*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1697*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1698*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1699*53ee8cc1Swenshuai.xi             {
1700*53ee8cc1Swenshuai.xi                 if(R2BYTE(REG_DVI_DTOP2_16_L) & BIT(9)) // clk stable
1701*53ee8cc1Swenshuai.xi     			{
1702*53ee8cc1Swenshuai.xi     				if((R2BYTE(REG_DVI_DTOP2_01_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP2_01_L) == 0x7FF7) ||
1703*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP2_02_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP2_02_L) == 0x7FF7) ||
1704*53ee8cc1Swenshuai.xi     				(R2BYTE(REG_DVI_DTOP2_03_L) == 0x8008) || (R2BYTE(REG_DVI_DTOP2_03_L) == 0x7FF7))
1705*53ee8cc1Swenshuai.xi     				{
1706*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP2_0E_L, BIT(4), BIT(4)); // clear accumulator
1707*53ee8cc1Swenshuai.xi     					W2BYTEMSK(REG_DVI_DTOP2_0E_L, 0, BIT(4));
1708*53ee8cc1Swenshuai.xi     				}
1709*53ee8cc1Swenshuai.xi     			}
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_CDRModeMonitor()
1724*53ee8cc1Swenshuai.xi //  [Description]:
1725*53ee8cc1Swenshuai.xi //                  MHL CDR mode monitor
1726*53ee8cc1Swenshuai.xi //  [Arguments]:
1727*53ee8cc1Swenshuai.xi //                  isCbusConnected: Cbus is at connected state or not
1728*53ee8cc1Swenshuai.xi //  [Return]:
1729*53ee8cc1Swenshuai.xi //
1730*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CDRModeMonitor(MS_U8 ucCbusSelect,MS_BOOL bPathEnable)1731*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CDRModeMonitor(MS_U8 ucCbusSelect, MS_BOOL bPathEnable)
1732*53ee8cc1Swenshuai.xi {
1733*53ee8cc1Swenshuai.xi     MS_BOOL bindex = FALSE;
1734*53ee8cc1Swenshuai.xi     static MS_U8 ucStableCount = 0;
1735*53ee8cc1Swenshuai.xi     static MS_BOOL bPLLPower[MHL_CBUS_SELECT_MASK] = {TRUE, TRUE, TRUE, TRUE};
1736*53ee8cc1Swenshuai.xi 
1737*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1738*53ee8cc1Swenshuai.xi     {
1739*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1740*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1741*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1742*53ee8cc1Swenshuai.xi             {
1743*53ee8cc1Swenshuai.xi                 if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
1744*53ee8cc1Swenshuai.xi                 {
1745*53ee8cc1Swenshuai.xi                     if(ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
1746*53ee8cc1Swenshuai.xi                     {
1747*53ee8cc1Swenshuai.xi                         ucStableCount++;
1748*53ee8cc1Swenshuai.xi                     }
1749*53ee8cc1Swenshuai.xi 
1750*53ee8cc1Swenshuai.xi                     if((R2BYTE(REG_DVI_DTOP_31_L) &BIT(6)) == BIT(6)) // DE stable
1751*53ee8cc1Swenshuai.xi                     {
1752*53ee8cc1Swenshuai.xi                         if(!bPLLPower[ucCbusSelect])
1753*53ee8cc1Swenshuai.xi                         {
1754*53ee8cc1Swenshuai.xi                             W2BYTEMSK(REG_HDMI2_06_L, BIT(12), BIT(12));
1755*53ee8cc1Swenshuai.xi                             W2BYTEMSK(REG_HDMI2_06_L, 0, BIT(12));
1756*53ee8cc1Swenshuai.xi 
1757*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = TRUE;
1758*53ee8cc1Swenshuai.xi                         }
1759*53ee8cc1Swenshuai.xi                     }
1760*53ee8cc1Swenshuai.xi                     else // DE unstable
1761*53ee8cc1Swenshuai.xi                     {
1762*53ee8cc1Swenshuai.xi                         if(ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
1763*53ee8cc1Swenshuai.xi                         {
1764*53ee8cc1Swenshuai.xi                             ucStableCount = 0;
1765*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = FALSE;
1766*53ee8cc1Swenshuai.xi                         }
1767*53ee8cc1Swenshuai.xi                         else if(ucStableCount == (MHL_CDR_STABLE_THRESHOLD -MHL_CDR_STABLE_OFFSET))
1768*53ee8cc1Swenshuai.xi                         {
1769*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = TRUE;
1770*53ee8cc1Swenshuai.xi                         }
1771*53ee8cc1Swenshuai.xi                     }
1772*53ee8cc1Swenshuai.xi                 }
1773*53ee8cc1Swenshuai.xi                 else
1774*53ee8cc1Swenshuai.xi                 {
1775*53ee8cc1Swenshuai.xi                     if(bPLLPower[ucCbusSelect])
1776*53ee8cc1Swenshuai.xi                     {
1777*53ee8cc1Swenshuai.xi                         bPLLPower[ucCbusSelect] = FALSE;
1778*53ee8cc1Swenshuai.xi                         ucStableCount = 0;
1779*53ee8cc1Swenshuai.xi                     }
1780*53ee8cc1Swenshuai.xi                 }
1781*53ee8cc1Swenshuai.xi             }
1782*53ee8cc1Swenshuai.xi 
1783*53ee8cc1Swenshuai.xi             break;
1784*53ee8cc1Swenshuai.xi #endif
1785*53ee8cc1Swenshuai.xi 
1786*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1787*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1788*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1789*53ee8cc1Swenshuai.xi             {
1790*53ee8cc1Swenshuai.xi 
1791*53ee8cc1Swenshuai.xi             }
1792*53ee8cc1Swenshuai.xi 
1793*53ee8cc1Swenshuai.xi             break;
1794*53ee8cc1Swenshuai.xi #endif
1795*53ee8cc1Swenshuai.xi 
1796*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1797*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1798*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1799*53ee8cc1Swenshuai.xi             {
1800*53ee8cc1Swenshuai.xi                 if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
1801*53ee8cc1Swenshuai.xi                 {
1802*53ee8cc1Swenshuai.xi                     if(ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
1803*53ee8cc1Swenshuai.xi                     {
1804*53ee8cc1Swenshuai.xi                         ucStableCount++;
1805*53ee8cc1Swenshuai.xi                     }
1806*53ee8cc1Swenshuai.xi 
1807*53ee8cc1Swenshuai.xi                     if((R2BYTE(REG_DVI_DTOP3_31_L) &BIT(6)) == BIT(6)) // DE stable
1808*53ee8cc1Swenshuai.xi                     {
1809*53ee8cc1Swenshuai.xi                         if(!bPLLPower[ucCbusSelect])
1810*53ee8cc1Swenshuai.xi                         {
1811*53ee8cc1Swenshuai.xi                             W2BYTEMSK(REG_HDMI2_06_L, BIT(12), BIT(12));
1812*53ee8cc1Swenshuai.xi                             W2BYTEMSK(REG_HDMI2_06_L, 0, BIT(12));
1813*53ee8cc1Swenshuai.xi 
1814*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = TRUE;
1815*53ee8cc1Swenshuai.xi                         }
1816*53ee8cc1Swenshuai.xi                     }
1817*53ee8cc1Swenshuai.xi                     else // DE unstable
1818*53ee8cc1Swenshuai.xi                     {
1819*53ee8cc1Swenshuai.xi                         if(ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
1820*53ee8cc1Swenshuai.xi                         {
1821*53ee8cc1Swenshuai.xi                             ucStableCount = 0;
1822*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = FALSE;
1823*53ee8cc1Swenshuai.xi                         }
1824*53ee8cc1Swenshuai.xi                         else if(ucStableCount == (MHL_CDR_STABLE_THRESHOLD -MHL_CDR_STABLE_OFFSET))
1825*53ee8cc1Swenshuai.xi                         {
1826*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = TRUE;
1827*53ee8cc1Swenshuai.xi                         }
1828*53ee8cc1Swenshuai.xi                     }
1829*53ee8cc1Swenshuai.xi                 }
1830*53ee8cc1Swenshuai.xi                 else
1831*53ee8cc1Swenshuai.xi                 {
1832*53ee8cc1Swenshuai.xi                     if(bPLLPower[ucCbusSelect])
1833*53ee8cc1Swenshuai.xi                     {
1834*53ee8cc1Swenshuai.xi                         bPLLPower[ucCbusSelect] = FALSE;
1835*53ee8cc1Swenshuai.xi                         ucStableCount = 0;
1836*53ee8cc1Swenshuai.xi                     }
1837*53ee8cc1Swenshuai.xi                 }
1838*53ee8cc1Swenshuai.xi             }
1839*53ee8cc1Swenshuai.xi 
1840*53ee8cc1Swenshuai.xi             break;
1841*53ee8cc1Swenshuai.xi #endif
1842*53ee8cc1Swenshuai.xi 
1843*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1844*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1845*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1846*53ee8cc1Swenshuai.xi             {
1847*53ee8cc1Swenshuai.xi                 if(bPathEnable && (_mhal_mhl_CheckClockStatus(ucCbusSelect)))
1848*53ee8cc1Swenshuai.xi                 {
1849*53ee8cc1Swenshuai.xi                     if(ucStableCount < (MHL_CDR_FORCE_THRESHOLD +1))
1850*53ee8cc1Swenshuai.xi                     {
1851*53ee8cc1Swenshuai.xi                         ucStableCount++;
1852*53ee8cc1Swenshuai.xi                     }
1853*53ee8cc1Swenshuai.xi 
1854*53ee8cc1Swenshuai.xi                     if((R2BYTE(REG_DVI_DTOP2_31_L) &BIT(6)) == BIT(6)) // DE stable
1855*53ee8cc1Swenshuai.xi                     {
1856*53ee8cc1Swenshuai.xi                         if(!bPLLPower[ucCbusSelect])
1857*53ee8cc1Swenshuai.xi                         {
1858*53ee8cc1Swenshuai.xi                             W2BYTEMSK(REG_HDMI2_06_L, BIT(12), BIT(12));
1859*53ee8cc1Swenshuai.xi                             W2BYTEMSK(REG_HDMI2_06_L, 0, BIT(12));
1860*53ee8cc1Swenshuai.xi 
1861*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = TRUE;
1862*53ee8cc1Swenshuai.xi                         }
1863*53ee8cc1Swenshuai.xi                     }
1864*53ee8cc1Swenshuai.xi                     else // DE unstable
1865*53ee8cc1Swenshuai.xi                     {
1866*53ee8cc1Swenshuai.xi                         if(ucStableCount >= MHL_CDR_STABLE_THRESHOLD)
1867*53ee8cc1Swenshuai.xi                         {
1868*53ee8cc1Swenshuai.xi                             ucStableCount = 0;
1869*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = FALSE;
1870*53ee8cc1Swenshuai.xi                         }
1871*53ee8cc1Swenshuai.xi                         else if(ucStableCount == (MHL_CDR_STABLE_THRESHOLD -MHL_CDR_STABLE_OFFSET))
1872*53ee8cc1Swenshuai.xi                         {
1873*53ee8cc1Swenshuai.xi                             bPLLPower[ucCbusSelect] = TRUE;
1874*53ee8cc1Swenshuai.xi                         }
1875*53ee8cc1Swenshuai.xi                     }
1876*53ee8cc1Swenshuai.xi                 }
1877*53ee8cc1Swenshuai.xi                 else
1878*53ee8cc1Swenshuai.xi                 {
1879*53ee8cc1Swenshuai.xi                     if(bPLLPower[ucCbusSelect])
1880*53ee8cc1Swenshuai.xi                     {
1881*53ee8cc1Swenshuai.xi                         bPLLPower[ucCbusSelect] = FALSE;
1882*53ee8cc1Swenshuai.xi                         ucStableCount = 0;
1883*53ee8cc1Swenshuai.xi                     }
1884*53ee8cc1Swenshuai.xi                 }
1885*53ee8cc1Swenshuai.xi             }
1886*53ee8cc1Swenshuai.xi 
1887*53ee8cc1Swenshuai.xi             break;
1888*53ee8cc1Swenshuai.xi #endif
1889*53ee8cc1Swenshuai.xi 
1890*53ee8cc1Swenshuai.xi         default:
1891*53ee8cc1Swenshuai.xi 
1892*53ee8cc1Swenshuai.xi             break;
1893*53ee8cc1Swenshuai.xi     };
1894*53ee8cc1Swenshuai.xi 
1895*53ee8cc1Swenshuai.xi     if(ucStableCount >= MHL_CDR_FORCE_THRESHOLD)
1896*53ee8cc1Swenshuai.xi     {
1897*53ee8cc1Swenshuai.xi         bMHLSignalStable = TRUE;
1898*53ee8cc1Swenshuai.xi     }
1899*53ee8cc1Swenshuai.xi     else if(bMHLSignalStable)
1900*53ee8cc1Swenshuai.xi     {
1901*53ee8cc1Swenshuai.xi         bMHLSignalStable = FALSE;
1902*53ee8cc1Swenshuai.xi     }
1903*53ee8cc1Swenshuai.xi 
1904*53ee8cc1Swenshuai.xi     return bindex;
1905*53ee8cc1Swenshuai.xi }
1906*53ee8cc1Swenshuai.xi 
1907*53ee8cc1Swenshuai.xi //**************************************************************************
1908*53ee8cc1Swenshuai.xi //  [Function Name]:
1909*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusIsolate()
1910*53ee8cc1Swenshuai.xi //  [Description]
1911*53ee8cc1Swenshuai.xi //                  MHL cable isolate
1912*53ee8cc1Swenshuai.xi //  [Arguments]:
1913*53ee8cc1Swenshuai.xi //
1914*53ee8cc1Swenshuai.xi //  [Return]:
1915*53ee8cc1Swenshuai.xi //
1916*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIsolate(MS_U8 ucCbusSelect,MS_BOOL bFlag)1917*53ee8cc1Swenshuai.xi void mhal_mhl_CbusIsolate(MS_U8 ucCbusSelect, MS_BOOL bFlag)
1918*53ee8cc1Swenshuai.xi {
1919*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
1920*53ee8cc1Swenshuai.xi     {
1921*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
1922*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
1923*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
1924*53ee8cc1Swenshuai.xi             {
1925*53ee8cc1Swenshuai.xi                 if(bFlag)
1926*53ee8cc1Swenshuai.xi                 {
1927*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
1928*53ee8cc1Swenshuai.xi                 }
1929*53ee8cc1Swenshuai.xi                 else
1930*53ee8cc1Swenshuai.xi                 {
1931*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
1932*53ee8cc1Swenshuai.xi                 }
1933*53ee8cc1Swenshuai.xi             }
1934*53ee8cc1Swenshuai.xi 
1935*53ee8cc1Swenshuai.xi             break;
1936*53ee8cc1Swenshuai.xi #endif
1937*53ee8cc1Swenshuai.xi 
1938*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
1939*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
1940*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
1941*53ee8cc1Swenshuai.xi             {
1942*53ee8cc1Swenshuai.xi 
1943*53ee8cc1Swenshuai.xi             }
1944*53ee8cc1Swenshuai.xi 
1945*53ee8cc1Swenshuai.xi             break;
1946*53ee8cc1Swenshuai.xi #endif
1947*53ee8cc1Swenshuai.xi 
1948*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
1949*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
1950*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
1951*53ee8cc1Swenshuai.xi             {
1952*53ee8cc1Swenshuai.xi                 if(bFlag)
1953*53ee8cc1Swenshuai.xi                 {
1954*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
1955*53ee8cc1Swenshuai.xi                 }
1956*53ee8cc1Swenshuai.xi                 else
1957*53ee8cc1Swenshuai.xi                 {
1958*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
1959*53ee8cc1Swenshuai.xi                 }
1960*53ee8cc1Swenshuai.xi             }
1961*53ee8cc1Swenshuai.xi 
1962*53ee8cc1Swenshuai.xi             break;
1963*53ee8cc1Swenshuai.xi #endif
1964*53ee8cc1Swenshuai.xi 
1965*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
1966*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
1967*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
1968*53ee8cc1Swenshuai.xi             {
1969*53ee8cc1Swenshuai.xi                 if(bFlag)
1970*53ee8cc1Swenshuai.xi                 {
1971*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_00, BIT(9), BIT(9) | BIT(8));
1972*53ee8cc1Swenshuai.xi                 }
1973*53ee8cc1Swenshuai.xi                 else
1974*53ee8cc1Swenshuai.xi                 {
1975*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_00, 0, BIT(9) | BIT(8));
1976*53ee8cc1Swenshuai.xi                 }
1977*53ee8cc1Swenshuai.xi             }
1978*53ee8cc1Swenshuai.xi 
1979*53ee8cc1Swenshuai.xi             break;
1980*53ee8cc1Swenshuai.xi #endif
1981*53ee8cc1Swenshuai.xi 
1982*53ee8cc1Swenshuai.xi         default:
1983*53ee8cc1Swenshuai.xi 
1984*53ee8cc1Swenshuai.xi             break;
1985*53ee8cc1Swenshuai.xi     };
1986*53ee8cc1Swenshuai.xi }
1987*53ee8cc1Swenshuai.xi 
1988*53ee8cc1Swenshuai.xi //**************************************************************************
1989*53ee8cc1Swenshuai.xi //  [Function Name]:
1990*53ee8cc1Swenshuai.xi //                  mhal_mhl_VbusCharge()
1991*53ee8cc1Swenshuai.xi //  [Description]
1992*53ee8cc1Swenshuai.xi //                  MHL Vbus charge
1993*53ee8cc1Swenshuai.xi //  [Arguments]:
1994*53ee8cc1Swenshuai.xi //
1995*53ee8cc1Swenshuai.xi //  [Return]:
1996*53ee8cc1Swenshuai.xi //
1997*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_VbusCharge(MS_U8 ucCbusSelect,MS_U8 bState)1998*53ee8cc1Swenshuai.xi void mhal_mhl_VbusCharge(MS_U8 ucCbusSelect, MS_U8 bState)
1999*53ee8cc1Swenshuai.xi {
2000*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
2001*53ee8cc1Swenshuai.xi     {
2002*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2003*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
2004*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
2005*53ee8cc1Swenshuai.xi             {
2006*53ee8cc1Swenshuai.xi                 if(bState == VBUS_SW_CHARGE)
2007*53ee8cc1Swenshuai.xi                 {
2008*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
2009*53ee8cc1Swenshuai.xi                 }
2010*53ee8cc1Swenshuai.xi                 else if(bState == VBUS_SW_UNCHARGE)
2011*53ee8cc1Swenshuai.xi                 {
2012*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
2013*53ee8cc1Swenshuai.xi                 }
2014*53ee8cc1Swenshuai.xi                 else
2015*53ee8cc1Swenshuai.xi                 {
2016*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
2017*53ee8cc1Swenshuai.xi                 }
2018*53ee8cc1Swenshuai.xi             }
2019*53ee8cc1Swenshuai.xi 
2020*53ee8cc1Swenshuai.xi             break;
2021*53ee8cc1Swenshuai.xi #endif
2022*53ee8cc1Swenshuai.xi 
2023*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2024*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
2025*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
2026*53ee8cc1Swenshuai.xi             {
2027*53ee8cc1Swenshuai.xi 
2028*53ee8cc1Swenshuai.xi             }
2029*53ee8cc1Swenshuai.xi 
2030*53ee8cc1Swenshuai.xi             break;
2031*53ee8cc1Swenshuai.xi #endif
2032*53ee8cc1Swenshuai.xi 
2033*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2034*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
2035*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
2036*53ee8cc1Swenshuai.xi             {
2037*53ee8cc1Swenshuai.xi                 if(bState == VBUS_SW_CHARGE)
2038*53ee8cc1Swenshuai.xi                 {
2039*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
2040*53ee8cc1Swenshuai.xi                 }
2041*53ee8cc1Swenshuai.xi                 else if(bState == VBUS_SW_UNCHARGE)
2042*53ee8cc1Swenshuai.xi                 {
2043*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
2044*53ee8cc1Swenshuai.xi                 }
2045*53ee8cc1Swenshuai.xi                 else
2046*53ee8cc1Swenshuai.xi                 {
2047*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
2048*53ee8cc1Swenshuai.xi                 }
2049*53ee8cc1Swenshuai.xi             }
2050*53ee8cc1Swenshuai.xi 
2051*53ee8cc1Swenshuai.xi             break;
2052*53ee8cc1Swenshuai.xi #endif
2053*53ee8cc1Swenshuai.xi 
2054*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2055*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
2056*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
2057*53ee8cc1Swenshuai.xi             {
2058*53ee8cc1Swenshuai.xi                 if(bState == VBUS_SW_CHARGE)
2059*53ee8cc1Swenshuai.xi                 {
2060*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, BMASK(1:0), BMASK(1:0));
2061*53ee8cc1Swenshuai.xi                 }
2062*53ee8cc1Swenshuai.xi                 else if(bState == VBUS_SW_UNCHARGE)
2063*53ee8cc1Swenshuai.xi                 {
2064*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, BIT(1), BMASK(1:0));
2065*53ee8cc1Swenshuai.xi                 }
2066*53ee8cc1Swenshuai.xi                 else
2067*53ee8cc1Swenshuai.xi                 {
2068*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_01, 0, BMASK(1:0));
2069*53ee8cc1Swenshuai.xi                 }
2070*53ee8cc1Swenshuai.xi             }
2071*53ee8cc1Swenshuai.xi 
2072*53ee8cc1Swenshuai.xi             break;
2073*53ee8cc1Swenshuai.xi #endif
2074*53ee8cc1Swenshuai.xi 
2075*53ee8cc1Swenshuai.xi         default:
2076*53ee8cc1Swenshuai.xi 
2077*53ee8cc1Swenshuai.xi             break;
2078*53ee8cc1Swenshuai.xi     };
2079*53ee8cc1Swenshuai.xi }
2080*53ee8cc1Swenshuai.xi 
2081*53ee8cc1Swenshuai.xi //**************************************************************************
2082*53ee8cc1Swenshuai.xi //  [Function Name]:
2083*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusFloating()
2084*53ee8cc1Swenshuai.xi //  [Description]
2085*53ee8cc1Swenshuai.xi //                  MHL cable floating
2086*53ee8cc1Swenshuai.xi //  [Arguments]:
2087*53ee8cc1Swenshuai.xi //
2088*53ee8cc1Swenshuai.xi //  [Return]:
2089*53ee8cc1Swenshuai.xi //
2090*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusFloating(MS_BOOL bFlag)2091*53ee8cc1Swenshuai.xi void mhal_mhl_CbusFloating(MS_BOOL bFlag)
2092*53ee8cc1Swenshuai.xi {
2093*53ee8cc1Swenshuai.xi     if(bFlag)
2094*53ee8cc1Swenshuai.xi     {
2095*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(5), BIT(5));
2096*53ee8cc1Swenshuai.xi     }
2097*53ee8cc1Swenshuai.xi     else
2098*53ee8cc1Swenshuai.xi     {
2099*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_17, 0, BIT(5));
2100*53ee8cc1Swenshuai.xi     }
2101*53ee8cc1Swenshuai.xi }
2102*53ee8cc1Swenshuai.xi 
2103*53ee8cc1Swenshuai.xi //**************************************************************************
2104*53ee8cc1Swenshuai.xi //  [Function Name]:
2105*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusStucktoLow()
2106*53ee8cc1Swenshuai.xi //  [Description]
2107*53ee8cc1Swenshuai.xi //
2108*53ee8cc1Swenshuai.xi //  [Arguments]:
2109*53ee8cc1Swenshuai.xi //
2110*53ee8cc1Swenshuai.xi //  [Return]:
2111*53ee8cc1Swenshuai.xi //
2112*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLow(MS_BOOL bFlag)2113*53ee8cc1Swenshuai.xi void mhal_mhl_CbusStucktoLow(MS_BOOL bFlag)
2114*53ee8cc1Swenshuai.xi {
2115*53ee8cc1Swenshuai.xi     if(bFlag)
2116*53ee8cc1Swenshuai.xi     {
2117*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_18, 0, BIT(1)); // cbus stuck to low int mask
2118*53ee8cc1Swenshuai.xi     }
2119*53ee8cc1Swenshuai.xi     else
2120*53ee8cc1Swenshuai.xi     {
2121*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(1), BIT(1)); // cbus stuck to low int mask
2122*53ee8cc1Swenshuai.xi     }
2123*53ee8cc1Swenshuai.xi 
2124*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(0), BIT(0)); // Clear cbus stuck to low int flag
2125*53ee8cc1Swenshuai.xi }
2126*53ee8cc1Swenshuai.xi 
2127*53ee8cc1Swenshuai.xi //**************************************************************************
2128*53ee8cc1Swenshuai.xi //  [Function Name]:
2129*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusWakeupInterrupt()
2130*53ee8cc1Swenshuai.xi //  [Description]
2131*53ee8cc1Swenshuai.xi //
2132*53ee8cc1Swenshuai.xi //  [Arguments]:
2133*53ee8cc1Swenshuai.xi //
2134*53ee8cc1Swenshuai.xi //  [Return]:
2135*53ee8cc1Swenshuai.xi //
2136*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupInterrupt(MS_BOOL bFlag)2137*53ee8cc1Swenshuai.xi void mhal_mhl_CbusWakeupInterrupt(MS_BOOL bFlag)
2138*53ee8cc1Swenshuai.xi {
2139*53ee8cc1Swenshuai.xi     if(bFlag)
2140*53ee8cc1Swenshuai.xi     {
2141*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_18, 0, BIT(5)); // wake up pulse int mask
2142*53ee8cc1Swenshuai.xi     }
2143*53ee8cc1Swenshuai.xi     else
2144*53ee8cc1Swenshuai.xi     {
2145*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(5), BIT(5)); // wake up pulse int mask
2146*53ee8cc1Swenshuai.xi     }
2147*53ee8cc1Swenshuai.xi 
2148*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(4), BIT(4)); // Clear wake up pulse int flag
2149*53ee8cc1Swenshuai.xi }
2150*53ee8cc1Swenshuai.xi 
2151*53ee8cc1Swenshuai.xi //**************************************************************************
2152*53ee8cc1Swenshuai.xi //  [Function Name]:
2153*53ee8cc1Swenshuai.xi //                  mhal_mhl_SetVenderID()
2154*53ee8cc1Swenshuai.xi //  [Description]
2155*53ee8cc1Swenshuai.xi //
2156*53ee8cc1Swenshuai.xi //  [Arguments]:
2157*53ee8cc1Swenshuai.xi //
2158*53ee8cc1Swenshuai.xi //  [Return]:
2159*53ee8cc1Swenshuai.xi //
2160*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetVenderID(MS_U8 ucVenderID)2161*53ee8cc1Swenshuai.xi void mhal_mhl_SetVenderID(MS_U8 ucVenderID)
2162*53ee8cc1Swenshuai.xi {
2163*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_MHL_CBUS_00, (ucVenderID << 8), BMASK(15:8));
2164*53ee8cc1Swenshuai.xi }
2165*53ee8cc1Swenshuai.xi 
2166*53ee8cc1Swenshuai.xi //**************************************************************************
2167*53ee8cc1Swenshuai.xi //  [Function Name]:
2168*53ee8cc1Swenshuai.xi //                  mhal_mhl_LoadEDID()
2169*53ee8cc1Swenshuai.xi //  [Description]
2170*53ee8cc1Swenshuai.xi //
2171*53ee8cc1Swenshuai.xi //  [Arguments]:
2172*53ee8cc1Swenshuai.xi //
2173*53ee8cc1Swenshuai.xi //  [Return]:
2174*53ee8cc1Swenshuai.xi //
2175*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadEDID(MS_U8 * edid)2176*53ee8cc1Swenshuai.xi void mhal_mhl_LoadEDID(MS_U8 *edid)
2177*53ee8cc1Swenshuai.xi {
2178*53ee8cc1Swenshuai.xi     MS_U16 ustemp = 0;
2179*53ee8cc1Swenshuai.xi 
2180*53ee8cc1Swenshuai.xi     if(edid != NULL)
2181*53ee8cc1Swenshuai.xi     {
2182*53ee8cc1Swenshuai.xi         // Load EDID
2183*53ee8cc1Swenshuai.xi         msg_mhl(printf("** Munich Load MHL EDID...\r\n"));
2184*53ee8cc1Swenshuai.xi 
2185*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_MHL_CBUS_52, BIT(1), BIT(1)); // CPU write enable
2186*53ee8cc1Swenshuai.xi 
2187*53ee8cc1Swenshuai.xi         for(ustemp = 0; ustemp <256; ustemp++)
2188*53ee8cc1Swenshuai.xi         {
2189*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MHL_CBUS_52, ustemp <<8, 0xFF00); // address
2190*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MHL_CBUS_53, edid[ustemp], 0x00FF); // data
2191*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MHL_CBUS_52, BIT(0), BIT(0)); // write trigger
2192*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(0));
2193*53ee8cc1Swenshuai.xi             while(R2BYTE(REG_MHL_CBUS_52) & BIT(5));
2194*53ee8cc1Swenshuai.xi         }
2195*53ee8cc1Swenshuai.xi 
2196*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(1)); // CPU write disable
2197*53ee8cc1Swenshuai.xi     }
2198*53ee8cc1Swenshuai.xi }
2199*53ee8cc1Swenshuai.xi 
2200*53ee8cc1Swenshuai.xi //**************************************************************************
2201*53ee8cc1Swenshuai.xi //  [Function Name]:
2202*53ee8cc1Swenshuai.xi //                  mhal_mhl_ReadEDID()
2203*53ee8cc1Swenshuai.xi //  [Description]
2204*53ee8cc1Swenshuai.xi //
2205*53ee8cc1Swenshuai.xi //  [Arguments]:
2206*53ee8cc1Swenshuai.xi //
2207*53ee8cc1Swenshuai.xi //  [Return]:
2208*53ee8cc1Swenshuai.xi //
2209*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ReadEDID(MS_U16 usSize,MS_U8 * edid)2210*53ee8cc1Swenshuai.xi void mhal_mhl_ReadEDID(MS_U16 usSize, MS_U8 *edid)
2211*53ee8cc1Swenshuai.xi {
2212*53ee8cc1Swenshuai.xi     MS_U16 ustemp = 0;
2213*53ee8cc1Swenshuai.xi 
2214*53ee8cc1Swenshuai.xi     if(edid != NULL)
2215*53ee8cc1Swenshuai.xi     {
2216*53ee8cc1Swenshuai.xi         // Read EDID
2217*53ee8cc1Swenshuai.xi         msg_mhl(printf("** Munich Read MHL EDID...\r\n"));
2218*53ee8cc1Swenshuai.xi 
2219*53ee8cc1Swenshuai.xi         for(ustemp = 0; ustemp < usSize; ustemp++)
2220*53ee8cc1Swenshuai.xi         {
2221*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MHL_CBUS_52, ustemp <<8, 0xFF00); // address
2222*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MHL_CBUS_52, BIT(3), BIT(3)); // read trigger
2223*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_MHL_CBUS_52, 0, BIT(0));
2224*53ee8cc1Swenshuai.xi             while(R2BYTE(REG_MHL_CBUS_52) & BIT(4));
2225*53ee8cc1Swenshuai.xi 
2226*53ee8cc1Swenshuai.xi             edid[ustemp] = (MS_U8)((R2BYTE(REG_MHL_CBUS_53) & 0xFF00) >> 8); // data
2227*53ee8cc1Swenshuai.xi         }
2228*53ee8cc1Swenshuai.xi     }
2229*53ee8cc1Swenshuai.xi }
2230*53ee8cc1Swenshuai.xi 
2231*53ee8cc1Swenshuai.xi //**************************************************************************
2232*53ee8cc1Swenshuai.xi //  [Function Name]:
2233*53ee8cc1Swenshuai.xi //                  mhal_mhl_LoadDeviceCapability()
2234*53ee8cc1Swenshuai.xi //  [Description]
2235*53ee8cc1Swenshuai.xi //
2236*53ee8cc1Swenshuai.xi //  [Arguments]:
2237*53ee8cc1Swenshuai.xi //
2238*53ee8cc1Swenshuai.xi //  [Return]:
2239*53ee8cc1Swenshuai.xi //
2240*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadDeviceCapability(MS_U8 * devcap)2241*53ee8cc1Swenshuai.xi void mhal_mhl_LoadDeviceCapability(MS_U8 *devcap)
2242*53ee8cc1Swenshuai.xi {
2243*53ee8cc1Swenshuai.xi     MS_U8 ucIndex = 0;
2244*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
2245*53ee8cc1Swenshuai.xi 
2246*53ee8cc1Swenshuai.xi     if(devcap != NULL)
2247*53ee8cc1Swenshuai.xi     {
2248*53ee8cc1Swenshuai.xi         msg_mhl(printf("** Munich Load DevCap...\r\n"));
2249*53ee8cc1Swenshuai.xi 
2250*53ee8cc1Swenshuai.xi         // Load MHL device capability
2251*53ee8cc1Swenshuai.xi         for(uctemp = 0; uctemp <8; uctemp++)
2252*53ee8cc1Swenshuai.xi         {
2253*53ee8cc1Swenshuai.xi             if(uctemp == 2)
2254*53ee8cc1Swenshuai.xi             {
2255*53ee8cc1Swenshuai.xi                 ucIndex = 1;
2256*53ee8cc1Swenshuai.xi             }
2257*53ee8cc1Swenshuai.xi 
2258*53ee8cc1Swenshuai.xi             W2BYTE(REG_MHL_CBUS_01 +(uctemp *2), (devcap[(uctemp *2) +1 -ucIndex] <<8) | devcap[uctemp *2 -ucIndex]);
2259*53ee8cc1Swenshuai.xi         }
2260*53ee8cc1Swenshuai.xi 
2261*53ee8cc1Swenshuai.xi         W2BYTE(REG_MHL_CBUS_03, (devcap[3] <<8) | devcap[4]);
2262*53ee8cc1Swenshuai.xi         W2BYTE(REG_MHL_CBUS_07, (devcap[11] <<8) | devcap[12]);
2263*53ee8cc1Swenshuai.xi 
2264*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_MHL_CBUS_09, devcap[15], BMASK(7:0));
2265*53ee8cc1Swenshuai.xi     }
2266*53ee8cc1Swenshuai.xi }
2267*53ee8cc1Swenshuai.xi 
2268*53ee8cc1Swenshuai.xi //**************************************************************************
2269*53ee8cc1Swenshuai.xi //  [Function Name]:
2270*53ee8cc1Swenshuai.xi //                  mhal_mhl_initial()
2271*53ee8cc1Swenshuai.xi //  [Description]
2272*53ee8cc1Swenshuai.xi //                  MHL init
2273*53ee8cc1Swenshuai.xi //  [Arguments]:
2274*53ee8cc1Swenshuai.xi //                  *edid: MHL EDID data
2275*53ee8cc1Swenshuai.xi //                  *devcap: MHL device capability
2276*53ee8cc1Swenshuai.xi //  [Return]:
2277*53ee8cc1Swenshuai.xi //
2278*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_initial(MS_U8 * edid,MS_U8 * devcap,MS_U8 ucVenderID)2279*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_initial(MS_U8 *edid, MS_U8 *devcap, MS_U8 ucVenderID)
2280*53ee8cc1Swenshuai.xi {
2281*53ee8cc1Swenshuai.xi     MS_U16 uctemp = 0;
2282*53ee8cc1Swenshuai.xi 
2283*53ee8cc1Swenshuai.xi     // Initial setting
2284*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <(sizeof(tMHL_INITIAL_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
2285*53ee8cc1Swenshuai.xi     {
2286*53ee8cc1Swenshuai.xi         W2BYTEMSK(tMHL_INITIAL_TABLE[uctemp].addr, tMHL_INITIAL_TABLE[uctemp].databuf, tMHL_INITIAL_TABLE[uctemp].mask);
2287*53ee8cc1Swenshuai.xi     }
2288*53ee8cc1Swenshuai.xi 
2289*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
2290*53ee8cc1Swenshuai.xi 
2291*53ee8cc1Swenshuai.xi     _mhal_mhl_CbusAndClockSelect();
2292*53ee8cc1Swenshuai.xi 
2293*53ee8cc1Swenshuai.xi #if(MHL_INTERRUPT_USE_PM_IRQ)
2294*53ee8cc1Swenshuai.xi     // Open PM irq mask
2295*53ee8cc1Swenshuai.xi     W2BYTEMSK(0x2B28, 0, BIT(11));
2296*53ee8cc1Swenshuai.xi #endif
2297*53ee8cc1Swenshuai.xi 
2298*53ee8cc1Swenshuai.xi     // Load EDID
2299*53ee8cc1Swenshuai.xi     mhal_mhl_LoadEDID(edid);
2300*53ee8cc1Swenshuai.xi 
2301*53ee8cc1Swenshuai.xi     // Load vendor ID
2302*53ee8cc1Swenshuai.xi     mhal_mhl_SetVenderID(ucVenderID);
2303*53ee8cc1Swenshuai.xi 
2304*53ee8cc1Swenshuai.xi     // Load DevCap
2305*53ee8cc1Swenshuai.xi     mhal_mhl_LoadDeviceCapability(devcap);
2306*53ee8cc1Swenshuai.xi 
2307*53ee8cc1Swenshuai.xi     // Clear Cbus received interrupt status
2308*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4)|BIT(0), BIT(4)|BIT(1)|BIT(0));  // [1]: receive packet valid mask
2309*53ee8cc1Swenshuai.xi 
2310*53ee8cc1Swenshuai.xi     mhal_mhl_CbusStucktoLow(FALSE);
2311*53ee8cc1Swenshuai.xi     mhal_mhl_CbusWakeupInterrupt(FALSE);
2312*53ee8cc1Swenshuai.xi 
2313*53ee8cc1Swenshuai.xi     _mhal_mhl_MHLForceToAttach();
2314*53ee8cc1Swenshuai.xi 
2315*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
2316*53ee8cc1Swenshuai.xi     {
2317*53ee8cc1Swenshuai.xi         _mhal_mhl_RtermHWControl(uctemp, FALSE);
2318*53ee8cc1Swenshuai.xi         _mhal_mhl_PhyInitialSetting(uctemp);
2319*53ee8cc1Swenshuai.xi     }
2320*53ee8cc1Swenshuai.xi 
2321*53ee8cc1Swenshuai.xi #if(DMHL_TEST_SIGNAL_SUPPORT)
2322*53ee8cc1Swenshuai.xi     W2BYTEMSK(0x001102, BIT(7), BIT(7));
2323*53ee8cc1Swenshuai.xi     W2BYTEMSK(0x001128, BIT(0), BIT(0));
2324*53ee8cc1Swenshuai.xi 
2325*53ee8cc1Swenshuai.xi #endif
2326*53ee8cc1Swenshuai.xi 
2327*53ee8cc1Swenshuai.xi     mhal_mhl_CbusFloating(TRUE);
2328*53ee8cc1Swenshuai.xi 
2329*53ee8cc1Swenshuai.xi     return MHL_CHIP_FUNCTION_CAPABILITY;
2330*53ee8cc1Swenshuai.xi }
2331*53ee8cc1Swenshuai.xi 
2332*53ee8cc1Swenshuai.xi //**************************************************************************
2333*53ee8cc1Swenshuai.xi //  [Function Name]:
2334*53ee8cc1Swenshuai.xi //                  mhal_mhl_InvertCableDetect()
2335*53ee8cc1Swenshuai.xi //  [Description]
2336*53ee8cc1Swenshuai.xi //
2337*53ee8cc1Swenshuai.xi //  [Arguments]:
2338*53ee8cc1Swenshuai.xi //
2339*53ee8cc1Swenshuai.xi //  [Return]:
2340*53ee8cc1Swenshuai.xi //
2341*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_InvertCableDetect(MS_U8 ucCbusSelect,MS_BOOL bCableDetectInvert)2342*53ee8cc1Swenshuai.xi void mhal_mhl_InvertCableDetect(MS_U8 ucCbusSelect, MS_BOOL bCableDetectInvert)
2343*53ee8cc1Swenshuai.xi {
2344*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
2345*53ee8cc1Swenshuai.xi     {
2346*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2347*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
2348*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
2349*53ee8cc1Swenshuai.xi             {
2350*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
2351*53ee8cc1Swenshuai.xi             }
2352*53ee8cc1Swenshuai.xi 
2353*53ee8cc1Swenshuai.xi             break;
2354*53ee8cc1Swenshuai.xi #endif
2355*53ee8cc1Swenshuai.xi 
2356*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2357*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
2358*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
2359*53ee8cc1Swenshuai.xi             {
2360*53ee8cc1Swenshuai.xi 
2361*53ee8cc1Swenshuai.xi             }
2362*53ee8cc1Swenshuai.xi 
2363*53ee8cc1Swenshuai.xi             break;
2364*53ee8cc1Swenshuai.xi #endif
2365*53ee8cc1Swenshuai.xi 
2366*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2367*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
2368*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
2369*53ee8cc1Swenshuai.xi             {
2370*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
2371*53ee8cc1Swenshuai.xi             }
2372*53ee8cc1Swenshuai.xi 
2373*53ee8cc1Swenshuai.xi             break;
2374*53ee8cc1Swenshuai.xi #endif
2375*53ee8cc1Swenshuai.xi 
2376*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2377*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
2378*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
2379*53ee8cc1Swenshuai.xi             {
2380*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_PM_MHL_CBUS_00, bCableDetectInvert? BIT(11): 0, BIT(11));
2381*53ee8cc1Swenshuai.xi             }
2382*53ee8cc1Swenshuai.xi 
2383*53ee8cc1Swenshuai.xi             break;
2384*53ee8cc1Swenshuai.xi #endif
2385*53ee8cc1Swenshuai.xi 
2386*53ee8cc1Swenshuai.xi         default:
2387*53ee8cc1Swenshuai.xi 
2388*53ee8cc1Swenshuai.xi             break;
2389*53ee8cc1Swenshuai.xi     };
2390*53ee8cc1Swenshuai.xi }
2391*53ee8cc1Swenshuai.xi 
2392*53ee8cc1Swenshuai.xi //**************************************************************************
2393*53ee8cc1Swenshuai.xi //  [Function Name]:
2394*53ee8cc1Swenshuai.xi //                  mhal_mhl_VbusConfigSetting()
2395*53ee8cc1Swenshuai.xi //  [Description]
2396*53ee8cc1Swenshuai.xi //
2397*53ee8cc1Swenshuai.xi //  [Arguments]:
2398*53ee8cc1Swenshuai.xi //
2399*53ee8cc1Swenshuai.xi //  [Return]:
2400*53ee8cc1Swenshuai.xi //
2401*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_VbusConfigSetting(MS_U8 ucCbusSelect,MS_U8 ucState)2402*53ee8cc1Swenshuai.xi void mhal_mhl_VbusConfigSetting(MS_U8 ucCbusSelect, MS_U8 ucState)
2403*53ee8cc1Swenshuai.xi {
2404*53ee8cc1Swenshuai.xi     MS_U8 ucOutputState = ucState &(MHL_VBUS_LOW_ENABLE_MODE | MHL_VBUS_HIGH_ENABLE_MODE);
2405*53ee8cc1Swenshuai.xi 
2406*53ee8cc1Swenshuai.xi     ucState = ucState &(MHL_VBUS_OUTPUT_MODE | MHL_VBUS_INVERSE_MODE);
2407*53ee8cc1Swenshuai.xi 
2408*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
2409*53ee8cc1Swenshuai.xi     {
2410*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2411*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
2412*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
2413*53ee8cc1Swenshuai.xi             {
2414*53ee8cc1Swenshuai.xi                 if(ucState == MHL_VBUS_OUTPUT_MODE)
2415*53ee8cc1Swenshuai.xi                 {
2416*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
2417*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
2418*53ee8cc1Swenshuai.xi                 }
2419*53ee8cc1Swenshuai.xi                 else if(ucState > 0)
2420*53ee8cc1Swenshuai.xi                 {
2421*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
2422*53ee8cc1Swenshuai.xi                 }
2423*53ee8cc1Swenshuai.xi 
2424*53ee8cc1Swenshuai.xi                 if(ucOutputState > 0)
2425*53ee8cc1Swenshuai.xi                 {
2426*53ee8cc1Swenshuai.xi                     if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
2427*53ee8cc1Swenshuai.xi                     {
2428*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
2429*53ee8cc1Swenshuai.xi                     }
2430*53ee8cc1Swenshuai.xi                     else
2431*53ee8cc1Swenshuai.xi                     {
2432*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
2433*53ee8cc1Swenshuai.xi                     }
2434*53ee8cc1Swenshuai.xi                 }
2435*53ee8cc1Swenshuai.xi             }
2436*53ee8cc1Swenshuai.xi 
2437*53ee8cc1Swenshuai.xi             break;
2438*53ee8cc1Swenshuai.xi #endif
2439*53ee8cc1Swenshuai.xi 
2440*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2441*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
2442*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
2443*53ee8cc1Swenshuai.xi             {
2444*53ee8cc1Swenshuai.xi 
2445*53ee8cc1Swenshuai.xi             }
2446*53ee8cc1Swenshuai.xi 
2447*53ee8cc1Swenshuai.xi             break;
2448*53ee8cc1Swenshuai.xi #endif
2449*53ee8cc1Swenshuai.xi 
2450*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2451*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
2452*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
2453*53ee8cc1Swenshuai.xi             {
2454*53ee8cc1Swenshuai.xi                 if(ucState == MHL_VBUS_OUTPUT_MODE)
2455*53ee8cc1Swenshuai.xi                 {
2456*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
2457*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
2458*53ee8cc1Swenshuai.xi                 }
2459*53ee8cc1Swenshuai.xi                 else if(ucState > 0)
2460*53ee8cc1Swenshuai.xi                 {
2461*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
2462*53ee8cc1Swenshuai.xi                 }
2463*53ee8cc1Swenshuai.xi 
2464*53ee8cc1Swenshuai.xi                 if(ucOutputState > 0)
2465*53ee8cc1Swenshuai.xi                 {
2466*53ee8cc1Swenshuai.xi                     if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
2467*53ee8cc1Swenshuai.xi                     {
2468*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
2469*53ee8cc1Swenshuai.xi                     }
2470*53ee8cc1Swenshuai.xi                     else
2471*53ee8cc1Swenshuai.xi                     {
2472*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
2473*53ee8cc1Swenshuai.xi                     }
2474*53ee8cc1Swenshuai.xi                 }
2475*53ee8cc1Swenshuai.xi             }
2476*53ee8cc1Swenshuai.xi 
2477*53ee8cc1Swenshuai.xi             break;
2478*53ee8cc1Swenshuai.xi #endif
2479*53ee8cc1Swenshuai.xi 
2480*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2481*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
2482*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
2483*53ee8cc1Swenshuai.xi             {
2484*53ee8cc1Swenshuai.xi                 if(ucState == MHL_VBUS_OUTPUT_MODE)
2485*53ee8cc1Swenshuai.xi                 {
2486*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
2487*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_21, BIT(7), BIT(7));
2488*53ee8cc1Swenshuai.xi                 }
2489*53ee8cc1Swenshuai.xi                 else if(ucState > 0)
2490*53ee8cc1Swenshuai.xi                 {
2491*53ee8cc1Swenshuai.xi                     W2BYTEMSK(REG_PM_MHL_CBUS_31, BIT(0), BIT(0));
2492*53ee8cc1Swenshuai.xi                 }
2493*53ee8cc1Swenshuai.xi 
2494*53ee8cc1Swenshuai.xi                 if(ucOutputState > 0)
2495*53ee8cc1Swenshuai.xi                 {
2496*53ee8cc1Swenshuai.xi                     if(ucOutputState == MHL_VBUS_HIGH_ENABLE_MODE)
2497*53ee8cc1Swenshuai.xi                     {
2498*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(9:8));
2499*53ee8cc1Swenshuai.xi                     }
2500*53ee8cc1Swenshuai.xi                     else
2501*53ee8cc1Swenshuai.xi                     {
2502*53ee8cc1Swenshuai.xi                         W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(9), BMASK(9:8));
2503*53ee8cc1Swenshuai.xi                     }
2504*53ee8cc1Swenshuai.xi                 }
2505*53ee8cc1Swenshuai.xi             }
2506*53ee8cc1Swenshuai.xi 
2507*53ee8cc1Swenshuai.xi             break;
2508*53ee8cc1Swenshuai.xi #endif
2509*53ee8cc1Swenshuai.xi 
2510*53ee8cc1Swenshuai.xi         default:
2511*53ee8cc1Swenshuai.xi 
2512*53ee8cc1Swenshuai.xi             break;
2513*53ee8cc1Swenshuai.xi     };
2514*53ee8cc1Swenshuai.xi }
2515*53ee8cc1Swenshuai.xi 
2516*53ee8cc1Swenshuai.xi //**************************************************************************
2517*53ee8cc1Swenshuai.xi //  [Function Name]:
2518*53ee8cc1Swenshuai.xi //                  mhal_mhl_CableDetectPadSetting()
2519*53ee8cc1Swenshuai.xi //  [Description]
2520*53ee8cc1Swenshuai.xi //
2521*53ee8cc1Swenshuai.xi //  [Arguments]:
2522*53ee8cc1Swenshuai.xi //
2523*53ee8cc1Swenshuai.xi //  [Return]:
2524*53ee8cc1Swenshuai.xi //
2525*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableDetectPadSetting(MS_U8 ucSelect)2526*53ee8cc1Swenshuai.xi void mhal_mhl_CableDetectPadSetting(MS_U8 ucSelect)
2527*53ee8cc1Swenshuai.xi {
2528*53ee8cc1Swenshuai.xi     if((ucSelect &MHL_CABLE_DETECT_SELECT_PORTC) && (ucSelect &MHL_CABLE_DETECT_SELECT_PORTD))
2529*53ee8cc1Swenshuai.xi     {
2530*53ee8cc1Swenshuai.xi         msg_mhl(printf("** MHL cable detect only select one port T^T\r\n"));
2531*53ee8cc1Swenshuai.xi     }
2532*53ee8cc1Swenshuai.xi     else
2533*53ee8cc1Swenshuai.xi     {
2534*53ee8cc1Swenshuai.xi         // Do nothing
2535*53ee8cc1Swenshuai.xi     }
2536*53ee8cc1Swenshuai.xi }
2537*53ee8cc1Swenshuai.xi 
2538*53ee8cc1Swenshuai.xi //**************************************************************************
2539*53ee8cc1Swenshuai.xi //  [Function Name]:
2540*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusPadConfigSwitch()
2541*53ee8cc1Swenshuai.xi //  [Description]
2542*53ee8cc1Swenshuai.xi //
2543*53ee8cc1Swenshuai.xi //  [Arguments]:
2544*53ee8cc1Swenshuai.xi //
2545*53ee8cc1Swenshuai.xi //  [Return]:
2546*53ee8cc1Swenshuai.xi //
2547*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusPadConfigSwitch(MS_U8 ucCbusSelect,MS_BOOL bFlag)2548*53ee8cc1Swenshuai.xi void mhal_mhl_CbusPadConfigSwitch(MS_U8 ucCbusSelect, MS_BOOL bFlag)
2549*53ee8cc1Swenshuai.xi {
2550*53ee8cc1Swenshuai.xi     switch(ucCbusSelect)
2551*53ee8cc1Swenshuai.xi     {
2552*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTA)
2553*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTA:
2554*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTA())
2555*53ee8cc1Swenshuai.xi             {
2556*53ee8cc1Swenshuai.xi                 if(bFlag)
2557*53ee8cc1Swenshuai.xi                 {
2558*53ee8cc1Swenshuai.xi                     _mhal_mhl_MHLForceToAttach();
2559*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
2560*53ee8cc1Swenshuai.xi                 }
2561*53ee8cc1Swenshuai.xi                 else
2562*53ee8cc1Swenshuai.xi                 {
2563*53ee8cc1Swenshuai.xi                     _mhal_mhl_CbusForceToStandby();
2564*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
2565*53ee8cc1Swenshuai.xi                 }
2566*53ee8cc1Swenshuai.xi             }
2567*53ee8cc1Swenshuai.xi 
2568*53ee8cc1Swenshuai.xi             break;
2569*53ee8cc1Swenshuai.xi #endif
2570*53ee8cc1Swenshuai.xi 
2571*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTB)
2572*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTB:
2573*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTB())
2574*53ee8cc1Swenshuai.xi             {
2575*53ee8cc1Swenshuai.xi 
2576*53ee8cc1Swenshuai.xi             }
2577*53ee8cc1Swenshuai.xi 
2578*53ee8cc1Swenshuai.xi             break;
2579*53ee8cc1Swenshuai.xi #endif
2580*53ee8cc1Swenshuai.xi 
2581*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTC)
2582*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTC:
2583*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTC())
2584*53ee8cc1Swenshuai.xi             {
2585*53ee8cc1Swenshuai.xi                 if(bFlag)
2586*53ee8cc1Swenshuai.xi                 {
2587*53ee8cc1Swenshuai.xi                     _mhal_mhl_MHLForceToAttach();
2588*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
2589*53ee8cc1Swenshuai.xi                 }
2590*53ee8cc1Swenshuai.xi                 else
2591*53ee8cc1Swenshuai.xi                 {
2592*53ee8cc1Swenshuai.xi                     _mhal_mhl_CbusForceToStandby();
2593*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
2594*53ee8cc1Swenshuai.xi                 }
2595*53ee8cc1Swenshuai.xi             }
2596*53ee8cc1Swenshuai.xi 
2597*53ee8cc1Swenshuai.xi             break;
2598*53ee8cc1Swenshuai.xi #endif
2599*53ee8cc1Swenshuai.xi 
2600*53ee8cc1Swenshuai.xi #if(MHL_FUNCTION_SUPPORT_PORTD)
2601*53ee8cc1Swenshuai.xi         case MHL_CBUS_SELECT_PORTD:
2602*53ee8cc1Swenshuai.xi             if(GET_MHL_PATH_SUPPORT_PORTD())
2603*53ee8cc1Swenshuai.xi             {
2604*53ee8cc1Swenshuai.xi                 if(bFlag)
2605*53ee8cc1Swenshuai.xi                 {
2606*53ee8cc1Swenshuai.xi                     _mhal_mhl_MHLForceToAttach();
2607*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
2608*53ee8cc1Swenshuai.xi                 }
2609*53ee8cc1Swenshuai.xi                 else
2610*53ee8cc1Swenshuai.xi                 {
2611*53ee8cc1Swenshuai.xi                     _mhal_mhl_CbusForceToStandby();
2612*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_UNCHARGE);
2613*53ee8cc1Swenshuai.xi                 }
2614*53ee8cc1Swenshuai.xi             }
2615*53ee8cc1Swenshuai.xi 
2616*53ee8cc1Swenshuai.xi             break;
2617*53ee8cc1Swenshuai.xi #endif
2618*53ee8cc1Swenshuai.xi 
2619*53ee8cc1Swenshuai.xi         default:
2620*53ee8cc1Swenshuai.xi 
2621*53ee8cc1Swenshuai.xi             break;
2622*53ee8cc1Swenshuai.xi     };
2623*53ee8cc1Swenshuai.xi }
2624*53ee8cc1Swenshuai.xi 
2625*53ee8cc1Swenshuai.xi //**************************************************************************
2626*53ee8cc1Swenshuai.xi //  [Function Name]:
2627*53ee8cc1Swenshuai.xi //                  _mhal_mhl_CbusStatus()
2628*53ee8cc1Swenshuai.xi //  [Description]:
2629*53ee8cc1Swenshuai.xi //                  MHL Cbus status
2630*53ee8cc1Swenshuai.xi //  [Arguments]:
2631*53ee8cc1Swenshuai.xi //
2632*53ee8cc1Swenshuai.xi //  [Return]:
2633*53ee8cc1Swenshuai.xi //                  Cbus status value
2634*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStatus(void)2635*53ee8cc1Swenshuai.xi MS_U16 mhal_mhl_CbusStatus(void)
2636*53ee8cc1Swenshuai.xi {
2637*53ee8cc1Swenshuai.xi     return (R2BYTE(REG_PM_MHL_CBUS_17));
2638*53ee8cc1Swenshuai.xi }
2639*53ee8cc1Swenshuai.xi 
2640*53ee8cc1Swenshuai.xi //**************************************************************************
2641*53ee8cc1Swenshuai.xi //  [Function Name]:
2642*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusIsMscMsgReceived()
2643*53ee8cc1Swenshuai.xi //  [Description]
2644*53ee8cc1Swenshuai.xi //                  MHL Cbus check whether msc message is received or not
2645*53ee8cc1Swenshuai.xi //  [Arguments]:
2646*53ee8cc1Swenshuai.xi //
2647*53ee8cc1Swenshuai.xi //  [Return]:
2648*53ee8cc1Swenshuai.xi //                  TRUE: recieved
2649*53ee8cc1Swenshuai.xi //                  FALSE: not yet
2650*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIsMscMsgReceived(void)2651*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusIsMscMsgReceived(void)
2652*53ee8cc1Swenshuai.xi {
2653*53ee8cc1Swenshuai.xi     MS_BOOL bindex = ((R2BYTE(REG_MHL_CBUS_3A) &BIT(3)) ?TRUE: FALSE);
2654*53ee8cc1Swenshuai.xi 
2655*53ee8cc1Swenshuai.xi     if(bindex)
2656*53ee8cc1Swenshuai.xi     {
2657*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_MHL_CBUS_3A, BIT(0), BIT(0));
2658*53ee8cc1Swenshuai.xi     }
2659*53ee8cc1Swenshuai.xi 
2660*53ee8cc1Swenshuai.xi     return bindex;
2661*53ee8cc1Swenshuai.xi }
2662*53ee8cc1Swenshuai.xi 
2663*53ee8cc1Swenshuai.xi //**************************************************************************
2664*53ee8cc1Swenshuai.xi //  [Function Name]:
2665*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusStucktoLowFlag()
2666*53ee8cc1Swenshuai.xi //  [Description]
2667*53ee8cc1Swenshuai.xi //
2668*53ee8cc1Swenshuai.xi //  [Arguments]:
2669*53ee8cc1Swenshuai.xi //
2670*53ee8cc1Swenshuai.xi //  [Return]:
2671*53ee8cc1Swenshuai.xi //
2672*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLowFlag(void)2673*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusStucktoLowFlag(void)
2674*53ee8cc1Swenshuai.xi {
2675*53ee8cc1Swenshuai.xi     MS_BOOL bindex = ((R2BYTE(REG_PM_MHL_CBUS_18) &BIT(3)) ?TRUE: FALSE);
2676*53ee8cc1Swenshuai.xi 
2677*53ee8cc1Swenshuai.xi     if(bindex)
2678*53ee8cc1Swenshuai.xi     {
2679*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(0), BIT(0));
2680*53ee8cc1Swenshuai.xi     }
2681*53ee8cc1Swenshuai.xi 
2682*53ee8cc1Swenshuai.xi     return bindex;
2683*53ee8cc1Swenshuai.xi }
2684*53ee8cc1Swenshuai.xi 
2685*53ee8cc1Swenshuai.xi //**************************************************************************
2686*53ee8cc1Swenshuai.xi //  [Function Name]:
2687*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusWakeupIntFlag()
2688*53ee8cc1Swenshuai.xi //  [Description]
2689*53ee8cc1Swenshuai.xi //
2690*53ee8cc1Swenshuai.xi //  [Arguments]:
2691*53ee8cc1Swenshuai.xi //
2692*53ee8cc1Swenshuai.xi //  [Return]:
2693*53ee8cc1Swenshuai.xi //
2694*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupIntFlag(void)2695*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusWakeupIntFlag(void)
2696*53ee8cc1Swenshuai.xi {
2697*53ee8cc1Swenshuai.xi     MS_BOOL bindex = ((R2BYTE(REG_PM_MHL_CBUS_18) &BIT(7)) ?TRUE: FALSE);
2698*53ee8cc1Swenshuai.xi 
2699*53ee8cc1Swenshuai.xi     if(bindex)
2700*53ee8cc1Swenshuai.xi     {
2701*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_18, BIT(4), BIT(4));
2702*53ee8cc1Swenshuai.xi     }
2703*53ee8cc1Swenshuai.xi 
2704*53ee8cc1Swenshuai.xi     return bindex;
2705*53ee8cc1Swenshuai.xi }
2706*53ee8cc1Swenshuai.xi 
2707*53ee8cc1Swenshuai.xi //**************************************************************************
2708*53ee8cc1Swenshuai.xi //  [Function Name]:
2709*53ee8cc1Swenshuai.xi //                  mhal_mhl_CBusWrite()
2710*53ee8cc1Swenshuai.xi //  [Description]
2711*53ee8cc1Swenshuai.xi //                  MHL Cbus write trigger
2712*53ee8cc1Swenshuai.xi //  [Arguments]:
2713*53ee8cc1Swenshuai.xi //                  *pdatabuf: Cbus tx data
2714*53ee8cc1Swenshuai.xi //  [Return]:
2715*53ee8cc1Swenshuai.xi //
2716*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CBusWrite(mhalCbusFifo_S * pdatabuf)2717*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CBusWrite(mhalCbusFifo_S *pdatabuf)
2718*53ee8cc1Swenshuai.xi {
2719*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
2720*53ee8cc1Swenshuai.xi 
2721*53ee8cc1Swenshuai.xi     if(_mhal_mhl_IsCbusBusy())
2722*53ee8cc1Swenshuai.xi     {
2723*53ee8cc1Swenshuai.xi         return FALSE;
2724*53ee8cc1Swenshuai.xi     }
2725*53ee8cc1Swenshuai.xi 
2726*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < pdatabuf->lens; uctemp++)
2727*53ee8cc1Swenshuai.xi     {
2728*53ee8cc1Swenshuai.xi         W2BYTE(REG_MHL_CBUS_26 +uctemp *2, pdatabuf->databuf[uctemp]);
2729*53ee8cc1Swenshuai.xi     }
2730*53ee8cc1Swenshuai.xi 
2731*53ee8cc1Swenshuai.xi     // clear the unsed parts
2732*53ee8cc1Swenshuai.xi     W2BYTE(REG_MHL_CBUS_26 +((pdatabuf->lens) *2), 0);
2733*53ee8cc1Swenshuai.xi 
2734*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_MHL_CBUS_25, BIT(12), BIT(12)); // trigger to send
2735*53ee8cc1Swenshuai.xi 
2736*53ee8cc1Swenshuai.xi     return TRUE;
2737*53ee8cc1Swenshuai.xi }
2738*53ee8cc1Swenshuai.xi 
2739*53ee8cc1Swenshuai.xi //**************************************************************************
2740*53ee8cc1Swenshuai.xi //  [Function Name]:
2741*53ee8cc1Swenshuai.xi //                  _mhal_mhl_Cbus_SetPathEn()
2742*53ee8cc1Swenshuai.xi //  [Description]:
2743*53ee8cc1Swenshuai.xi //                  MHL Cbus set path enable
2744*53ee8cc1Swenshuai.xi //  [Arguments]:
2745*53ee8cc1Swenshuai.xi //                  TRUE: Enable
2746*53ee8cc1Swenshuai.xi //                  FALSE: Disable
2747*53ee8cc1Swenshuai.xi //  [Return]:
2748*53ee8cc1Swenshuai.xi //
2749*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_Cbus_SetPathEn(MS_BOOL bflag)2750*53ee8cc1Swenshuai.xi void mhal_mhl_Cbus_SetPathEn(MS_BOOL bflag)
2751*53ee8cc1Swenshuai.xi {
2752*53ee8cc1Swenshuai.xi     if(bflag) // set state to PATH_EN
2753*53ee8cc1Swenshuai.xi     {
2754*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(12), BIT(12));
2755*53ee8cc1Swenshuai.xi     }
2756*53ee8cc1Swenshuai.xi     else // clear state to not PATH_EN
2757*53ee8cc1Swenshuai.xi     {
2758*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_17, BIT(13), BIT(13));
2759*53ee8cc1Swenshuai.xi     }
2760*53ee8cc1Swenshuai.xi }
2761*53ee8cc1Swenshuai.xi 
2762*53ee8cc1Swenshuai.xi //**************************************************************************
2763*53ee8cc1Swenshuai.xi //  [Function Name]:
2764*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusIntCB()
2765*53ee8cc1Swenshuai.xi //  [Description]
2766*53ee8cc1Swenshuai.xi //                  MHL Cbus Interrupt Call Back function
2767*53ee8cc1Swenshuai.xi //  [Arguments]:
2768*53ee8cc1Swenshuai.xi //                  *rcstate: recevied state, 0:normal / 1:timeout
2769*53ee8cc1Swenshuai.xi //                  *rccmd: recevied command
2770*53ee8cc1Swenshuai.xi //                  *rcdata: recevied data
2771*53ee8cc1Swenshuai.xi //                  *rclen: received length
2772*53ee8cc1Swenshuai.xi //                  *bIsCmdInData: Is command in data field
2773*53ee8cc1Swenshuai.xi //  [Return]:
2774*53ee8cc1Swenshuai.xi //
2775*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusIntCB(MS_U8 * rcstate,MS_U8 * rccmd,MS_U8 * rcdata,MS_U8 * rclen,MS_U8 * bIsCmdInData)2776*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CbusIntCB(MS_U8 *rcstate, MS_U8 *rccmd, MS_U8 *rcdata, MS_U8 *rclen, MS_U8 *bIsCmdInData)
2777*53ee8cc1Swenshuai.xi {
2778*53ee8cc1Swenshuai.xi     MS_BOOL bindex = FALSE;
2779*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
2780*53ee8cc1Swenshuai.xi     MS_U16 reg_val;
2781*53ee8cc1Swenshuai.xi 
2782*53ee8cc1Swenshuai.xi     *rcstate = R2BYTE(REG_MHL_CBUS_3B) & 0x000F; // received state, 0: normal, 1: timeout
2783*53ee8cc1Swenshuai.xi 
2784*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_MHL_CBUS_3A, BIT(0), BIT(0)); // clear INT
2785*53ee8cc1Swenshuai.xi 
2786*53ee8cc1Swenshuai.xi     reg_val = R2BYTE(REG_MHL_CBUS_3C);
2787*53ee8cc1Swenshuai.xi 
2788*53ee8cc1Swenshuai.xi     if(!(reg_val &BIT(8))) // Received data
2789*53ee8cc1Swenshuai.xi     {
2790*53ee8cc1Swenshuai.xi         bindex = TRUE;
2791*53ee8cc1Swenshuai.xi     }
2792*53ee8cc1Swenshuai.xi 
2793*53ee8cc1Swenshuai.xi     *rccmd = reg_val & 0x00FF;
2794*53ee8cc1Swenshuai.xi     *bIsCmdInData = FALSE;
2795*53ee8cc1Swenshuai.xi 
2796*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <=(MHL_CBUS_DATA_SIZE +1); uctemp++) // offset+16bytes+EOF
2797*53ee8cc1Swenshuai.xi     {
2798*53ee8cc1Swenshuai.xi         reg_val = R2BYTE(REG_MHL_CBUS_3D +(uctemp *2));
2799*53ee8cc1Swenshuai.xi 
2800*53ee8cc1Swenshuai.xi         if(reg_val & BIT(15))
2801*53ee8cc1Swenshuai.xi         {
2802*53ee8cc1Swenshuai.xi             rcdata[uctemp] = reg_val & 0x00FF;
2803*53ee8cc1Swenshuai.xi 
2804*53ee8cc1Swenshuai.xi             if(((uctemp <= 2) ||(uctemp == (MHL_CBUS_DATA_SIZE +1))) && !(*bIsCmdInData))
2805*53ee8cc1Swenshuai.xi             {
2806*53ee8cc1Swenshuai.xi                 *bIsCmdInData = (reg_val & BIT(8)) ? TRUE : FALSE;
2807*53ee8cc1Swenshuai.xi             }
2808*53ee8cc1Swenshuai.xi         }
2809*53ee8cc1Swenshuai.xi         else
2810*53ee8cc1Swenshuai.xi         {
2811*53ee8cc1Swenshuai.xi             *rclen = uctemp;
2812*53ee8cc1Swenshuai.xi             break;
2813*53ee8cc1Swenshuai.xi         }
2814*53ee8cc1Swenshuai.xi     }
2815*53ee8cc1Swenshuai.xi 
2816*53ee8cc1Swenshuai.xi     // CTS 6.3.11.19
2817*53ee8cc1Swenshuai.xi     if(uctemp >(MHL_CBUS_DATA_SIZE +1))
2818*53ee8cc1Swenshuai.xi     {
2819*53ee8cc1Swenshuai.xi         *rclen = MHL_CBUS_DATA_SIZE +2;
2820*53ee8cc1Swenshuai.xi     }
2821*53ee8cc1Swenshuai.xi 
2822*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_MHL_CBUS_3A, BIT(4), BIT(4)); // clear received FIFO
2823*53ee8cc1Swenshuai.xi 
2824*53ee8cc1Swenshuai.xi     return bindex;
2825*53ee8cc1Swenshuai.xi }
2826*53ee8cc1Swenshuai.xi 
2827*53ee8cc1Swenshuai.xi //**************************************************************************
2828*53ee8cc1Swenshuai.xi //  [Function Name]:
2829*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CBusCheckBCHError()
2830*53ee8cc1Swenshuai.xi //  [Description]:
2831*53ee8cc1Swenshuai.xi //                  MHL Cbus check BCH error
2832*53ee8cc1Swenshuai.xi //  [Arguments]:
2833*53ee8cc1Swenshuai.xi //
2834*53ee8cc1Swenshuai.xi //  [Return]:
2835*53ee8cc1Swenshuai.xi //
2836*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CBusCheckBCHError(void)2837*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CBusCheckBCHError(void)
2838*53ee8cc1Swenshuai.xi {
2839*53ee8cc1Swenshuai.xi     MS_BOOL bindex = FALSE;
2840*53ee8cc1Swenshuai.xi 
2841*53ee8cc1Swenshuai.xi     if(R2BYTE(REG_HDMI_04_L) &BIT(1))
2842*53ee8cc1Swenshuai.xi     {
2843*53ee8cc1Swenshuai.xi         //bindex = TRUE;
2844*53ee8cc1Swenshuai.xi 
2845*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_HDMI_04_L, BIT(1), BIT(1));
2846*53ee8cc1Swenshuai.xi     }
2847*53ee8cc1Swenshuai.xi 
2848*53ee8cc1Swenshuai.xi     return bindex;
2849*53ee8cc1Swenshuai.xi }
2850*53ee8cc1Swenshuai.xi 
2851*53ee8cc1Swenshuai.xi //**************************************************************************
2852*53ee8cc1Swenshuai.xi //  [Function Name]:
2853*53ee8cc1Swenshuai.xi //                  mhal_mhl_CablePlugProc()
2854*53ee8cc1Swenshuai.xi //  [Description]
2855*53ee8cc1Swenshuai.xi //
2856*53ee8cc1Swenshuai.xi //  [Arguments]:
2857*53ee8cc1Swenshuai.xi //
2858*53ee8cc1Swenshuai.xi //  [Return]:
2859*53ee8cc1Swenshuai.xi //
2860*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CablePlugProc(MS_U8 ucCbusSelect)2861*53ee8cc1Swenshuai.xi void mhal_mhl_CablePlugProc(MS_U8 ucCbusSelect)
2862*53ee8cc1Swenshuai.xi {
2863*53ee8cc1Swenshuai.xi     _mhal_mhl_Mhl24bitsModeSetting(ucCbusSelect);
2864*53ee8cc1Swenshuai.xi 
2865*53ee8cc1Swenshuai.xi     _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
2866*53ee8cc1Swenshuai.xi 
2867*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
2868*53ee8cc1Swenshuai.xi     _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, TRUE);
2869*53ee8cc1Swenshuai.xi #endif
2870*53ee8cc1Swenshuai.xi 
2871*53ee8cc1Swenshuai.xi     if(mhal_mhl_CheckInputPort(ucCbusSelect))
2872*53ee8cc1Swenshuai.xi     {
2873*53ee8cc1Swenshuai.xi         //_mhal_mhl_ChangeScalerMainMux(TRUE);
2874*53ee8cc1Swenshuai.xi         //_mhal_mhl_AudioPathSelect(TRUE);
2875*53ee8cc1Swenshuai.xi     }
2876*53ee8cc1Swenshuai.xi }
2877*53ee8cc1Swenshuai.xi 
2878*53ee8cc1Swenshuai.xi //**************************************************************************
2879*53ee8cc1Swenshuai.xi //  [Function Name]:
2880*53ee8cc1Swenshuai.xi //                  mhal_mhl_CableRemoveProc()
2881*53ee8cc1Swenshuai.xi //  [Description]
2882*53ee8cc1Swenshuai.xi //
2883*53ee8cc1Swenshuai.xi //  [Arguments]:
2884*53ee8cc1Swenshuai.xi //
2885*53ee8cc1Swenshuai.xi //  [Return]:
2886*53ee8cc1Swenshuai.xi //
2887*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CableRemoveProc(MS_U8 ucCbusSelect)2888*53ee8cc1Swenshuai.xi void mhal_mhl_CableRemoveProc(MS_U8 ucCbusSelect)
2889*53ee8cc1Swenshuai.xi {
2890*53ee8cc1Swenshuai.xi     _mhal_mhl_HdmiBypassModeSetting(ucCbusSelect);
2891*53ee8cc1Swenshuai.xi     _mhal_mhl_RxRtermControl(ucCbusSelect, RX_HDMI_RTERM);
2892*53ee8cc1Swenshuai.xi 
2893*53ee8cc1Swenshuai.xi     if(mhal_mhl_CheckInputPort(ucCbusSelect))
2894*53ee8cc1Swenshuai.xi     {
2895*53ee8cc1Swenshuai.xi         //_mhal_mhl_ChangeScalerMainMux(FALSE);
2896*53ee8cc1Swenshuai.xi         //_mhal_mhl_AudioPathSelect(FALSE);
2897*53ee8cc1Swenshuai.xi     }
2898*53ee8cc1Swenshuai.xi }
2899*53ee8cc1Swenshuai.xi 
2900*53ee8cc1Swenshuai.xi //**************************************************************************
2901*53ee8cc1Swenshuai.xi //  [Function Name]:
2902*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusConnectProc()
2903*53ee8cc1Swenshuai.xi //  [Description]
2904*53ee8cc1Swenshuai.xi //
2905*53ee8cc1Swenshuai.xi //  [Arguments]:
2906*53ee8cc1Swenshuai.xi //
2907*53ee8cc1Swenshuai.xi //  [Return]:
2908*53ee8cc1Swenshuai.xi //
2909*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusConnectProc(MS_U8 ucCbusSelect)2910*53ee8cc1Swenshuai.xi void mhal_mhl_CbusConnectProc(MS_U8 ucCbusSelect)
2911*53ee8cc1Swenshuai.xi {
2912*53ee8cc1Swenshuai.xi     _mhal_mhl_RxRtermControl(ucCbusSelect, RX_MHL_RTERM);
2913*53ee8cc1Swenshuai.xi 
2914*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
2915*53ee8cc1Swenshuai.xi     _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, FALSE);
2916*53ee8cc1Swenshuai.xi #endif
2917*53ee8cc1Swenshuai.xi 
2918*53ee8cc1Swenshuai.xi     mhal_mhl_CbusStucktoLow(TRUE);
2919*53ee8cc1Swenshuai.xi }
2920*53ee8cc1Swenshuai.xi 
2921*53ee8cc1Swenshuai.xi //**************************************************************************
2922*53ee8cc1Swenshuai.xi //  [Function Name]:
2923*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusStucktoLowProc()
2924*53ee8cc1Swenshuai.xi //  [Description]
2925*53ee8cc1Swenshuai.xi //
2926*53ee8cc1Swenshuai.xi //  [Arguments]:
2927*53ee8cc1Swenshuai.xi //
2928*53ee8cc1Swenshuai.xi //  [Return]:
2929*53ee8cc1Swenshuai.xi //
2930*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusStucktoLowProc(MS_U8 ucCbusSelect)2931*53ee8cc1Swenshuai.xi void mhal_mhl_CbusStucktoLowProc(MS_U8 ucCbusSelect)
2932*53ee8cc1Swenshuai.xi {
2933*53ee8cc1Swenshuai.xi     _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
2934*53ee8cc1Swenshuai.xi 
2935*53ee8cc1Swenshuai.xi #if(DMHL_LG_PRADA_PATCH)
2936*53ee8cc1Swenshuai.xi     _mhal_mhl_AdjustCommonModeResistor(ucCbusSelect, TRUE);
2937*53ee8cc1Swenshuai.xi #endif
2938*53ee8cc1Swenshuai.xi 
2939*53ee8cc1Swenshuai.xi     mhal_mhl_CDRModeMonitor(ucCbusSelect, FALSE);
2940*53ee8cc1Swenshuai.xi }
2941*53ee8cc1Swenshuai.xi 
2942*53ee8cc1Swenshuai.xi //**************************************************************************
2943*53ee8cc1Swenshuai.xi //  [Function Name]:
2944*53ee8cc1Swenshuai.xi //                  mhal_mhl_SourceChangeProc()
2945*53ee8cc1Swenshuai.xi //  [Description]
2946*53ee8cc1Swenshuai.xi //
2947*53ee8cc1Swenshuai.xi //  [Arguments]:
2948*53ee8cc1Swenshuai.xi //
2949*53ee8cc1Swenshuai.xi //  [Return]:
2950*53ee8cc1Swenshuai.xi //
2951*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SourceChangeProc(MS_U8 ucCbusSelect)2952*53ee8cc1Swenshuai.xi void mhal_mhl_SourceChangeProc(MS_U8 ucCbusSelect)
2953*53ee8cc1Swenshuai.xi {
2954*53ee8cc1Swenshuai.xi     if(mhal_mhl_CheckInputPort(ucCbusSelect))
2955*53ee8cc1Swenshuai.xi     {
2956*53ee8cc1Swenshuai.xi         //_mhal_mhl_ChangeScalerMainMux(TRUE);
2957*53ee8cc1Swenshuai.xi         //_mhal_mhl_AudioPathSelect(TRUE);
2958*53ee8cc1Swenshuai.xi     }
2959*53ee8cc1Swenshuai.xi     else
2960*53ee8cc1Swenshuai.xi     {
2961*53ee8cc1Swenshuai.xi         //_mhal_mhl_ChangeScalerMainMux(FALSE);
2962*53ee8cc1Swenshuai.xi         //_mhal_mhl_AudioPathSelect(FALSE);
2963*53ee8cc1Swenshuai.xi     }
2964*53ee8cc1Swenshuai.xi }
2965*53ee8cc1Swenshuai.xi 
2966*53ee8cc1Swenshuai.xi //**************************************************************************
2967*53ee8cc1Swenshuai.xi //  [Function Name]:
2968*53ee8cc1Swenshuai.xi //                  mhal_mhl_ClockModeSwitchProc()
2969*53ee8cc1Swenshuai.xi //  [Description]
2970*53ee8cc1Swenshuai.xi //
2971*53ee8cc1Swenshuai.xi //  [Arguments]:
2972*53ee8cc1Swenshuai.xi //
2973*53ee8cc1Swenshuai.xi //  [Return]:
2974*53ee8cc1Swenshuai.xi //
2975*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_ClockModeSwitchProc(MS_U8 ucCbusSelect,MS_BOOL bPPmode)2976*53ee8cc1Swenshuai.xi void mhal_mhl_ClockModeSwitchProc(MS_U8 ucCbusSelect, MS_BOOL bPPmode)
2977*53ee8cc1Swenshuai.xi {
2978*53ee8cc1Swenshuai.xi     if(bPPmode)
2979*53ee8cc1Swenshuai.xi     {
2980*53ee8cc1Swenshuai.xi         _mhal_mhl_MhlPackedPixelModeSetting(ucCbusSelect);
2981*53ee8cc1Swenshuai.xi     }
2982*53ee8cc1Swenshuai.xi     else
2983*53ee8cc1Swenshuai.xi     {
2984*53ee8cc1Swenshuai.xi         _mhal_mhl_Mhl24bitsModeSetting(ucCbusSelect);
2985*53ee8cc1Swenshuai.xi     }
2986*53ee8cc1Swenshuai.xi }
2987*53ee8cc1Swenshuai.xi 
2988*53ee8cc1Swenshuai.xi //**************************************************************************
2989*53ee8cc1Swenshuai.xi //  [Function Name]:
2990*53ee8cc1Swenshuai.xi //                  mhal_mhl_CbusWakeupIntSetting()
2991*53ee8cc1Swenshuai.xi //  [Description]
2992*53ee8cc1Swenshuai.xi //
2993*53ee8cc1Swenshuai.xi //  [Arguments]:
2994*53ee8cc1Swenshuai.xi //
2995*53ee8cc1Swenshuai.xi //  [Return]:
2996*53ee8cc1Swenshuai.xi //
2997*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_CbusWakeupIntSetting(MS_U8 ucCbusSelect,MS_BOOL bFlag)2998*53ee8cc1Swenshuai.xi void mhal_mhl_CbusWakeupIntSetting(MS_U8 ucCbusSelect, MS_BOOL bFlag)
2999*53ee8cc1Swenshuai.xi {
3000*53ee8cc1Swenshuai.xi     if(bFlag)
3001*53ee8cc1Swenshuai.xi     {
3002*53ee8cc1Swenshuai.xi         _mhal_mhl_CbusForceToStandby();
3003*53ee8cc1Swenshuai.xi         mhal_mhl_CbusWakeupInterrupt(TRUE);
3004*53ee8cc1Swenshuai.xi         mhal_mhl_VbusCharge(ucCbusSelect, VBUS_SW_CHARGE);
3005*53ee8cc1Swenshuai.xi     }
3006*53ee8cc1Swenshuai.xi     else
3007*53ee8cc1Swenshuai.xi     {
3008*53ee8cc1Swenshuai.xi         _mhal_mhl_MHLForceToAttach();
3009*53ee8cc1Swenshuai.xi         mhal_mhl_CbusWakeupInterrupt(FALSE);
3010*53ee8cc1Swenshuai.xi         mhal_mhl_VbusCharge(ucCbusSelect, VBUS_HW_DETECT);
3011*53ee8cc1Swenshuai.xi     }
3012*53ee8cc1Swenshuai.xi }
3013*53ee8cc1Swenshuai.xi 
3014*53ee8cc1Swenshuai.xi //**************************************************************************
3015*53ee8cc1Swenshuai.xi //  [Function Name]:
3016*53ee8cc1Swenshuai.xi //                  mhal_mhl_RtermControlHWMode()
3017*53ee8cc1Swenshuai.xi //  [Description]
3018*53ee8cc1Swenshuai.xi //
3019*53ee8cc1Swenshuai.xi //  [Arguments]:
3020*53ee8cc1Swenshuai.xi //
3021*53ee8cc1Swenshuai.xi //  [Return]:
3022*53ee8cc1Swenshuai.xi //
3023*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_RtermControlHWMode(MS_U8 ucCbusSelect,MS_BOOL bFlag)3024*53ee8cc1Swenshuai.xi void mhal_mhl_RtermControlHWMode(MS_U8 ucCbusSelect, MS_BOOL bFlag)
3025*53ee8cc1Swenshuai.xi {
3026*53ee8cc1Swenshuai.xi     MS_U16 ustemp = mhal_mhl_CbusStatus();
3027*53ee8cc1Swenshuai.xi 
3028*53ee8cc1Swenshuai.xi     if(!bFlag) // HW to SW control rterm
3029*53ee8cc1Swenshuai.xi     {
3030*53ee8cc1Swenshuai.xi         if((ustemp & BMASK(1:0)) == 0x03)
3031*53ee8cc1Swenshuai.xi         {
3032*53ee8cc1Swenshuai.xi             _mhal_mhl_RxRtermControl(ucCbusSelect, RX_MHL_RTERM);
3033*53ee8cc1Swenshuai.xi         }
3034*53ee8cc1Swenshuai.xi         else
3035*53ee8cc1Swenshuai.xi         {
3036*53ee8cc1Swenshuai.xi             _mhal_mhl_RxRtermControl(ucCbusSelect, RX_RTERM_OFF);
3037*53ee8cc1Swenshuai.xi         }
3038*53ee8cc1Swenshuai.xi     }
3039*53ee8cc1Swenshuai.xi 
3040*53ee8cc1Swenshuai.xi     _mhal_mhl_RtermHWControl(ucCbusSelect, bFlag);
3041*53ee8cc1Swenshuai.xi }
3042*53ee8cc1Swenshuai.xi 
3043*53ee8cc1Swenshuai.xi //**************************************************************************
3044*53ee8cc1Swenshuai.xi //  [Function Name]:
3045*53ee8cc1Swenshuai.xi //                  mhal_mhl_AdjustSettingIControl()
3046*53ee8cc1Swenshuai.xi //  [Description]
3047*53ee8cc1Swenshuai.xi //
3048*53ee8cc1Swenshuai.xi //  [Arguments]:
3049*53ee8cc1Swenshuai.xi //
3050*53ee8cc1Swenshuai.xi //  [Return]:
3051*53ee8cc1Swenshuai.xi //
3052*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_AdjustSettingIControl(MS_U8 ucIControl)3053*53ee8cc1Swenshuai.xi void mhal_mhl_AdjustSettingIControl(MS_U8 ucIControl)
3054*53ee8cc1Swenshuai.xi {
3055*53ee8cc1Swenshuai.xi     ucIControlValue = ucIControl;
3056*53ee8cc1Swenshuai.xi }
3057*53ee8cc1Swenshuai.xi 
3058*53ee8cc1Swenshuai.xi //**************************************************************************
3059*53ee8cc1Swenshuai.xi //  [Function Name]:
3060*53ee8cc1Swenshuai.xi //                  mhal_mhl_AdjustImpedanceSetting()
3061*53ee8cc1Swenshuai.xi //  [Description]
3062*53ee8cc1Swenshuai.xi //
3063*53ee8cc1Swenshuai.xi //  [Arguments]:
3064*53ee8cc1Swenshuai.xi //
3065*53ee8cc1Swenshuai.xi //  [Return]:
3066*53ee8cc1Swenshuai.xi //
3067*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)3068*53ee8cc1Swenshuai.xi void mhal_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)
3069*53ee8cc1Swenshuai.xi {
3070*53ee8cc1Swenshuai.xi     ucImpedanceValue = ucImpedance;
3071*53ee8cc1Swenshuai.xi }
3072*53ee8cc1Swenshuai.xi 
3073*53ee8cc1Swenshuai.xi //**************************************************************************
3074*53ee8cc1Swenshuai.xi //  [Function Name]:
3075*53ee8cc1Swenshuai.xi //                  mhal_mhl_GetSignalStableFlag()
3076*53ee8cc1Swenshuai.xi //  [Description]
3077*53ee8cc1Swenshuai.xi //
3078*53ee8cc1Swenshuai.xi //  [Arguments]:
3079*53ee8cc1Swenshuai.xi //
3080*53ee8cc1Swenshuai.xi //  [Return]:
3081*53ee8cc1Swenshuai.xi //
3082*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetSignalStableFlag(void)3083*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_GetSignalStableFlag(void)
3084*53ee8cc1Swenshuai.xi {
3085*53ee8cc1Swenshuai.xi     return bMHLSignalStable;
3086*53ee8cc1Swenshuai.xi }
3087*53ee8cc1Swenshuai.xi 
3088*53ee8cc1Swenshuai.xi //**************************************************************************
3089*53ee8cc1Swenshuai.xi //  [Function Name]:
3090*53ee8cc1Swenshuai.xi //                  mhal_mhl_PowerControl()
3091*53ee8cc1Swenshuai.xi //  [Description]
3092*53ee8cc1Swenshuai.xi //                  MHL power control
3093*53ee8cc1Swenshuai.xi //  [Arguments]:
3094*53ee8cc1Swenshuai.xi //
3095*53ee8cc1Swenshuai.xi //  [Return]:
3096*53ee8cc1Swenshuai.xi //
3097*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_LoadPowerOnTbl(void)3098*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerOnTbl(void)
3099*53ee8cc1Swenshuai.xi {
3100*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
3101*53ee8cc1Swenshuai.xi 
3102*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_ON_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
3103*53ee8cc1Swenshuai.xi     {
3104*53ee8cc1Swenshuai.xi         W2BYTEMSK(tMHL_POWER_ON_TABLE[uctemp].addr, tMHL_POWER_ON_TABLE[uctemp].databuf, tMHL_POWER_ON_TABLE[uctemp].mask);
3105*53ee8cc1Swenshuai.xi     }
3106*53ee8cc1Swenshuai.xi 
3107*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
3108*53ee8cc1Swenshuai.xi     {
3109*53ee8cc1Swenshuai.xi         _mhal_mhl_RxRtermControl(uctemp, RX_HDMI_RTERM);
3110*53ee8cc1Swenshuai.xi     }
3111*53ee8cc1Swenshuai.xi }
3112*53ee8cc1Swenshuai.xi 
mhal_mhl_LoadPowerStandbyTbl(void)3113*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerStandbyTbl(void)
3114*53ee8cc1Swenshuai.xi {
3115*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
3116*53ee8cc1Swenshuai.xi 
3117*53ee8cc1Swenshuai.xi     //_mhal_mhl_CbusForceToStandby();
3118*53ee8cc1Swenshuai.xi 
3119*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_SAVING_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
3120*53ee8cc1Swenshuai.xi     {
3121*53ee8cc1Swenshuai.xi         W2BYTEMSK(tMHL_POWER_SAVING_TABLE[uctemp].addr, tMHL_POWER_SAVING_TABLE[uctemp].databuf, tMHL_POWER_SAVING_TABLE[uctemp].mask);
3122*53ee8cc1Swenshuai.xi     }
3123*53ee8cc1Swenshuai.xi 
3124*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
3125*53ee8cc1Swenshuai.xi     {
3126*53ee8cc1Swenshuai.xi         _mhal_mhl_RxRtermControl(uctemp, RX_RTERM_OFF);
3127*53ee8cc1Swenshuai.xi         mhal_mhl_VbusCharge(uctemp, VBUS_SW_CHARGE);
3128*53ee8cc1Swenshuai.xi     }
3129*53ee8cc1Swenshuai.xi }
3130*53ee8cc1Swenshuai.xi 
mhal_mhl_LoadPowerDownTbl(void)3131*53ee8cc1Swenshuai.xi void mhal_mhl_LoadPowerDownTbl(void)
3132*53ee8cc1Swenshuai.xi {
3133*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
3134*53ee8cc1Swenshuai.xi 
3135*53ee8cc1Swenshuai.xi     //_mhal_mhl_CbusForceToStandby();
3136*53ee8cc1Swenshuai.xi 
3137*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <(sizeof(tMHL_POWER_DOWN_TABLE) /sizeof(msLoadTbl_S)); uctemp++)
3138*53ee8cc1Swenshuai.xi     {
3139*53ee8cc1Swenshuai.xi         W2BYTEMSK(tMHL_POWER_DOWN_TABLE[uctemp].addr, tMHL_POWER_DOWN_TABLE[uctemp].databuf, tMHL_POWER_DOWN_TABLE[uctemp].mask);
3140*53ee8cc1Swenshuai.xi     }
3141*53ee8cc1Swenshuai.xi 
3142*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK; uctemp++)
3143*53ee8cc1Swenshuai.xi     {
3144*53ee8cc1Swenshuai.xi         _mhal_mhl_RxRtermControl(uctemp, RX_RTERM_OFF);
3145*53ee8cc1Swenshuai.xi     }
3146*53ee8cc1Swenshuai.xi }
3147*53ee8cc1Swenshuai.xi 
3148*53ee8cc1Swenshuai.xi //**************************************************************************
3149*53ee8cc1Swenshuai.xi //  [Function Name]:
3150*53ee8cc1Swenshuai.xi //                  mhal_mhl_SetHPD()
3151*53ee8cc1Swenshuai.xi //  [Description]
3152*53ee8cc1Swenshuai.xi //                  config HPD in combo(MHL/HDMI) port A
3153*53ee8cc1Swenshuai.xi //  [Arguments]:
3154*53ee8cc1Swenshuai.xi //
3155*53ee8cc1Swenshuai.xi //  [Return]:
3156*53ee8cc1Swenshuai.xi //
3157*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_SetHPD(MS_BOOL bflag)3158*53ee8cc1Swenshuai.xi void mhal_mhl_SetHPD(MS_BOOL bflag)
3159*53ee8cc1Swenshuai.xi {
3160*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_PM_SLEEP_73_L, BIT(0), BIT(0)); // [0]: reg_hplugc_mhl_en
3161*53ee8cc1Swenshuai.xi 
3162*53ee8cc1Swenshuai.xi     if(bflag) // HPD is high
3163*53ee8cc1Swenshuai.xi     {
3164*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_20, BIT(3), BMASK(4:3)); // [4]: output val, [3]: oen
3165*53ee8cc1Swenshuai.xi         //msg_mhl(printf("**MHL_HPD is High"));
3166*53ee8cc1Swenshuai.xi     }
3167*53ee8cc1Swenshuai.xi     else // hpd is low
3168*53ee8cc1Swenshuai.xi     {
3169*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_PM_MHL_CBUS_20, 0, BMASK(4:3)); // [4]: output val, [3]: oen
3170*53ee8cc1Swenshuai.xi         //msg_mhl(printf("**MHL_HPD is Low"));
3171*53ee8cc1Swenshuai.xi     }
3172*53ee8cc1Swenshuai.xi }
3173*53ee8cc1Swenshuai.xi 
3174*53ee8cc1Swenshuai.xi //**************************************************************************
3175*53ee8cc1Swenshuai.xi //  [Function Name]:
3176*53ee8cc1Swenshuai.xi //                  mhal_mhl_GetDDCErrorCode()
3177*53ee8cc1Swenshuai.xi //  [Description]
3178*53ee8cc1Swenshuai.xi //                  Get DDC error code
3179*53ee8cc1Swenshuai.xi //  [Arguments]:
3180*53ee8cc1Swenshuai.xi //
3181*53ee8cc1Swenshuai.xi //  [Return]:
3182*53ee8cc1Swenshuai.xi //
3183*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetDDCErrorCode(void)3184*53ee8cc1Swenshuai.xi MS_U8 mhal_mhl_GetDDCErrorCode(void)
3185*53ee8cc1Swenshuai.xi {
3186*53ee8cc1Swenshuai.xi     return (R2BYTE(REG_MHL_CBUS_21)>>8);
3187*53ee8cc1Swenshuai.xi }
3188*53ee8cc1Swenshuai.xi 
3189*53ee8cc1Swenshuai.xi #if(MHL_CBUS_OPERATION_MODE == MHL_CBUS_HW_REPLY_MODE)
3190*53ee8cc1Swenshuai.xi //**************************************************************************
3191*53ee8cc1Swenshuai.xi //  [Function Name]:
3192*53ee8cc1Swenshuai.xi //                  mhal_mhl_CheckSRAMReceiveBuffer()
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_CheckSRAMReceiveBuffer(void)3200*53ee8cc1Swenshuai.xi MS_BOOL mhal_mhl_CheckSRAMReceiveBuffer(void)
3201*53ee8cc1Swenshuai.xi {
3202*53ee8cc1Swenshuai.xi     return ((R2BYTE(REG_MHL_CBUS_10) &BIT(4)) ?FALSE: TRUE);
3203*53ee8cc1Swenshuai.xi }
3204*53ee8cc1Swenshuai.xi 
3205*53ee8cc1Swenshuai.xi //**************************************************************************
3206*53ee8cc1Swenshuai.xi //  [Function Name]:
3207*53ee8cc1Swenshuai.xi //                  mhal_mhl_GetSRAMReceiveData()
3208*53ee8cc1Swenshuai.xi //  [Description]
3209*53ee8cc1Swenshuai.xi //
3210*53ee8cc1Swenshuai.xi //  [Arguments]:
3211*53ee8cc1Swenshuai.xi //
3212*53ee8cc1Swenshuai.xi //  [Return]:
3213*53ee8cc1Swenshuai.xi //
3214*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_GetSRAMReceiveData(void)3215*53ee8cc1Swenshuai.xi MS_U16 mhal_mhl_GetSRAMReceiveData(void)
3216*53ee8cc1Swenshuai.xi {
3217*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_MHL_CBUS_10, BIT(15), BIT(15));
3218*53ee8cc1Swenshuai.xi 
3219*53ee8cc1Swenshuai.xi     while((R2BYTE(REG_MHL_CBUS_10) & BIT(14)) == BIT(14));
3220*53ee8cc1Swenshuai.xi 
3221*53ee8cc1Swenshuai.xi     return R2BYTE(REG_MHL_CBUS_0F);
3222*53ee8cc1Swenshuai.xi }
3223*53ee8cc1Swenshuai.xi 
3224*53ee8cc1Swenshuai.xi #endif
3225*53ee8cc1Swenshuai.xi 
3226*53ee8cc1Swenshuai.xi #if(DMHL_TEST_SIGNAL_SUPPORT)
3227*53ee8cc1Swenshuai.xi //**************************************************************************
3228*53ee8cc1Swenshuai.xi //  [Function Name]:
3229*53ee8cc1Swenshuai.xi //                  mhal_mhl_AdjustCommonModeResistor()
3230*53ee8cc1Swenshuai.xi //  [Description]:
3231*53ee8cc1Swenshuai.xi //
3232*53ee8cc1Swenshuai.xi //  [Arguments]:
3233*53ee8cc1Swenshuai.xi //
3234*53ee8cc1Swenshuai.xi //  [Return]:
3235*53ee8cc1Swenshuai.xi //
3236*53ee8cc1Swenshuai.xi //**************************************************************************
mhal_mhl_TestSignal(MS_BOOL bflag)3237*53ee8cc1Swenshuai.xi void mhal_mhl_TestSignal(MS_BOOL bflag)
3238*53ee8cc1Swenshuai.xi {
3239*53ee8cc1Swenshuai.xi     if(bflag)
3240*53ee8cc1Swenshuai.xi     {
3241*53ee8cc1Swenshuai.xi         W2BYTEMSK(0x001106, BIT(10), BIT(10));
3242*53ee8cc1Swenshuai.xi     }
3243*53ee8cc1Swenshuai.xi     else
3244*53ee8cc1Swenshuai.xi     {
3245*53ee8cc1Swenshuai.xi         W2BYTEMSK(0x001106, 0, BIT(10));
3246*53ee8cc1Swenshuai.xi     }
3247*53ee8cc1Swenshuai.xi }
3248*53ee8cc1Swenshuai.xi 
3249*53ee8cc1Swenshuai.xi #endif
3250*53ee8cc1Swenshuai.xi 
3251*53ee8cc1Swenshuai.xi #endif // _MHAL_MHL_C_
3252*53ee8cc1Swenshuai.xi 
3253