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