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 mdrv_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 _DRV_MHL_C_
86*53ee8cc1Swenshuai.xi #define _DRV_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 #include "MsIRQ.h"
95*53ee8cc1Swenshuai.xi #include "MsOS.h"
96*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
97*53ee8cc1Swenshuai.xi #include <linux/string.h>
98*53ee8cc1Swenshuai.xi #else
99*53ee8cc1Swenshuai.xi #include <string.h>
100*53ee8cc1Swenshuai.xi #endif
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi #include "utopia.h"
103*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
104*53ee8cc1Swenshuai.xi
105*53ee8cc1Swenshuai.xi #include "mdrv_mhl_st.h"
106*53ee8cc1Swenshuai.xi #include "apiMHL_private.h"
107*53ee8cc1Swenshuai.xi #include "apiMHL.h"
108*53ee8cc1Swenshuai.xi #include "halMHL.h"
109*53ee8cc1Swenshuai.xi #include "drvMHL.h"
110*53ee8cc1Swenshuai.xi
111*53ee8cc1Swenshuai.xi #include "drvSYS.h"
112*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
113*53ee8cc1Swenshuai.xi
114*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
115*53ee8cc1Swenshuai.xi // Local Defines
116*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
117*53ee8cc1Swenshuai.xi #if(defined(CONFIG_MLOG))
118*53ee8cc1Swenshuai.xi #include "ULog.h"
119*53ee8cc1Swenshuai.xi
120*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_INFO(format, args...) ULOGI("MHL", format, ##args)
121*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_WARNING(format, args...) ULOGW("MHL", format, ##args)
122*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_DEBUG(format, args...) ULOGD("MHL", format, ##args)
123*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_ERROR(format, args...) ULOGE("MHL", format, ##args)
124*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_FATAL(format, args...) ULOGF("MHL", format, ##args)
125*53ee8cc1Swenshuai.xi
126*53ee8cc1Swenshuai.xi #else
127*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_INFO(format, args...) printf(format, ##args)
128*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_WARNING(format, args...) printf(format, ##args)
129*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_DEBUG(format, args...) printf(format, ##args)
130*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_ERROR(format, args...) printf(format, ##args)
131*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_FATAL(format, args...) printf(format, ##args)
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi #endif
134*53ee8cc1Swenshuai.xi
135*53ee8cc1Swenshuai.xi #define MHL_DEBUG_RECEIVE_MSC 0
136*53ee8cc1Swenshuai.xi #define MHL_DEBUG_TIMER_EVENT 0
137*53ee8cc1Swenshuai.xi #define MHL_DEBUG_SOURCE_INFO 0
138*53ee8cc1Swenshuai.xi #define MHL_DEBUG_BIST_MODE 0
139*53ee8cc1Swenshuai.xi #define MHL3_AUTO_EQ_ENABLE 1
140*53ee8cc1Swenshuai.xi
141*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
142*53ee8cc1Swenshuai.xi // Local Structures
143*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
144*53ee8cc1Swenshuai.xi
145*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
146*53ee8cc1Swenshuai.xi // Global Variables
147*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
148*53ee8cc1Swenshuai.xi
149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
150*53ee8cc1Swenshuai.xi // Local Variables
151*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
152*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
153*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE stMHLResourcePrivate;
154*53ee8cc1Swenshuai.xi
155*53ee8cc1Swenshuai.xi #endif
156*53ee8cc1Swenshuai.xi
157*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
158*53ee8cc1Swenshuai.xi // Local Functions
159*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
160*53ee8cc1Swenshuai.xi
161*53ee8cc1Swenshuai.xi //**************************************************************************
162*53ee8cc1Swenshuai.xi // [Function Name]:
163*53ee8cc1Swenshuai.xi // _mdrv_mhl_InitRiuBase()
164*53ee8cc1Swenshuai.xi // [Description]
165*53ee8cc1Swenshuai.xi //
166*53ee8cc1Swenshuai.xi // [Arguments]:
167*53ee8cc1Swenshuai.xi //
168*53ee8cc1Swenshuai.xi // [Return]:
169*53ee8cc1Swenshuai.xi //
170*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InitRiuBase(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)171*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_InitRiuBase(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
172*53ee8cc1Swenshuai.xi {
173*53ee8cc1Swenshuai.xi MS_BOOL bGetBaseFlag = FALSE;
174*53ee8cc1Swenshuai.xi MS_VIRT ulRiuBaseAddress = 0;
175*53ee8cc1Swenshuai.xi MS_VIRT ulPMRiuBaseAddress = 0;
176*53ee8cc1Swenshuai.xi MS_PHY ulNonPMBankSize = 0;
177*53ee8cc1Swenshuai.xi MS_PHY ulPMBankSize = 0;
178*53ee8cc1Swenshuai.xi
179*53ee8cc1Swenshuai.xi // get MMIO base
180*53ee8cc1Swenshuai.xi if(!MDrv_MMIO_GetBASE(&ulRiuBaseAddress, &ulNonPMBankSize, MS_MODULE_XC))
181*53ee8cc1Swenshuai.xi {
182*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("** MHL get XC base failed\n");
183*53ee8cc1Swenshuai.xi }
184*53ee8cc1Swenshuai.xi else if(!MDrv_MMIO_GetBASE(&ulPMRiuBaseAddress, &ulPMBankSize, MS_MODULE_PM))
185*53ee8cc1Swenshuai.xi {
186*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("** MHL get PM base failed\n");
187*53ee8cc1Swenshuai.xi }
188*53ee8cc1Swenshuai.xi else
189*53ee8cc1Swenshuai.xi {
190*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulRiuBaseAddress = ulRiuBaseAddress;
191*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulPMRiuBaseAddress = ulPMRiuBaseAddress;
192*53ee8cc1Swenshuai.xi
193*53ee8cc1Swenshuai.xi mhal_mhl_SetRegisterBaseAddress(pMHLResourcePrivate->ulRiuBaseAddress, pMHLResourcePrivate->ulPMRiuBaseAddress);
194*53ee8cc1Swenshuai.xi
195*53ee8cc1Swenshuai.xi bGetBaseFlag = TRUE;
196*53ee8cc1Swenshuai.xi }
197*53ee8cc1Swenshuai.xi
198*53ee8cc1Swenshuai.xi return bGetBaseFlag;
199*53ee8cc1Swenshuai.xi }
200*53ee8cc1Swenshuai.xi
201*53ee8cc1Swenshuai.xi //**************************************************************************
202*53ee8cc1Swenshuai.xi // [Function Name]:
203*53ee8cc1Swenshuai.xi // _mdrv_mhl_ClearCbusFlag
204*53ee8cc1Swenshuai.xi // [Description]
205*53ee8cc1Swenshuai.xi //
206*53ee8cc1Swenshuai.xi // [Arguments]:
207*53ee8cc1Swenshuai.xi //
208*53ee8cc1Swenshuai.xi // [Return]:
209*53ee8cc1Swenshuai.xi //
210*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ClearCbusFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucSelect)211*53ee8cc1Swenshuai.xi void _mdrv_mhl_ClearCbusFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucSelect)
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
214*53ee8cc1Swenshuai.xi
215*53ee8cc1Swenshuai.xi switch(ucSelect)
216*53ee8cc1Swenshuai.xi {
217*53ee8cc1Swenshuai.xi case MHL_CLEAR_INITIAL_FLAG:
218*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulSystemIndex = 0;
219*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulCurrentTimerTick = (MsOS_GetSystemTime()) %CBUS_TIMER_CONTROL_MASK;
220*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DTotalEntryDTD = 0;
221*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DTotalEntryVIC = 0;
222*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_NONE;
223*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucCallBackFunctionIndex = 0;
224*53ee8cc1Swenshuai.xi pMHLResourcePrivate->slMHLPollingTaskID = -1;
225*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usPrePowerState = 0;
226*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucHighEndVICTotalEntry = 0;
227*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceValue = MHL_IMPEDANCE_VALUE;
228*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceOffset = MHL_IMPEDANCE_VALUE;
229*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucIControlValue = 0;
230*53ee8cc1Swenshuai.xi
231*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_3D_VIC_INFORMATION_LENGTH; uctemp++)
232*53ee8cc1Swenshuai.xi {
233*53ee8cc1Swenshuai.xi if(uctemp < MHL_3D_DTD_INFORMATION_LENGTH)
234*53ee8cc1Swenshuai.xi {
235*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationDTD[uctemp] = 0;
236*53ee8cc1Swenshuai.xi }
237*53ee8cc1Swenshuai.xi
238*53ee8cc1Swenshuai.xi if(uctemp < MHL_3D_VIC_INFORMATION_LENGTH)
239*53ee8cc1Swenshuai.xi {
240*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationVIC[uctemp] = 0;
241*53ee8cc1Swenshuai.xi }
242*53ee8cc1Swenshuai.xi
243*53ee8cc1Swenshuai.xi if(uctemp < MHL_HEV_VIC_INFORMATION_LENGTH)
244*53ee8cc1Swenshuai.xi {
245*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usHighEndVICTable[uctemp] = 0;
246*53ee8cc1Swenshuai.xi }
247*53ee8cc1Swenshuai.xi
248*53ee8cc1Swenshuai.xi if(uctemp < MHL_AUDIO_TUNNEL_INFORMATION_LENGTH)
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulAudioTunnelTable[uctemp] = 0;
251*53ee8cc1Swenshuai.xi }
252*53ee8cc1Swenshuai.xi
253*53ee8cc1Swenshuai.xi if(uctemp < MHL_EMSC_SUPPORT_INFORMATION_LENGTH)
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCSupportTable[uctemp] = 0;
256*53ee8cc1Swenshuai.xi }
257*53ee8cc1Swenshuai.xi }
258*53ee8cc1Swenshuai.xi
259*53ee8cc1Swenshuai.xi //pMHLResourcePrivate->usHighEndVICTable[0] = MHL_HEV_VIC_INDEX0;
260*53ee8cc1Swenshuai.xi //pMHLResourcePrivate->usHighEndVICTable[1] = MHL_HEV_VIC_INDEX1;
261*53ee8cc1Swenshuai.xi //pMHLResourcePrivate->usHighEndVICTable[2] = MHL_HEV_VIC_INDEX2;
262*53ee8cc1Swenshuai.xi //pMHLResourcePrivate->usHighEndVICTable[3] = MHL_HEV_VIC_INDEX3;
263*53ee8cc1Swenshuai.xi //pMHLResourcePrivate->usHighEndVICTable[4] = MHL_HEV_VIC_INDEX4;
264*53ee8cc1Swenshuai.xi //pMHLResourcePrivate->usHighEndVICTable[5] = MHL_HEV_VIC_INDEX5;
265*53ee8cc1Swenshuai.xi
266*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulAudioTunnelTable[0] = MHL_AUDIO_TUNNEL_INDEX0;
267*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulAudioTunnelTable[1] = MHL_AUDIO_TUNNEL_INDEX1;
268*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulAudioTunnelTable[2] = MHL_AUDIO_TUNNEL_INDEX2;
269*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulAudioTunnelTable[3] = MHL_AUDIO_TUNNEL_INDEX3;
270*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulAudioTunnelTable[4] = MHL_AUDIO_TUNNEL_INDEX4;
271*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulAudioTunnelTable[5] = MHL_AUDIO_TUNNEL_INDEX5;
272*53ee8cc1Swenshuai.xi
273*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCSupportTable[0] = MHL_EMSC_SUPPORT_BURST_ID0;
274*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCSupportTable[1] = MHL_EMSC_SUPPORT_BURST_ID1;
275*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCSupportTable[2] = MHL_EMSC_SUPPORT_BURST_ID2;
276*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCSupportTable[3] = MHL_EMSC_SUPPORT_BURST_ID3;
277*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCSupportTable[4] = MHL_EMSC_SUPPORT_BURST_ID4;
278*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCSupportTable[5] = MHL_EMSC_SUPPORT_BURST_ID5;
279*53ee8cc1Swenshuai.xi
280*53ee8cc1Swenshuai.xi break;
281*53ee8cc1Swenshuai.xi
282*53ee8cc1Swenshuai.xi case MHL_CLEAR_CABLE_LOSS_FLAG:
283*53ee8cc1Swenshuai.xi case MHL_CLEAR_CONNECT_LOSS_FLAG:
284*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucProcDoneIndex = 0;
285*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usDisplayIndex = 0;
286*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulCbusReceiveIndex = 0;
287*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulCbusSendIndex = 0;
288*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPreRCPKeyCode = 0;
289*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulEnableIndex = 0;
290*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_NONE;
291*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_NONE;
292*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
293*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusTrainState = MHL_ECBUS_STATE_DISABLE;
294*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = 0;
295*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCTxBufferSize = MHL_EMSC_DATA_SIZE;
296*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCRxBufferSize = MHL_EMSC_DATA_SIZE;
297*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
298*53ee8cc1Swenshuai.xi
299*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_CBUS_TOTAL_QUEUE_NUM; uctemp++)
300*53ee8cc1Swenshuai.xi {
301*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[uctemp].ucQueueState = MHL_QUEUE_STATE_IDLE;
302*53ee8cc1Swenshuai.xi }
303*53ee8cc1Swenshuai.xi
304*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag = FALSE;
305*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag = FALSE;
306*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bClockStableFlag = FALSE;
307*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bAutoEnableFlag = FALSE;
308*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bSignalStableFlag = FALSE;
309*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucAutoEQState = MHL_AUTO_EQ_START;
310*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucStableCount = 0;
311*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState = MHL_EMSC_SEND_NONE;
312*53ee8cc1Swenshuai.xi
313*53ee8cc1Swenshuai.xi break;
314*53ee8cc1Swenshuai.xi
315*53ee8cc1Swenshuai.xi case MHL_CLEAR_CBUS_TIME_OUT_FLAG:
316*53ee8cc1Swenshuai.xi break;
317*53ee8cc1Swenshuai.xi
318*53ee8cc1Swenshuai.xi case MHL_CLEAR_MSG_RESPONSE_FLAG:
319*53ee8cc1Swenshuai.xi break;
320*53ee8cc1Swenshuai.xi
321*53ee8cc1Swenshuai.xi default:
322*53ee8cc1Swenshuai.xi
323*53ee8cc1Swenshuai.xi break;
324*53ee8cc1Swenshuai.xi };
325*53ee8cc1Swenshuai.xi }
326*53ee8cc1Swenshuai.xi
327*53ee8cc1Swenshuai.xi //**************************************************************************
328*53ee8cc1Swenshuai.xi // [Function Name]:
329*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusGetLeastFlag()
330*53ee8cc1Swenshuai.xi // [Description]:
331*53ee8cc1Swenshuai.xi // MHL Cbus get the least True flag in index
332*53ee8cc1Swenshuai.xi // [Arguments]:
333*53ee8cc1Swenshuai.xi //
334*53ee8cc1Swenshuai.xi // [Return]:
335*53ee8cc1Swenshuai.xi //
336*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusGetLeastFlag(MS_U8 unindex)337*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CbusGetLeastFlag(MS_U8 unindex)
338*53ee8cc1Swenshuai.xi {
339*53ee8cc1Swenshuai.xi MS_U8 uctemp = BIT(0);
340*53ee8cc1Swenshuai.xi
341*53ee8cc1Swenshuai.xi if(unindex == 0)
342*53ee8cc1Swenshuai.xi {
343*53ee8cc1Swenshuai.xi return unindex;
344*53ee8cc1Swenshuai.xi }
345*53ee8cc1Swenshuai.xi
346*53ee8cc1Swenshuai.xi while(!(unindex &uctemp))
347*53ee8cc1Swenshuai.xi {
348*53ee8cc1Swenshuai.xi uctemp = uctemp <<1;
349*53ee8cc1Swenshuai.xi }
350*53ee8cc1Swenshuai.xi
351*53ee8cc1Swenshuai.xi return uctemp;
352*53ee8cc1Swenshuai.xi }
353*53ee8cc1Swenshuai.xi
354*53ee8cc1Swenshuai.xi //**************************************************************************
355*53ee8cc1Swenshuai.xi // [Function Name]:
356*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetLeastBitNum()
357*53ee8cc1Swenshuai.xi // [Description]:
358*53ee8cc1Swenshuai.xi //
359*53ee8cc1Swenshuai.xi // [Arguments]:
360*53ee8cc1Swenshuai.xi //
361*53ee8cc1Swenshuai.xi // [Return]:
362*53ee8cc1Swenshuai.xi //
363*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetLeastBitNum(MS_U16 usData)364*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetLeastBitNum(MS_U16 usData)
365*53ee8cc1Swenshuai.xi {
366*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
367*53ee8cc1Swenshuai.xi
368*53ee8cc1Swenshuai.xi while(!(usData &BIT(0)))
369*53ee8cc1Swenshuai.xi {
370*53ee8cc1Swenshuai.xi usData = usData >>1;
371*53ee8cc1Swenshuai.xi uctemp++;
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi
374*53ee8cc1Swenshuai.xi return uctemp;
375*53ee8cc1Swenshuai.xi }
376*53ee8cc1Swenshuai.xi
377*53ee8cc1Swenshuai.xi //**************************************************************************
378*53ee8cc1Swenshuai.xi // [Function Name]:
379*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusSetPacket(BYTE ucHeader, Bool bControl, BYTE ucContent)
380*53ee8cc1Swenshuai.xi // [Description]
381*53ee8cc1Swenshuai.xi // MHL Cbus Packet setting
382*53ee8cc1Swenshuai.xi // [Arguments]:
383*53ee8cc1Swenshuai.xi // ucHeader: Packet header type
384*53ee8cc1Swenshuai.xi // bControl: Packet control bit type
385*53ee8cc1Swenshuai.xi // ucContent: Packet payload
386*53ee8cc1Swenshuai.xi // [Return]:
387*53ee8cc1Swenshuai.xi // Packet word for register write
388*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSetPacket(MS_U8 ucHeader,MS_BOOL bControl,MS_U8 ucContent)389*53ee8cc1Swenshuai.xi MS_U16 _mdrv_mhl_CbusSetPacket(MS_U8 ucHeader, MS_BOOL bControl, MS_U8 ucContent)
390*53ee8cc1Swenshuai.xi {
391*53ee8cc1Swenshuai.xi MS_BOOL bParity = 0;
392*53ee8cc1Swenshuai.xi MS_U16 usPacket = (ucHeader <<9) |(bControl <<8) |ucContent;
393*53ee8cc1Swenshuai.xi
394*53ee8cc1Swenshuai.xi do
395*53ee8cc1Swenshuai.xi {
396*53ee8cc1Swenshuai.xi bParity ^= (usPacket & BIT(0));
397*53ee8cc1Swenshuai.xi usPacket = usPacket >>1;
398*53ee8cc1Swenshuai.xi }
399*53ee8cc1Swenshuai.xi while(usPacket);
400*53ee8cc1Swenshuai.xi
401*53ee8cc1Swenshuai.xi usPacket = (bParity <<11) |(ucHeader <<9) |(bControl <<8) |ucContent;
402*53ee8cc1Swenshuai.xi
403*53ee8cc1Swenshuai.xi return (usPacket |BIT(15));
404*53ee8cc1Swenshuai.xi }
405*53ee8cc1Swenshuai.xi //**************************************************************************
406*53ee8cc1Swenshuai.xi // [Function Name]:
407*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusTxWriteCommand()
408*53ee8cc1Swenshuai.xi // [Description]:
409*53ee8cc1Swenshuai.xi // MHL Cbus send command
410*53ee8cc1Swenshuai.xi // [Arguments]:
411*53ee8cc1Swenshuai.xi //
412*53ee8cc1Swenshuai.xi // [Return]:
413*53ee8cc1Swenshuai.xi // TRUE: Cbus command send successfully
414*53ee8cc1Swenshuai.xi // FALSE: Cbus command send fail
415*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusTxWriteCommand(MS_BOOL bECbusEnableFlag,stMHL_QUEUE_INFO * stCbusQueueInfo)416*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusTxWriteCommand(MS_BOOL bECbusEnableFlag, stMHL_QUEUE_INFO *stCbusQueueInfo)
417*53ee8cc1Swenshuai.xi {
418*53ee8cc1Swenshuai.xi MS_BOOL bIndex = TRUE;
419*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
420*53ee8cc1Swenshuai.xi mhalCbusFifo_S pCbusFifo;
421*53ee8cc1Swenshuai.xi
422*53ee8cc1Swenshuai.xi pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, stCbusQueueInfo->ucCommand);
423*53ee8cc1Swenshuai.xi
424*53ee8cc1Swenshuai.xi switch(stCbusQueueInfo->ucCommand)
425*53ee8cc1Swenshuai.xi {
426*53ee8cc1Swenshuai.xi case MSC_ACK:
427*53ee8cc1Swenshuai.xi pCbusFifo.lens = stCbusQueueInfo->ucLength;
428*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_ACK);
429*53ee8cc1Swenshuai.xi
430*53ee8cc1Swenshuai.xi if(stCbusQueueInfo->ucLength == 2)
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi // payload 2
433*53ee8cc1Swenshuai.xi pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
434*53ee8cc1Swenshuai.xi }
435*53ee8cc1Swenshuai.xi break;
436*53ee8cc1Swenshuai.xi
437*53ee8cc1Swenshuai.xi case MSC_NACK:
438*53ee8cc1Swenshuai.xi pCbusFifo.lens = 1;
439*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_NACK);
440*53ee8cc1Swenshuai.xi break;
441*53ee8cc1Swenshuai.xi
442*53ee8cc1Swenshuai.xi case MSC_ABORT:
443*53ee8cc1Swenshuai.xi pCbusFifo.lens = 1;
444*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_ABORT);
445*53ee8cc1Swenshuai.xi break;
446*53ee8cc1Swenshuai.xi
447*53ee8cc1Swenshuai.xi case MSC_WRITE_STAT_OR_SET_INT: // 0x60
448*53ee8cc1Swenshuai.xi case MSC_WRITE_XSTAT: // 0x70
449*53ee8cc1Swenshuai.xi // payload 1
450*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_WRITE_STAT_OR_SET_INT);
451*53ee8cc1Swenshuai.xi // payload 2
452*53ee8cc1Swenshuai.xi pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
453*53ee8cc1Swenshuai.xi // payload 3
454*53ee8cc1Swenshuai.xi pCbusFifo.databuf[2] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[1]);
455*53ee8cc1Swenshuai.xi // message length
456*53ee8cc1Swenshuai.xi pCbusFifo.lens = 3;
457*53ee8cc1Swenshuai.xi break;
458*53ee8cc1Swenshuai.xi
459*53ee8cc1Swenshuai.xi case MSC_READ_DEVCAP: // 0x61
460*53ee8cc1Swenshuai.xi case MSC_READ_XDEVCAP: // 0x71
461*53ee8cc1Swenshuai.xi // payload 1
462*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_READ_DEVCAP);
463*53ee8cc1Swenshuai.xi // payload 2
464*53ee8cc1Swenshuai.xi pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
465*53ee8cc1Swenshuai.xi // message length
466*53ee8cc1Swenshuai.xi pCbusFifo.lens = 2;
467*53ee8cc1Swenshuai.xi break;
468*53ee8cc1Swenshuai.xi
469*53ee8cc1Swenshuai.xi case MSC_GET_STATE: // 0x62
470*53ee8cc1Swenshuai.xi case MSC_GET_VENDOR_ID: // 0x63
471*53ee8cc1Swenshuai.xi case MSC_SET_HPD: // 0x64
472*53ee8cc1Swenshuai.xi case MSC_CLR_HPD: // 0x65
473*53ee8cc1Swenshuai.xi case MSC_GET_SC1_ERRORCODE: // 0x69 - Get channel 1 command error code
474*53ee8cc1Swenshuai.xi case MSC_GET_DDC_ERRORCODE: // 0x6A - Get DDC channel command error code.
475*53ee8cc1Swenshuai.xi case MSC_GET_MSC_ERRORCODE: // 0x6B - Get MSC command error code.
476*53ee8cc1Swenshuai.xi case MSC_GET_SC3_ERRORCODE: // 0x6D - Get channel 3 command error code.
477*53ee8cc1Swenshuai.xi // payload 1
478*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, pReq->cmd);
479*53ee8cc1Swenshuai.xi // message length
480*53ee8cc1Swenshuai.xi pCbusFifo.lens = 1;
481*53ee8cc1Swenshuai.xi break;
482*53ee8cc1Swenshuai.xi
483*53ee8cc1Swenshuai.xi case MSC_MSC_MSG: // 0x68
484*53ee8cc1Swenshuai.xi // payload 1
485*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_MSC_MSG);
486*53ee8cc1Swenshuai.xi // payload 2
487*53ee8cc1Swenshuai.xi pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
488*53ee8cc1Swenshuai.xi // payload 3
489*53ee8cc1Swenshuai.xi pCbusFifo.databuf[2] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[1]);
490*53ee8cc1Swenshuai.xi // message length
491*53ee8cc1Swenshuai.xi pCbusFifo.lens = 3;
492*53ee8cc1Swenshuai.xi break;
493*53ee8cc1Swenshuai.xi
494*53ee8cc1Swenshuai.xi case MSC_WRITE_BURST: // 0x6C
495*53ee8cc1Swenshuai.xi // payload 1
496*53ee8cc1Swenshuai.xi //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_WRITE_BURST);
497*53ee8cc1Swenshuai.xi // payload 2 ~ 17
498*53ee8cc1Swenshuai.xi for(uctemp =0; uctemp <stCbusQueueInfo->ucLength; uctemp++) // offset packet + the maxi 16 packets
499*53ee8cc1Swenshuai.xi {
500*53ee8cc1Swenshuai.xi pCbusFifo.databuf[uctemp +1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[uctemp]);
501*53ee8cc1Swenshuai.xi }
502*53ee8cc1Swenshuai.xi // EOF
503*53ee8cc1Swenshuai.xi pCbusFifo.databuf[stCbusQueueInfo->ucLength +1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_EOF);
504*53ee8cc1Swenshuai.xi // message length
505*53ee8cc1Swenshuai.xi pCbusFifo.lens = stCbusQueueInfo->ucLength +2;
506*53ee8cc1Swenshuai.xi break;
507*53ee8cc1Swenshuai.xi
508*53ee8cc1Swenshuai.xi default:
509*53ee8cc1Swenshuai.xi bIndex = FALSE;
510*53ee8cc1Swenshuai.xi break;
511*53ee8cc1Swenshuai.xi }
512*53ee8cc1Swenshuai.xi
513*53ee8cc1Swenshuai.xi if(bIndex)
514*53ee8cc1Swenshuai.xi {
515*53ee8cc1Swenshuai.xi if(!mhal_mhl_CBusWrite(bECbusEnableFlag, &pCbusFifo))
516*53ee8cc1Swenshuai.xi {
517*53ee8cc1Swenshuai.xi return FALSE;
518*53ee8cc1Swenshuai.xi }
519*53ee8cc1Swenshuai.xi }
520*53ee8cc1Swenshuai.xi
521*53ee8cc1Swenshuai.xi return bIndex;
522*53ee8cc1Swenshuai.xi }
523*53ee8cc1Swenshuai.xi
524*53ee8cc1Swenshuai.xi //**************************************************************************
525*53ee8cc1Swenshuai.xi // [Function Name]:
526*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetFreeQueueIndex()
527*53ee8cc1Swenshuai.xi // [Description]
528*53ee8cc1Swenshuai.xi //
529*53ee8cc1Swenshuai.xi // [Arguments]:
530*53ee8cc1Swenshuai.xi //
531*53ee8cc1Swenshuai.xi // [Return]:
532*53ee8cc1Swenshuai.xi //
533*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetFreeQueueIndex(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)534*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetFreeQueueIndex(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
535*53ee8cc1Swenshuai.xi {
536*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
537*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = 0;
538*53ee8cc1Swenshuai.xi
539*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(MHL_CBUS_TOTAL_QUEUE_NUM -1); uctemp++)
540*53ee8cc1Swenshuai.xi {
541*53ee8cc1Swenshuai.xi ucQueueIndex = (pMHLResourcePrivate->ucCurrentQueueIndex +uctemp +1) %(MHL_CBUS_TOTAL_QUEUE_NUM -1);
542*53ee8cc1Swenshuai.xi
543*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState == MHL_QUEUE_STATE_IDLE)
544*53ee8cc1Swenshuai.xi {
545*53ee8cc1Swenshuai.xi break;
546*53ee8cc1Swenshuai.xi }
547*53ee8cc1Swenshuai.xi else
548*53ee8cc1Swenshuai.xi {
549*53ee8cc1Swenshuai.xi ucQueueIndex = MHL_CBUS_TOTAL_QUEUE_NUM;
550*53ee8cc1Swenshuai.xi }
551*53ee8cc1Swenshuai.xi }
552*53ee8cc1Swenshuai.xi
553*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM) // Have free queue
554*53ee8cc1Swenshuai.xi {
555*53ee8cc1Swenshuai.xi uctemp = (ucQueueIndex +MHL_CBUS_TOTAL_QUEUE_NUM -2) %(MHL_CBUS_TOTAL_QUEUE_NUM -1);
556*53ee8cc1Swenshuai.xi
557*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stCbusQueueInfo[uctemp].ucQueueState == MHL_QUEUE_STATE_IDLE)
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi ucQueueIndex = uctemp;
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi }
562*53ee8cc1Swenshuai.xi
563*53ee8cc1Swenshuai.xi return ucQueueIndex;
564*53ee8cc1Swenshuai.xi }
565*53ee8cc1Swenshuai.xi
566*53ee8cc1Swenshuai.xi //**************************************************************************
567*53ee8cc1Swenshuai.xi // [Function Name]:
568*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetCbusQueueIndex()
569*53ee8cc1Swenshuai.xi // [Description]:
570*53ee8cc1Swenshuai.xi // MHL Cbus get transmitting queue index
571*53ee8cc1Swenshuai.xi // [Arguments]:
572*53ee8cc1Swenshuai.xi //
573*53ee8cc1Swenshuai.xi // [Return]:
574*53ee8cc1Swenshuai.xi //
575*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetCbusQueueIndex(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)576*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetCbusQueueIndex(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
577*53ee8cc1Swenshuai.xi {
578*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
579*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = 0;
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi // Check Rx queue have packet transmit success or not
582*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState != MHL_QUEUE_STATE_IDLE)
583*53ee8cc1Swenshuai.xi {
584*53ee8cc1Swenshuai.xi ucQueueIndex = MHL_CBUS_RX_QUEUE_INDEX;
585*53ee8cc1Swenshuai.xi }
586*53ee8cc1Swenshuai.xi else // Check Tx queue have packet transmit success or not, search start from current index
587*53ee8cc1Swenshuai.xi {
588*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(MHL_CBUS_TOTAL_QUEUE_NUM -1); uctemp++)
589*53ee8cc1Swenshuai.xi {
590*53ee8cc1Swenshuai.xi ucQueueIndex = (pMHLResourcePrivate->ucCurrentQueueIndex +uctemp) %(MHL_CBUS_TOTAL_QUEUE_NUM -1);
591*53ee8cc1Swenshuai.xi
592*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState != MHL_QUEUE_STATE_IDLE)
593*53ee8cc1Swenshuai.xi {
594*53ee8cc1Swenshuai.xi break;
595*53ee8cc1Swenshuai.xi }
596*53ee8cc1Swenshuai.xi else
597*53ee8cc1Swenshuai.xi {
598*53ee8cc1Swenshuai.xi ucQueueIndex = MHL_CBUS_TOTAL_QUEUE_NUM;
599*53ee8cc1Swenshuai.xi }
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi }
602*53ee8cc1Swenshuai.xi
603*53ee8cc1Swenshuai.xi return ucQueueIndex;
604*53ee8cc1Swenshuai.xi }
605*53ee8cc1Swenshuai.xi
606*53ee8cc1Swenshuai.xi //**************************************************************************
607*53ee8cc1Swenshuai.xi // [Function Name]:
608*53ee8cc1Swenshuai.xi // _mdrv_mhl_SetCbusTimerEvent()
609*53ee8cc1Swenshuai.xi // [Description]:
610*53ee8cc1Swenshuai.xi //
611*53ee8cc1Swenshuai.xi // [Arguments]:
612*53ee8cc1Swenshuai.xi //
613*53ee8cc1Swenshuai.xi // [Return]:
614*53ee8cc1Swenshuai.xi //
615*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SetCbusTimerEvent(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucTimerEvent,MS_U16 usTimerTick)616*53ee8cc1Swenshuai.xi void _mdrv_mhl_SetCbusTimerEvent(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucTimerEvent, MS_U16 usTimerTick)
617*53ee8cc1Swenshuai.xi {
618*53ee8cc1Swenshuai.xi if(usTimerTick > 0)
619*53ee8cc1Swenshuai.xi {
620*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].bEnableFlag = TRUE;
621*53ee8cc1Swenshuai.xi
622*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
623*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL set timer event %d tick %d\r\n", ucTimerEvent, usTimerTick);
624*53ee8cc1Swenshuai.xi #endif
625*53ee8cc1Swenshuai.xi }
626*53ee8cc1Swenshuai.xi
627*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick = usTimerTick;
628*53ee8cc1Swenshuai.xi }
629*53ee8cc1Swenshuai.xi
630*53ee8cc1Swenshuai.xi //**************************************************************************
631*53ee8cc1Swenshuai.xi // [Function Name]:
632*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusRxQueueInsertMSG(BYTE subCmd, BYTE databuf)
633*53ee8cc1Swenshuai.xi // [Description]
634*53ee8cc1Swenshuai.xi // MHL Cbus Reply MSC RCP or RAP into Queue
635*53ee8cc1Swenshuai.xi // [Arguments]:
636*53ee8cc1Swenshuai.xi // subCmd: MSC subcommands
637*53ee8cc1Swenshuai.xi // databuf: command code
638*53ee8cc1Swenshuai.xi // [Return]:
639*53ee8cc1Swenshuai.xi // TRUE: success
640*53ee8cc1Swenshuai.xi // FALSE: fail
641*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusRxQueueInsertMSG(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucSubCommand,MS_U8 ucKeyCode)642*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusRxQueueInsertMSG(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucSubCommand, MS_U8 ucKeyCode)
643*53ee8cc1Swenshuai.xi {
644*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState = MHL_QUEUE_STATE_PENDING;
645*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucLength = 2;
646*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucCommand = MSC_MSC_MSG;
647*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucData[0] = ucSubCommand;
648*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucData[1] = ucKeyCode;
649*53ee8cc1Swenshuai.xi }
650*53ee8cc1Swenshuai.xi
651*53ee8cc1Swenshuai.xi //**************************************************************************
652*53ee8cc1Swenshuai.xi // [Function Name]:
653*53ee8cc1Swenshuai.xi // _mdrv_mhl_WriteBurstCheckSum()
654*53ee8cc1Swenshuai.xi // [Description]
655*53ee8cc1Swenshuai.xi //
656*53ee8cc1Swenshuai.xi // [Arguments]:
657*53ee8cc1Swenshuai.xi //
658*53ee8cc1Swenshuai.xi // [Return]:
659*53ee8cc1Swenshuai.xi //
660*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_WriteBurstCheckSum(MS_U8 * pData)661*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_WriteBurstCheckSum(MS_U8 *pData)
662*53ee8cc1Swenshuai.xi {
663*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
664*53ee8cc1Swenshuai.xi MS_U8 ucCheckSum = 0;
665*53ee8cc1Swenshuai.xi
666*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_MSC_SCRATCHPAD_SIZE; uctemp++)
667*53ee8cc1Swenshuai.xi {
668*53ee8cc1Swenshuai.xi ucCheckSum = ucCheckSum +pData[uctemp];
669*53ee8cc1Swenshuai.xi }
670*53ee8cc1Swenshuai.xi
671*53ee8cc1Swenshuai.xi ucCheckSum = (ucCheckSum ^0xFF) +1;
672*53ee8cc1Swenshuai.xi
673*53ee8cc1Swenshuai.xi return ucCheckSum;
674*53ee8cc1Swenshuai.xi }
675*53ee8cc1Swenshuai.xi
676*53ee8cc1Swenshuai.xi //**************************************************************************
677*53ee8cc1Swenshuai.xi // [Function Name]:
678*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckSendCommand()
679*53ee8cc1Swenshuai.xi // [Description]
680*53ee8cc1Swenshuai.xi //
681*53ee8cc1Swenshuai.xi // [Arguments]:
682*53ee8cc1Swenshuai.xi //
683*53ee8cc1Swenshuai.xi // [Return]:
684*53ee8cc1Swenshuai.xi //
685*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckSendCommand(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)686*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CheckSendCommand(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi MS_BOOL bSendCommand = FALSE;
689*53ee8cc1Swenshuai.xi MS_BOOL bMHLPort = mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath);
690*53ee8cc1Swenshuai.xi
691*53ee8cc1Swenshuai.xi if(bMHLPort && mhal_mhl_CheckPIPWindow()) // MHL port and scaler mux on
692*53ee8cc1Swenshuai.xi {
693*53ee8cc1Swenshuai.xi bSendCommand = TRUE;
694*53ee8cc1Swenshuai.xi }
695*53ee8cc1Swenshuai.xi else if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_FORCE_SEND_COMMAND_FLAG) && GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG))
696*53ee8cc1Swenshuai.xi {
697*53ee8cc1Swenshuai.xi bSendCommand = TRUE;
698*53ee8cc1Swenshuai.xi }
699*53ee8cc1Swenshuai.xi
700*53ee8cc1Swenshuai.xi return bSendCommand;
701*53ee8cc1Swenshuai.xi }
702*53ee8cc1Swenshuai.xi
703*53ee8cc1Swenshuai.xi //**************************************************************************
704*53ee8cc1Swenshuai.xi // [Function Name]:
705*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetRAPEnableFlag()
706*53ee8cc1Swenshuai.xi // [Description]
707*53ee8cc1Swenshuai.xi //
708*53ee8cc1Swenshuai.xi // [Arguments]:
709*53ee8cc1Swenshuai.xi //
710*53ee8cc1Swenshuai.xi // [Return]:
711*53ee8cc1Swenshuai.xi //
712*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetRAPEnableFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)713*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetRAPEnableFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
714*53ee8cc1Swenshuai.xi {
715*53ee8cc1Swenshuai.xi MS_BOOL bRAPEnable = FALSE;
716*53ee8cc1Swenshuai.xi
717*53ee8cc1Swenshuai.xi if(!mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath))
718*53ee8cc1Swenshuai.xi {
719*53ee8cc1Swenshuai.xi bRAPEnable = TRUE;
720*53ee8cc1Swenshuai.xi }
721*53ee8cc1Swenshuai.xi else if(!mhal_mhl_CheckPIPWindow())
722*53ee8cc1Swenshuai.xi {
723*53ee8cc1Swenshuai.xi bRAPEnable = TRUE;
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->stSignalStatusInfo.bSignalStableFlag)
726*53ee8cc1Swenshuai.xi {
727*53ee8cc1Swenshuai.xi bRAPEnable = TRUE;
728*53ee8cc1Swenshuai.xi }
729*53ee8cc1Swenshuai.xi
730*53ee8cc1Swenshuai.xi return bRAPEnable;
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi
733*53ee8cc1Swenshuai.xi //**************************************************************************
734*53ee8cc1Swenshuai.xi // [Function Name]:
735*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckCbusModeChange()
736*53ee8cc1Swenshuai.xi // [Description]
737*53ee8cc1Swenshuai.xi //
738*53ee8cc1Swenshuai.xi // [Arguments]:
739*53ee8cc1Swenshuai.xi //
740*53ee8cc1Swenshuai.xi // [Return]:
741*53ee8cc1Swenshuai.xi //
742*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckCbusModeChange(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)743*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CheckCbusModeChange(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
744*53ee8cc1Swenshuai.xi {
745*53ee8cc1Swenshuai.xi MS_BOOL bNotCbusChange = TRUE;
746*53ee8cc1Swenshuai.xi
747*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucMSGData[1] == MHL_RAP_KEY_CBUS_MODE_UP)
748*53ee8cc1Swenshuai.xi {
749*53ee8cc1Swenshuai.xi bNotCbusChange = FALSE;
750*53ee8cc1Swenshuai.xi
751*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_RECEIVE_MODE_UP;
752*53ee8cc1Swenshuai.xi }
753*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->ucMSGData[1] == MHL_RAP_KEY_CBUS_MODE_DOWN)
754*53ee8cc1Swenshuai.xi {
755*53ee8cc1Swenshuai.xi bNotCbusChange = FALSE;
756*53ee8cc1Swenshuai.xi
757*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_RECEIVE_MODE_DOWN;
758*53ee8cc1Swenshuai.xi }
759*53ee8cc1Swenshuai.xi
760*53ee8cc1Swenshuai.xi return bNotCbusChange;
761*53ee8cc1Swenshuai.xi }
762*53ee8cc1Swenshuai.xi
763*53ee8cc1Swenshuai.xi //**************************************************************************
764*53ee8cc1Swenshuai.xi // [Function Name]:
765*53ee8cc1Swenshuai.xi // _mdrv_mhl_DTDPresentinEDID()
766*53ee8cc1Swenshuai.xi // [Description]
767*53ee8cc1Swenshuai.xi //
768*53ee8cc1Swenshuai.xi // [Arguments]:
769*53ee8cc1Swenshuai.xi //
770*53ee8cc1Swenshuai.xi // [Return]:
771*53ee8cc1Swenshuai.xi //
772*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_DTDPresentinEDID(MS_U8 * pData)773*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_DTDPresentinEDID(MS_U8 *pData)
774*53ee8cc1Swenshuai.xi {
775*53ee8cc1Swenshuai.xi MS_BOOL bPresent = FALSE;
776*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
777*53ee8cc1Swenshuai.xi
778*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < 3; uctemp++)
779*53ee8cc1Swenshuai.xi {
780*53ee8cc1Swenshuai.xi if(pData[uctemp] > 0)
781*53ee8cc1Swenshuai.xi {
782*53ee8cc1Swenshuai.xi bPresent = TRUE;
783*53ee8cc1Swenshuai.xi
784*53ee8cc1Swenshuai.xi break;
785*53ee8cc1Swenshuai.xi }
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi
788*53ee8cc1Swenshuai.xi return bPresent;
789*53ee8cc1Swenshuai.xi }
790*53ee8cc1Swenshuai.xi
791*53ee8cc1Swenshuai.xi //**************************************************************************
792*53ee8cc1Swenshuai.xi // [Function Name]:
793*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetDTD3DTimingInformation()
794*53ee8cc1Swenshuai.xi // [Description]
795*53ee8cc1Swenshuai.xi //
796*53ee8cc1Swenshuai.xi // [Arguments]:
797*53ee8cc1Swenshuai.xi //
798*53ee8cc1Swenshuai.xi // [Return]:
799*53ee8cc1Swenshuai.xi //
800*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetDTD3DTimingInformation(MS_U8 * pData)801*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetDTD3DTimingInformation(MS_U8 *pData)
802*53ee8cc1Swenshuai.xi {
803*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = ((pData[17] &BIT(7)) ?TRUE :FALSE);
804*53ee8cc1Swenshuai.xi MS_U8 ucIndex = 0;
805*53ee8cc1Swenshuai.xi MS_U16 usHActive = ((pData[4] &BMASK(7:4)) <<4) |pData[2];
806*53ee8cc1Swenshuai.xi MS_U16 usHBlank = ((pData[4] &BMASK(3:0)) <<8) |pData[3];
807*53ee8cc1Swenshuai.xi MS_U16 usVActive = ((pData[7] &BMASK(7:4)) <<4) |pData[5];
808*53ee8cc1Swenshuai.xi MS_U16 usVBlank = ((pData[7] &BMASK(3:0)) <<8) |pData[6];
809*53ee8cc1Swenshuai.xi MS_U16 usHTotal = usHActive +usHBlank;
810*53ee8cc1Swenshuai.xi MS_U16 usVTotal = usVActive +usVBlank;
811*53ee8cc1Swenshuai.xi MS_U16 usPixelClk = (pData[1] <<8) |pData[0];
812*53ee8cc1Swenshuai.xi MS_U32 ulFrequenct = 0;
813*53ee8cc1Swenshuai.xi
814*53ee8cc1Swenshuai.xi if((usHTotal > 0) && (usVTotal > 0))
815*53ee8cc1Swenshuai.xi {
816*53ee8cc1Swenshuai.xi ulFrequenct = (usPixelClk *100 /usHTotal) *1000 /usVTotal;
817*53ee8cc1Swenshuai.xi
818*53ee8cc1Swenshuai.xi if((usHActive == 1920) && (usVActive == 1080)) // 1920x1080p
819*53ee8cc1Swenshuai.xi {
820*53ee8cc1Swenshuai.xi if((ulFrequenct > 230) && (ulFrequenct < 245)) // 24Hz
821*53ee8cc1Swenshuai.xi {
822*53ee8cc1Swenshuai.xi ucIndex = MHL_3D_PRESENT_VIC_1920x1080p24Hz;
823*53ee8cc1Swenshuai.xi }
824*53ee8cc1Swenshuai.xi }
825*53ee8cc1Swenshuai.xi else if((usHActive == 1920) && (usVActive == 540) && bInterlace) // 1920x1080i
826*53ee8cc1Swenshuai.xi {
827*53ee8cc1Swenshuai.xi if((ulFrequenct > 590) && (ulFrequenct < 610)) // 60Hz
828*53ee8cc1Swenshuai.xi {
829*53ee8cc1Swenshuai.xi ucIndex = MHL_3D_PRESENT_VIC_1920x1080i60Hz;
830*53ee8cc1Swenshuai.xi }
831*53ee8cc1Swenshuai.xi else if((ulFrequenct > 490) && (ulFrequenct < 510)) // 50Hz
832*53ee8cc1Swenshuai.xi {
833*53ee8cc1Swenshuai.xi ucIndex = MHL_3D_PRESENT_VIC_1920x1080i50Hz;
834*53ee8cc1Swenshuai.xi }
835*53ee8cc1Swenshuai.xi }
836*53ee8cc1Swenshuai.xi else if((usHActive == 1280) && (usVActive == 720)) // 1280x720p
837*53ee8cc1Swenshuai.xi {
838*53ee8cc1Swenshuai.xi if((ulFrequenct > 590) && (ulFrequenct < 610)) // 60Hz
839*53ee8cc1Swenshuai.xi {
840*53ee8cc1Swenshuai.xi ucIndex = MHL_3D_PRESENT_VIC_1280x720p60Hz;
841*53ee8cc1Swenshuai.xi }
842*53ee8cc1Swenshuai.xi else if((ulFrequenct > 490) && (ulFrequenct < 510)) // 50Hz
843*53ee8cc1Swenshuai.xi {
844*53ee8cc1Swenshuai.xi ucIndex = MHL_3D_PRESENT_VIC_1280x720p50Hz;
845*53ee8cc1Swenshuai.xi }
846*53ee8cc1Swenshuai.xi }
847*53ee8cc1Swenshuai.xi }
848*53ee8cc1Swenshuai.xi
849*53ee8cc1Swenshuai.xi return ucIndex;
850*53ee8cc1Swenshuai.xi }
851*53ee8cc1Swenshuai.xi
852*53ee8cc1Swenshuai.xi //**************************************************************************
853*53ee8cc1Swenshuai.xi // [Function Name]:
854*53ee8cc1Swenshuai.xi // _mdrv_mhl_InsertDTD3DInformation()
855*53ee8cc1Swenshuai.xi // [Description]
856*53ee8cc1Swenshuai.xi //
857*53ee8cc1Swenshuai.xi // [Arguments]:
858*53ee8cc1Swenshuai.xi //
859*53ee8cc1Swenshuai.xi // [Return]:
860*53ee8cc1Swenshuai.xi //
861*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InsertDTD3DInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucIndex,MS_U8 ucData)862*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_InsertDTD3DInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucIndex, MS_U8 ucData)
863*53ee8cc1Swenshuai.xi {
864*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
865*53ee8cc1Swenshuai.xi
866*53ee8cc1Swenshuai.xi ucData = ((ucData &BMASK(6:5)) >> 4) |(ucData &BIT(0));
867*53ee8cc1Swenshuai.xi
868*53ee8cc1Swenshuai.xi switch(ucData)
869*53ee8cc1Swenshuai.xi {
870*53ee8cc1Swenshuai.xi case MHL_3D_DTD_STEREO_FIELD_SEQUENTIAL_RIGHT:
871*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_SUPPORT_MASK);
872*53ee8cc1Swenshuai.xi break;
873*53ee8cc1Swenshuai.xi
874*53ee8cc1Swenshuai.xi case MHL_3D_DTD_STEREO_FIELD_SEQUENTIAL_LEFT:
875*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_SUPPORT_MASK);
876*53ee8cc1Swenshuai.xi break;
877*53ee8cc1Swenshuai.xi
878*53ee8cc1Swenshuai.xi case MHL_3D_DTD_STEREO_2WAY_INTERLEAVED_RIGHT:
879*53ee8cc1Swenshuai.xi // No setting
880*53ee8cc1Swenshuai.xi break;
881*53ee8cc1Swenshuai.xi
882*53ee8cc1Swenshuai.xi case MHL_3D_DTD_STEREO_2WAY_INTERLEAVED_LEFT:
883*53ee8cc1Swenshuai.xi // No setting
884*53ee8cc1Swenshuai.xi break;
885*53ee8cc1Swenshuai.xi
886*53ee8cc1Swenshuai.xi case MHL_3D_DTD_STEREO_4WAY_INTERLEAVED:
887*53ee8cc1Swenshuai.xi // No setting
888*53ee8cc1Swenshuai.xi break;
889*53ee8cc1Swenshuai.xi
890*53ee8cc1Swenshuai.xi case MHL_3D_DTD_STEREO_SIDE_BY_SIDE_INTERLEAVED:
891*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_LR_SUPPORT, MHL_3D_SUPPORT_MASK);
892*53ee8cc1Swenshuai.xi break;
893*53ee8cc1Swenshuai.xi
894*53ee8cc1Swenshuai.xi default: // MHL_3D_DTD_STEREO_NORMAL_DISPLAY
895*53ee8cc1Swenshuai.xi
896*53ee8cc1Swenshuai.xi break;
897*53ee8cc1Swenshuai.xi };
898*53ee8cc1Swenshuai.xi
899*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationDTD[ucIndex] = uctemp;
900*53ee8cc1Swenshuai.xi
901*53ee8cc1Swenshuai.xi for(uctemp = 0, ucData = 0; uctemp < (ucIndex +1); uctemp++)
902*53ee8cc1Swenshuai.xi {
903*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->uc3DInformationDTD[uctemp] > 0)
904*53ee8cc1Swenshuai.xi {
905*53ee8cc1Swenshuai.xi ucData = uctemp +1;
906*53ee8cc1Swenshuai.xi }
907*53ee8cc1Swenshuai.xi }
908*53ee8cc1Swenshuai.xi
909*53ee8cc1Swenshuai.xi return ucData;
910*53ee8cc1Swenshuai.xi }
911*53ee8cc1Swenshuai.xi
912*53ee8cc1Swenshuai.xi //**************************************************************************
913*53ee8cc1Swenshuai.xi // [Function Name]:
914*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckVIC3DStructureAll()
915*53ee8cc1Swenshuai.xi // [Description]
916*53ee8cc1Swenshuai.xi //
917*53ee8cc1Swenshuai.xi // [Arguments]:
918*53ee8cc1Swenshuai.xi //
919*53ee8cc1Swenshuai.xi // [Return]:
920*53ee8cc1Swenshuai.xi //
921*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckVIC3DStructureAll(MS_U16 usData)922*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CheckVIC3DStructureAll(MS_U16 usData)
923*53ee8cc1Swenshuai.xi {
924*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
925*53ee8cc1Swenshuai.xi
926*53ee8cc1Swenshuai.xi if((usData &BIT(0)) == BIT(0)) // Support frame packing 3D formats
927*53ee8cc1Swenshuai.xi {
928*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_FS_SUPPORT);
929*53ee8cc1Swenshuai.xi }
930*53ee8cc1Swenshuai.xi
931*53ee8cc1Swenshuai.xi if((usData &BIT(6)) == BIT(6)) // Support top and bottom 3D formats
932*53ee8cc1Swenshuai.xi {
933*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_TB_SUPPORT, MHL_3D_TB_SUPPORT);
934*53ee8cc1Swenshuai.xi }
935*53ee8cc1Swenshuai.xi
936*53ee8cc1Swenshuai.xi if((usData &BIT(8)) == BIT(8)) // Support side by side 3D formats
937*53ee8cc1Swenshuai.xi {
938*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
939*53ee8cc1Swenshuai.xi }
940*53ee8cc1Swenshuai.xi
941*53ee8cc1Swenshuai.xi return uctemp;
942*53ee8cc1Swenshuai.xi }
943*53ee8cc1Swenshuai.xi
944*53ee8cc1Swenshuai.xi //**************************************************************************
945*53ee8cc1Swenshuai.xi // [Function Name]:
946*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckVIC3DStructure()
947*53ee8cc1Swenshuai.xi // [Description]
948*53ee8cc1Swenshuai.xi //
949*53ee8cc1Swenshuai.xi // [Arguments]:
950*53ee8cc1Swenshuai.xi //
951*53ee8cc1Swenshuai.xi // [Return]:
952*53ee8cc1Swenshuai.xi //
953*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckVIC3DStructure(MS_U8 ucData)954*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CheckVIC3DStructure(MS_U8 ucData)
955*53ee8cc1Swenshuai.xi {
956*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
957*53ee8cc1Swenshuai.xi
958*53ee8cc1Swenshuai.xi if(ucData == 0) // Support frame packing
959*53ee8cc1Swenshuai.xi {
960*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_FS_SUPPORT);
961*53ee8cc1Swenshuai.xi }
962*53ee8cc1Swenshuai.xi else if(ucData == 6) // Support top and bottom
963*53ee8cc1Swenshuai.xi {
964*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_TB_SUPPORT, MHL_3D_TB_SUPPORT);
965*53ee8cc1Swenshuai.xi }
966*53ee8cc1Swenshuai.xi else if(ucData == 8) // Support side by side
967*53ee8cc1Swenshuai.xi {
968*53ee8cc1Swenshuai.xi uctemp = MASKSET(uctemp, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
969*53ee8cc1Swenshuai.xi }
970*53ee8cc1Swenshuai.xi
971*53ee8cc1Swenshuai.xi return uctemp;
972*53ee8cc1Swenshuai.xi }
973*53ee8cc1Swenshuai.xi
974*53ee8cc1Swenshuai.xi //**************************************************************************
975*53ee8cc1Swenshuai.xi // [Function Name]:
976*53ee8cc1Swenshuai.xi // _mdrv_mhl_InsertHighEndVICTable()
977*53ee8cc1Swenshuai.xi // [Description]
978*53ee8cc1Swenshuai.xi //
979*53ee8cc1Swenshuai.xi // [Arguments]:
980*53ee8cc1Swenshuai.xi //
981*53ee8cc1Swenshuai.xi // [Return]:
982*53ee8cc1Swenshuai.xi //
983*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InsertHighEndVICTable(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucVICCode)984*53ee8cc1Swenshuai.xi void _mdrv_mhl_InsertHighEndVICTable(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucVICCode)
985*53ee8cc1Swenshuai.xi {
986*53ee8cc1Swenshuai.xi switch(ucVICCode)
987*53ee8cc1Swenshuai.xi {
988*53ee8cc1Swenshuai.xi case MHL_HEV_VIC_INDEX0:
989*53ee8cc1Swenshuai.xi case MHL_HEV_VIC_INDEX1:
990*53ee8cc1Swenshuai.xi case MHL_HEV_VIC_INDEX2:
991*53ee8cc1Swenshuai.xi case MHL_HEV_VIC_INDEX3:
992*53ee8cc1Swenshuai.xi case MHL_HEV_VIC_INDEX4:
993*53ee8cc1Swenshuai.xi case MHL_HEV_VIC_INDEX5:
994*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usHighEndVICTable[pMHLResourcePrivate->ucHighEndVICTotalEntry] = ucVICCode;
995*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucHighEndVICTotalEntry++;
996*53ee8cc1Swenshuai.xi break;
997*53ee8cc1Swenshuai.xi
998*53ee8cc1Swenshuai.xi default:
999*53ee8cc1Swenshuai.xi
1000*53ee8cc1Swenshuai.xi break;
1001*53ee8cc1Swenshuai.xi };
1002*53ee8cc1Swenshuai.xi }
1003*53ee8cc1Swenshuai.xi
1004*53ee8cc1Swenshuai.xi //**************************************************************************
1005*53ee8cc1Swenshuai.xi // [Function Name]:
1006*53ee8cc1Swenshuai.xi // _mdrv_mhl_ParsingVIC3DInformation()
1007*53ee8cc1Swenshuai.xi // [Description]
1008*53ee8cc1Swenshuai.xi //
1009*53ee8cc1Swenshuai.xi // [Arguments]:
1010*53ee8cc1Swenshuai.xi //
1011*53ee8cc1Swenshuai.xi // [Return]:
1012*53ee8cc1Swenshuai.xi //
1013*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingVIC3DInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucExtendLength,MS_U8 * pData)1014*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_ParsingVIC3DInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucExtendLength, MS_U8 *pData)
1015*53ee8cc1Swenshuai.xi {
1016*53ee8cc1Swenshuai.xi MS_BOOL bVICParseFinish = TRUE;
1017*53ee8cc1Swenshuai.xi MS_BOOL b3DPresent = FALSE;
1018*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1019*53ee8cc1Swenshuai.xi MS_U8 ucIndex = 0;
1020*53ee8cc1Swenshuai.xi MS_U8 ucValue = 0;
1021*53ee8cc1Swenshuai.xi MS_U8 ucLength = 0;
1022*53ee8cc1Swenshuai.xi MS_U8 ucVSDBAddr = 0;
1023*53ee8cc1Swenshuai.xi MS_U8 ucVSDBLength = 0;
1024*53ee8cc1Swenshuai.xi MS_U8 uc3DMultiPresent = 0;
1025*53ee8cc1Swenshuai.xi MS_U8 ucVICTimingNum = 0;
1026*53ee8cc1Swenshuai.xi MS_U8 ucVICTiming[MHL_3D_VIC_INFORMATION_LENGTH] = {0};
1027*53ee8cc1Swenshuai.xi MS_U16 usMaskValue = 0;
1028*53ee8cc1Swenshuai.xi
1029*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_3D_VIC_INFORMATION_LENGTH; uctemp++)
1030*53ee8cc1Swenshuai.xi {
1031*53ee8cc1Swenshuai.xi ucVICTiming[uctemp] = 0;
1032*53ee8cc1Swenshuai.xi
1033*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationVIC[uctemp] = 0;
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi
1036*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < ucExtendLength; uctemp++)
1037*53ee8cc1Swenshuai.xi {
1038*53ee8cc1Swenshuai.xi ucValue = (pData[uctemp] &BMASK(7:5)) >>5;
1039*53ee8cc1Swenshuai.xi ucLength = pData[uctemp] &BMASK(4:0);
1040*53ee8cc1Swenshuai.xi
1041*53ee8cc1Swenshuai.xi switch(ucValue)
1042*53ee8cc1Swenshuai.xi {
1043*53ee8cc1Swenshuai.xi case MHL_EDID_AUDIO_DATA_BLOCK_CODE:
1044*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get audio data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1045*53ee8cc1Swenshuai.xi break;
1046*53ee8cc1Swenshuai.xi
1047*53ee8cc1Swenshuai.xi case MHL_EDID_VIDEO_DATA_BLOCK_CODE:
1048*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get video data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1049*53ee8cc1Swenshuai.xi
1050*53ee8cc1Swenshuai.xi if(ucLength > MHL_3D_VIC_INFORMATION_LENGTH)
1051*53ee8cc1Swenshuai.xi {
1052*53ee8cc1Swenshuai.xi ucVICTimingNum = MHL_3D_VIC_INFORMATION_LENGTH;
1053*53ee8cc1Swenshuai.xi }
1054*53ee8cc1Swenshuai.xi else
1055*53ee8cc1Swenshuai.xi {
1056*53ee8cc1Swenshuai.xi ucVICTimingNum = ucLength;
1057*53ee8cc1Swenshuai.xi }
1058*53ee8cc1Swenshuai.xi
1059*53ee8cc1Swenshuai.xi for(ucIndex = 0; ucIndex <ucLength; ucIndex++)
1060*53ee8cc1Swenshuai.xi {
1061*53ee8cc1Swenshuai.xi if(ucIndex <ucVICTimingNum)
1062*53ee8cc1Swenshuai.xi {
1063*53ee8cc1Swenshuai.xi ucVICTiming[ucIndex] = pData[uctemp +ucIndex +1];
1064*53ee8cc1Swenshuai.xi }
1065*53ee8cc1Swenshuai.xi
1066*53ee8cc1Swenshuai.xi _mdrv_mhl_InsertHighEndVICTable(pMHLResourcePrivate, pData[uctemp +ucIndex +1]);
1067*53ee8cc1Swenshuai.xi }
1068*53ee8cc1Swenshuai.xi
1069*53ee8cc1Swenshuai.xi break;
1070*53ee8cc1Swenshuai.xi
1071*53ee8cc1Swenshuai.xi case MHL_EDID_VENDER_SPECIFIC_DATA_BLOCK_CODE:
1072*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get vender specific data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1073*53ee8cc1Swenshuai.xi
1074*53ee8cc1Swenshuai.xi ucVSDBAddr = uctemp;
1075*53ee8cc1Swenshuai.xi
1076*53ee8cc1Swenshuai.xi bVICParseFinish = FALSE;
1077*53ee8cc1Swenshuai.xi
1078*53ee8cc1Swenshuai.xi break;
1079*53ee8cc1Swenshuai.xi
1080*53ee8cc1Swenshuai.xi case MHL_EDID_SPEAKER_ALLOCATION_DATA_BLOCK_CODE:
1081*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get speaker allocation data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1082*53ee8cc1Swenshuai.xi break;
1083*53ee8cc1Swenshuai.xi
1084*53ee8cc1Swenshuai.xi case MHL_EDID_VESA_DTC_DATA_BLOCK_CODE:
1085*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get VESA DTC data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1086*53ee8cc1Swenshuai.xi break;
1087*53ee8cc1Swenshuai.xi
1088*53ee8cc1Swenshuai.xi case MHL_EDID_USE_EXTENDED_TAG_BLOCK_CODE:
1089*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get use extended tag length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1090*53ee8cc1Swenshuai.xi break;
1091*53ee8cc1Swenshuai.xi
1092*53ee8cc1Swenshuai.xi default:
1093*53ee8cc1Swenshuai.xi
1094*53ee8cc1Swenshuai.xi break;
1095*53ee8cc1Swenshuai.xi };
1096*53ee8cc1Swenshuai.xi
1097*53ee8cc1Swenshuai.xi uctemp = uctemp +ucLength;
1098*53ee8cc1Swenshuai.xi }
1099*53ee8cc1Swenshuai.xi
1100*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_START;
1101*53ee8cc1Swenshuai.xi ucVSDBLength = ucVSDBAddr +1;
1102*53ee8cc1Swenshuai.xi
1103*53ee8cc1Swenshuai.xi while(!bVICParseFinish)
1104*53ee8cc1Swenshuai.xi {
1105*53ee8cc1Swenshuai.xi ucValue = pData[ucVSDBAddr];
1106*53ee8cc1Swenshuai.xi
1107*53ee8cc1Swenshuai.xi if(ucVSDBAddr > ucVSDBLength) // Check total length
1108*53ee8cc1Swenshuai.xi {
1109*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_FINISH;
1110*53ee8cc1Swenshuai.xi }
1111*53ee8cc1Swenshuai.xi
1112*53ee8cc1Swenshuai.xi switch(ucIndex)
1113*53ee8cc1Swenshuai.xi {
1114*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_START:
1115*53ee8cc1Swenshuai.xi ucVSDBLength = pData[ucVSDBAddr] &BMASK(4:0);
1116*53ee8cc1Swenshuai.xi
1117*53ee8cc1Swenshuai.xi if(ucVSDBLength < 8) // HDMI_Video_Present absent, no 3D information
1118*53ee8cc1Swenshuai.xi {
1119*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_FINISH;
1120*53ee8cc1Swenshuai.xi }
1121*53ee8cc1Swenshuai.xi else
1122*53ee8cc1Swenshuai.xi {
1123*53ee8cc1Swenshuai.xi ucVSDBAddr = ucVSDBAddr +8;
1124*53ee8cc1Swenshuai.xi
1125*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_CHECK_HDMI_VIDEO_PRESENT;
1126*53ee8cc1Swenshuai.xi }
1127*53ee8cc1Swenshuai.xi
1128*53ee8cc1Swenshuai.xi ucVSDBLength = ucVSDBAddr +ucVSDBLength;
1129*53ee8cc1Swenshuai.xi
1130*53ee8cc1Swenshuai.xi break;
1131*53ee8cc1Swenshuai.xi
1132*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_CHECK_HDMI_VIDEO_PRESENT:
1133*53ee8cc1Swenshuai.xi if((ucValue &BIT(5)) != BIT(5)) // HDMI_Video_Present absent, no 3D information
1134*53ee8cc1Swenshuai.xi {
1135*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_FINISH;
1136*53ee8cc1Swenshuai.xi }
1137*53ee8cc1Swenshuai.xi else
1138*53ee8cc1Swenshuai.xi {
1139*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT;
1140*53ee8cc1Swenshuai.xi
1141*53ee8cc1Swenshuai.xi if((ucValue &BIT(7)) != BIT(7)) // Latency_Fields_Present absent, no video and audio latency and no interlaced video and audio latency
1142*53ee8cc1Swenshuai.xi {
1143*53ee8cc1Swenshuai.xi ucVSDBAddr++;
1144*53ee8cc1Swenshuai.xi }
1145*53ee8cc1Swenshuai.xi else
1146*53ee8cc1Swenshuai.xi {
1147*53ee8cc1Swenshuai.xi if((ucValue &BIT(6)) != BIT(6)) // I_Latency_Fields_Present absent, no video and audio latency
1148*53ee8cc1Swenshuai.xi {
1149*53ee8cc1Swenshuai.xi ucVSDBAddr = ucVSDBAddr +3;
1150*53ee8cc1Swenshuai.xi }
1151*53ee8cc1Swenshuai.xi else
1152*53ee8cc1Swenshuai.xi {
1153*53ee8cc1Swenshuai.xi ucVSDBAddr = ucVSDBAddr +5;
1154*53ee8cc1Swenshuai.xi }
1155*53ee8cc1Swenshuai.xi }
1156*53ee8cc1Swenshuai.xi }
1157*53ee8cc1Swenshuai.xi
1158*53ee8cc1Swenshuai.xi break;
1159*53ee8cc1Swenshuai.xi
1160*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_CHECK_3D_PRESENT:
1161*53ee8cc1Swenshuai.xi if((ucValue &BIT(7)) != BIT(7)) // 3D_Present absent, no 3D information
1162*53ee8cc1Swenshuai.xi {
1163*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_FINISH;
1164*53ee8cc1Swenshuai.xi }
1165*53ee8cc1Swenshuai.xi else
1166*53ee8cc1Swenshuai.xi {
1167*53ee8cc1Swenshuai.xi b3DPresent = TRUE;
1168*53ee8cc1Swenshuai.xi uc3DMultiPresent = (ucValue &BMASK(6:5)) >> 5;
1169*53ee8cc1Swenshuai.xi
1170*53ee8cc1Swenshuai.xi if(uc3DMultiPresent == 0)
1171*53ee8cc1Swenshuai.xi {
1172*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_3D_MULTI_PRESENT_00;
1173*53ee8cc1Swenshuai.xi }
1174*53ee8cc1Swenshuai.xi else if(uc3DMultiPresent == 3) // Reserved for future use
1175*53ee8cc1Swenshuai.xi {
1176*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_FINISH;
1177*53ee8cc1Swenshuai.xi }
1178*53ee8cc1Swenshuai.xi else
1179*53ee8cc1Swenshuai.xi {
1180*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_CHECK_HDMI_VIC;
1181*53ee8cc1Swenshuai.xi
1182*53ee8cc1Swenshuai.xi ucVSDBAddr++;
1183*53ee8cc1Swenshuai.xi }
1184*53ee8cc1Swenshuai.xi }
1185*53ee8cc1Swenshuai.xi
1186*53ee8cc1Swenshuai.xi break;
1187*53ee8cc1Swenshuai.xi
1188*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_CHECK_HDMI_VIC:
1189*53ee8cc1Swenshuai.xi ucLength = (ucValue &BMASK(7:5)) >> 5;
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi ucVSDBAddr = ucVSDBAddr +ucLength +1;
1192*53ee8cc1Swenshuai.xi
1193*53ee8cc1Swenshuai.xi if(uc3DMultiPresent == 1)
1194*53ee8cc1Swenshuai.xi {
1195*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_3D_MULTI_PRESENT_01;
1196*53ee8cc1Swenshuai.xi }
1197*53ee8cc1Swenshuai.xi else // uc3DMultiPresent = 2
1198*53ee8cc1Swenshuai.xi {
1199*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_3D_MULTI_PRESENT_10;
1200*53ee8cc1Swenshuai.xi }
1201*53ee8cc1Swenshuai.xi
1202*53ee8cc1Swenshuai.xi ucLength = ucVSDBAddr +(ucValue &BMASK(4:0)) -1; // HDMI_3D_LEN
1203*53ee8cc1Swenshuai.xi
1204*53ee8cc1Swenshuai.xi break;
1205*53ee8cc1Swenshuai.xi
1206*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_3D_MULTI_PRESENT_00:
1207*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING;
1208*53ee8cc1Swenshuai.xi
1209*53ee8cc1Swenshuai.xi break;
1210*53ee8cc1Swenshuai.xi
1211*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_3D_MULTI_PRESENT_01:
1212*53ee8cc1Swenshuai.xi ucValue = _mdrv_mhl_CheckVIC3DStructureAll((pData[ucVSDBAddr +1] |(pData[ucVSDBAddr] << 8)));
1213*53ee8cc1Swenshuai.xi
1214*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <ucVICTimingNum; uctemp++)
1215*53ee8cc1Swenshuai.xi {
1216*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1217*53ee8cc1Swenshuai.xi }
1218*53ee8cc1Swenshuai.xi
1219*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING;
1220*53ee8cc1Swenshuai.xi
1221*53ee8cc1Swenshuai.xi break;
1222*53ee8cc1Swenshuai.xi
1223*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_3D_MULTI_PRESENT_10:
1224*53ee8cc1Swenshuai.xi ucValue = _mdrv_mhl_CheckVIC3DStructureAll((pData[ucVSDBAddr +1] |(pData[ucVSDBAddr] << 8)));
1225*53ee8cc1Swenshuai.xi
1226*53ee8cc1Swenshuai.xi usMaskValue = pData[ucVSDBAddr +3] |(pData[ucVSDBAddr +2] << 8);
1227*53ee8cc1Swenshuai.xi
1228*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <ucVICTimingNum; uctemp++)
1229*53ee8cc1Swenshuai.xi {
1230*53ee8cc1Swenshuai.xi if((usMaskValue &BIT(uctemp)) == BIT(uctemp))
1231*53ee8cc1Swenshuai.xi {
1232*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1233*53ee8cc1Swenshuai.xi }
1234*53ee8cc1Swenshuai.xi }
1235*53ee8cc1Swenshuai.xi
1236*53ee8cc1Swenshuai.xi ucVSDBAddr = ucVSDBAddr +4;
1237*53ee8cc1Swenshuai.xi
1238*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_CHECK_3D_STRUCTURE;
1239*53ee8cc1Swenshuai.xi
1240*53ee8cc1Swenshuai.xi break;
1241*53ee8cc1Swenshuai.xi
1242*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_CHECK_3D_STRUCTURE:
1243*53ee8cc1Swenshuai.xi if(ucVSDBAddr > ucLength) // No 3D sturcture
1244*53ee8cc1Swenshuai.xi {
1245*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING;
1246*53ee8cc1Swenshuai.xi }
1247*53ee8cc1Swenshuai.xi else
1248*53ee8cc1Swenshuai.xi {
1249*53ee8cc1Swenshuai.xi uctemp = (ucValue &BMASK(7:4)) >> 4;
1250*53ee8cc1Swenshuai.xi ucValue = ucValue &BMASK(3:0);
1251*53ee8cc1Swenshuai.xi
1252*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationVIC[uctemp] = _mdrv_mhl_CheckVIC3DStructure(ucValue);
1253*53ee8cc1Swenshuai.xi
1254*53ee8cc1Swenshuai.xi if(ucValue < 8) // Only 2D_VIC_Order and 3D_Structure, 1 byte
1255*53ee8cc1Swenshuai.xi {
1256*53ee8cc1Swenshuai.xi ucVSDBAddr++;
1257*53ee8cc1Swenshuai.xi }
1258*53ee8cc1Swenshuai.xi else // Add 3D_Detail, 2 byte
1259*53ee8cc1Swenshuai.xi {
1260*53ee8cc1Swenshuai.xi ucVSDBAddr = ucVSDBAddr +2;
1261*53ee8cc1Swenshuai.xi }
1262*53ee8cc1Swenshuai.xi }
1263*53ee8cc1Swenshuai.xi
1264*53ee8cc1Swenshuai.xi break;
1265*53ee8cc1Swenshuai.xi
1266*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING:
1267*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <ucVICTimingNum; uctemp++)
1268*53ee8cc1Swenshuai.xi {
1269*53ee8cc1Swenshuai.xi ucValue = pMHLResourcePrivate->uc3DInformationVIC[uctemp];
1270*53ee8cc1Swenshuai.xi
1271*53ee8cc1Swenshuai.xi switch(ucVICTiming[uctemp])
1272*53ee8cc1Swenshuai.xi {
1273*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1920x1080p24Hz: // Support frame packing with top and bottom
1274*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1280x720p60Hz: // Support frame packing with top and bottom
1275*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1280x720p50Hz: // Support frame packing with top and bottom
1276*53ee8cc1Swenshuai.xi ucValue = MASKSET(ucValue, (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT), (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT));
1277*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1278*53ee8cc1Swenshuai.xi
1279*53ee8cc1Swenshuai.xi break;
1280*53ee8cc1Swenshuai.xi
1281*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1920x1080i60Hz: // Support side by side
1282*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1920x1080i50Hz: // Support side by side
1283*53ee8cc1Swenshuai.xi ucValue = MASKSET(ucValue, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
1284*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1285*53ee8cc1Swenshuai.xi
1286*53ee8cc1Swenshuai.xi break;
1287*53ee8cc1Swenshuai.xi
1288*53ee8cc1Swenshuai.xi default:
1289*53ee8cc1Swenshuai.xi
1290*53ee8cc1Swenshuai.xi break;
1291*53ee8cc1Swenshuai.xi };
1292*53ee8cc1Swenshuai.xi }
1293*53ee8cc1Swenshuai.xi
1294*53ee8cc1Swenshuai.xi ucIndex = MHL_VIC_PARSING_FINISH;
1295*53ee8cc1Swenshuai.xi
1296*53ee8cc1Swenshuai.xi break;
1297*53ee8cc1Swenshuai.xi
1298*53ee8cc1Swenshuai.xi case MHL_VIC_PARSING_FINISH:
1299*53ee8cc1Swenshuai.xi bVICParseFinish = TRUE;
1300*53ee8cc1Swenshuai.xi
1301*53ee8cc1Swenshuai.xi break;
1302*53ee8cc1Swenshuai.xi
1303*53ee8cc1Swenshuai.xi default:
1304*53ee8cc1Swenshuai.xi
1305*53ee8cc1Swenshuai.xi break;
1306*53ee8cc1Swenshuai.xi };
1307*53ee8cc1Swenshuai.xi }
1308*53ee8cc1Swenshuai.xi
1309*53ee8cc1Swenshuai.xi for(uctemp = 0, ucValue = 0; uctemp < MHL_3D_VIC_INFORMATION_LENGTH; uctemp++)
1310*53ee8cc1Swenshuai.xi {
1311*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->uc3DInformationVIC[uctemp] > 0)
1312*53ee8cc1Swenshuai.xi {
1313*53ee8cc1Swenshuai.xi ucValue = uctemp +1;
1314*53ee8cc1Swenshuai.xi }
1315*53ee8cc1Swenshuai.xi }
1316*53ee8cc1Swenshuai.xi
1317*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DTotalEntryVIC = ucValue;
1318*53ee8cc1Swenshuai.xi
1319*53ee8cc1Swenshuai.xi return b3DPresent;
1320*53ee8cc1Swenshuai.xi }
1321*53ee8cc1Swenshuai.xi
1322*53ee8cc1Swenshuai.xi //**************************************************************************
1323*53ee8cc1Swenshuai.xi // [Function Name]:
1324*53ee8cc1Swenshuai.xi // _mdrv_mhl_InsertVCInformation()
1325*53ee8cc1Swenshuai.xi // [Description]:
1326*53ee8cc1Swenshuai.xi //
1327*53ee8cc1Swenshuai.xi // [Arguments]:
1328*53ee8cc1Swenshuai.xi //
1329*53ee8cc1Swenshuai.xi // [Return]:
1330*53ee8cc1Swenshuai.xi //
1331*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InsertVCInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bReceiveVC,MS_U8 ucVCNumber,MS_U8 ucVCFeatureID,MS_U8 ucVCSlotSize)1332*53ee8cc1Swenshuai.xi void _mdrv_mhl_InsertVCInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bReceiveVC, MS_U8 ucVCNumber, MS_U8 ucVCFeatureID, MS_U8 ucVCSlotSize)
1333*53ee8cc1Swenshuai.xi {
1334*53ee8cc1Swenshuai.xi MS_BOOL bFindVC = FALSE;
1335*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1336*53ee8cc1Swenshuai.xi MS_U8 ucTargetVC = MHL_VIRTUAL_CHANNEL_LENGTH;
1337*53ee8cc1Swenshuai.xi MS_U8 ucTotalTimeSlot = 0;
1338*53ee8cc1Swenshuai.xi MS_U8 ucResponseCode = MHL_VC_RESPONSE_ACCEPT;
1339*53ee8cc1Swenshuai.xi
1340*53ee8cc1Swenshuai.xi if(ucVCFeatureID >= MHL_VC_FEATURE_ID_END) // Invalid feature ID
1341*53ee8cc1Swenshuai.xi {
1342*53ee8cc1Swenshuai.xi ucResponseCode = MHL_VC_RESPONSE_REJECT_FEATURE_ID;
1343*53ee8cc1Swenshuai.xi }
1344*53ee8cc1Swenshuai.xi else if((ucVCFeatureID == MHL_VC_FEATURE_ID_EMSC) && (ucVCSlotSize != MHL_EMSC_TIME_SLOT_DEFAULT))
1345*53ee8cc1Swenshuai.xi {
1346*53ee8cc1Swenshuai.xi ucResponseCode = MHL_VC_RESPONSE_REJECT_CHANNEL_SIZE;
1347*53ee8cc1Swenshuai.xi }
1348*53ee8cc1Swenshuai.xi
1349*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1350*53ee8cc1Swenshuai.xi {
1351*53ee8cc1Swenshuai.xi if(!bFindVC)
1352*53ee8cc1Swenshuai.xi {
1353*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber == ucVCNumber) // VC present, information change
1354*53ee8cc1Swenshuai.xi {
1355*53ee8cc1Swenshuai.xi ucTargetVC = uctemp;
1356*53ee8cc1Swenshuai.xi
1357*53ee8cc1Swenshuai.xi bFindVC = TRUE;
1358*53ee8cc1Swenshuai.xi }
1359*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber == 0) // VC absent, insert new information
1360*53ee8cc1Swenshuai.xi {
1361*53ee8cc1Swenshuai.xi ucTargetVC = uctemp;
1362*53ee8cc1Swenshuai.xi
1363*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCNumber = ucVCNumber;
1364*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCFeatureID = ucVCFeatureID;
1365*53ee8cc1Swenshuai.xi
1366*53ee8cc1Swenshuai.xi break;
1367*53ee8cc1Swenshuai.xi }
1368*53ee8cc1Swenshuai.xi }
1369*53ee8cc1Swenshuai.xi
1370*53ee8cc1Swenshuai.xi ucTotalTimeSlot = ucTotalTimeSlot +pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1371*53ee8cc1Swenshuai.xi }
1372*53ee8cc1Swenshuai.xi
1373*53ee8cc1Swenshuai.xi if(ucTargetVC < MHL_VIRTUAL_CHANNEL_LENGTH) // Can insert new VC information
1374*53ee8cc1Swenshuai.xi {
1375*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].bVCConfirm = TRUE;
1376*53ee8cc1Swenshuai.xi
1377*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCFeatureID != ucVCFeatureID) // Same VC number, but different feature ID
1378*53ee8cc1Swenshuai.xi {
1379*53ee8cc1Swenshuai.xi ucResponseCode = MHL_VC_RESPONSE_REJECT_NUMBER;
1380*53ee8cc1Swenshuai.xi }
1381*53ee8cc1Swenshuai.xi else if(ucTotalTimeSlot +ucVCSlotSize > MHL_ECBUS_S_TIME_SLOT_TOTAL -1) // Time slot not enough
1382*53ee8cc1Swenshuai.xi {
1383*53ee8cc1Swenshuai.xi ucResponseCode = MHL_VC_RESPONSE_REJECT_CHANNEL_SIZE;
1384*53ee8cc1Swenshuai.xi }
1385*53ee8cc1Swenshuai.xi else
1386*53ee8cc1Swenshuai.xi {
1387*53ee8cc1Swenshuai.xi if(bFindVC)
1388*53ee8cc1Swenshuai.xi {
1389*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode = pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize;
1390*53ee8cc1Swenshuai.xi }
1391*53ee8cc1Swenshuai.xi
1392*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = ucVCSlotSize;
1393*53ee8cc1Swenshuai.xi }
1394*53ee8cc1Swenshuai.xi
1395*53ee8cc1Swenshuai.xi if(bReceiveVC)
1396*53ee8cc1Swenshuai.xi {
1397*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode = ucResponseCode;
1398*53ee8cc1Swenshuai.xi }
1399*53ee8cc1Swenshuai.xi }
1400*53ee8cc1Swenshuai.xi else // Virtual channel length is too small
1401*53ee8cc1Swenshuai.xi {
1402*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL virtual channel length too small port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1403*53ee8cc1Swenshuai.xi }
1404*53ee8cc1Swenshuai.xi }
1405*53ee8cc1Swenshuai.xi
1406*53ee8cc1Swenshuai.xi //**************************************************************************
1407*53ee8cc1Swenshuai.xi // [Function Name]:
1408*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckVCInformation()
1409*53ee8cc1Swenshuai.xi // [Description]:
1410*53ee8cc1Swenshuai.xi //
1411*53ee8cc1Swenshuai.xi // [Arguments]:
1412*53ee8cc1Swenshuai.xi //
1413*53ee8cc1Swenshuai.xi // [Return]:
1414*53ee8cc1Swenshuai.xi //
1415*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckVCInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucVCNumber,MS_U8 ucVCFeatureID,MS_U8 ucResponseCode)1416*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckVCInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucVCNumber, MS_U8 ucVCFeatureID, MS_U8 ucResponseCode)
1417*53ee8cc1Swenshuai.xi {
1418*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1419*53ee8cc1Swenshuai.xi MS_U8 ucTargetVC = MHL_VIRTUAL_CHANNEL_LENGTH;
1420*53ee8cc1Swenshuai.xi
1421*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1422*53ee8cc1Swenshuai.xi {
1423*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber == ucVCNumber) // VC present, information change
1424*53ee8cc1Swenshuai.xi {
1425*53ee8cc1Swenshuai.xi ucTargetVC = uctemp;
1426*53ee8cc1Swenshuai.xi
1427*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID != ucVCFeatureID)
1428*53ee8cc1Swenshuai.xi {
1429*53ee8cc1Swenshuai.xi
1430*53ee8cc1Swenshuai.xi }
1431*53ee8cc1Swenshuai.xi
1432*53ee8cc1Swenshuai.xi break;
1433*53ee8cc1Swenshuai.xi }
1434*53ee8cc1Swenshuai.xi }
1435*53ee8cc1Swenshuai.xi
1436*53ee8cc1Swenshuai.xi if(ucTargetVC < MHL_VIRTUAL_CHANNEL_LENGTH) // Can insert new VC information
1437*53ee8cc1Swenshuai.xi {
1438*53ee8cc1Swenshuai.xi if(ucResponseCode == MHL_VC_RESPONSE_REJECT_CHANNEL_SIZE)
1439*53ee8cc1Swenshuai.xi {
1440*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode;
1441*53ee8cc1Swenshuai.xi }
1442*53ee8cc1Swenshuai.xi else if(ucResponseCode == MHL_VC_RESPONSE_REJECT_NUMBER)
1443*53ee8cc1Swenshuai.xi {
1444*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = 0;
1445*53ee8cc1Swenshuai.xi }
1446*53ee8cc1Swenshuai.xi else if(ucResponseCode == MHL_VC_RESPONSE_REJECT_FEATURE_ID)
1447*53ee8cc1Swenshuai.xi {
1448*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = 0;
1449*53ee8cc1Swenshuai.xi }
1450*53ee8cc1Swenshuai.xi
1451*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode = MHL_VC_RESPONSE_ACCEPT;
1452*53ee8cc1Swenshuai.xi }
1453*53ee8cc1Swenshuai.xi }
1454*53ee8cc1Swenshuai.xi
1455*53ee8cc1Swenshuai.xi //**************************************************************************
1456*53ee8cc1Swenshuai.xi // [Function Name]:
1457*53ee8cc1Swenshuai.xi // _mdrv_mhl_ParsingEDIDfor3D()
1458*53ee8cc1Swenshuai.xi // [Description]
1459*53ee8cc1Swenshuai.xi //
1460*53ee8cc1Swenshuai.xi // [Arguments]:
1461*53ee8cc1Swenshuai.xi //
1462*53ee8cc1Swenshuai.xi // [Return]:
1463*53ee8cc1Swenshuai.xi //
1464*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingEDIDfor3D(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pEdid)1465*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingEDIDfor3D(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pEdid)
1466*53ee8cc1Swenshuai.xi {
1467*53ee8cc1Swenshuai.xi MS_BOOL bDTDParseFinish = FALSE;
1468*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1469*53ee8cc1Swenshuai.xi MS_U8 ucValue = 0;
1470*53ee8cc1Swenshuai.xi MS_U8 ucIndex = 0;
1471*53ee8cc1Swenshuai.xi MS_U8 ucDTDTimingNum = 0;
1472*53ee8cc1Swenshuai.xi MS_U8 ucThirdDTDStart = 0;
1473*53ee8cc1Swenshuai.xi MS_U8 ucDTDTiming[MHL_3D_DTD_INFORMATION_LENGTH] = {0};
1474*53ee8cc1Swenshuai.xi
1475*53ee8cc1Swenshuai.xi if(pEdid != NULL)
1476*53ee8cc1Swenshuai.xi {
1477*53ee8cc1Swenshuai.xi // Parsing 3D DTD information Start
1478*53ee8cc1Swenshuai.xi if(_mdrv_mhl_DTDPresentinEDID(&pEdid[MHL_EDID_FIRST_DTD_START])) // Check first DTD
1479*53ee8cc1Swenshuai.xi {
1480*53ee8cc1Swenshuai.xi ucValue = _mdrv_mhl_InsertDTD3DInformation(pMHLResourcePrivate, MHL_3D_FIRST_DTD, pEdid[MHL_EDID_FIRST_DTD_START +MHL_EDID_DTD_LENGTH -1]);
1481*53ee8cc1Swenshuai.xi
1482*53ee8cc1Swenshuai.xi ucDTDTiming[MHL_3D_FIRST_DTD] = _mdrv_mhl_GetDTD3DTimingInformation(&pEdid[MHL_EDID_FIRST_DTD_START]);
1483*53ee8cc1Swenshuai.xi }
1484*53ee8cc1Swenshuai.xi else // First DTD absent
1485*53ee8cc1Swenshuai.xi {
1486*53ee8cc1Swenshuai.xi bDTDParseFinish = TRUE;
1487*53ee8cc1Swenshuai.xi
1488*53ee8cc1Swenshuai.xi ucDTDTimingNum = 0;
1489*53ee8cc1Swenshuai.xi
1490*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL first DTD absent in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1491*53ee8cc1Swenshuai.xi }
1492*53ee8cc1Swenshuai.xi
1493*53ee8cc1Swenshuai.xi if(!bDTDParseFinish)
1494*53ee8cc1Swenshuai.xi {
1495*53ee8cc1Swenshuai.xi if(_mdrv_mhl_DTDPresentinEDID(&pEdid[MHL_EDID_SECOND_DTD_START])) // Check second DTD
1496*53ee8cc1Swenshuai.xi {
1497*53ee8cc1Swenshuai.xi ucValue = _mdrv_mhl_InsertDTD3DInformation(pMHLResourcePrivate, MHL_3D_SECOND_DTD, pEdid[MHL_EDID_SECOND_DTD_START +MHL_EDID_DTD_LENGTH -1]);
1498*53ee8cc1Swenshuai.xi
1499*53ee8cc1Swenshuai.xi ucDTDTiming[MHL_3D_SECOND_DTD] = _mdrv_mhl_GetDTD3DTimingInformation(&pEdid[MHL_EDID_SECOND_DTD_START]);
1500*53ee8cc1Swenshuai.xi }
1501*53ee8cc1Swenshuai.xi else // Second DTD absent
1502*53ee8cc1Swenshuai.xi {
1503*53ee8cc1Swenshuai.xi bDTDParseFinish = TRUE;
1504*53ee8cc1Swenshuai.xi
1505*53ee8cc1Swenshuai.xi ucDTDTimingNum = 1;
1506*53ee8cc1Swenshuai.xi
1507*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL second DTD absent in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1508*53ee8cc1Swenshuai.xi }
1509*53ee8cc1Swenshuai.xi }
1510*53ee8cc1Swenshuai.xi
1511*53ee8cc1Swenshuai.xi if(pEdid[MHL_EDID_EXTENSION_FLAG] > 0) // Have extend EDID
1512*53ee8cc1Swenshuai.xi {
1513*53ee8cc1Swenshuai.xi ucThirdDTDStart = MHL_EDID_BLOCK_LENGTH +pEdid[MHL_EDID_RESERVED_DATA_BLOCK];
1514*53ee8cc1Swenshuai.xi
1515*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL third DTD start at %x in port %c\r\n", ucThirdDTDStart, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1516*53ee8cc1Swenshuai.xi
1517*53ee8cc1Swenshuai.xi if(!bDTDParseFinish)
1518*53ee8cc1Swenshuai.xi {
1519*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(MHL_3D_DTD_INFORMATION_LENGTH -2); uctemp++)
1520*53ee8cc1Swenshuai.xi {
1521*53ee8cc1Swenshuai.xi if(_mdrv_mhl_DTDPresentinEDID(&pEdid[ucThirdDTDStart +MHL_EDID_DTD_LENGTH *uctemp])) // Check others DTD
1522*53ee8cc1Swenshuai.xi {
1523*53ee8cc1Swenshuai.xi ucValue = _mdrv_mhl_InsertDTD3DInformation(pMHLResourcePrivate, MHL_3D_THIRD_DTD +uctemp, pEdid[ucThirdDTDStart +MHL_EDID_DTD_LENGTH *(uctemp +1) -1]);
1524*53ee8cc1Swenshuai.xi
1525*53ee8cc1Swenshuai.xi ucDTDTiming[MHL_3D_THIRD_DTD +uctemp] = _mdrv_mhl_GetDTD3DTimingInformation(&pEdid[ucThirdDTDStart +MHL_EDID_DTD_LENGTH *uctemp]);
1526*53ee8cc1Swenshuai.xi }
1527*53ee8cc1Swenshuai.xi else // Last DTD find
1528*53ee8cc1Swenshuai.xi {
1529*53ee8cc1Swenshuai.xi bDTDParseFinish = TRUE;
1530*53ee8cc1Swenshuai.xi
1531*53ee8cc1Swenshuai.xi ucDTDTimingNum = uctemp +2;
1532*53ee8cc1Swenshuai.xi
1533*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL total have %d DTD in port %c\r\n", ucDTDTimingNum, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1534*53ee8cc1Swenshuai.xi
1535*53ee8cc1Swenshuai.xi break;
1536*53ee8cc1Swenshuai.xi }
1537*53ee8cc1Swenshuai.xi }
1538*53ee8cc1Swenshuai.xi }
1539*53ee8cc1Swenshuai.xi
1540*53ee8cc1Swenshuai.xi // Parsing 3D VIC information Start
1541*53ee8cc1Swenshuai.xi if(ucThirdDTDStart > (MHL_EDID_RESERVED_DATA_BLOCK +2))
1542*53ee8cc1Swenshuai.xi {
1543*53ee8cc1Swenshuai.xi if(_mdrv_mhl_ParsingVIC3DInformation(pMHLResourcePrivate, pEdid[MHL_EDID_RESERVED_DATA_BLOCK] -4, &pEdid[MHL_EDID_RESERVED_DATA_BLOCK +2]))
1544*53ee8cc1Swenshuai.xi {
1545*53ee8cc1Swenshuai.xi // 3D Present
1546*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <ucDTDTimingNum; uctemp++)
1547*53ee8cc1Swenshuai.xi {
1548*53ee8cc1Swenshuai.xi ucIndex = pMHLResourcePrivate->uc3DInformationDTD[uctemp];
1549*53ee8cc1Swenshuai.xi
1550*53ee8cc1Swenshuai.xi switch(ucDTDTiming[uctemp])
1551*53ee8cc1Swenshuai.xi {
1552*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1920x1080p24Hz: // Support frame packing with top and bottom
1553*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1280x720p60Hz: // Support frame packing with top and bottom
1554*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1280x720p50Hz: // Support frame packing with top and bottom
1555*53ee8cc1Swenshuai.xi ucIndex = MASKSET(ucIndex, (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT), (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT));
1556*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationDTD[uctemp] = ucIndex;
1557*53ee8cc1Swenshuai.xi
1558*53ee8cc1Swenshuai.xi break;
1559*53ee8cc1Swenshuai.xi
1560*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1920x1080i60Hz: // Support side by side
1561*53ee8cc1Swenshuai.xi case MHL_3D_PRESENT_VIC_1920x1080i50Hz: // Support side by side
1562*53ee8cc1Swenshuai.xi ucIndex = MASKSET(ucIndex, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
1563*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DInformationDTD[uctemp] = ucIndex;
1564*53ee8cc1Swenshuai.xi
1565*53ee8cc1Swenshuai.xi break;
1566*53ee8cc1Swenshuai.xi
1567*53ee8cc1Swenshuai.xi default:
1568*53ee8cc1Swenshuai.xi
1569*53ee8cc1Swenshuai.xi break;
1570*53ee8cc1Swenshuai.xi };
1571*53ee8cc1Swenshuai.xi
1572*53ee8cc1Swenshuai.xi if(ucIndex > 0)
1573*53ee8cc1Swenshuai.xi {
1574*53ee8cc1Swenshuai.xi ucValue = uctemp +1;
1575*53ee8cc1Swenshuai.xi }
1576*53ee8cc1Swenshuai.xi }
1577*53ee8cc1Swenshuai.xi }
1578*53ee8cc1Swenshuai.xi }
1579*53ee8cc1Swenshuai.xi }
1580*53ee8cc1Swenshuai.xi
1581*53ee8cc1Swenshuai.xi // Parsing 3D DTD information End
1582*53ee8cc1Swenshuai.xi pMHLResourcePrivate->uc3DTotalEntryDTD = ucValue;
1583*53ee8cc1Swenshuai.xi }
1584*53ee8cc1Swenshuai.xi }
1585*53ee8cc1Swenshuai.xi
1586*53ee8cc1Swenshuai.xi //**************************************************************************
1587*53ee8cc1Swenshuai.xi // [Function Name]:
1588*53ee8cc1Swenshuai.xi // _mdrv_mhl_SlotAllocationAlgorithm()
1589*53ee8cc1Swenshuai.xi // [Description]
1590*53ee8cc1Swenshuai.xi //
1591*53ee8cc1Swenshuai.xi // [Arguments]:
1592*53ee8cc1Swenshuai.xi //
1593*53ee8cc1Swenshuai.xi // [Return]:
1594*53ee8cc1Swenshuai.xi //
1595*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SlotAllocationAlgorithm(MS_U8 ucChannelIndex,MS_U8 ucNValue,MS_U8 ucMValue,MS_U8 * pSlotAllocation)1596*53ee8cc1Swenshuai.xi void _mdrv_mhl_SlotAllocationAlgorithm(MS_U8 ucChannelIndex, MS_U8 ucNValue, MS_U8 ucMValue, MS_U8 *pSlotAllocation)
1597*53ee8cc1Swenshuai.xi {
1598*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1599*53ee8cc1Swenshuai.xi MS_U8 ucCounter = 0;
1600*53ee8cc1Swenshuai.xi
1601*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_ECBUS_S_TIME_SLOT_TOTAL; uctemp++)
1602*53ee8cc1Swenshuai.xi {
1603*53ee8cc1Swenshuai.xi if(pSlotAllocation[uctemp] == MHL_CBUS_SLOT_NOT_ALLOCATE)
1604*53ee8cc1Swenshuai.xi {
1605*53ee8cc1Swenshuai.xi if(ucCounter >= ucNValue)
1606*53ee8cc1Swenshuai.xi {
1607*53ee8cc1Swenshuai.xi pSlotAllocation[uctemp] = ucChannelIndex;
1608*53ee8cc1Swenshuai.xi }
1609*53ee8cc1Swenshuai.xi
1610*53ee8cc1Swenshuai.xi ucCounter = (ucCounter +ucNValue) %(ucNValue +ucMValue);
1611*53ee8cc1Swenshuai.xi }
1612*53ee8cc1Swenshuai.xi }
1613*53ee8cc1Swenshuai.xi }
1614*53ee8cc1Swenshuai.xi
1615*53ee8cc1Swenshuai.xi //**************************************************************************
1616*53ee8cc1Swenshuai.xi // [Function Name]:
1617*53ee8cc1Swenshuai.xi // _mdrv_mhl_eCbusTimeSlotAllocation()
1618*53ee8cc1Swenshuai.xi // [Description]
1619*53ee8cc1Swenshuai.xi //
1620*53ee8cc1Swenshuai.xi // [Arguments]:
1621*53ee8cc1Swenshuai.xi //
1622*53ee8cc1Swenshuai.xi // [Return]:
1623*53ee8cc1Swenshuai.xi //
1624*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_eCbusTimeSlotAllocation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)1625*53ee8cc1Swenshuai.xi void _mdrv_mhl_eCbusTimeSlotAllocation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
1626*53ee8cc1Swenshuai.xi {
1627*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1628*53ee8cc1Swenshuai.xi MS_U8 ucTimeSlotNumber = MHL_ECBUS_S_TIME_SLOT_TOTAL -1;
1629*53ee8cc1Swenshuai.xi MS_U8 ucSlotAllocation[MHL_ECBUS_S_TIME_SLOT_TOTAL];
1630*53ee8cc1Swenshuai.xi MS_U8 ucVirtualChannel[MHL_VIRTUAL_CHANNEL_LENGTH +2];
1631*53ee8cc1Swenshuai.xi
1632*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(MHL_VIRTUAL_CHANNEL_LENGTH +2); uctemp++)
1633*53ee8cc1Swenshuai.xi {
1634*53ee8cc1Swenshuai.xi ucVirtualChannel[uctemp] = 0;
1635*53ee8cc1Swenshuai.xi }
1636*53ee8cc1Swenshuai.xi
1637*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_ECBUS_S_TIME_SLOT_TOTAL; uctemp++)
1638*53ee8cc1Swenshuai.xi {
1639*53ee8cc1Swenshuai.xi if(uctemp == 0)
1640*53ee8cc1Swenshuai.xi {
1641*53ee8cc1Swenshuai.xi ucSlotAllocation[uctemp] = 0;
1642*53ee8cc1Swenshuai.xi }
1643*53ee8cc1Swenshuai.xi else
1644*53ee8cc1Swenshuai.xi {
1645*53ee8cc1Swenshuai.xi ucSlotAllocation[uctemp] = MHL_CBUS_SLOT_NOT_ALLOCATE;
1646*53ee8cc1Swenshuai.xi }
1647*53ee8cc1Swenshuai.xi }
1648*53ee8cc1Swenshuai.xi
1649*53ee8cc1Swenshuai.xi ucVirtualChannel[0] = MHL_CBUS1_TIME_SLOT_DEFAULT;
1650*53ee8cc1Swenshuai.xi
1651*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1652*53ee8cc1Swenshuai.xi {
1653*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize == 0)
1654*53ee8cc1Swenshuai.xi {
1655*53ee8cc1Swenshuai.xi break;
1656*53ee8cc1Swenshuai.xi }
1657*53ee8cc1Swenshuai.xi else
1658*53ee8cc1Swenshuai.xi {
1659*53ee8cc1Swenshuai.xi ucVirtualChannel[uctemp +1] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1660*53ee8cc1Swenshuai.xi ucTimeSlotNumber = ucTimeSlotNumber -pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1661*53ee8cc1Swenshuai.xi }
1662*53ee8cc1Swenshuai.xi }
1663*53ee8cc1Swenshuai.xi
1664*53ee8cc1Swenshuai.xi ucVirtualChannel[uctemp +1] = ucTimeSlotNumber;
1665*53ee8cc1Swenshuai.xi
1666*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(MHL_VIRTUAL_CHANNEL_LENGTH +2); uctemp++)
1667*53ee8cc1Swenshuai.xi {
1668*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL time slot assign %d\r\n", ucVirtualChannel[uctemp]);
1669*53ee8cc1Swenshuai.xi }
1670*53ee8cc1Swenshuai.xi
1671*53ee8cc1Swenshuai.xi ucTimeSlotNumber = MHL_ECBUS_S_TIME_SLOT_TOTAL -1;
1672*53ee8cc1Swenshuai.xi
1673*53ee8cc1Swenshuai.xi for(uctemp = MHL_VIRTUAL_CHANNEL_LENGTH +1; ucTimeSlotNumber > 0; uctemp--)
1674*53ee8cc1Swenshuai.xi {
1675*53ee8cc1Swenshuai.xi if(ucVirtualChannel[uctemp] > 0)
1676*53ee8cc1Swenshuai.xi {
1677*53ee8cc1Swenshuai.xi ucTimeSlotNumber = ucTimeSlotNumber -ucVirtualChannel[uctemp];
1678*53ee8cc1Swenshuai.xi
1679*53ee8cc1Swenshuai.xi _mdrv_mhl_SlotAllocationAlgorithm(uctemp, ucTimeSlotNumber, ucVirtualChannel[uctemp], ucSlotAllocation);
1680*53ee8cc1Swenshuai.xi }
1681*53ee8cc1Swenshuai.xi }
1682*53ee8cc1Swenshuai.xi
1683*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_ECBUS_S_TIME_SLOT_TOTAL; uctemp++)
1684*53ee8cc1Swenshuai.xi {
1685*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL time slot allocation %d\r\n", ucSlotAllocation[uctemp]);
1686*53ee8cc1Swenshuai.xi }
1687*53ee8cc1Swenshuai.xi }
1688*53ee8cc1Swenshuai.xi
1689*53ee8cc1Swenshuai.xi //**************************************************************************
1690*53ee8cc1Swenshuai.xi // [Function Name]:
1691*53ee8cc1Swenshuai.xi // _mdrv_mhl_SortingVCInformation()
1692*53ee8cc1Swenshuai.xi // [Description]:
1693*53ee8cc1Swenshuai.xi //
1694*53ee8cc1Swenshuai.xi // [Arguments]:
1695*53ee8cc1Swenshuai.xi //
1696*53ee8cc1Swenshuai.xi // [Return]:
1697*53ee8cc1Swenshuai.xi //
1698*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SortingVCInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bClearFlag)1699*53ee8cc1Swenshuai.xi void _mdrv_mhl_SortingVCInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bClearFlag)
1700*53ee8cc1Swenshuai.xi {
1701*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1702*53ee8cc1Swenshuai.xi MS_U8 ucIndex = 0;
1703*53ee8cc1Swenshuai.xi MS_U8 ucTargetVC = MHL_VIRTUAL_CHANNEL_LENGTH;
1704*53ee8cc1Swenshuai.xi stMHL_VIRTUAL_CHANNEL_INFO stVirtualChannelTemp = {FALSE, 0, 0, 0, 0};
1705*53ee8cc1Swenshuai.xi
1706*53ee8cc1Swenshuai.xi for(ucIndex = 0; ucIndex <(ucTargetVC -1); ucIndex++)
1707*53ee8cc1Swenshuai.xi {
1708*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <(ucTargetVC -ucIndex -1); uctemp++)
1709*53ee8cc1Swenshuai.xi {
1710*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber == 0)
1711*53ee8cc1Swenshuai.xi {
1712*53ee8cc1Swenshuai.xi ucTargetVC = uctemp +1;
1713*53ee8cc1Swenshuai.xi
1714*53ee8cc1Swenshuai.xi break;
1715*53ee8cc1Swenshuai.xi }
1716*53ee8cc1Swenshuai.xi else
1717*53ee8cc1Swenshuai.xi {
1718*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize == 0)
1719*53ee8cc1Swenshuai.xi {
1720*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber = 0xFF;
1721*53ee8cc1Swenshuai.xi }
1722*53ee8cc1Swenshuai.xi
1723*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber < pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber)
1724*53ee8cc1Swenshuai.xi {
1725*53ee8cc1Swenshuai.xi // temp = n +1
1726*53ee8cc1Swenshuai.xi stVirtualChannelTemp.bVCConfirm = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].bVCConfirm;
1727*53ee8cc1Swenshuai.xi stVirtualChannelTemp.ucVCFeatureID = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCFeatureID;
1728*53ee8cc1Swenshuai.xi stVirtualChannelTemp.ucVCNumber = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber;
1729*53ee8cc1Swenshuai.xi stVirtualChannelTemp.ucVCResponseCode = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCResponseCode;
1730*53ee8cc1Swenshuai.xi stVirtualChannelTemp.ucVCSlotSize = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCSlotSize;
1731*53ee8cc1Swenshuai.xi // n +1 = n
1732*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].bVCConfirm = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm;
1733*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCFeatureID = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID;
1734*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber;
1735*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCResponseCode = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCResponseCode;
1736*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCSlotSize = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1737*53ee8cc1Swenshuai.xi // n = temp
1738*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm = stVirtualChannelTemp.bVCConfirm;
1739*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID = stVirtualChannelTemp.ucVCFeatureID;
1740*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber = stVirtualChannelTemp.ucVCNumber;
1741*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCResponseCode = stVirtualChannelTemp.ucVCResponseCode;
1742*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize = stVirtualChannelTemp.ucVCSlotSize;
1743*53ee8cc1Swenshuai.xi }
1744*53ee8cc1Swenshuai.xi }
1745*53ee8cc1Swenshuai.xi }
1746*53ee8cc1Swenshuai.xi }
1747*53ee8cc1Swenshuai.xi
1748*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1749*53ee8cc1Swenshuai.xi {
1750*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize == 0)
1751*53ee8cc1Swenshuai.xi {
1752*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber = 0;
1753*53ee8cc1Swenshuai.xi }
1754*53ee8cc1Swenshuai.xi
1755*53ee8cc1Swenshuai.xi if(bClearFlag)
1756*53ee8cc1Swenshuai.xi {
1757*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm = FALSE;
1758*53ee8cc1Swenshuai.xi }
1759*53ee8cc1Swenshuai.xi
1760*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL VC sorting number %d\r\n", pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber);
1761*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL VC sorting slot %d\r\n", pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize);
1762*53ee8cc1Swenshuai.xi }
1763*53ee8cc1Swenshuai.xi }
1764*53ee8cc1Swenshuai.xi
1765*53ee8cc1Swenshuai.xi //**************************************************************************
1766*53ee8cc1Swenshuai.xi // [Function Name]:
1767*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendSetHPD()
1768*53ee8cc1Swenshuai.xi // [Description]:
1769*53ee8cc1Swenshuai.xi // MHL Cbus set HPD state
1770*53ee8cc1Swenshuai.xi // [Arguments]:
1771*53ee8cc1Swenshuai.xi // TRUE: SET_HPD
1772*53ee8cc1Swenshuai.xi // FALSE: CLR_HPD
1773*53ee8cc1Swenshuai.xi // [Return]:
1774*53ee8cc1Swenshuai.xi //
1775*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendSetHPD(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bSetHPDFlag)1776*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendSetHPD(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bSetHPDFlag)
1777*53ee8cc1Swenshuai.xi {
1778*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1779*53ee8cc1Swenshuai.xi
1780*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1781*53ee8cc1Swenshuai.xi {
1782*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1783*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 0;
1784*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = (bSetHPDFlag? MSC_SET_HPD : MSC_CLR_HPD);
1785*53ee8cc1Swenshuai.xi
1786*53ee8cc1Swenshuai.xi if(bSetHPDFlag)
1787*53ee8cc1Swenshuai.xi {
1788*53ee8cc1Swenshuai.xi SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG);
1789*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
1790*53ee8cc1Swenshuai.xi }
1791*53ee8cc1Swenshuai.xi else
1792*53ee8cc1Swenshuai.xi {
1793*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG);
1794*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
1795*53ee8cc1Swenshuai.xi }
1796*53ee8cc1Swenshuai.xi }
1797*53ee8cc1Swenshuai.xi }
1798*53ee8cc1Swenshuai.xi
1799*53ee8cc1Swenshuai.xi //**************************************************************************
1800*53ee8cc1Swenshuai.xi // [Function Name]:
1801*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusWriteStatusOrSetInt(BYTE addr, BYTE val)
1802*53ee8cc1Swenshuai.xi // [Description]:
1803*53ee8cc1Swenshuai.xi // MHL Cbus write status or set interrupt
1804*53ee8cc1Swenshuai.xi // [Arguments]:
1805*53ee8cc1Swenshuai.xi //
1806*53ee8cc1Swenshuai.xi // [Return]:
1807*53ee8cc1Swenshuai.xi // TRUE: Cbus message send successfully
1808*53ee8cc1Swenshuai.xi // FALSE: Cbus message send fail
1809*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusWriteStatusOrSetInt(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucAddress,MS_U8 ucValue,MS_BOOL bExtended)1810*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusWriteStatusOrSetInt(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucAddress, MS_U8 ucValue, MS_BOOL bExtended)
1811*53ee8cc1Swenshuai.xi {
1812*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = FALSE;
1813*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1814*53ee8cc1Swenshuai.xi
1815*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1816*53ee8cc1Swenshuai.xi {
1817*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1818*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 2;
1819*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = (bExtended? MSC_WRITE_XSTAT : MSC_WRITE_STAT_OR_SET_INT);
1820*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = ucAddress;
1821*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[1] = ucValue;
1822*53ee8cc1Swenshuai.xi
1823*53ee8cc1Swenshuai.xi bInsertFlag = TRUE;
1824*53ee8cc1Swenshuai.xi }
1825*53ee8cc1Swenshuai.xi
1826*53ee8cc1Swenshuai.xi return bInsertFlag;
1827*53ee8cc1Swenshuai.xi }
1828*53ee8cc1Swenshuai.xi
1829*53ee8cc1Swenshuai.xi //**************************************************************************
1830*53ee8cc1Swenshuai.xi // [Function Name]:
1831*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendSubMessage
1832*53ee8cc1Swenshuai.xi // [Description]
1833*53ee8cc1Swenshuai.xi // MHL Cbus MSC Send RCP or RAP
1834*53ee8cc1Swenshuai.xi // [Arguments]:
1835*53ee8cc1Swenshuai.xi // subCmd: MSC subcommands
1836*53ee8cc1Swenshuai.xi // databuf: command code
1837*53ee8cc1Swenshuai.xi // [Return]:
1838*53ee8cc1Swenshuai.xi // TRUE: success
1839*53ee8cc1Swenshuai.xi // FALSE: fail
1840*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendSubMessage(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucSubCommand,MS_U8 ucKeyCode,MS_BOOL bWaitReply)1841*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusSendSubMessage(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucSubCommand, MS_U8 ucKeyCode, MS_BOOL bWaitReply)
1842*53ee8cc1Swenshuai.xi {
1843*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = FALSE;
1844*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = MHL_CBUS_TOTAL_QUEUE_NUM;
1845*53ee8cc1Swenshuai.xi
1846*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG))
1847*53ee8cc1Swenshuai.xi {
1848*53ee8cc1Swenshuai.xi ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1849*53ee8cc1Swenshuai.xi
1850*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1851*53ee8cc1Swenshuai.xi {
1852*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1853*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 2;
1854*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = MSC_MSC_MSG;
1855*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = ucSubCommand;
1856*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[1] = ucKeyCode;
1857*53ee8cc1Swenshuai.xi
1858*53ee8cc1Swenshuai.xi bInsertFlag = TRUE;
1859*53ee8cc1Swenshuai.xi }
1860*53ee8cc1Swenshuai.xi
1861*53ee8cc1Swenshuai.xi if(bWaitReply && bInsertFlag)
1862*53ee8cc1Swenshuai.xi {
1863*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_WAIT_MSG_RESPONSE, MHL_MSG_WAIT_RESPONSE_TIME);
1864*53ee8cc1Swenshuai.xi
1865*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG);
1866*53ee8cc1Swenshuai.xi }
1867*53ee8cc1Swenshuai.xi }
1868*53ee8cc1Swenshuai.xi
1869*53ee8cc1Swenshuai.xi return bInsertFlag;
1870*53ee8cc1Swenshuai.xi }
1871*53ee8cc1Swenshuai.xi
1872*53ee8cc1Swenshuai.xi //**************************************************************************
1873*53ee8cc1Swenshuai.xi // [Function Name]:
1874*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendGetVenderID()
1875*53ee8cc1Swenshuai.xi // [Description]:
1876*53ee8cc1Swenshuai.xi //
1877*53ee8cc1Swenshuai.xi // [Arguments]:
1878*53ee8cc1Swenshuai.xi //
1879*53ee8cc1Swenshuai.xi // [Return]:
1880*53ee8cc1Swenshuai.xi // TRUE: Cbus message send successfully
1881*53ee8cc1Swenshuai.xi // FALSE: Cbus message send fail
1882*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendGetVenderID(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)1883*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusSendGetVenderID(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
1884*53ee8cc1Swenshuai.xi {
1885*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = FALSE;
1886*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1887*53ee8cc1Swenshuai.xi
1888*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1889*53ee8cc1Swenshuai.xi {
1890*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1891*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 0;
1892*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = MSC_GET_VENDOR_ID;
1893*53ee8cc1Swenshuai.xi
1894*53ee8cc1Swenshuai.xi bInsertFlag = TRUE;
1895*53ee8cc1Swenshuai.xi }
1896*53ee8cc1Swenshuai.xi
1897*53ee8cc1Swenshuai.xi return bInsertFlag;
1898*53ee8cc1Swenshuai.xi }
1899*53ee8cc1Swenshuai.xi
1900*53ee8cc1Swenshuai.xi //**************************************************************************
1901*53ee8cc1Swenshuai.xi // [Function Name]:
1902*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusReadDeviceCapability()
1903*53ee8cc1Swenshuai.xi // [Description]:
1904*53ee8cc1Swenshuai.xi //
1905*53ee8cc1Swenshuai.xi // [Arguments]:
1906*53ee8cc1Swenshuai.xi //
1907*53ee8cc1Swenshuai.xi // [Return]:
1908*53ee8cc1Swenshuai.xi // TRUE: Cbus message send successfully
1909*53ee8cc1Swenshuai.xi // FALSE: Cbus message send fail
1910*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusReadDeviceCapability(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucBitNumber,MS_BOOL bExtended)1911*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusReadDeviceCapability(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucBitNumber, MS_BOOL bExtended)
1912*53ee8cc1Swenshuai.xi {
1913*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = FALSE;
1914*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1915*53ee8cc1Swenshuai.xi
1916*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1917*53ee8cc1Swenshuai.xi {
1918*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1919*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 1;
1920*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = (bExtended? MSC_READ_XDEVCAP : MSC_READ_DEVCAP);
1921*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = (bExtended? (0x80 +ucBitNumber) : ucBitNumber);
1922*53ee8cc1Swenshuai.xi
1923*53ee8cc1Swenshuai.xi bInsertFlag = TRUE;
1924*53ee8cc1Swenshuai.xi }
1925*53ee8cc1Swenshuai.xi
1926*53ee8cc1Swenshuai.xi return bInsertFlag;
1927*53ee8cc1Swenshuai.xi }
1928*53ee8cc1Swenshuai.xi
1929*53ee8cc1Swenshuai.xi //**************************************************************************
1930*53ee8cc1Swenshuai.xi // [Function Name]:
1931*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendWriteBurst()
1932*53ee8cc1Swenshuai.xi // [Description]:
1933*53ee8cc1Swenshuai.xi //
1934*53ee8cc1Swenshuai.xi // [Arguments]:
1935*53ee8cc1Swenshuai.xi //
1936*53ee8cc1Swenshuai.xi // [Return]:
1937*53ee8cc1Swenshuai.xi // TRUE: Cbus message send successfully
1938*53ee8cc1Swenshuai.xi // FALSE: Cbus message send fail
1939*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendWriteBurst(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucAddress,MS_U8 ucLength,MS_U8 * ucData)1940*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusSendWriteBurst(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucAddress, MS_U8 ucLength, MS_U8 *ucData)
1941*53ee8cc1Swenshuai.xi {
1942*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = FALSE;
1943*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1944*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1945*53ee8cc1Swenshuai.xi
1946*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1947*53ee8cc1Swenshuai.xi {
1948*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1949*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = ucLength +1;
1950*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = MSC_WRITE_BURST;
1951*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = ucAddress;
1952*53ee8cc1Swenshuai.xi
1953*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < ucLength; uctemp++)
1954*53ee8cc1Swenshuai.xi {
1955*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[uctemp +1] = ucData[uctemp];
1956*53ee8cc1Swenshuai.xi }
1957*53ee8cc1Swenshuai.xi
1958*53ee8cc1Swenshuai.xi bInsertFlag = TRUE;
1959*53ee8cc1Swenshuai.xi }
1960*53ee8cc1Swenshuai.xi
1961*53ee8cc1Swenshuai.xi return bInsertFlag;
1962*53ee8cc1Swenshuai.xi }
1963*53ee8cc1Swenshuai.xi
1964*53ee8cc1Swenshuai.xi //**************************************************************************
1965*53ee8cc1Swenshuai.xi // [Function Name]:
1966*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendPathEnable()
1967*53ee8cc1Swenshuai.xi // [Description]:
1968*53ee8cc1Swenshuai.xi // MHL Cbus set path enable
1969*53ee8cc1Swenshuai.xi // [Arguments]:
1970*53ee8cc1Swenshuai.xi // TRUE: Enable
1971*53ee8cc1Swenshuai.xi // FALSE: Disable
1972*53ee8cc1Swenshuai.xi // [Return]:
1973*53ee8cc1Swenshuai.xi //
1974*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendPathEnable(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bEnableFlag)1975*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendPathEnable(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bEnableFlag)
1976*53ee8cc1Swenshuai.xi {
1977*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x31, (bEnableFlag ? BIT(3) : 0), FALSE);
1978*53ee8cc1Swenshuai.xi
1979*53ee8cc1Swenshuai.xi if(bInsertFlag)
1980*53ee8cc1Swenshuai.xi {
1981*53ee8cc1Swenshuai.xi mhal_mhl_Cbus_SetPathEn(bEnableFlag);
1982*53ee8cc1Swenshuai.xi
1983*53ee8cc1Swenshuai.xi if(bEnableFlag)
1984*53ee8cc1Swenshuai.xi {
1985*53ee8cc1Swenshuai.xi SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
1986*53ee8cc1Swenshuai.xi }
1987*53ee8cc1Swenshuai.xi else
1988*53ee8cc1Swenshuai.xi {
1989*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
1990*53ee8cc1Swenshuai.xi }
1991*53ee8cc1Swenshuai.xi }
1992*53ee8cc1Swenshuai.xi }
1993*53ee8cc1Swenshuai.xi
1994*53ee8cc1Swenshuai.xi //**************************************************************************
1995*53ee8cc1Swenshuai.xi // [Function Name]:
1996*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendDevcapReady()
1997*53ee8cc1Swenshuai.xi // [Description]:
1998*53ee8cc1Swenshuai.xi // MHL Cbus set capbility ready
1999*53ee8cc1Swenshuai.xi // [Arguments]:
2000*53ee8cc1Swenshuai.xi // TRUE: Enable
2001*53ee8cc1Swenshuai.xi // FALSE: Disable
2002*53ee8cc1Swenshuai.xi // [Return]:
2003*53ee8cc1Swenshuai.xi //
2004*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendDevcapReady(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2005*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendDevcapReady(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2006*53ee8cc1Swenshuai.xi {
2007*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = FALSE;
2008*53ee8cc1Swenshuai.xi MS_U8 ucDevcapValue = BIT(0);
2009*53ee8cc1Swenshuai.xi
2010*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
2011*53ee8cc1Swenshuai.xi {
2012*53ee8cc1Swenshuai.xi ucDevcapValue = ucDevcapValue| BIT(1);
2013*53ee8cc1Swenshuai.xi }
2014*53ee8cc1Swenshuai.xi
2015*53ee8cc1Swenshuai.xi bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x30, ucDevcapValue, FALSE);
2016*53ee8cc1Swenshuai.xi
2017*53ee8cc1Swenshuai.xi if(bInsertFlag)
2018*53ee8cc1Swenshuai.xi {
2019*53ee8cc1Swenshuai.xi SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG);
2020*53ee8cc1Swenshuai.xi }
2021*53ee8cc1Swenshuai.xi else
2022*53ee8cc1Swenshuai.xi {
2023*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG);
2024*53ee8cc1Swenshuai.xi }
2025*53ee8cc1Swenshuai.xi }
2026*53ee8cc1Swenshuai.xi
2027*53ee8cc1Swenshuai.xi //**************************************************************************
2028*53ee8cc1Swenshuai.xi // [Function Name]:
2029*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendDevcapChange()
2030*53ee8cc1Swenshuai.xi // [Description]:
2031*53ee8cc1Swenshuai.xi // MHL Cbus set capbility change
2032*53ee8cc1Swenshuai.xi // [Arguments]:
2033*53ee8cc1Swenshuai.xi // TRUE: Enable
2034*53ee8cc1Swenshuai.xi // FALSE: Disable
2035*53ee8cc1Swenshuai.xi // [Return]:
2036*53ee8cc1Swenshuai.xi //
2037*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendDevcapChange(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2038*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendDevcapChange(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2039*53ee8cc1Swenshuai.xi {
2040*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(0), FALSE);
2041*53ee8cc1Swenshuai.xi
2042*53ee8cc1Swenshuai.xi if(bInsertFlag)
2043*53ee8cc1Swenshuai.xi {
2044*53ee8cc1Swenshuai.xi SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_CHANGE_FLAG);
2045*53ee8cc1Swenshuai.xi }
2046*53ee8cc1Swenshuai.xi else
2047*53ee8cc1Swenshuai.xi {
2048*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_CHANGE_FLAG);
2049*53ee8cc1Swenshuai.xi }
2050*53ee8cc1Swenshuai.xi }
2051*53ee8cc1Swenshuai.xi
2052*53ee8cc1Swenshuai.xi //**************************************************************************
2053*53ee8cc1Swenshuai.xi // [Function Name]:
2054*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendVersionCode()
2055*53ee8cc1Swenshuai.xi // [Description]:
2056*53ee8cc1Swenshuai.xi //
2057*53ee8cc1Swenshuai.xi // [Arguments]:
2058*53ee8cc1Swenshuai.xi //
2059*53ee8cc1Swenshuai.xi // [Return]:
2060*53ee8cc1Swenshuai.xi //
2061*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendVersionCode(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2062*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendVersionCode(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2063*53ee8cc1Swenshuai.xi {
2064*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x32, pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION], FALSE);
2065*53ee8cc1Swenshuai.xi
2066*53ee8cc1Swenshuai.xi if(bInsertFlag)
2067*53ee8cc1Swenshuai.xi {
2068*53ee8cc1Swenshuai.xi SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_VERSION_CODE_FLAG);
2069*53ee8cc1Swenshuai.xi }
2070*53ee8cc1Swenshuai.xi else
2071*53ee8cc1Swenshuai.xi {
2072*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_VERSION_CODE_FLAG);
2073*53ee8cc1Swenshuai.xi }
2074*53ee8cc1Swenshuai.xi }
2075*53ee8cc1Swenshuai.xi
2076*53ee8cc1Swenshuai.xi //**************************************************************************
2077*53ee8cc1Swenshuai.xi // [Function Name]:
2078*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusSendLinkStatusNormal()
2079*53ee8cc1Swenshuai.xi // [Description]:
2080*53ee8cc1Swenshuai.xi //
2081*53ee8cc1Swenshuai.xi // [Arguments]:
2082*53ee8cc1Swenshuai.xi //
2083*53ee8cc1Swenshuai.xi // [Return]:
2084*53ee8cc1Swenshuai.xi //
2085*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendLinkStatusNormal(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2086*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendLinkStatusNormal(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2087*53ee8cc1Swenshuai.xi {
2088*53ee8cc1Swenshuai.xi MS_BOOL bInsertFlag = FALSE;
2089*53ee8cc1Swenshuai.xi
2090*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_LINK_STATUS_NORMAL_FLAG))
2091*53ee8cc1Swenshuai.xi {
2092*53ee8cc1Swenshuai.xi bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x91, 0x02, TRUE);
2093*53ee8cc1Swenshuai.xi
2094*53ee8cc1Swenshuai.xi if(bInsertFlag)
2095*53ee8cc1Swenshuai.xi {
2096*53ee8cc1Swenshuai.xi SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG);
2097*53ee8cc1Swenshuai.xi }
2098*53ee8cc1Swenshuai.xi else
2099*53ee8cc1Swenshuai.xi {
2100*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG);
2101*53ee8cc1Swenshuai.xi }
2102*53ee8cc1Swenshuai.xi }
2103*53ee8cc1Swenshuai.xi }
2104*53ee8cc1Swenshuai.xi
2105*53ee8cc1Swenshuai.xi //**************************************************************************
2106*53ee8cc1Swenshuai.xi // [Function Name]:
2107*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetEnhanceCbusFlag()
2108*53ee8cc1Swenshuai.xi // [Description]
2109*53ee8cc1Swenshuai.xi //
2110*53ee8cc1Swenshuai.xi // [Arguments]:
2111*53ee8cc1Swenshuai.xi //
2112*53ee8cc1Swenshuai.xi // [Return]:
2113*53ee8cc1Swenshuai.xi //
2114*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetEnhanceCbusFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2115*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetEnhanceCbusFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2116*53ee8cc1Swenshuai.xi {
2117*53ee8cc1Swenshuai.xi MS_BOOL bECbusSupport = GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_ECBUS_ENGINE_SUPPORT_FLAG);
2118*53ee8cc1Swenshuai.xi
2119*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] < 0x30)
2120*53ee8cc1Swenshuai.xi {
2121*53ee8cc1Swenshuai.xi bECbusSupport = FALSE;
2122*53ee8cc1Swenshuai.xi }
2123*53ee8cc1Swenshuai.xi
2124*53ee8cc1Swenshuai.xi return bECbusSupport;
2125*53ee8cc1Swenshuai.xi }
2126*53ee8cc1Swenshuai.xi
2127*53ee8cc1Swenshuai.xi //**************************************************************************
2128*53ee8cc1Swenshuai.xi // [Function Name]:
2129*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusTimerEventProc()
2130*53ee8cc1Swenshuai.xi // [Description]:
2131*53ee8cc1Swenshuai.xi //
2132*53ee8cc1Swenshuai.xi // [Arguments]:
2133*53ee8cc1Swenshuai.xi //
2134*53ee8cc1Swenshuai.xi // [Return]:
2135*53ee8cc1Swenshuai.xi //
2136*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusTimerEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2137*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusTimerEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2138*53ee8cc1Swenshuai.xi {
2139*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CBUS_SILENCE_FLAG))
2140*53ee8cc1Swenshuai.xi {
2141*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CBUS_SILENCE_FLAG);
2142*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG);
2143*53ee8cc1Swenshuai.xi
2144*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2145*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_CBUS_SILENCE);
2146*53ee8cc1Swenshuai.xi #endif
2147*53ee8cc1Swenshuai.xi }
2148*53ee8cc1Swenshuai.xi
2149*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_DISPLAY_COMMAND_FLAG))
2150*53ee8cc1Swenshuai.xi {
2151*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_DISPLAY_COMMAND_FLAG);
2152*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_DISPLAY_COMMAND_ENABLE_FLAG);
2153*53ee8cc1Swenshuai.xi
2154*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2155*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_DISPLAY_COMMAND);
2156*53ee8cc1Swenshuai.xi #endif
2157*53ee8cc1Swenshuai.xi }
2158*53ee8cc1Swenshuai.xi
2159*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_MSG_RESPONSE_FLAG))
2160*53ee8cc1Swenshuai.xi {
2161*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_MSG_RESPONSE_FLAG);
2162*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG);
2163*53ee8cc1Swenshuai.xi
2164*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2165*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_WAIT_MSG_RESPONSE);
2166*53ee8cc1Swenshuai.xi #endif
2167*53ee8cc1Swenshuai.xi }
2168*53ee8cc1Swenshuai.xi
2169*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_RCP_AUTO_RELEASE_FLAG))
2170*53ee8cc1Swenshuai.xi {
2171*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, (pMHLResourcePrivate->ucPreRCPKeyCode |BIT(7)), TRUE))
2172*53ee8cc1Swenshuai.xi {
2173*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_RCP_AUTO_RELEASE_FLAG);
2174*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG);
2175*53ee8cc1Swenshuai.xi
2176*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2177*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_RCP_AUTO_RELEASE);
2178*53ee8cc1Swenshuai.xi #endif
2179*53ee8cc1Swenshuai.xi }
2180*53ee8cc1Swenshuai.xi }
2181*53ee8cc1Swenshuai.xi
2182*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_WRITE_GRANT_FLAG))
2183*53ee8cc1Swenshuai.xi {
2184*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_WRITE_GRANT_FLAG);
2185*53ee8cc1Swenshuai.xi
2186*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_SEND_REQUEST)
2187*53ee8cc1Swenshuai.xi {
2188*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_START;
2189*53ee8cc1Swenshuai.xi }
2190*53ee8cc1Swenshuai.xi
2191*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2192*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_WAIT_WRITE_GRANT);
2193*53ee8cc1Swenshuai.xi #endif
2194*53ee8cc1Swenshuai.xi }
2195*53ee8cc1Swenshuai.xi
2196*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_RECEIVE_LOSE_FLAG))
2197*53ee8cc1Swenshuai.xi {
2198*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_RECEIVE_LOSE_FLAG);
2199*53ee8cc1Swenshuai.xi
2200*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG))
2201*53ee8cc1Swenshuai.xi {
2202*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
2203*53ee8cc1Swenshuai.xi
2204*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucReceiveCounter == 0)
2205*53ee8cc1Swenshuai.xi {
2206*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucReceiveCounter++;
2207*53ee8cc1Swenshuai.xi }
2208*53ee8cc1Swenshuai.xi }
2209*53ee8cc1Swenshuai.xi
2210*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2211*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_CHECK_RECEIVE_LOSE);
2212*53ee8cc1Swenshuai.xi #endif
2213*53ee8cc1Swenshuai.xi }
2214*53ee8cc1Swenshuai.xi
2215*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_SEND_MSG_RESPONSE_FLAG))
2216*53ee8cc1Swenshuai.xi {
2217*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[0], pMHLResourcePrivate->ucMSGData[1], FALSE))
2218*53ee8cc1Swenshuai.xi {
2219*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_SEND_MSG_RESPONSE_FLAG);
2220*53ee8cc1Swenshuai.xi
2221*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2222*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_SEND_MSG_RESPONSE);
2223*53ee8cc1Swenshuai.xi #endif
2224*53ee8cc1Swenshuai.xi }
2225*53ee8cc1Swenshuai.xi }
2226*53ee8cc1Swenshuai.xi
2227*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_CONTENT_ON_FLAG))
2228*53ee8cc1Swenshuai.xi {
2229*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_CONTENT_ON_FLAG);
2230*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CHECK_CONTENT_ON_FLAG);
2231*53ee8cc1Swenshuai.xi
2232*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2233*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_CHECK_CONTENT_ON);
2234*53ee8cc1Swenshuai.xi #endif
2235*53ee8cc1Swenshuai.xi }
2236*53ee8cc1Swenshuai.xi
2237*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_SWITCH_STOP_FLAG))
2238*53ee8cc1Swenshuai.xi {
2239*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_SWITCH_STOP_FLAG);
2240*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG);
2241*53ee8cc1Swenshuai.xi
2242*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2243*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_AUTO_SWITCH_STOP);
2244*53ee8cc1Swenshuai.xi #endif
2245*53ee8cc1Swenshuai.xi }
2246*53ee8cc1Swenshuai.xi
2247*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_ECBUS_LOCK_FLAG))
2248*53ee8cc1Swenshuai.xi {
2249*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_ECBUS_LOCK_FLAG);
2250*53ee8cc1Swenshuai.xi
2251*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucECbusState != MHL_ECBUS_STATE_STABLE_POLLING)
2252*53ee8cc1Swenshuai.xi {
2253*53ee8cc1Swenshuai.xi if(!(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_ECBUS_SWITCH)) // Not BIST mode
2254*53ee8cc1Swenshuai.xi {
2255*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_UNLOCK_RESET;
2256*53ee8cc1Swenshuai.xi }
2257*53ee8cc1Swenshuai.xi }
2258*53ee8cc1Swenshuai.xi
2259*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2260*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_WAIT_ECBUS_LOCK);
2261*53ee8cc1Swenshuai.xi #endif
2262*53ee8cc1Swenshuai.xi }
2263*53ee8cc1Swenshuai.xi
2264*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_EQ_PROCESS_FLAG))
2265*53ee8cc1Swenshuai.xi {
2266*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_EQ_PROCESS_FLAG);
2267*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG);
2268*53ee8cc1Swenshuai.xi
2269*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2270*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_AUTO_EQ_PROCESS);
2271*53ee8cc1Swenshuai.xi #endif
2272*53ee8cc1Swenshuai.xi }
2273*53ee8cc1Swenshuai.xi
2274*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_BIST_PROCESS_FLAG))
2275*53ee8cc1Swenshuai.xi {
2276*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_BIST_PROCESS_FLAG);
2277*53ee8cc1Swenshuai.xi
2278*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_ECBUS_SWITCH)
2279*53ee8cc1Swenshuai.xi {
2280*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_EVENT_FINISH;
2281*53ee8cc1Swenshuai.xi }
2282*53ee8cc1Swenshuai.xi
2283*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2284*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_BIST_PROCESS);
2285*53ee8cc1Swenshuai.xi #endif
2286*53ee8cc1Swenshuai.xi }
2287*53ee8cc1Swenshuai.xi
2288*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_TX_QUEUE_FREEZE_FLAG))
2289*53ee8cc1Swenshuai.xi {
2290*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_TX_QUEUE_FREEZE_FLAG);
2291*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2292*53ee8cc1Swenshuai.xi
2293*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2294*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_TX_QUQUE_FREEZE);
2295*53ee8cc1Swenshuai.xi #endif
2296*53ee8cc1Swenshuai.xi }
2297*53ee8cc1Swenshuai.xi
2298*53ee8cc1Swenshuai.xi if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_POWER_ON_PATCH_FLAG))
2299*53ee8cc1Swenshuai.xi {
2300*53ee8cc1Swenshuai.xi CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_POWER_ON_PATCH_FLAG);
2301*53ee8cc1Swenshuai.xi
2302*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucPowerOnPatchState == MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_ON)
2303*53ee8cc1Swenshuai.xi {
2304*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_PATCH_ON;
2305*53ee8cc1Swenshuai.xi }
2306*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->ucPowerOnPatchState == MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_OFF)
2307*53ee8cc1Swenshuai.xi {
2308*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_PATCH_OFF;
2309*53ee8cc1Swenshuai.xi }
2310*53ee8cc1Swenshuai.xi
2311*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2312*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_POWER_ON_PATCH);
2313*53ee8cc1Swenshuai.xi #endif
2314*53ee8cc1Swenshuai.xi }
2315*53ee8cc1Swenshuai.xi }
2316*53ee8cc1Swenshuai.xi
2317*53ee8cc1Swenshuai.xi //**************************************************************************
2318*53ee8cc1Swenshuai.xi // [Function Name]:
2319*53ee8cc1Swenshuai.xi // _mdrv_mhl_TimerHandler()
2320*53ee8cc1Swenshuai.xi // [Description]
2321*53ee8cc1Swenshuai.xi //
2322*53ee8cc1Swenshuai.xi // [Arguments]:
2323*53ee8cc1Swenshuai.xi //
2324*53ee8cc1Swenshuai.xi // [Return]:
2325*53ee8cc1Swenshuai.xi //
2326*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_TimerHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2327*53ee8cc1Swenshuai.xi void _mdrv_mhl_TimerHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2328*53ee8cc1Swenshuai.xi {
2329*53ee8cc1Swenshuai.xi MS_U8 ucTimerEvent = 0;
2330*53ee8cc1Swenshuai.xi MS_U32 ulTimerInterval = 0;
2331*53ee8cc1Swenshuai.xi MS_U32 ulTimerTick = (MsOS_GetSystemTime()) %CBUS_TIMER_CONTROL_MASK;
2332*53ee8cc1Swenshuai.xi
2333*53ee8cc1Swenshuai.xi if(ulTimerTick != pMHLResourcePrivate->ulCurrentTimerTick)
2334*53ee8cc1Swenshuai.xi {
2335*53ee8cc1Swenshuai.xi ulTimerInterval = (ulTimerTick +CBUS_TIMER_CONTROL_MASK -pMHLResourcePrivate->ulCurrentTimerTick) %CBUS_TIMER_CONTROL_MASK;
2336*53ee8cc1Swenshuai.xi
2337*53ee8cc1Swenshuai.xi if(ulTimerInterval < 50)
2338*53ee8cc1Swenshuai.xi {
2339*53ee8cc1Swenshuai.xi for(ucTimerEvent = 0; ucTimerEvent < MHL_TIMER_EVENT_MASK; ucTimerEvent++)
2340*53ee8cc1Swenshuai.xi {
2341*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].bEnableFlag)
2342*53ee8cc1Swenshuai.xi {
2343*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick > ulTimerInterval)
2344*53ee8cc1Swenshuai.xi {
2345*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick = pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick -ulTimerInterval;
2346*53ee8cc1Swenshuai.xi }
2347*53ee8cc1Swenshuai.xi else
2348*53ee8cc1Swenshuai.xi {
2349*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick = 0;
2350*53ee8cc1Swenshuai.xi
2351*53ee8cc1Swenshuai.xi SET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, BIT(ucTimerEvent));
2352*53ee8cc1Swenshuai.xi
2353*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].bEnableFlag = FALSE;
2354*53ee8cc1Swenshuai.xi }
2355*53ee8cc1Swenshuai.xi }
2356*53ee8cc1Swenshuai.xi }
2357*53ee8cc1Swenshuai.xi }
2358*53ee8cc1Swenshuai.xi
2359*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ulCurrentTimerTick = ulTimerTick;
2360*53ee8cc1Swenshuai.xi }
2361*53ee8cc1Swenshuai.xi
2362*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ulTimerIndex > 0)
2363*53ee8cc1Swenshuai.xi {
2364*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusTimerEventProc(pMHLResourcePrivate);
2365*53ee8cc1Swenshuai.xi }
2366*53ee8cc1Swenshuai.xi }
2367*53ee8cc1Swenshuai.xi
2368*53ee8cc1Swenshuai.xi //**************************************************************************
2369*53ee8cc1Swenshuai.xi // [Function Name]:
2370*53ee8cc1Swenshuai.xi // _mdrv_mhl_ECbusStateHandler()
2371*53ee8cc1Swenshuai.xi // [Description]
2372*53ee8cc1Swenshuai.xi //
2373*53ee8cc1Swenshuai.xi // [Arguments]:
2374*53ee8cc1Swenshuai.xi //
2375*53ee8cc1Swenshuai.xi // [Return]:
2376*53ee8cc1Swenshuai.xi //
2377*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ECbusStateHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2378*53ee8cc1Swenshuai.xi void _mdrv_mhl_ECbusStateHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2379*53ee8cc1Swenshuai.xi {
2380*53ee8cc1Swenshuai.xi MS_U8 ucECbusEvent = MHL_ECBUS_EVENT_NONE;
2381*53ee8cc1Swenshuai.xi MS_U8 ucECbusStatusFlag = mhal_mhl_GetECbusStatusFlag();
2382*53ee8cc1Swenshuai.xi
2383*53ee8cc1Swenshuai.xi if((pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState < MHL_ECBUS_STATE_FAIL) && (pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState >= MHL_ECBUS_STATE_SOURCE_ACTIVE))
2384*53ee8cc1Swenshuai.xi {
2385*53ee8cc1Swenshuai.xi ucECbusStatusFlag |= MHL_ECBUS_STATUS_TRAINING_PASS;
2386*53ee8cc1Swenshuai.xi }
2387*53ee8cc1Swenshuai.xi
2388*53ee8cc1Swenshuai.xi switch(pMHLResourcePrivate->ucECbusState)
2389*53ee8cc1Swenshuai.xi {
2390*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_RECEIVE_MODE_UP:
2391*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAPK, 0x00, FALSE))
2392*53ee8cc1Swenshuai.xi {
2393*53ee8cc1Swenshuai.xi // Freeze Tx queue, not allow any Cbus command insert Tx queue
2394*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2395*53ee8cc1Swenshuai.xi
2396*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_UP;
2397*53ee8cc1Swenshuai.xi
2398*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_PREPARE_MODE_UP;
2399*53ee8cc1Swenshuai.xi
2400*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL receive mode up !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2401*53ee8cc1Swenshuai.xi }
2402*53ee8cc1Swenshuai.xi
2403*53ee8cc1Swenshuai.xi break;
2404*53ee8cc1Swenshuai.xi
2405*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_BIST_MODE_UP:
2406*53ee8cc1Swenshuai.xi // Freeze Tx queue, not allow any Cbus command insert Tx queue
2407*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2408*53ee8cc1Swenshuai.xi
2409*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_UP;
2410*53ee8cc1Swenshuai.xi
2411*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_PREPARE_MODE_UP;
2412*53ee8cc1Swenshuai.xi
2413*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST trigger mode up !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2414*53ee8cc1Swenshuai.xi
2415*53ee8cc1Swenshuai.xi break;
2416*53ee8cc1Swenshuai.xi
2417*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_TRIGGER_MODE_UP:
2418*53ee8cc1Swenshuai.xi // Wait Tx queue empty, then trigger eCbus mode up
2419*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate) == MHL_CBUS_TOTAL_QUEUE_NUM)
2420*53ee8cc1Swenshuai.xi {
2421*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_PROCESS_MODE_UP;
2422*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag = TRUE;
2423*53ee8cc1Swenshuai.xi
2424*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_MODE_UP_PROCESS;
2425*53ee8cc1Swenshuai.xi
2426*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_WAIT_ECBUS_LOCK, MHL_WAIT_ECBUS_LOCK_TIME);
2427*53ee8cc1Swenshuai.xi
2428*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Tx queue empty trigger mode up !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2429*53ee8cc1Swenshuai.xi }
2430*53ee8cc1Swenshuai.xi
2431*53ee8cc1Swenshuai.xi break;
2432*53ee8cc1Swenshuai.xi
2433*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_PROCESS_MODE_UP:
2434*53ee8cc1Swenshuai.xi if(ucECbusStatusFlag &MHL_ECBUS_STATUS_SLOT_SYNC_DONE)
2435*53ee8cc1Swenshuai.xi {
2436*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2437*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG);
2438*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS1_FUNCTION_FLAG);
2439*53ee8cc1Swenshuai.xi
2440*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_MODE_UP_CLOCK_LOCK;
2441*53ee8cc1Swenshuai.xi
2442*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Cbus1 command enable !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2443*53ee8cc1Swenshuai.xi }
2444*53ee8cc1Swenshuai.xi
2445*53ee8cc1Swenshuai.xi break;
2446*53ee8cc1Swenshuai.xi
2447*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_MODE_UP_CLOCK_LOCK:
2448*53ee8cc1Swenshuai.xi if(ucECbusStatusFlag &MHL_ECBUS_STATUS_EMSC_SYNC_DONE)
2449*53ee8cc1Swenshuai.xi {
2450*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_EMSC_FUNCTION_FLAG);
2451*53ee8cc1Swenshuai.xi
2452*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_STABLE_POLLING;
2453*53ee8cc1Swenshuai.xi
2454*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC command enable !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2455*53ee8cc1Swenshuai.xi
2456*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG))
2457*53ee8cc1Swenshuai.xi {
2458*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
2459*53ee8cc1Swenshuai.xi }
2460*53ee8cc1Swenshuai.xi }
2461*53ee8cc1Swenshuai.xi
2462*53ee8cc1Swenshuai.xi break;
2463*53ee8cc1Swenshuai.xi
2464*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_STABLE_POLLING:
2465*53ee8cc1Swenshuai.xi if((ucECbusStatusFlag &(MHL_ECBUS_STATUS_TRAINING_PASS)) == 0)
2466*53ee8cc1Swenshuai.xi {
2467*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
2468*53ee8cc1Swenshuai.xi
2469*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_STUCK_TO_LOW;
2470*53ee8cc1Swenshuai.xi
2471*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eCbus lose lock to reset !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2472*53ee8cc1Swenshuai.xi }
2473*53ee8cc1Swenshuai.xi else if(ucECbusStatusFlag &MHL_ECBUS_STATUS_RETRY_TIMEOUT)
2474*53ee8cc1Swenshuai.xi {
2475*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
2476*53ee8cc1Swenshuai.xi
2477*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_STUCK_TO_LOW;
2478*53ee8cc1Swenshuai.xi }
2479*53ee8cc1Swenshuai.xi else
2480*53ee8cc1Swenshuai.xi {
2481*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_ECBUS_COMMAND_PARSING;
2482*53ee8cc1Swenshuai.xi }
2483*53ee8cc1Swenshuai.xi
2484*53ee8cc1Swenshuai.xi break;
2485*53ee8cc1Swenshuai.xi
2486*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_UNLOCK_RESET:
2487*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
2488*53ee8cc1Swenshuai.xi
2489*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_STUCK_TO_LOW;
2490*53ee8cc1Swenshuai.xi
2491*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eCbus training timeout to reset !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2492*53ee8cc1Swenshuai.xi
2493*53ee8cc1Swenshuai.xi break;
2494*53ee8cc1Swenshuai.xi
2495*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_RECEIVE_MODE_DOWN:
2496*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAPK, 0x00, FALSE))
2497*53ee8cc1Swenshuai.xi {
2498*53ee8cc1Swenshuai.xi // Freeze Tx queue, not allow any Cbus command insert Tx queue
2499*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2500*53ee8cc1Swenshuai.xi
2501*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_DOWN;
2502*53ee8cc1Swenshuai.xi
2503*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL receive mode down !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2504*53ee8cc1Swenshuai.xi }
2505*53ee8cc1Swenshuai.xi
2506*53ee8cc1Swenshuai.xi break;
2507*53ee8cc1Swenshuai.xi
2508*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_BIST_MODE_DOWN:
2509*53ee8cc1Swenshuai.xi // Freeze Tx queue, not allow any Cbus command insert Tx queue
2510*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2511*53ee8cc1Swenshuai.xi
2512*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_DOWN;
2513*53ee8cc1Swenshuai.xi
2514*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST trigger mode down !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2515*53ee8cc1Swenshuai.xi
2516*53ee8cc1Swenshuai.xi break;
2517*53ee8cc1Swenshuai.xi
2518*53ee8cc1Swenshuai.xi case MHL_ECBUS_STATE_TRIGGER_MODE_DOWN:
2519*53ee8cc1Swenshuai.xi // Wait Tx queue empty, then trigger eCbus mode up
2520*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate) == MHL_CBUS_TOTAL_QUEUE_NUM)
2521*53ee8cc1Swenshuai.xi {
2522*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_PROCESS_MODE_DOWN;
2523*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag = FALSE;
2524*53ee8cc1Swenshuai.xi
2525*53ee8cc1Swenshuai.xi ucECbusEvent = MHL_ECBUS_EVENT_MODE_DOWN_PROCESS;
2526*53ee8cc1Swenshuai.xi
2527*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Tx queue empty trigger mode down !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2528*53ee8cc1Swenshuai.xi }
2529*53ee8cc1Swenshuai.xi
2530*53ee8cc1Swenshuai.xi break;
2531*53ee8cc1Swenshuai.xi
2532*53ee8cc1Swenshuai.xi default:
2533*53ee8cc1Swenshuai.xi
2534*53ee8cc1Swenshuai.xi break;
2535*53ee8cc1Swenshuai.xi };
2536*53ee8cc1Swenshuai.xi
2537*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucECbusTrainState != pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState)
2538*53ee8cc1Swenshuai.xi {
2539*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusTrainState = pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState;
2540*53ee8cc1Swenshuai.xi
2541*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eCbus state %x\r\n", pMHLResourcePrivate->ucECbusTrainState);
2542*53ee8cc1Swenshuai.xi }
2543*53ee8cc1Swenshuai.xi
2544*53ee8cc1Swenshuai.xi mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, ucECbusEvent, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2545*53ee8cc1Swenshuai.xi }
2546*53ee8cc1Swenshuai.xi
2547*53ee8cc1Swenshuai.xi //**************************************************************************
2548*53ee8cc1Swenshuai.xi // [Function Name]:
2549*53ee8cc1Swenshuai.xi // _mdrv_mhl_DisplayCommandCheckFlag()
2550*53ee8cc1Swenshuai.xi // [Description]
2551*53ee8cc1Swenshuai.xi //
2552*53ee8cc1Swenshuai.xi // [Arguments]:
2553*53ee8cc1Swenshuai.xi //
2554*53ee8cc1Swenshuai.xi // [Return]:
2555*53ee8cc1Swenshuai.xi //
2556*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_DisplayCommandCheckFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2557*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_DisplayCommandCheckFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2558*53ee8cc1Swenshuai.xi {
2559*53ee8cc1Swenshuai.xi MS_BOOL bCheckFlag = TRUE;
2560*53ee8cc1Swenshuai.xi MS_U16 usDisplayCheck = (pMHLResourcePrivate->usDisplayIndex) >> MHL_CBUS_DISPLAY_MASK_SHIFT;
2561*53ee8cc1Swenshuai.xi
2562*53ee8cc1Swenshuai.xi if(((usDisplayCheck &MHL_CBUS_DISPLAY_MASK) ^MHL_CBUS_DISPLAY_MASK) > 0)
2563*53ee8cc1Swenshuai.xi {
2564*53ee8cc1Swenshuai.xi bCheckFlag = FALSE;
2565*53ee8cc1Swenshuai.xi }
2566*53ee8cc1Swenshuai.xi
2567*53ee8cc1Swenshuai.xi return bCheckFlag;
2568*53ee8cc1Swenshuai.xi }
2569*53ee8cc1Swenshuai.xi
2570*53ee8cc1Swenshuai.xi //**************************************************************************
2571*53ee8cc1Swenshuai.xi // [Function Name]:
2572*53ee8cc1Swenshuai.xi // _mdrv_mhl_PowerOnPatchProc()
2573*53ee8cc1Swenshuai.xi // [Description]
2574*53ee8cc1Swenshuai.xi //
2575*53ee8cc1Swenshuai.xi // [Arguments]:
2576*53ee8cc1Swenshuai.xi //
2577*53ee8cc1Swenshuai.xi // [Return]:
2578*53ee8cc1Swenshuai.xi //
2579*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_PowerOnPatchProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2580*53ee8cc1Swenshuai.xi void _mdrv_mhl_PowerOnPatchProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2581*53ee8cc1Swenshuai.xi {
2582*53ee8cc1Swenshuai.xi switch(pMHLResourcePrivate->ucPowerOnPatchState)
2583*53ee8cc1Swenshuai.xi {
2584*53ee8cc1Swenshuai.xi case MHL_POWER_ON_PATCH_STATE_START:
2585*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_POWER_ON_PATCH, MHL_WAIT_PATCH_ON_TIME);
2586*53ee8cc1Swenshuai.xi
2587*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_ON;
2588*53ee8cc1Swenshuai.xi
2589*53ee8cc1Swenshuai.xi break;
2590*53ee8cc1Swenshuai.xi
2591*53ee8cc1Swenshuai.xi case MHL_POWER_ON_PATCH_STATE_PATCH_ON:
2592*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_POWER_ON_PATCH, MHL_WAIT_PATCH_OFF_TIME);
2593*53ee8cc1Swenshuai.xi
2594*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_OFF;
2595*53ee8cc1Swenshuai.xi
2596*53ee8cc1Swenshuai.xi mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, MHL_ECBUS_EVENT_POWER_ON_PATCH_ON, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2597*53ee8cc1Swenshuai.xi
2598*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL power on patch on !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2599*53ee8cc1Swenshuai.xi
2600*53ee8cc1Swenshuai.xi break;
2601*53ee8cc1Swenshuai.xi
2602*53ee8cc1Swenshuai.xi case MHL_POWER_ON_PATCH_STATE_PATCH_OFF:
2603*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_DONE;
2604*53ee8cc1Swenshuai.xi
2605*53ee8cc1Swenshuai.xi mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, MHL_ECBUS_EVENT_POWER_ON_PATCH_OFF, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2606*53ee8cc1Swenshuai.xi
2607*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL power on patch off !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2608*53ee8cc1Swenshuai.xi
2609*53ee8cc1Swenshuai.xi break;
2610*53ee8cc1Swenshuai.xi
2611*53ee8cc1Swenshuai.xi case MHL_POWER_ON_PATCH_STATE_DONE:
2612*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_NONE;
2613*53ee8cc1Swenshuai.xi break;
2614*53ee8cc1Swenshuai.xi
2615*53ee8cc1Swenshuai.xi default:
2616*53ee8cc1Swenshuai.xi
2617*53ee8cc1Swenshuai.xi break;
2618*53ee8cc1Swenshuai.xi };
2619*53ee8cc1Swenshuai.xi }
2620*53ee8cc1Swenshuai.xi
2621*53ee8cc1Swenshuai.xi //**************************************************************************
2622*53ee8cc1Swenshuai.xi // [Function Name]:
2623*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckStatusPolling()
2624*53ee8cc1Swenshuai.xi // [Description]
2625*53ee8cc1Swenshuai.xi //
2626*53ee8cc1Swenshuai.xi // [Arguments]:
2627*53ee8cc1Swenshuai.xi //
2628*53ee8cc1Swenshuai.xi // [Return]:
2629*53ee8cc1Swenshuai.xi //
2630*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckStatusPolling(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2631*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckStatusPolling(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2632*53ee8cc1Swenshuai.xi {
2633*53ee8cc1Swenshuai.xi MS_BOOL bSourceChangeFlag = FALSE;
2634*53ee8cc1Swenshuai.xi MS_U8 ucCurrentHDMIPort = mhal_mhl_GetInputPort();
2635*53ee8cc1Swenshuai.xi
2636*53ee8cc1Swenshuai.xi // For cable detect
2637*53ee8cc1Swenshuai.xi if(mhal_mhl_CableDetect(pMHLResourcePrivate->ucMHLSupportPath)) // Cable plugged
2638*53ee8cc1Swenshuai.xi {
2639*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
2640*53ee8cc1Swenshuai.xi {
2641*53ee8cc1Swenshuai.xi mhal_mhl_CablePlugProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
2642*53ee8cc1Swenshuai.xi
2643*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Cable plugged!! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2644*53ee8cc1Swenshuai.xi
2645*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
2646*53ee8cc1Swenshuai.xi }
2647*53ee8cc1Swenshuai.xi
2648*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG))
2649*53ee8cc1Swenshuai.xi {
2650*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG);
2651*53ee8cc1Swenshuai.xi }
2652*53ee8cc1Swenshuai.xi
2653*53ee8cc1Swenshuai.xi // For Cbus
2654*53ee8cc1Swenshuai.xi if(mhal_mhl_CbusStatus() == 0x03) // Cbus connect
2655*53ee8cc1Swenshuai.xi {
2656*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
2657*53ee8cc1Swenshuai.xi {
2658*53ee8cc1Swenshuai.xi mhal_mhl_CbusConnectProc(pMHLResourcePrivate->ucMHLSupportPath);
2659*53ee8cc1Swenshuai.xi
2660*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_NORMAL_24BIT;
2661*53ee8cc1Swenshuai.xi
2662*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_DISPLAY_COMMAND, MHL_CBUS_CONNECT_HOLD_TIME);
2663*53ee8cc1Swenshuai.xi
2664*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_DISPLAY_COMMAND_ENABLE_FLAG);
2665*53ee8cc1Swenshuai.xi
2666*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CBUS_SILENCE, MHL_CBUS_CONNECT_SILENCE_TIME);
2667*53ee8cc1Swenshuai.xi
2668*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG);
2669*53ee8cc1Swenshuai.xi
2670*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG))
2671*53ee8cc1Swenshuai.xi {
2672*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CHECK_CONTENT_ON, MHL_CHECK_CONTENT_ON_TIME);
2673*53ee8cc1Swenshuai.xi
2674*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CHECK_CONTENT_ON_FLAG);
2675*53ee8cc1Swenshuai.xi SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
2676*53ee8cc1Swenshuai.xi }
2677*53ee8cc1Swenshuai.xi
2678*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Cbus connected~~ ^Q^ port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2679*53ee8cc1Swenshuai.xi
2680*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
2681*53ee8cc1Swenshuai.xi }
2682*53ee8cc1Swenshuai.xi
2683*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
2684*53ee8cc1Swenshuai.xi {
2685*53ee8cc1Swenshuai.xi _mdrv_mhl_ECbusStateHandler(pMHLResourcePrivate);
2686*53ee8cc1Swenshuai.xi
2687*53ee8cc1Swenshuai.xi #if(MHL3_AUTO_EQ_ENABLE)
2688*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG))
2689*53ee8cc1Swenshuai.xi {
2690*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG);
2691*53ee8cc1Swenshuai.xi
2692*53ee8cc1Swenshuai.xi mhal_mhl_AutoEQEventProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
2693*53ee8cc1Swenshuai.xi
2694*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_AUTO_EQ_PROCESS, MHL_AUTO_EQ_PROCESS_TIME);
2695*53ee8cc1Swenshuai.xi }
2696*53ee8cc1Swenshuai.xi #endif
2697*53ee8cc1Swenshuai.xi }
2698*53ee8cc1Swenshuai.xi else if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG))
2699*53ee8cc1Swenshuai.xi {
2700*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
2701*53ee8cc1Swenshuai.xi }
2702*53ee8cc1Swenshuai.xi
2703*53ee8cc1Swenshuai.xi mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, _mdrv_mhl_DisplayCommandCheckFlag(pMHLResourcePrivate), &(pMHLResourcePrivate->stSignalStatusInfo));
2704*53ee8cc1Swenshuai.xi }
2705*53ee8cc1Swenshuai.xi else // Cbus disconnection
2706*53ee8cc1Swenshuai.xi {
2707*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
2708*53ee8cc1Swenshuai.xi {
2709*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLowProc(pMHLResourcePrivate->ucMHLSupportPath);
2710*53ee8cc1Swenshuai.xi
2711*53ee8cc1Swenshuai.xi mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
2712*53ee8cc1Swenshuai.xi
2713*53ee8cc1Swenshuai.xi _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_CONNECT_LOSS_FLAG);
2714*53ee8cc1Swenshuai.xi
2715*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
2716*53ee8cc1Swenshuai.xi {
2717*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
2718*53ee8cc1Swenshuai.xi
2719*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_NORMAL_24BIT;
2720*53ee8cc1Swenshuai.xi }
2721*53ee8cc1Swenshuai.xi
2722*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Cbus stuck to low @@ port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2723*53ee8cc1Swenshuai.xi
2724*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
2725*53ee8cc1Swenshuai.xi }
2726*53ee8cc1Swenshuai.xi }
2727*53ee8cc1Swenshuai.xi }
2728*53ee8cc1Swenshuai.xi else // Cable unplugged
2729*53ee8cc1Swenshuai.xi {
2730*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
2731*53ee8cc1Swenshuai.xi {
2732*53ee8cc1Swenshuai.xi mhal_mhl_CableRemoveProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
2733*53ee8cc1Swenshuai.xi
2734*53ee8cc1Swenshuai.xi mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, MHL_ECBUS_EVENT_STUCK_TO_LOW, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2735*53ee8cc1Swenshuai.xi
2736*53ee8cc1Swenshuai.xi _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_CABLE_LOSS_FLAG);
2737*53ee8cc1Swenshuai.xi
2738*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Cable remove~~~ port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2739*53ee8cc1Swenshuai.xi
2740*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
2741*53ee8cc1Swenshuai.xi
2742*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
2743*53ee8cc1Swenshuai.xi {
2744*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
2745*53ee8cc1Swenshuai.xi }
2746*53ee8cc1Swenshuai.xi }
2747*53ee8cc1Swenshuai.xi
2748*53ee8cc1Swenshuai.xi mhal_mhl_Accumulator_Clr(pMHLResourcePrivate->ucMHLSupportPath);
2749*53ee8cc1Swenshuai.xi }
2750*53ee8cc1Swenshuai.xi
2751*53ee8cc1Swenshuai.xi // For source change
2752*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucCurrentHDMIPort != ucCurrentHDMIPort)
2753*53ee8cc1Swenshuai.xi {
2754*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG))
2755*53ee8cc1Swenshuai.xi {
2756*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
2757*53ee8cc1Swenshuai.xi {
2758*53ee8cc1Swenshuai.xi bSourceChangeFlag = TRUE;
2759*53ee8cc1Swenshuai.xi }
2760*53ee8cc1Swenshuai.xi else if(!mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath))
2761*53ee8cc1Swenshuai.xi {
2762*53ee8cc1Swenshuai.xi bSourceChangeFlag = TRUE;
2763*53ee8cc1Swenshuai.xi }
2764*53ee8cc1Swenshuai.xi
2765*53ee8cc1Swenshuai.xi if(bSourceChangeFlag)
2766*53ee8cc1Swenshuai.xi {
2767*53ee8cc1Swenshuai.xi mhal_mhl_SourceChangeProc(pMHLResourcePrivate->ucMHLSupportPath, pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate);
2768*53ee8cc1Swenshuai.xi
2769*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
2770*53ee8cc1Swenshuai.xi {
2771*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
2772*53ee8cc1Swenshuai.xi }
2773*53ee8cc1Swenshuai.xi }
2774*53ee8cc1Swenshuai.xi
2775*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG);
2776*53ee8cc1Swenshuai.xi }
2777*53ee8cc1Swenshuai.xi
2778*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucCurrentHDMIPort = ucCurrentHDMIPort;
2779*53ee8cc1Swenshuai.xi }
2780*53ee8cc1Swenshuai.xi
2781*53ee8cc1Swenshuai.xi // Normal Cbus engine
2782*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG))
2783*53ee8cc1Swenshuai.xi {
2784*53ee8cc1Swenshuai.xi mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
2785*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_HW_DETECT);
2786*53ee8cc1Swenshuai.xi mhal_mhl_CbusFloating(FALSE);
2787*53ee8cc1Swenshuai.xi
2788*53ee8cc1Swenshuai.xi _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_CABLE_LOSS_FLAG);
2789*53ee8cc1Swenshuai.xi
2790*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG);
2791*53ee8cc1Swenshuai.xi
2792*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_START;
2793*53ee8cc1Swenshuai.xi }
2794*53ee8cc1Swenshuai.xi
2795*53ee8cc1Swenshuai.xi _mdrv_mhl_PowerOnPatchProc(pMHLResourcePrivate);
2796*53ee8cc1Swenshuai.xi }
2797*53ee8cc1Swenshuai.xi
2798*53ee8cc1Swenshuai.xi //**************************************************************************
2799*53ee8cc1Swenshuai.xi // [Function Name]:
2800*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetCbusReceiveMSC()
2801*53ee8cc1Swenshuai.xi // [Description]:
2802*53ee8cc1Swenshuai.xi //
2803*53ee8cc1Swenshuai.xi // [Arguments]:
2804*53ee8cc1Swenshuai.xi //
2805*53ee8cc1Swenshuai.xi // [Return]:
2806*53ee8cc1Swenshuai.xi //
2807*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetCbusReceiveMSC(MS_U8 * ucReceiveMSC)2808*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetCbusReceiveMSC(MS_U8 *ucReceiveMSC)
2809*53ee8cc1Swenshuai.xi {
2810*53ee8cc1Swenshuai.xi MS_BOOL bGetMSCFlag = FALSE;
2811*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
2812*53ee8cc1Swenshuai.xi MS_U16 usLength = 0;
2813*53ee8cc1Swenshuai.xi MS_U16 usValue = 0;
2814*53ee8cc1Swenshuai.xi
2815*53ee8cc1Swenshuai.xi usLength = (mhal_mhl_GetSRAMReceiveData()) &BMASK(6:0); // Get MSC command length
2816*53ee8cc1Swenshuai.xi
2817*53ee8cc1Swenshuai.xi if(usLength > 0)
2818*53ee8cc1Swenshuai.xi {
2819*53ee8cc1Swenshuai.xi ucReceiveMSC[0] = usLength -1;
2820*53ee8cc1Swenshuai.xi
2821*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2822*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_DEBUG(" MHL receive MSG length = %x\r\n", (usLength &BMASK(7:0)));
2823*53ee8cc1Swenshuai.xi #endif
2824*53ee8cc1Swenshuai.xi
2825*53ee8cc1Swenshuai.xi usValue = mhal_mhl_GetSRAMReceiveData(); // Get MSC command
2826*53ee8cc1Swenshuai.xi
2827*53ee8cc1Swenshuai.xi if(usValue &BIT(8))
2828*53ee8cc1Swenshuai.xi {
2829*53ee8cc1Swenshuai.xi ucReceiveMSC[1] = usValue &BMASK(7:0);
2830*53ee8cc1Swenshuai.xi
2831*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2832*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_DEBUG(" MHL receive MSG command = %x\r\n", (usValue &BMASK(7:0)));
2833*53ee8cc1Swenshuai.xi #endif
2834*53ee8cc1Swenshuai.xi }
2835*53ee8cc1Swenshuai.xi else
2836*53ee8cc1Swenshuai.xi {
2837*53ee8cc1Swenshuai.xi ucReceiveMSC[0] = 2;
2838*53ee8cc1Swenshuai.xi ucReceiveMSC[1] = MSC_ACK;
2839*53ee8cc1Swenshuai.xi ucReceiveMSC[2] = usValue &BMASK(7:0);
2840*53ee8cc1Swenshuai.xi
2841*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2842*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_DEBUG(" MHL receive MSG data = %x\r\n", (usValue &BMASK(7:0)));
2843*53ee8cc1Swenshuai.xi #endif
2844*53ee8cc1Swenshuai.xi }
2845*53ee8cc1Swenshuai.xi
2846*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < (usLength -2); uctemp++)
2847*53ee8cc1Swenshuai.xi {
2848*53ee8cc1Swenshuai.xi usValue = mhal_mhl_GetSRAMReceiveData(); // Get MSC data
2849*53ee8cc1Swenshuai.xi
2850*53ee8cc1Swenshuai.xi if((usValue &BIT(8)) == BIT(8)) // Command in data error happen
2851*53ee8cc1Swenshuai.xi {
2852*53ee8cc1Swenshuai.xi // For CTS 6.3.6.5 entry 4
2853*53ee8cc1Swenshuai.xi if((usValue &BMASK(7:0)) == MSC_ABORT)
2854*53ee8cc1Swenshuai.xi {
2855*53ee8cc1Swenshuai.xi ucReceiveMSC[1] = usValue &BMASK(7:0);
2856*53ee8cc1Swenshuai.xi }
2857*53ee8cc1Swenshuai.xi else if((usValue &BMASK(7:0)) == MSC_EOF)
2858*53ee8cc1Swenshuai.xi {
2859*53ee8cc1Swenshuai.xi // EOF is command but it is not error
2860*53ee8cc1Swenshuai.xi ucReceiveMSC[uctemp +2] = usValue &BMASK(7:0);
2861*53ee8cc1Swenshuai.xi }
2862*53ee8cc1Swenshuai.xi else // Ignort command
2863*53ee8cc1Swenshuai.xi {
2864*53ee8cc1Swenshuai.xi ucReceiveMSC[1] = MSC_NONE;
2865*53ee8cc1Swenshuai.xi }
2866*53ee8cc1Swenshuai.xi
2867*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2868*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_DEBUG(" MHL receive MSG command = %x\r\n", (usValue &BMASK(7:0)));
2869*53ee8cc1Swenshuai.xi #endif
2870*53ee8cc1Swenshuai.xi }
2871*53ee8cc1Swenshuai.xi else
2872*53ee8cc1Swenshuai.xi {
2873*53ee8cc1Swenshuai.xi ucReceiveMSC[uctemp +2] = usValue &BMASK(7:0);
2874*53ee8cc1Swenshuai.xi
2875*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2876*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_DEBUG(" MHL receive MSG data = %x\r\n", (usValue &BMASK(7:0)));
2877*53ee8cc1Swenshuai.xi #endif
2878*53ee8cc1Swenshuai.xi }
2879*53ee8cc1Swenshuai.xi }
2880*53ee8cc1Swenshuai.xi
2881*53ee8cc1Swenshuai.xi bGetMSCFlag = TRUE;
2882*53ee8cc1Swenshuai.xi }
2883*53ee8cc1Swenshuai.xi
2884*53ee8cc1Swenshuai.xi return bGetMSCFlag;
2885*53ee8cc1Swenshuai.xi }
2886*53ee8cc1Swenshuai.xi
2887*53ee8cc1Swenshuai.xi //**************************************************************************
2888*53ee8cc1Swenshuai.xi // [Function Name]:
2889*53ee8cc1Swenshuai.xi // _mdrv_mhl_SetReceiveCaseFlag()
2890*53ee8cc1Swenshuai.xi // [Description]:
2891*53ee8cc1Swenshuai.xi //
2892*53ee8cc1Swenshuai.xi // [Arguments]:
2893*53ee8cc1Swenshuai.xi //
2894*53ee8cc1Swenshuai.xi // [Return]:
2895*53ee8cc1Swenshuai.xi //
2896*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SetReceiveCaseFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * ucReceiveMSC)2897*53ee8cc1Swenshuai.xi void _mdrv_mhl_SetReceiveCaseFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *ucReceiveMSC)
2898*53ee8cc1Swenshuai.xi {
2899*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
2900*53ee8cc1Swenshuai.xi
2901*53ee8cc1Swenshuai.xi switch(ucReceiveMSC[1])
2902*53ee8cc1Swenshuai.xi {
2903*53ee8cc1Swenshuai.xi case MSC_ACK:
2904*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ACK_FLAG);
2905*53ee8cc1Swenshuai.xi
2906*53ee8cc1Swenshuai.xi if(ucReceiveMSC[0] == 2) // Command length = 2
2907*53ee8cc1Swenshuai.xi {
2908*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG))
2909*53ee8cc1Swenshuai.xi {
2910*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
2911*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
2912*53ee8cc1Swenshuai.xi
2913*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucAskData = ucReceiveMSC[2];
2914*53ee8cc1Swenshuai.xi }
2915*53ee8cc1Swenshuai.xi }
2916*53ee8cc1Swenshuai.xi
2917*53ee8cc1Swenshuai.xi break;
2918*53ee8cc1Swenshuai.xi
2919*53ee8cc1Swenshuai.xi case MSC_ABORT:
2920*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ABORT_FLAG);
2921*53ee8cc1Swenshuai.xi break;
2922*53ee8cc1Swenshuai.xi
2923*53ee8cc1Swenshuai.xi case MSC_MSC_MSG:
2924*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSG_FLAG);
2925*53ee8cc1Swenshuai.xi
2926*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucMSGData[0] = ucReceiveMSC[2];
2927*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucMSGData[1] = ucReceiveMSC[3];
2928*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usMSGKeyInfo = (MS_U16)(ucReceiveMSC[2] << 8)| ucReceiveMSC[3];
2929*53ee8cc1Swenshuai.xi
2930*53ee8cc1Swenshuai.xi break;
2931*53ee8cc1Swenshuai.xi
2932*53ee8cc1Swenshuai.xi case MSC_WRITE_STAT_OR_SET_INT:
2933*53ee8cc1Swenshuai.xi if(ucReceiveMSC[2] == 0x31) // Switch to PP mode or 24 bit mode
2934*53ee8cc1Swenshuai.xi {
2935*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(3)) == BIT(3))
2936*53ee8cc1Swenshuai.xi {
2937*53ee8cc1Swenshuai.xi //SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PATH_EN_FLAG);
2938*53ee8cc1Swenshuai.xi }
2939*53ee8cc1Swenshuai.xi
2940*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(4)) == BIT(4))
2941*53ee8cc1Swenshuai.xi {
2942*53ee8cc1Swenshuai.xi //SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MUTED_FLAG);
2943*53ee8cc1Swenshuai.xi }
2944*53ee8cc1Swenshuai.xi
2945*53ee8cc1Swenshuai.xi ucReceiveMSC[3] &= BMASK(2:0);
2946*53ee8cc1Swenshuai.xi
2947*53ee8cc1Swenshuai.xi if(ucReceiveMSC[3] == MHL_PHY_CLOCK_PACKET_PIXEL)
2948*53ee8cc1Swenshuai.xi {
2949*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
2950*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
2951*53ee8cc1Swenshuai.xi }
2952*53ee8cc1Swenshuai.xi else if(ucReceiveMSC[3] == MHL_PHY_CLOCK_NORMAL_24BIT)
2953*53ee8cc1Swenshuai.xi {
2954*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
2955*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
2956*53ee8cc1Swenshuai.xi }
2957*53ee8cc1Swenshuai.xi }
2958*53ee8cc1Swenshuai.xi
2959*53ee8cc1Swenshuai.xi if(ucReceiveMSC[2] == 0x30)
2960*53ee8cc1Swenshuai.xi {
2961*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(0)) == BIT(0)) // Devcap ready
2962*53ee8cc1Swenshuai.xi {
2963*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
2964*53ee8cc1Swenshuai.xi }
2965*53ee8cc1Swenshuai.xi
2966*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(1)) == BIT(1)) // Extended device capability support
2967*53ee8cc1Swenshuai.xi {
2968*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
2969*53ee8cc1Swenshuai.xi {
2970*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
2971*53ee8cc1Swenshuai.xi }
2972*53ee8cc1Swenshuai.xi }
2973*53ee8cc1Swenshuai.xi }
2974*53ee8cc1Swenshuai.xi
2975*53ee8cc1Swenshuai.xi if((ucReceiveMSC[2] == 0x32) && (ucReceiveMSC[3] >= 0x30)) // Source support MHL3
2976*53ee8cc1Swenshuai.xi {
2977*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG);
2978*53ee8cc1Swenshuai.xi }
2979*53ee8cc1Swenshuai.xi
2980*53ee8cc1Swenshuai.xi if(ucReceiveMSC[2] == 0x20)
2981*53ee8cc1Swenshuai.xi {
2982*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(0)) == BIT(0)) // Devcap change
2983*53ee8cc1Swenshuai.xi {
2984*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
2985*53ee8cc1Swenshuai.xi
2986*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
2987*53ee8cc1Swenshuai.xi {
2988*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
2989*53ee8cc1Swenshuai.xi }
2990*53ee8cc1Swenshuai.xi }
2991*53ee8cc1Swenshuai.xi
2992*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(1)) == BIT(1)) // Scratchpad register change
2993*53ee8cc1Swenshuai.xi {
2994*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DSCR_CHANGE_FLAG);
2995*53ee8cc1Swenshuai.xi }
2996*53ee8cc1Swenshuai.xi
2997*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(2)) == BIT(2)) // Burst write request
2998*53ee8cc1Swenshuai.xi {
2999*53ee8cc1Swenshuai.xi //SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_REQUEST_FLAG);
3000*53ee8cc1Swenshuai.xi }
3001*53ee8cc1Swenshuai.xi
3002*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(3)) == BIT(3)) // Burst write grant
3003*53ee8cc1Swenshuai.xi {
3004*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_GRANT_FLAG);
3005*53ee8cc1Swenshuai.xi }
3006*53ee8cc1Swenshuai.xi
3007*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(4)) == BIT(4)) // 3D request
3008*53ee8cc1Swenshuai.xi {
3009*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
3010*53ee8cc1Swenshuai.xi }
3011*53ee8cc1Swenshuai.xi
3012*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(5)) == BIT(5)) // Feature request
3013*53ee8cc1Swenshuai.xi {
3014*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_REQUEST_FLAG);
3015*53ee8cc1Swenshuai.xi }
3016*53ee8cc1Swenshuai.xi
3017*53ee8cc1Swenshuai.xi if((ucReceiveMSC[3] & BIT(6)) == BIT(6)) // Feature complete
3018*53ee8cc1Swenshuai.xi {
3019*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_COMPLETE_FLAG);
3020*53ee8cc1Swenshuai.xi }
3021*53ee8cc1Swenshuai.xi }
3022*53ee8cc1Swenshuai.xi
3023*53ee8cc1Swenshuai.xi break;
3024*53ee8cc1Swenshuai.xi
3025*53ee8cc1Swenshuai.xi case MSC_WRITE_XSTAT:
3026*53ee8cc1Swenshuai.xi if(ucReceiveMSC[2] == 0x90) // eCbus mode
3027*53ee8cc1Swenshuai.xi {
3028*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ECBUS_MODE_FLAG);
3029*53ee8cc1Swenshuai.xi }
3030*53ee8cc1Swenshuai.xi
3031*53ee8cc1Swenshuai.xi if(ucReceiveMSC[2] == 0x92) // Link rate
3032*53ee8cc1Swenshuai.xi {
3033*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_LINK_RATE_FLAG);
3034*53ee8cc1Swenshuai.xi
3035*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate = ucReceiveMSC[3];
3036*53ee8cc1Swenshuai.xi }
3037*53ee8cc1Swenshuai.xi
3038*53ee8cc1Swenshuai.xi break;
3039*53ee8cc1Swenshuai.xi
3040*53ee8cc1Swenshuai.xi case MSC_WRITE_BURST:
3041*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_BURST_FLAG);
3042*53ee8cc1Swenshuai.xi
3043*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstAddress = ucReceiveMSC[2];
3044*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstLength = MHL_MSC_SCRATCHPAD_SIZE +1;
3045*53ee8cc1Swenshuai.xi
3046*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < (MHL_MSC_SCRATCHPAD_SIZE +1); uctemp++)
3047*53ee8cc1Swenshuai.xi {
3048*53ee8cc1Swenshuai.xi if(uctemp < pMHLResourcePrivate->ucWriteBurstLength)
3049*53ee8cc1Swenshuai.xi {
3050*53ee8cc1Swenshuai.xi if((ucReceiveMSC[uctemp +3] == MSC_EOF) && (uctemp >= (ucReceiveMSC[0] -3)))
3051*53ee8cc1Swenshuai.xi {
3052*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstInformation[uctemp] = 0;
3053*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstLength = uctemp;
3054*53ee8cc1Swenshuai.xi }
3055*53ee8cc1Swenshuai.xi else
3056*53ee8cc1Swenshuai.xi {
3057*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstInformation[uctemp] = ucReceiveMSC[uctemp +3];
3058*53ee8cc1Swenshuai.xi }
3059*53ee8cc1Swenshuai.xi }
3060*53ee8cc1Swenshuai.xi else if(uctemp < MHL_MSC_SCRATCHPAD_SIZE)
3061*53ee8cc1Swenshuai.xi {
3062*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstInformation[uctemp] = 0;
3063*53ee8cc1Swenshuai.xi }
3064*53ee8cc1Swenshuai.xi }
3065*53ee8cc1Swenshuai.xi
3066*53ee8cc1Swenshuai.xi break;
3067*53ee8cc1Swenshuai.xi
3068*53ee8cc1Swenshuai.xi default:
3069*53ee8cc1Swenshuai.xi
3070*53ee8cc1Swenshuai.xi break;
3071*53ee8cc1Swenshuai.xi };
3072*53ee8cc1Swenshuai.xi }
3073*53ee8cc1Swenshuai.xi
3074*53ee8cc1Swenshuai.xi //**************************************************************************
3075*53ee8cc1Swenshuai.xi // [Function Name]:
3076*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusDisplayLinkCheck()
3077*53ee8cc1Swenshuai.xi // [Description]
3078*53ee8cc1Swenshuai.xi //
3079*53ee8cc1Swenshuai.xi // [Arguments]:
3080*53ee8cc1Swenshuai.xi //
3081*53ee8cc1Swenshuai.xi // [Return]:
3082*53ee8cc1Swenshuai.xi //
3083*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusDisplayLinkCheck(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3084*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusDisplayLinkCheck(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3085*53ee8cc1Swenshuai.xi {
3086*53ee8cc1Swenshuai.xi MS_U8 ucDisplayIndex = (pMHLResourcePrivate->usDisplayIndex) &BMASK(7:0);
3087*53ee8cc1Swenshuai.xi MS_U8 ucDisplayMask = MHL_CBUS_DISPLAY_MASK;
3088*53ee8cc1Swenshuai.xi MS_U16 usDisplayCheck = (pMHLResourcePrivate->usDisplayIndex) >> MHL_CBUS_DISPLAY_MASK_SHIFT;
3089*53ee8cc1Swenshuai.xi
3090*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
3091*53ee8cc1Swenshuai.xi {
3092*53ee8cc1Swenshuai.xi ucDisplayMask = ucDisplayMask |MHL_ECBUS_DISPLAY_MASK;
3093*53ee8cc1Swenshuai.xi }
3094*53ee8cc1Swenshuai.xi
3095*53ee8cc1Swenshuai.xi if((ucDisplayIndex ^ usDisplayCheck) > 0)
3096*53ee8cc1Swenshuai.xi {
3097*53ee8cc1Swenshuai.xi usDisplayCheck = usDisplayCheck ^ ucDisplayMask;
3098*53ee8cc1Swenshuai.xi
3099*53ee8cc1Swenshuai.xi if(usDisplayCheck > 0)
3100*53ee8cc1Swenshuai.xi {
3101*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usDisplayIndex |= (_mdrv_mhl_CbusGetLeastFlag(usDisplayCheck) << MHL_CBUS_DISPLAY_MASK_SHIFT);
3102*53ee8cc1Swenshuai.xi
3103*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL Cbus Receive ACK for Link\r\n");
3104*53ee8cc1Swenshuai.xi }
3105*53ee8cc1Swenshuai.xi }
3106*53ee8cc1Swenshuai.xi }
3107*53ee8cc1Swenshuai.xi
3108*53ee8cc1Swenshuai.xi //**************************************************************************
3109*53ee8cc1Swenshuai.xi // [Function Name]:
3110*53ee8cc1Swenshuai.xi // _mdrv_mhl_ParsingWriteBurstVCAssign()
3111*53ee8cc1Swenshuai.xi // [Description]:
3112*53ee8cc1Swenshuai.xi //
3113*53ee8cc1Swenshuai.xi // [Arguments]:
3114*53ee8cc1Swenshuai.xi //
3115*53ee8cc1Swenshuai.xi // [Return]:
3116*53ee8cc1Swenshuai.xi //
3117*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstVCAssign(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3118*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_ParsingWriteBurstVCAssign(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3119*53ee8cc1Swenshuai.xi {
3120*53ee8cc1Swenshuai.xi MS_BOOL bParsingFinish = FALSE;
3121*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
3122*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstInformation[4];
3123*53ee8cc1Swenshuai.xi MS_U8 ucNumberEntry = pMHLResourcePrivate->ucWriteBurstInformation[5];
3124*53ee8cc1Swenshuai.xi
3125*53ee8cc1Swenshuai.xi if(ucNumberEntry +(ucSequence -1) *MHL_VC_SEQUENCE_LENGTH == pMHLResourcePrivate->ucWriteBurstInformation[3]) // Number entry + (sequece -1) x length = total entry
3126*53ee8cc1Swenshuai.xi {
3127*53ee8cc1Swenshuai.xi bParsingFinish = TRUE;
3128*53ee8cc1Swenshuai.xi }
3129*53ee8cc1Swenshuai.xi
3130*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <ucNumberEntry; uctemp++)
3131*53ee8cc1Swenshuai.xi {
3132*53ee8cc1Swenshuai.xi _mdrv_mhl_InsertVCInformation(pMHLResourcePrivate, TRUE, pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +3], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +4], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +5]);
3133*53ee8cc1Swenshuai.xi }
3134*53ee8cc1Swenshuai.xi
3135*53ee8cc1Swenshuai.xi return bParsingFinish;
3136*53ee8cc1Swenshuai.xi }
3137*53ee8cc1Swenshuai.xi
3138*53ee8cc1Swenshuai.xi //**************************************************************************
3139*53ee8cc1Swenshuai.xi // [Function Name]:
3140*53ee8cc1Swenshuai.xi // _mdrv_mhl_ParsingWriteBurstVCConfirm()
3141*53ee8cc1Swenshuai.xi // [Description]:
3142*53ee8cc1Swenshuai.xi //
3143*53ee8cc1Swenshuai.xi // [Arguments]:
3144*53ee8cc1Swenshuai.xi //
3145*53ee8cc1Swenshuai.xi // [Return]:
3146*53ee8cc1Swenshuai.xi //
3147*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstVCConfirm(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3148*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingWriteBurstVCConfirm(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3149*53ee8cc1Swenshuai.xi {
3150*53ee8cc1Swenshuai.xi MS_BOOL bParsingFinish = FALSE;
3151*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
3152*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstInformation[4];
3153*53ee8cc1Swenshuai.xi MS_U8 ucNumberEntry = pMHLResourcePrivate->ucWriteBurstInformation[5];
3154*53ee8cc1Swenshuai.xi
3155*53ee8cc1Swenshuai.xi if(ucNumberEntry +(ucSequence -1) *MHL_VC_SEQUENCE_LENGTH == pMHLResourcePrivate->ucWriteBurstInformation[3]) // Number entry + (sequece -1) x length = total entry
3156*53ee8cc1Swenshuai.xi {
3157*53ee8cc1Swenshuai.xi bParsingFinish = TRUE;
3158*53ee8cc1Swenshuai.xi }
3159*53ee8cc1Swenshuai.xi
3160*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <ucNumberEntry; uctemp++)
3161*53ee8cc1Swenshuai.xi {
3162*53ee8cc1Swenshuai.xi _mdrv_mhl_CheckVCInformation(pMHLResourcePrivate, pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +3], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +4], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +5]);
3163*53ee8cc1Swenshuai.xi }
3164*53ee8cc1Swenshuai.xi
3165*53ee8cc1Swenshuai.xi if(bParsingFinish)
3166*53ee8cc1Swenshuai.xi {
3167*53ee8cc1Swenshuai.xi _mdrv_mhl_SortingVCInformation(pMHLResourcePrivate, TRUE);
3168*53ee8cc1Swenshuai.xi
3169*53ee8cc1Swenshuai.xi _mdrv_mhl_eCbusTimeSlotAllocation(pMHLResourcePrivate);
3170*53ee8cc1Swenshuai.xi }
3171*53ee8cc1Swenshuai.xi }
3172*53ee8cc1Swenshuai.xi
3173*53ee8cc1Swenshuai.xi //**************************************************************************
3174*53ee8cc1Swenshuai.xi // [Function Name]:
3175*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckAVLineVideoMode()
3176*53ee8cc1Swenshuai.xi // [Description]:
3177*53ee8cc1Swenshuai.xi //
3178*53ee8cc1Swenshuai.xi // [Arguments]:
3179*53ee8cc1Swenshuai.xi //
3180*53ee8cc1Swenshuai.xi // [Return]:
3181*53ee8cc1Swenshuai.xi //
3182*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckAVLineVideoMode(MS_U8 ucAVLinkVideoMode)3183*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CheckAVLineVideoMode(MS_U8 ucAVLinkVideoMode)
3184*53ee8cc1Swenshuai.xi {
3185*53ee8cc1Swenshuai.xi MS_U8 ucFrameRate = 1;
3186*53ee8cc1Swenshuai.xi
3187*53ee8cc1Swenshuai.xi switch(ucAVLinkVideoMode)
3188*53ee8cc1Swenshuai.xi {
3189*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX1:
3190*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX2:
3191*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX3:
3192*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX4:
3193*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX5:
3194*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX6:
3195*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX7:
3196*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX16:
3197*53ee8cc1Swenshuai.xi ucFrameRate = 60;
3198*53ee8cc1Swenshuai.xi break;
3199*53ee8cc1Swenshuai.xi
3200*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX17:
3201*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX18:
3202*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX19:
3203*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX20:
3204*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX21:
3205*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX22:
3206*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX31:
3207*53ee8cc1Swenshuai.xi ucFrameRate = 50;
3208*53ee8cc1Swenshuai.xi break;
3209*53ee8cc1Swenshuai.xi
3210*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX34:
3211*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX95:
3212*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX100:
3213*53ee8cc1Swenshuai.xi ucFrameRate = 30;
3214*53ee8cc1Swenshuai.xi break;
3215*53ee8cc1Swenshuai.xi
3216*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX63:
3217*53ee8cc1Swenshuai.xi ucFrameRate = 120;
3218*53ee8cc1Swenshuai.xi break;
3219*53ee8cc1Swenshuai.xi
3220*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX64:
3221*53ee8cc1Swenshuai.xi ucFrameRate = 100;
3222*53ee8cc1Swenshuai.xi break;
3223*53ee8cc1Swenshuai.xi
3224*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX93:
3225*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX98:
3226*53ee8cc1Swenshuai.xi ucFrameRate = 24;
3227*53ee8cc1Swenshuai.xi break;
3228*53ee8cc1Swenshuai.xi
3229*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX94:
3230*53ee8cc1Swenshuai.xi case MHL_VIC_INDEX99:
3231*53ee8cc1Swenshuai.xi ucFrameRate = 25;
3232*53ee8cc1Swenshuai.xi break;
3233*53ee8cc1Swenshuai.xi
3234*53ee8cc1Swenshuai.xi default:
3235*53ee8cc1Swenshuai.xi
3236*53ee8cc1Swenshuai.xi break;
3237*53ee8cc1Swenshuai.xi };
3238*53ee8cc1Swenshuai.xi
3239*53ee8cc1Swenshuai.xi return ucFrameRate;
3240*53ee8cc1Swenshuai.xi }
3241*53ee8cc1Swenshuai.xi
3242*53ee8cc1Swenshuai.xi //**************************************************************************
3243*53ee8cc1Swenshuai.xi // [Function Name]:
3244*53ee8cc1Swenshuai.xi // _mdrv_mhl_ParsingWriteBurstBISTSetup()
3245*53ee8cc1Swenshuai.xi // [Description]:
3246*53ee8cc1Swenshuai.xi //
3247*53ee8cc1Swenshuai.xi // [Arguments]:
3248*53ee8cc1Swenshuai.xi //
3249*53ee8cc1Swenshuai.xi // [Return]:
3250*53ee8cc1Swenshuai.xi //
3251*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstBISTSetup(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3252*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingWriteBurstBISTSetup(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3253*53ee8cc1Swenshuai.xi {
3254*53ee8cc1Swenshuai.xi MS_U8 ucReadyIndex = 0x70;
3255*53ee8cc1Swenshuai.xi MS_U8 ucBISTeCbusPattern = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_ECBUS_SPEEDS];
3256*53ee8cc1Swenshuai.xi MS_U8 ucBISTAVLinkRate = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_TMDS_SPEEDS];
3257*53ee8cc1Swenshuai.xi MS_U16 usBISTeCbusPatternFixed = 0;
3258*53ee8cc1Swenshuai.xi MS_U16 usBISTAVLinkFixed = 0;
3259*53ee8cc1Swenshuai.xi MS_U16 usBISTeCbusDuration = 0;
3260*53ee8cc1Swenshuai.xi MS_U16 usBISTAVLinkDuration = 0;
3261*53ee8cc1Swenshuai.xi
3262*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[0]: BIST_SETUP_H
3263*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[1]: BIST_SETUP_L
3264*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[2]: CHECK_SUM
3265*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[3]: eCBUS_DURATION
3266*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[4]: eCBUS_PATTERN
3267*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[5]: eCBUS_FIXED_H
3268*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[6]: eCBUS_FIXED_L
3269*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[7]: Reserved
3270*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[8]: AV LINK_DATA_RATE
3271*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[9]: AV LINK_PATTERN
3272*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[10]: AV LINK_VIDEO_MODE
3273*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[11]: AV LINK_DURATION
3274*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[12]: AV LINK_FIXED_H
3275*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[13]: AV LINK_FIXED_L
3276*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[14]: AV LINK_RANDOMIZER
3277*53ee8cc1Swenshuai.xi // ucWriteBurstInformation[15]: IMPEDANCE_MODE
3278*53ee8cc1Swenshuai.xi
3279*53ee8cc1Swenshuai.xi if((ucBISTeCbusPattern &BIT(4)) == BIT(4)) // MHL_ECBUS_D_150
3280*53ee8cc1Swenshuai.xi {
3281*53ee8cc1Swenshuai.xi ucBISTeCbusPattern = MHL_BIST_ECBUS_PATTERN_FIXED10;
3282*53ee8cc1Swenshuai.xi }
3283*53ee8cc1Swenshuai.xi else if((ucBISTeCbusPattern &BIT(0)) == BIT(0)) // MHL_ECBUS_S_075
3284*53ee8cc1Swenshuai.xi {
3285*53ee8cc1Swenshuai.xi ucBISTeCbusPattern = MHL_BIST_ECBUS_PATTERN_FIXED8;
3286*53ee8cc1Swenshuai.xi }
3287*53ee8cc1Swenshuai.xi else
3288*53ee8cc1Swenshuai.xi {
3289*53ee8cc1Swenshuai.xi ucBISTeCbusPattern = MHL_BIST_ECBUS_PATTERN_PRBS;
3290*53ee8cc1Swenshuai.xi }
3291*53ee8cc1Swenshuai.xi
3292*53ee8cc1Swenshuai.xi if((ucBISTAVLinkRate & BIT(2)) == BIT(2)) // MHL_TMDS_600
3293*53ee8cc1Swenshuai.xi {
3294*53ee8cc1Swenshuai.xi ucBISTAVLinkRate = MHL_BIST_AV_LINK_600;
3295*53ee8cc1Swenshuai.xi }
3296*53ee8cc1Swenshuai.xi else if((ucBISTAVLinkRate & BIT(1)) == BIT(1)) // MHL_TMDS_300
3297*53ee8cc1Swenshuai.xi {
3298*53ee8cc1Swenshuai.xi ucBISTAVLinkRate = MHL_BIST_AV_LINK_300;
3299*53ee8cc1Swenshuai.xi }
3300*53ee8cc1Swenshuai.xi else if((ucBISTAVLinkRate & BIT(0)) == BIT(0)) // MHL_TMDS_150
3301*53ee8cc1Swenshuai.xi {
3302*53ee8cc1Swenshuai.xi ucBISTAVLinkRate = MHL_BIST_AV_LINK_150;
3303*53ee8cc1Swenshuai.xi }
3304*53ee8cc1Swenshuai.xi else
3305*53ee8cc1Swenshuai.xi {
3306*53ee8cc1Swenshuai.xi ucBISTAVLinkRate = MHL_BIST_AV_LINK_RESERVED;
3307*53ee8cc1Swenshuai.xi }
3308*53ee8cc1Swenshuai.xi
3309*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstInformation[4] <= ucBISTeCbusPattern) // Check eCbus pattern
3310*53ee8cc1Swenshuai.xi {
3311*53ee8cc1Swenshuai.xi ucReadyIndex = MASKSET(ucReadyIndex, BIT(0), (BIT(0) |BIT(4)));
3312*53ee8cc1Swenshuai.xi
3313*53ee8cc1Swenshuai.xi ucBISTeCbusPattern = pMHLResourcePrivate->ucWriteBurstInformation[4];
3314*53ee8cc1Swenshuai.xi usBISTeCbusPatternFixed = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[5] <<8) |pMHLResourcePrivate->ucWriteBurstInformation[6];
3315*53ee8cc1Swenshuai.xi }
3316*53ee8cc1Swenshuai.xi
3317*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstInformation[8] <= ucBISTAVLinkRate) // Check AV link rate
3318*53ee8cc1Swenshuai.xi {
3319*53ee8cc1Swenshuai.xi ucReadyIndex = MASKSET(ucReadyIndex, BIT(1), (BIT(1) |BIT(5)));
3320*53ee8cc1Swenshuai.xi
3321*53ee8cc1Swenshuai.xi ucBISTAVLinkRate = pMHLResourcePrivate->ucWriteBurstInformation[8];
3322*53ee8cc1Swenshuai.xi usBISTAVLinkFixed = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[12] <<8) |pMHLResourcePrivate->ucWriteBurstInformation[13];
3323*53ee8cc1Swenshuai.xi }
3324*53ee8cc1Swenshuai.xi
3325*53ee8cc1Swenshuai.xi //if() // Unknow condition
3326*53ee8cc1Swenshuai.xi {
3327*53ee8cc1Swenshuai.xi ucReadyIndex = MASKSET(ucReadyIndex, BIT(2), (BIT(2) |BIT(6)));
3328*53ee8cc1Swenshuai.xi }
3329*53ee8cc1Swenshuai.xi
3330*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstInformation[3] == 0) // Check eCbus duration
3331*53ee8cc1Swenshuai.xi {
3332*53ee8cc1Swenshuai.xi // Can't allow
3333*53ee8cc1Swenshuai.xi }
3334*53ee8cc1Swenshuai.xi else
3335*53ee8cc1Swenshuai.xi {
3336*53ee8cc1Swenshuai.xi usBISTeCbusDuration = (MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[3] *1010ul;
3337*53ee8cc1Swenshuai.xi }
3338*53ee8cc1Swenshuai.xi
3339*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstInformation[9] <= MHL_BIST_LINK_PATTERN_FIXED8)
3340*53ee8cc1Swenshuai.xi {
3341*53ee8cc1Swenshuai.xi usBISTAVLinkDuration = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[11] *32 /_mdrv_mhl_CheckAVLineVideoMode(pMHLResourcePrivate->ucWriteBurstInformation[10]) +1) *1000;
3342*53ee8cc1Swenshuai.xi }
3343*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->ucWriteBurstInformation[9] == MHL_BIST_LINK_PATTERN_FIXED10)
3344*53ee8cc1Swenshuai.xi {
3345*53ee8cc1Swenshuai.xi usBISTAVLinkDuration = (MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[11] *1010ul;
3346*53ee8cc1Swenshuai.xi }
3347*53ee8cc1Swenshuai.xi
3348*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.ucBISTReadyIndex = ucReadyIndex;
3349*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.ucBISTeCbusPattern = ucBISTeCbusPattern;
3350*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusPatternFixed = usBISTeCbusPatternFixed;
3351*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration = usBISTeCbusDuration;
3352*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRate = ucBISTAVLinkRate;
3353*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkPattern = pMHLResourcePrivate->ucWriteBurstInformation[9];
3354*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkFixed = usBISTAVLinkFixed;
3355*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration = usBISTAVLinkDuration;
3356*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRateRandomizer = pMHLResourcePrivate->ucWriteBurstInformation[14];
3357*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.ucBISTImpedanceMode = pMHLResourcePrivate->ucWriteBurstInformation[15];
3358*53ee8cc1Swenshuai.xi
3359*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_BIST_MODE)
3360*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST eCbus pattern = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTeCbusPattern);
3361*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST eCbus fixed = %x\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusPatternFixed);
3362*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST eCbus duration = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration);
3363*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST AV link rate = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRate);
3364*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST AV link pattern = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkPattern);
3365*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST AV link fixed = %x\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkFixed);
3366*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST AV link duration = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration);
3367*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST AV link random = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRateRandomizer);
3368*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST Impedance mode = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTImpedanceMode);
3369*53ee8cc1Swenshuai.xi #endif
3370*53ee8cc1Swenshuai.xi }
3371*53ee8cc1Swenshuai.xi
3372*53ee8cc1Swenshuai.xi //**************************************************************************
3373*53ee8cc1Swenshuai.xi // [Function Name]:
3374*53ee8cc1Swenshuai.xi // _mdrv_mhl_ParsingWriteBurstInformation()
3375*53ee8cc1Swenshuai.xi // [Description]:
3376*53ee8cc1Swenshuai.xi //
3377*53ee8cc1Swenshuai.xi // [Arguments]:
3378*53ee8cc1Swenshuai.xi //
3379*53ee8cc1Swenshuai.xi // [Return]:
3380*53ee8cc1Swenshuai.xi //
3381*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3382*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingWriteBurstInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3383*53ee8cc1Swenshuai.xi {
3384*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
3385*53ee8cc1Swenshuai.xi MS_U8 ucCheckSum = 0;
3386*53ee8cc1Swenshuai.xi MS_U16 usWriteBurstID = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[0] <<8) |pMHLResourcePrivate->ucWriteBurstInformation[1];
3387*53ee8cc1Swenshuai.xi
3388*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp <MHL_MSC_SCRATCHPAD_SIZE; uctemp++)
3389*53ee8cc1Swenshuai.xi {
3390*53ee8cc1Swenshuai.xi ucCheckSum = ucCheckSum +pMHLResourcePrivate->ucWriteBurstInformation[uctemp];
3391*53ee8cc1Swenshuai.xi }
3392*53ee8cc1Swenshuai.xi
3393*53ee8cc1Swenshuai.xi if(ucCheckSum == 0)
3394*53ee8cc1Swenshuai.xi {
3395*53ee8cc1Swenshuai.xi switch(usWriteBurstID)
3396*53ee8cc1Swenshuai.xi {
3397*53ee8cc1Swenshuai.xi case MHL_BURST_ID_VC_ASSIGN:
3398*53ee8cc1Swenshuai.xi if(_mdrv_mhl_ParsingWriteBurstVCAssign(pMHLResourcePrivate))
3399*53ee8cc1Swenshuai.xi {
3400*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_VC_ASSIGN_FLAG);
3401*53ee8cc1Swenshuai.xi }
3402*53ee8cc1Swenshuai.xi break;
3403*53ee8cc1Swenshuai.xi
3404*53ee8cc1Swenshuai.xi case MHL_BURST_ID_VC_CONFIRM:
3405*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingWriteBurstVCConfirm(pMHLResourcePrivate);
3406*53ee8cc1Swenshuai.xi break;
3407*53ee8cc1Swenshuai.xi
3408*53ee8cc1Swenshuai.xi case MHL_BURST_ID_BIST_SETUP:
3409*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_RECEIVE_SETUP;
3410*53ee8cc1Swenshuai.xi
3411*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingWriteBurstBISTSetup(pMHLResourcePrivate);
3412*53ee8cc1Swenshuai.xi
3413*53ee8cc1Swenshuai.xi break;
3414*53ee8cc1Swenshuai.xi
3415*53ee8cc1Swenshuai.xi default:
3416*53ee8cc1Swenshuai.xi
3417*53ee8cc1Swenshuai.xi break;
3418*53ee8cc1Swenshuai.xi };
3419*53ee8cc1Swenshuai.xi }
3420*53ee8cc1Swenshuai.xi else
3421*53ee8cc1Swenshuai.xi {
3422*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL write burst check sum error port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3423*53ee8cc1Swenshuai.xi }
3424*53ee8cc1Swenshuai.xi }
3425*53ee8cc1Swenshuai.xi
3426*53ee8cc1Swenshuai.xi //**************************************************************************
3427*53ee8cc1Swenshuai.xi // [Function Name]:
3428*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusBISTTriggerProc()
3429*53ee8cc1Swenshuai.xi // [Description]
3430*53ee8cc1Swenshuai.xi //
3431*53ee8cc1Swenshuai.xi // [Arguments]:
3432*53ee8cc1Swenshuai.xi //
3433*53ee8cc1Swenshuai.xi // [Return]:
3434*53ee8cc1Swenshuai.xi //
3435*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTTriggerProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucKeyCode)3436*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTTriggerProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucKeyCode)
3437*53ee8cc1Swenshuai.xi {
3438*53ee8cc1Swenshuai.xi MS_BOOL bGeteCbusDuration = FALSE;
3439*53ee8cc1Swenshuai.xi MS_BOOL bGetAVLinkDuration = FALSE;
3440*53ee8cc1Swenshuai.xi MS_U8 ucBISTDeviceType = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_DEV_CAT] &BMASK(3:0);
3441*53ee8cc1Swenshuai.xi MS_U8 ucBISTeCbusSelect = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_ECBUS_SPEEDS];
3442*53ee8cc1Swenshuai.xi MS_U16 usTimerCount = 0;
3443*53ee8cc1Swenshuai.xi
3444*53ee8cc1Swenshuai.xi if(((ucKeyCode &BIT(3)) == BIT(3)) && ((ucBISTeCbusSelect &BIT(4)) != BIT(4))) // Not support eCbus-D
3445*53ee8cc1Swenshuai.xi {
3446*53ee8cc1Swenshuai.xi // Chip only support eCbus-S
3447*53ee8cc1Swenshuai.xi }
3448*53ee8cc1Swenshuai.xi
3449*53ee8cc1Swenshuai.xi if((ucKeyCode &BIT(0)) == BIT(0)) // Source device and eCbus Tx
3450*53ee8cc1Swenshuai.xi {
3451*53ee8cc1Swenshuai.xi bGeteCbusDuration = TRUE;
3452*53ee8cc1Swenshuai.xi
3453*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusTxFlag = TRUE;
3454*53ee8cc1Swenshuai.xi }
3455*53ee8cc1Swenshuai.xi else
3456*53ee8cc1Swenshuai.xi {
3457*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusTxFlag = FALSE;
3458*53ee8cc1Swenshuai.xi }
3459*53ee8cc1Swenshuai.xi
3460*53ee8cc1Swenshuai.xi if((ucKeyCode &BIT(1)) == BIT(1)) // Sink device and eCbus link Rx
3461*53ee8cc1Swenshuai.xi {
3462*53ee8cc1Swenshuai.xi bGeteCbusDuration = TRUE;
3463*53ee8cc1Swenshuai.xi
3464*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusRxFlag = TRUE;
3465*53ee8cc1Swenshuai.xi }
3466*53ee8cc1Swenshuai.xi else
3467*53ee8cc1Swenshuai.xi {
3468*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusRxFlag = FALSE;
3469*53ee8cc1Swenshuai.xi }
3470*53ee8cc1Swenshuai.xi
3471*53ee8cc1Swenshuai.xi if((ucBISTDeviceType == MHL_DEVICE_SOURCE) || (ucBISTDeviceType == MHL_DEVICE_DIRECT_ATTACH_SOURCE))
3472*53ee8cc1Swenshuai.xi {
3473*53ee8cc1Swenshuai.xi if((ucKeyCode &BIT(4)) == BIT(4)) // Source device and AV link Tx
3474*53ee8cc1Swenshuai.xi {
3475*53ee8cc1Swenshuai.xi
3476*53ee8cc1Swenshuai.xi }
3477*53ee8cc1Swenshuai.xi }
3478*53ee8cc1Swenshuai.xi else if((ucBISTDeviceType == MHL_DEVICE_SINK) || (ucBISTDeviceType == MHL_DEVICE_DIRECT_ATTACH_SINK))
3479*53ee8cc1Swenshuai.xi {
3480*53ee8cc1Swenshuai.xi if((ucKeyCode &BIT(6)) == BIT(6)) // Impedance test
3481*53ee8cc1Swenshuai.xi {
3482*53ee8cc1Swenshuai.xi bGeteCbusDuration = TRUE;
3483*53ee8cc1Swenshuai.xi }
3484*53ee8cc1Swenshuai.xi
3485*53ee8cc1Swenshuai.xi if((ucKeyCode &BIT(5)) == BIT(5)) // Sink device and AV link Rx
3486*53ee8cc1Swenshuai.xi {
3487*53ee8cc1Swenshuai.xi bGetAVLinkDuration = TRUE;
3488*53ee8cc1Swenshuai.xi }
3489*53ee8cc1Swenshuai.xi }
3490*53ee8cc1Swenshuai.xi
3491*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_WAIT_TRIGGER)
3492*53ee8cc1Swenshuai.xi {
3493*53ee8cc1Swenshuai.xi if(bGeteCbusDuration)
3494*53ee8cc1Swenshuai.xi {
3495*53ee8cc1Swenshuai.xi usTimerCount = pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration;
3496*53ee8cc1Swenshuai.xi }
3497*53ee8cc1Swenshuai.xi
3498*53ee8cc1Swenshuai.xi if(bGetAVLinkDuration)
3499*53ee8cc1Swenshuai.xi {
3500*53ee8cc1Swenshuai.xi if(usTimerCount < pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration)
3501*53ee8cc1Swenshuai.xi {
3502*53ee8cc1Swenshuai.xi usTimerCount = pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration;
3503*53ee8cc1Swenshuai.xi }
3504*53ee8cc1Swenshuai.xi }
3505*53ee8cc1Swenshuai.xi
3506*53ee8cc1Swenshuai.xi if(bGeteCbusDuration || bGetAVLinkDuration)
3507*53ee8cc1Swenshuai.xi {
3508*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_RECEIVE_TRIGGER;
3509*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration = usTimerCount;
3510*53ee8cc1Swenshuai.xi }
3511*53ee8cc1Swenshuai.xi }
3512*53ee8cc1Swenshuai.xi
3513*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL receive BIST trigger in port %c keycode %x\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucKeyCode);
3514*53ee8cc1Swenshuai.xi }
3515*53ee8cc1Swenshuai.xi
3516*53ee8cc1Swenshuai.xi //**************************************************************************
3517*53ee8cc1Swenshuai.xi // [Function Name]:
3518*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusBISTRequestStatusProc()
3519*53ee8cc1Swenshuai.xi // [Description]
3520*53ee8cc1Swenshuai.xi //
3521*53ee8cc1Swenshuai.xi // [Arguments]:
3522*53ee8cc1Swenshuai.xi //
3523*53ee8cc1Swenshuai.xi // [Return]:
3524*53ee8cc1Swenshuai.xi //
3525*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTRequestStatusProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucKeyCode)3526*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTRequestStatusProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucKeyCode)
3527*53ee8cc1Swenshuai.xi {
3528*53ee8cc1Swenshuai.xi //if(ucKeyCode == MHL_BIST_REQ_RETURN_STATUS)
3529*53ee8cc1Swenshuai.xi {
3530*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_REQUEST_STATUS;
3531*53ee8cc1Swenshuai.xi }
3532*53ee8cc1Swenshuai.xi
3533*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL receive BIST request status in port %c keycode %x\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucKeyCode);
3534*53ee8cc1Swenshuai.xi }
3535*53ee8cc1Swenshuai.xi
3536*53ee8cc1Swenshuai.xi //**************************************************************************
3537*53ee8cc1Swenshuai.xi // [Function Name]:
3538*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusBISTStopProc()
3539*53ee8cc1Swenshuai.xi // [Description]
3540*53ee8cc1Swenshuai.xi // Disable AV LINK_BIST when currently running
3541*53ee8cc1Swenshuai.xi // [Arguments]:
3542*53ee8cc1Swenshuai.xi //
3543*53ee8cc1Swenshuai.xi // [Return]:
3544*53ee8cc1Swenshuai.xi //
3545*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTStopProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucKeyCode)3546*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTStopProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucKeyCode)
3547*53ee8cc1Swenshuai.xi {
3548*53ee8cc1Swenshuai.xi if(ucKeyCode == 0) // Key code must be set to 0
3549*53ee8cc1Swenshuai.xi {
3550*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_ECBUS_SWITCH)
3551*53ee8cc1Swenshuai.xi {
3552*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_EVENT_FINISH;
3553*53ee8cc1Swenshuai.xi }
3554*53ee8cc1Swenshuai.xi }
3555*53ee8cc1Swenshuai.xi
3556*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL receive BIST stop in port %c keycode %x\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucKeyCode);
3557*53ee8cc1Swenshuai.xi }
3558*53ee8cc1Swenshuai.xi
3559*53ee8cc1Swenshuai.xi //**************************************************************************
3560*53ee8cc1Swenshuai.xi // [Function Name]:
3561*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusReceiveEventProc()
3562*53ee8cc1Swenshuai.xi // [Description]:
3563*53ee8cc1Swenshuai.xi //
3564*53ee8cc1Swenshuai.xi // [Arguments]:
3565*53ee8cc1Swenshuai.xi //
3566*53ee8cc1Swenshuai.xi // [Return]:
3567*53ee8cc1Swenshuai.xi //
3568*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusReceiveEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3569*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusReceiveEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3570*53ee8cc1Swenshuai.xi {
3571*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = 0;
3572*53ee8cc1Swenshuai.xi MS_U16 usTimeTick = MHL_CBUS_IDEL_FREE_TIME;
3573*53ee8cc1Swenshuai.xi
3574*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG))
3575*53ee8cc1Swenshuai.xi {
3576*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG);
3577*53ee8cc1Swenshuai.xi
3578*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ABORT_FLAG))
3579*53ee8cc1Swenshuai.xi {
3580*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ABORT_FLAG);
3581*53ee8cc1Swenshuai.xi
3582*53ee8cc1Swenshuai.xi usTimeTick = MHL_CBUS_ABORT_HOLD_TIME;
3583*53ee8cc1Swenshuai.xi }
3584*53ee8cc1Swenshuai.xi
3585*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CBUS_SILENCE, usTimeTick);
3586*53ee8cc1Swenshuai.xi }
3587*53ee8cc1Swenshuai.xi
3588*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ACK_FLAG))
3589*53ee8cc1Swenshuai.xi {
3590*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ACK_FLAG);
3591*53ee8cc1Swenshuai.xi
3592*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState != MHL_QUEUE_STATE_IDLE)
3593*53ee8cc1Swenshuai.xi {
3594*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState = MHL_QUEUE_STATE_IDLE;
3595*53ee8cc1Swenshuai.xi }
3596*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->stCbusQueueInfo[pMHLResourcePrivate->ucCurrentQueueIndex].ucQueueState != MHL_QUEUE_STATE_PENDING)
3597*53ee8cc1Swenshuai.xi {
3598*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[pMHLResourcePrivate->ucCurrentQueueIndex].ucQueueState = MHL_QUEUE_STATE_IDLE;
3599*53ee8cc1Swenshuai.xi }
3600*53ee8cc1Swenshuai.xi
3601*53ee8cc1Swenshuai.xi ucQueueIndex = _mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate);
3602*53ee8cc1Swenshuai.xi
3603*53ee8cc1Swenshuai.xi // Update current index to search index, but not Rx queue index
3604*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_RX_QUEUE_INDEX)
3605*53ee8cc1Swenshuai.xi {
3606*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucCurrentQueueIndex = ucQueueIndex;
3607*53ee8cc1Swenshuai.xi }
3608*53ee8cc1Swenshuai.xi
3609*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusDisplayLinkCheck(pMHLResourcePrivate);
3610*53ee8cc1Swenshuai.xi }
3611*53ee8cc1Swenshuai.xi
3612*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG))
3613*53ee8cc1Swenshuai.xi {
3614*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
3615*53ee8cc1Swenshuai.xi
3616*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
3617*53ee8cc1Swenshuai.xi {
3618*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
3619*53ee8cc1Swenshuai.xi
3620*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL switch back to 24 bits mode port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3621*53ee8cc1Swenshuai.xi
3622*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_NORMAL_24BIT;
3623*53ee8cc1Swenshuai.xi }
3624*53ee8cc1Swenshuai.xi }
3625*53ee8cc1Swenshuai.xi
3626*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG))
3627*53ee8cc1Swenshuai.xi {
3628*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
3629*53ee8cc1Swenshuai.xi
3630*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_NORMAL_24BIT)
3631*53ee8cc1Swenshuai.xi {
3632*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
3633*53ee8cc1Swenshuai.xi
3634*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL switch to packet pixel mode port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3635*53ee8cc1Swenshuai.xi
3636*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_PACKET_PIXEL;
3637*53ee8cc1Swenshuai.xi }
3638*53ee8cc1Swenshuai.xi }
3639*53ee8cc1Swenshuai.xi
3640*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG))
3641*53ee8cc1Swenshuai.xi {
3642*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG);
3643*53ee8cc1Swenshuai.xi
3644*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
3645*53ee8cc1Swenshuai.xi {
3646*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG);
3647*53ee8cc1Swenshuai.xi }
3648*53ee8cc1Swenshuai.xi }
3649*53ee8cc1Swenshuai.xi
3650*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_GRANT_FLAG))
3651*53ee8cc1Swenshuai.xi {
3652*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_GRANT_FLAG);
3653*53ee8cc1Swenshuai.xi
3654*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_SEND_REQUEST)
3655*53ee8cc1Swenshuai.xi {
3656*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_REVEIVE_GRANT;
3657*53ee8cc1Swenshuai.xi }
3658*53ee8cc1Swenshuai.xi }
3659*53ee8cc1Swenshuai.xi
3660*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG))
3661*53ee8cc1Swenshuai.xi {
3662*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG))
3663*53ee8cc1Swenshuai.xi {
3664*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
3665*53ee8cc1Swenshuai.xi }
3666*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
3667*53ee8cc1Swenshuai.xi {
3668*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
3669*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG);
3670*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG);
3671*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG);
3672*53ee8cc1Swenshuai.xi }
3673*53ee8cc1Swenshuai.xi }
3674*53ee8cc1Swenshuai.xi
3675*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DSCR_CHANGE_FLAG))
3676*53ee8cc1Swenshuai.xi {
3677*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DSCR_CHANGE_FLAG);
3678*53ee8cc1Swenshuai.xi
3679*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_END;
3680*53ee8cc1Swenshuai.xi }
3681*53ee8cc1Swenshuai.xi
3682*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_REQUEST_FLAG))
3683*53ee8cc1Swenshuai.xi {
3684*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_REQUEST_FLAG);
3685*53ee8cc1Swenshuai.xi
3686*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucFeatureRequestState == MHL_CBUS_FEATURE_NONE)
3687*53ee8cc1Swenshuai.xi {
3688*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_START;
3689*53ee8cc1Swenshuai.xi }
3690*53ee8cc1Swenshuai.xi }
3691*53ee8cc1Swenshuai.xi
3692*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_COMPLETE_FLAG))
3693*53ee8cc1Swenshuai.xi {
3694*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_COMPLETE_FLAG);
3695*53ee8cc1Swenshuai.xi
3696*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucFeatureRequestState == MHL_CBUS_FEATURE_SEND_FEATURE_REQUEST)
3697*53ee8cc1Swenshuai.xi {
3698*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_END;
3699*53ee8cc1Swenshuai.xi }
3700*53ee8cc1Swenshuai.xi }
3701*53ee8cc1Swenshuai.xi
3702*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_LINK_RATE_FLAG))
3703*53ee8cc1Swenshuai.xi {
3704*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_LINK_RATE_FLAG);
3705*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_LINK_STATUS_NORMAL_FLAG);
3706*53ee8cc1Swenshuai.xi
3707*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate < MHL_AV_LINK_NONE)
3708*53ee8cc1Swenshuai.xi {
3709*53ee8cc1Swenshuai.xi mhal_mhl_SetMainLinkRate(pMHLResourcePrivate->ucMHLSupportPath, pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate);
3710*53ee8cc1Swenshuai.xi
3711*53ee8cc1Swenshuai.xi mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
3712*53ee8cc1Swenshuai.xi
3713*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL set AV link rate mode %d port %c\r\n", pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3714*53ee8cc1Swenshuai.xi }
3715*53ee8cc1Swenshuai.xi }
3716*53ee8cc1Swenshuai.xi
3717*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_BURST_FLAG))
3718*53ee8cc1Swenshuai.xi {
3719*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_BURST_FLAG);
3720*53ee8cc1Swenshuai.xi
3721*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingWriteBurstInformation(pMHLResourcePrivate);
3722*53ee8cc1Swenshuai.xi }
3723*53ee8cc1Swenshuai.xi
3724*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_VC_ASSIGN_FLAG))
3725*53ee8cc1Swenshuai.xi {
3726*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_VC_ASSIGN_FLAG);
3727*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_INFORMATION_FLAG);
3728*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG);
3729*53ee8cc1Swenshuai.xi }
3730*53ee8cc1Swenshuai.xi
3731*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ECBUS_MODE_FLAG))
3732*53ee8cc1Swenshuai.xi {
3733*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ECBUS_MODE_FLAG);
3734*53ee8cc1Swenshuai.xi
3735*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS1_FUNCTION_FLAG))
3736*53ee8cc1Swenshuai.xi {
3737*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
3738*53ee8cc1Swenshuai.xi
3739*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_TX_QUQUE_FREEZE, MHL_CBUS_1_SECOND_TIME);
3740*53ee8cc1Swenshuai.xi
3741*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL CTS 6.3.9.1 patch port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3742*53ee8cc1Swenshuai.xi }
3743*53ee8cc1Swenshuai.xi }
3744*53ee8cc1Swenshuai.xi }
3745*53ee8cc1Swenshuai.xi
3746*53ee8cc1Swenshuai.xi //**************************************************************************
3747*53ee8cc1Swenshuai.xi // [Function Name]:
3748*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusMSGEventProc()
3749*53ee8cc1Swenshuai.xi // [Description]:
3750*53ee8cc1Swenshuai.xi //
3751*53ee8cc1Swenshuai.xi // [Arguments]:
3752*53ee8cc1Swenshuai.xi //
3753*53ee8cc1Swenshuai.xi // [Return]:
3754*53ee8cc1Swenshuai.xi //
3755*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusMSGEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3756*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusMSGEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3757*53ee8cc1Swenshuai.xi {
3758*53ee8cc1Swenshuai.xi MS_BOOL bReceiveResponse = FALSE;
3759*53ee8cc1Swenshuai.xi MS_BOOL bResponseErrorFlag = FALSE;
3760*53ee8cc1Swenshuai.xi MS_U8 ucStatus = MHL_RCP_NO_ERROR;
3761*53ee8cc1Swenshuai.xi MS_U8 ucSubCommand = 0;
3762*53ee8cc1Swenshuai.xi MS_U8 ucKeyCode = MHL_RCP_NO_ERROR;
3763*53ee8cc1Swenshuai.xi
3764*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSG_FLAG))
3765*53ee8cc1Swenshuai.xi {
3766*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSG_FLAG);
3767*53ee8cc1Swenshuai.xi
3768*53ee8cc1Swenshuai.xi switch(pMHLResourcePrivate->ucMSGData[0])
3769*53ee8cc1Swenshuai.xi {
3770*53ee8cc1Swenshuai.xi case MSC_MSG_MSGE:
3771*53ee8cc1Swenshuai.xi
3772*53ee8cc1Swenshuai.xi break;
3773*53ee8cc1Swenshuai.xi
3774*53ee8cc1Swenshuai.xi case MSC_MSG_RCP:
3775*53ee8cc1Swenshuai.xi if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG))
3776*53ee8cc1Swenshuai.xi {
3777*53ee8cc1Swenshuai.xi ucStatus = MHL_RCP_NO_ERROR;
3778*53ee8cc1Swenshuai.xi
3779*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_WARNING("** MHL RCP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3780*53ee8cc1Swenshuai.xi }
3781*53ee8cc1Swenshuai.xi else if(!(pMHLResourcePrivate->ucMSGData[1] &BIT(7))) // Ignore release key
3782*53ee8cc1Swenshuai.xi {
3783*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3784*53ee8cc1Swenshuai.xi }
3785*53ee8cc1Swenshuai.xi
3786*53ee8cc1Swenshuai.xi if(ucStatus == MHL_RCP_NO_ERROR)
3787*53ee8cc1Swenshuai.xi {
3788*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_RCPK;
3789*53ee8cc1Swenshuai.xi ucKeyCode = pMHLResourcePrivate->ucMSGData[1];
3790*53ee8cc1Swenshuai.xi }
3791*53ee8cc1Swenshuai.xi else
3792*53ee8cc1Swenshuai.xi {
3793*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_RCPE;
3794*53ee8cc1Swenshuai.xi ucKeyCode = ucStatus;
3795*53ee8cc1Swenshuai.xi
3796*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucMSGData[0] = MSC_MSG_RCPK;
3797*53ee8cc1Swenshuai.xi bResponseErrorFlag = TRUE;
3798*53ee8cc1Swenshuai.xi }
3799*53ee8cc1Swenshuai.xi
3800*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3801*53ee8cc1Swenshuai.xi
3802*53ee8cc1Swenshuai.xi break;
3803*53ee8cc1Swenshuai.xi
3804*53ee8cc1Swenshuai.xi case MSC_MSG_RCPK:
3805*53ee8cc1Swenshuai.xi case MSC_MSG_RCPE:
3806*53ee8cc1Swenshuai.xi bReceiveResponse = TRUE;
3807*53ee8cc1Swenshuai.xi break;
3808*53ee8cc1Swenshuai.xi
3809*53ee8cc1Swenshuai.xi case MSC_MSG_RAP:
3810*53ee8cc1Swenshuai.xi if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG))
3811*53ee8cc1Swenshuai.xi {
3812*53ee8cc1Swenshuai.xi ucStatus = MHL_RAP_NO_ERROR;
3813*53ee8cc1Swenshuai.xi
3814*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_WARNING("** MHL RAP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3815*53ee8cc1Swenshuai.xi }
3816*53ee8cc1Swenshuai.xi else if(_mdrv_mhl_CheckCbusModeChange(pMHLResourcePrivate))
3817*53ee8cc1Swenshuai.xi {
3818*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetRAPEnableFlag(pMHLResourcePrivate))
3819*53ee8cc1Swenshuai.xi {
3820*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3821*53ee8cc1Swenshuai.xi }
3822*53ee8cc1Swenshuai.xi
3823*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_RAPK;
3824*53ee8cc1Swenshuai.xi ucKeyCode = ucStatus;
3825*53ee8cc1Swenshuai.xi
3826*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3827*53ee8cc1Swenshuai.xi }
3828*53ee8cc1Swenshuai.xi else if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG))
3829*53ee8cc1Swenshuai.xi {
3830*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
3831*53ee8cc1Swenshuai.xi }
3832*53ee8cc1Swenshuai.xi
3833*53ee8cc1Swenshuai.xi break;
3834*53ee8cc1Swenshuai.xi
3835*53ee8cc1Swenshuai.xi case MSC_MSG_RAPK:
3836*53ee8cc1Swenshuai.xi bReceiveResponse = TRUE;
3837*53ee8cc1Swenshuai.xi break;
3838*53ee8cc1Swenshuai.xi
3839*53ee8cc1Swenshuai.xi case MSC_MSG_UCP:
3840*53ee8cc1Swenshuai.xi if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_UCP_FUNCTION_FLAG))
3841*53ee8cc1Swenshuai.xi {
3842*53ee8cc1Swenshuai.xi ucStatus = MHL_UCP_NO_ERROR;
3843*53ee8cc1Swenshuai.xi
3844*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_WARNING("** MHL UCP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3845*53ee8cc1Swenshuai.xi }
3846*53ee8cc1Swenshuai.xi else
3847*53ee8cc1Swenshuai.xi {
3848*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3849*53ee8cc1Swenshuai.xi }
3850*53ee8cc1Swenshuai.xi
3851*53ee8cc1Swenshuai.xi if(ucStatus == MHL_UCP_NO_ERROR)
3852*53ee8cc1Swenshuai.xi {
3853*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_UCPK;
3854*53ee8cc1Swenshuai.xi ucKeyCode = pMHLResourcePrivate->ucMSGData[1];
3855*53ee8cc1Swenshuai.xi }
3856*53ee8cc1Swenshuai.xi else
3857*53ee8cc1Swenshuai.xi {
3858*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_UCPE;
3859*53ee8cc1Swenshuai.xi ucKeyCode = ucStatus;
3860*53ee8cc1Swenshuai.xi
3861*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucMSGData[0] = MSC_MSG_UCPK;
3862*53ee8cc1Swenshuai.xi bResponseErrorFlag = TRUE;
3863*53ee8cc1Swenshuai.xi }
3864*53ee8cc1Swenshuai.xi
3865*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3866*53ee8cc1Swenshuai.xi
3867*53ee8cc1Swenshuai.xi break;
3868*53ee8cc1Swenshuai.xi
3869*53ee8cc1Swenshuai.xi case MSC_MSG_UCPK:
3870*53ee8cc1Swenshuai.xi case MSC_MSG_UCPE:
3871*53ee8cc1Swenshuai.xi bReceiveResponse = TRUE;
3872*53ee8cc1Swenshuai.xi break;
3873*53ee8cc1Swenshuai.xi
3874*53ee8cc1Swenshuai.xi case MSC_MSG_ATT:
3875*53ee8cc1Swenshuai.xi if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_ATT_FUNCTION_FLAG))
3876*53ee8cc1Swenshuai.xi {
3877*53ee8cc1Swenshuai.xi ucStatus = MHL_ATT_NO_ERROR;
3878*53ee8cc1Swenshuai.xi
3879*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_WARNING("** MHL ATT call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3880*53ee8cc1Swenshuai.xi }
3881*53ee8cc1Swenshuai.xi else
3882*53ee8cc1Swenshuai.xi {
3883*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3884*53ee8cc1Swenshuai.xi }
3885*53ee8cc1Swenshuai.xi
3886*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_ATTK;
3887*53ee8cc1Swenshuai.xi ucKeyCode = ucStatus;
3888*53ee8cc1Swenshuai.xi
3889*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3890*53ee8cc1Swenshuai.xi
3891*53ee8cc1Swenshuai.xi break;
3892*53ee8cc1Swenshuai.xi
3893*53ee8cc1Swenshuai.xi case MSC_MSG_ATTK:
3894*53ee8cc1Swenshuai.xi bReceiveResponse = TRUE;
3895*53ee8cc1Swenshuai.xi break;
3896*53ee8cc1Swenshuai.xi
3897*53ee8cc1Swenshuai.xi case MSC_MSG_RBP:
3898*53ee8cc1Swenshuai.xi if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RBP_FUNCTION_FLAG))
3899*53ee8cc1Swenshuai.xi {
3900*53ee8cc1Swenshuai.xi ucStatus = MHL_RBP_NO_ERROR;
3901*53ee8cc1Swenshuai.xi
3902*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_WARNING("** MHL RBP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3903*53ee8cc1Swenshuai.xi }
3904*53ee8cc1Swenshuai.xi else
3905*53ee8cc1Swenshuai.xi {
3906*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3907*53ee8cc1Swenshuai.xi }
3908*53ee8cc1Swenshuai.xi
3909*53ee8cc1Swenshuai.xi if(ucStatus == MHL_RBP_NO_ERROR)
3910*53ee8cc1Swenshuai.xi {
3911*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_RBPK;
3912*53ee8cc1Swenshuai.xi ucKeyCode = pMHLResourcePrivate->ucMSGData[1];
3913*53ee8cc1Swenshuai.xi }
3914*53ee8cc1Swenshuai.xi else
3915*53ee8cc1Swenshuai.xi {
3916*53ee8cc1Swenshuai.xi ucSubCommand = MSC_MSG_RBPE;
3917*53ee8cc1Swenshuai.xi ucKeyCode = ucStatus;
3918*53ee8cc1Swenshuai.xi
3919*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucMSGData[0] = MSC_MSG_RBPK;
3920*53ee8cc1Swenshuai.xi bResponseErrorFlag = TRUE;
3921*53ee8cc1Swenshuai.xi }
3922*53ee8cc1Swenshuai.xi
3923*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3924*53ee8cc1Swenshuai.xi
3925*53ee8cc1Swenshuai.xi break;
3926*53ee8cc1Swenshuai.xi
3927*53ee8cc1Swenshuai.xi case MSC_MSG_RBPK:
3928*53ee8cc1Swenshuai.xi case MSC_MSG_RBPE:
3929*53ee8cc1Swenshuai.xi bReceiveResponse = TRUE;
3930*53ee8cc1Swenshuai.xi break;
3931*53ee8cc1Swenshuai.xi
3932*53ee8cc1Swenshuai.xi case MSC_MSG_RUSB:
3933*53ee8cc1Swenshuai.xi
3934*53ee8cc1Swenshuai.xi break;
3935*53ee8cc1Swenshuai.xi
3936*53ee8cc1Swenshuai.xi case MSC_MSG_RUSBK:
3937*53ee8cc1Swenshuai.xi bReceiveResponse = TRUE;
3938*53ee8cc1Swenshuai.xi break;
3939*53ee8cc1Swenshuai.xi
3940*53ee8cc1Swenshuai.xi case MSC_MSG_RHID:
3941*53ee8cc1Swenshuai.xi
3942*53ee8cc1Swenshuai.xi break;
3943*53ee8cc1Swenshuai.xi
3944*53ee8cc1Swenshuai.xi case MSC_MSG_RHIDK:
3945*53ee8cc1Swenshuai.xi bReceiveResponse = TRUE;
3946*53ee8cc1Swenshuai.xi break;
3947*53ee8cc1Swenshuai.xi
3948*53ee8cc1Swenshuai.xi case MSC_MSG_BIST_TRIGGRT:
3949*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusBISTTriggerProc(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[1]);
3950*53ee8cc1Swenshuai.xi break;
3951*53ee8cc1Swenshuai.xi
3952*53ee8cc1Swenshuai.xi case MSC_MSG_BIST_REQUEST_STAT:
3953*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusBISTRequestStatusProc(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[1]);
3954*53ee8cc1Swenshuai.xi break;
3955*53ee8cc1Swenshuai.xi
3956*53ee8cc1Swenshuai.xi case MSC_MSG_BIST_STOP:
3957*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusBISTStopProc(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[1]);
3958*53ee8cc1Swenshuai.xi break;
3959*53ee8cc1Swenshuai.xi
3960*53ee8cc1Swenshuai.xi case MSC_MSG_SI_UNKNOWN:
3961*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_SI_UNKNOWNK, 0, FALSE);
3962*53ee8cc1Swenshuai.xi break;
3963*53ee8cc1Swenshuai.xi
3964*53ee8cc1Swenshuai.xi default:
3965*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucMSGData[0] < 0x20) // For CTS 6.3.11.23
3966*53ee8cc1Swenshuai.xi {
3967*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_MSGE, MHL_MSGE_INVALID_SUB_COMMAND_CODE, FALSE);
3968*53ee8cc1Swenshuai.xi }
3969*53ee8cc1Swenshuai.xi
3970*53ee8cc1Swenshuai.xi break;
3971*53ee8cc1Swenshuai.xi };
3972*53ee8cc1Swenshuai.xi
3973*53ee8cc1Swenshuai.xi if(bReceiveResponse)
3974*53ee8cc1Swenshuai.xi {
3975*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG);
3976*53ee8cc1Swenshuai.xi }
3977*53ee8cc1Swenshuai.xi
3978*53ee8cc1Swenshuai.xi if(bResponseErrorFlag)
3979*53ee8cc1Swenshuai.xi {
3980*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_SEND_MSG_RESPONSE, MHL_MSG_SEND_RESPONSE_TIME);
3981*53ee8cc1Swenshuai.xi }
3982*53ee8cc1Swenshuai.xi }
3983*53ee8cc1Swenshuai.xi }
3984*53ee8cc1Swenshuai.xi
3985*53ee8cc1Swenshuai.xi //**************************************************************************
3986*53ee8cc1Swenshuai.xi // [Function Name]:
3987*53ee8cc1Swenshuai.xi // _mdrv_mhl_EMSCParsingEMSCSupport()
3988*53ee8cc1Swenshuai.xi // [Description]:
3989*53ee8cc1Swenshuai.xi //
3990*53ee8cc1Swenshuai.xi // [Arguments]:
3991*53ee8cc1Swenshuai.xi //
3992*53ee8cc1Swenshuai.xi // [Return]:
3993*53ee8cc1Swenshuai.xi //
3994*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_EMSCParsingEMSCSupport(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * bReveiceEMSC)3995*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_EMSCParsingEMSCSupport(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *bReveiceEMSC)
3996*53ee8cc1Swenshuai.xi {
3997*53ee8cc1Swenshuai.xi MS_U8 ucLength = bReveiceEMSC[3] *MHL_EMSC_SUPPORT_ITEM_LENGTH +6;
3998*53ee8cc1Swenshuai.xi
3999*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate != NULL)
4000*53ee8cc1Swenshuai.xi {
4001*53ee8cc1Swenshuai.xi
4002*53ee8cc1Swenshuai.xi }
4003*53ee8cc1Swenshuai.xi
4004*53ee8cc1Swenshuai.xi return ucLength;
4005*53ee8cc1Swenshuai.xi }
4006*53ee8cc1Swenshuai.xi
4007*53ee8cc1Swenshuai.xi //**************************************************************************
4008*53ee8cc1Swenshuai.xi // [Function Name]:
4009*53ee8cc1Swenshuai.xi // _mdrv_mhl_ParsingEMSCReceiveData()
4010*53ee8cc1Swenshuai.xi // [Description]:
4011*53ee8cc1Swenshuai.xi //
4012*53ee8cc1Swenshuai.xi // [Arguments]:
4013*53ee8cc1Swenshuai.xi //
4014*53ee8cc1Swenshuai.xi // [Return]:
4015*53ee8cc1Swenshuai.xi //
4016*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingEMSCReceiveData(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4017*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingEMSCReceiveData(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4018*53ee8cc1Swenshuai.xi {
4019*53ee8cc1Swenshuai.xi MS_U8 uctemp = 3;
4020*53ee8cc1Swenshuai.xi MS_U8 ucReceiveEMSC[MHL_EMSC_DATA_SIZE +1] = {0};
4021*53ee8cc1Swenshuai.xi MS_U16 usEMSCRxBufferSize = 0;
4022*53ee8cc1Swenshuai.xi MS_U16 usEMSCTxBufferSize = 0;
4023*53ee8cc1Swenshuai.xi MS_U16 usWriteBurstID = 0;
4024*53ee8cc1Swenshuai.xi
4025*53ee8cc1Swenshuai.xi mhal_mhl_GetEMSCReceiveData(ucReceiveEMSC);
4026*53ee8cc1Swenshuai.xi
4027*53ee8cc1Swenshuai.xi usEMSCTxBufferSize = ucReceiveEMSC[1]; // Rx unload ACK
4028*53ee8cc1Swenshuai.xi
4029*53ee8cc1Swenshuai.xi if(ucReceiveEMSC[2] > 0) // Check length remaining
4030*53ee8cc1Swenshuai.xi {
4031*53ee8cc1Swenshuai.xi while((ucReceiveEMSC[2] +3) > uctemp)
4032*53ee8cc1Swenshuai.xi {
4033*53ee8cc1Swenshuai.xi usWriteBurstID = (ucReceiveEMSC[uctemp] << 8) |ucReceiveEMSC[uctemp +1];
4034*53ee8cc1Swenshuai.xi
4035*53ee8cc1Swenshuai.xi switch(usWriteBurstID)
4036*53ee8cc1Swenshuai.xi {
4037*53ee8cc1Swenshuai.xi case MHL_BURST_ID_BLK_RCV_BUFFER_INFO:
4038*53ee8cc1Swenshuai.xi usEMSCTxBufferSize = usEMSCTxBufferSize +((ucReceiveEMSC[uctemp +3] << 8) |ucReceiveEMSC[uctemp +2]) -MHL_EMSC_DATA_SIZE;
4039*53ee8cc1Swenshuai.xi
4040*53ee8cc1Swenshuai.xi uctemp = uctemp +4;
4041*53ee8cc1Swenshuai.xi
4042*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC parsing buffer info in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4043*53ee8cc1Swenshuai.xi
4044*53ee8cc1Swenshuai.xi break;
4045*53ee8cc1Swenshuai.xi
4046*53ee8cc1Swenshuai.xi case MHL_BURST_ID_BITS_PER_PIXEL_FMT:
4047*53ee8cc1Swenshuai.xi if(ucReceiveEMSC[uctemp +7] == MHL_VIEW_PIXEL_FORMATE_16BPP)
4048*53ee8cc1Swenshuai.xi {
4049*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
4050*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
4051*53ee8cc1Swenshuai.xi }
4052*53ee8cc1Swenshuai.xi else if(ucReceiveEMSC[uctemp +7] == MHL_VIEW_PIXEL_FORMATE_24BPP)
4053*53ee8cc1Swenshuai.xi {
4054*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
4055*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
4056*53ee8cc1Swenshuai.xi }
4057*53ee8cc1Swenshuai.xi
4058*53ee8cc1Swenshuai.xi uctemp = uctemp +8;
4059*53ee8cc1Swenshuai.xi
4060*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC parsing pexel FMT in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4061*53ee8cc1Swenshuai.xi
4062*53ee8cc1Swenshuai.xi break;
4063*53ee8cc1Swenshuai.xi
4064*53ee8cc1Swenshuai.xi case MHL_BURST_ID_EMSC_SUPPORT:
4065*53ee8cc1Swenshuai.xi uctemp = uctemp +_mdrv_mhl_EMSCParsingEMSCSupport(pMHLResourcePrivate, &ucReceiveEMSC[uctemp +3]);
4066*53ee8cc1Swenshuai.xi
4067*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC parsing eMSC support in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4068*53ee8cc1Swenshuai.xi
4069*53ee8cc1Swenshuai.xi break;
4070*53ee8cc1Swenshuai.xi
4071*53ee8cc1Swenshuai.xi default:
4072*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC parsing unknow burst ID in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4073*53ee8cc1Swenshuai.xi
4074*53ee8cc1Swenshuai.xi uctemp = ucReceiveEMSC[2] +3;
4075*53ee8cc1Swenshuai.xi
4076*53ee8cc1Swenshuai.xi break;
4077*53ee8cc1Swenshuai.xi };
4078*53ee8cc1Swenshuai.xi }
4079*53ee8cc1Swenshuai.xi }
4080*53ee8cc1Swenshuai.xi
4081*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCRxBufferSize = pMHLResourcePrivate->usEMSCRxBufferSize - ucReceiveEMSC[0];
4082*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCTxBufferSize = usEMSCTxBufferSize + pMHLResourcePrivate->usEMSCTxBufferSize;
4083*53ee8cc1Swenshuai.xi usEMSCRxBufferSize = pMHLResourcePrivate->usEMSCRxBufferSize;
4084*53ee8cc1Swenshuai.xi usEMSCTxBufferSize = pMHLResourcePrivate->usEMSCTxBufferSize;
4085*53ee8cc1Swenshuai.xi
4086*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC receive Rx buffer size %d in port %c !!\r\n", usEMSCRxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4087*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC receive Tx buffer size %d in port %c !!\r\n", usEMSCTxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4088*53ee8cc1Swenshuai.xi }
4089*53ee8cc1Swenshuai.xi
4090*53ee8cc1Swenshuai.xi //**************************************************************************
4091*53ee8cc1Swenshuai.xi // [Function Name]:
4092*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusRxHandler()
4093*53ee8cc1Swenshuai.xi // [Description]
4094*53ee8cc1Swenshuai.xi //
4095*53ee8cc1Swenshuai.xi // [Arguments]:
4096*53ee8cc1Swenshuai.xi //
4097*53ee8cc1Swenshuai.xi // [Return]:
4098*53ee8cc1Swenshuai.xi //
4099*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusRxHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4100*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusRxHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4101*53ee8cc1Swenshuai.xi {
4102*53ee8cc1Swenshuai.xi MS_U8 ucReceiveCount = 0;
4103*53ee8cc1Swenshuai.xi MS_U8 ucReceiveMSC[MHL_CBUS_DATA_SIZE +4];
4104*53ee8cc1Swenshuai.xi
4105*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
4106*53ee8cc1Swenshuai.xi {
4107*53ee8cc1Swenshuai.xi // Check receive MSC
4108*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckSRAMReceiveBuffer())
4109*53ee8cc1Swenshuai.xi {
4110*53ee8cc1Swenshuai.xi ucReceiveCount = pMHLResourcePrivate->ucReceiveCounter;
4111*53ee8cc1Swenshuai.xi
4112*53ee8cc1Swenshuai.xi if(ucReceiveCount > 0)
4113*53ee8cc1Swenshuai.xi {
4114*53ee8cc1Swenshuai.xi for( ; ucReceiveCount > 0; ucReceiveCount--)
4115*53ee8cc1Swenshuai.xi {
4116*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetCbusReceiveMSC(ucReceiveMSC))
4117*53ee8cc1Swenshuai.xi {
4118*53ee8cc1Swenshuai.xi _mdrv_mhl_SetReceiveCaseFlag(pMHLResourcePrivate, ucReceiveMSC);
4119*53ee8cc1Swenshuai.xi
4120*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucReceiveCounter--;
4121*53ee8cc1Swenshuai.xi }
4122*53ee8cc1Swenshuai.xi }
4123*53ee8cc1Swenshuai.xi }
4124*53ee8cc1Swenshuai.xi else if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG))
4125*53ee8cc1Swenshuai.xi {
4126*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
4127*53ee8cc1Swenshuai.xi
4128*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CHECK_RECEIVE_LOSE, MHL_CHECK_RECEIVE_LOSE_TIME);
4129*53ee8cc1Swenshuai.xi }
4130*53ee8cc1Swenshuai.xi }
4131*53ee8cc1Swenshuai.xi
4132*53ee8cc1Swenshuai.xi // Check receive EMSC
4133*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucEMSCReceiveCounter > 0)
4134*53ee8cc1Swenshuai.xi {
4135*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingEMSCReceiveData(pMHLResourcePrivate);
4136*53ee8cc1Swenshuai.xi
4137*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCReceiveCounter--;
4138*53ee8cc1Swenshuai.xi }
4139*53ee8cc1Swenshuai.xi
4140*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ulCbusReceiveIndex > 0)
4141*53ee8cc1Swenshuai.xi {
4142*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusReceiveEventProc(pMHLResourcePrivate);
4143*53ee8cc1Swenshuai.xi
4144*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusMSGEventProc(pMHLResourcePrivate);
4145*53ee8cc1Swenshuai.xi }
4146*53ee8cc1Swenshuai.xi }
4147*53ee8cc1Swenshuai.xi }
4148*53ee8cc1Swenshuai.xi
4149*53ee8cc1Swenshuai.xi //**************************************************************************
4150*53ee8cc1Swenshuai.xi // [Function Name]:
4151*53ee8cc1Swenshuai.xi // _mdrv_mhl_TxQueueHandler()
4152*53ee8cc1Swenshuai.xi // [Description]
4153*53ee8cc1Swenshuai.xi //
4154*53ee8cc1Swenshuai.xi // [Arguments]:
4155*53ee8cc1Swenshuai.xi //
4156*53ee8cc1Swenshuai.xi // [Return]:
4157*53ee8cc1Swenshuai.xi //
4158*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_TxQueueHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4159*53ee8cc1Swenshuai.xi void _mdrv_mhl_TxQueueHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4160*53ee8cc1Swenshuai.xi {
4161*53ee8cc1Swenshuai.xi MS_U8 ucQueueIndex = 0;
4162*53ee8cc1Swenshuai.xi
4163*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG))
4164*53ee8cc1Swenshuai.xi {
4165*53ee8cc1Swenshuai.xi ucQueueIndex = _mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate);
4166*53ee8cc1Swenshuai.xi
4167*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
4168*53ee8cc1Swenshuai.xi {
4169*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusTxWriteCommand(pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag, &(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex])))
4170*53ee8cc1Swenshuai.xi {
4171*53ee8cc1Swenshuai.xi // Retry send packet twice
4172*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState == MHL_QUEUE_STATE_SEND)
4173*53ee8cc1Swenshuai.xi {
4174*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_IDLE;
4175*53ee8cc1Swenshuai.xi }
4176*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState > MHL_QUEUE_STATE_SEND)
4177*53ee8cc1Swenshuai.xi {
4178*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_SEND;
4179*53ee8cc1Swenshuai.xi }
4180*53ee8cc1Swenshuai.xi
4181*53ee8cc1Swenshuai.xi // Update current index to search index, but not Rx queue index
4182*53ee8cc1Swenshuai.xi if(ucQueueIndex < MHL_CBUS_RX_QUEUE_INDEX)
4183*53ee8cc1Swenshuai.xi {
4184*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucCurrentQueueIndex = ucQueueIndex;
4185*53ee8cc1Swenshuai.xi }
4186*53ee8cc1Swenshuai.xi
4187*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CBUS_SILENCE, MHL_CBUS_SEND_SILENCE_TIME);
4188*53ee8cc1Swenshuai.xi
4189*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG);
4190*53ee8cc1Swenshuai.xi }
4191*53ee8cc1Swenshuai.xi }
4192*53ee8cc1Swenshuai.xi }
4193*53ee8cc1Swenshuai.xi }
4194*53ee8cc1Swenshuai.xi
4195*53ee8cc1Swenshuai.xi //**************************************************************************
4196*53ee8cc1Swenshuai.xi // [Function Name]:
4197*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendDisplayCommand()
4198*53ee8cc1Swenshuai.xi // [Description]
4199*53ee8cc1Swenshuai.xi //
4200*53ee8cc1Swenshuai.xi // [Arguments]:
4201*53ee8cc1Swenshuai.xi //
4202*53ee8cc1Swenshuai.xi // [Return]:
4203*53ee8cc1Swenshuai.xi //
4204*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendDisplayCommand(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4205*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendDisplayCommand(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4206*53ee8cc1Swenshuai.xi {
4207*53ee8cc1Swenshuai.xi MS_U8 ucDisplayIndex = (pMHLResourcePrivate->usDisplayIndex) &BMASK(7:0);
4208*53ee8cc1Swenshuai.xi MS_U8 ucDisplayMask = MHL_CBUS_DISPLAY_MASK;
4209*53ee8cc1Swenshuai.xi
4210*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_DISPLAY_COMMAND_ENABLE_FLAG))
4211*53ee8cc1Swenshuai.xi {
4212*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CheckSendCommand(pMHLResourcePrivate))
4213*53ee8cc1Swenshuai.xi {
4214*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
4215*53ee8cc1Swenshuai.xi {
4216*53ee8cc1Swenshuai.xi ucDisplayMask = ucDisplayMask |MHL_ECBUS_DISPLAY_MASK;
4217*53ee8cc1Swenshuai.xi }
4218*53ee8cc1Swenshuai.xi
4219*53ee8cc1Swenshuai.xi ucDisplayIndex = ucDisplayIndex ^ucDisplayMask;
4220*53ee8cc1Swenshuai.xi
4221*53ee8cc1Swenshuai.xi if(ucDisplayIndex > 0)
4222*53ee8cc1Swenshuai.xi {
4223*53ee8cc1Swenshuai.xi switch(_mdrv_mhl_CbusGetLeastFlag(ucDisplayIndex))
4224*53ee8cc1Swenshuai.xi {
4225*53ee8cc1Swenshuai.xi case MHL_CBUS_HPD_SET_FLAG:
4226*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendSetHPD(pMHLResourcePrivate, TRUE);
4227*53ee8cc1Swenshuai.xi break;
4228*53ee8cc1Swenshuai.xi
4229*53ee8cc1Swenshuai.xi case MHL_CBUS_DEVCAP_READY_FLAG:
4230*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4231*53ee8cc1Swenshuai.xi break;
4232*53ee8cc1Swenshuai.xi
4233*53ee8cc1Swenshuai.xi case MHL_CBUS_PATH_EN_FLAG:
4234*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendPathEnable(pMHLResourcePrivate, TRUE);
4235*53ee8cc1Swenshuai.xi break;
4236*53ee8cc1Swenshuai.xi
4237*53ee8cc1Swenshuai.xi case MHL_CBUS_DEVCAP_CHANGE_FLAG:
4238*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendDevcapChange(pMHLResourcePrivate);
4239*53ee8cc1Swenshuai.xi break;
4240*53ee8cc1Swenshuai.xi
4241*53ee8cc1Swenshuai.xi case MHL_CBUS_VERSION_CODE_FLAG:
4242*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendVersionCode(pMHLResourcePrivate);
4243*53ee8cc1Swenshuai.xi break;
4244*53ee8cc1Swenshuai.xi
4245*53ee8cc1Swenshuai.xi case MHL_CBUS_LINK_STATUS_NORMAL_FLAG:
4246*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendLinkStatusNormal(pMHLResourcePrivate);
4247*53ee8cc1Swenshuai.xi break;
4248*53ee8cc1Swenshuai.xi
4249*53ee8cc1Swenshuai.xi default:
4250*53ee8cc1Swenshuai.xi
4251*53ee8cc1Swenshuai.xi break;
4252*53ee8cc1Swenshuai.xi };
4253*53ee8cc1Swenshuai.xi }
4254*53ee8cc1Swenshuai.xi }
4255*53ee8cc1Swenshuai.xi else if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CHECK_CONTENT_ON_FLAG))
4256*53ee8cc1Swenshuai.xi {
4257*53ee8cc1Swenshuai.xi if(!GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
4258*53ee8cc1Swenshuai.xi {
4259*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendSetHPD(pMHLResourcePrivate, TRUE);
4260*53ee8cc1Swenshuai.xi }
4261*53ee8cc1Swenshuai.xi else if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG))
4262*53ee8cc1Swenshuai.xi {
4263*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendPathEnable(pMHLResourcePrivate, FALSE);
4264*53ee8cc1Swenshuai.xi }
4265*53ee8cc1Swenshuai.xi else if(!GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4266*53ee8cc1Swenshuai.xi {
4267*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4268*53ee8cc1Swenshuai.xi }
4269*53ee8cc1Swenshuai.xi }
4270*53ee8cc1Swenshuai.xi else
4271*53ee8cc1Swenshuai.xi {
4272*53ee8cc1Swenshuai.xi if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
4273*53ee8cc1Swenshuai.xi {
4274*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendSetHPD(pMHLResourcePrivate, FALSE);
4275*53ee8cc1Swenshuai.xi
4276*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
4277*53ee8cc1Swenshuai.xi
4278*53ee8cc1Swenshuai.xi if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG))
4279*53ee8cc1Swenshuai.xi {
4280*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG);
4281*53ee8cc1Swenshuai.xi }
4282*53ee8cc1Swenshuai.xi }
4283*53ee8cc1Swenshuai.xi
4284*53ee8cc1Swenshuai.xi if(GET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_ROKU_DONGLE_FLAG))
4285*53ee8cc1Swenshuai.xi {
4286*53ee8cc1Swenshuai.xi if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4287*53ee8cc1Swenshuai.xi {
4288*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4289*53ee8cc1Swenshuai.xi }
4290*53ee8cc1Swenshuai.xi else if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG))
4291*53ee8cc1Swenshuai.xi {
4292*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendPathEnable(pMHLResourcePrivate, TRUE);
4293*53ee8cc1Swenshuai.xi }
4294*53ee8cc1Swenshuai.xi }
4295*53ee8cc1Swenshuai.xi
4296*53ee8cc1Swenshuai.xi if(GET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_HTC_FLAG))
4297*53ee8cc1Swenshuai.xi {
4298*53ee8cc1Swenshuai.xi if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4299*53ee8cc1Swenshuai.xi {
4300*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4301*53ee8cc1Swenshuai.xi }
4302*53ee8cc1Swenshuai.xi }
4303*53ee8cc1Swenshuai.xi else if(GET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_SONY_FLAG))
4304*53ee8cc1Swenshuai.xi {
4305*53ee8cc1Swenshuai.xi if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4306*53ee8cc1Swenshuai.xi {
4307*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4308*53ee8cc1Swenshuai.xi }
4309*53ee8cc1Swenshuai.xi }
4310*53ee8cc1Swenshuai.xi }
4311*53ee8cc1Swenshuai.xi }
4312*53ee8cc1Swenshuai.xi }
4313*53ee8cc1Swenshuai.xi
4314*53ee8cc1Swenshuai.xi //**************************************************************************
4315*53ee8cc1Swenshuai.xi // [Function Name]:
4316*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetVenderIDProc()
4317*53ee8cc1Swenshuai.xi // [Description]
4318*53ee8cc1Swenshuai.xi //
4319*53ee8cc1Swenshuai.xi // [Arguments]:
4320*53ee8cc1Swenshuai.xi //
4321*53ee8cc1Swenshuai.xi // [Return]:
4322*53ee8cc1Swenshuai.xi //
4323*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetVenderIDProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4324*53ee8cc1Swenshuai.xi void _mdrv_mhl_GetVenderIDProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4325*53ee8cc1Swenshuai.xi {
4326*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG))
4327*53ee8cc1Swenshuai.xi {
4328*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_GET_VENDER_ID_FLAG))
4329*53ee8cc1Swenshuai.xi {
4330*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG))
4331*53ee8cc1Swenshuai.xi {
4332*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
4333*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_GET_VENDER_ID_FLAG);
4334*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG);
4335*53ee8cc1Swenshuai.xi SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_GET_VENDER_ID_DONE_FLAG);
4336*53ee8cc1Swenshuai.xi
4337*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucSourceVenderID = pMHLResourcePrivate->ucAskData;
4338*53ee8cc1Swenshuai.xi
4339*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SOURCE_INFO)
4340*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get vender ID %d\r\n", pMHLResourcePrivate->ucSourceVenderID);
4341*53ee8cc1Swenshuai.xi #endif
4342*53ee8cc1Swenshuai.xi }
4343*53ee8cc1Swenshuai.xi }
4344*53ee8cc1Swenshuai.xi else if((!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG)) && (!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG)))
4345*53ee8cc1Swenshuai.xi {
4346*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendGetVenderID(pMHLResourcePrivate))
4347*53ee8cc1Swenshuai.xi {
4348*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_GET_VENDER_ID_FLAG);
4349*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
4350*53ee8cc1Swenshuai.xi }
4351*53ee8cc1Swenshuai.xi }
4352*53ee8cc1Swenshuai.xi }
4353*53ee8cc1Swenshuai.xi }
4354*53ee8cc1Swenshuai.xi
4355*53ee8cc1Swenshuai.xi //**************************************************************************
4356*53ee8cc1Swenshuai.xi // [Function Name]:
4357*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckDeviceCapability()
4358*53ee8cc1Swenshuai.xi // [Description]
4359*53ee8cc1Swenshuai.xi //
4360*53ee8cc1Swenshuai.xi // [Arguments]:
4361*53ee8cc1Swenshuai.xi //
4362*53ee8cc1Swenshuai.xi // [Return]:
4363*53ee8cc1Swenshuai.xi //
4364*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckDeviceCapability(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4365*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckDeviceCapability(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4366*53ee8cc1Swenshuai.xi {
4367*53ee8cc1Swenshuai.xi MS_U16 usAdopterID = 0;
4368*53ee8cc1Swenshuai.xi MS_U16 usDeviceID = 0;
4369*53ee8cc1Swenshuai.xi
4370*53ee8cc1Swenshuai.xi usAdopterID = pMHLResourcePrivate->ucSourceDevcapTable[4] |(pMHLResourcePrivate->ucSourceDevcapTable[3] << 8);
4371*53ee8cc1Swenshuai.xi usDeviceID = pMHLResourcePrivate->ucSourceDevcapTable[12] |(pMHLResourcePrivate->ucSourceDevcapTable[11] << 8);
4372*53ee8cc1Swenshuai.xi
4373*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usDeviceIndex = 0;
4374*53ee8cc1Swenshuai.xi
4375*53ee8cc1Swenshuai.xi if(usAdopterID == MHL_ADOPTER_ID_ROKU)
4376*53ee8cc1Swenshuai.xi {
4377*53ee8cc1Swenshuai.xi SET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_ROKU_DONGLE_FLAG);
4378*53ee8cc1Swenshuai.xi }
4379*53ee8cc1Swenshuai.xi
4380*53ee8cc1Swenshuai.xi if(usAdopterID == MHL_ADOPTER_ID_HTC)
4381*53ee8cc1Swenshuai.xi {
4382*53ee8cc1Swenshuai.xi SET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_HTC_FLAG);
4383*53ee8cc1Swenshuai.xi }
4384*53ee8cc1Swenshuai.xi
4385*53ee8cc1Swenshuai.xi if(usAdopterID == MHL_ADOPTER_ID_SONY)
4386*53ee8cc1Swenshuai.xi {
4387*53ee8cc1Swenshuai.xi SET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_SONY_FLAG);
4388*53ee8cc1Swenshuai.xi }
4389*53ee8cc1Swenshuai.xi
4390*53ee8cc1Swenshuai.xi if(usDeviceID == MHL_DEVICE_ID_HTC)
4391*53ee8cc1Swenshuai.xi {
4392*53ee8cc1Swenshuai.xi // Do nothing
4393*53ee8cc1Swenshuai.xi }
4394*53ee8cc1Swenshuai.xi
4395*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucSourceDevcapTable[MHL_CBUS_FEATURE_FLAG] &BIT(0))
4396*53ee8cc1Swenshuai.xi {
4397*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RCP_FUNCTION_FLAG);
4398*53ee8cc1Swenshuai.xi }
4399*53ee8cc1Swenshuai.xi
4400*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucSourceDevcapTable[MHL_CBUS_FEATURE_FLAG] &BIT(1))
4401*53ee8cc1Swenshuai.xi {
4402*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RAP_FUNCTION_FLAG);
4403*53ee8cc1Swenshuai.xi }
4404*53ee8cc1Swenshuai.xi
4405*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucSourceDevcapTable[MHL_CBUS_VERSION] >= 0x30)
4406*53ee8cc1Swenshuai.xi {
4407*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG);
4408*53ee8cc1Swenshuai.xi }
4409*53ee8cc1Swenshuai.xi }
4410*53ee8cc1Swenshuai.xi
4411*53ee8cc1Swenshuai.xi //**************************************************************************
4412*53ee8cc1Swenshuai.xi // [Function Name]:
4413*53ee8cc1Swenshuai.xi // _mdrv_mhl_ReadDeviceCapabilityProc()
4414*53ee8cc1Swenshuai.xi // [Description]
4415*53ee8cc1Swenshuai.xi //
4416*53ee8cc1Swenshuai.xi // [Arguments]:
4417*53ee8cc1Swenshuai.xi //
4418*53ee8cc1Swenshuai.xi // [Return]:
4419*53ee8cc1Swenshuai.xi //
4420*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ReadDeviceCapabilityProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4421*53ee8cc1Swenshuai.xi void _mdrv_mhl_ReadDeviceCapabilityProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4422*53ee8cc1Swenshuai.xi {
4423*53ee8cc1Swenshuai.xi MS_BOOL bReDoFlag = FALSE;
4424*53ee8cc1Swenshuai.xi MS_U8 ucBitNumber = 0;
4425*53ee8cc1Swenshuai.xi
4426*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
4427*53ee8cc1Swenshuai.xi {
4428*53ee8cc1Swenshuai.xi do
4429*53ee8cc1Swenshuai.xi {
4430*53ee8cc1Swenshuai.xi bReDoFlag = FALSE;
4431*53ee8cc1Swenshuai.xi
4432*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->usReadDevcapMask > 0)
4433*53ee8cc1Swenshuai.xi {
4434*53ee8cc1Swenshuai.xi ucBitNumber = _mdrv_mhl_GetLeastBitNum(pMHLResourcePrivate->usReadDevcapMask);
4435*53ee8cc1Swenshuai.xi
4436*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG))
4437*53ee8cc1Swenshuai.xi {
4438*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG))
4439*53ee8cc1Swenshuai.xi {
4440*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
4441*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4442*53ee8cc1Swenshuai.xi
4443*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucSourceDevcapTable[ucBitNumber] = pMHLResourcePrivate->ucAskData;
4444*53ee8cc1Swenshuai.xi
4445*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SOURCE_INFO)
4446*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL read devcap[%d] = %x\r\n", ucBitNumber, pMHLResourcePrivate->ucSourceDevcapTable[ucBitNumber]);
4447*53ee8cc1Swenshuai.xi #endif
4448*53ee8cc1Swenshuai.xi
4449*53ee8cc1Swenshuai.xi bReDoFlag = TRUE;
4450*53ee8cc1Swenshuai.xi }
4451*53ee8cc1Swenshuai.xi }
4452*53ee8cc1Swenshuai.xi else if((!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG)) && (!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG)))
4453*53ee8cc1Swenshuai.xi {
4454*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusReadDeviceCapability(pMHLResourcePrivate, ucBitNumber, FALSE))
4455*53ee8cc1Swenshuai.xi {
4456*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4457*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
4458*53ee8cc1Swenshuai.xi }
4459*53ee8cc1Swenshuai.xi }
4460*53ee8cc1Swenshuai.xi
4461*53ee8cc1Swenshuai.xi if(bReDoFlag)
4462*53ee8cc1Swenshuai.xi {
4463*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usReadDevcapMask = MASKSET(pMHLResourcePrivate->usReadDevcapMask, 0, BIT(ucBitNumber));
4464*53ee8cc1Swenshuai.xi
4465*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->usReadDevcapMask == 0)
4466*53ee8cc1Swenshuai.xi {
4467*53ee8cc1Swenshuai.xi SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_DEVCAP_DONE_FLAG);
4468*53ee8cc1Swenshuai.xi
4469*53ee8cc1Swenshuai.xi _mdrv_mhl_CheckDeviceCapability(pMHLResourcePrivate);
4470*53ee8cc1Swenshuai.xi }
4471*53ee8cc1Swenshuai.xi }
4472*53ee8cc1Swenshuai.xi }
4473*53ee8cc1Swenshuai.xi else
4474*53ee8cc1Swenshuai.xi {
4475*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG);
4476*53ee8cc1Swenshuai.xi }
4477*53ee8cc1Swenshuai.xi }while(bReDoFlag);
4478*53ee8cc1Swenshuai.xi
4479*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG))
4480*53ee8cc1Swenshuai.xi {
4481*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
4482*53ee8cc1Swenshuai.xi }
4483*53ee8cc1Swenshuai.xi }
4484*53ee8cc1Swenshuai.xi else
4485*53ee8cc1Swenshuai.xi {
4486*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG))
4487*53ee8cc1Swenshuai.xi {
4488*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
4489*53ee8cc1Swenshuai.xi {
4490*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
4491*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG);
4492*53ee8cc1Swenshuai.xi }
4493*53ee8cc1Swenshuai.xi }
4494*53ee8cc1Swenshuai.xi }
4495*53ee8cc1Swenshuai.xi }
4496*53ee8cc1Swenshuai.xi
4497*53ee8cc1Swenshuai.xi //**************************************************************************
4498*53ee8cc1Swenshuai.xi // [Function Name]:
4499*53ee8cc1Swenshuai.xi // _mdrv_mhl_ReadExtendDeviceCapabilityProc()
4500*53ee8cc1Swenshuai.xi // [Description]
4501*53ee8cc1Swenshuai.xi //
4502*53ee8cc1Swenshuai.xi // [Arguments]:
4503*53ee8cc1Swenshuai.xi //
4504*53ee8cc1Swenshuai.xi // [Return]:
4505*53ee8cc1Swenshuai.xi //
4506*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ReadExtendDeviceCapabilityProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4507*53ee8cc1Swenshuai.xi void _mdrv_mhl_ReadExtendDeviceCapabilityProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4508*53ee8cc1Swenshuai.xi {
4509*53ee8cc1Swenshuai.xi MS_BOOL bReDoFlag = FALSE;
4510*53ee8cc1Swenshuai.xi MS_U8 ucBitNumber = 0;
4511*53ee8cc1Swenshuai.xi
4512*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
4513*53ee8cc1Swenshuai.xi {
4514*53ee8cc1Swenshuai.xi do
4515*53ee8cc1Swenshuai.xi {
4516*53ee8cc1Swenshuai.xi bReDoFlag = FALSE;
4517*53ee8cc1Swenshuai.xi
4518*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->usReadExtendDevcapMask > 0)
4519*53ee8cc1Swenshuai.xi {
4520*53ee8cc1Swenshuai.xi ucBitNumber = _mdrv_mhl_GetLeastBitNum(pMHLResourcePrivate->usReadExtendDevcapMask);
4521*53ee8cc1Swenshuai.xi
4522*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG))
4523*53ee8cc1Swenshuai.xi {
4524*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG))
4525*53ee8cc1Swenshuai.xi {
4526*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
4527*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4528*53ee8cc1Swenshuai.xi
4529*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +ucBitNumber] = pMHLResourcePrivate->ucAskData;
4530*53ee8cc1Swenshuai.xi
4531*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SOURCE_INFO)
4532*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL read extend devcap[%d] = %x\r\n", ucBitNumber, pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +ucBitNumber]);
4533*53ee8cc1Swenshuai.xi #endif
4534*53ee8cc1Swenshuai.xi
4535*53ee8cc1Swenshuai.xi bReDoFlag = TRUE;
4536*53ee8cc1Swenshuai.xi }
4537*53ee8cc1Swenshuai.xi }
4538*53ee8cc1Swenshuai.xi else if((!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG)) && (!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG)))
4539*53ee8cc1Swenshuai.xi {
4540*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusReadDeviceCapability(pMHLResourcePrivate, ucBitNumber, TRUE))
4541*53ee8cc1Swenshuai.xi {
4542*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4543*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
4544*53ee8cc1Swenshuai.xi }
4545*53ee8cc1Swenshuai.xi }
4546*53ee8cc1Swenshuai.xi
4547*53ee8cc1Swenshuai.xi if(bReDoFlag)
4548*53ee8cc1Swenshuai.xi {
4549*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usReadExtendDevcapMask = MASKSET(pMHLResourcePrivate->usReadExtendDevcapMask, 0, BIT(ucBitNumber));
4550*53ee8cc1Swenshuai.xi
4551*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->usReadExtendDevcapMask == 0)
4552*53ee8cc1Swenshuai.xi {
4553*53ee8cc1Swenshuai.xi SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_XDEVCAP_DONE_FLAG);
4554*53ee8cc1Swenshuai.xi
4555*53ee8cc1Swenshuai.xi _mdrv_mhl_CheckDeviceCapability(pMHLResourcePrivate);
4556*53ee8cc1Swenshuai.xi }
4557*53ee8cc1Swenshuai.xi }
4558*53ee8cc1Swenshuai.xi }
4559*53ee8cc1Swenshuai.xi else
4560*53ee8cc1Swenshuai.xi {
4561*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG);
4562*53ee8cc1Swenshuai.xi }
4563*53ee8cc1Swenshuai.xi }while(bReDoFlag);
4564*53ee8cc1Swenshuai.xi
4565*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG))
4566*53ee8cc1Swenshuai.xi {
4567*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
4568*53ee8cc1Swenshuai.xi }
4569*53ee8cc1Swenshuai.xi }
4570*53ee8cc1Swenshuai.xi else
4571*53ee8cc1Swenshuai.xi {
4572*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG))
4573*53ee8cc1Swenshuai.xi {
4574*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
4575*53ee8cc1Swenshuai.xi {
4576*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
4577*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG);
4578*53ee8cc1Swenshuai.xi }
4579*53ee8cc1Swenshuai.xi }
4580*53ee8cc1Swenshuai.xi }
4581*53ee8cc1Swenshuai.xi }
4582*53ee8cc1Swenshuai.xi
4583*53ee8cc1Swenshuai.xi //**************************************************************************
4584*53ee8cc1Swenshuai.xi // [Function Name]:
4585*53ee8cc1Swenshuai.xi // _mdrv_mhl_WriteBurstEventProc()
4586*53ee8cc1Swenshuai.xi // [Description]
4587*53ee8cc1Swenshuai.xi //
4588*53ee8cc1Swenshuai.xi // [Arguments]:
4589*53ee8cc1Swenshuai.xi //
4590*53ee8cc1Swenshuai.xi // [Return]:
4591*53ee8cc1Swenshuai.xi //
4592*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_WriteBurstEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4593*53ee8cc1Swenshuai.xi void _mdrv_mhl_WriteBurstEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4594*53ee8cc1Swenshuai.xi {
4595*53ee8cc1Swenshuai.xi switch(pMHLResourcePrivate->ucWriteBurstState)
4596*53ee8cc1Swenshuai.xi {
4597*53ee8cc1Swenshuai.xi case MHL_CBUS_WRITE_BURST_START:
4598*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(2), FALSE))
4599*53ee8cc1Swenshuai.xi {
4600*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_REQUEST;
4601*53ee8cc1Swenshuai.xi
4602*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_WAIT_WRITE_GRANT, MHL_WAIT_WRITE_GRANT_TIME);
4603*53ee8cc1Swenshuai.xi }
4604*53ee8cc1Swenshuai.xi
4605*53ee8cc1Swenshuai.xi break;
4606*53ee8cc1Swenshuai.xi
4607*53ee8cc1Swenshuai.xi case MHL_CBUS_WRITE_BURST_SEND_DATA:
4608*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(1), FALSE))
4609*53ee8cc1Swenshuai.xi {
4610*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_END;
4611*53ee8cc1Swenshuai.xi }
4612*53ee8cc1Swenshuai.xi break;
4613*53ee8cc1Swenshuai.xi
4614*53ee8cc1Swenshuai.xi case MHL_CBUS_WRITE_BURST_END:
4615*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_NONE;
4616*53ee8cc1Swenshuai.xi break;
4617*53ee8cc1Swenshuai.xi
4618*53ee8cc1Swenshuai.xi default:
4619*53ee8cc1Swenshuai.xi
4620*53ee8cc1Swenshuai.xi break;
4621*53ee8cc1Swenshuai.xi };
4622*53ee8cc1Swenshuai.xi }
4623*53ee8cc1Swenshuai.xi
4624*53ee8cc1Swenshuai.xi //**************************************************************************
4625*53ee8cc1Swenshuai.xi // [Function Name]:
4626*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetDTDBurstfor3D()
4627*53ee8cc1Swenshuai.xi // [Description]
4628*53ee8cc1Swenshuai.xi //
4629*53ee8cc1Swenshuai.xi // [Arguments]:
4630*53ee8cc1Swenshuai.xi //
4631*53ee8cc1Swenshuai.xi // [Return]:
4632*53ee8cc1Swenshuai.xi //
4633*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetDTDBurstfor3D(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)4634*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetDTDBurstfor3D(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
4635*53ee8cc1Swenshuai.xi {
4636*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
4637*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4638*53ee8cc1Swenshuai.xi MS_U8 ucDTDCount = 0;
4639*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4640*53ee8cc1Swenshuai.xi
4641*53ee8cc1Swenshuai.xi ucDTDCount = ucSequence *MHL_3D_SEQUENCE_LENGTH;
4642*53ee8cc1Swenshuai.xi
4643*53ee8cc1Swenshuai.xi pData[0] = (MHL_BURST_ID_3D_DTD >> 8);
4644*53ee8cc1Swenshuai.xi pData[1] = (MHL_BURST_ID_3D_DTD &BMASK(7:0));
4645*53ee8cc1Swenshuai.xi pData[3] = pMHLResourcePrivate->uc3DTotalEntryDTD;
4646*53ee8cc1Swenshuai.xi
4647*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->uc3DTotalEntryDTD == 0)
4648*53ee8cc1Swenshuai.xi {
4649*53ee8cc1Swenshuai.xi bFinish = TRUE;
4650*53ee8cc1Swenshuai.xi }
4651*53ee8cc1Swenshuai.xi
4652*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_3D_SEQUENCE_LENGTH; uctemp++)
4653*53ee8cc1Swenshuai.xi {
4654*53ee8cc1Swenshuai.xi if((!bFinish) && ((ucDTDCount +uctemp) == (pMHLResourcePrivate->uc3DTotalEntryDTD -1)))
4655*53ee8cc1Swenshuai.xi {
4656*53ee8cc1Swenshuai.xi bFinish = TRUE;
4657*53ee8cc1Swenshuai.xi }
4658*53ee8cc1Swenshuai.xi
4659*53ee8cc1Swenshuai.xi if((ucDTDCount +uctemp) < pMHLResourcePrivate->uc3DTotalEntryDTD)
4660*53ee8cc1Swenshuai.xi {
4661*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4662*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = pMHLResourcePrivate->uc3DInformationDTD[ucDTDCount +uctemp] &BMASK(3:0);
4663*53ee8cc1Swenshuai.xi }
4664*53ee8cc1Swenshuai.xi else
4665*53ee8cc1Swenshuai.xi {
4666*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4667*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = 0;
4668*53ee8cc1Swenshuai.xi }
4669*53ee8cc1Swenshuai.xi }
4670*53ee8cc1Swenshuai.xi
4671*53ee8cc1Swenshuai.xi ucSequence++;
4672*53ee8cc1Swenshuai.xi
4673*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
4674*53ee8cc1Swenshuai.xi
4675*53ee8cc1Swenshuai.xi if(bFinish)
4676*53ee8cc1Swenshuai.xi {
4677*53ee8cc1Swenshuai.xi pData[5] = pMHLResourcePrivate->uc3DTotalEntryDTD -ucDTDCount;
4678*53ee8cc1Swenshuai.xi ucSequence = 0;
4679*53ee8cc1Swenshuai.xi }
4680*53ee8cc1Swenshuai.xi else
4681*53ee8cc1Swenshuai.xi {
4682*53ee8cc1Swenshuai.xi pData[5] = MHL_3D_SEQUENCE_LENGTH;
4683*53ee8cc1Swenshuai.xi }
4684*53ee8cc1Swenshuai.xi
4685*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4686*53ee8cc1Swenshuai.xi
4687*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4688*53ee8cc1Swenshuai.xi
4689*53ee8cc1Swenshuai.xi return bFinish;
4690*53ee8cc1Swenshuai.xi }
4691*53ee8cc1Swenshuai.xi
4692*53ee8cc1Swenshuai.xi //**************************************************************************
4693*53ee8cc1Swenshuai.xi // [Function Name]:
4694*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetVICBurstfor3D()
4695*53ee8cc1Swenshuai.xi // [Description]
4696*53ee8cc1Swenshuai.xi //
4697*53ee8cc1Swenshuai.xi // [Arguments]:
4698*53ee8cc1Swenshuai.xi //
4699*53ee8cc1Swenshuai.xi // [Return]:
4700*53ee8cc1Swenshuai.xi //
4701*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetVICBurstfor3D(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)4702*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetVICBurstfor3D(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
4703*53ee8cc1Swenshuai.xi {
4704*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
4705*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4706*53ee8cc1Swenshuai.xi MS_U8 ucVICCount = 0;
4707*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4708*53ee8cc1Swenshuai.xi
4709*53ee8cc1Swenshuai.xi ucVICCount = ucSequence *MHL_3D_SEQUENCE_LENGTH;
4710*53ee8cc1Swenshuai.xi
4711*53ee8cc1Swenshuai.xi pData[0] = (MHL_BURST_ID_3D_VIC >> 8);
4712*53ee8cc1Swenshuai.xi pData[1] = (MHL_BURST_ID_3D_VIC &BMASK(7:0));
4713*53ee8cc1Swenshuai.xi pData[3] = pMHLResourcePrivate->uc3DTotalEntryVIC;
4714*53ee8cc1Swenshuai.xi
4715*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->uc3DTotalEntryVIC == 0)
4716*53ee8cc1Swenshuai.xi {
4717*53ee8cc1Swenshuai.xi bFinish = TRUE;
4718*53ee8cc1Swenshuai.xi }
4719*53ee8cc1Swenshuai.xi
4720*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_3D_SEQUENCE_LENGTH; uctemp++)
4721*53ee8cc1Swenshuai.xi {
4722*53ee8cc1Swenshuai.xi if((!bFinish) && ((ucVICCount +uctemp) == (pMHLResourcePrivate->uc3DTotalEntryVIC -1)))
4723*53ee8cc1Swenshuai.xi {
4724*53ee8cc1Swenshuai.xi bFinish = TRUE;
4725*53ee8cc1Swenshuai.xi }
4726*53ee8cc1Swenshuai.xi
4727*53ee8cc1Swenshuai.xi if((ucVICCount +uctemp) < pMHLResourcePrivate->uc3DTotalEntryVIC)
4728*53ee8cc1Swenshuai.xi {
4729*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4730*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = pMHLResourcePrivate->uc3DInformationVIC[ucVICCount +uctemp] &BMASK(3:0);
4731*53ee8cc1Swenshuai.xi }
4732*53ee8cc1Swenshuai.xi else
4733*53ee8cc1Swenshuai.xi {
4734*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4735*53ee8cc1Swenshuai.xi pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = 0;
4736*53ee8cc1Swenshuai.xi }
4737*53ee8cc1Swenshuai.xi }
4738*53ee8cc1Swenshuai.xi
4739*53ee8cc1Swenshuai.xi ucSequence++;
4740*53ee8cc1Swenshuai.xi
4741*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
4742*53ee8cc1Swenshuai.xi
4743*53ee8cc1Swenshuai.xi if(bFinish)
4744*53ee8cc1Swenshuai.xi {
4745*53ee8cc1Swenshuai.xi pData[5] = pMHLResourcePrivate->uc3DTotalEntryVIC -ucVICCount;
4746*53ee8cc1Swenshuai.xi ucSequence = 0;
4747*53ee8cc1Swenshuai.xi }
4748*53ee8cc1Swenshuai.xi else
4749*53ee8cc1Swenshuai.xi {
4750*53ee8cc1Swenshuai.xi pData[5] = MHL_3D_SEQUENCE_LENGTH;
4751*53ee8cc1Swenshuai.xi }
4752*53ee8cc1Swenshuai.xi
4753*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4754*53ee8cc1Swenshuai.xi
4755*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4756*53ee8cc1Swenshuai.xi
4757*53ee8cc1Swenshuai.xi return bFinish;
4758*53ee8cc1Swenshuai.xi }
4759*53ee8cc1Swenshuai.xi
4760*53ee8cc1Swenshuai.xi //**************************************************************************
4761*53ee8cc1Swenshuai.xi // [Function Name]:
4762*53ee8cc1Swenshuai.xi // _mdrv_mhl_Send3DTimingInformation()
4763*53ee8cc1Swenshuai.xi // [Description]
4764*53ee8cc1Swenshuai.xi //
4765*53ee8cc1Swenshuai.xi // [Arguments]:
4766*53ee8cc1Swenshuai.xi //
4767*53ee8cc1Swenshuai.xi // [Return]:
4768*53ee8cc1Swenshuai.xi //
4769*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_Send3DTimingInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4770*53ee8cc1Swenshuai.xi void _mdrv_mhl_Send3DTimingInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4771*53ee8cc1Swenshuai.xi {
4772*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
4773*53ee8cc1Swenshuai.xi MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
4774*53ee8cc1Swenshuai.xi
4775*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG))
4776*53ee8cc1Swenshuai.xi {
4777*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetDTDBurstfor3D(pMHLResourcePrivate, ucData))
4778*53ee8cc1Swenshuai.xi {
4779*53ee8cc1Swenshuai.xi bFinish = TRUE;
4780*53ee8cc1Swenshuai.xi }
4781*53ee8cc1Swenshuai.xi
4782*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
4783*53ee8cc1Swenshuai.xi {
4784*53ee8cc1Swenshuai.xi if(bFinish)
4785*53ee8cc1Swenshuai.xi {
4786*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG);
4787*53ee8cc1Swenshuai.xi }
4788*53ee8cc1Swenshuai.xi
4789*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
4790*53ee8cc1Swenshuai.xi
4791*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent 3D DTD port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
4792*53ee8cc1Swenshuai.xi }
4793*53ee8cc1Swenshuai.xi }
4794*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG))
4795*53ee8cc1Swenshuai.xi {
4796*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetVICBurstfor3D(pMHLResourcePrivate, ucData))
4797*53ee8cc1Swenshuai.xi {
4798*53ee8cc1Swenshuai.xi bFinish= TRUE;
4799*53ee8cc1Swenshuai.xi }
4800*53ee8cc1Swenshuai.xi
4801*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
4802*53ee8cc1Swenshuai.xi {
4803*53ee8cc1Swenshuai.xi if(bFinish)
4804*53ee8cc1Swenshuai.xi {
4805*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG);
4806*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG);
4807*53ee8cc1Swenshuai.xi }
4808*53ee8cc1Swenshuai.xi
4809*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
4810*53ee8cc1Swenshuai.xi
4811*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent 3D VIC port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
4812*53ee8cc1Swenshuai.xi }
4813*53ee8cc1Swenshuai.xi }
4814*53ee8cc1Swenshuai.xi }
4815*53ee8cc1Swenshuai.xi
4816*53ee8cc1Swenshuai.xi //**************************************************************************
4817*53ee8cc1Swenshuai.xi // [Function Name]:
4818*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetBurstforVirtualChannel()
4819*53ee8cc1Swenshuai.xi // [Description]
4820*53ee8cc1Swenshuai.xi //
4821*53ee8cc1Swenshuai.xi // [Arguments]:
4822*53ee8cc1Swenshuai.xi //
4823*53ee8cc1Swenshuai.xi // [Return]:
4824*53ee8cc1Swenshuai.xi //
4825*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetBurstforVirtualChannel(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bVCConfirm,MS_U8 * pData)4826*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetBurstforVirtualChannel(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bVCConfirm, MS_U8 *pData)
4827*53ee8cc1Swenshuai.xi {
4828*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
4829*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4830*53ee8cc1Swenshuai.xi MS_U8 ucVCCount = 0;
4831*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4832*53ee8cc1Swenshuai.xi MS_U8 ucVCTotalEntry = 0;
4833*53ee8cc1Swenshuai.xi MS_U8 ucVCFinishEntry = 0;
4834*53ee8cc1Swenshuai.xi MS_U16 usWriteBurstID = MHL_BURST_ID_VC_ASSIGN;
4835*53ee8cc1Swenshuai.xi
4836*53ee8cc1Swenshuai.xi if(bVCConfirm)
4837*53ee8cc1Swenshuai.xi {
4838*53ee8cc1Swenshuai.xi usWriteBurstID = MHL_BURST_ID_VC_CONFIRM;
4839*53ee8cc1Swenshuai.xi }
4840*53ee8cc1Swenshuai.xi
4841*53ee8cc1Swenshuai.xi ucVCFinishEntry = ucSequence *MHL_VC_SEQUENCE_LENGTH;
4842*53ee8cc1Swenshuai.xi
4843*53ee8cc1Swenshuai.xi pData[0] = (usWriteBurstID >> 8);
4844*53ee8cc1Swenshuai.xi pData[1] = (usWriteBurstID &BMASK(7:0));
4845*53ee8cc1Swenshuai.xi pData[15] = 0;
4846*53ee8cc1Swenshuai.xi
4847*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
4848*53ee8cc1Swenshuai.xi {
4849*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm)
4850*53ee8cc1Swenshuai.xi {
4851*53ee8cc1Swenshuai.xi ucVCTotalEntry++;
4852*53ee8cc1Swenshuai.xi
4853*53ee8cc1Swenshuai.xi if(ucVCFinishEntry > 0)
4854*53ee8cc1Swenshuai.xi {
4855*53ee8cc1Swenshuai.xi ucVCFinishEntry--;
4856*53ee8cc1Swenshuai.xi }
4857*53ee8cc1Swenshuai.xi else if(ucVCCount < MHL_VC_SEQUENCE_LENGTH)
4858*53ee8cc1Swenshuai.xi {
4859*53ee8cc1Swenshuai.xi pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber;
4860*53ee8cc1Swenshuai.xi pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH +1] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID;
4861*53ee8cc1Swenshuai.xi
4862*53ee8cc1Swenshuai.xi if(bVCConfirm)
4863*53ee8cc1Swenshuai.xi {
4864*53ee8cc1Swenshuai.xi pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH +2] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCResponseCode;
4865*53ee8cc1Swenshuai.xi }
4866*53ee8cc1Swenshuai.xi else
4867*53ee8cc1Swenshuai.xi {
4868*53ee8cc1Swenshuai.xi pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH +2] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
4869*53ee8cc1Swenshuai.xi }
4870*53ee8cc1Swenshuai.xi
4871*53ee8cc1Swenshuai.xi ucVCCount++;
4872*53ee8cc1Swenshuai.xi }
4873*53ee8cc1Swenshuai.xi }
4874*53ee8cc1Swenshuai.xi }
4875*53ee8cc1Swenshuai.xi
4876*53ee8cc1Swenshuai.xi ucSequence++;
4877*53ee8cc1Swenshuai.xi
4878*53ee8cc1Swenshuai.xi pData[3] = ucVCTotalEntry;
4879*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
4880*53ee8cc1Swenshuai.xi pData[5] = ucVCCount;
4881*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4882*53ee8cc1Swenshuai.xi
4883*53ee8cc1Swenshuai.xi if(((ucSequence -1) *MHL_VC_SEQUENCE_LENGTH +ucVCCount) == ucVCTotalEntry)
4884*53ee8cc1Swenshuai.xi {
4885*53ee8cc1Swenshuai.xi bFinish = TRUE;
4886*53ee8cc1Swenshuai.xi ucSequence = 0;
4887*53ee8cc1Swenshuai.xi }
4888*53ee8cc1Swenshuai.xi
4889*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4890*53ee8cc1Swenshuai.xi
4891*53ee8cc1Swenshuai.xi return bFinish;
4892*53ee8cc1Swenshuai.xi }
4893*53ee8cc1Swenshuai.xi
4894*53ee8cc1Swenshuai.xi //**************************************************************************
4895*53ee8cc1Swenshuai.xi // [Function Name]:
4896*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendVirtualChannelInformation()
4897*53ee8cc1Swenshuai.xi // [Description]
4898*53ee8cc1Swenshuai.xi //
4899*53ee8cc1Swenshuai.xi // [Arguments]:
4900*53ee8cc1Swenshuai.xi //
4901*53ee8cc1Swenshuai.xi // [Return]:
4902*53ee8cc1Swenshuai.xi //
4903*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendVirtualChannelInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4904*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendVirtualChannelInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4905*53ee8cc1Swenshuai.xi {
4906*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
4907*53ee8cc1Swenshuai.xi MS_BOOL bSendVCConfirm = FALSE;
4908*53ee8cc1Swenshuai.xi MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
4909*53ee8cc1Swenshuai.xi
4910*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetBurstforVirtualChannel(pMHLResourcePrivate, GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG), ucData))
4911*53ee8cc1Swenshuai.xi {
4912*53ee8cc1Swenshuai.xi bFinish = TRUE;
4913*53ee8cc1Swenshuai.xi }
4914*53ee8cc1Swenshuai.xi
4915*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
4916*53ee8cc1Swenshuai.xi {
4917*53ee8cc1Swenshuai.xi if(bFinish)
4918*53ee8cc1Swenshuai.xi {
4919*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG))
4920*53ee8cc1Swenshuai.xi {
4921*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG);
4922*53ee8cc1Swenshuai.xi
4923*53ee8cc1Swenshuai.xi bSendVCConfirm = TRUE;
4924*53ee8cc1Swenshuai.xi }
4925*53ee8cc1Swenshuai.xi
4926*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_INFORMATION_FLAG);
4927*53ee8cc1Swenshuai.xi }
4928*53ee8cc1Swenshuai.xi
4929*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
4930*53ee8cc1Swenshuai.xi
4931*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent VC information port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
4932*53ee8cc1Swenshuai.xi }
4933*53ee8cc1Swenshuai.xi
4934*53ee8cc1Swenshuai.xi if(bSendVCConfirm)
4935*53ee8cc1Swenshuai.xi {
4936*53ee8cc1Swenshuai.xi _mdrv_mhl_SortingVCInformation(pMHLResourcePrivate, TRUE);
4937*53ee8cc1Swenshuai.xi
4938*53ee8cc1Swenshuai.xi _mdrv_mhl_eCbusTimeSlotAllocation(pMHLResourcePrivate);
4939*53ee8cc1Swenshuai.xi }
4940*53ee8cc1Swenshuai.xi }
4941*53ee8cc1Swenshuai.xi
4942*53ee8cc1Swenshuai.xi //**************************************************************************
4943*53ee8cc1Swenshuai.xi // [Function Name]:
4944*53ee8cc1Swenshuai.xi // mdrv_mhl_GetHighEndVideoVIC()
4945*53ee8cc1Swenshuai.xi // [Description]
4946*53ee8cc1Swenshuai.xi //
4947*53ee8cc1Swenshuai.xi // [Arguments]:
4948*53ee8cc1Swenshuai.xi //
4949*53ee8cc1Swenshuai.xi // [Return]:
4950*53ee8cc1Swenshuai.xi //
4951*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetHighEndVideoVIC(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)4952*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetHighEndVideoVIC(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
4953*53ee8cc1Swenshuai.xi {
4954*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
4955*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
4956*53ee8cc1Swenshuai.xi MS_U8 ucEntryCount = 0;
4957*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4958*53ee8cc1Swenshuai.xi MS_U8 ucFinishEntry = 0;
4959*53ee8cc1Swenshuai.xi MS_U8 ucTotalEntry = pMHLResourcePrivate->ucHighEndVICTotalEntry;
4960*53ee8cc1Swenshuai.xi
4961*53ee8cc1Swenshuai.xi ucFinishEntry = ucSequence *MHL_HEV_VIC_SEQUENCE_LENGTH;
4962*53ee8cc1Swenshuai.xi
4963*53ee8cc1Swenshuai.xi pData[0] = (MHL_BURST_ID_HEV_VIC >> 8);
4964*53ee8cc1Swenshuai.xi pData[1] = (MHL_BURST_ID_HEV_VIC &BMASK(7:0));
4965*53ee8cc1Swenshuai.xi pData[3] = ucTotalEntry;
4966*53ee8cc1Swenshuai.xi
4967*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_HEV_VIC_SEQUENCE_LENGTH; uctemp++)
4968*53ee8cc1Swenshuai.xi {
4969*53ee8cc1Swenshuai.xi if((uctemp +ucFinishEntry) == ucTotalEntry)
4970*53ee8cc1Swenshuai.xi {
4971*53ee8cc1Swenshuai.xi break;
4972*53ee8cc1Swenshuai.xi }
4973*53ee8cc1Swenshuai.xi
4974*53ee8cc1Swenshuai.xi pData[6 +(uctemp *2)] = pMHLResourcePrivate->usHighEndVICTable[uctemp +ucFinishEntry] >> 8;
4975*53ee8cc1Swenshuai.xi pData[7 +(uctemp *2)] = pMHLResourcePrivate->usHighEndVICTable[uctemp +ucFinishEntry] &BMASK(7:0);
4976*53ee8cc1Swenshuai.xi
4977*53ee8cc1Swenshuai.xi ucEntryCount++;
4978*53ee8cc1Swenshuai.xi }
4979*53ee8cc1Swenshuai.xi
4980*53ee8cc1Swenshuai.xi ucSequence++;
4981*53ee8cc1Swenshuai.xi
4982*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
4983*53ee8cc1Swenshuai.xi pData[5] = ucEntryCount;
4984*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4985*53ee8cc1Swenshuai.xi
4986*53ee8cc1Swenshuai.xi if(((ucSequence -1) *MHL_HEV_VIC_SEQUENCE_LENGTH +ucEntryCount) == ucTotalEntry)
4987*53ee8cc1Swenshuai.xi {
4988*53ee8cc1Swenshuai.xi bFinish = TRUE;
4989*53ee8cc1Swenshuai.xi ucSequence = 0;
4990*53ee8cc1Swenshuai.xi }
4991*53ee8cc1Swenshuai.xi
4992*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4993*53ee8cc1Swenshuai.xi
4994*53ee8cc1Swenshuai.xi return bFinish;
4995*53ee8cc1Swenshuai.xi }
4996*53ee8cc1Swenshuai.xi
4997*53ee8cc1Swenshuai.xi //**************************************************************************
4998*53ee8cc1Swenshuai.xi // [Function Name]:
4999*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetHighEndVideoDTDA()
5000*53ee8cc1Swenshuai.xi // [Description]
5001*53ee8cc1Swenshuai.xi //
5002*53ee8cc1Swenshuai.xi // [Arguments]:
5003*53ee8cc1Swenshuai.xi //
5004*53ee8cc1Swenshuai.xi // [Return]:
5005*53ee8cc1Swenshuai.xi //
5006*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetHighEndVideoDTDA(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5007*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetHighEndVideoDTDA(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5008*53ee8cc1Swenshuai.xi {
5009*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
5010*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
5011*53ee8cc1Swenshuai.xi MS_U8 ucEntryCount = 0;
5012*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5013*53ee8cc1Swenshuai.xi MS_U8 ucFinishEntry = 0;
5014*53ee8cc1Swenshuai.xi MS_U8 ucTotalEntry = MHL_HEV_DTD_TOTAL_ENTRY;
5015*53ee8cc1Swenshuai.xi
5016*53ee8cc1Swenshuai.xi ucFinishEntry = ucSequence *MHL_HEV_DTD_SEQUENCE_LENGTH;
5017*53ee8cc1Swenshuai.xi
5018*53ee8cc1Swenshuai.xi pData[0] = (MHL_BURST_ID_HEV_DTDA >> 8);
5019*53ee8cc1Swenshuai.xi pData[1] = (MHL_BURST_ID_HEV_DTDA &BMASK(7:0));
5020*53ee8cc1Swenshuai.xi pData[3] = MHL_HEV_DTD_TOTAL_ENTRY;
5021*53ee8cc1Swenshuai.xi
5022*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < ucTotalEntry; uctemp++)
5023*53ee8cc1Swenshuai.xi {
5024*53ee8cc1Swenshuai.xi if(ucFinishEntry > 0)
5025*53ee8cc1Swenshuai.xi {
5026*53ee8cc1Swenshuai.xi ucFinishEntry--;
5027*53ee8cc1Swenshuai.xi }
5028*53ee8cc1Swenshuai.xi else if(ucEntryCount < MHL_HEV_DTD_SEQUENCE_LENGTH)
5029*53ee8cc1Swenshuai.xi {
5030*53ee8cc1Swenshuai.xi ucEntryCount++;
5031*53ee8cc1Swenshuai.xi }
5032*53ee8cc1Swenshuai.xi }
5033*53ee8cc1Swenshuai.xi
5034*53ee8cc1Swenshuai.xi ucSequence++;
5035*53ee8cc1Swenshuai.xi
5036*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
5037*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5038*53ee8cc1Swenshuai.xi
5039*53ee8cc1Swenshuai.xi if(((ucSequence -1) *MHL_HEV_DTD_SEQUENCE_LENGTH +ucEntryCount) == MHL_HEV_DTD_TOTAL_ENTRY)
5040*53ee8cc1Swenshuai.xi {
5041*53ee8cc1Swenshuai.xi bFinish = TRUE;
5042*53ee8cc1Swenshuai.xi ucSequence = 0;
5043*53ee8cc1Swenshuai.xi }
5044*53ee8cc1Swenshuai.xi
5045*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5046*53ee8cc1Swenshuai.xi
5047*53ee8cc1Swenshuai.xi return bFinish;
5048*53ee8cc1Swenshuai.xi }
5049*53ee8cc1Swenshuai.xi
5050*53ee8cc1Swenshuai.xi //**************************************************************************
5051*53ee8cc1Swenshuai.xi // [Function Name]:
5052*53ee8cc1Swenshuai.xi // _mdrv_mhl_GetHighEndVideoDTDB()
5053*53ee8cc1Swenshuai.xi // [Description]
5054*53ee8cc1Swenshuai.xi //
5055*53ee8cc1Swenshuai.xi // [Arguments]:
5056*53ee8cc1Swenshuai.xi //
5057*53ee8cc1Swenshuai.xi // [Return]:
5058*53ee8cc1Swenshuai.xi //
5059*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetHighEndVideoDTDB(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5060*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetHighEndVideoDTDB(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5061*53ee8cc1Swenshuai.xi {
5062*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
5063*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
5064*53ee8cc1Swenshuai.xi MS_U8 ucEntryCount = 0;
5065*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5066*53ee8cc1Swenshuai.xi MS_U8 ucFinishEntry = 0;
5067*53ee8cc1Swenshuai.xi MS_U8 ucTotalEntry = MHL_HEV_DTD_TOTAL_ENTRY;
5068*53ee8cc1Swenshuai.xi
5069*53ee8cc1Swenshuai.xi ucFinishEntry = ucSequence *MHL_HEV_DTD_SEQUENCE_LENGTH;
5070*53ee8cc1Swenshuai.xi
5071*53ee8cc1Swenshuai.xi pData[0] = (MHL_BURST_ID_HEV_DTDB >> 8);
5072*53ee8cc1Swenshuai.xi pData[1] = (MHL_BURST_ID_HEV_DTDB &BMASK(7:0));
5073*53ee8cc1Swenshuai.xi pData[3] = MHL_HEV_DTD_TOTAL_ENTRY;
5074*53ee8cc1Swenshuai.xi
5075*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < ucTotalEntry; uctemp++)
5076*53ee8cc1Swenshuai.xi {
5077*53ee8cc1Swenshuai.xi if(ucFinishEntry > 0)
5078*53ee8cc1Swenshuai.xi {
5079*53ee8cc1Swenshuai.xi ucFinishEntry--;
5080*53ee8cc1Swenshuai.xi }
5081*53ee8cc1Swenshuai.xi else if(ucEntryCount < MHL_HEV_DTD_SEQUENCE_LENGTH)
5082*53ee8cc1Swenshuai.xi {
5083*53ee8cc1Swenshuai.xi ucEntryCount++;
5084*53ee8cc1Swenshuai.xi }
5085*53ee8cc1Swenshuai.xi }
5086*53ee8cc1Swenshuai.xi
5087*53ee8cc1Swenshuai.xi ucSequence++;
5088*53ee8cc1Swenshuai.xi
5089*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
5090*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5091*53ee8cc1Swenshuai.xi
5092*53ee8cc1Swenshuai.xi if(((ucSequence -1) *MHL_HEV_DTD_SEQUENCE_LENGTH +ucEntryCount) == MHL_HEV_DTD_TOTAL_ENTRY)
5093*53ee8cc1Swenshuai.xi {
5094*53ee8cc1Swenshuai.xi bFinish = TRUE;
5095*53ee8cc1Swenshuai.xi ucSequence = 0;
5096*53ee8cc1Swenshuai.xi }
5097*53ee8cc1Swenshuai.xi
5098*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5099*53ee8cc1Swenshuai.xi
5100*53ee8cc1Swenshuai.xi return bFinish;
5101*53ee8cc1Swenshuai.xi }
5102*53ee8cc1Swenshuai.xi
5103*53ee8cc1Swenshuai.xi //**************************************************************************
5104*53ee8cc1Swenshuai.xi // [Function Name]:
5105*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendHighEndVideoSupport()
5106*53ee8cc1Swenshuai.xi // [Description]
5107*53ee8cc1Swenshuai.xi //
5108*53ee8cc1Swenshuai.xi // [Arguments]:
5109*53ee8cc1Swenshuai.xi //
5110*53ee8cc1Swenshuai.xi // [Return]:
5111*53ee8cc1Swenshuai.xi //
5112*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendHighEndVideoSupport(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5113*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendHighEndVideoSupport(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5114*53ee8cc1Swenshuai.xi {
5115*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
5116*53ee8cc1Swenshuai.xi MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5117*53ee8cc1Swenshuai.xi
5118*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_VIC_FLAG))
5119*53ee8cc1Swenshuai.xi {
5120*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetHighEndVideoVIC(pMHLResourcePrivate, ucData))
5121*53ee8cc1Swenshuai.xi {
5122*53ee8cc1Swenshuai.xi bFinish = TRUE;
5123*53ee8cc1Swenshuai.xi }
5124*53ee8cc1Swenshuai.xi
5125*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5126*53ee8cc1Swenshuai.xi {
5127*53ee8cc1Swenshuai.xi if(bFinish)
5128*53ee8cc1Swenshuai.xi {
5129*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_VIC_FLAG);
5130*53ee8cc1Swenshuai.xi }
5131*53ee8cc1Swenshuai.xi
5132*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5133*53ee8cc1Swenshuai.xi
5134*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent HEV VIC port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5135*53ee8cc1Swenshuai.xi }
5136*53ee8cc1Swenshuai.xi }
5137*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDA_FLAG))
5138*53ee8cc1Swenshuai.xi {
5139*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetHighEndVideoDTDA(pMHLResourcePrivate, ucData))
5140*53ee8cc1Swenshuai.xi {
5141*53ee8cc1Swenshuai.xi bFinish = TRUE;
5142*53ee8cc1Swenshuai.xi }
5143*53ee8cc1Swenshuai.xi
5144*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5145*53ee8cc1Swenshuai.xi {
5146*53ee8cc1Swenshuai.xi if(bFinish)
5147*53ee8cc1Swenshuai.xi {
5148*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDA_FLAG);
5149*53ee8cc1Swenshuai.xi }
5150*53ee8cc1Swenshuai.xi
5151*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5152*53ee8cc1Swenshuai.xi
5153*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent HEV DTDA port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5154*53ee8cc1Swenshuai.xi }
5155*53ee8cc1Swenshuai.xi }
5156*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDB_FLAG))
5157*53ee8cc1Swenshuai.xi {
5158*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetHighEndVideoDTDB(pMHLResourcePrivate, ucData))
5159*53ee8cc1Swenshuai.xi {
5160*53ee8cc1Swenshuai.xi bFinish = TRUE;
5161*53ee8cc1Swenshuai.xi }
5162*53ee8cc1Swenshuai.xi
5163*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5164*53ee8cc1Swenshuai.xi {
5165*53ee8cc1Swenshuai.xi if(bFinish)
5166*53ee8cc1Swenshuai.xi {
5167*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDB_FLAG);
5168*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG);
5169*53ee8cc1Swenshuai.xi }
5170*53ee8cc1Swenshuai.xi
5171*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5172*53ee8cc1Swenshuai.xi
5173*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent HEV DTDB port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5174*53ee8cc1Swenshuai.xi }
5175*53ee8cc1Swenshuai.xi }
5176*53ee8cc1Swenshuai.xi }
5177*53ee8cc1Swenshuai.xi
5178*53ee8cc1Swenshuai.xi //**************************************************************************
5179*53ee8cc1Swenshuai.xi // [Function Name]:
5180*53ee8cc1Swenshuai.xi // mdrv_mhl_GetAudioDataTunnel()
5181*53ee8cc1Swenshuai.xi // [Description]
5182*53ee8cc1Swenshuai.xi //
5183*53ee8cc1Swenshuai.xi // [Arguments]:
5184*53ee8cc1Swenshuai.xi //
5185*53ee8cc1Swenshuai.xi // [Return]:
5186*53ee8cc1Swenshuai.xi //
5187*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetAudioDataTunnel(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5188*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetAudioDataTunnel(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5189*53ee8cc1Swenshuai.xi {
5190*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
5191*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
5192*53ee8cc1Swenshuai.xi MS_U8 ucEntryCount = 0;
5193*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5194*53ee8cc1Swenshuai.xi MS_U8 ucFinishEntry = 0;
5195*53ee8cc1Swenshuai.xi MS_U8 ucTotalEntry = MHL_AUDIO_TUNNEL_TOTAL_ENTRY;
5196*53ee8cc1Swenshuai.xi
5197*53ee8cc1Swenshuai.xi ucFinishEntry = ucSequence *MHL_AUDIO_TUNNEL_SEQUENCE_LENGTH;
5198*53ee8cc1Swenshuai.xi
5199*53ee8cc1Swenshuai.xi pData[0] = (MHL_BURST_ID_ADT_BURSTID >> 8);
5200*53ee8cc1Swenshuai.xi pData[1] = (MHL_BURST_ID_ADT_BURSTID &BMASK(7:0));
5201*53ee8cc1Swenshuai.xi pData[3] = ucTotalEntry;
5202*53ee8cc1Swenshuai.xi
5203*53ee8cc1Swenshuai.xi if((ucSequence == 0) && (MHL_AUDIO_TUNNEL_SADB_RNTRY > 0)) // Support speaker allocation data block
5204*53ee8cc1Swenshuai.xi {
5205*53ee8cc1Swenshuai.xi pData[5] = 1;
5206*53ee8cc1Swenshuai.xi }
5207*53ee8cc1Swenshuai.xi
5208*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_AUDIO_TUNNEL_SEQUENCE_LENGTH; uctemp++)
5209*53ee8cc1Swenshuai.xi {
5210*53ee8cc1Swenshuai.xi if((uctemp +ucFinishEntry) == ucTotalEntry)
5211*53ee8cc1Swenshuai.xi {
5212*53ee8cc1Swenshuai.xi break;
5213*53ee8cc1Swenshuai.xi }
5214*53ee8cc1Swenshuai.xi
5215*53ee8cc1Swenshuai.xi pData[7 +(uctemp *3)] = pMHLResourcePrivate->ulAudioTunnelTable[uctemp +ucFinishEntry] >> 16;
5216*53ee8cc1Swenshuai.xi pData[8 +(uctemp *3)] = pMHLResourcePrivate->ulAudioTunnelTable[uctemp +ucFinishEntry] >> 8;
5217*53ee8cc1Swenshuai.xi pData[9 +(uctemp *3)] = pMHLResourcePrivate->ulAudioTunnelTable[uctemp +ucFinishEntry] &BMASK(7:0);
5218*53ee8cc1Swenshuai.xi
5219*53ee8cc1Swenshuai.xi ucEntryCount++;
5220*53ee8cc1Swenshuai.xi }
5221*53ee8cc1Swenshuai.xi
5222*53ee8cc1Swenshuai.xi ucSequence++;
5223*53ee8cc1Swenshuai.xi
5224*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
5225*53ee8cc1Swenshuai.xi pData[6] = ucEntryCount;
5226*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5227*53ee8cc1Swenshuai.xi
5228*53ee8cc1Swenshuai.xi if(((ucSequence -1) *MHL_AUDIO_TUNNEL_SEQUENCE_LENGTH +ucEntryCount) == ucTotalEntry)
5229*53ee8cc1Swenshuai.xi {
5230*53ee8cc1Swenshuai.xi bFinish = TRUE;
5231*53ee8cc1Swenshuai.xi ucSequence = 0;
5232*53ee8cc1Swenshuai.xi }
5233*53ee8cc1Swenshuai.xi
5234*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5235*53ee8cc1Swenshuai.xi
5236*53ee8cc1Swenshuai.xi return bFinish;
5237*53ee8cc1Swenshuai.xi }
5238*53ee8cc1Swenshuai.xi
5239*53ee8cc1Swenshuai.xi //**************************************************************************
5240*53ee8cc1Swenshuai.xi // [Function Name]:
5241*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendAudioDataTunnelSupport()
5242*53ee8cc1Swenshuai.xi // [Description]
5243*53ee8cc1Swenshuai.xi //
5244*53ee8cc1Swenshuai.xi // [Arguments]:
5245*53ee8cc1Swenshuai.xi //
5246*53ee8cc1Swenshuai.xi // [Return]:
5247*53ee8cc1Swenshuai.xi //
5248*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendAudioDataTunnelSupport(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5249*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendAudioDataTunnelSupport(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5250*53ee8cc1Swenshuai.xi {
5251*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
5252*53ee8cc1Swenshuai.xi MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5253*53ee8cc1Swenshuai.xi
5254*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetAudioDataTunnel(pMHLResourcePrivate, ucData))
5255*53ee8cc1Swenshuai.xi {
5256*53ee8cc1Swenshuai.xi bFinish = TRUE;
5257*53ee8cc1Swenshuai.xi }
5258*53ee8cc1Swenshuai.xi
5259*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5260*53ee8cc1Swenshuai.xi {
5261*53ee8cc1Swenshuai.xi if(bFinish)
5262*53ee8cc1Swenshuai.xi {
5263*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG);
5264*53ee8cc1Swenshuai.xi }
5265*53ee8cc1Swenshuai.xi
5266*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5267*53ee8cc1Swenshuai.xi
5268*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent audio tunnel port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5269*53ee8cc1Swenshuai.xi }
5270*53ee8cc1Swenshuai.xi }
5271*53ee8cc1Swenshuai.xi
5272*53ee8cc1Swenshuai.xi //**************************************************************************
5273*53ee8cc1Swenshuai.xi // [Function Name]:
5274*53ee8cc1Swenshuai.xi // mdrv_mhl_GeteMSCSupportInformation()
5275*53ee8cc1Swenshuai.xi // [Description]
5276*53ee8cc1Swenshuai.xi //
5277*53ee8cc1Swenshuai.xi // [Arguments]:
5278*53ee8cc1Swenshuai.xi //
5279*53ee8cc1Swenshuai.xi // [Return]:
5280*53ee8cc1Swenshuai.xi //
5281*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GeteMSCSupportInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5282*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GeteMSCSupportInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5283*53ee8cc1Swenshuai.xi {
5284*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
5285*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
5286*53ee8cc1Swenshuai.xi MS_U8 ucEntryCount = 0;
5287*53ee8cc1Swenshuai.xi MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5288*53ee8cc1Swenshuai.xi MS_U8 ucFinishEntry = 0;
5289*53ee8cc1Swenshuai.xi MS_U8 ucTotalEntry = MHL_EMSC_SUPPORT_TOTAL_ENTRY;
5290*53ee8cc1Swenshuai.xi
5291*53ee8cc1Swenshuai.xi ucFinishEntry = ucSequence *MHL_EMSC_SUPPORT_SEQUENCE_LENGTH;
5292*53ee8cc1Swenshuai.xi
5293*53ee8cc1Swenshuai.xi pData[0] = (MHL_BURST_ID_EMSC_SUPPORT >> 8);
5294*53ee8cc1Swenshuai.xi pData[1] = (MHL_BURST_ID_EMSC_SUPPORT &BMASK(7:0));
5295*53ee8cc1Swenshuai.xi pData[3] = ucTotalEntry;
5296*53ee8cc1Swenshuai.xi
5297*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_EMSC_SUPPORT_SEQUENCE_LENGTH; uctemp++)
5298*53ee8cc1Swenshuai.xi {
5299*53ee8cc1Swenshuai.xi if((uctemp +ucFinishEntry) == ucTotalEntry)
5300*53ee8cc1Swenshuai.xi {
5301*53ee8cc1Swenshuai.xi break;
5302*53ee8cc1Swenshuai.xi }
5303*53ee8cc1Swenshuai.xi
5304*53ee8cc1Swenshuai.xi pData[6 +(uctemp *2)] = pMHLResourcePrivate->usEMSCSupportTable[uctemp +ucFinishEntry] >> 8;
5305*53ee8cc1Swenshuai.xi pData[7 +(uctemp *2)] = pMHLResourcePrivate->usEMSCSupportTable[uctemp +ucFinishEntry] &BMASK(7:0);
5306*53ee8cc1Swenshuai.xi
5307*53ee8cc1Swenshuai.xi ucEntryCount++;
5308*53ee8cc1Swenshuai.xi }
5309*53ee8cc1Swenshuai.xi
5310*53ee8cc1Swenshuai.xi ucSequence++;
5311*53ee8cc1Swenshuai.xi
5312*53ee8cc1Swenshuai.xi pData[4] = ucSequence;
5313*53ee8cc1Swenshuai.xi pData[5] = ucEntryCount;
5314*53ee8cc1Swenshuai.xi pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5315*53ee8cc1Swenshuai.xi
5316*53ee8cc1Swenshuai.xi if(((ucSequence -1) *MHL_EMSC_SUPPORT_SEQUENCE_LENGTH +ucEntryCount) == ucTotalEntry)
5317*53ee8cc1Swenshuai.xi {
5318*53ee8cc1Swenshuai.xi bFinish = TRUE;
5319*53ee8cc1Swenshuai.xi ucSequence = 0;
5320*53ee8cc1Swenshuai.xi }
5321*53ee8cc1Swenshuai.xi
5322*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5323*53ee8cc1Swenshuai.xi
5324*53ee8cc1Swenshuai.xi return bFinish;
5325*53ee8cc1Swenshuai.xi }
5326*53ee8cc1Swenshuai.xi
5327*53ee8cc1Swenshuai.xi //**************************************************************************
5328*53ee8cc1Swenshuai.xi // [Function Name]:
5329*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendeMSCSupportInformation()
5330*53ee8cc1Swenshuai.xi // [Description]
5331*53ee8cc1Swenshuai.xi //
5332*53ee8cc1Swenshuai.xi // [Arguments]:
5333*53ee8cc1Swenshuai.xi //
5334*53ee8cc1Swenshuai.xi // [Return]:
5335*53ee8cc1Swenshuai.xi //
5336*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendeMSCSupportInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5337*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendeMSCSupportInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5338*53ee8cc1Swenshuai.xi {
5339*53ee8cc1Swenshuai.xi MS_BOOL bFinish = FALSE;
5340*53ee8cc1Swenshuai.xi MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5341*53ee8cc1Swenshuai.xi
5342*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GeteMSCSupportInformation(pMHLResourcePrivate, ucData))
5343*53ee8cc1Swenshuai.xi {
5344*53ee8cc1Swenshuai.xi bFinish = TRUE;
5345*53ee8cc1Swenshuai.xi }
5346*53ee8cc1Swenshuai.xi
5347*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5348*53ee8cc1Swenshuai.xi {
5349*53ee8cc1Swenshuai.xi if(bFinish)
5350*53ee8cc1Swenshuai.xi {
5351*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG);
5352*53ee8cc1Swenshuai.xi }
5353*53ee8cc1Swenshuai.xi
5354*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5355*53ee8cc1Swenshuai.xi
5356*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL sent eMSC support port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5357*53ee8cc1Swenshuai.xi }
5358*53ee8cc1Swenshuai.xi }
5359*53ee8cc1Swenshuai.xi
5360*53ee8cc1Swenshuai.xi //**************************************************************************
5361*53ee8cc1Swenshuai.xi // [Function Name]:
5362*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendBISTReturnStatus()
5363*53ee8cc1Swenshuai.xi // [Description]
5364*53ee8cc1Swenshuai.xi //
5365*53ee8cc1Swenshuai.xi // [Arguments]:
5366*53ee8cc1Swenshuai.xi //
5367*53ee8cc1Swenshuai.xi // [Return]:
5368*53ee8cc1Swenshuai.xi //
5369*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendBISTReturnStatus(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5370*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendBISTReturnStatus(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5371*53ee8cc1Swenshuai.xi {
5372*53ee8cc1Swenshuai.xi MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5373*53ee8cc1Swenshuai.xi
5374*53ee8cc1Swenshuai.xi ucData[0] = (MHL_BURST_ID_BIST_RETURN_STAT >> 8);
5375*53ee8cc1Swenshuai.xi ucData[1] = (MHL_BURST_ID_BIST_RETURN_STAT &BMASK(7:0));
5376*53ee8cc1Swenshuai.xi ucData[12] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount >> 8);
5377*53ee8cc1Swenshuai.xi ucData[13] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount &BMASK(7:0));
5378*53ee8cc1Swenshuai.xi ucData[14] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount >> 8);
5379*53ee8cc1Swenshuai.xi ucData[15] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount &BMASK(7:0));
5380*53ee8cc1Swenshuai.xi ucData[2] = _mdrv_mhl_WriteBurstCheckSum(ucData);
5381*53ee8cc1Swenshuai.xi
5382*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5383*53ee8cc1Swenshuai.xi {
5384*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG);
5385*53ee8cc1Swenshuai.xi
5386*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5387*53ee8cc1Swenshuai.xi
5388*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL send BIST eCbus port %c error count %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount);
5389*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL send BIST AV link port %c error count %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount);
5390*53ee8cc1Swenshuai.xi }
5391*53ee8cc1Swenshuai.xi }
5392*53ee8cc1Swenshuai.xi
5393*53ee8cc1Swenshuai.xi //**************************************************************************
5394*53ee8cc1Swenshuai.xi // [Function Name]:
5395*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendWriteBurstInformation()
5396*53ee8cc1Swenshuai.xi // [Description]
5397*53ee8cc1Swenshuai.xi //
5398*53ee8cc1Swenshuai.xi // [Arguments]:
5399*53ee8cc1Swenshuai.xi //
5400*53ee8cc1Swenshuai.xi // [Return]:
5401*53ee8cc1Swenshuai.xi //
5402*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendWriteBurstInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5403*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendWriteBurstInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5404*53ee8cc1Swenshuai.xi {
5405*53ee8cc1Swenshuai.xi MS_BOOL bSendWriteBurst = FALSE;
5406*53ee8cc1Swenshuai.xi MS_U8 ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_NONE;
5407*53ee8cc1Swenshuai.xi
5408*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG))
5409*53ee8cc1Swenshuai.xi {
5410*53ee8cc1Swenshuai.xi ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_USER_DATA;
5411*53ee8cc1Swenshuai.xi }
5412*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG))
5413*53ee8cc1Swenshuai.xi {
5414*53ee8cc1Swenshuai.xi ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_3D_INFORMATION;
5415*53ee8cc1Swenshuai.xi }
5416*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_INFORMATION_FLAG))
5417*53ee8cc1Swenshuai.xi {
5418*53ee8cc1Swenshuai.xi ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_VIRTUAL_CHANNEL;
5419*53ee8cc1Swenshuai.xi }
5420*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG))
5421*53ee8cc1Swenshuai.xi {
5422*53ee8cc1Swenshuai.xi ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_HIGH_END_VIDEO;
5423*53ee8cc1Swenshuai.xi }
5424*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG))
5425*53ee8cc1Swenshuai.xi {
5426*53ee8cc1Swenshuai.xi ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_AUDIO_DATA_TUNNEL;
5427*53ee8cc1Swenshuai.xi }
5428*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG))
5429*53ee8cc1Swenshuai.xi {
5430*53ee8cc1Swenshuai.xi ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_EMSC_DATA_TUNNEL;
5431*53ee8cc1Swenshuai.xi }
5432*53ee8cc1Swenshuai.xi else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG))
5433*53ee8cc1Swenshuai.xi {
5434*53ee8cc1Swenshuai.xi ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_BIST_RETURN_STATUS;
5435*53ee8cc1Swenshuai.xi }
5436*53ee8cc1Swenshuai.xi
5437*53ee8cc1Swenshuai.xi if(ucWriteBurstType != MHL_CBUS_SEND_WRITE_BURST_NONE)
5438*53ee8cc1Swenshuai.xi {
5439*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
5440*53ee8cc1Swenshuai.xi {
5441*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_START;
5442*53ee8cc1Swenshuai.xi }
5443*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_REVEIVE_GRANT)
5444*53ee8cc1Swenshuai.xi {
5445*53ee8cc1Swenshuai.xi bSendWriteBurst = TRUE;
5446*53ee8cc1Swenshuai.xi }
5447*53ee8cc1Swenshuai.xi }
5448*53ee8cc1Swenshuai.xi
5449*53ee8cc1Swenshuai.xi if(bSendWriteBurst)
5450*53ee8cc1Swenshuai.xi {
5451*53ee8cc1Swenshuai.xi switch(ucWriteBurstType)
5452*53ee8cc1Swenshuai.xi {
5453*53ee8cc1Swenshuai.xi case MHL_CBUS_SEND_WRITE_BURST_3D_INFORMATION:
5454*53ee8cc1Swenshuai.xi _mdrv_mhl_Send3DTimingInformation(pMHLResourcePrivate);
5455*53ee8cc1Swenshuai.xi break;
5456*53ee8cc1Swenshuai.xi
5457*53ee8cc1Swenshuai.xi case MHL_CBUS_SEND_WRITE_BURST_VIRTUAL_CHANNEL:
5458*53ee8cc1Swenshuai.xi _mdrv_mhl_SendVirtualChannelInformation(pMHLResourcePrivate);
5459*53ee8cc1Swenshuai.xi break;
5460*53ee8cc1Swenshuai.xi
5461*53ee8cc1Swenshuai.xi case MHL_CBUS_SEND_WRITE_BURST_HIGH_END_VIDEO:
5462*53ee8cc1Swenshuai.xi _mdrv_mhl_SendHighEndVideoSupport(pMHLResourcePrivate);
5463*53ee8cc1Swenshuai.xi break;
5464*53ee8cc1Swenshuai.xi
5465*53ee8cc1Swenshuai.xi case MHL_CBUS_SEND_WRITE_BURST_AUDIO_DATA_TUNNEL:
5466*53ee8cc1Swenshuai.xi _mdrv_mhl_SendAudioDataTunnelSupport(pMHLResourcePrivate);
5467*53ee8cc1Swenshuai.xi break;
5468*53ee8cc1Swenshuai.xi
5469*53ee8cc1Swenshuai.xi case MHL_CBUS_SEND_WRITE_BURST_EMSC_DATA_TUNNEL:
5470*53ee8cc1Swenshuai.xi _mdrv_mhl_SendeMSCSupportInformation(pMHLResourcePrivate);
5471*53ee8cc1Swenshuai.xi break;
5472*53ee8cc1Swenshuai.xi
5473*53ee8cc1Swenshuai.xi case MHL_CBUS_SEND_WRITE_BURST_BIST_RETURN_STATUS:
5474*53ee8cc1Swenshuai.xi _mdrv_mhl_SendBISTReturnStatus(pMHLResourcePrivate);
5475*53ee8cc1Swenshuai.xi break;
5476*53ee8cc1Swenshuai.xi
5477*53ee8cc1Swenshuai.xi default:
5478*53ee8cc1Swenshuai.xi
5479*53ee8cc1Swenshuai.xi break;
5480*53ee8cc1Swenshuai.xi };
5481*53ee8cc1Swenshuai.xi }
5482*53ee8cc1Swenshuai.xi }
5483*53ee8cc1Swenshuai.xi
5484*53ee8cc1Swenshuai.xi //**************************************************************************
5485*53ee8cc1Swenshuai.xi // [Function Name]:
5486*53ee8cc1Swenshuai.xi // _mdrv_mhl_FeatureRequestStateProc()
5487*53ee8cc1Swenshuai.xi // [Description]
5488*53ee8cc1Swenshuai.xi //
5489*53ee8cc1Swenshuai.xi // [Arguments]:
5490*53ee8cc1Swenshuai.xi //
5491*53ee8cc1Swenshuai.xi // [Return]:
5492*53ee8cc1Swenshuai.xi //
5493*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_FeatureRequestStateProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5494*53ee8cc1Swenshuai.xi void _mdrv_mhl_FeatureRequestStateProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5495*53ee8cc1Swenshuai.xi {
5496*53ee8cc1Swenshuai.xi switch(pMHLResourcePrivate->ucFeatureRequestState)
5497*53ee8cc1Swenshuai.xi {
5498*53ee8cc1Swenshuai.xi case MHL_CBUS_FEATURE_START:
5499*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_3D_INFORMATION;
5500*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG);
5501*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG);
5502*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG);
5503*53ee8cc1Swenshuai.xi
5504*53ee8cc1Swenshuai.xi break;
5505*53ee8cc1Swenshuai.xi
5506*53ee8cc1Swenshuai.xi case MHL_CBUS_FEATURE_SEND_3D_INFORMATION:
5507*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG))
5508*53ee8cc1Swenshuai.xi {
5509*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_HIGH_END_VIDEO;
5510*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG);
5511*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_VIC_FLAG);
5512*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDA_FLAG);
5513*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDB_FLAG);
5514*53ee8cc1Swenshuai.xi }
5515*53ee8cc1Swenshuai.xi
5516*53ee8cc1Swenshuai.xi break;
5517*53ee8cc1Swenshuai.xi
5518*53ee8cc1Swenshuai.xi case MHL_CBUS_FEATURE_SEND_HIGH_END_VIDEO:
5519*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG))
5520*53ee8cc1Swenshuai.xi {
5521*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_AUDIO_DATA_TUNNEL;
5522*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG);
5523*53ee8cc1Swenshuai.xi }
5524*53ee8cc1Swenshuai.xi
5525*53ee8cc1Swenshuai.xi break;
5526*53ee8cc1Swenshuai.xi
5527*53ee8cc1Swenshuai.xi case MHL_CBUS_FEATURE_SEND_AUDIO_DATA_TUNNEL:
5528*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG))
5529*53ee8cc1Swenshuai.xi {
5530*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_EMSC_DATA_TUNNEL;
5531*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG);
5532*53ee8cc1Swenshuai.xi }
5533*53ee8cc1Swenshuai.xi
5534*53ee8cc1Swenshuai.xi break;
5535*53ee8cc1Swenshuai.xi
5536*53ee8cc1Swenshuai.xi case MHL_CBUS_FEATURE_SEND_EMSC_DATA_TUNNEL:
5537*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG))
5538*53ee8cc1Swenshuai.xi {
5539*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
5540*53ee8cc1Swenshuai.xi {
5541*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_FEATURE_COMPLETE;
5542*53ee8cc1Swenshuai.xi }
5543*53ee8cc1Swenshuai.xi }
5544*53ee8cc1Swenshuai.xi
5545*53ee8cc1Swenshuai.xi break;
5546*53ee8cc1Swenshuai.xi
5547*53ee8cc1Swenshuai.xi case MHL_CBUS_FEATURE_SEND_FEATURE_COMPLETE:
5548*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(6), FALSE))
5549*53ee8cc1Swenshuai.xi {
5550*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_END;
5551*53ee8cc1Swenshuai.xi }
5552*53ee8cc1Swenshuai.xi
5553*53ee8cc1Swenshuai.xi break;
5554*53ee8cc1Swenshuai.xi
5555*53ee8cc1Swenshuai.xi case MHL_CBUS_FEATURE_END:
5556*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_NONE;
5557*53ee8cc1Swenshuai.xi break;
5558*53ee8cc1Swenshuai.xi
5559*53ee8cc1Swenshuai.xi default:
5560*53ee8cc1Swenshuai.xi
5561*53ee8cc1Swenshuai.xi break;
5562*53ee8cc1Swenshuai.xi };
5563*53ee8cc1Swenshuai.xi }
5564*53ee8cc1Swenshuai.xi
5565*53ee8cc1Swenshuai.xi //**************************************************************************
5566*53ee8cc1Swenshuai.xi // [Function Name]:
5567*53ee8cc1Swenshuai.xi // _mapi_mhl_CbusBISTStateProc()
5568*53ee8cc1Swenshuai.xi // [Description]
5569*53ee8cc1Swenshuai.xi //
5570*53ee8cc1Swenshuai.xi // [Arguments]:
5571*53ee8cc1Swenshuai.xi //
5572*53ee8cc1Swenshuai.xi // [Return]:
5573*53ee8cc1Swenshuai.xi //
5574*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTStateProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5575*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTStateProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5576*53ee8cc1Swenshuai.xi {
5577*53ee8cc1Swenshuai.xi MS_U8 ucBISTECbusMode = 0;
5578*53ee8cc1Swenshuai.xi
5579*53ee8cc1Swenshuai.xi switch(pMHLResourcePrivate->ucBISTModeState)
5580*53ee8cc1Swenshuai.xi {
5581*53ee8cc1Swenshuai.xi case MHL_CBUS_BIST_RECEIVE_SETUP:
5582*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_BIST_READY, pMHLResourcePrivate->stBISTParameterInfo.ucBISTReadyIndex, FALSE)) // Send BIST ready
5583*53ee8cc1Swenshuai.xi {
5584*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_WAIT_TRIGGER;
5585*53ee8cc1Swenshuai.xi
5586*53ee8cc1Swenshuai.xi mhal_mhl_SetBISTParameterInfo(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stBISTParameterInfo));
5587*53ee8cc1Swenshuai.xi }
5588*53ee8cc1Swenshuai.xi
5589*53ee8cc1Swenshuai.xi break;
5590*53ee8cc1Swenshuai.xi
5591*53ee8cc1Swenshuai.xi case MHL_CBUS_BIST_RECEIVE_TRIGGER:
5592*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_ECBUS_SWITCH;
5593*53ee8cc1Swenshuai.xi ucBISTECbusMode = MHL_RAP_KEY_CBUS_MODE_UP;
5594*53ee8cc1Swenshuai.xi
5595*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST receive trigger in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5596*53ee8cc1Swenshuai.xi
5597*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration > 0)
5598*53ee8cc1Swenshuai.xi {
5599*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL set BIST trigger timer in port %c timer %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration);
5600*53ee8cc1Swenshuai.xi
5601*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_BIST_PROCESS, pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration);
5602*53ee8cc1Swenshuai.xi }
5603*53ee8cc1Swenshuai.xi
5604*53ee8cc1Swenshuai.xi break;
5605*53ee8cc1Swenshuai.xi
5606*53ee8cc1Swenshuai.xi case MHL_CBUS_BIST_ECBUS_SWITCH:
5607*53ee8cc1Swenshuai.xi //mhal_mhl_GetBISTErrorCount(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stBISTParameterInfo));
5608*53ee8cc1Swenshuai.xi break;
5609*53ee8cc1Swenshuai.xi
5610*53ee8cc1Swenshuai.xi case MHL_CBUS_BIST_EVENT_FINISH:
5611*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_WAIT_TRIGGER;
5612*53ee8cc1Swenshuai.xi ucBISTECbusMode = MHL_RAP_KEY_CBUS_MODE_DOWN;
5613*53ee8cc1Swenshuai.xi
5614*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL BIST run finish in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5615*53ee8cc1Swenshuai.xi
5616*53ee8cc1Swenshuai.xi break;
5617*53ee8cc1Swenshuai.xi
5618*53ee8cc1Swenshuai.xi case MHL_CBUS_BIST_REQUEST_STATUS:
5619*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG);
5620*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_RETURN_STATUS;
5621*53ee8cc1Swenshuai.xi break;
5622*53ee8cc1Swenshuai.xi
5623*53ee8cc1Swenshuai.xi case MHL_CBUS_BIST_RETURN_STATUS:
5624*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG))
5625*53ee8cc1Swenshuai.xi {
5626*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_WAIT_TRIGGER;
5627*53ee8cc1Swenshuai.xi }
5628*53ee8cc1Swenshuai.xi break;
5629*53ee8cc1Swenshuai.xi
5630*53ee8cc1Swenshuai.xi case MHL_CBUS_BIST_END:
5631*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_NONE;
5632*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag = FALSE;
5633*53ee8cc1Swenshuai.xi break;
5634*53ee8cc1Swenshuai.xi
5635*53ee8cc1Swenshuai.xi default:
5636*53ee8cc1Swenshuai.xi
5637*53ee8cc1Swenshuai.xi break;
5638*53ee8cc1Swenshuai.xi };
5639*53ee8cc1Swenshuai.xi
5640*53ee8cc1Swenshuai.xi if(ucBISTECbusMode > 0)
5641*53ee8cc1Swenshuai.xi {
5642*53ee8cc1Swenshuai.xi if(ucBISTECbusMode == MHL_RAP_KEY_CBUS_MODE_UP)
5643*53ee8cc1Swenshuai.xi {
5644*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount = 0;
5645*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount = 0;
5646*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag = TRUE;
5647*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_BIST_MODE_UP;
5648*53ee8cc1Swenshuai.xi }
5649*53ee8cc1Swenshuai.xi else if(ucBISTECbusMode == MHL_RAP_KEY_CBUS_MODE_DOWN)
5650*53ee8cc1Swenshuai.xi {
5651*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_BIST_MODE_DOWN;
5652*53ee8cc1Swenshuai.xi
5653*53ee8cc1Swenshuai.xi mhal_mhl_GetBISTErrorCount(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stBISTParameterInfo));
5654*53ee8cc1Swenshuai.xi }
5655*53ee8cc1Swenshuai.xi }
5656*53ee8cc1Swenshuai.xi }
5657*53ee8cc1Swenshuai.xi
5658*53ee8cc1Swenshuai.xi //**************************************************************************
5659*53ee8cc1Swenshuai.xi // [Function Name]:
5660*53ee8cc1Swenshuai.xi // _mdrv_mhl_SendEMSCDataString()
5661*53ee8cc1Swenshuai.xi // [Description]
5662*53ee8cc1Swenshuai.xi //
5663*53ee8cc1Swenshuai.xi // [Arguments]:
5664*53ee8cc1Swenshuai.xi //
5665*53ee8cc1Swenshuai.xi // [Return]:
5666*53ee8cc1Swenshuai.xi //
5667*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendEMSCDataString(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucLength,MS_U8 * ucSendData)5668*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_SendEMSCDataString(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucLength, MS_U8 *ucSendData)
5669*53ee8cc1Swenshuai.xi {
5670*53ee8cc1Swenshuai.xi MS_BOOL bDoAgainFlag = FALSE;
5671*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
5672*53ee8cc1Swenshuai.xi MS_U8 ucSendStatus = 0;
5673*53ee8cc1Swenshuai.xi MS_U8 ucSendEMSC[MHL_EMSC_DATA_SIZE] = {0};
5674*53ee8cc1Swenshuai.xi
5675*53ee8cc1Swenshuai.xi do
5676*53ee8cc1Swenshuai.xi {
5677*53ee8cc1Swenshuai.xi bDoAgainFlag = FALSE;
5678*53ee8cc1Swenshuai.xi
5679*53ee8cc1Swenshuai.xi switch(pMHLResourcePrivate->ucEMSCSendStatus)
5680*53ee8cc1Swenshuai.xi {
5681*53ee8cc1Swenshuai.xi case MHL_EMSC_SEND_NONE:
5682*53ee8cc1Swenshuai.xi if((ucLength +2) <= pMHLResourcePrivate->usEMSCTxBufferSize) // eMSC data length must small than Tx buffer +2
5683*53ee8cc1Swenshuai.xi {
5684*53ee8cc1Swenshuai.xi ucSendEMSC[0] = MHL_EMSC_DATA_SIZE - pMHLResourcePrivate->usEMSCRxBufferSize;
5685*53ee8cc1Swenshuai.xi ucSendEMSC[1] = ucLength;
5686*53ee8cc1Swenshuai.xi
5687*53ee8cc1Swenshuai.xi if(ucSendData != 0)
5688*53ee8cc1Swenshuai.xi {
5689*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < ucLength; uctemp++)
5690*53ee8cc1Swenshuai.xi {
5691*53ee8cc1Swenshuai.xi ucSendEMSC[uctemp +2] = ucSendData[uctemp];
5692*53ee8cc1Swenshuai.xi }
5693*53ee8cc1Swenshuai.xi }
5694*53ee8cc1Swenshuai.xi
5695*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_DATA;
5696*53ee8cc1Swenshuai.xi bDoAgainFlag = TRUE;
5697*53ee8cc1Swenshuai.xi }
5698*53ee8cc1Swenshuai.xi
5699*53ee8cc1Swenshuai.xi break;
5700*53ee8cc1Swenshuai.xi
5701*53ee8cc1Swenshuai.xi case MHL_EMSC_SEND_DATA:
5702*53ee8cc1Swenshuai.xi ucSendStatus = mhal_mhl_GetEMSCSendStatus();
5703*53ee8cc1Swenshuai.xi mhal_mhl_InsertEMSCSendData(ucLength +2, ucSendEMSC);
5704*53ee8cc1Swenshuai.xi
5705*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_CHECK;
5706*53ee8cc1Swenshuai.xi
5707*53ee8cc1Swenshuai.xi break;
5708*53ee8cc1Swenshuai.xi
5709*53ee8cc1Swenshuai.xi case MHL_EMSC_SEND_CHECK:
5710*53ee8cc1Swenshuai.xi ucSendStatus = mhal_mhl_GetEMSCSendStatus();
5711*53ee8cc1Swenshuai.xi
5712*53ee8cc1Swenshuai.xi if(ucSendStatus != MHL_EMSC_SEND_NONE)
5713*53ee8cc1Swenshuai.xi {
5714*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCSendStatus = ucSendStatus;
5715*53ee8cc1Swenshuai.xi }
5716*53ee8cc1Swenshuai.xi
5717*53ee8cc1Swenshuai.xi break;
5718*53ee8cc1Swenshuai.xi
5719*53ee8cc1Swenshuai.xi case MHL_EMSC_SEND_PASS:
5720*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
5721*53ee8cc1Swenshuai.xi break;
5722*53ee8cc1Swenshuai.xi
5723*53ee8cc1Swenshuai.xi case MHL_EMSC_SEND_FAIL:
5724*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
5725*53ee8cc1Swenshuai.xi break;
5726*53ee8cc1Swenshuai.xi
5727*53ee8cc1Swenshuai.xi default:
5728*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
5729*53ee8cc1Swenshuai.xi break;
5730*53ee8cc1Swenshuai.xi };
5731*53ee8cc1Swenshuai.xi }while(bDoAgainFlag);
5732*53ee8cc1Swenshuai.xi
5733*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucEMSCSendStatus == MHL_EMSC_SEND_PASS)
5734*53ee8cc1Swenshuai.xi {
5735*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC send pass !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5736*53ee8cc1Swenshuai.xi
5737*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCRxBufferSize = MHL_EMSC_DATA_SIZE;
5738*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usEMSCTxBufferSize = pMHLResourcePrivate->usEMSCTxBufferSize -ucLength -2;
5739*53ee8cc1Swenshuai.xi
5740*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC send Rx buffer size %d in port %c !!\r\n", pMHLResourcePrivate->usEMSCRxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5741*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL eMSC send Tx buffer size %d in port %c !!\r\n", pMHLResourcePrivate->usEMSCTxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5742*53ee8cc1Swenshuai.xi }
5743*53ee8cc1Swenshuai.xi
5744*53ee8cc1Swenshuai.xi return pMHLResourcePrivate->ucEMSCSendStatus;
5745*53ee8cc1Swenshuai.xi }
5746*53ee8cc1Swenshuai.xi
5747*53ee8cc1Swenshuai.xi //**************************************************************************
5748*53ee8cc1Swenshuai.xi // [Function Name]:
5749*53ee8cc1Swenshuai.xi // _mdrv_mhl_CheckEMSCRxBufferSize()
5750*53ee8cc1Swenshuai.xi // [Description]
5751*53ee8cc1Swenshuai.xi //
5752*53ee8cc1Swenshuai.xi // [Arguments]:
5753*53ee8cc1Swenshuai.xi //
5754*53ee8cc1Swenshuai.xi // [Return]:
5755*53ee8cc1Swenshuai.xi //
5756*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckEMSCRxBufferSize(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5757*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckEMSCRxBufferSize(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5758*53ee8cc1Swenshuai.xi {
5759*53ee8cc1Swenshuai.xi MS_U8 ucSendStatus = 0;
5760*53ee8cc1Swenshuai.xi
5761*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->usEMSCRxBufferSize < MHL_EMSC_DATA_SIZE_THRESHOLD)
5762*53ee8cc1Swenshuai.xi {
5763*53ee8cc1Swenshuai.xi ucSendStatus = _mdrv_mhl_SendEMSCDataString(pMHLResourcePrivate, 0, NULL);
5764*53ee8cc1Swenshuai.xi }
5765*53ee8cc1Swenshuai.xi }
5766*53ee8cc1Swenshuai.xi
5767*53ee8cc1Swenshuai.xi //**************************************************************************
5768*53ee8cc1Swenshuai.xi // [Function Name]:
5769*53ee8cc1Swenshuai.xi // _mdrv_mhl_CbusTxHandler()
5770*53ee8cc1Swenshuai.xi // [Description]
5771*53ee8cc1Swenshuai.xi //
5772*53ee8cc1Swenshuai.xi // [Arguments]:
5773*53ee8cc1Swenshuai.xi //
5774*53ee8cc1Swenshuai.xi // [Return]:
5775*53ee8cc1Swenshuai.xi //
5776*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusTxHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5777*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusTxHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5778*53ee8cc1Swenshuai.xi {
5779*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
5780*53ee8cc1Swenshuai.xi {
5781*53ee8cc1Swenshuai.xi _mdrv_mhl_TxQueueHandler(pMHLResourcePrivate);
5782*53ee8cc1Swenshuai.xi
5783*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG))
5784*53ee8cc1Swenshuai.xi {
5785*53ee8cc1Swenshuai.xi _mdrv_mhl_SendDisplayCommand(pMHLResourcePrivate);
5786*53ee8cc1Swenshuai.xi
5787*53ee8cc1Swenshuai.xi _mdrv_mhl_WriteBurstEventProc(pMHLResourcePrivate);
5788*53ee8cc1Swenshuai.xi
5789*53ee8cc1Swenshuai.xi _mdrv_mhl_SendWriteBurstInformation(pMHLResourcePrivate);
5790*53ee8cc1Swenshuai.xi
5791*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
5792*53ee8cc1Swenshuai.xi {
5793*53ee8cc1Swenshuai.xi _mdrv_mhl_ReadExtendDeviceCapabilityProc(pMHLResourcePrivate);
5794*53ee8cc1Swenshuai.xi
5795*53ee8cc1Swenshuai.xi _mdrv_mhl_FeatureRequestStateProc(pMHLResourcePrivate);
5796*53ee8cc1Swenshuai.xi
5797*53ee8cc1Swenshuai.xi _mdrv_mhl_CheckEMSCRxBufferSize(pMHLResourcePrivate);
5798*53ee8cc1Swenshuai.xi }
5799*53ee8cc1Swenshuai.xi
5800*53ee8cc1Swenshuai.xi _mdrv_mhl_GetVenderIDProc(pMHLResourcePrivate);
5801*53ee8cc1Swenshuai.xi
5802*53ee8cc1Swenshuai.xi _mdrv_mhl_ReadDeviceCapabilityProc(pMHLResourcePrivate);
5803*53ee8cc1Swenshuai.xi }
5804*53ee8cc1Swenshuai.xi
5805*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
5806*53ee8cc1Swenshuai.xi {
5807*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusBISTStateProc(pMHLResourcePrivate);
5808*53ee8cc1Swenshuai.xi }
5809*53ee8cc1Swenshuai.xi }
5810*53ee8cc1Swenshuai.xi }
5811*53ee8cc1Swenshuai.xi
5812*53ee8cc1Swenshuai.xi //**************************************************************************
5813*53ee8cc1Swenshuai.xi // [Function Name]:
5814*53ee8cc1Swenshuai.xi // _mdrv_mhl_AutoSwitchProc()
5815*53ee8cc1Swenshuai.xi // [Description]
5816*53ee8cc1Swenshuai.xi //
5817*53ee8cc1Swenshuai.xi // [Arguments]:
5818*53ee8cc1Swenshuai.xi //
5819*53ee8cc1Swenshuai.xi // [Return]:
5820*53ee8cc1Swenshuai.xi //
5821*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_AutoSwitchProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5822*53ee8cc1Swenshuai.xi void _mdrv_mhl_AutoSwitchProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5823*53ee8cc1Swenshuai.xi {
5824*53ee8cc1Swenshuai.xi MS_BOOL bOnLinePortFlag = FALSE;
5825*53ee8cc1Swenshuai.xi
5826*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG))
5827*53ee8cc1Swenshuai.xi {
5828*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath) && mhal_mhl_CheckPIPWindow())
5829*53ee8cc1Swenshuai.xi {
5830*53ee8cc1Swenshuai.xi bOnLinePortFlag = TRUE;
5831*53ee8cc1Swenshuai.xi }
5832*53ee8cc1Swenshuai.xi
5833*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG))
5834*53ee8cc1Swenshuai.xi {
5835*53ee8cc1Swenshuai.xi if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG))
5836*53ee8cc1Swenshuai.xi {
5837*53ee8cc1Swenshuai.xi CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
5838*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
5839*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG);
5840*53ee8cc1Swenshuai.xi SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
5841*53ee8cc1Swenshuai.xi }
5842*53ee8cc1Swenshuai.xi else // Setting but not wake up
5843*53ee8cc1Swenshuai.xi {
5844*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
5845*53ee8cc1Swenshuai.xi {
5846*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, MHL_VBUS_CHARGE_ON);
5847*53ee8cc1Swenshuai.xi }
5848*53ee8cc1Swenshuai.xi else
5849*53ee8cc1Swenshuai.xi {
5850*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, MHL_VBUS_HW_DETCET);
5851*53ee8cc1Swenshuai.xi }
5852*53ee8cc1Swenshuai.xi
5853*53ee8cc1Swenshuai.xi if(bOnLinePortFlag)
5854*53ee8cc1Swenshuai.xi {
5855*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupIntSetting(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
5856*53ee8cc1Swenshuai.xi
5857*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG);
5858*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
5859*53ee8cc1Swenshuai.xi }
5860*53ee8cc1Swenshuai.xi }
5861*53ee8cc1Swenshuai.xi }
5862*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
5863*53ee8cc1Swenshuai.xi {
5864*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
5865*53ee8cc1Swenshuai.xi }
5866*53ee8cc1Swenshuai.xi else // Not setting
5867*53ee8cc1Swenshuai.xi {
5868*53ee8cc1Swenshuai.xi if(!bOnLinePortFlag)
5869*53ee8cc1Swenshuai.xi {
5870*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupIntSetting(pMHLResourcePrivate->ucMHLSupportPath, TRUE);
5871*53ee8cc1Swenshuai.xi
5872*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG);
5873*53ee8cc1Swenshuai.xi }
5874*53ee8cc1Swenshuai.xi }
5875*53ee8cc1Swenshuai.xi }
5876*53ee8cc1Swenshuai.xi }
5877*53ee8cc1Swenshuai.xi
5878*53ee8cc1Swenshuai.xi //**************************************************************************
5879*53ee8cc1Swenshuai.xi // [Function Name]:
5880*53ee8cc1Swenshuai.xi // _mdrv_mhl_ForceSendClearHPD()
5881*53ee8cc1Swenshuai.xi // [Description]
5882*53ee8cc1Swenshuai.xi //
5883*53ee8cc1Swenshuai.xi // [Arguments]:
5884*53ee8cc1Swenshuai.xi //
5885*53ee8cc1Swenshuai.xi // [Return]:
5886*53ee8cc1Swenshuai.xi //
5887*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ForceSendClearHPD(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5888*53ee8cc1Swenshuai.xi void _mdrv_mhl_ForceSendClearHPD(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5889*53ee8cc1Swenshuai.xi {
5890*53ee8cc1Swenshuai.xi stMHL_QUEUE_INFO stCbusQueueInfo = {0};
5891*53ee8cc1Swenshuai.xi
5892*53ee8cc1Swenshuai.xi stCbusQueueInfo.ucQueueState = MHL_QUEUE_STATE_PENDING;
5893*53ee8cc1Swenshuai.xi stCbusQueueInfo.ucLength = 0;
5894*53ee8cc1Swenshuai.xi stCbusQueueInfo.ucCommand = MSC_CLR_HPD;
5895*53ee8cc1Swenshuai.xi
5896*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusTxWriteCommand(pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag, &stCbusQueueInfo))
5897*53ee8cc1Swenshuai.xi {
5898*53ee8cc1Swenshuai.xi CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG);
5899*53ee8cc1Swenshuai.xi }
5900*53ee8cc1Swenshuai.xi }
5901*53ee8cc1Swenshuai.xi
5902*53ee8cc1Swenshuai.xi //**************************************************************************
5903*53ee8cc1Swenshuai.xi // [Function Name]:
5904*53ee8cc1Swenshuai.xi // _mdrv_mhl_RtermControlHWMode()
5905*53ee8cc1Swenshuai.xi // [Description]
5906*53ee8cc1Swenshuai.xi //
5907*53ee8cc1Swenshuai.xi // [Arguments]:
5908*53ee8cc1Swenshuai.xi //
5909*53ee8cc1Swenshuai.xi // [Return]:
5910*53ee8cc1Swenshuai.xi //
5911*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_RtermControlHWMode(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bEnableFlag)5912*53ee8cc1Swenshuai.xi void _mdrv_mhl_RtermControlHWMode(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bEnableFlag)
5913*53ee8cc1Swenshuai.xi {
5914*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
5915*53ee8cc1Swenshuai.xi {
5916*53ee8cc1Swenshuai.xi mhal_mhl_RtermControlHWMode(pMHLResourcePrivate->ucMHLSupportPath, bEnableFlag);
5917*53ee8cc1Swenshuai.xi }
5918*53ee8cc1Swenshuai.xi }
5919*53ee8cc1Swenshuai.xi
5920*53ee8cc1Swenshuai.xi //**************************************************************************
5921*53ee8cc1Swenshuai.xi // [Function Name]:
5922*53ee8cc1Swenshuai.xi // _mdrv_mhl_PollingEventProc
5923*53ee8cc1Swenshuai.xi // [Description]:
5924*53ee8cc1Swenshuai.xi //
5925*53ee8cc1Swenshuai.xi // [Arguments]:
5926*53ee8cc1Swenshuai.xi //
5927*53ee8cc1Swenshuai.xi // [Return]:
5928*53ee8cc1Swenshuai.xi //
5929*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_PollingEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5930*53ee8cc1Swenshuai.xi void _mdrv_mhl_PollingEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5931*53ee8cc1Swenshuai.xi {
5932*53ee8cc1Swenshuai.xi _mdrv_mhl_TimerHandler(pMHLResourcePrivate);
5933*53ee8cc1Swenshuai.xi
5934*53ee8cc1Swenshuai.xi _mdrv_mhl_RtermControlHWMode(pMHLResourcePrivate, FALSE);
5935*53ee8cc1Swenshuai.xi
5936*53ee8cc1Swenshuai.xi _mdrv_mhl_CheckStatusPolling(pMHLResourcePrivate);
5937*53ee8cc1Swenshuai.xi
5938*53ee8cc1Swenshuai.xi _mdrv_mhl_RtermControlHWMode(pMHLResourcePrivate, TRUE);
5939*53ee8cc1Swenshuai.xi
5940*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusRxHandler(pMHLResourcePrivate);
5941*53ee8cc1Swenshuai.xi
5942*53ee8cc1Swenshuai.xi _mdrv_mhl_CbusTxHandler(pMHLResourcePrivate);
5943*53ee8cc1Swenshuai.xi
5944*53ee8cc1Swenshuai.xi _mdrv_mhl_AutoSwitchProc(pMHLResourcePrivate);
5945*53ee8cc1Swenshuai.xi }
5946*53ee8cc1Swenshuai.xi
5947*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
5948*53ee8cc1Swenshuai.xi //**************************************************************************
5949*53ee8cc1Swenshuai.xi // [Function Name]:
5950*53ee8cc1Swenshuai.xi // _mdrv_mhl_ResourceGetPrivate
5951*53ee8cc1Swenshuai.xi // [Description]:
5952*53ee8cc1Swenshuai.xi //
5953*53ee8cc1Swenshuai.xi // [Arguments]:
5954*53ee8cc1Swenshuai.xi //
5955*53ee8cc1Swenshuai.xi // [Return]:
5956*53ee8cc1Swenshuai.xi //
5957*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ResourceGetPrivate(void ** ppPrivate)5958*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_ResourceGetPrivate(void** ppPrivate)
5959*53ee8cc1Swenshuai.xi {
5960*53ee8cc1Swenshuai.xi MS_BOOL bGetPrivateFlag = FALSE;
5961*53ee8cc1Swenshuai.xi
5962*53ee8cc1Swenshuai.xi *ppPrivate = &stMHLResourcePrivate;
5963*53ee8cc1Swenshuai.xi
5964*53ee8cc1Swenshuai.xi if(*ppPrivate != NULL)
5965*53ee8cc1Swenshuai.xi {
5966*53ee8cc1Swenshuai.xi bGetPrivateFlag = TRUE;
5967*53ee8cc1Swenshuai.xi }
5968*53ee8cc1Swenshuai.xi
5969*53ee8cc1Swenshuai.xi return bGetPrivateFlag;
5970*53ee8cc1Swenshuai.xi }
5971*53ee8cc1Swenshuai.xi
5972*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
5973*53ee8cc1Swenshuai.xi //**************************************************************************
5974*53ee8cc1Swenshuai.xi // [Function Name]:
5975*53ee8cc1Swenshuai.xi // _mdrv_mhl_PollingTask
5976*53ee8cc1Swenshuai.xi // [Description]:
5977*53ee8cc1Swenshuai.xi //
5978*53ee8cc1Swenshuai.xi // [Arguments]:
5979*53ee8cc1Swenshuai.xi //
5980*53ee8cc1Swenshuai.xi // [Return]:
5981*53ee8cc1Swenshuai.xi //
5982*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_PollingTask(void)5983*53ee8cc1Swenshuai.xi void _mdrv_mhl_PollingTask(void)
5984*53ee8cc1Swenshuai.xi {
5985*53ee8cc1Swenshuai.xi void* pModule = NULL;
5986*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
5987*53ee8cc1Swenshuai.xi MS_BOOL bMHLTaskProcFlag = TRUE;
5988*53ee8cc1Swenshuai.xi MS_U32 usPollingTaskInterval = 0;
5989*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
5990*53ee8cc1Swenshuai.xi
5991*53ee8cc1Swenshuai.xi UtopiaModuleGetPtr(MODULE_MHL, &pModule);
5992*53ee8cc1Swenshuai.xi
5993*53ee8cc1Swenshuai.xi while(bMHLTaskProcFlag)
5994*53ee8cc1Swenshuai.xi {
5995*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
5996*53ee8cc1Swenshuai.xi {
5997*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
5998*53ee8cc1Swenshuai.xi }
5999*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
6000*53ee8cc1Swenshuai.xi {
6001*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6002*53ee8cc1Swenshuai.xi }
6003*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6004*53ee8cc1Swenshuai.xi {
6005*53ee8cc1Swenshuai.xi _mdrv_mhl_PollingEventProc(pMHLResourcePrivate);
6006*53ee8cc1Swenshuai.xi
6007*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG))
6008*53ee8cc1Swenshuai.xi {
6009*53ee8cc1Swenshuai.xi usPollingTaskInterval = MHL_POLLING_INTERVAL_BUSY;
6010*53ee8cc1Swenshuai.xi }
6011*53ee8cc1Swenshuai.xi else
6012*53ee8cc1Swenshuai.xi {
6013*53ee8cc1Swenshuai.xi usPollingTaskInterval = MHL_POLLING_INTERVAL_NORMAL;
6014*53ee8cc1Swenshuai.xi }
6015*53ee8cc1Swenshuai.xi
6016*53ee8cc1Swenshuai.xi bMHLTaskProcFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_TASK_PROCESS_FLAG);
6017*53ee8cc1Swenshuai.xi }
6018*53ee8cc1Swenshuai.xi
6019*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
6020*53ee8cc1Swenshuai.xi
6021*53ee8cc1Swenshuai.xi MsOS_DelayTask(usPollingTaskInterval);
6022*53ee8cc1Swenshuai.xi }
6023*53ee8cc1Swenshuai.xi }
6024*53ee8cc1Swenshuai.xi
6025*53ee8cc1Swenshuai.xi //**************************************************************************
6026*53ee8cc1Swenshuai.xi // [Function Name]:
6027*53ee8cc1Swenshuai.xi // _mdrv_mhl_CreateTask
6028*53ee8cc1Swenshuai.xi // [Description]:
6029*53ee8cc1Swenshuai.xi //
6030*53ee8cc1Swenshuai.xi // [Arguments]:
6031*53ee8cc1Swenshuai.xi //
6032*53ee8cc1Swenshuai.xi // [Return]:
6033*53ee8cc1Swenshuai.xi //
6034*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CreateTask(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)6035*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CreateTask(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
6036*53ee8cc1Swenshuai.xi {
6037*53ee8cc1Swenshuai.xi MS_BOOL bCreateSuccess = TRUE;
6038*53ee8cc1Swenshuai.xi
6039*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->slMHLPollingTaskID < 0)
6040*53ee8cc1Swenshuai.xi {
6041*53ee8cc1Swenshuai.xi pMHLResourcePrivate->slMHLPollingTaskID = MsOS_CreateTask((TaskEntry) _mdrv_mhl_PollingTask,
6042*53ee8cc1Swenshuai.xi (MS_VIRT) NULL,
6043*53ee8cc1Swenshuai.xi E_TASK_PRI_MEDIUM,
6044*53ee8cc1Swenshuai.xi TRUE,
6045*53ee8cc1Swenshuai.xi (void *)pMHLResourcePrivate->ucMHLPollingStack,
6046*53ee8cc1Swenshuai.xi MHL_POLLING_STACK_SIZE,
6047*53ee8cc1Swenshuai.xi "MHL task");
6048*53ee8cc1Swenshuai.xi
6049*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_TASK_PROCESS_FLAG);
6050*53ee8cc1Swenshuai.xi }
6051*53ee8cc1Swenshuai.xi
6052*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->slMHLPollingTaskID < 0)
6053*53ee8cc1Swenshuai.xi {
6054*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("MsOS_CreateTask failed!!\n");
6055*53ee8cc1Swenshuai.xi
6056*53ee8cc1Swenshuai.xi MsOS_DeleteEventGroup(pMHLResourcePrivate->slMHLPollingTaskID);
6057*53ee8cc1Swenshuai.xi
6058*53ee8cc1Swenshuai.xi bCreateSuccess = FALSE;
6059*53ee8cc1Swenshuai.xi }
6060*53ee8cc1Swenshuai.xi
6061*53ee8cc1Swenshuai.xi return bCreateSuccess;
6062*53ee8cc1Swenshuai.xi }
6063*53ee8cc1Swenshuai.xi
6064*53ee8cc1Swenshuai.xi #endif
6065*53ee8cc1Swenshuai.xi
6066*53ee8cc1Swenshuai.xi //**************************************************************************
6067*53ee8cc1Swenshuai.xi // [Function Name]:
6068*53ee8cc1Swenshuai.xi // _mdrv_mhl_IsrHandler()
6069*53ee8cc1Swenshuai.xi // [Description]
6070*53ee8cc1Swenshuai.xi //
6071*53ee8cc1Swenshuai.xi // [Arguments]:
6072*53ee8cc1Swenshuai.xi //
6073*53ee8cc1Swenshuai.xi // [Return]:
6074*53ee8cc1Swenshuai.xi //
6075*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_IsrHandler(InterruptNum eIntNum)6076*53ee8cc1Swenshuai.xi static void _mdrv_mhl_IsrHandler(InterruptNum eIntNum)
6077*53ee8cc1Swenshuai.xi {
6078*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
6079*53ee8cc1Swenshuai.xi MS_BOOL bGetResourceFlag = FALSE;
6080*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6081*53ee8cc1Swenshuai.xi
6082*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6083*53ee8cc1Swenshuai.xi {
6084*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6085*53ee8cc1Swenshuai.xi }
6086*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6087*53ee8cc1Swenshuai.xi {
6088*53ee8cc1Swenshuai.xi bGetResourceFlag = TRUE;
6089*53ee8cc1Swenshuai.xi }
6090*53ee8cc1Swenshuai.xi
6091*53ee8cc1Swenshuai.xi UNUSED(eIntNum);
6092*53ee8cc1Swenshuai.xi
6093*53ee8cc1Swenshuai.xi //MsOS_DisableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6094*53ee8cc1Swenshuai.xi
6095*53ee8cc1Swenshuai.xi if(mhal_mhl_CbusIsMscMsgReceived() && bGetResourceFlag)
6096*53ee8cc1Swenshuai.xi {
6097*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG);
6098*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
6099*53ee8cc1Swenshuai.xi
6100*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucReceiveCounter++;
6101*53ee8cc1Swenshuai.xi }
6102*53ee8cc1Swenshuai.xi
6103*53ee8cc1Swenshuai.xi if(mhal_mhl_CbusStucktoLowFlag())
6104*53ee8cc1Swenshuai.xi {
6105*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(FALSE);
6106*53ee8cc1Swenshuai.xi
6107*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6108*53ee8cc1Swenshuai.xi {
6109*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLowProc(pMHLResourcePrivate->ucMHLSupportPath);
6110*53ee8cc1Swenshuai.xi
6111*53ee8cc1Swenshuai.xi mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
6112*53ee8cc1Swenshuai.xi }
6113*53ee8cc1Swenshuai.xi }
6114*53ee8cc1Swenshuai.xi
6115*53ee8cc1Swenshuai.xi if(mhal_mhl_CbusWakeupIntFlag())
6116*53ee8cc1Swenshuai.xi {
6117*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(FALSE);
6118*53ee8cc1Swenshuai.xi
6119*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6120*53ee8cc1Swenshuai.xi {
6121*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
6122*53ee8cc1Swenshuai.xi }
6123*53ee8cc1Swenshuai.xi }
6124*53ee8cc1Swenshuai.xi
6125*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6126*53ee8cc1Swenshuai.xi {
6127*53ee8cc1Swenshuai.xi if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
6128*53ee8cc1Swenshuai.xi {
6129*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_PM);
6130*53ee8cc1Swenshuai.xi }
6131*53ee8cc1Swenshuai.xi else
6132*53ee8cc1Swenshuai.xi {
6133*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6134*53ee8cc1Swenshuai.xi }
6135*53ee8cc1Swenshuai.xi }
6136*53ee8cc1Swenshuai.xi
6137*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
6138*53ee8cc1Swenshuai.xi void* pModule = NULL;
6139*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
6140*53ee8cc1Swenshuai.xi MS_BOOL bGetResourceFlag = FALSE;
6141*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6142*53ee8cc1Swenshuai.xi
6143*53ee8cc1Swenshuai.xi UtopiaModuleGetPtr(MODULE_MHL, &pModule);
6144*53ee8cc1Swenshuai.xi
6145*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
6146*53ee8cc1Swenshuai.xi {
6147*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
6148*53ee8cc1Swenshuai.xi }
6149*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
6150*53ee8cc1Swenshuai.xi {
6151*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6152*53ee8cc1Swenshuai.xi }
6153*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6154*53ee8cc1Swenshuai.xi {
6155*53ee8cc1Swenshuai.xi bGetResourceFlag = TRUE;
6156*53ee8cc1Swenshuai.xi }
6157*53ee8cc1Swenshuai.xi
6158*53ee8cc1Swenshuai.xi UNUSED(eIntNum);
6159*53ee8cc1Swenshuai.xi
6160*53ee8cc1Swenshuai.xi //MsOS_DisableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6161*53ee8cc1Swenshuai.xi
6162*53ee8cc1Swenshuai.xi if(mhal_mhl_CbusIsMscMsgReceived() && bGetResourceFlag)
6163*53ee8cc1Swenshuai.xi {
6164*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG);
6165*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
6166*53ee8cc1Swenshuai.xi
6167*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucReceiveCounter++;
6168*53ee8cc1Swenshuai.xi }
6169*53ee8cc1Swenshuai.xi
6170*53ee8cc1Swenshuai.xi if(mhal_mhl_CbusStucktoLowFlag())
6171*53ee8cc1Swenshuai.xi {
6172*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLow(FALSE);
6173*53ee8cc1Swenshuai.xi
6174*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6175*53ee8cc1Swenshuai.xi {
6176*53ee8cc1Swenshuai.xi mhal_mhl_CbusStucktoLowProc(pMHLResourcePrivate->ucMHLSupportPath);
6177*53ee8cc1Swenshuai.xi
6178*53ee8cc1Swenshuai.xi mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
6179*53ee8cc1Swenshuai.xi }
6180*53ee8cc1Swenshuai.xi }
6181*53ee8cc1Swenshuai.xi
6182*53ee8cc1Swenshuai.xi if(mhal_mhl_CbusWakeupIntFlag())
6183*53ee8cc1Swenshuai.xi {
6184*53ee8cc1Swenshuai.xi mhal_mhl_CbusWakeupInterrupt(FALSE);
6185*53ee8cc1Swenshuai.xi
6186*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6187*53ee8cc1Swenshuai.xi {
6188*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
6189*53ee8cc1Swenshuai.xi }
6190*53ee8cc1Swenshuai.xi }
6191*53ee8cc1Swenshuai.xi
6192*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6193*53ee8cc1Swenshuai.xi {
6194*53ee8cc1Swenshuai.xi if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
6195*53ee8cc1Swenshuai.xi {
6196*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_PM);
6197*53ee8cc1Swenshuai.xi }
6198*53ee8cc1Swenshuai.xi else
6199*53ee8cc1Swenshuai.xi {
6200*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6201*53ee8cc1Swenshuai.xi }
6202*53ee8cc1Swenshuai.xi }
6203*53ee8cc1Swenshuai.xi
6204*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
6205*53ee8cc1Swenshuai.xi
6206*53ee8cc1Swenshuai.xi #endif
6207*53ee8cc1Swenshuai.xi }
6208*53ee8cc1Swenshuai.xi
6209*53ee8cc1Swenshuai.xi //**************************************************************************
6210*53ee8cc1Swenshuai.xi // [Function Name]:
6211*53ee8cc1Swenshuai.xi // _mdrv_mhl_ECbusIsrHandler()
6212*53ee8cc1Swenshuai.xi // [Description]
6213*53ee8cc1Swenshuai.xi //
6214*53ee8cc1Swenshuai.xi // [Arguments]:
6215*53ee8cc1Swenshuai.xi //
6216*53ee8cc1Swenshuai.xi // [Return]:
6217*53ee8cc1Swenshuai.xi //
6218*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ECbusIsrHandler(InterruptNum eIntNum)6219*53ee8cc1Swenshuai.xi static void _mdrv_mhl_ECbusIsrHandler(InterruptNum eIntNum)
6220*53ee8cc1Swenshuai.xi {
6221*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
6222*53ee8cc1Swenshuai.xi MS_BOOL bGetResourceFlag = FALSE;
6223*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6224*53ee8cc1Swenshuai.xi
6225*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6226*53ee8cc1Swenshuai.xi {
6227*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6228*53ee8cc1Swenshuai.xi }
6229*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6230*53ee8cc1Swenshuai.xi {
6231*53ee8cc1Swenshuai.xi bGetResourceFlag = TRUE;
6232*53ee8cc1Swenshuai.xi }
6233*53ee8cc1Swenshuai.xi
6234*53ee8cc1Swenshuai.xi UNUSED(eIntNum);
6235*53ee8cc1Swenshuai.xi
6236*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6237*53ee8cc1Swenshuai.xi {
6238*53ee8cc1Swenshuai.xi if(mhal_mhl_GetECbusStateChangeFlag(&(pMHLResourcePrivate->stSignalStatusInfo), &(pMHLResourcePrivate->stBISTParameterInfo)))
6239*53ee8cc1Swenshuai.xi {
6240*53ee8cc1Swenshuai.xi
6241*53ee8cc1Swenshuai.xi }
6242*53ee8cc1Swenshuai.xi }
6243*53ee8cc1Swenshuai.xi else
6244*53ee8cc1Swenshuai.xi {
6245*53ee8cc1Swenshuai.xi if(mhal_mhl_GetECbusStateChangeFlag(NULL, NULL))
6246*53ee8cc1Swenshuai.xi {
6247*53ee8cc1Swenshuai.xi
6248*53ee8cc1Swenshuai.xi }
6249*53ee8cc1Swenshuai.xi }
6250*53ee8cc1Swenshuai.xi
6251*53ee8cc1Swenshuai.xi if(mhal_mhl_GetEMSCReceiveFlag() && bGetResourceFlag)
6252*53ee8cc1Swenshuai.xi {
6253*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCReceiveCounter++;
6254*53ee8cc1Swenshuai.xi }
6255*53ee8cc1Swenshuai.xi
6256*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
6257*53ee8cc1Swenshuai.xi void* pModule = NULL;
6258*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
6259*53ee8cc1Swenshuai.xi MS_BOOL bGetResourceFlag = FALSE;
6260*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6261*53ee8cc1Swenshuai.xi
6262*53ee8cc1Swenshuai.xi UtopiaModuleGetPtr(MODULE_MHL, &pModule);
6263*53ee8cc1Swenshuai.xi
6264*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
6265*53ee8cc1Swenshuai.xi {
6266*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
6267*53ee8cc1Swenshuai.xi }
6268*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
6269*53ee8cc1Swenshuai.xi {
6270*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6271*53ee8cc1Swenshuai.xi }
6272*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6273*53ee8cc1Swenshuai.xi {
6274*53ee8cc1Swenshuai.xi bGetResourceFlag = TRUE;
6275*53ee8cc1Swenshuai.xi }
6276*53ee8cc1Swenshuai.xi
6277*53ee8cc1Swenshuai.xi UNUSED(eIntNum);
6278*53ee8cc1Swenshuai.xi
6279*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
6280*53ee8cc1Swenshuai.xi {
6281*53ee8cc1Swenshuai.xi if(mhal_mhl_GetECbusStateChangeFlag(&(pMHLResourcePrivate->stSignalStatusInfo), &(pMHLResourcePrivate->stBISTParameterInfo)))
6282*53ee8cc1Swenshuai.xi {
6283*53ee8cc1Swenshuai.xi
6284*53ee8cc1Swenshuai.xi }
6285*53ee8cc1Swenshuai.xi }
6286*53ee8cc1Swenshuai.xi else
6287*53ee8cc1Swenshuai.xi {
6288*53ee8cc1Swenshuai.xi if(mhal_mhl_GetECbusStateChangeFlag(NULL, NULL))
6289*53ee8cc1Swenshuai.xi {
6290*53ee8cc1Swenshuai.xi
6291*53ee8cc1Swenshuai.xi }
6292*53ee8cc1Swenshuai.xi }
6293*53ee8cc1Swenshuai.xi
6294*53ee8cc1Swenshuai.xi if(mhal_mhl_GetEMSCReceiveFlag() && bGetResourceFlag)
6295*53ee8cc1Swenshuai.xi {
6296*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucEMSCReceiveCounter++;
6297*53ee8cc1Swenshuai.xi }
6298*53ee8cc1Swenshuai.xi
6299*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
6300*53ee8cc1Swenshuai.xi
6301*53ee8cc1Swenshuai.xi #endif
6302*53ee8cc1Swenshuai.xi
6303*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
6304*53ee8cc1Swenshuai.xi }
6305*53ee8cc1Swenshuai.xi
6306*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
6307*53ee8cc1Swenshuai.xi // Global Functions
6308*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
6309*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
6310*53ee8cc1Swenshuai.xi //**************************************************************************
6311*53ee8cc1Swenshuai.xi // [Function Name]:
6312*53ee8cc1Swenshuai.xi // mdrv_mhl_STREventProc()
6313*53ee8cc1Swenshuai.xi // [Description]
6314*53ee8cc1Swenshuai.xi //
6315*53ee8cc1Swenshuai.xi // [Arguments]:
6316*53ee8cc1Swenshuai.xi //
6317*53ee8cc1Swenshuai.xi // [Return]:
6318*53ee8cc1Swenshuai.xi //
6319*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_STREventProc(EN_POWER_MODE usPowerState)6320*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_STREventProc(EN_POWER_MODE usPowerState)
6321*53ee8cc1Swenshuai.xi {
6322*53ee8cc1Swenshuai.xi MS_U32 ulReturnValue = UTOPIA_STATUS_FAIL;
6323*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6324*53ee8cc1Swenshuai.xi
6325*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6326*53ee8cc1Swenshuai.xi {
6327*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6328*53ee8cc1Swenshuai.xi }
6329*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6330*53ee8cc1Swenshuai.xi {
6331*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->usPrePowerState != usPowerState)
6332*53ee8cc1Swenshuai.xi {
6333*53ee8cc1Swenshuai.xi if(usPowerState == E_POWER_SUSPEND)
6334*53ee8cc1Swenshuai.xi {
6335*53ee8cc1Swenshuai.xi if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
6336*53ee8cc1Swenshuai.xi {
6337*53ee8cc1Swenshuai.xi _mdrv_mhl_ForceSendClearHPD(pMHLResourcePrivate);
6338*53ee8cc1Swenshuai.xi }
6339*53ee8cc1Swenshuai.xi
6340*53ee8cc1Swenshuai.xi ulReturnValue = UTOPIA_STATUS_SUCCESS;
6341*53ee8cc1Swenshuai.xi }
6342*53ee8cc1Swenshuai.xi else if(usPowerState == E_POWER_RESUME)
6343*53ee8cc1Swenshuai.xi {
6344*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, NULL, NULL, pMHLResourcePrivate->ucDeviceVenderID);
6345*53ee8cc1Swenshuai.xi
6346*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG);
6347*53ee8cc1Swenshuai.xi
6348*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
6349*53ee8cc1Swenshuai.xi {
6350*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
6351*53ee8cc1Swenshuai.xi {
6352*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
6353*53ee8cc1Swenshuai.xi
6354*53ee8cc1Swenshuai.xi mhal_mhl_CbusConnectProc(pMHLResourcePrivate->ucMHLSupportPath);
6355*53ee8cc1Swenshuai.xi
6356*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
6357*53ee8cc1Swenshuai.xi {
6358*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
6359*53ee8cc1Swenshuai.xi }
6360*53ee8cc1Swenshuai.xi }
6361*53ee8cc1Swenshuai.xi else
6362*53ee8cc1Swenshuai.xi {
6363*53ee8cc1Swenshuai.xi mhal_mhl_CablePlugProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
6364*53ee8cc1Swenshuai.xi }
6365*53ee8cc1Swenshuai.xi }
6366*53ee8cc1Swenshuai.xi
6367*53ee8cc1Swenshuai.xi ulReturnValue = UTOPIA_STATUS_SUCCESS;
6368*53ee8cc1Swenshuai.xi }
6369*53ee8cc1Swenshuai.xi
6370*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usPrePowerState = usPowerState;
6371*53ee8cc1Swenshuai.xi }
6372*53ee8cc1Swenshuai.xi }
6373*53ee8cc1Swenshuai.xi
6374*53ee8cc1Swenshuai.xi return ulReturnValue;
6375*53ee8cc1Swenshuai.xi }
6376*53ee8cc1Swenshuai.xi
6377*53ee8cc1Swenshuai.xi //**************************************************************************
6378*53ee8cc1Swenshuai.xi // [Function Name]:
6379*53ee8cc1Swenshuai.xi // mdrv_mhl_MHLSupportPath()
6380*53ee8cc1Swenshuai.xi // [Description]
6381*53ee8cc1Swenshuai.xi // MHL support path
6382*53ee8cc1Swenshuai.xi // [Arguments]:
6383*53ee8cc1Swenshuai.xi //
6384*53ee8cc1Swenshuai.xi // [Return]:
6385*53ee8cc1Swenshuai.xi //
6386*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MHLSupportPath(MS_U8 ucSelect)6387*53ee8cc1Swenshuai.xi void mdrv_mhl_MHLSupportPath(MS_U8 ucSelect)
6388*53ee8cc1Swenshuai.xi {
6389*53ee8cc1Swenshuai.xi MS_BOOL bMHLEfuseFlag = TRUE;
6390*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
6391*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6392*53ee8cc1Swenshuai.xi
6393*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6394*53ee8cc1Swenshuai.xi {
6395*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6396*53ee8cc1Swenshuai.xi }
6397*53ee8cc1Swenshuai.xi else
6398*53ee8cc1Swenshuai.xi {
6399*53ee8cc1Swenshuai.xi // Clear flag
6400*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
6401*53ee8cc1Swenshuai.xi {
6402*53ee8cc1Swenshuai.xi _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
6403*53ee8cc1Swenshuai.xi
6404*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucInitialIndex = 0xA5;
6405*53ee8cc1Swenshuai.xi
6406*53ee8cc1Swenshuai.xi if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
6407*53ee8cc1Swenshuai.xi {
6408*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
6409*53ee8cc1Swenshuai.xi
6410*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
6411*53ee8cc1Swenshuai.xi }
6412*53ee8cc1Swenshuai.xi }
6413*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6414*53ee8cc1Swenshuai.xi {
6415*53ee8cc1Swenshuai.xi mhal_mhl_SetRegisterBaseAddress(pMHLResourcePrivate->ulRiuBaseAddress, pMHLResourcePrivate->ulPMRiuBaseAddress);
6416*53ee8cc1Swenshuai.xi }
6417*53ee8cc1Swenshuai.xi
6418*53ee8cc1Swenshuai.xi mhal_mhl_MHLSupportPath(ucSelect);
6419*53ee8cc1Swenshuai.xi
6420*53ee8cc1Swenshuai.xi bMHLEfuseFlag = MDrv_SYS_Query(E_SYS_QUERY_MHL_SUPPORTED);
6421*53ee8cc1Swenshuai.xi
6422*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckEfuseControlFlag(bMHLEfuseFlag))
6423*53ee8cc1Swenshuai.xi {
6424*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL function not support in this chip ###\r\n");
6425*53ee8cc1Swenshuai.xi }
6426*53ee8cc1Swenshuai.xi else
6427*53ee8cc1Swenshuai.xi {
6428*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK ;uctemp++)
6429*53ee8cc1Swenshuai.xi {
6430*53ee8cc1Swenshuai.xi if(ucSelect &BIT(uctemp))
6431*53ee8cc1Swenshuai.xi {
6432*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucMHLSupportPath = uctemp;
6433*53ee8cc1Swenshuai.xi
6434*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL function support in port %c\r\n", MHL_INPUT_PORT(uctemp));
6435*53ee8cc1Swenshuai.xi }
6436*53ee8cc1Swenshuai.xi }
6437*53ee8cc1Swenshuai.xi }
6438*53ee8cc1Swenshuai.xi }
6439*53ee8cc1Swenshuai.xi }
6440*53ee8cc1Swenshuai.xi
6441*53ee8cc1Swenshuai.xi //**************************************************************************
6442*53ee8cc1Swenshuai.xi // [Function Name]:
6443*53ee8cc1Swenshuai.xi // mdrv_mhl_Initial()
6444*53ee8cc1Swenshuai.xi // [Description]
6445*53ee8cc1Swenshuai.xi // MHL init
6446*53ee8cc1Swenshuai.xi // [Arguments]:
6447*53ee8cc1Swenshuai.xi // *edid: MHL EDID data
6448*53ee8cc1Swenshuai.xi // *devcap: MHL device capability
6449*53ee8cc1Swenshuai.xi // [Return]:
6450*53ee8cc1Swenshuai.xi //
6451*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Initial(MS_U8 * edid,MS_U8 * DevCap)6452*53ee8cc1Swenshuai.xi void mdrv_mhl_Initial(MS_U8 *edid, MS_U8 *DevCap)
6453*53ee8cc1Swenshuai.xi {
6454*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
6455*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6456*53ee8cc1Swenshuai.xi
6457*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6458*53ee8cc1Swenshuai.xi {
6459*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6460*53ee8cc1Swenshuai.xi }
6461*53ee8cc1Swenshuai.xi else
6462*53ee8cc1Swenshuai.xi {
6463*53ee8cc1Swenshuai.xi // Clear flag
6464*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
6465*53ee8cc1Swenshuai.xi {
6466*53ee8cc1Swenshuai.xi _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
6467*53ee8cc1Swenshuai.xi
6468*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucInitialIndex = 0xA5;
6469*53ee8cc1Swenshuai.xi }
6470*53ee8cc1Swenshuai.xi
6471*53ee8cc1Swenshuai.xi if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
6472*53ee8cc1Swenshuai.xi {
6473*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
6474*53ee8cc1Swenshuai.xi
6475*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
6476*53ee8cc1Swenshuai.xi }
6477*53ee8cc1Swenshuai.xi
6478*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6479*53ee8cc1Swenshuai.xi {
6480*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
6481*53ee8cc1Swenshuai.xi {
6482*53ee8cc1Swenshuai.xi // Chip initial
6483*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, edid, DevCap, pMHLResourcePrivate->ucDeviceVenderID);
6484*53ee8cc1Swenshuai.xi
6485*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG);
6486*53ee8cc1Swenshuai.xi }
6487*53ee8cc1Swenshuai.xi else
6488*53ee8cc1Swenshuai.xi {
6489*53ee8cc1Swenshuai.xi // Load EDID
6490*53ee8cc1Swenshuai.xi mhal_mhl_LoadEDID(edid);
6491*53ee8cc1Swenshuai.xi
6492*53ee8cc1Swenshuai.xi // Load vendor ID
6493*53ee8cc1Swenshuai.xi mhal_mhl_SetVenderID(pMHLResourcePrivate->ucDeviceVenderID);
6494*53ee8cc1Swenshuai.xi
6495*53ee8cc1Swenshuai.xi // Load DevCap
6496*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(DevCap);
6497*53ee8cc1Swenshuai.xi }
6498*53ee8cc1Swenshuai.xi
6499*53ee8cc1Swenshuai.xi // Parsing EDID
6500*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
6501*53ee8cc1Swenshuai.xi
6502*53ee8cc1Swenshuai.xi // Check and insert device capability
6503*53ee8cc1Swenshuai.xi if(DevCap != NULL)
6504*53ee8cc1Swenshuai.xi {
6505*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
6506*53ee8cc1Swenshuai.xi {
6507*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = DevCap[uctemp];
6508*53ee8cc1Swenshuai.xi }
6509*53ee8cc1Swenshuai.xi
6510*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
6511*53ee8cc1Swenshuai.xi {
6512*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
6513*53ee8cc1Swenshuai.xi
6514*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
6515*53ee8cc1Swenshuai.xi {
6516*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = DevCap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
6517*53ee8cc1Swenshuai.xi }
6518*53ee8cc1Swenshuai.xi }
6519*53ee8cc1Swenshuai.xi else if(DevCap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
6520*53ee8cc1Swenshuai.xi {
6521*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
6522*53ee8cc1Swenshuai.xi
6523*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
6524*53ee8cc1Swenshuai.xi
6525*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
6526*53ee8cc1Swenshuai.xi }
6527*53ee8cc1Swenshuai.xi }
6528*53ee8cc1Swenshuai.xi
6529*53ee8cc1Swenshuai.xi // Attach Cbus ISR
6530*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG))
6531*53ee8cc1Swenshuai.xi {
6532*53ee8cc1Swenshuai.xi if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
6533*53ee8cc1Swenshuai.xi {
6534*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_PM, _mdrv_mhl_IsrHandler);
6535*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_PM);
6536*53ee8cc1Swenshuai.xi }
6537*53ee8cc1Swenshuai.xi else
6538*53ee8cc1Swenshuai.xi {
6539*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_MHL_CBUS_PM, _mdrv_mhl_IsrHandler);
6540*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6541*53ee8cc1Swenshuai.xi }
6542*53ee8cc1Swenshuai.xi
6543*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG);
6544*53ee8cc1Swenshuai.xi }
6545*53ee8cc1Swenshuai.xi
6546*53ee8cc1Swenshuai.xi // Attach eCbus ISR
6547*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
6548*53ee8cc1Swenshuai.xi {
6549*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
6550*53ee8cc1Swenshuai.xi {
6551*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
6552*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
6553*53ee8cc1Swenshuai.xi
6554*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
6555*53ee8cc1Swenshuai.xi }
6556*53ee8cc1Swenshuai.xi }
6557*53ee8cc1Swenshuai.xi }
6558*53ee8cc1Swenshuai.xi }
6559*53ee8cc1Swenshuai.xi }
6560*53ee8cc1Swenshuai.xi
6561*53ee8cc1Swenshuai.xi //**************************************************************************
6562*53ee8cc1Swenshuai.xi // [Function Name]:
6563*53ee8cc1Swenshuai.xi // mdrv_mhl_Handler()
6564*53ee8cc1Swenshuai.xi // [Description]
6565*53ee8cc1Swenshuai.xi // MHL handler
6566*53ee8cc1Swenshuai.xi // [Arguments]:
6567*53ee8cc1Swenshuai.xi //
6568*53ee8cc1Swenshuai.xi // [Return]:
6569*53ee8cc1Swenshuai.xi //
6570*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Handler(void)6571*53ee8cc1Swenshuai.xi MS_U16 mdrv_mhl_Handler(void)
6572*53ee8cc1Swenshuai.xi {
6573*53ee8cc1Swenshuai.xi MS_U16 usMSGKeyInfo = 0;
6574*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6575*53ee8cc1Swenshuai.xi
6576*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6577*53ee8cc1Swenshuai.xi {
6578*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6579*53ee8cc1Swenshuai.xi }
6580*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6581*53ee8cc1Swenshuai.xi {
6582*53ee8cc1Swenshuai.xi _mdrv_mhl_PollingEventProc(pMHLResourcePrivate);
6583*53ee8cc1Swenshuai.xi
6584*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG))
6585*53ee8cc1Swenshuai.xi {
6586*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
6587*53ee8cc1Swenshuai.xi
6588*53ee8cc1Swenshuai.xi usMSGKeyInfo = pMHLResourcePrivate->usMSGKeyInfo;
6589*53ee8cc1Swenshuai.xi }
6590*53ee8cc1Swenshuai.xi }
6591*53ee8cc1Swenshuai.xi
6592*53ee8cc1Swenshuai.xi return usMSGKeyInfo;
6593*53ee8cc1Swenshuai.xi }
6594*53ee8cc1Swenshuai.xi
6595*53ee8cc1Swenshuai.xi //**************************************************************************
6596*53ee8cc1Swenshuai.xi // [Function Name]:
6597*53ee8cc1Swenshuai.xi // mdrv_mhl_AutoSwitchHandler()
6598*53ee8cc1Swenshuai.xi // [Description]
6599*53ee8cc1Swenshuai.xi //
6600*53ee8cc1Swenshuai.xi // [Arguments]:
6601*53ee8cc1Swenshuai.xi //
6602*53ee8cc1Swenshuai.xi // [Return]:
6603*53ee8cc1Swenshuai.xi //
6604*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AutoSwitchHandler(MS_BOOL bReset,MS_U8 * ucCbusPath)6605*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_AutoSwitchHandler(MS_BOOL bReset, MS_U8 *ucCbusPath)
6606*53ee8cc1Swenshuai.xi {
6607*53ee8cc1Swenshuai.xi MS_BOOL bAutoSwitchFlag = FALSE;
6608*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6609*53ee8cc1Swenshuai.xi
6610*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6611*53ee8cc1Swenshuai.xi {
6612*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6613*53ee8cc1Swenshuai.xi }
6614*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6615*53ee8cc1Swenshuai.xi {
6616*53ee8cc1Swenshuai.xi if(bReset)
6617*53ee8cc1Swenshuai.xi {
6618*53ee8cc1Swenshuai.xi CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
6619*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
6620*53ee8cc1Swenshuai.xi }
6621*53ee8cc1Swenshuai.xi else
6622*53ee8cc1Swenshuai.xi {
6623*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG))
6624*53ee8cc1Swenshuai.xi {
6625*53ee8cc1Swenshuai.xi CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
6626*53ee8cc1Swenshuai.xi
6627*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_AUTO_SWITCH_STOP, MHL_AUTO_SWITCH_STOP_TIME);
6628*53ee8cc1Swenshuai.xi
6629*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG);
6630*53ee8cc1Swenshuai.xi
6631*53ee8cc1Swenshuai.xi bAutoSwitchFlag = TRUE;
6632*53ee8cc1Swenshuai.xi }
6633*53ee8cc1Swenshuai.xi else if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG))
6634*53ee8cc1Swenshuai.xi {
6635*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG))
6636*53ee8cc1Swenshuai.xi {
6637*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
6638*53ee8cc1Swenshuai.xi {
6639*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
6640*53ee8cc1Swenshuai.xi }
6641*53ee8cc1Swenshuai.xi }
6642*53ee8cc1Swenshuai.xi }
6643*53ee8cc1Swenshuai.xi }
6644*53ee8cc1Swenshuai.xi }
6645*53ee8cc1Swenshuai.xi
6646*53ee8cc1Swenshuai.xi return bAutoSwitchFlag;
6647*53ee8cc1Swenshuai.xi }
6648*53ee8cc1Swenshuai.xi
6649*53ee8cc1Swenshuai.xi //**************************************************************************
6650*53ee8cc1Swenshuai.xi // [Function Name]:
6651*53ee8cc1Swenshuai.xi // mdrv_mhl_SetPowerState()
6652*53ee8cc1Swenshuai.xi // [Description]
6653*53ee8cc1Swenshuai.xi //
6654*53ee8cc1Swenshuai.xi // [Arguments]:
6655*53ee8cc1Swenshuai.xi //
6656*53ee8cc1Swenshuai.xi // [Return]:
6657*53ee8cc1Swenshuai.xi //
6658*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetPowerState(EN_POWER_MODE usPowerState)6659*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_SetPowerState(EN_POWER_MODE usPowerState)
6660*53ee8cc1Swenshuai.xi {
6661*53ee8cc1Swenshuai.xi return mdrv_mhl_STREventProc(usPowerState);
6662*53ee8cc1Swenshuai.xi }
6663*53ee8cc1Swenshuai.xi
6664*53ee8cc1Swenshuai.xi //**************************************************************************
6665*53ee8cc1Swenshuai.xi // [Function Name]:
6666*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusControl()
6667*53ee8cc1Swenshuai.xi // [Description]
6668*53ee8cc1Swenshuai.xi //
6669*53ee8cc1Swenshuai.xi // [Arguments]:
6670*53ee8cc1Swenshuai.xi //
6671*53ee8cc1Swenshuai.xi // [Return]:
6672*53ee8cc1Swenshuai.xi //
6673*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusControl(MS_U8 ucState)6674*53ee8cc1Swenshuai.xi void mdrv_mhl_CbusControl(MS_U8 ucState)
6675*53ee8cc1Swenshuai.xi {
6676*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6677*53ee8cc1Swenshuai.xi
6678*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6679*53ee8cc1Swenshuai.xi {
6680*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6681*53ee8cc1Swenshuai.xi }
6682*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6683*53ee8cc1Swenshuai.xi {
6684*53ee8cc1Swenshuai.xi switch(ucState)
6685*53ee8cc1Swenshuai.xi {
6686*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_READY_DEVCAP:
6687*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
6688*53ee8cc1Swenshuai.xi break;
6689*53ee8cc1Swenshuai.xi
6690*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_RECEIVE_3D_REQ:
6691*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
6692*53ee8cc1Swenshuai.xi break;
6693*53ee8cc1Swenshuai.xi
6694*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_SEND_COMMAND_ENABLE:
6695*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
6696*53ee8cc1Swenshuai.xi break;
6697*53ee8cc1Swenshuai.xi
6698*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_SEND_COMMAND_DISABLE:
6699*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
6700*53ee8cc1Swenshuai.xi break;
6701*53ee8cc1Swenshuai.xi
6702*53ee8cc1Swenshuai.xi case MHL_CBUS_CHECK_CONTEND_ON_ENABLE:
6703*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
6704*53ee8cc1Swenshuai.xi break;
6705*53ee8cc1Swenshuai.xi
6706*53ee8cc1Swenshuai.xi case MHL_CBUS_CHECK_CONTEND_ON_DISABLE:
6707*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
6708*53ee8cc1Swenshuai.xi break;
6709*53ee8cc1Swenshuai.xi
6710*53ee8cc1Swenshuai.xi case MHL_CBUS_ISOLATION_ON:
6711*53ee8cc1Swenshuai.xi mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, TRUE);
6712*53ee8cc1Swenshuai.xi break;
6713*53ee8cc1Swenshuai.xi
6714*53ee8cc1Swenshuai.xi case MHL_CBUS_ISOLATION_OFF:
6715*53ee8cc1Swenshuai.xi mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
6716*53ee8cc1Swenshuai.xi break;
6717*53ee8cc1Swenshuai.xi
6718*53ee8cc1Swenshuai.xi case MHL_CBUS_FLOATING_ON:
6719*53ee8cc1Swenshuai.xi mhal_mhl_CbusFloating(TRUE);
6720*53ee8cc1Swenshuai.xi break;
6721*53ee8cc1Swenshuai.xi
6722*53ee8cc1Swenshuai.xi case MHL_CBUS_FLOATING_OFF:
6723*53ee8cc1Swenshuai.xi mhal_mhl_CbusFloating(FALSE);
6724*53ee8cc1Swenshuai.xi break;
6725*53ee8cc1Swenshuai.xi
6726*53ee8cc1Swenshuai.xi case MHL_VBUS_HW_DETCET:
6727*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_HW_DETECT);
6728*53ee8cc1Swenshuai.xi break;
6729*53ee8cc1Swenshuai.xi
6730*53ee8cc1Swenshuai.xi case MHL_VBUS_CHARGE_ON:
6731*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_CHARGE);
6732*53ee8cc1Swenshuai.xi break;
6733*53ee8cc1Swenshuai.xi
6734*53ee8cc1Swenshuai.xi case MHL_VBUS_CHARGE_OFF:
6735*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_UNCHARGE);
6736*53ee8cc1Swenshuai.xi break;
6737*53ee8cc1Swenshuai.xi
6738*53ee8cc1Swenshuai.xi default:
6739*53ee8cc1Swenshuai.xi
6740*53ee8cc1Swenshuai.xi break;
6741*53ee8cc1Swenshuai.xi };
6742*53ee8cc1Swenshuai.xi }
6743*53ee8cc1Swenshuai.xi }
6744*53ee8cc1Swenshuai.xi
6745*53ee8cc1Swenshuai.xi //**************************************************************************
6746*53ee8cc1Swenshuai.xi // [Function Name]:
6747*53ee8cc1Swenshuai.xi // mdrv_mhl_LoadEDID()
6748*53ee8cc1Swenshuai.xi // [Description]
6749*53ee8cc1Swenshuai.xi //
6750*53ee8cc1Swenshuai.xi // [Arguments]:
6751*53ee8cc1Swenshuai.xi //
6752*53ee8cc1Swenshuai.xi // [Return]:
6753*53ee8cc1Swenshuai.xi //
6754*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadEDID(MS_U8 * edid)6755*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadEDID(MS_U8 *edid)
6756*53ee8cc1Swenshuai.xi {
6757*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6758*53ee8cc1Swenshuai.xi
6759*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6760*53ee8cc1Swenshuai.xi {
6761*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6762*53ee8cc1Swenshuai.xi }
6763*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6764*53ee8cc1Swenshuai.xi {
6765*53ee8cc1Swenshuai.xi mhal_mhl_LoadEDID(edid);
6766*53ee8cc1Swenshuai.xi
6767*53ee8cc1Swenshuai.xi // Parsing EDID
6768*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
6769*53ee8cc1Swenshuai.xi }
6770*53ee8cc1Swenshuai.xi }
6771*53ee8cc1Swenshuai.xi
6772*53ee8cc1Swenshuai.xi //**************************************************************************
6773*53ee8cc1Swenshuai.xi // [Function Name]:
6774*53ee8cc1Swenshuai.xi // mdrv_mhl_ReadEDID()
6775*53ee8cc1Swenshuai.xi // [Description]
6776*53ee8cc1Swenshuai.xi //
6777*53ee8cc1Swenshuai.xi // [Arguments]:
6778*53ee8cc1Swenshuai.xi //
6779*53ee8cc1Swenshuai.xi // [Return]:
6780*53ee8cc1Swenshuai.xi //
6781*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_ReadEDID(MS_U16 usSize,MS_U8 * edid)6782*53ee8cc1Swenshuai.xi void mdrv_mhl_ReadEDID(MS_U16 usSize, MS_U8 *edid)
6783*53ee8cc1Swenshuai.xi {
6784*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6785*53ee8cc1Swenshuai.xi
6786*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6787*53ee8cc1Swenshuai.xi {
6788*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6789*53ee8cc1Swenshuai.xi }
6790*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6791*53ee8cc1Swenshuai.xi {
6792*53ee8cc1Swenshuai.xi if(usSize > 0)
6793*53ee8cc1Swenshuai.xi {
6794*53ee8cc1Swenshuai.xi mhal_mhl_ReadEDID(usSize, edid);
6795*53ee8cc1Swenshuai.xi }
6796*53ee8cc1Swenshuai.xi }
6797*53ee8cc1Swenshuai.xi }
6798*53ee8cc1Swenshuai.xi
6799*53ee8cc1Swenshuai.xi //**************************************************************************
6800*53ee8cc1Swenshuai.xi // [Function Name]:
6801*53ee8cc1Swenshuai.xi // mdrv_mhl_LoadDeviceCapability()
6802*53ee8cc1Swenshuai.xi // [Description]
6803*53ee8cc1Swenshuai.xi //
6804*53ee8cc1Swenshuai.xi // [Arguments]:
6805*53ee8cc1Swenshuai.xi //
6806*53ee8cc1Swenshuai.xi // [Return]:
6807*53ee8cc1Swenshuai.xi //
6808*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadDeviceCapability(MS_U8 * devcap)6809*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadDeviceCapability(MS_U8 *devcap)
6810*53ee8cc1Swenshuai.xi {
6811*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
6812*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6813*53ee8cc1Swenshuai.xi
6814*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6815*53ee8cc1Swenshuai.xi {
6816*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6817*53ee8cc1Swenshuai.xi }
6818*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6819*53ee8cc1Swenshuai.xi {
6820*53ee8cc1Swenshuai.xi if(devcap != NULL)
6821*53ee8cc1Swenshuai.xi {
6822*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
6823*53ee8cc1Swenshuai.xi {
6824*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = devcap[uctemp];
6825*53ee8cc1Swenshuai.xi }
6826*53ee8cc1Swenshuai.xi
6827*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
6828*53ee8cc1Swenshuai.xi {
6829*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
6830*53ee8cc1Swenshuai.xi
6831*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
6832*53ee8cc1Swenshuai.xi {
6833*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = devcap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
6834*53ee8cc1Swenshuai.xi }
6835*53ee8cc1Swenshuai.xi }
6836*53ee8cc1Swenshuai.xi else if(devcap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
6837*53ee8cc1Swenshuai.xi {
6838*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
6839*53ee8cc1Swenshuai.xi
6840*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
6841*53ee8cc1Swenshuai.xi
6842*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
6843*53ee8cc1Swenshuai.xi }
6844*53ee8cc1Swenshuai.xi
6845*53ee8cc1Swenshuai.xi // Attach eCbus ISR
6846*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
6847*53ee8cc1Swenshuai.xi {
6848*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
6849*53ee8cc1Swenshuai.xi {
6850*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
6851*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
6852*53ee8cc1Swenshuai.xi
6853*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
6854*53ee8cc1Swenshuai.xi }
6855*53ee8cc1Swenshuai.xi }
6856*53ee8cc1Swenshuai.xi }
6857*53ee8cc1Swenshuai.xi }
6858*53ee8cc1Swenshuai.xi }
6859*53ee8cc1Swenshuai.xi
6860*53ee8cc1Swenshuai.xi //**************************************************************************
6861*53ee8cc1Swenshuai.xi // [Function Name]:
6862*53ee8cc1Swenshuai.xi // mdrv_mhl_SetVenderID()
6863*53ee8cc1Swenshuai.xi // [Description]
6864*53ee8cc1Swenshuai.xi //
6865*53ee8cc1Swenshuai.xi // [Arguments]:
6866*53ee8cc1Swenshuai.xi //
6867*53ee8cc1Swenshuai.xi // [Return]:
6868*53ee8cc1Swenshuai.xi //
6869*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetVenderID(MS_U8 ucVenderID)6870*53ee8cc1Swenshuai.xi void mdrv_mhl_SetVenderID(MS_U8 ucVenderID)
6871*53ee8cc1Swenshuai.xi {
6872*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6873*53ee8cc1Swenshuai.xi
6874*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6875*53ee8cc1Swenshuai.xi {
6876*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6877*53ee8cc1Swenshuai.xi }
6878*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6879*53ee8cc1Swenshuai.xi {
6880*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceVenderID = ucVenderID;
6881*53ee8cc1Swenshuai.xi
6882*53ee8cc1Swenshuai.xi mhal_mhl_SetVenderID(ucVenderID);
6883*53ee8cc1Swenshuai.xi }
6884*53ee8cc1Swenshuai.xi }
6885*53ee8cc1Swenshuai.xi
6886*53ee8cc1Swenshuai.xi //**************************************************************************
6887*53ee8cc1Swenshuai.xi // [Function Name]:
6888*53ee8cc1Swenshuai.xi // mdrv_mhl_InvertCableDetect()
6889*53ee8cc1Swenshuai.xi // [Description]
6890*53ee8cc1Swenshuai.xi //
6891*53ee8cc1Swenshuai.xi // [Arguments]:
6892*53ee8cc1Swenshuai.xi //
6893*53ee8cc1Swenshuai.xi // [Return]:
6894*53ee8cc1Swenshuai.xi //
6895*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_InvertCableDetect(MS_BOOL bCableDetectInvert)6896*53ee8cc1Swenshuai.xi void mdrv_mhl_InvertCableDetect(MS_BOOL bCableDetectInvert)
6897*53ee8cc1Swenshuai.xi {
6898*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6899*53ee8cc1Swenshuai.xi
6900*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6901*53ee8cc1Swenshuai.xi {
6902*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6903*53ee8cc1Swenshuai.xi }
6904*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6905*53ee8cc1Swenshuai.xi {
6906*53ee8cc1Swenshuai.xi mhal_mhl_InvertCableDetect(pMHLResourcePrivate->ucMHLSupportPath, bCableDetectInvert);
6907*53ee8cc1Swenshuai.xi }
6908*53ee8cc1Swenshuai.xi }
6909*53ee8cc1Swenshuai.xi
6910*53ee8cc1Swenshuai.xi //**************************************************************************
6911*53ee8cc1Swenshuai.xi // [Function Name]:
6912*53ee8cc1Swenshuai.xi // mdrv_mhl_VbusConfigSetting()
6913*53ee8cc1Swenshuai.xi // [Description]
6914*53ee8cc1Swenshuai.xi //
6915*53ee8cc1Swenshuai.xi // [Arguments]:
6916*53ee8cc1Swenshuai.xi //
6917*53ee8cc1Swenshuai.xi // [Return]:
6918*53ee8cc1Swenshuai.xi //
6919*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_VbusConfigSetting(MS_U8 ucState)6920*53ee8cc1Swenshuai.xi void mdrv_mhl_VbusConfigSetting(MS_U8 ucState)
6921*53ee8cc1Swenshuai.xi {
6922*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6923*53ee8cc1Swenshuai.xi
6924*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6925*53ee8cc1Swenshuai.xi {
6926*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6927*53ee8cc1Swenshuai.xi }
6928*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6929*53ee8cc1Swenshuai.xi {
6930*53ee8cc1Swenshuai.xi mhal_mhl_VbusConfigSetting(pMHLResourcePrivate->ucMHLSupportPath, ucState);
6931*53ee8cc1Swenshuai.xi }
6932*53ee8cc1Swenshuai.xi }
6933*53ee8cc1Swenshuai.xi
6934*53ee8cc1Swenshuai.xi //**************************************************************************
6935*53ee8cc1Swenshuai.xi // [Function Name]:
6936*53ee8cc1Swenshuai.xi // mdrv_mhl_AdjustSettingIControl()
6937*53ee8cc1Swenshuai.xi // [Description]
6938*53ee8cc1Swenshuai.xi //
6939*53ee8cc1Swenshuai.xi // [Arguments]:
6940*53ee8cc1Swenshuai.xi //
6941*53ee8cc1Swenshuai.xi // [Return]:
6942*53ee8cc1Swenshuai.xi //
6943*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustSettingIControl(MS_U8 ucIControl)6944*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustSettingIControl(MS_U8 ucIControl)
6945*53ee8cc1Swenshuai.xi {
6946*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6947*53ee8cc1Swenshuai.xi
6948*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6949*53ee8cc1Swenshuai.xi {
6950*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6951*53ee8cc1Swenshuai.xi }
6952*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6953*53ee8cc1Swenshuai.xi {
6954*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucIControlValue = ucIControl;
6955*53ee8cc1Swenshuai.xi }
6956*53ee8cc1Swenshuai.xi }
6957*53ee8cc1Swenshuai.xi
6958*53ee8cc1Swenshuai.xi //**************************************************************************
6959*53ee8cc1Swenshuai.xi // [Function Name]:
6960*53ee8cc1Swenshuai.xi // mdrv_mhl_AdjustImpedanceSetting()
6961*53ee8cc1Swenshuai.xi // [Description]
6962*53ee8cc1Swenshuai.xi //
6963*53ee8cc1Swenshuai.xi // [Arguments]:
6964*53ee8cc1Swenshuai.xi //
6965*53ee8cc1Swenshuai.xi // [Return]:
6966*53ee8cc1Swenshuai.xi //
6967*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)6968*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)
6969*53ee8cc1Swenshuai.xi {
6970*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6971*53ee8cc1Swenshuai.xi
6972*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6973*53ee8cc1Swenshuai.xi {
6974*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6975*53ee8cc1Swenshuai.xi }
6976*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6977*53ee8cc1Swenshuai.xi {
6978*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceOffset = ucImpedance;
6979*53ee8cc1Swenshuai.xi }
6980*53ee8cc1Swenshuai.xi }
6981*53ee8cc1Swenshuai.xi
6982*53ee8cc1Swenshuai.xi //**************************************************************************
6983*53ee8cc1Swenshuai.xi // [Function Name]:
6984*53ee8cc1Swenshuai.xi // mdrv_mhl_GetCableDetectFlag()
6985*53ee8cc1Swenshuai.xi // [Description]
6986*53ee8cc1Swenshuai.xi //
6987*53ee8cc1Swenshuai.xi // [Arguments]:
6988*53ee8cc1Swenshuai.xi //
6989*53ee8cc1Swenshuai.xi // [Return]:
6990*53ee8cc1Swenshuai.xi //
6991*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCableDetectFlag(void)6992*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCableDetectFlag(void)
6993*53ee8cc1Swenshuai.xi {
6994*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
6995*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6996*53ee8cc1Swenshuai.xi
6997*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6998*53ee8cc1Swenshuai.xi {
6999*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7000*53ee8cc1Swenshuai.xi }
7001*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7002*53ee8cc1Swenshuai.xi {
7003*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
7004*53ee8cc1Swenshuai.xi }
7005*53ee8cc1Swenshuai.xi
7006*53ee8cc1Swenshuai.xi return bStatusFlag;
7007*53ee8cc1Swenshuai.xi }
7008*53ee8cc1Swenshuai.xi
7009*53ee8cc1Swenshuai.xi //**************************************************************************
7010*53ee8cc1Swenshuai.xi // [Function Name]:
7011*53ee8cc1Swenshuai.xi // mdrv_mhl_GetCbusConnectFlag()
7012*53ee8cc1Swenshuai.xi // [Description]
7013*53ee8cc1Swenshuai.xi //
7014*53ee8cc1Swenshuai.xi // [Arguments]:
7015*53ee8cc1Swenshuai.xi //
7016*53ee8cc1Swenshuai.xi // [Return]:
7017*53ee8cc1Swenshuai.xi //
7018*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCbusConnectFlag(void)7019*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCbusConnectFlag(void)
7020*53ee8cc1Swenshuai.xi {
7021*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
7022*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7023*53ee8cc1Swenshuai.xi
7024*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7025*53ee8cc1Swenshuai.xi {
7026*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7027*53ee8cc1Swenshuai.xi }
7028*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7029*53ee8cc1Swenshuai.xi {
7030*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
7031*53ee8cc1Swenshuai.xi }
7032*53ee8cc1Swenshuai.xi
7033*53ee8cc1Swenshuai.xi return bStatusFlag;
7034*53ee8cc1Swenshuai.xi }
7035*53ee8cc1Swenshuai.xi
7036*53ee8cc1Swenshuai.xi //**************************************************************************
7037*53ee8cc1Swenshuai.xi // [Function Name]:
7038*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusWakeupIntFlag()
7039*53ee8cc1Swenshuai.xi // [Description]
7040*53ee8cc1Swenshuai.xi //
7041*53ee8cc1Swenshuai.xi // [Arguments]:
7042*53ee8cc1Swenshuai.xi //
7043*53ee8cc1Swenshuai.xi // [Return]:
7044*53ee8cc1Swenshuai.xi //
7045*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusWakeupIntFlag(void)7046*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusWakeupIntFlag(void)
7047*53ee8cc1Swenshuai.xi {
7048*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
7049*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7050*53ee8cc1Swenshuai.xi
7051*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7052*53ee8cc1Swenshuai.xi {
7053*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7054*53ee8cc1Swenshuai.xi }
7055*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7056*53ee8cc1Swenshuai.xi {
7057*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
7058*53ee8cc1Swenshuai.xi }
7059*53ee8cc1Swenshuai.xi
7060*53ee8cc1Swenshuai.xi return bStatusFlag;
7061*53ee8cc1Swenshuai.xi }
7062*53ee8cc1Swenshuai.xi
7063*53ee8cc1Swenshuai.xi //**************************************************************************
7064*53ee8cc1Swenshuai.xi // [Function Name]:
7065*53ee8cc1Swenshuai.xi // mdrv_mhl_SrcRCPSupportFlag()
7066*53ee8cc1Swenshuai.xi // [Description]
7067*53ee8cc1Swenshuai.xi //
7068*53ee8cc1Swenshuai.xi // [Arguments]:
7069*53ee8cc1Swenshuai.xi //
7070*53ee8cc1Swenshuai.xi // [Return]:
7071*53ee8cc1Swenshuai.xi //
7072*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRCPSupportFlag(void)7073*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRCPSupportFlag(void)
7074*53ee8cc1Swenshuai.xi {
7075*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
7076*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7077*53ee8cc1Swenshuai.xi
7078*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7079*53ee8cc1Swenshuai.xi {
7080*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7081*53ee8cc1Swenshuai.xi }
7082*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7083*53ee8cc1Swenshuai.xi {
7084*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RCP_FUNCTION_FLAG);
7085*53ee8cc1Swenshuai.xi }
7086*53ee8cc1Swenshuai.xi
7087*53ee8cc1Swenshuai.xi return bStatusFlag;
7088*53ee8cc1Swenshuai.xi }
7089*53ee8cc1Swenshuai.xi
7090*53ee8cc1Swenshuai.xi //**************************************************************************
7091*53ee8cc1Swenshuai.xi // [Function Name]:
7092*53ee8cc1Swenshuai.xi // mdrv_mhl_SrcRAPSupportFlag()
7093*53ee8cc1Swenshuai.xi // [Description]
7094*53ee8cc1Swenshuai.xi //
7095*53ee8cc1Swenshuai.xi // [Arguments]:
7096*53ee8cc1Swenshuai.xi //
7097*53ee8cc1Swenshuai.xi // [Return]:
7098*53ee8cc1Swenshuai.xi //
7099*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRAPSupportFlag(void)7100*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRAPSupportFlag(void)
7101*53ee8cc1Swenshuai.xi {
7102*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
7103*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7104*53ee8cc1Swenshuai.xi
7105*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7106*53ee8cc1Swenshuai.xi {
7107*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7108*53ee8cc1Swenshuai.xi }
7109*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7110*53ee8cc1Swenshuai.xi {
7111*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RAP_FUNCTION_FLAG);
7112*53ee8cc1Swenshuai.xi }
7113*53ee8cc1Swenshuai.xi
7114*53ee8cc1Swenshuai.xi return bStatusFlag;
7115*53ee8cc1Swenshuai.xi }
7116*53ee8cc1Swenshuai.xi
7117*53ee8cc1Swenshuai.xi //**************************************************************************
7118*53ee8cc1Swenshuai.xi // [Function Name]:
7119*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusGetStatusFlag()
7120*53ee8cc1Swenshuai.xi // [Description]
7121*53ee8cc1Swenshuai.xi //
7122*53ee8cc1Swenshuai.xi // [Arguments]:
7123*53ee8cc1Swenshuai.xi //
7124*53ee8cc1Swenshuai.xi // [Return]:
7125*53ee8cc1Swenshuai.xi //
7126*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusGetStatusFlag(MS_U8 ucState)7127*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusGetStatusFlag(MS_U8 ucState)
7128*53ee8cc1Swenshuai.xi {
7129*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
7130*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7131*53ee8cc1Swenshuai.xi
7132*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7133*53ee8cc1Swenshuai.xi {
7134*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7135*53ee8cc1Swenshuai.xi }
7136*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7137*53ee8cc1Swenshuai.xi {
7138*53ee8cc1Swenshuai.xi switch(ucState)
7139*53ee8cc1Swenshuai.xi {
7140*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_CABLE_DETECT:
7141*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
7142*53ee8cc1Swenshuai.xi break;
7143*53ee8cc1Swenshuai.xi
7144*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_CBUS_CONNECT:
7145*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
7146*53ee8cc1Swenshuai.xi break;
7147*53ee8cc1Swenshuai.xi
7148*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_PATH_EN:
7149*53ee8cc1Swenshuai.xi break;
7150*53ee8cc1Swenshuai.xi
7151*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_RECEIVE_PATH_EN:
7152*53ee8cc1Swenshuai.xi break;
7153*53ee8cc1Swenshuai.xi
7154*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_RECEIVE_MUTED:
7155*53ee8cc1Swenshuai.xi break;
7156*53ee8cc1Swenshuai.xi
7157*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_COMMUNICATE_BUSY:
7158*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
7159*53ee8cc1Swenshuai.xi break;
7160*53ee8cc1Swenshuai.xi
7161*53ee8cc1Swenshuai.xi default:
7162*53ee8cc1Swenshuai.xi
7163*53ee8cc1Swenshuai.xi break;
7164*53ee8cc1Swenshuai.xi };
7165*53ee8cc1Swenshuai.xi }
7166*53ee8cc1Swenshuai.xi
7167*53ee8cc1Swenshuai.xi return bStatusFlag;
7168*53ee8cc1Swenshuai.xi }
7169*53ee8cc1Swenshuai.xi
7170*53ee8cc1Swenshuai.xi //**************************************************************************
7171*53ee8cc1Swenshuai.xi // [Function Name]:
7172*53ee8cc1Swenshuai.xi // mdrv_mhl_SendRAPCommand
7173*53ee8cc1Swenshuai.xi // [Description]
7174*53ee8cc1Swenshuai.xi // MHL Cbus MSC Send RAP Command
7175*53ee8cc1Swenshuai.xi // [Arguments]:
7176*53ee8cc1Swenshuai.xi //
7177*53ee8cc1Swenshuai.xi // [Return]:
7178*53ee8cc1Swenshuai.xi // TRUE: success
7179*53ee8cc1Swenshuai.xi // FALSE: fail
7180*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRAPCommand(MS_U8 ucKeyCode)7181*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRAPCommand(MS_U8 ucKeyCode)
7182*53ee8cc1Swenshuai.xi {
7183*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
7184*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7185*53ee8cc1Swenshuai.xi
7186*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7187*53ee8cc1Swenshuai.xi {
7188*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7189*53ee8cc1Swenshuai.xi }
7190*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7191*53ee8cc1Swenshuai.xi {
7192*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAP, ucKeyCode, TRUE);
7193*53ee8cc1Swenshuai.xi }
7194*53ee8cc1Swenshuai.xi
7195*53ee8cc1Swenshuai.xi return bSendFlag;
7196*53ee8cc1Swenshuai.xi }
7197*53ee8cc1Swenshuai.xi
7198*53ee8cc1Swenshuai.xi //**************************************************************************
7199*53ee8cc1Swenshuai.xi // [Function Name]:
7200*53ee8cc1Swenshuai.xi // mdrv_mhl_SendRCPAutoReleaseCmd
7201*53ee8cc1Swenshuai.xi // [Description]
7202*53ee8cc1Swenshuai.xi // MHL Cbus MSC Send RCP Command
7203*53ee8cc1Swenshuai.xi // [Arguments]:
7204*53ee8cc1Swenshuai.xi //
7205*53ee8cc1Swenshuai.xi // [Return]:
7206*53ee8cc1Swenshuai.xi // TRUE: success
7207*53ee8cc1Swenshuai.xi // FALSE: fail
7208*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRCPAutoReleaseCmd(MS_U8 ucKeyCode)7209*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRCPAutoReleaseCmd(MS_U8 ucKeyCode)
7210*53ee8cc1Swenshuai.xi {
7211*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
7212*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7213*53ee8cc1Swenshuai.xi
7214*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7215*53ee8cc1Swenshuai.xi {
7216*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7217*53ee8cc1Swenshuai.xi }
7218*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7219*53ee8cc1Swenshuai.xi {
7220*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucPreRCPKeyCode != ucKeyCode) // Key change
7221*53ee8cc1Swenshuai.xi {
7222*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG))
7223*53ee8cc1Swenshuai.xi {
7224*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
7225*53ee8cc1Swenshuai.xi }
7226*53ee8cc1Swenshuai.xi }
7227*53ee8cc1Swenshuai.xi else
7228*53ee8cc1Swenshuai.xi {
7229*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
7230*53ee8cc1Swenshuai.xi }
7231*53ee8cc1Swenshuai.xi
7232*53ee8cc1Swenshuai.xi if(bSendFlag)
7233*53ee8cc1Swenshuai.xi {
7234*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPreRCPKeyCode = ucKeyCode;
7235*53ee8cc1Swenshuai.xi
7236*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_RCP_AUTO_RELEASE, MHL_CBUS_RCP_RELEASE_TIME);
7237*53ee8cc1Swenshuai.xi
7238*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG);
7239*53ee8cc1Swenshuai.xi }
7240*53ee8cc1Swenshuai.xi }
7241*53ee8cc1Swenshuai.xi
7242*53ee8cc1Swenshuai.xi return bSendFlag;
7243*53ee8cc1Swenshuai.xi }
7244*53ee8cc1Swenshuai.xi
7245*53ee8cc1Swenshuai.xi //**************************************************************************
7246*53ee8cc1Swenshuai.xi // [Function Name]:
7247*53ee8cc1Swenshuai.xi // mdrv_mhl_SendUCPCommand
7248*53ee8cc1Swenshuai.xi // [Description]
7249*53ee8cc1Swenshuai.xi // MHL Cbus MSC Send UCP Command
7250*53ee8cc1Swenshuai.xi // [Arguments]:
7251*53ee8cc1Swenshuai.xi //
7252*53ee8cc1Swenshuai.xi // [Return]:
7253*53ee8cc1Swenshuai.xi // TRUE: success
7254*53ee8cc1Swenshuai.xi // FALSE: fail
7255*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendUCPCommand(MS_U8 ucKeyCode)7256*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendUCPCommand(MS_U8 ucKeyCode)
7257*53ee8cc1Swenshuai.xi {
7258*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
7259*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7260*53ee8cc1Swenshuai.xi
7261*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7262*53ee8cc1Swenshuai.xi {
7263*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7264*53ee8cc1Swenshuai.xi }
7265*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7266*53ee8cc1Swenshuai.xi {
7267*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_UCP, ucKeyCode, TRUE);
7268*53ee8cc1Swenshuai.xi }
7269*53ee8cc1Swenshuai.xi
7270*53ee8cc1Swenshuai.xi return bSendFlag;
7271*53ee8cc1Swenshuai.xi }
7272*53ee8cc1Swenshuai.xi
7273*53ee8cc1Swenshuai.xi //**************************************************************************
7274*53ee8cc1Swenshuai.xi // [Function Name]:
7275*53ee8cc1Swenshuai.xi // mdrv_mhl_SendWriteBurst
7276*53ee8cc1Swenshuai.xi // [Description]
7277*53ee8cc1Swenshuai.xi //
7278*53ee8cc1Swenshuai.xi // [Arguments]:
7279*53ee8cc1Swenshuai.xi //
7280*53ee8cc1Swenshuai.xi // [Return]:
7281*53ee8cc1Swenshuai.xi // TRUE: success
7282*53ee8cc1Swenshuai.xi // FALSE: fail
7283*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendWriteBurst(MS_U8 ucAddr,MS_U8 ucLength,MS_U8 * ucData)7284*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendWriteBurst(MS_U8 ucAddr, MS_U8 ucLength, MS_U8 *ucData)
7285*53ee8cc1Swenshuai.xi {
7286*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
7287*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7288*53ee8cc1Swenshuai.xi
7289*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7290*53ee8cc1Swenshuai.xi {
7291*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7292*53ee8cc1Swenshuai.xi }
7293*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7294*53ee8cc1Swenshuai.xi {
7295*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, ucAddr, ucLength, ucData);
7296*53ee8cc1Swenshuai.xi }
7297*53ee8cc1Swenshuai.xi
7298*53ee8cc1Swenshuai.xi return bSendFlag;
7299*53ee8cc1Swenshuai.xi }
7300*53ee8cc1Swenshuai.xi
7301*53ee8cc1Swenshuai.xi //**************************************************************************
7302*53ee8cc1Swenshuai.xi // [Function Name]:
7303*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusSendUserWriteBurst
7304*53ee8cc1Swenshuai.xi // [Description]
7305*53ee8cc1Swenshuai.xi //
7306*53ee8cc1Swenshuai.xi // [Arguments]:
7307*53ee8cc1Swenshuai.xi //
7308*53ee8cc1Swenshuai.xi // [Return]:
7309*53ee8cc1Swenshuai.xi // TRUE: success
7310*53ee8cc1Swenshuai.xi // FALSE: fail
7311*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusSendUserWriteBurst(MS_U8 ucLength,MS_U8 * ucData)7312*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusSendUserWriteBurst(MS_U8 ucLength, MS_U8 *ucData)
7313*53ee8cc1Swenshuai.xi {
7314*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
7315*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7316*53ee8cc1Swenshuai.xi
7317*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7318*53ee8cc1Swenshuai.xi {
7319*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7320*53ee8cc1Swenshuai.xi }
7321*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7322*53ee8cc1Swenshuai.xi {
7323*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG))
7324*53ee8cc1Swenshuai.xi {
7325*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_REVEIVE_GRANT)
7326*53ee8cc1Swenshuai.xi {
7327*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, ucLength, ucData))
7328*53ee8cc1Swenshuai.xi {
7329*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
7330*53ee8cc1Swenshuai.xi
7331*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
7332*53ee8cc1Swenshuai.xi
7333*53ee8cc1Swenshuai.xi bSendFlag = TRUE;
7334*53ee8cc1Swenshuai.xi }
7335*53ee8cc1Swenshuai.xi }
7336*53ee8cc1Swenshuai.xi }
7337*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
7338*53ee8cc1Swenshuai.xi {
7339*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
7340*53ee8cc1Swenshuai.xi }
7341*53ee8cc1Swenshuai.xi }
7342*53ee8cc1Swenshuai.xi
7343*53ee8cc1Swenshuai.xi return bSendFlag;
7344*53ee8cc1Swenshuai.xi }
7345*53ee8cc1Swenshuai.xi
7346*53ee8cc1Swenshuai.xi //**************************************************************************
7347*53ee8cc1Swenshuai.xi // [Function Name]:
7348*53ee8cc1Swenshuai.xi // mdrv_mhl_GetDeviceCapability
7349*53ee8cc1Swenshuai.xi // [Description]
7350*53ee8cc1Swenshuai.xi //
7351*53ee8cc1Swenshuai.xi // [Arguments]:
7352*53ee8cc1Swenshuai.xi //
7353*53ee8cc1Swenshuai.xi // [Return]:
7354*53ee8cc1Swenshuai.xi //
7355*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceCapability(MS_U16 usDevcapMask,MS_U8 * ucDevcap)7356*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceCapability(MS_U16 usDevcapMask, MS_U8 *ucDevcap)
7357*53ee8cc1Swenshuai.xi {
7358*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
7359*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
7360*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7361*53ee8cc1Swenshuai.xi
7362*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7363*53ee8cc1Swenshuai.xi {
7364*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7365*53ee8cc1Swenshuai.xi }
7366*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7367*53ee8cc1Swenshuai.xi {
7368*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
7369*53ee8cc1Swenshuai.xi {
7370*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usReadDevcapMask = usDevcapMask;
7371*53ee8cc1Swenshuai.xi }
7372*53ee8cc1Swenshuai.xi
7373*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_DEVCAP_DONE_FLAG))
7374*53ee8cc1Swenshuai.xi {
7375*53ee8cc1Swenshuai.xi if(ucDevcap != NULL)
7376*53ee8cc1Swenshuai.xi {
7377*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
7378*53ee8cc1Swenshuai.xi {
7379*53ee8cc1Swenshuai.xi if(usDevcapMask &BIT(uctemp))
7380*53ee8cc1Swenshuai.xi {
7381*53ee8cc1Swenshuai.xi ucDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[uctemp];
7382*53ee8cc1Swenshuai.xi }
7383*53ee8cc1Swenshuai.xi else
7384*53ee8cc1Swenshuai.xi {
7385*53ee8cc1Swenshuai.xi ucDevcap[uctemp] = 0;
7386*53ee8cc1Swenshuai.xi }
7387*53ee8cc1Swenshuai.xi }
7388*53ee8cc1Swenshuai.xi }
7389*53ee8cc1Swenshuai.xi
7390*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
7391*53ee8cc1Swenshuai.xi }
7392*53ee8cc1Swenshuai.xi }
7393*53ee8cc1Swenshuai.xi
7394*53ee8cc1Swenshuai.xi return bDoneFlag;
7395*53ee8cc1Swenshuai.xi }
7396*53ee8cc1Swenshuai.xi
7397*53ee8cc1Swenshuai.xi //**************************************************************************
7398*53ee8cc1Swenshuai.xi // [Function Name]:
7399*53ee8cc1Swenshuai.xi // mdrv_mhl_GetExtendDeviceCapability
7400*53ee8cc1Swenshuai.xi // [Description]
7401*53ee8cc1Swenshuai.xi //
7402*53ee8cc1Swenshuai.xi // [Arguments]:
7403*53ee8cc1Swenshuai.xi //
7404*53ee8cc1Swenshuai.xi // [Return]:
7405*53ee8cc1Swenshuai.xi //
7406*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetExtendDeviceCapability(MS_U16 usExtendDevcapMask,MS_U8 * ucExtendDevcap)7407*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetExtendDeviceCapability(MS_U16 usExtendDevcapMask, MS_U8 *ucExtendDevcap)
7408*53ee8cc1Swenshuai.xi {
7409*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
7410*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
7411*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7412*53ee8cc1Swenshuai.xi
7413*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7414*53ee8cc1Swenshuai.xi {
7415*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7416*53ee8cc1Swenshuai.xi }
7417*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7418*53ee8cc1Swenshuai.xi {
7419*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
7420*53ee8cc1Swenshuai.xi {
7421*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usReadExtendDevcapMask = usExtendDevcapMask;
7422*53ee8cc1Swenshuai.xi }
7423*53ee8cc1Swenshuai.xi
7424*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_XDEVCAP_DONE_FLAG))
7425*53ee8cc1Swenshuai.xi {
7426*53ee8cc1Swenshuai.xi if(ucExtendDevcap != NULL)
7427*53ee8cc1Swenshuai.xi {
7428*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
7429*53ee8cc1Swenshuai.xi {
7430*53ee8cc1Swenshuai.xi if(usExtendDevcapMask &BIT(uctemp))
7431*53ee8cc1Swenshuai.xi {
7432*53ee8cc1Swenshuai.xi ucExtendDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
7433*53ee8cc1Swenshuai.xi }
7434*53ee8cc1Swenshuai.xi else
7435*53ee8cc1Swenshuai.xi {
7436*53ee8cc1Swenshuai.xi ucExtendDevcap[uctemp] = 0;
7437*53ee8cc1Swenshuai.xi }
7438*53ee8cc1Swenshuai.xi }
7439*53ee8cc1Swenshuai.xi }
7440*53ee8cc1Swenshuai.xi
7441*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
7442*53ee8cc1Swenshuai.xi }
7443*53ee8cc1Swenshuai.xi }
7444*53ee8cc1Swenshuai.xi
7445*53ee8cc1Swenshuai.xi return bDoneFlag;
7446*53ee8cc1Swenshuai.xi }
7447*53ee8cc1Swenshuai.xi
7448*53ee8cc1Swenshuai.xi //**************************************************************************
7449*53ee8cc1Swenshuai.xi // [Function Name]:
7450*53ee8cc1Swenshuai.xi // mdrv_mhl_GetDeviceVenderID
7451*53ee8cc1Swenshuai.xi // [Description]
7452*53ee8cc1Swenshuai.xi //
7453*53ee8cc1Swenshuai.xi // [Arguments]:
7454*53ee8cc1Swenshuai.xi //
7455*53ee8cc1Swenshuai.xi // [Return]:
7456*53ee8cc1Swenshuai.xi //
7457*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceVenderID(MS_U8 * ucVenderID)7458*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceVenderID(MS_U8 *ucVenderID)
7459*53ee8cc1Swenshuai.xi {
7460*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
7461*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7462*53ee8cc1Swenshuai.xi
7463*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7464*53ee8cc1Swenshuai.xi {
7465*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7466*53ee8cc1Swenshuai.xi }
7467*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7468*53ee8cc1Swenshuai.xi {
7469*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_GET_VENDER_ID_DONE_FLAG))
7470*53ee8cc1Swenshuai.xi {
7471*53ee8cc1Swenshuai.xi *ucVenderID = pMHLResourcePrivate->ucSourceVenderID;
7472*53ee8cc1Swenshuai.xi
7473*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
7474*53ee8cc1Swenshuai.xi }
7475*53ee8cc1Swenshuai.xi else
7476*53ee8cc1Swenshuai.xi {
7477*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG);
7478*53ee8cc1Swenshuai.xi }
7479*53ee8cc1Swenshuai.xi }
7480*53ee8cc1Swenshuai.xi
7481*53ee8cc1Swenshuai.xi return bDoneFlag;
7482*53ee8cc1Swenshuai.xi }
7483*53ee8cc1Swenshuai.xi
7484*53ee8cc1Swenshuai.xi //**************************************************************************
7485*53ee8cc1Swenshuai.xi // [Function Name]:
7486*53ee8cc1Swenshuai.xi // mdrv_mhl_GetWriteBurstData
7487*53ee8cc1Swenshuai.xi // [Description]
7488*53ee8cc1Swenshuai.xi //
7489*53ee8cc1Swenshuai.xi // [Arguments]:
7490*53ee8cc1Swenshuai.xi //
7491*53ee8cc1Swenshuai.xi // [Return]:
7492*53ee8cc1Swenshuai.xi //
7493*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetWriteBurstData(MS_U8 * ucData)7494*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetWriteBurstData(MS_U8 *ucData)
7495*53ee8cc1Swenshuai.xi {
7496*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
7497*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
7498*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7499*53ee8cc1Swenshuai.xi
7500*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7501*53ee8cc1Swenshuai.xi {
7502*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7503*53ee8cc1Swenshuai.xi }
7504*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7505*53ee8cc1Swenshuai.xi {
7506*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstAddress > 0)
7507*53ee8cc1Swenshuai.xi {
7508*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstAddress = 0;
7509*53ee8cc1Swenshuai.xi
7510*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < pMHLResourcePrivate->ucWriteBurstLength; uctemp++)
7511*53ee8cc1Swenshuai.xi {
7512*53ee8cc1Swenshuai.xi ucData[uctemp] = pMHLResourcePrivate->ucWriteBurstInformation[uctemp];
7513*53ee8cc1Swenshuai.xi }
7514*53ee8cc1Swenshuai.xi
7515*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
7516*53ee8cc1Swenshuai.xi }
7517*53ee8cc1Swenshuai.xi }
7518*53ee8cc1Swenshuai.xi
7519*53ee8cc1Swenshuai.xi return bDoneFlag;
7520*53ee8cc1Swenshuai.xi }
7521*53ee8cc1Swenshuai.xi
7522*53ee8cc1Swenshuai.xi //**************************************************************************
7523*53ee8cc1Swenshuai.xi // [Function Name]:
7524*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterCallBackFunctions()
7525*53ee8cc1Swenshuai.xi // [Description]
7526*53ee8cc1Swenshuai.xi // RCP &RAP call back
7527*53ee8cc1Swenshuai.xi // [Arguments]:
7528*53ee8cc1Swenshuai.xi //
7529*53ee8cc1Swenshuai.xi // [Return]:
7530*53ee8cc1Swenshuai.xi //
7531*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterCallBackFunctions(MS_BOOL bRCPfunctionFlag,MS_BOOL bRAPfunctionFlag)7532*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterCallBackFunctions(MS_BOOL bRCPfunctionFlag, MS_BOOL bRAPfunctionFlag)
7533*53ee8cc1Swenshuai.xi {
7534*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7535*53ee8cc1Swenshuai.xi
7536*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7537*53ee8cc1Swenshuai.xi {
7538*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7539*53ee8cc1Swenshuai.xi }
7540*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7541*53ee8cc1Swenshuai.xi {
7542*53ee8cc1Swenshuai.xi if(bRCPfunctionFlag)
7543*53ee8cc1Swenshuai.xi {
7544*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
7545*53ee8cc1Swenshuai.xi }
7546*53ee8cc1Swenshuai.xi
7547*53ee8cc1Swenshuai.xi if(bRAPfunctionFlag)
7548*53ee8cc1Swenshuai.xi {
7549*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
7550*53ee8cc1Swenshuai.xi }
7551*53ee8cc1Swenshuai.xi }
7552*53ee8cc1Swenshuai.xi }
7553*53ee8cc1Swenshuai.xi
7554*53ee8cc1Swenshuai.xi //**************************************************************************
7555*53ee8cc1Swenshuai.xi // [Function Name]:
7556*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterRcpCallBackFunction()
7557*53ee8cc1Swenshuai.xi // [Description]
7558*53ee8cc1Swenshuai.xi // RCP call back
7559*53ee8cc1Swenshuai.xi // [Arguments]:
7560*53ee8cc1Swenshuai.xi //
7561*53ee8cc1Swenshuai.xi // [Return]:
7562*53ee8cc1Swenshuai.xi //
7563*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRcpCallBackFunction(MS_BOOL bRCPfunctionFlag)7564*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRcpCallBackFunction(MS_BOOL bRCPfunctionFlag)
7565*53ee8cc1Swenshuai.xi {
7566*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7567*53ee8cc1Swenshuai.xi
7568*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7569*53ee8cc1Swenshuai.xi {
7570*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7571*53ee8cc1Swenshuai.xi }
7572*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7573*53ee8cc1Swenshuai.xi {
7574*53ee8cc1Swenshuai.xi if(bRCPfunctionFlag)
7575*53ee8cc1Swenshuai.xi {
7576*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
7577*53ee8cc1Swenshuai.xi }
7578*53ee8cc1Swenshuai.xi }
7579*53ee8cc1Swenshuai.xi }
7580*53ee8cc1Swenshuai.xi
7581*53ee8cc1Swenshuai.xi //**************************************************************************
7582*53ee8cc1Swenshuai.xi // [Function Name]:
7583*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterRapCallBackFunction()
7584*53ee8cc1Swenshuai.xi // [Description]
7585*53ee8cc1Swenshuai.xi // RAP call back
7586*53ee8cc1Swenshuai.xi // [Arguments]:
7587*53ee8cc1Swenshuai.xi //
7588*53ee8cc1Swenshuai.xi // [Return]:
7589*53ee8cc1Swenshuai.xi //
7590*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRapCallBackFunction(MS_BOOL bRAPfunctionFlag)7591*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRapCallBackFunction(MS_BOOL bRAPfunctionFlag)
7592*53ee8cc1Swenshuai.xi {
7593*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7594*53ee8cc1Swenshuai.xi
7595*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7596*53ee8cc1Swenshuai.xi {
7597*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7598*53ee8cc1Swenshuai.xi }
7599*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7600*53ee8cc1Swenshuai.xi {
7601*53ee8cc1Swenshuai.xi if(bRAPfunctionFlag)
7602*53ee8cc1Swenshuai.xi {
7603*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
7604*53ee8cc1Swenshuai.xi }
7605*53ee8cc1Swenshuai.xi }
7606*53ee8cc1Swenshuai.xi }
7607*53ee8cc1Swenshuai.xi
7608*53ee8cc1Swenshuai.xi //**************************************************************************
7609*53ee8cc1Swenshuai.xi // [Function Name]:
7610*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterUcpCallBackFunction()
7611*53ee8cc1Swenshuai.xi // [Description]
7612*53ee8cc1Swenshuai.xi // UCP call back
7613*53ee8cc1Swenshuai.xi // [Arguments]:
7614*53ee8cc1Swenshuai.xi //
7615*53ee8cc1Swenshuai.xi // [Return]:
7616*53ee8cc1Swenshuai.xi //
7617*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterUcpCallBackFunction(MS_BOOL bUCPfunctionFlag)7618*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterUcpCallBackFunction(MS_BOOL bUCPfunctionFlag)
7619*53ee8cc1Swenshuai.xi {
7620*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7621*53ee8cc1Swenshuai.xi
7622*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7623*53ee8cc1Swenshuai.xi {
7624*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7625*53ee8cc1Swenshuai.xi }
7626*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7627*53ee8cc1Swenshuai.xi {
7628*53ee8cc1Swenshuai.xi if(bUCPfunctionFlag)
7629*53ee8cc1Swenshuai.xi {
7630*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_UCP_FUNCTION_FLAG);
7631*53ee8cc1Swenshuai.xi }
7632*53ee8cc1Swenshuai.xi }
7633*53ee8cc1Swenshuai.xi }
7634*53ee8cc1Swenshuai.xi
7635*53ee8cc1Swenshuai.xi //**************************************************************************
7636*53ee8cc1Swenshuai.xi // [Function Name]:
7637*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterAttCallBackFunction()
7638*53ee8cc1Swenshuai.xi // [Description]
7639*53ee8cc1Swenshuai.xi // ATT call back
7640*53ee8cc1Swenshuai.xi // [Arguments]:
7641*53ee8cc1Swenshuai.xi //
7642*53ee8cc1Swenshuai.xi // [Return]:
7643*53ee8cc1Swenshuai.xi //
7644*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterAttCallBackFunction(MS_BOOL bATTfunctionFlag)7645*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterAttCallBackFunction(MS_BOOL bATTfunctionFlag)
7646*53ee8cc1Swenshuai.xi {
7647*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7648*53ee8cc1Swenshuai.xi
7649*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7650*53ee8cc1Swenshuai.xi {
7651*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7652*53ee8cc1Swenshuai.xi }
7653*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7654*53ee8cc1Swenshuai.xi {
7655*53ee8cc1Swenshuai.xi if(bATTfunctionFlag)
7656*53ee8cc1Swenshuai.xi {
7657*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_ATT_FUNCTION_FLAG);
7658*53ee8cc1Swenshuai.xi }
7659*53ee8cc1Swenshuai.xi }
7660*53ee8cc1Swenshuai.xi }
7661*53ee8cc1Swenshuai.xi
7662*53ee8cc1Swenshuai.xi //**************************************************************************
7663*53ee8cc1Swenshuai.xi // [Function Name]:
7664*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterRbpCallBackFunction()
7665*53ee8cc1Swenshuai.xi // [Description]
7666*53ee8cc1Swenshuai.xi // RBP call back
7667*53ee8cc1Swenshuai.xi // [Arguments]:
7668*53ee8cc1Swenshuai.xi //
7669*53ee8cc1Swenshuai.xi // [Return]:
7670*53ee8cc1Swenshuai.xi //
7671*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRbpCallBackFunction(MS_BOOL bRBPfunctionFlag)7672*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRbpCallBackFunction(MS_BOOL bRBPfunctionFlag)
7673*53ee8cc1Swenshuai.xi {
7674*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7675*53ee8cc1Swenshuai.xi
7676*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7677*53ee8cc1Swenshuai.xi {
7678*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7679*53ee8cc1Swenshuai.xi }
7680*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7681*53ee8cc1Swenshuai.xi {
7682*53ee8cc1Swenshuai.xi if(bRBPfunctionFlag)
7683*53ee8cc1Swenshuai.xi {
7684*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RBP_FUNCTION_FLAG);
7685*53ee8cc1Swenshuai.xi }
7686*53ee8cc1Swenshuai.xi }
7687*53ee8cc1Swenshuai.xi }
7688*53ee8cc1Swenshuai.xi
7689*53ee8cc1Swenshuai.xi //**************************************************************************
7690*53ee8cc1Swenshuai.xi // [Function Name]:
7691*53ee8cc1Swenshuai.xi // mdrv_mhl_GetConfiguration()
7692*53ee8cc1Swenshuai.xi // [Description]
7693*53ee8cc1Swenshuai.xi // MHL get init config
7694*53ee8cc1Swenshuai.xi // [Arguments]:
7695*53ee8cc1Swenshuai.xi //
7696*53ee8cc1Swenshuai.xi // [Return]:
7697*53ee8cc1Swenshuai.xi //
7698*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetConfiguration(void)7699*53ee8cc1Swenshuai.xi stMHL_INITIAL_CONFIG_INFO mdrv_mhl_GetConfiguration(void)
7700*53ee8cc1Swenshuai.xi {
7701*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
7702*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7703*53ee8cc1Swenshuai.xi stMHL_INITIAL_CONFIG_INFO stInitialConfigInfo;
7704*53ee8cc1Swenshuai.xi
7705*53ee8cc1Swenshuai.xi if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7706*53ee8cc1Swenshuai.xi {
7707*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7708*53ee8cc1Swenshuai.xi }
7709*53ee8cc1Swenshuai.xi else
7710*53ee8cc1Swenshuai.xi {
7711*53ee8cc1Swenshuai.xi if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
7712*53ee8cc1Swenshuai.xi {
7713*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
7714*53ee8cc1Swenshuai.xi }
7715*53ee8cc1Swenshuai.xi
7716*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
7717*53ee8cc1Swenshuai.xi {
7718*53ee8cc1Swenshuai.xi stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_SUCCESS;
7719*53ee8cc1Swenshuai.xi stInitialConfigInfo.ucMHLSupportPath = pMHLResourcePrivate->ucMHLSupportPath;
7720*53ee8cc1Swenshuai.xi
7721*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < (MHL_DEVICE_CAPABILITY_SIZE +MHL_XDEVICE_CAPABILITY_SIZE); uctemp++)
7722*53ee8cc1Swenshuai.xi {
7723*53ee8cc1Swenshuai.xi stInitialConfigInfo.ucDeviceCapabilityTable[uctemp] = pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp];
7724*53ee8cc1Swenshuai.xi }
7725*53ee8cc1Swenshuai.xi }
7726*53ee8cc1Swenshuai.xi }
7727*53ee8cc1Swenshuai.xi
7728*53ee8cc1Swenshuai.xi return stInitialConfigInfo;
7729*53ee8cc1Swenshuai.xi }
7730*53ee8cc1Swenshuai.xi
7731*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
7732*53ee8cc1Swenshuai.xi //**************************************************************************
7733*53ee8cc1Swenshuai.xi // [Function Name]:
7734*53ee8cc1Swenshuai.xi // mdrv_mhl_STREventProc()
7735*53ee8cc1Swenshuai.xi // [Description]
7736*53ee8cc1Swenshuai.xi //
7737*53ee8cc1Swenshuai.xi // [Arguments]:
7738*53ee8cc1Swenshuai.xi //
7739*53ee8cc1Swenshuai.xi // [Return]:
7740*53ee8cc1Swenshuai.xi //
7741*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_STREventProc(void * pModule,EN_POWER_MODE usPowerState)7742*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_STREventProc(void* pModule, EN_POWER_MODE usPowerState)
7743*53ee8cc1Swenshuai.xi {
7744*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
7745*53ee8cc1Swenshuai.xi MS_U32 ulReturnValue = UTOPIA_STATUS_FAIL;
7746*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7747*53ee8cc1Swenshuai.xi
7748*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
7749*53ee8cc1Swenshuai.xi {
7750*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
7751*53ee8cc1Swenshuai.xi }
7752*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
7753*53ee8cc1Swenshuai.xi {
7754*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7755*53ee8cc1Swenshuai.xi }
7756*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7757*53ee8cc1Swenshuai.xi {
7758*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->usPrePowerState != usPowerState)
7759*53ee8cc1Swenshuai.xi {
7760*53ee8cc1Swenshuai.xi if(usPowerState == E_POWER_SUSPEND)
7761*53ee8cc1Swenshuai.xi {
7762*53ee8cc1Swenshuai.xi if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
7763*53ee8cc1Swenshuai.xi {
7764*53ee8cc1Swenshuai.xi _mdrv_mhl_ForceSendClearHPD(pMHLResourcePrivate);
7765*53ee8cc1Swenshuai.xi }
7766*53ee8cc1Swenshuai.xi
7767*53ee8cc1Swenshuai.xi ulReturnValue = UTOPIA_STATUS_SUCCESS;
7768*53ee8cc1Swenshuai.xi }
7769*53ee8cc1Swenshuai.xi else if(usPowerState == E_POWER_RESUME)
7770*53ee8cc1Swenshuai.xi {
7771*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
7772*53ee8cc1Swenshuai.xi UtopiaStrWaitCondition("mhl", usPowerState, 0);
7773*53ee8cc1Swenshuai.xi #endif
7774*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, NULL, NULL, pMHLResourcePrivate->ucDeviceVenderID);
7775*53ee8cc1Swenshuai.xi
7776*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG);
7777*53ee8cc1Swenshuai.xi
7778*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
7779*53ee8cc1Swenshuai.xi {
7780*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
7781*53ee8cc1Swenshuai.xi {
7782*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
7783*53ee8cc1Swenshuai.xi
7784*53ee8cc1Swenshuai.xi mhal_mhl_CbusConnectProc(pMHLResourcePrivate->ucMHLSupportPath);
7785*53ee8cc1Swenshuai.xi
7786*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
7787*53ee8cc1Swenshuai.xi {
7788*53ee8cc1Swenshuai.xi mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
7789*53ee8cc1Swenshuai.xi }
7790*53ee8cc1Swenshuai.xi }
7791*53ee8cc1Swenshuai.xi else
7792*53ee8cc1Swenshuai.xi {
7793*53ee8cc1Swenshuai.xi mhal_mhl_CablePlugProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
7794*53ee8cc1Swenshuai.xi }
7795*53ee8cc1Swenshuai.xi }
7796*53ee8cc1Swenshuai.xi
7797*53ee8cc1Swenshuai.xi ulReturnValue = UTOPIA_STATUS_SUCCESS;
7798*53ee8cc1Swenshuai.xi }
7799*53ee8cc1Swenshuai.xi
7800*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usPrePowerState = usPowerState;
7801*53ee8cc1Swenshuai.xi }
7802*53ee8cc1Swenshuai.xi }
7803*53ee8cc1Swenshuai.xi
7804*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
7805*53ee8cc1Swenshuai.xi
7806*53ee8cc1Swenshuai.xi return ulReturnValue;
7807*53ee8cc1Swenshuai.xi }
7808*53ee8cc1Swenshuai.xi
7809*53ee8cc1Swenshuai.xi //**************************************************************************
7810*53ee8cc1Swenshuai.xi // [Function Name]:
7811*53ee8cc1Swenshuai.xi // mdrv_mhl_MHLSupportPath()
7812*53ee8cc1Swenshuai.xi // [Description]
7813*53ee8cc1Swenshuai.xi // MHL support path
7814*53ee8cc1Swenshuai.xi // [Arguments]:
7815*53ee8cc1Swenshuai.xi //
7816*53ee8cc1Swenshuai.xi // [Return]:
7817*53ee8cc1Swenshuai.xi //
7818*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MHLSupportPath(void * pInstance,MS_U8 ucSelect)7819*53ee8cc1Swenshuai.xi void mdrv_mhl_MHLSupportPath(void* pInstance, MS_U8 ucSelect)
7820*53ee8cc1Swenshuai.xi {
7821*53ee8cc1Swenshuai.xi void* pModule = NULL;
7822*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
7823*53ee8cc1Swenshuai.xi MS_BOOL bMHLEfuseFlag = TRUE;
7824*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
7825*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7826*53ee8cc1Swenshuai.xi
7827*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
7828*53ee8cc1Swenshuai.xi
7829*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
7830*53ee8cc1Swenshuai.xi {
7831*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
7832*53ee8cc1Swenshuai.xi }
7833*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
7834*53ee8cc1Swenshuai.xi {
7835*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7836*53ee8cc1Swenshuai.xi }
7837*53ee8cc1Swenshuai.xi else
7838*53ee8cc1Swenshuai.xi {
7839*53ee8cc1Swenshuai.xi // Clear flag
7840*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
7841*53ee8cc1Swenshuai.xi {
7842*53ee8cc1Swenshuai.xi _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
7843*53ee8cc1Swenshuai.xi
7844*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucInitialIndex = 0xA5;
7845*53ee8cc1Swenshuai.xi
7846*53ee8cc1Swenshuai.xi if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
7847*53ee8cc1Swenshuai.xi {
7848*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
7849*53ee8cc1Swenshuai.xi
7850*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
7851*53ee8cc1Swenshuai.xi }
7852*53ee8cc1Swenshuai.xi }
7853*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7854*53ee8cc1Swenshuai.xi {
7855*53ee8cc1Swenshuai.xi mhal_mhl_SetRegisterBaseAddress(pMHLResourcePrivate->ulRiuBaseAddress, pMHLResourcePrivate->ulPMRiuBaseAddress);
7856*53ee8cc1Swenshuai.xi }
7857*53ee8cc1Swenshuai.xi
7858*53ee8cc1Swenshuai.xi mhal_mhl_MHLSupportPath(ucSelect);
7859*53ee8cc1Swenshuai.xi
7860*53ee8cc1Swenshuai.xi bMHLEfuseFlag = MDrv_SYS_Query(E_SYS_QUERY_MHL_SUPPORTED);
7861*53ee8cc1Swenshuai.xi
7862*53ee8cc1Swenshuai.xi if(mhal_mhl_CheckEfuseControlFlag(bMHLEfuseFlag))
7863*53ee8cc1Swenshuai.xi {
7864*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL function not support in this chip ###\r\n");
7865*53ee8cc1Swenshuai.xi }
7866*53ee8cc1Swenshuai.xi else
7867*53ee8cc1Swenshuai.xi {
7868*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK ;uctemp++)
7869*53ee8cc1Swenshuai.xi {
7870*53ee8cc1Swenshuai.xi if(ucSelect &BIT(uctemp))
7871*53ee8cc1Swenshuai.xi {
7872*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucMHLSupportPath = uctemp;
7873*53ee8cc1Swenshuai.xi
7874*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL function support in port %c\r\n", MHL_INPUT_PORT(uctemp));
7875*53ee8cc1Swenshuai.xi }
7876*53ee8cc1Swenshuai.xi }
7877*53ee8cc1Swenshuai.xi }
7878*53ee8cc1Swenshuai.xi }
7879*53ee8cc1Swenshuai.xi
7880*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
7881*53ee8cc1Swenshuai.xi }
7882*53ee8cc1Swenshuai.xi
7883*53ee8cc1Swenshuai.xi //**************************************************************************
7884*53ee8cc1Swenshuai.xi // [Function Name]:
7885*53ee8cc1Swenshuai.xi // mdrv_mhl_Initial()
7886*53ee8cc1Swenshuai.xi // [Description]
7887*53ee8cc1Swenshuai.xi // MHL init
7888*53ee8cc1Swenshuai.xi // [Arguments]:
7889*53ee8cc1Swenshuai.xi // *edid: MHL EDID data
7890*53ee8cc1Swenshuai.xi // *devcap: MHL device capability
7891*53ee8cc1Swenshuai.xi // [Return]:
7892*53ee8cc1Swenshuai.xi //
7893*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Initial(void * pInstance,MS_U8 * edid,MS_U8 * DevCap)7894*53ee8cc1Swenshuai.xi void mdrv_mhl_Initial(void* pInstance, MS_U8 *edid, MS_U8 *DevCap)
7895*53ee8cc1Swenshuai.xi {
7896*53ee8cc1Swenshuai.xi void* pModule = NULL;
7897*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
7898*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
7899*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7900*53ee8cc1Swenshuai.xi
7901*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
7902*53ee8cc1Swenshuai.xi
7903*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
7904*53ee8cc1Swenshuai.xi {
7905*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
7906*53ee8cc1Swenshuai.xi }
7907*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
7908*53ee8cc1Swenshuai.xi {
7909*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7910*53ee8cc1Swenshuai.xi }
7911*53ee8cc1Swenshuai.xi else
7912*53ee8cc1Swenshuai.xi {
7913*53ee8cc1Swenshuai.xi // Clear flag
7914*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
7915*53ee8cc1Swenshuai.xi {
7916*53ee8cc1Swenshuai.xi _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
7917*53ee8cc1Swenshuai.xi
7918*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucInitialIndex = 0xA5;
7919*53ee8cc1Swenshuai.xi }
7920*53ee8cc1Swenshuai.xi
7921*53ee8cc1Swenshuai.xi if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
7922*53ee8cc1Swenshuai.xi {
7923*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
7924*53ee8cc1Swenshuai.xi
7925*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
7926*53ee8cc1Swenshuai.xi }
7927*53ee8cc1Swenshuai.xi
7928*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7929*53ee8cc1Swenshuai.xi {
7930*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
7931*53ee8cc1Swenshuai.xi {
7932*53ee8cc1Swenshuai.xi // Chip initial
7933*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, edid, DevCap, pMHLResourcePrivate->ucDeviceVenderID);
7934*53ee8cc1Swenshuai.xi
7935*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG);
7936*53ee8cc1Swenshuai.xi }
7937*53ee8cc1Swenshuai.xi else
7938*53ee8cc1Swenshuai.xi {
7939*53ee8cc1Swenshuai.xi // Load EDID
7940*53ee8cc1Swenshuai.xi mhal_mhl_LoadEDID(edid);
7941*53ee8cc1Swenshuai.xi
7942*53ee8cc1Swenshuai.xi // Load vendor ID
7943*53ee8cc1Swenshuai.xi mhal_mhl_SetVenderID(pMHLResourcePrivate->ucDeviceVenderID);
7944*53ee8cc1Swenshuai.xi
7945*53ee8cc1Swenshuai.xi // Load DevCap
7946*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(DevCap);
7947*53ee8cc1Swenshuai.xi }
7948*53ee8cc1Swenshuai.xi
7949*53ee8cc1Swenshuai.xi // Parsing EDID
7950*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
7951*53ee8cc1Swenshuai.xi
7952*53ee8cc1Swenshuai.xi // Check and insert device capability
7953*53ee8cc1Swenshuai.xi if(DevCap != NULL)
7954*53ee8cc1Swenshuai.xi {
7955*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
7956*53ee8cc1Swenshuai.xi {
7957*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = DevCap[uctemp];
7958*53ee8cc1Swenshuai.xi }
7959*53ee8cc1Swenshuai.xi
7960*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
7961*53ee8cc1Swenshuai.xi {
7962*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
7963*53ee8cc1Swenshuai.xi
7964*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
7965*53ee8cc1Swenshuai.xi {
7966*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = DevCap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
7967*53ee8cc1Swenshuai.xi }
7968*53ee8cc1Swenshuai.xi }
7969*53ee8cc1Swenshuai.xi else if(DevCap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
7970*53ee8cc1Swenshuai.xi {
7971*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
7972*53ee8cc1Swenshuai.xi
7973*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
7974*53ee8cc1Swenshuai.xi
7975*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
7976*53ee8cc1Swenshuai.xi }
7977*53ee8cc1Swenshuai.xi }
7978*53ee8cc1Swenshuai.xi
7979*53ee8cc1Swenshuai.xi // Attach Cbus ISR
7980*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG))
7981*53ee8cc1Swenshuai.xi {
7982*53ee8cc1Swenshuai.xi if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
7983*53ee8cc1Swenshuai.xi {
7984*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_PM, _mdrv_mhl_IsrHandler);
7985*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_PM);
7986*53ee8cc1Swenshuai.xi }
7987*53ee8cc1Swenshuai.xi else
7988*53ee8cc1Swenshuai.xi {
7989*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_MHL_CBUS_PM, _mdrv_mhl_IsrHandler);
7990*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
7991*53ee8cc1Swenshuai.xi }
7992*53ee8cc1Swenshuai.xi
7993*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG);
7994*53ee8cc1Swenshuai.xi }
7995*53ee8cc1Swenshuai.xi
7996*53ee8cc1Swenshuai.xi // Attach eCbus ISR
7997*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
7998*53ee8cc1Swenshuai.xi {
7999*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
8000*53ee8cc1Swenshuai.xi {
8001*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
8002*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
8003*53ee8cc1Swenshuai.xi
8004*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
8005*53ee8cc1Swenshuai.xi }
8006*53ee8cc1Swenshuai.xi }
8007*53ee8cc1Swenshuai.xi
8008*53ee8cc1Swenshuai.xi if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_SELF_CREATE_TASK_FLAG))
8009*53ee8cc1Swenshuai.xi {
8010*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SELF_CREATE_TASK_FLAG))
8011*53ee8cc1Swenshuai.xi {
8012*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CreateTask(pMHLResourcePrivate))
8013*53ee8cc1Swenshuai.xi {
8014*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL create polling task by self \r\n");
8015*53ee8cc1Swenshuai.xi
8016*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SELF_CREATE_TASK_FLAG);
8017*53ee8cc1Swenshuai.xi }
8018*53ee8cc1Swenshuai.xi }
8019*53ee8cc1Swenshuai.xi }
8020*53ee8cc1Swenshuai.xi }
8021*53ee8cc1Swenshuai.xi }
8022*53ee8cc1Swenshuai.xi
8023*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8024*53ee8cc1Swenshuai.xi }
8025*53ee8cc1Swenshuai.xi
8026*53ee8cc1Swenshuai.xi //**************************************************************************
8027*53ee8cc1Swenshuai.xi // [Function Name]:
8028*53ee8cc1Swenshuai.xi // mdrv_mhl_Handler()
8029*53ee8cc1Swenshuai.xi // [Description]
8030*53ee8cc1Swenshuai.xi // MHL handler
8031*53ee8cc1Swenshuai.xi // [Arguments]:
8032*53ee8cc1Swenshuai.xi //
8033*53ee8cc1Swenshuai.xi // [Return]:
8034*53ee8cc1Swenshuai.xi //
8035*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Handler(void * pInstance)8036*53ee8cc1Swenshuai.xi MS_U16 mdrv_mhl_Handler(void* pInstance)
8037*53ee8cc1Swenshuai.xi {
8038*53ee8cc1Swenshuai.xi void* pModule = NULL;
8039*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8040*53ee8cc1Swenshuai.xi MS_U16 usMSGKeyInfo = 0;
8041*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8042*53ee8cc1Swenshuai.xi
8043*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8044*53ee8cc1Swenshuai.xi
8045*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8046*53ee8cc1Swenshuai.xi {
8047*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8048*53ee8cc1Swenshuai.xi }
8049*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8050*53ee8cc1Swenshuai.xi {
8051*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8052*53ee8cc1Swenshuai.xi }
8053*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8054*53ee8cc1Swenshuai.xi {
8055*53ee8cc1Swenshuai.xi if(!GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_SELF_CREATE_TASK_FLAG))
8056*53ee8cc1Swenshuai.xi {
8057*53ee8cc1Swenshuai.xi _mdrv_mhl_PollingEventProc(pMHLResourcePrivate);
8058*53ee8cc1Swenshuai.xi }
8059*53ee8cc1Swenshuai.xi
8060*53ee8cc1Swenshuai.xi if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG))
8061*53ee8cc1Swenshuai.xi {
8062*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
8063*53ee8cc1Swenshuai.xi
8064*53ee8cc1Swenshuai.xi usMSGKeyInfo = pMHLResourcePrivate->usMSGKeyInfo;
8065*53ee8cc1Swenshuai.xi }
8066*53ee8cc1Swenshuai.xi }
8067*53ee8cc1Swenshuai.xi
8068*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8069*53ee8cc1Swenshuai.xi
8070*53ee8cc1Swenshuai.xi return usMSGKeyInfo;
8071*53ee8cc1Swenshuai.xi }
8072*53ee8cc1Swenshuai.xi
8073*53ee8cc1Swenshuai.xi //**************************************************************************
8074*53ee8cc1Swenshuai.xi // [Function Name]:
8075*53ee8cc1Swenshuai.xi // mdrv_mhl_AutoSwitchHandler()
8076*53ee8cc1Swenshuai.xi // [Description]
8077*53ee8cc1Swenshuai.xi //
8078*53ee8cc1Swenshuai.xi // [Arguments]:
8079*53ee8cc1Swenshuai.xi //
8080*53ee8cc1Swenshuai.xi // [Return]:
8081*53ee8cc1Swenshuai.xi //
8082*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AutoSwitchHandler(void * pInstance,MS_BOOL bReset,MS_U8 * ucCbusPath)8083*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_AutoSwitchHandler(void* pInstance, MS_BOOL bReset, MS_U8 *ucCbusPath)
8084*53ee8cc1Swenshuai.xi {
8085*53ee8cc1Swenshuai.xi void* pModule = NULL;
8086*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8087*53ee8cc1Swenshuai.xi MS_BOOL bAutoSwitchFlag = FALSE;
8088*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8089*53ee8cc1Swenshuai.xi
8090*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8091*53ee8cc1Swenshuai.xi
8092*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8093*53ee8cc1Swenshuai.xi {
8094*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8095*53ee8cc1Swenshuai.xi }
8096*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8097*53ee8cc1Swenshuai.xi {
8098*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8099*53ee8cc1Swenshuai.xi }
8100*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8101*53ee8cc1Swenshuai.xi {
8102*53ee8cc1Swenshuai.xi if(bReset)
8103*53ee8cc1Swenshuai.xi {
8104*53ee8cc1Swenshuai.xi CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
8105*53ee8cc1Swenshuai.xi CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
8106*53ee8cc1Swenshuai.xi }
8107*53ee8cc1Swenshuai.xi else
8108*53ee8cc1Swenshuai.xi {
8109*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG))
8110*53ee8cc1Swenshuai.xi {
8111*53ee8cc1Swenshuai.xi CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
8112*53ee8cc1Swenshuai.xi
8113*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_AUTO_SWITCH_STOP, MHL_AUTO_SWITCH_STOP_TIME);
8114*53ee8cc1Swenshuai.xi
8115*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG);
8116*53ee8cc1Swenshuai.xi
8117*53ee8cc1Swenshuai.xi bAutoSwitchFlag = TRUE;
8118*53ee8cc1Swenshuai.xi }
8119*53ee8cc1Swenshuai.xi else if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG))
8120*53ee8cc1Swenshuai.xi {
8121*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG))
8122*53ee8cc1Swenshuai.xi {
8123*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
8124*53ee8cc1Swenshuai.xi {
8125*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
8126*53ee8cc1Swenshuai.xi }
8127*53ee8cc1Swenshuai.xi }
8128*53ee8cc1Swenshuai.xi }
8129*53ee8cc1Swenshuai.xi }
8130*53ee8cc1Swenshuai.xi }
8131*53ee8cc1Swenshuai.xi
8132*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8133*53ee8cc1Swenshuai.xi
8134*53ee8cc1Swenshuai.xi return bAutoSwitchFlag;
8135*53ee8cc1Swenshuai.xi }
8136*53ee8cc1Swenshuai.xi
8137*53ee8cc1Swenshuai.xi //**************************************************************************
8138*53ee8cc1Swenshuai.xi // [Function Name]:
8139*53ee8cc1Swenshuai.xi // mdrv_mhl_SetPowerState()
8140*53ee8cc1Swenshuai.xi // [Description]
8141*53ee8cc1Swenshuai.xi //
8142*53ee8cc1Swenshuai.xi // [Arguments]:
8143*53ee8cc1Swenshuai.xi //
8144*53ee8cc1Swenshuai.xi // [Return]:
8145*53ee8cc1Swenshuai.xi //
8146*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetPowerState(void * pInstance,EN_POWER_MODE usPowerState)8147*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_SetPowerState(void* pInstance, EN_POWER_MODE usPowerState)
8148*53ee8cc1Swenshuai.xi {
8149*53ee8cc1Swenshuai.xi void* pModule = NULL;
8150*53ee8cc1Swenshuai.xi
8151*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8152*53ee8cc1Swenshuai.xi
8153*53ee8cc1Swenshuai.xi return mdrv_mhl_STREventProc(pModule, usPowerState);
8154*53ee8cc1Swenshuai.xi }
8155*53ee8cc1Swenshuai.xi
8156*53ee8cc1Swenshuai.xi //**************************************************************************
8157*53ee8cc1Swenshuai.xi // [Function Name]:
8158*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusControl()
8159*53ee8cc1Swenshuai.xi // [Description]
8160*53ee8cc1Swenshuai.xi //
8161*53ee8cc1Swenshuai.xi // [Arguments]:
8162*53ee8cc1Swenshuai.xi //
8163*53ee8cc1Swenshuai.xi // [Return]:
8164*53ee8cc1Swenshuai.xi //
8165*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusControl(void * pInstance,MS_U8 ucState)8166*53ee8cc1Swenshuai.xi void mdrv_mhl_CbusControl(void* pInstance, MS_U8 ucState)
8167*53ee8cc1Swenshuai.xi {
8168*53ee8cc1Swenshuai.xi void* pModule = NULL;
8169*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8170*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8171*53ee8cc1Swenshuai.xi
8172*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8173*53ee8cc1Swenshuai.xi
8174*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8175*53ee8cc1Swenshuai.xi {
8176*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8177*53ee8cc1Swenshuai.xi }
8178*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8179*53ee8cc1Swenshuai.xi {
8180*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8181*53ee8cc1Swenshuai.xi }
8182*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8183*53ee8cc1Swenshuai.xi {
8184*53ee8cc1Swenshuai.xi switch(ucState)
8185*53ee8cc1Swenshuai.xi {
8186*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_READY_DEVCAP:
8187*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
8188*53ee8cc1Swenshuai.xi break;
8189*53ee8cc1Swenshuai.xi
8190*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_RECEIVE_3D_REQ:
8191*53ee8cc1Swenshuai.xi SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
8192*53ee8cc1Swenshuai.xi break;
8193*53ee8cc1Swenshuai.xi
8194*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_SEND_COMMAND_ENABLE:
8195*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
8196*53ee8cc1Swenshuai.xi break;
8197*53ee8cc1Swenshuai.xi
8198*53ee8cc1Swenshuai.xi case MHL_CBUS_FORCE_SEND_COMMAND_DISABLE:
8199*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
8200*53ee8cc1Swenshuai.xi break;
8201*53ee8cc1Swenshuai.xi
8202*53ee8cc1Swenshuai.xi case MHL_CBUS_CHECK_CONTEND_ON_ENABLE:
8203*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
8204*53ee8cc1Swenshuai.xi break;
8205*53ee8cc1Swenshuai.xi
8206*53ee8cc1Swenshuai.xi case MHL_CBUS_CHECK_CONTEND_ON_DISABLE:
8207*53ee8cc1Swenshuai.xi CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
8208*53ee8cc1Swenshuai.xi break;
8209*53ee8cc1Swenshuai.xi
8210*53ee8cc1Swenshuai.xi case MHL_CBUS_ISOLATION_ON:
8211*53ee8cc1Swenshuai.xi mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, TRUE);
8212*53ee8cc1Swenshuai.xi break;
8213*53ee8cc1Swenshuai.xi
8214*53ee8cc1Swenshuai.xi case MHL_CBUS_ISOLATION_OFF:
8215*53ee8cc1Swenshuai.xi mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
8216*53ee8cc1Swenshuai.xi break;
8217*53ee8cc1Swenshuai.xi
8218*53ee8cc1Swenshuai.xi case MHL_CBUS_FLOATING_ON:
8219*53ee8cc1Swenshuai.xi mhal_mhl_CbusFloating(TRUE);
8220*53ee8cc1Swenshuai.xi break;
8221*53ee8cc1Swenshuai.xi
8222*53ee8cc1Swenshuai.xi case MHL_CBUS_FLOATING_OFF:
8223*53ee8cc1Swenshuai.xi mhal_mhl_CbusFloating(FALSE);
8224*53ee8cc1Swenshuai.xi break;
8225*53ee8cc1Swenshuai.xi
8226*53ee8cc1Swenshuai.xi case MHL_VBUS_HW_DETCET:
8227*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_HW_DETECT);
8228*53ee8cc1Swenshuai.xi break;
8229*53ee8cc1Swenshuai.xi
8230*53ee8cc1Swenshuai.xi case MHL_VBUS_CHARGE_ON:
8231*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_CHARGE);
8232*53ee8cc1Swenshuai.xi break;
8233*53ee8cc1Swenshuai.xi
8234*53ee8cc1Swenshuai.xi case MHL_VBUS_CHARGE_OFF:
8235*53ee8cc1Swenshuai.xi mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_UNCHARGE);
8236*53ee8cc1Swenshuai.xi break;
8237*53ee8cc1Swenshuai.xi
8238*53ee8cc1Swenshuai.xi default:
8239*53ee8cc1Swenshuai.xi
8240*53ee8cc1Swenshuai.xi break;
8241*53ee8cc1Swenshuai.xi };
8242*53ee8cc1Swenshuai.xi }
8243*53ee8cc1Swenshuai.xi
8244*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8245*53ee8cc1Swenshuai.xi }
8246*53ee8cc1Swenshuai.xi
8247*53ee8cc1Swenshuai.xi //**************************************************************************
8248*53ee8cc1Swenshuai.xi // [Function Name]:
8249*53ee8cc1Swenshuai.xi // mdrv_mhl_LoadEDID()
8250*53ee8cc1Swenshuai.xi // [Description]
8251*53ee8cc1Swenshuai.xi //
8252*53ee8cc1Swenshuai.xi // [Arguments]:
8253*53ee8cc1Swenshuai.xi //
8254*53ee8cc1Swenshuai.xi // [Return]:
8255*53ee8cc1Swenshuai.xi //
8256*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadEDID(void * pInstance,MS_U8 * edid)8257*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadEDID(void* pInstance, MS_U8 *edid)
8258*53ee8cc1Swenshuai.xi {
8259*53ee8cc1Swenshuai.xi void* pModule = NULL;
8260*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8261*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8262*53ee8cc1Swenshuai.xi
8263*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8264*53ee8cc1Swenshuai.xi
8265*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8266*53ee8cc1Swenshuai.xi {
8267*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8268*53ee8cc1Swenshuai.xi }
8269*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8270*53ee8cc1Swenshuai.xi {
8271*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8272*53ee8cc1Swenshuai.xi }
8273*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8274*53ee8cc1Swenshuai.xi {
8275*53ee8cc1Swenshuai.xi mhal_mhl_LoadEDID(edid);
8276*53ee8cc1Swenshuai.xi
8277*53ee8cc1Swenshuai.xi // Parsing EDID
8278*53ee8cc1Swenshuai.xi _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
8279*53ee8cc1Swenshuai.xi }
8280*53ee8cc1Swenshuai.xi
8281*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8282*53ee8cc1Swenshuai.xi }
8283*53ee8cc1Swenshuai.xi
8284*53ee8cc1Swenshuai.xi //**************************************************************************
8285*53ee8cc1Swenshuai.xi // [Function Name]:
8286*53ee8cc1Swenshuai.xi // mdrv_mhl_ReadEDID()
8287*53ee8cc1Swenshuai.xi // [Description]
8288*53ee8cc1Swenshuai.xi //
8289*53ee8cc1Swenshuai.xi // [Arguments]:
8290*53ee8cc1Swenshuai.xi //
8291*53ee8cc1Swenshuai.xi // [Return]:
8292*53ee8cc1Swenshuai.xi //
8293*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_ReadEDID(void * pInstance,MS_U16 usSize,MS_U8 * edid)8294*53ee8cc1Swenshuai.xi void mdrv_mhl_ReadEDID(void* pInstance, MS_U16 usSize, MS_U8 *edid)
8295*53ee8cc1Swenshuai.xi {
8296*53ee8cc1Swenshuai.xi void* pModule = NULL;
8297*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8298*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8299*53ee8cc1Swenshuai.xi
8300*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8301*53ee8cc1Swenshuai.xi
8302*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8303*53ee8cc1Swenshuai.xi {
8304*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8305*53ee8cc1Swenshuai.xi }
8306*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8307*53ee8cc1Swenshuai.xi {
8308*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8309*53ee8cc1Swenshuai.xi }
8310*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8311*53ee8cc1Swenshuai.xi {
8312*53ee8cc1Swenshuai.xi if(usSize > 0)
8313*53ee8cc1Swenshuai.xi {
8314*53ee8cc1Swenshuai.xi mhal_mhl_ReadEDID(usSize, edid);
8315*53ee8cc1Swenshuai.xi }
8316*53ee8cc1Swenshuai.xi }
8317*53ee8cc1Swenshuai.xi
8318*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8319*53ee8cc1Swenshuai.xi }
8320*53ee8cc1Swenshuai.xi
8321*53ee8cc1Swenshuai.xi //**************************************************************************
8322*53ee8cc1Swenshuai.xi // [Function Name]:
8323*53ee8cc1Swenshuai.xi // mdrv_mhl_LoadDeviceCapability()
8324*53ee8cc1Swenshuai.xi // [Description]
8325*53ee8cc1Swenshuai.xi //
8326*53ee8cc1Swenshuai.xi // [Arguments]:
8327*53ee8cc1Swenshuai.xi //
8328*53ee8cc1Swenshuai.xi // [Return]:
8329*53ee8cc1Swenshuai.xi //
8330*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadDeviceCapability(void * pInstance,MS_U8 * devcap)8331*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadDeviceCapability(void* pInstance, MS_U8 *devcap)
8332*53ee8cc1Swenshuai.xi {
8333*53ee8cc1Swenshuai.xi void* pModule = NULL;
8334*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8335*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
8336*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8337*53ee8cc1Swenshuai.xi
8338*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8339*53ee8cc1Swenshuai.xi
8340*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8341*53ee8cc1Swenshuai.xi {
8342*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8343*53ee8cc1Swenshuai.xi }
8344*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8345*53ee8cc1Swenshuai.xi {
8346*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8347*53ee8cc1Swenshuai.xi }
8348*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8349*53ee8cc1Swenshuai.xi {
8350*53ee8cc1Swenshuai.xi if(devcap != NULL)
8351*53ee8cc1Swenshuai.xi {
8352*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
8353*53ee8cc1Swenshuai.xi {
8354*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = devcap[uctemp];
8355*53ee8cc1Swenshuai.xi }
8356*53ee8cc1Swenshuai.xi
8357*53ee8cc1Swenshuai.xi if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
8358*53ee8cc1Swenshuai.xi {
8359*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
8360*53ee8cc1Swenshuai.xi
8361*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
8362*53ee8cc1Swenshuai.xi {
8363*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = devcap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
8364*53ee8cc1Swenshuai.xi }
8365*53ee8cc1Swenshuai.xi }
8366*53ee8cc1Swenshuai.xi else if(devcap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
8367*53ee8cc1Swenshuai.xi {
8368*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
8369*53ee8cc1Swenshuai.xi
8370*53ee8cc1Swenshuai.xi mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
8371*53ee8cc1Swenshuai.xi
8372*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
8373*53ee8cc1Swenshuai.xi }
8374*53ee8cc1Swenshuai.xi
8375*53ee8cc1Swenshuai.xi // Attach eCbus ISR
8376*53ee8cc1Swenshuai.xi if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
8377*53ee8cc1Swenshuai.xi {
8378*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
8379*53ee8cc1Swenshuai.xi {
8380*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
8381*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
8382*53ee8cc1Swenshuai.xi
8383*53ee8cc1Swenshuai.xi SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
8384*53ee8cc1Swenshuai.xi }
8385*53ee8cc1Swenshuai.xi }
8386*53ee8cc1Swenshuai.xi }
8387*53ee8cc1Swenshuai.xi }
8388*53ee8cc1Swenshuai.xi
8389*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8390*53ee8cc1Swenshuai.xi }
8391*53ee8cc1Swenshuai.xi
8392*53ee8cc1Swenshuai.xi //**************************************************************************
8393*53ee8cc1Swenshuai.xi // [Function Name]:
8394*53ee8cc1Swenshuai.xi // mdrv_mhl_SetVenderID()
8395*53ee8cc1Swenshuai.xi // [Description]
8396*53ee8cc1Swenshuai.xi //
8397*53ee8cc1Swenshuai.xi // [Arguments]:
8398*53ee8cc1Swenshuai.xi //
8399*53ee8cc1Swenshuai.xi // [Return]:
8400*53ee8cc1Swenshuai.xi //
8401*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetVenderID(void * pInstance,MS_U8 ucVenderID)8402*53ee8cc1Swenshuai.xi void mdrv_mhl_SetVenderID(void* pInstance, MS_U8 ucVenderID)
8403*53ee8cc1Swenshuai.xi {
8404*53ee8cc1Swenshuai.xi void* pModule = NULL;
8405*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8406*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8407*53ee8cc1Swenshuai.xi
8408*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8409*53ee8cc1Swenshuai.xi
8410*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8411*53ee8cc1Swenshuai.xi {
8412*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8413*53ee8cc1Swenshuai.xi }
8414*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8415*53ee8cc1Swenshuai.xi {
8416*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8417*53ee8cc1Swenshuai.xi }
8418*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8419*53ee8cc1Swenshuai.xi {
8420*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucDeviceVenderID = ucVenderID;
8421*53ee8cc1Swenshuai.xi
8422*53ee8cc1Swenshuai.xi mhal_mhl_SetVenderID(ucVenderID);
8423*53ee8cc1Swenshuai.xi }
8424*53ee8cc1Swenshuai.xi
8425*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8426*53ee8cc1Swenshuai.xi }
8427*53ee8cc1Swenshuai.xi
8428*53ee8cc1Swenshuai.xi //**************************************************************************
8429*53ee8cc1Swenshuai.xi // [Function Name]:
8430*53ee8cc1Swenshuai.xi // mdrv_mhl_InvertCableDetect()
8431*53ee8cc1Swenshuai.xi // [Description]
8432*53ee8cc1Swenshuai.xi //
8433*53ee8cc1Swenshuai.xi // [Arguments]:
8434*53ee8cc1Swenshuai.xi //
8435*53ee8cc1Swenshuai.xi // [Return]:
8436*53ee8cc1Swenshuai.xi //
8437*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_InvertCableDetect(void * pInstance,MS_BOOL bCableDetectInvert)8438*53ee8cc1Swenshuai.xi void mdrv_mhl_InvertCableDetect(void* pInstance, MS_BOOL bCableDetectInvert)
8439*53ee8cc1Swenshuai.xi {
8440*53ee8cc1Swenshuai.xi void* pModule = NULL;
8441*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8442*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8443*53ee8cc1Swenshuai.xi
8444*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8445*53ee8cc1Swenshuai.xi
8446*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8447*53ee8cc1Swenshuai.xi {
8448*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8449*53ee8cc1Swenshuai.xi }
8450*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8451*53ee8cc1Swenshuai.xi {
8452*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8453*53ee8cc1Swenshuai.xi }
8454*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8455*53ee8cc1Swenshuai.xi {
8456*53ee8cc1Swenshuai.xi mhal_mhl_InvertCableDetect(pMHLResourcePrivate->ucMHLSupportPath, bCableDetectInvert);
8457*53ee8cc1Swenshuai.xi }
8458*53ee8cc1Swenshuai.xi
8459*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8460*53ee8cc1Swenshuai.xi }
8461*53ee8cc1Swenshuai.xi
8462*53ee8cc1Swenshuai.xi //**************************************************************************
8463*53ee8cc1Swenshuai.xi // [Function Name]:
8464*53ee8cc1Swenshuai.xi // mdrv_mhl_VbusConfigSetting()
8465*53ee8cc1Swenshuai.xi // [Description]
8466*53ee8cc1Swenshuai.xi //
8467*53ee8cc1Swenshuai.xi // [Arguments]:
8468*53ee8cc1Swenshuai.xi //
8469*53ee8cc1Swenshuai.xi // [Return]:
8470*53ee8cc1Swenshuai.xi //
8471*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_VbusConfigSetting(void * pInstance,MS_U8 ucState)8472*53ee8cc1Swenshuai.xi void mdrv_mhl_VbusConfigSetting(void* pInstance, MS_U8 ucState)
8473*53ee8cc1Swenshuai.xi {
8474*53ee8cc1Swenshuai.xi void* pModule = NULL;
8475*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8476*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8477*53ee8cc1Swenshuai.xi
8478*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8479*53ee8cc1Swenshuai.xi
8480*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8481*53ee8cc1Swenshuai.xi {
8482*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8483*53ee8cc1Swenshuai.xi }
8484*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8485*53ee8cc1Swenshuai.xi {
8486*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8487*53ee8cc1Swenshuai.xi }
8488*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8489*53ee8cc1Swenshuai.xi {
8490*53ee8cc1Swenshuai.xi mhal_mhl_VbusConfigSetting(pMHLResourcePrivate->ucMHLSupportPath, ucState);
8491*53ee8cc1Swenshuai.xi }
8492*53ee8cc1Swenshuai.xi
8493*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8494*53ee8cc1Swenshuai.xi }
8495*53ee8cc1Swenshuai.xi
8496*53ee8cc1Swenshuai.xi //**************************************************************************
8497*53ee8cc1Swenshuai.xi // [Function Name]:
8498*53ee8cc1Swenshuai.xi // mdrv_mhl_AdjustSettingIControl()
8499*53ee8cc1Swenshuai.xi // [Description]
8500*53ee8cc1Swenshuai.xi //
8501*53ee8cc1Swenshuai.xi // [Arguments]:
8502*53ee8cc1Swenshuai.xi //
8503*53ee8cc1Swenshuai.xi // [Return]:
8504*53ee8cc1Swenshuai.xi //
8505*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustSettingIControl(void * pInstance,MS_U8 ucIControl)8506*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustSettingIControl(void* pInstance, MS_U8 ucIControl)
8507*53ee8cc1Swenshuai.xi {
8508*53ee8cc1Swenshuai.xi void* pModule = NULL;
8509*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8510*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8511*53ee8cc1Swenshuai.xi
8512*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8513*53ee8cc1Swenshuai.xi
8514*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8515*53ee8cc1Swenshuai.xi {
8516*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8517*53ee8cc1Swenshuai.xi }
8518*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8519*53ee8cc1Swenshuai.xi {
8520*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8521*53ee8cc1Swenshuai.xi }
8522*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8523*53ee8cc1Swenshuai.xi {
8524*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucIControlValue = ucIControl;
8525*53ee8cc1Swenshuai.xi }
8526*53ee8cc1Swenshuai.xi
8527*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8528*53ee8cc1Swenshuai.xi }
8529*53ee8cc1Swenshuai.xi
8530*53ee8cc1Swenshuai.xi //**************************************************************************
8531*53ee8cc1Swenshuai.xi // [Function Name]:
8532*53ee8cc1Swenshuai.xi // mdrv_mhl_AdjustImpedanceSetting()
8533*53ee8cc1Swenshuai.xi // [Description]
8534*53ee8cc1Swenshuai.xi //
8535*53ee8cc1Swenshuai.xi // [Arguments]:
8536*53ee8cc1Swenshuai.xi //
8537*53ee8cc1Swenshuai.xi // [Return]:
8538*53ee8cc1Swenshuai.xi //
8539*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustImpedanceSetting(void * pInstance,MS_U8 ucImpedance)8540*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustImpedanceSetting(void* pInstance, MS_U8 ucImpedance)
8541*53ee8cc1Swenshuai.xi {
8542*53ee8cc1Swenshuai.xi void* pModule = NULL;
8543*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8544*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8545*53ee8cc1Swenshuai.xi
8546*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8547*53ee8cc1Swenshuai.xi
8548*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8549*53ee8cc1Swenshuai.xi {
8550*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8551*53ee8cc1Swenshuai.xi }
8552*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8553*53ee8cc1Swenshuai.xi {
8554*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8555*53ee8cc1Swenshuai.xi }
8556*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8557*53ee8cc1Swenshuai.xi {
8558*53ee8cc1Swenshuai.xi pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceOffset = ucImpedance;
8559*53ee8cc1Swenshuai.xi }
8560*53ee8cc1Swenshuai.xi
8561*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8562*53ee8cc1Swenshuai.xi }
8563*53ee8cc1Swenshuai.xi
8564*53ee8cc1Swenshuai.xi //**************************************************************************
8565*53ee8cc1Swenshuai.xi // [Function Name]:
8566*53ee8cc1Swenshuai.xi // mdrv_mhl_GetCableDetectFlag()
8567*53ee8cc1Swenshuai.xi // [Description]
8568*53ee8cc1Swenshuai.xi //
8569*53ee8cc1Swenshuai.xi // [Arguments]:
8570*53ee8cc1Swenshuai.xi //
8571*53ee8cc1Swenshuai.xi // [Return]:
8572*53ee8cc1Swenshuai.xi //
8573*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCableDetectFlag(void * pInstance)8574*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCableDetectFlag(void* pInstance)
8575*53ee8cc1Swenshuai.xi {
8576*53ee8cc1Swenshuai.xi void* pModule = NULL;
8577*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8578*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
8579*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8580*53ee8cc1Swenshuai.xi
8581*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8582*53ee8cc1Swenshuai.xi
8583*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8584*53ee8cc1Swenshuai.xi {
8585*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8586*53ee8cc1Swenshuai.xi }
8587*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8588*53ee8cc1Swenshuai.xi {
8589*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8590*53ee8cc1Swenshuai.xi }
8591*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8592*53ee8cc1Swenshuai.xi {
8593*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
8594*53ee8cc1Swenshuai.xi }
8595*53ee8cc1Swenshuai.xi
8596*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8597*53ee8cc1Swenshuai.xi
8598*53ee8cc1Swenshuai.xi return bStatusFlag;
8599*53ee8cc1Swenshuai.xi }
8600*53ee8cc1Swenshuai.xi
8601*53ee8cc1Swenshuai.xi //**************************************************************************
8602*53ee8cc1Swenshuai.xi // [Function Name]:
8603*53ee8cc1Swenshuai.xi // mdrv_mhl_GetCbusConnectFlag()
8604*53ee8cc1Swenshuai.xi // [Description]
8605*53ee8cc1Swenshuai.xi //
8606*53ee8cc1Swenshuai.xi // [Arguments]:
8607*53ee8cc1Swenshuai.xi //
8608*53ee8cc1Swenshuai.xi // [Return]:
8609*53ee8cc1Swenshuai.xi //
8610*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCbusConnectFlag(void * pInstance)8611*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCbusConnectFlag(void* pInstance)
8612*53ee8cc1Swenshuai.xi {
8613*53ee8cc1Swenshuai.xi void* pModule = NULL;
8614*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8615*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
8616*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8617*53ee8cc1Swenshuai.xi
8618*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8619*53ee8cc1Swenshuai.xi
8620*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8621*53ee8cc1Swenshuai.xi {
8622*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8623*53ee8cc1Swenshuai.xi }
8624*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8625*53ee8cc1Swenshuai.xi {
8626*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8627*53ee8cc1Swenshuai.xi }
8628*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8629*53ee8cc1Swenshuai.xi {
8630*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
8631*53ee8cc1Swenshuai.xi }
8632*53ee8cc1Swenshuai.xi
8633*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8634*53ee8cc1Swenshuai.xi
8635*53ee8cc1Swenshuai.xi return bStatusFlag;
8636*53ee8cc1Swenshuai.xi }
8637*53ee8cc1Swenshuai.xi
8638*53ee8cc1Swenshuai.xi //**************************************************************************
8639*53ee8cc1Swenshuai.xi // [Function Name]:
8640*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusWakeupIntFlag()
8641*53ee8cc1Swenshuai.xi // [Description]
8642*53ee8cc1Swenshuai.xi //
8643*53ee8cc1Swenshuai.xi // [Arguments]:
8644*53ee8cc1Swenshuai.xi //
8645*53ee8cc1Swenshuai.xi // [Return]:
8646*53ee8cc1Swenshuai.xi //
8647*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusWakeupIntFlag(void * pInstance)8648*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusWakeupIntFlag(void* pInstance)
8649*53ee8cc1Swenshuai.xi {
8650*53ee8cc1Swenshuai.xi void* pModule = NULL;
8651*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8652*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
8653*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8654*53ee8cc1Swenshuai.xi
8655*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8656*53ee8cc1Swenshuai.xi
8657*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8658*53ee8cc1Swenshuai.xi {
8659*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8660*53ee8cc1Swenshuai.xi }
8661*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8662*53ee8cc1Swenshuai.xi {
8663*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8664*53ee8cc1Swenshuai.xi }
8665*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8666*53ee8cc1Swenshuai.xi {
8667*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
8668*53ee8cc1Swenshuai.xi }
8669*53ee8cc1Swenshuai.xi
8670*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8671*53ee8cc1Swenshuai.xi
8672*53ee8cc1Swenshuai.xi return bStatusFlag;
8673*53ee8cc1Swenshuai.xi }
8674*53ee8cc1Swenshuai.xi
8675*53ee8cc1Swenshuai.xi //**************************************************************************
8676*53ee8cc1Swenshuai.xi // [Function Name]:
8677*53ee8cc1Swenshuai.xi // mdrv_mhl_SrcRCPSupportFlag()
8678*53ee8cc1Swenshuai.xi // [Description]
8679*53ee8cc1Swenshuai.xi //
8680*53ee8cc1Swenshuai.xi // [Arguments]:
8681*53ee8cc1Swenshuai.xi //
8682*53ee8cc1Swenshuai.xi // [Return]:
8683*53ee8cc1Swenshuai.xi //
8684*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRCPSupportFlag(void * pInstance)8685*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRCPSupportFlag(void* pInstance)
8686*53ee8cc1Swenshuai.xi {
8687*53ee8cc1Swenshuai.xi void* pModule = NULL;
8688*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8689*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
8690*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8691*53ee8cc1Swenshuai.xi
8692*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8693*53ee8cc1Swenshuai.xi
8694*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8695*53ee8cc1Swenshuai.xi {
8696*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8697*53ee8cc1Swenshuai.xi }
8698*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8699*53ee8cc1Swenshuai.xi {
8700*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8701*53ee8cc1Swenshuai.xi }
8702*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8703*53ee8cc1Swenshuai.xi {
8704*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RCP_FUNCTION_FLAG);
8705*53ee8cc1Swenshuai.xi }
8706*53ee8cc1Swenshuai.xi
8707*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8708*53ee8cc1Swenshuai.xi
8709*53ee8cc1Swenshuai.xi return bStatusFlag;
8710*53ee8cc1Swenshuai.xi }
8711*53ee8cc1Swenshuai.xi
8712*53ee8cc1Swenshuai.xi //**************************************************************************
8713*53ee8cc1Swenshuai.xi // [Function Name]:
8714*53ee8cc1Swenshuai.xi // mdrv_mhl_SrcRAPSupportFlag()
8715*53ee8cc1Swenshuai.xi // [Description]
8716*53ee8cc1Swenshuai.xi //
8717*53ee8cc1Swenshuai.xi // [Arguments]:
8718*53ee8cc1Swenshuai.xi //
8719*53ee8cc1Swenshuai.xi // [Return]:
8720*53ee8cc1Swenshuai.xi //
8721*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRAPSupportFlag(void * pInstance)8722*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRAPSupportFlag(void* pInstance)
8723*53ee8cc1Swenshuai.xi {
8724*53ee8cc1Swenshuai.xi void* pModule = NULL;
8725*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8726*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
8727*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8728*53ee8cc1Swenshuai.xi
8729*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8730*53ee8cc1Swenshuai.xi
8731*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8732*53ee8cc1Swenshuai.xi {
8733*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8734*53ee8cc1Swenshuai.xi }
8735*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8736*53ee8cc1Swenshuai.xi {
8737*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8738*53ee8cc1Swenshuai.xi }
8739*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8740*53ee8cc1Swenshuai.xi {
8741*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RAP_FUNCTION_FLAG);
8742*53ee8cc1Swenshuai.xi }
8743*53ee8cc1Swenshuai.xi
8744*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8745*53ee8cc1Swenshuai.xi
8746*53ee8cc1Swenshuai.xi return bStatusFlag;
8747*53ee8cc1Swenshuai.xi }
8748*53ee8cc1Swenshuai.xi
8749*53ee8cc1Swenshuai.xi //**************************************************************************
8750*53ee8cc1Swenshuai.xi // [Function Name]:
8751*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusGetStatusFlag()
8752*53ee8cc1Swenshuai.xi // [Description]
8753*53ee8cc1Swenshuai.xi //
8754*53ee8cc1Swenshuai.xi // [Arguments]:
8755*53ee8cc1Swenshuai.xi //
8756*53ee8cc1Swenshuai.xi // [Return]:
8757*53ee8cc1Swenshuai.xi //
8758*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusGetStatusFlag(void * pInstance,MS_U8 ucState)8759*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusGetStatusFlag(void* pInstance, MS_U8 ucState)
8760*53ee8cc1Swenshuai.xi {
8761*53ee8cc1Swenshuai.xi void* pModule = NULL;
8762*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8763*53ee8cc1Swenshuai.xi MS_BOOL bStatusFlag = FALSE;
8764*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8765*53ee8cc1Swenshuai.xi
8766*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8767*53ee8cc1Swenshuai.xi
8768*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8769*53ee8cc1Swenshuai.xi {
8770*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8771*53ee8cc1Swenshuai.xi }
8772*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8773*53ee8cc1Swenshuai.xi {
8774*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8775*53ee8cc1Swenshuai.xi }
8776*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8777*53ee8cc1Swenshuai.xi {
8778*53ee8cc1Swenshuai.xi switch(ucState)
8779*53ee8cc1Swenshuai.xi {
8780*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_CABLE_DETECT:
8781*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
8782*53ee8cc1Swenshuai.xi break;
8783*53ee8cc1Swenshuai.xi
8784*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_CBUS_CONNECT:
8785*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
8786*53ee8cc1Swenshuai.xi break;
8787*53ee8cc1Swenshuai.xi
8788*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_PATH_EN:
8789*53ee8cc1Swenshuai.xi break;
8790*53ee8cc1Swenshuai.xi
8791*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_RECEIVE_PATH_EN:
8792*53ee8cc1Swenshuai.xi break;
8793*53ee8cc1Swenshuai.xi
8794*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_RECEIVE_MUTED:
8795*53ee8cc1Swenshuai.xi break;
8796*53ee8cc1Swenshuai.xi
8797*53ee8cc1Swenshuai.xi case MHL_CBUS_STATUS_FLAG_COMMUNICATE_BUSY:
8798*53ee8cc1Swenshuai.xi bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
8799*53ee8cc1Swenshuai.xi break;
8800*53ee8cc1Swenshuai.xi
8801*53ee8cc1Swenshuai.xi default:
8802*53ee8cc1Swenshuai.xi
8803*53ee8cc1Swenshuai.xi break;
8804*53ee8cc1Swenshuai.xi };
8805*53ee8cc1Swenshuai.xi }
8806*53ee8cc1Swenshuai.xi
8807*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8808*53ee8cc1Swenshuai.xi
8809*53ee8cc1Swenshuai.xi return bStatusFlag;
8810*53ee8cc1Swenshuai.xi }
8811*53ee8cc1Swenshuai.xi
8812*53ee8cc1Swenshuai.xi //**************************************************************************
8813*53ee8cc1Swenshuai.xi // [Function Name]:
8814*53ee8cc1Swenshuai.xi // mdrv_mhl_SendRAPCommand
8815*53ee8cc1Swenshuai.xi // [Description]
8816*53ee8cc1Swenshuai.xi // MHL Cbus MSC Send RAP Command
8817*53ee8cc1Swenshuai.xi // [Arguments]:
8818*53ee8cc1Swenshuai.xi //
8819*53ee8cc1Swenshuai.xi // [Return]:
8820*53ee8cc1Swenshuai.xi // TRUE: success
8821*53ee8cc1Swenshuai.xi // FALSE: fail
8822*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRAPCommand(void * pInstance,MS_U8 ucKeyCode)8823*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRAPCommand(void* pInstance, MS_U8 ucKeyCode)
8824*53ee8cc1Swenshuai.xi {
8825*53ee8cc1Swenshuai.xi void* pModule = NULL;
8826*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8827*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
8828*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8829*53ee8cc1Swenshuai.xi
8830*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8831*53ee8cc1Swenshuai.xi
8832*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8833*53ee8cc1Swenshuai.xi {
8834*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8835*53ee8cc1Swenshuai.xi }
8836*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8837*53ee8cc1Swenshuai.xi {
8838*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8839*53ee8cc1Swenshuai.xi }
8840*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8841*53ee8cc1Swenshuai.xi {
8842*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAP, ucKeyCode, TRUE);
8843*53ee8cc1Swenshuai.xi }
8844*53ee8cc1Swenshuai.xi
8845*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8846*53ee8cc1Swenshuai.xi
8847*53ee8cc1Swenshuai.xi return bSendFlag;
8848*53ee8cc1Swenshuai.xi }
8849*53ee8cc1Swenshuai.xi
8850*53ee8cc1Swenshuai.xi //**************************************************************************
8851*53ee8cc1Swenshuai.xi // [Function Name]:
8852*53ee8cc1Swenshuai.xi // mdrv_mhl_SendRCPAutoReleaseCmd
8853*53ee8cc1Swenshuai.xi // [Description]
8854*53ee8cc1Swenshuai.xi // MHL Cbus MSC Send RCP Command
8855*53ee8cc1Swenshuai.xi // [Arguments]:
8856*53ee8cc1Swenshuai.xi //
8857*53ee8cc1Swenshuai.xi // [Return]:
8858*53ee8cc1Swenshuai.xi // TRUE: success
8859*53ee8cc1Swenshuai.xi // FALSE: fail
8860*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRCPAutoReleaseCmd(void * pInstance,MS_U8 ucKeyCode)8861*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRCPAutoReleaseCmd(void* pInstance, MS_U8 ucKeyCode)
8862*53ee8cc1Swenshuai.xi {
8863*53ee8cc1Swenshuai.xi void* pModule = NULL;
8864*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8865*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
8866*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8867*53ee8cc1Swenshuai.xi
8868*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8869*53ee8cc1Swenshuai.xi
8870*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8871*53ee8cc1Swenshuai.xi {
8872*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8873*53ee8cc1Swenshuai.xi }
8874*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8875*53ee8cc1Swenshuai.xi {
8876*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8877*53ee8cc1Swenshuai.xi }
8878*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8879*53ee8cc1Swenshuai.xi {
8880*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucPreRCPKeyCode != ucKeyCode) // Key change
8881*53ee8cc1Swenshuai.xi {
8882*53ee8cc1Swenshuai.xi if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG))
8883*53ee8cc1Swenshuai.xi {
8884*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
8885*53ee8cc1Swenshuai.xi }
8886*53ee8cc1Swenshuai.xi }
8887*53ee8cc1Swenshuai.xi else
8888*53ee8cc1Swenshuai.xi {
8889*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
8890*53ee8cc1Swenshuai.xi }
8891*53ee8cc1Swenshuai.xi
8892*53ee8cc1Swenshuai.xi if(bSendFlag)
8893*53ee8cc1Swenshuai.xi {
8894*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucPreRCPKeyCode = ucKeyCode;
8895*53ee8cc1Swenshuai.xi
8896*53ee8cc1Swenshuai.xi _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_RCP_AUTO_RELEASE, MHL_CBUS_RCP_RELEASE_TIME);
8897*53ee8cc1Swenshuai.xi
8898*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG);
8899*53ee8cc1Swenshuai.xi }
8900*53ee8cc1Swenshuai.xi }
8901*53ee8cc1Swenshuai.xi
8902*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8903*53ee8cc1Swenshuai.xi
8904*53ee8cc1Swenshuai.xi return bSendFlag;
8905*53ee8cc1Swenshuai.xi }
8906*53ee8cc1Swenshuai.xi
8907*53ee8cc1Swenshuai.xi //**************************************************************************
8908*53ee8cc1Swenshuai.xi // [Function Name]:
8909*53ee8cc1Swenshuai.xi // mdrv_mhl_SendUCPCommand
8910*53ee8cc1Swenshuai.xi // [Description]
8911*53ee8cc1Swenshuai.xi // MHL Cbus MSC Send UCP Command
8912*53ee8cc1Swenshuai.xi // [Arguments]:
8913*53ee8cc1Swenshuai.xi //
8914*53ee8cc1Swenshuai.xi // [Return]:
8915*53ee8cc1Swenshuai.xi // TRUE: success
8916*53ee8cc1Swenshuai.xi // FALSE: fail
8917*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendUCPCommand(void * pInstance,MS_U8 ucKeyCode)8918*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendUCPCommand(void* pInstance, MS_U8 ucKeyCode)
8919*53ee8cc1Swenshuai.xi {
8920*53ee8cc1Swenshuai.xi void* pModule = NULL;
8921*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8922*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
8923*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8924*53ee8cc1Swenshuai.xi
8925*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8926*53ee8cc1Swenshuai.xi
8927*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8928*53ee8cc1Swenshuai.xi {
8929*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8930*53ee8cc1Swenshuai.xi }
8931*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8932*53ee8cc1Swenshuai.xi {
8933*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8934*53ee8cc1Swenshuai.xi }
8935*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8936*53ee8cc1Swenshuai.xi {
8937*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_UCP, ucKeyCode, TRUE);
8938*53ee8cc1Swenshuai.xi }
8939*53ee8cc1Swenshuai.xi
8940*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8941*53ee8cc1Swenshuai.xi
8942*53ee8cc1Swenshuai.xi return bSendFlag;
8943*53ee8cc1Swenshuai.xi }
8944*53ee8cc1Swenshuai.xi
8945*53ee8cc1Swenshuai.xi //**************************************************************************
8946*53ee8cc1Swenshuai.xi // [Function Name]:
8947*53ee8cc1Swenshuai.xi // mdrv_mhl_SendWriteBurst
8948*53ee8cc1Swenshuai.xi // [Description]
8949*53ee8cc1Swenshuai.xi //
8950*53ee8cc1Swenshuai.xi // [Arguments]:
8951*53ee8cc1Swenshuai.xi //
8952*53ee8cc1Swenshuai.xi // [Return]:
8953*53ee8cc1Swenshuai.xi // TRUE: success
8954*53ee8cc1Swenshuai.xi // FALSE: fail
8955*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendWriteBurst(void * pInstance,MS_U8 ucAddr,MS_U8 ucLength,MS_U8 * ucData)8956*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendWriteBurst(void* pInstance, MS_U8 ucAddr, MS_U8 ucLength, MS_U8 *ucData)
8957*53ee8cc1Swenshuai.xi {
8958*53ee8cc1Swenshuai.xi void* pModule = NULL;
8959*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8960*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
8961*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8962*53ee8cc1Swenshuai.xi
8963*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
8964*53ee8cc1Swenshuai.xi
8965*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8966*53ee8cc1Swenshuai.xi {
8967*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8968*53ee8cc1Swenshuai.xi }
8969*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8970*53ee8cc1Swenshuai.xi {
8971*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8972*53ee8cc1Swenshuai.xi }
8973*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8974*53ee8cc1Swenshuai.xi {
8975*53ee8cc1Swenshuai.xi bSendFlag = _mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, ucAddr, ucLength, ucData);
8976*53ee8cc1Swenshuai.xi }
8977*53ee8cc1Swenshuai.xi
8978*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
8979*53ee8cc1Swenshuai.xi
8980*53ee8cc1Swenshuai.xi return bSendFlag;
8981*53ee8cc1Swenshuai.xi }
8982*53ee8cc1Swenshuai.xi
8983*53ee8cc1Swenshuai.xi //**************************************************************************
8984*53ee8cc1Swenshuai.xi // [Function Name]:
8985*53ee8cc1Swenshuai.xi // mdrv_mhl_CbusSendUserWriteBurst
8986*53ee8cc1Swenshuai.xi // [Description]
8987*53ee8cc1Swenshuai.xi //
8988*53ee8cc1Swenshuai.xi // [Arguments]:
8989*53ee8cc1Swenshuai.xi //
8990*53ee8cc1Swenshuai.xi // [Return]:
8991*53ee8cc1Swenshuai.xi // TRUE: success
8992*53ee8cc1Swenshuai.xi // FALSE: fail
8993*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusSendUserWriteBurst(void * pInstance,MS_U8 ucLength,MS_U8 * ucData)8994*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusSendUserWriteBurst(void* pInstance, MS_U8 ucLength, MS_U8 *ucData)
8995*53ee8cc1Swenshuai.xi {
8996*53ee8cc1Swenshuai.xi void* pModule = NULL;
8997*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
8998*53ee8cc1Swenshuai.xi MS_BOOL bSendFlag = FALSE;
8999*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9000*53ee8cc1Swenshuai.xi
9001*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9002*53ee8cc1Swenshuai.xi
9003*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9004*53ee8cc1Swenshuai.xi {
9005*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9006*53ee8cc1Swenshuai.xi }
9007*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9008*53ee8cc1Swenshuai.xi {
9009*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9010*53ee8cc1Swenshuai.xi }
9011*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9012*53ee8cc1Swenshuai.xi {
9013*53ee8cc1Swenshuai.xi if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG))
9014*53ee8cc1Swenshuai.xi {
9015*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_REVEIVE_GRANT)
9016*53ee8cc1Swenshuai.xi {
9017*53ee8cc1Swenshuai.xi if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, ucLength, ucData))
9018*53ee8cc1Swenshuai.xi {
9019*53ee8cc1Swenshuai.xi CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
9020*53ee8cc1Swenshuai.xi
9021*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
9022*53ee8cc1Swenshuai.xi
9023*53ee8cc1Swenshuai.xi bSendFlag = TRUE;
9024*53ee8cc1Swenshuai.xi }
9025*53ee8cc1Swenshuai.xi }
9026*53ee8cc1Swenshuai.xi }
9027*53ee8cc1Swenshuai.xi else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
9028*53ee8cc1Swenshuai.xi {
9029*53ee8cc1Swenshuai.xi SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
9030*53ee8cc1Swenshuai.xi }
9031*53ee8cc1Swenshuai.xi }
9032*53ee8cc1Swenshuai.xi
9033*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9034*53ee8cc1Swenshuai.xi
9035*53ee8cc1Swenshuai.xi return bSendFlag;
9036*53ee8cc1Swenshuai.xi }
9037*53ee8cc1Swenshuai.xi
9038*53ee8cc1Swenshuai.xi //**************************************************************************
9039*53ee8cc1Swenshuai.xi // [Function Name]:
9040*53ee8cc1Swenshuai.xi // mdrv_mhl_GetDeviceCapability
9041*53ee8cc1Swenshuai.xi // [Description]
9042*53ee8cc1Swenshuai.xi //
9043*53ee8cc1Swenshuai.xi // [Arguments]:
9044*53ee8cc1Swenshuai.xi //
9045*53ee8cc1Swenshuai.xi // [Return]:
9046*53ee8cc1Swenshuai.xi //
9047*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceCapability(void * pInstance,MS_U16 usDevcapMask,MS_U8 * ucDevcap)9048*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceCapability(void* pInstance, MS_U16 usDevcapMask, MS_U8 *ucDevcap)
9049*53ee8cc1Swenshuai.xi {
9050*53ee8cc1Swenshuai.xi void* pModule = NULL;
9051*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9052*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
9053*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
9054*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9055*53ee8cc1Swenshuai.xi
9056*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9057*53ee8cc1Swenshuai.xi
9058*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9059*53ee8cc1Swenshuai.xi {
9060*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9061*53ee8cc1Swenshuai.xi }
9062*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9063*53ee8cc1Swenshuai.xi {
9064*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9065*53ee8cc1Swenshuai.xi }
9066*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9067*53ee8cc1Swenshuai.xi {
9068*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
9069*53ee8cc1Swenshuai.xi {
9070*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usReadDevcapMask = usDevcapMask;
9071*53ee8cc1Swenshuai.xi }
9072*53ee8cc1Swenshuai.xi
9073*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_DEVCAP_DONE_FLAG))
9074*53ee8cc1Swenshuai.xi {
9075*53ee8cc1Swenshuai.xi if(ucDevcap != NULL)
9076*53ee8cc1Swenshuai.xi {
9077*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
9078*53ee8cc1Swenshuai.xi {
9079*53ee8cc1Swenshuai.xi if(usDevcapMask &BIT(uctemp))
9080*53ee8cc1Swenshuai.xi {
9081*53ee8cc1Swenshuai.xi ucDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[uctemp];
9082*53ee8cc1Swenshuai.xi }
9083*53ee8cc1Swenshuai.xi else
9084*53ee8cc1Swenshuai.xi {
9085*53ee8cc1Swenshuai.xi ucDevcap[uctemp] = 0;
9086*53ee8cc1Swenshuai.xi }
9087*53ee8cc1Swenshuai.xi }
9088*53ee8cc1Swenshuai.xi }
9089*53ee8cc1Swenshuai.xi
9090*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
9091*53ee8cc1Swenshuai.xi }
9092*53ee8cc1Swenshuai.xi }
9093*53ee8cc1Swenshuai.xi
9094*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9095*53ee8cc1Swenshuai.xi
9096*53ee8cc1Swenshuai.xi return bDoneFlag;
9097*53ee8cc1Swenshuai.xi }
9098*53ee8cc1Swenshuai.xi
9099*53ee8cc1Swenshuai.xi //**************************************************************************
9100*53ee8cc1Swenshuai.xi // [Function Name]:
9101*53ee8cc1Swenshuai.xi // mdrv_mhl_GetExtendDeviceCapability
9102*53ee8cc1Swenshuai.xi // [Description]
9103*53ee8cc1Swenshuai.xi //
9104*53ee8cc1Swenshuai.xi // [Arguments]:
9105*53ee8cc1Swenshuai.xi //
9106*53ee8cc1Swenshuai.xi // [Return]:
9107*53ee8cc1Swenshuai.xi //
9108*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetExtendDeviceCapability(void * pInstance,MS_U16 usExtendDevcapMask,MS_U8 * ucExtendDevcap)9109*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetExtendDeviceCapability(void* pInstance, MS_U16 usExtendDevcapMask, MS_U8 *ucExtendDevcap)
9110*53ee8cc1Swenshuai.xi {
9111*53ee8cc1Swenshuai.xi void* pModule = NULL;
9112*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9113*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
9114*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
9115*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9116*53ee8cc1Swenshuai.xi
9117*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9118*53ee8cc1Swenshuai.xi
9119*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9120*53ee8cc1Swenshuai.xi {
9121*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9122*53ee8cc1Swenshuai.xi }
9123*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9124*53ee8cc1Swenshuai.xi {
9125*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9126*53ee8cc1Swenshuai.xi }
9127*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9128*53ee8cc1Swenshuai.xi {
9129*53ee8cc1Swenshuai.xi if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
9130*53ee8cc1Swenshuai.xi {
9131*53ee8cc1Swenshuai.xi pMHLResourcePrivate->usReadExtendDevcapMask = usExtendDevcapMask;
9132*53ee8cc1Swenshuai.xi }
9133*53ee8cc1Swenshuai.xi
9134*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_XDEVCAP_DONE_FLAG))
9135*53ee8cc1Swenshuai.xi {
9136*53ee8cc1Swenshuai.xi if(ucExtendDevcap != NULL)
9137*53ee8cc1Swenshuai.xi {
9138*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
9139*53ee8cc1Swenshuai.xi {
9140*53ee8cc1Swenshuai.xi if(usExtendDevcapMask &BIT(uctemp))
9141*53ee8cc1Swenshuai.xi {
9142*53ee8cc1Swenshuai.xi ucExtendDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
9143*53ee8cc1Swenshuai.xi }
9144*53ee8cc1Swenshuai.xi else
9145*53ee8cc1Swenshuai.xi {
9146*53ee8cc1Swenshuai.xi ucExtendDevcap[uctemp] = 0;
9147*53ee8cc1Swenshuai.xi }
9148*53ee8cc1Swenshuai.xi }
9149*53ee8cc1Swenshuai.xi }
9150*53ee8cc1Swenshuai.xi
9151*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
9152*53ee8cc1Swenshuai.xi }
9153*53ee8cc1Swenshuai.xi }
9154*53ee8cc1Swenshuai.xi
9155*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9156*53ee8cc1Swenshuai.xi
9157*53ee8cc1Swenshuai.xi return bDoneFlag;
9158*53ee8cc1Swenshuai.xi }
9159*53ee8cc1Swenshuai.xi
9160*53ee8cc1Swenshuai.xi //**************************************************************************
9161*53ee8cc1Swenshuai.xi // [Function Name]:
9162*53ee8cc1Swenshuai.xi // mdrv_mhl_GetDeviceVenderID
9163*53ee8cc1Swenshuai.xi // [Description]
9164*53ee8cc1Swenshuai.xi //
9165*53ee8cc1Swenshuai.xi // [Arguments]:
9166*53ee8cc1Swenshuai.xi //
9167*53ee8cc1Swenshuai.xi // [Return]:
9168*53ee8cc1Swenshuai.xi //
9169*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceVenderID(void * pInstance,MS_U8 * ucVenderID)9170*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceVenderID(void* pInstance, MS_U8 *ucVenderID)
9171*53ee8cc1Swenshuai.xi {
9172*53ee8cc1Swenshuai.xi void* pModule = NULL;
9173*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9174*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
9175*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9176*53ee8cc1Swenshuai.xi
9177*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9178*53ee8cc1Swenshuai.xi
9179*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9180*53ee8cc1Swenshuai.xi {
9181*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9182*53ee8cc1Swenshuai.xi }
9183*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9184*53ee8cc1Swenshuai.xi {
9185*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9186*53ee8cc1Swenshuai.xi }
9187*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9188*53ee8cc1Swenshuai.xi {
9189*53ee8cc1Swenshuai.xi if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_GET_VENDER_ID_DONE_FLAG))
9190*53ee8cc1Swenshuai.xi {
9191*53ee8cc1Swenshuai.xi *ucVenderID = pMHLResourcePrivate->ucSourceVenderID;
9192*53ee8cc1Swenshuai.xi
9193*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
9194*53ee8cc1Swenshuai.xi }
9195*53ee8cc1Swenshuai.xi else
9196*53ee8cc1Swenshuai.xi {
9197*53ee8cc1Swenshuai.xi SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG);
9198*53ee8cc1Swenshuai.xi }
9199*53ee8cc1Swenshuai.xi }
9200*53ee8cc1Swenshuai.xi
9201*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9202*53ee8cc1Swenshuai.xi
9203*53ee8cc1Swenshuai.xi return bDoneFlag;
9204*53ee8cc1Swenshuai.xi }
9205*53ee8cc1Swenshuai.xi
9206*53ee8cc1Swenshuai.xi //**************************************************************************
9207*53ee8cc1Swenshuai.xi // [Function Name]:
9208*53ee8cc1Swenshuai.xi // mdrv_mhl_GetWriteBurstData
9209*53ee8cc1Swenshuai.xi // [Description]
9210*53ee8cc1Swenshuai.xi //
9211*53ee8cc1Swenshuai.xi // [Arguments]:
9212*53ee8cc1Swenshuai.xi //
9213*53ee8cc1Swenshuai.xi // [Return]:
9214*53ee8cc1Swenshuai.xi //
9215*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetWriteBurstData(void * pInstance,MS_U8 * ucData)9216*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetWriteBurstData(void* pInstance, MS_U8 *ucData)
9217*53ee8cc1Swenshuai.xi {
9218*53ee8cc1Swenshuai.xi void* pModule = NULL;
9219*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9220*53ee8cc1Swenshuai.xi MS_BOOL bDoneFlag = FALSE;
9221*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
9222*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9223*53ee8cc1Swenshuai.xi
9224*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9225*53ee8cc1Swenshuai.xi
9226*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9227*53ee8cc1Swenshuai.xi {
9228*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9229*53ee8cc1Swenshuai.xi }
9230*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9231*53ee8cc1Swenshuai.xi {
9232*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9233*53ee8cc1Swenshuai.xi }
9234*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9235*53ee8cc1Swenshuai.xi {
9236*53ee8cc1Swenshuai.xi if(pMHLResourcePrivate->ucWriteBurstAddress > 0)
9237*53ee8cc1Swenshuai.xi {
9238*53ee8cc1Swenshuai.xi pMHLResourcePrivate->ucWriteBurstAddress = 0;
9239*53ee8cc1Swenshuai.xi
9240*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < pMHLResourcePrivate->ucWriteBurstLength; uctemp++)
9241*53ee8cc1Swenshuai.xi {
9242*53ee8cc1Swenshuai.xi ucData[uctemp] = pMHLResourcePrivate->ucWriteBurstInformation[uctemp];
9243*53ee8cc1Swenshuai.xi }
9244*53ee8cc1Swenshuai.xi
9245*53ee8cc1Swenshuai.xi bDoneFlag = TRUE;
9246*53ee8cc1Swenshuai.xi }
9247*53ee8cc1Swenshuai.xi }
9248*53ee8cc1Swenshuai.xi
9249*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9250*53ee8cc1Swenshuai.xi
9251*53ee8cc1Swenshuai.xi return bDoneFlag;
9252*53ee8cc1Swenshuai.xi }
9253*53ee8cc1Swenshuai.xi
9254*53ee8cc1Swenshuai.xi //**************************************************************************
9255*53ee8cc1Swenshuai.xi // [Function Name]:
9256*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterCallBackFunctions()
9257*53ee8cc1Swenshuai.xi // [Description]
9258*53ee8cc1Swenshuai.xi // RCP &RAP call back
9259*53ee8cc1Swenshuai.xi // [Arguments]:
9260*53ee8cc1Swenshuai.xi //
9261*53ee8cc1Swenshuai.xi // [Return]:
9262*53ee8cc1Swenshuai.xi //
9263*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterCallBackFunctions(void * pInstance,MS_BOOL bRCPfunctionFlag,MS_BOOL bRAPfunctionFlag)9264*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterCallBackFunctions(void* pInstance, MS_BOOL bRCPfunctionFlag, MS_BOOL bRAPfunctionFlag)
9265*53ee8cc1Swenshuai.xi {
9266*53ee8cc1Swenshuai.xi void* pModule = NULL;
9267*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9268*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9269*53ee8cc1Swenshuai.xi
9270*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9271*53ee8cc1Swenshuai.xi
9272*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9273*53ee8cc1Swenshuai.xi {
9274*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9275*53ee8cc1Swenshuai.xi }
9276*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9277*53ee8cc1Swenshuai.xi {
9278*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9279*53ee8cc1Swenshuai.xi }
9280*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9281*53ee8cc1Swenshuai.xi {
9282*53ee8cc1Swenshuai.xi if(bRCPfunctionFlag)
9283*53ee8cc1Swenshuai.xi {
9284*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
9285*53ee8cc1Swenshuai.xi }
9286*53ee8cc1Swenshuai.xi
9287*53ee8cc1Swenshuai.xi if(bRAPfunctionFlag)
9288*53ee8cc1Swenshuai.xi {
9289*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
9290*53ee8cc1Swenshuai.xi }
9291*53ee8cc1Swenshuai.xi }
9292*53ee8cc1Swenshuai.xi
9293*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9294*53ee8cc1Swenshuai.xi }
9295*53ee8cc1Swenshuai.xi
9296*53ee8cc1Swenshuai.xi //**************************************************************************
9297*53ee8cc1Swenshuai.xi // [Function Name]:
9298*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterRcpCallBackFunction()
9299*53ee8cc1Swenshuai.xi // [Description]
9300*53ee8cc1Swenshuai.xi // RCP call back
9301*53ee8cc1Swenshuai.xi // [Arguments]:
9302*53ee8cc1Swenshuai.xi //
9303*53ee8cc1Swenshuai.xi // [Return]:
9304*53ee8cc1Swenshuai.xi //
9305*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRcpCallBackFunction(void * pInstance,MS_BOOL bRCPfunctionFlag)9306*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRcpCallBackFunction(void* pInstance, MS_BOOL bRCPfunctionFlag)
9307*53ee8cc1Swenshuai.xi {
9308*53ee8cc1Swenshuai.xi void* pModule = NULL;
9309*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9310*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9311*53ee8cc1Swenshuai.xi
9312*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9313*53ee8cc1Swenshuai.xi
9314*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9315*53ee8cc1Swenshuai.xi {
9316*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9317*53ee8cc1Swenshuai.xi }
9318*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9319*53ee8cc1Swenshuai.xi {
9320*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9321*53ee8cc1Swenshuai.xi }
9322*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9323*53ee8cc1Swenshuai.xi {
9324*53ee8cc1Swenshuai.xi if(bRCPfunctionFlag)
9325*53ee8cc1Swenshuai.xi {
9326*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
9327*53ee8cc1Swenshuai.xi }
9328*53ee8cc1Swenshuai.xi }
9329*53ee8cc1Swenshuai.xi
9330*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9331*53ee8cc1Swenshuai.xi }
9332*53ee8cc1Swenshuai.xi
9333*53ee8cc1Swenshuai.xi //**************************************************************************
9334*53ee8cc1Swenshuai.xi // [Function Name]:
9335*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterRapCallBackFunction()
9336*53ee8cc1Swenshuai.xi // [Description]
9337*53ee8cc1Swenshuai.xi // RAP call back
9338*53ee8cc1Swenshuai.xi // [Arguments]:
9339*53ee8cc1Swenshuai.xi //
9340*53ee8cc1Swenshuai.xi // [Return]:
9341*53ee8cc1Swenshuai.xi //
9342*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRapCallBackFunction(void * pInstance,MS_BOOL bRAPfunctionFlag)9343*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRapCallBackFunction(void* pInstance, MS_BOOL bRAPfunctionFlag)
9344*53ee8cc1Swenshuai.xi {
9345*53ee8cc1Swenshuai.xi void* pModule = NULL;
9346*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9347*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9348*53ee8cc1Swenshuai.xi
9349*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9350*53ee8cc1Swenshuai.xi
9351*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9352*53ee8cc1Swenshuai.xi {
9353*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9354*53ee8cc1Swenshuai.xi }
9355*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9356*53ee8cc1Swenshuai.xi {
9357*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9358*53ee8cc1Swenshuai.xi }
9359*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9360*53ee8cc1Swenshuai.xi {
9361*53ee8cc1Swenshuai.xi if(bRAPfunctionFlag)
9362*53ee8cc1Swenshuai.xi {
9363*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
9364*53ee8cc1Swenshuai.xi }
9365*53ee8cc1Swenshuai.xi }
9366*53ee8cc1Swenshuai.xi
9367*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9368*53ee8cc1Swenshuai.xi }
9369*53ee8cc1Swenshuai.xi
9370*53ee8cc1Swenshuai.xi //**************************************************************************
9371*53ee8cc1Swenshuai.xi // [Function Name]:
9372*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterUcpCallBackFunction()
9373*53ee8cc1Swenshuai.xi // [Description]
9374*53ee8cc1Swenshuai.xi // UCP call back
9375*53ee8cc1Swenshuai.xi // [Arguments]:
9376*53ee8cc1Swenshuai.xi //
9377*53ee8cc1Swenshuai.xi // [Return]:
9378*53ee8cc1Swenshuai.xi //
9379*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterUcpCallBackFunction(void * pInstance,MS_BOOL bUCPfunctionFlag)9380*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterUcpCallBackFunction(void* pInstance, MS_BOOL bUCPfunctionFlag)
9381*53ee8cc1Swenshuai.xi {
9382*53ee8cc1Swenshuai.xi void* pModule = NULL;
9383*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9384*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9385*53ee8cc1Swenshuai.xi
9386*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9387*53ee8cc1Swenshuai.xi
9388*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9389*53ee8cc1Swenshuai.xi {
9390*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9391*53ee8cc1Swenshuai.xi }
9392*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9393*53ee8cc1Swenshuai.xi {
9394*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9395*53ee8cc1Swenshuai.xi }
9396*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9397*53ee8cc1Swenshuai.xi {
9398*53ee8cc1Swenshuai.xi if(bUCPfunctionFlag)
9399*53ee8cc1Swenshuai.xi {
9400*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_UCP_FUNCTION_FLAG);
9401*53ee8cc1Swenshuai.xi }
9402*53ee8cc1Swenshuai.xi }
9403*53ee8cc1Swenshuai.xi
9404*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9405*53ee8cc1Swenshuai.xi }
9406*53ee8cc1Swenshuai.xi
9407*53ee8cc1Swenshuai.xi //**************************************************************************
9408*53ee8cc1Swenshuai.xi // [Function Name]:
9409*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterAttCallBackFunction()
9410*53ee8cc1Swenshuai.xi // [Description]
9411*53ee8cc1Swenshuai.xi // ATT call back
9412*53ee8cc1Swenshuai.xi // [Arguments]:
9413*53ee8cc1Swenshuai.xi //
9414*53ee8cc1Swenshuai.xi // [Return]:
9415*53ee8cc1Swenshuai.xi //
9416*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterAttCallBackFunction(void * pInstance,MS_BOOL bATTfunctionFlag)9417*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterAttCallBackFunction(void* pInstance, MS_BOOL bATTfunctionFlag)
9418*53ee8cc1Swenshuai.xi {
9419*53ee8cc1Swenshuai.xi void* pModule = NULL;
9420*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9421*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9422*53ee8cc1Swenshuai.xi
9423*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9424*53ee8cc1Swenshuai.xi
9425*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9426*53ee8cc1Swenshuai.xi {
9427*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9428*53ee8cc1Swenshuai.xi }
9429*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9430*53ee8cc1Swenshuai.xi {
9431*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9432*53ee8cc1Swenshuai.xi }
9433*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9434*53ee8cc1Swenshuai.xi {
9435*53ee8cc1Swenshuai.xi if(bATTfunctionFlag)
9436*53ee8cc1Swenshuai.xi {
9437*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_ATT_FUNCTION_FLAG);
9438*53ee8cc1Swenshuai.xi }
9439*53ee8cc1Swenshuai.xi }
9440*53ee8cc1Swenshuai.xi
9441*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9442*53ee8cc1Swenshuai.xi }
9443*53ee8cc1Swenshuai.xi
9444*53ee8cc1Swenshuai.xi //**************************************************************************
9445*53ee8cc1Swenshuai.xi // [Function Name]:
9446*53ee8cc1Swenshuai.xi // mdrv_mhl_RegisterRbpCallBackFunction()
9447*53ee8cc1Swenshuai.xi // [Description]
9448*53ee8cc1Swenshuai.xi // RBP call back
9449*53ee8cc1Swenshuai.xi // [Arguments]:
9450*53ee8cc1Swenshuai.xi //
9451*53ee8cc1Swenshuai.xi // [Return]:
9452*53ee8cc1Swenshuai.xi //
9453*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRbpCallBackFunction(void * pInstance,MS_BOOL bRBPfunctionFlag)9454*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRbpCallBackFunction(void* pInstance, MS_BOOL bRBPfunctionFlag)
9455*53ee8cc1Swenshuai.xi {
9456*53ee8cc1Swenshuai.xi void* pModule = NULL;
9457*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9458*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9459*53ee8cc1Swenshuai.xi
9460*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
9461*53ee8cc1Swenshuai.xi
9462*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9463*53ee8cc1Swenshuai.xi {
9464*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9465*53ee8cc1Swenshuai.xi }
9466*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9467*53ee8cc1Swenshuai.xi {
9468*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9469*53ee8cc1Swenshuai.xi }
9470*53ee8cc1Swenshuai.xi else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9471*53ee8cc1Swenshuai.xi {
9472*53ee8cc1Swenshuai.xi if(bRBPfunctionFlag)
9473*53ee8cc1Swenshuai.xi {
9474*53ee8cc1Swenshuai.xi SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RBP_FUNCTION_FLAG);
9475*53ee8cc1Swenshuai.xi }
9476*53ee8cc1Swenshuai.xi }
9477*53ee8cc1Swenshuai.xi
9478*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9479*53ee8cc1Swenshuai.xi }
9480*53ee8cc1Swenshuai.xi
9481*53ee8cc1Swenshuai.xi //**************************************************************************
9482*53ee8cc1Swenshuai.xi // [Function Name]:
9483*53ee8cc1Swenshuai.xi // mdrv_mhl_GetConfiguration()
9484*53ee8cc1Swenshuai.xi // [Description]
9485*53ee8cc1Swenshuai.xi // MHL get init config
9486*53ee8cc1Swenshuai.xi // [Arguments]:
9487*53ee8cc1Swenshuai.xi //
9488*53ee8cc1Swenshuai.xi // [Return]:
9489*53ee8cc1Swenshuai.xi //
9490*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetConfiguration(void * pInstance)9491*53ee8cc1Swenshuai.xi stMHL_INITIAL_CONFIG_INFO mdrv_mhl_GetConfiguration(void* pInstance)
9492*53ee8cc1Swenshuai.xi {
9493*53ee8cc1Swenshuai.xi void* pModule = NULL;
9494*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9495*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
9496*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9497*53ee8cc1Swenshuai.xi stMHL_INITIAL_CONFIG_INFO stInitialConfigInfo = {0};
9498*53ee8cc1Swenshuai.xi
9499*53ee8cc1Swenshuai.xi stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_ERR_NOT_AVAIL;
9500*53ee8cc1Swenshuai.xi
9501*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9502*53ee8cc1Swenshuai.xi {
9503*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9504*53ee8cc1Swenshuai.xi }
9505*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9506*53ee8cc1Swenshuai.xi {
9507*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9508*53ee8cc1Swenshuai.xi }
9509*53ee8cc1Swenshuai.xi else
9510*53ee8cc1Swenshuai.xi {
9511*53ee8cc1Swenshuai.xi if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
9512*53ee8cc1Swenshuai.xi {
9513*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
9514*53ee8cc1Swenshuai.xi }
9515*53ee8cc1Swenshuai.xi
9516*53ee8cc1Swenshuai.xi if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
9517*53ee8cc1Swenshuai.xi {
9518*53ee8cc1Swenshuai.xi stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_SUCCESS;
9519*53ee8cc1Swenshuai.xi stInitialConfigInfo.ucMHLSupportPath = pMHLResourcePrivate->ucMHLSupportPath;
9520*53ee8cc1Swenshuai.xi
9521*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < (MHL_DEVICE_CAPABILITY_SIZE +MHL_XDEVICE_CAPABILITY_SIZE); uctemp++)
9522*53ee8cc1Swenshuai.xi {
9523*53ee8cc1Swenshuai.xi stInitialConfigInfo.ucDeviceCapabilityTable[uctemp] = pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp];
9524*53ee8cc1Swenshuai.xi }
9525*53ee8cc1Swenshuai.xi }
9526*53ee8cc1Swenshuai.xi }
9527*53ee8cc1Swenshuai.xi
9528*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9529*53ee8cc1Swenshuai.xi
9530*53ee8cc1Swenshuai.xi return stInitialConfigInfo;
9531*53ee8cc1Swenshuai.xi }
9532*53ee8cc1Swenshuai.xi
9533*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
9534*53ee8cc1Swenshuai.xi //**************************************************************************
9535*53ee8cc1Swenshuai.xi // [Function Name]:
9536*53ee8cc1Swenshuai.xi // mdrv_mhl_MDCMDEchoCommand()
9537*53ee8cc1Swenshuai.xi // [Description]
9538*53ee8cc1Swenshuai.xi // MHL MDCMD echo command function
9539*53ee8cc1Swenshuai.xi // [Arguments]:
9540*53ee8cc1Swenshuai.xi //
9541*53ee8cc1Swenshuai.xi // [Return]:
9542*53ee8cc1Swenshuai.xi //
9543*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MDCMDEchoCommand(void * pInstance,MS_U64 * u64ReqHdl,char * pcCmdLine)9544*53ee8cc1Swenshuai.xi void mdrv_mhl_MDCMDEchoCommand(void* pInstance, MS_U64* u64ReqHdl, char* pcCmdLine)
9545*53ee8cc1Swenshuai.xi {
9546*53ee8cc1Swenshuai.xi char pch[] = "=,";
9547*53ee8cc1Swenshuai.xi char* psep;
9548*53ee8cc1Swenshuai.xi
9549*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "LINE:%d, MDBCMD_CMDLINE\n", __LINE__);
9550*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "pcCmdLine: %s\n", pcCmdLine);
9551*53ee8cc1Swenshuai.xi
9552*53ee8cc1Swenshuai.xi psep = strsep(&pcCmdLine, pch);
9553*53ee8cc1Swenshuai.xi
9554*53ee8cc1Swenshuai.xi if(strncmp("MHLOn", psep, 5) == 0)
9555*53ee8cc1Swenshuai.xi {
9556*53ee8cc1Swenshuai.xi
9557*53ee8cc1Swenshuai.xi }
9558*53ee8cc1Swenshuai.xi }
9559*53ee8cc1Swenshuai.xi
9560*53ee8cc1Swenshuai.xi //**************************************************************************
9561*53ee8cc1Swenshuai.xi // [Function Name]:
9562*53ee8cc1Swenshuai.xi // mdrv_mhl_MDCMDGetInfo()
9563*53ee8cc1Swenshuai.xi // [Description]
9564*53ee8cc1Swenshuai.xi // MHL MDCMD get info function
9565*53ee8cc1Swenshuai.xi // [Arguments]:
9566*53ee8cc1Swenshuai.xi //
9567*53ee8cc1Swenshuai.xi // [Return]:
9568*53ee8cc1Swenshuai.xi //
9569*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MDCMDGetInfo(void * pInstance,MS_U64 * u64ReqHdl)9570*53ee8cc1Swenshuai.xi void mdrv_mhl_MDCMDGetInfo(void* pInstance, MS_U64* u64ReqHdl)
9571*53ee8cc1Swenshuai.xi {
9572*53ee8cc1Swenshuai.xi void* pModule = NULL;
9573*53ee8cc1Swenshuai.xi void* pMHLResource = NULL;
9574*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9575*53ee8cc1Swenshuai.xi
9576*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9577*53ee8cc1Swenshuai.xi {
9578*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9579*53ee8cc1Swenshuai.xi }
9580*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9581*53ee8cc1Swenshuai.xi {
9582*53ee8cc1Swenshuai.xi MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9583*53ee8cc1Swenshuai.xi }
9584*53ee8cc1Swenshuai.xi else
9585*53ee8cc1Swenshuai.xi {
9586*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "LINE:%d, MDBCMD_GETINFO\n", __LINE__);
9587*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "---------------- Mstar MHL Info -----------------\n");
9588*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Debug Cbus:\n");
9589*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Cable detect flag: %d\n", GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG));
9590*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Cbus connect flag: %d\n", GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG));
9591*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "System index info: 0x%x\n", pMHLResourcePrivate->ulSystemIndex);
9592*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Timer index info: 0x%x\n", pMHLResourcePrivate->ulTimerIndex);
9593*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Enable index info: 0x%x\n", pMHLResourcePrivate->ulEnableIndex);
9594*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Cbus receive info: 0x%x\n", pMHLResourcePrivate->ulCbusReceiveIndex);
9595*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Cbus send info: 0x%x\n", pMHLResourcePrivate->ulCbusSendIndex);
9596*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Debug eCbus:\n");
9597*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "eCbus state: %d\n", pMHLResourcePrivate->ucECbusState);
9598*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Debug PHY:\n");
9599*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "TMDS clock mode: %d\n", pMHLResourcePrivate->ucTMDSClockMode);
9600*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Main link rate: %d\n", pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate);
9601*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Clock stable flag: %d\n", pMHLResourcePrivate->stSignalStatusInfo.bClockStableFlag);
9602*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "Signal stable flag: %d\n", pMHLResourcePrivate->stSignalStatusInfo.bSignalStableFlag);
9603*53ee8cc1Swenshuai.xi }
9604*53ee8cc1Swenshuai.xi
9605*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pMHLResource);
9606*53ee8cc1Swenshuai.xi }
9607*53ee8cc1Swenshuai.xi
9608*53ee8cc1Swenshuai.xi #endif
9609*53ee8cc1Swenshuai.xi
9610*53ee8cc1Swenshuai.xi #endif
9611*53ee8cc1Swenshuai.xi
9612*53ee8cc1Swenshuai.xi #endif // _MDRV_MHL_C_
9613