cbus_app.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. //***************************************************************************
  2. //!file app_cbus.c
  3. //!brief Wraps board and device functions for the CBUS component
  4. // and the application
  5. //
  6. //***************************************************************************/
  7. #include <linux/kernel.h> /* printk */
  8. #include <linux/string.h>
  9. #include "drv_types.h"
  10. #include "cbus_app.h"
  11. #include "cbus_mid.h"
  12. #include "cbus_drv.h"
  13. #include <drv2kmf.h>
  14. #include <drv_event.h>
  15. #include "../hdmi_hw.h"
  16. #include "../hdmi_cfg.h"
  17. #include "../../../module_include/drv_hdmi_internal.h"
  18. //#include "../hdmi_hpd.h"
  19. #include "../hdmi_notice.h"
  20. #include "../sysreg.h"
  21. #include "../hdmi_time.h"
  22. #include "../hdmi_processing.h"
  23. #include "mhl_application.h"
  24. //#include <linux/string.h>
  25. //#include "pin_config.h"
  26. #include "../../../module_include/drv_gpio.h"
  27. //#include "drivers/drv_hdmi.h"
  28. //#include "pin_allocator.h"
  29. //------------------------------------------------------------------------------
  30. // Module variables
  31. //------------------------------------------------------------------------------
  32. static CBUS_APP_FSM_STATE_e eCbusAppState = CBUS_APP_FSM_UNATTACHED, eCbusAppNextState = CBUS_APP_FSM_UNATTACHED;
  33. static UINT32 HPDWaitConnectedCnt = 0;
  34. static UINT32 WaitDiscvCnt = 0;
  35. static UINT32 WaitPllCnt= 0;
  36. static UINT32 WaitHDCPCnt= 0;
  37. static MHLAppInstanceData_t MHLAppInstanceData=
  38. {
  39. 0, // statusFlags
  40. // CBUS App-specific
  41. FALSE, // discvDetect;
  42. FALSE, //srcDiscont;
  43. FALSE, //cbusCableSense
  44. FALSE, //Cbus connected
  45. };
  46. MHLAppInstanceData_t *pMHLApp = &MHLAppInstanceData;
  47. void CbusAppInitialize(void)
  48. {
  49. eCbusAppNextState = CBUS_APP_FSM_UNATTACHED;
  50. }
  51. //------------------------------------------------------------------------------
  52. // Function: CbusAppProcessRecvRcpMsg
  53. // Description: Process the passed RCP message.
  54. // Returns: The RCPK status code.
  55. //------------------------------------------------------------------------------
  56. static UINT8 CbusAppProcessRecvRcpMsg(MHL_RCP_CMD_e rcpData)
  57. {
  58. MHL_RCPE_STATUS_e rcpkStatus = MHL_MSC_MSG_RCP_NO_ERROR;
  59. mhldbg("[%s] RCP Key Code: 0x%02X\n", __FUNCTION__, (INT32)rcpData);
  60. switch ( rcpData )
  61. {
  62. case MHL_RCP_CMD_SELECT:
  63. printk("[MHL]SELECT received\n" );
  64. break;
  65. case MHL_RCP_CMD_UP:
  66. printk("[MHL]UP received\n" );
  67. break;
  68. case MHL_RCP_CMD_DOWN:
  69. printk("[MHL]DOWN received\n" );
  70. break;
  71. case MHL_RCP_CMD_ROOT_MENU:
  72. printk("[MHL]ROOT_MENU received\n" );
  73. break;
  74. case MHL_RCP_CMD_EXIT:
  75. printk("[MHL]EXIT received\n" );
  76. break;
  77. case MHL_RCP_CMD_VOL_UP:
  78. printk("[MHL]VOL_UP received\n" );
  79. break;
  80. case MHL_RCP_CMD_VOL_DOWN:
  81. printk("[MHL]VOL_DOWN received\n" );
  82. break;
  83. default:
  84. printk("[MHL] un-support RCP key received 0x%x\n", rcpData);
  85. rcpkStatus = MHL_MSC_MSG_INEFFECTIVE_KEY_CODE;
  86. break;
  87. }
  88. if ( rcpkStatus == MHL_MSC_MSG_RCP_NO_ERROR )
  89. {
  90. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_MHL_RCP_CMD, (UINT8 *)&rcpData, sizeof(MHL_RCP_CMD_e));
  91. }
  92. return( rcpkStatus );
  93. }
  94. //------------------------------------------------------------------------------
  95. // Function: CbusAppProcessRecvRapMsg
  96. // Description: Process the passed RAP message.
  97. // Returns: The RAPK status code.
  98. //------------------------------------------------------------------------------
  99. static MHL_RAPE_STATUS_e CbusAppProcessRecvRapMsg(MHL_RAP_SUBCMD_e rapData)
  100. {
  101. MHL_RAPE_STATUS_e rapkStatus = MHL_MSC_MSG_RAP_NO_ERROR;
  102. mhldbg("[%s] RAP Key Code: 0x%02X\n", __FUNCTION__, (INT32)rapData);
  103. switch ( rapData )
  104. {
  105. case MHL_RAP_CMD_POLL:
  106. mhldbg("POLL received\n" );
  107. break;
  108. case MHL_RAP_CONTENT_ON:
  109. mhldbg("Change TO CONTENT_ON STATE received\n" );
  110. HDMI_NoticeHandler(HDMINOTICE_MHL_CONTENT_ON, "MHL_RAP_CONTENT_ON");
  111. break;
  112. case MHL_RAP_CONTENT_OFF:
  113. mhldbg("Change TO CONTENT_OFF STATE received\n" );
  114. HDMI_NoticeHandler(HDMINOTICE_MHL_CONTENT_OFF, "MHL_RAP_CONTENT_OFF");
  115. break;
  116. default:
  117. rapkStatus = MHL_MSC_MSG_RAP_UNRECOGNIZED_ACT_CODE;
  118. mhldbg("Action Code not recognized !! \n" );
  119. break;
  120. }
  121. return( rapkStatus );
  122. }
  123. //------------------------------------------------------------------------------
  124. // Function: CbusAppProcessPrivateMessage
  125. // Description: Get the result of the last message sent and use it appropriately
  126. // or process a request from the connected device.
  127. // Parameters: channel - CBUS channel that has message data for us.
  128. //------------------------------------------------------------------------------
  129. static void CbusAppProcessPrivateMessage(void)
  130. {
  131. UINT8 status;
  132. //cbus_req_t cmdRequest;
  133. UINT8 bCmdType, bData;
  134. //CbusMidRequestDataGet( &cmdRequest);
  135. if(CbusMidRequestDataGet( &bCmdType, &bData) == ERROR_INVALID)
  136. return;
  137. //mhldbg("[%s] received 0x%x 0x%x\n", __FUNCTION__, bCmdType, bData);
  138. switch ( bCmdType )
  139. {
  140. case MHL_MSC_MSG_RCP:
  141. /* Acknowledge receipt of command and process it. Note that */
  142. /* we could send the ack before processing anything, because it */
  143. /* is an indicator that the command was properly received, not */
  144. /* that it was executed, however, we use one function to parse */
  145. /* the command for errors AND for processing. The only thing we */
  146. /* must do is make sure that the processing does not exceed the */
  147. /* ACK response time limit. */
  148. status = CbusAppProcessRecvRcpMsg( bData );
  149. //RCP ACK by HW
  150. //CbusRcpMessageAck(status, cmdRequest.offsetData );
  151. break;
  152. case MHL_MSC_MSG_RCPK:
  153. break;
  154. case MHL_MSC_MSG_RCPE:
  155. break;
  156. case MHL_MSC_MSG_RAP:
  157. status = CbusAppProcessRecvRapMsg( bData );
  158. CbusMidRapMessageAck(status );
  159. break;
  160. case MHL_MSC_MSG_RAPK:
  161. break;
  162. default:
  163. break;
  164. }
  165. }
  166. //------------------------------------------------------------------------------
  167. // Function: CbusAppDeviceInit
  168. // Description: Perform any board-level initialization required at the same
  169. // time as CBUS component initialization
  170. // Parameters: none
  171. // Returns: none
  172. //------------------------------------------------------------------------------
  173. void CbusAppDeviceInit(void)
  174. {
  175. mhldbg("[%s]\n", __FUNCTION__);
  176. CbusAppInitialize();
  177. CbusMidInitialize();
  178. CbusDrvInitialize();
  179. }
  180. void DRV_MHL_GetMHLAppInstanceData(MHLAppInstanceData_t * pMHLdata)
  181. {
  182. if(NULL == pMHLdata)
  183. return;
  184. memset(pMHLdata,0x0,sizeof(MHLAppInstanceData_t));
  185. memcpy(pMHLdata,pMHLApp,sizeof(MHLAppInstanceData_t));
  186. mhldbg("[%s] MHLConnected: %d \n", __FUNCTION__,pMHLApp->cbusConnected);
  187. //* Start MHL CBUS Work */
  188. MHL_CBUS_Work_Enable(TRUE);
  189. }
  190. //------------------------------------------------------------------------------
  191. // Function: CbusAppTask
  192. // Description: Wrapper for the CBUS Component at the application level
  193. // Parameters: none
  194. // Returns: none
  195. //------------------------------------------------------------------------------
  196. void CbusAppTask(void)
  197. {
  198. // UINT8 status;
  199. BOOL fCbusConnected=FALSE;
  200. static UINT8 hdmi_source_change=0;
  201. // Check for any interrupt.
  202. CbusDrvProcessInterrupts();
  203. MHLTaskInterruptMonitor();
  204. /* Monitor all CBUS channels. */
  205. CbusMidHandler(); // Monitor CBUS interrupts.
  206. /* do something at changing state once */
  207. if(eCbusAppState != eCbusAppNextState)
  208. {
  209. mhldbg("[%s] state:%d -> %d\n", __FUNCTION__, eCbusAppState, eCbusAppNextState);
  210. switch(eCbusAppNextState)
  211. {
  212. case CBUS_APP_FSM_UNATTACHED:
  213. CbusMidInitialize();
  214. if(GPIOGetValueByPinFunc(GPIO_PIN_MHL_CD_SENSE_DETECT)==0)
  215. {
  216. MHLTaskCableDetect(FALSE);
  217. fCbusConnected=FALSE;
  218. HPDWaitConnectedCnt=0;
  219. WaitDiscvCnt =0;
  220. WaitPllCnt=0;
  221. WaitHDCPCnt=0;
  222. hdmi_source_change=0;
  223. }
  224. pMHLApp->cbusConnected =fCbusConnected ;
  225. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_MHL_CONNECTED, &fCbusConnected, sizeof(BOOL));
  226. break;
  227. case CBUS_APP_FSM_ATTATCHED:
  228. MHLTaskCableDetect(TRUE);
  229. break;
  230. case CBUS_APP_FSM_CONNECTED:
  231. WaitDiscvCnt = 51;
  232. CbusMidSetDevCapReadyBit(FALSE);
  233. fCbusConnected=TRUE;
  234. HPDWaitConnectedCnt=0;
  235. pMHLApp->cbusConnected =fCbusConnected ;
  236. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_MHL_CONNECTED, &fCbusConnected, sizeof(BOOL));
  237. mhldbg("[%s] KMF2UMF_EVTYPE_HDMI_MHL_CONNECTED :%d\n", __FUNCTION__ ,fCbusConnected);
  238. /* Remove no signal timer */
  239. hdmi_signal_check_stop();
  240. break;
  241. case CBUS_APP_FSM_PATH_ENABLED:
  242. break;
  243. default:
  244. break;
  245. }
  246. eCbusAppState = eCbusAppNextState;
  247. }
  248. if (CbusMidGet_HPD_Status()==FALSE)
  249. {
  250. if((eCbusAppState >= CBUS_APP_FSM_CONNECTED) && (pMHLApp->cbusCableSense == TRUE))
  251. {
  252. HPDWaitConnectedCnt++;
  253. }
  254. if(HPDWaitConnectedCnt>100)// *10ms
  255. {
  256. mhldbg("[%s] CbusMidSendCommand(MHL_SET_HPD)\n", __FUNCTION__);
  257. CbusMidSendCommand(MHL_SET_HPD);
  258. HPDWaitConnectedCnt=0;
  259. }
  260. }
  261. else
  262. {
  263. HPDWaitConnectedCnt=0;
  264. }
  265. /* 1. check status to change state machine
  266. 2. check received RCP & RAP after PATH_EN*/
  267. switch(eCbusAppState)
  268. {
  269. case CBUS_APP_FSM_UNATTACHED:
  270. if(pMHLApp->cbusCableSense == TRUE)
  271. eCbusAppNextState = CBUS_APP_FSM_ATTATCHED;
  272. break;
  273. case CBUS_APP_FSM_ATTATCHED: //have CD_SENSE
  274. if(WaitDiscvCnt<=50)// *10ms
  275. {
  276. mhldbg("WaitDiscvCnt=%d.\n",WaitDiscvCnt);
  277. if(WaitDiscvCnt==50)
  278. {
  279. mhldbg("WaitDiscvCnt=%d=>MHL_VbusToggle().\n",WaitDiscvCnt);
  280. //sysset_Cbus_Z_CBUS_SINK_DISCOVER(Z_CBUS_SINK_DISCOVER_CFG_OFF);
  281. MHL_VbusToggle();
  282. //sysset_Cbus_Z_CBUS_SINK_DISCOVER(Z_CBUS_SINK_DISCOVER_CFG_HARDWARE_AUTO);
  283. }
  284. WaitDiscvCnt++;
  285. }
  286. else
  287. {
  288. WaitDiscvCnt++;
  289. if((WaitDiscvCnt%100)==0){ mhldbg("WaitDiscvCnt=%d.\n",WaitDiscvCnt);}
  290. if((WaitDiscvCnt%500)==0)
  291. {
  292. mhldbg("WaitDiscvCnt=%d=>MHL_VbusToggle().\n",WaitDiscvCnt);
  293. MHL_VbusToggle();
  294. HDMI_RegisterWrite(CTRLI_303_272__DW_001C,0x80000000);//auto mode
  295. }
  296. }
  297. break;
  298. case CBUS_APP_FSM_CONNECTED: //got discovery pulse
  299. if(CbusMidSendPathEn_RcvdAck())
  300. {
  301. eCbusAppNextState = CBUS_APP_FSM_PATH_ENABLED;
  302. CbusMidGetSrcDevCap(TRUE);//Get source's device capability
  303. }
  304. else
  305. {
  306. if((CbusMidGetDevCapReadyBit() == FALSE) && (DrvHDMIPortSelectBitsGet()==CONFIG_HDMI_MHL_PORT))
  307. CbusMidSendDcapRdyMsg(); //send DCAP_CHG DCAP_RDY PATH_EN
  308. }
  309. break;
  310. case CBUS_APP_FSM_PATH_ENABLED: //source sent PATH_EN
  311. //source's device capability changed, fetch it
  312. if(CbusDrvDevCapChangedGet() == TRUE)
  313. {
  314. CbusMidGetSrcDevCap(TRUE);
  315. }
  316. else
  317. {
  318. CbusMidGetSrcDevCap(FALSE);
  319. }
  320. //process received RCP or RAP command
  321. CbusAppProcessPrivateMessage();
  322. if((CbusMidGetDevCapReceiveDone()==TRUE)&&(DrvHDMIPortSelectBitsGet()==CONFIG_HDMI_MHL_PORT))
  323. {
  324. if(hdmi_source_change==1)
  325. {
  326. hdmi_source_change=0;
  327. if(CbusMidGetAdoptID()==ADOPTER_ID_HTC)
  328. {
  329. if (CbusMidGet_HPD_Status()==TRUE)
  330. CbusMidSendCommand(MHL_CLR_HPD);
  331. }
  332. }
  333. if((0 == HDMI_RegisterRead(HDMIRX_PHYPLLLOCK)) && (0 == HDMI_RegisterRead(HDMIRX_IN_RANGE)))
  334. {
  335. if ( ADOPTER_ID_SIMPLAY != CbusMidGetAdoptID()) // ignore mexiu
  336. {
  337. if(WaitPllCnt<=150)// *10ms
  338. {
  339. if((WaitPllCnt%10) == 0){mhldbg("WaitPllCnt=%d.\n",WaitPllCnt);}
  340. if(WaitPllCnt==150)
  341. {
  342. mhldbg("WaitPllCnt=%d=>hdmi_set_termination().\n",WaitPllCnt);
  343. if(CONFIG_HDMI_MHL_PORT==0)
  344. {
  345. hdmi_set_termination(DRV_HDMI_PORT_A, DRV_HPD_LEVEL_LOW);
  346. HDMI_DelayMs(500);
  347. hdmi_set_termination(DRV_HDMI_PORT_A, DRV_HPD_LEVEL_HIGH);
  348. }
  349. else if(CONFIG_HDMI_MHL_PORT==1)
  350. {
  351. hdmi_set_termination(DRV_HDMI_PORT_B, DRV_HPD_LEVEL_LOW);
  352. HDMI_DelayMs(500);
  353. hdmi_set_termination(DRV_HDMI_PORT_B, DRV_HPD_LEVEL_HIGH);
  354. }
  355. mhldbg("=>hdmi_set_termination().end.\n");
  356. }
  357. WaitPllCnt++;
  358. }
  359. }
  360. }
  361. //if((0 == HDMI_RegisterRead(HDMIRX_PHYPLLLOCK)) && (0 == HDMI_RegisterRead(HDMIRX_IN_RANGE)))
  362. if(0 == HDMI_RegisterRead(HDMIRX_PHYPLLLOCK))
  363. if(WaitHDCPCnt<=200)// *10ms
  364. {
  365. if((WaitHDCPCnt%10) == 0){mhldbg("WaitHDCPCnt=%d.\n",WaitHDCPCnt);}
  366. if(WaitHDCPCnt==200)
  367. {
  368. if(CbusMidGetAdoptID()==ADOPTER_ID_HTC)
  369. {
  370. mhldbg("WaitHDCPCnt=%d=>CbusMidSendCommand(MHL_CLR_HPD);\n",WaitHDCPCnt);
  371. CbusMidSendCommand(MHL_CLR_HPD);
  372. mhldbg("=>CbusMidSendCommand(MHL_CLR_HPD);).end.\n");
  373. }
  374. WaitHDCPCnt=0;
  375. }
  376. else
  377. WaitHDCPCnt++;
  378. }
  379. }
  380. if(DrvHDMIPortSelectBitsGet()!=CONFIG_HDMI_MHL_PORT)
  381. {
  382. hdmi_source_change = 1;
  383. }
  384. break;
  385. default:
  386. break;
  387. }
  388. if((pMHLApp->discvDetect == TRUE) && (eCbusAppState != CBUS_APP_FSM_UNATTACHED))
  389. {
  390. eCbusAppNextState = CBUS_APP_FSM_CONNECTED;
  391. pMHLApp->discvDetect = FALSE;
  392. }
  393. #if 1
  394. if((pMHLApp->srcDiscont == TRUE) && (eCbusAppState != CBUS_APP_FSM_UNATTACHED))
  395. {
  396. eCbusAppNextState = CBUS_APP_FSM_UNATTACHED;
  397. //WaitDiscvCnt =0;
  398. pMHLApp->srcDiscont = FALSE;
  399. }
  400. #endif
  401. /* if CableDetect is False, change to UNATTACHED state */
  402. if((eCbusAppState != CBUS_APP_FSM_UNATTACHED) && (pMHLApp->cbusCableSense == FALSE))
  403. eCbusAppNextState = CBUS_APP_FSM_UNATTACHED;
  404. }
  405. //------------------------------------------------------------------------------
  406. // Function: MHLTaskCableDetect
  407. // Description: MHLCableDetect at the application level
  408. // Parameters: none
  409. // Returns: none
  410. //------------------------------------------------------------------------------
  411. extern BOOL HAVE_MHL_ADOPTER_ID;
  412. void MHLTaskCableDetect(BOOL fCdSense)
  413. {
  414. if (fCdSense)//(MID_GPIO_GetGPIOInputLevel(GPIO_MHL_CD_SENSE))//Bryan@2013.0403 Need Config GPIO for MHL in IFH118
  415. {
  416. mhldbg("MHL cable connect is TRUE.\n");
  417. mhldbg("Cbus Reset Discovery Logic" );
  418. //CbusMidSetDevCapReadyBit(FALSE );
  419. HDMI_MHL_CABLE_IN(TRUE);
  420. #if 0
  421. /* Turn VBUS ON */
  422. if( MHL_ADOPTER_ID_Check()== FALSE)
  423. {
  424. mhldbg("=>TOGGLE MHL_VbusCtrl.\n");
  425. MHL_VbusCtrl(VBUS_DISABLE);
  426. HDMI_DelayMs(500);
  427. }
  428. #endif
  429. MHL_VbusCtrl(VBUS_ENABLE);
  430. #ifdef CONFIG_HDMI_MHL_PORT
  431. if( DrvHDMIPortSelectBitsGet()==CONFIG_HDMI_MHL_PORT)
  432. {
  433. //CbusMhlHpdSetState(CbusHPD_TOGGLE);//Bryan@20140506 Marked for MHL CTS 4.3.17.2
  434. HDMI_MHL_RxSense_Term_Debug(FALSE); //auto HDMI or MHL mode)
  435. if(CONFIG_HDMI_MHL_PORT==0)
  436. {
  437. //hdmi_set_termination(DRV_HDMI_PORT_A, DRV_HPD_LEVEL_HIGH);
  438. sysset_HDMI_HPD_1K_OnOff(HDMI_PORT_A, FALSE);
  439. sysset_HDMI_SW5V(HDMI_PORT_A, TRUE);
  440. }
  441. else if(CONFIG_HDMI_MHL_PORT==1)
  442. {
  443. //hdmi_set_termination(DRV_HDMI_PORT_B, DRV_HPD_LEVEL_HIGH);
  444. sysset_HDMI_HPD_1K_OnOff(HDMI_PORT_B, FALSE);
  445. sysset_HDMI_SW5V(HDMI_PORT_B, TRUE);
  446. }
  447. }
  448. else
  449. {
  450. HDMI_MHL_RxSense_Term_Debug(TRUE);
  451. }
  452. #endif
  453. }
  454. else
  455. {
  456. mhldbg("MHL cable connect is FALSE.\n");
  457. if(GPIOGetValueByPinFunc(GPIO_PIN_MHL_CD_SENSE_DETECT)==0)
  458. {
  459. mhldbg("=>MHL_VbusCtrl(VBUS_DISABLE).\n");
  460. MHL_VbusCtrl(VBUS_DISABLE);
  461. }
  462. HDMI_MHL_CABLE_IN(FALSE);
  463. #ifdef CONFIG_HDMI_MHL_PORT
  464. if( DrvHDMIPortSelectBitsGet()==CONFIG_HDMI_MHL_PORT)
  465. {
  466. HDMI_Set_PLL_Mode(HDMI_PLL_MODE_HDMI_ENABLE);
  467. HDMI_MHL_RxSense_Term_Debug(TRUE); //force HDMI mode for debug(not MHL mode)
  468. #ifdef HDMI_HPD_USE_1K_OHM
  469. if(CONFIG_HDMI_MHL_PORT==0)
  470. {
  471. //hdmi_set_termination(DRV_HDMI_PORT_A, DRV_HPD_LEVEL_LOW);
  472. sysset_HDMI_HPD_1K_OnOff(HDMI_PORT_A, TRUE);
  473. }
  474. else if(CONFIG_HDMI_MHL_PORT==1)
  475. {
  476. //hdmi_set_termination(DRV_HDMI_PORT_B, DRV_HPD_LEVEL_LOW);
  477. sysset_HDMI_HPD_1K_OnOff(HDMI_PORT_B, TRUE);
  478. }
  479. #endif
  480. }
  481. #endif
  482. }
  483. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_MHL_PLUG_STATE, &fCdSense, sizeof(BOOL));
  484. }
  485. //-------------------------------------------------------------------------------------------------
  486. //! @brief Monitors interrupts and notifies components that have received
  487. //! an interrupt.
  488. //-------------------------------------------------------------------------------------------------
  489. void MHLTaskInterruptMonitor(void)
  490. {
  491. CBUS_DRV_STATUS_e statusFlags;
  492. statusFlags =CbusDrvStatus();
  493. if ( statusFlags & CBUS_INT )// CBUS_INT
  494. {
  495. if ( statusFlags & CBUS_SRC_DISCONT_INT)// CBUS_SRC_DISCONT_INT
  496. {
  497. printk("[MHL]** CBUS_SRC_DISCONT_INT **\n");
  498. pMHLApp->srcDiscont=TRUE;
  499. eCbusAppState= 0;
  500. }
  501. if ( statusFlags & CBUS_DISCV_INT )// CBUS_DISCV_INT
  502. {
  503. printk("[MHL]** CBUS_DISCV_INT **\n");
  504. pMHLApp->discvDetect=TRUE;
  505. eCbusAppState= 0;
  506. }
  507. if ( statusFlags & CBUS_ATTACH_INT )// CBUS_ATTACH_INT
  508. {
  509. printk("[MHL]** CBUS_ATTACH_INT **\n");
  510. pMHLApp->cbusCableSense = TRUE;
  511. }
  512. else if ( statusFlags & CBUS_DEATCH_INT )// CBUS_DEATCH_INT
  513. {
  514. printk("[MHL]** CBUS_DEATCH_INT **\n");
  515. HAVE_MHL_ADOPTER_ID =FALSE;
  516. pMHLApp->cbusCableSense = FALSE;
  517. }
  518. }
  519. if((MHL_CD_SENSE_SEL() == FALSE)&&(pMHLApp->cbusCableSense = TRUE)&&(GPIOGetValueByPinFunc(GPIO_PIN_MHL_CD_SENSE_DETECT)==0))
  520. {
  521. HAVE_MHL_ADOPTER_ID =FALSE;
  522. pMHLApp->cbusCableSense = FALSE;
  523. }
  524. }