uint32_t hal_tui_activate(void) { // Protect NWd trustedui_clear_mask(TRUSTEDUI_MODE_VIDEO_SECURED|TRUSTEDUI_MODE_INPUT_SECURED); #ifdef CONFIG_TRUSTONIC_TRUSTED_UI_FB_BLANK pr_info("Unblanking\n"); fb_tui_unprotection(); #endif /* Clear linux TUI flag */ trustedui_set_mode(TRUSTEDUI_MODE_OFF); #ifdef CONFIG_TRUSTONIC_TRUSTED_UI_FB_BLANK pr_info("Unsetting TUI flag (blank counter=%d)", trustedui_blank_get_counter()); if (0 < trustedui_blank_get_counter()) { // blank_framebuffer(0); } #endif switch_set_state(&tui_switch, TRUSTEDUI_MODE_OFF); tui_i2c_reset(); enable_irq(tsp_irq_num); return TUI_DCI_OK; }
/* ------------------------------------------------------------- */ static void tlcProcessCmd(void) { uint32_t ret = TUI_DCI_ERR_INTERNAL_ERROR; uint32_t commandId = CMD_TUI_SW_NONE; pDci->cmdNwd.payload.allocData.numOfBuff = TUI_BUFFER_NUM; if (NULL == pDci) { pr_debug("ERROR tlcProcessCmd: DCI has not been set up properly - exiting\n"); return; } else { commandId = pDci->cmdNwd.id; } /* Warn if previous response was not acknowledged */ if (CMD_TUI_SW_NONE == commandId) { pr_debug("ERROR tlcProcessCmd: Notified without command\n"); return; } else { if (pDci->nwdRsp.id != CMD_TUI_SW_NONE) pr_debug("tlcProcessCmd: Warning, previous response not ack\n"); } /* Handle command */ switch (commandId) { case CMD_TUI_SW_OPEN_SESSION: printk(KERN_ERR "tlcProcessCmd: CMD_TUI_SW_OPEN_SESSION.\n"); /* Start android TUI activity */ ret = sendCmdToUser(TLC_TUI_CMD_START_ACTIVITY); if (TUI_DCI_OK == ret) { /* allocate TUI frame buffer */ ret = hal_tui_alloc(&pDci->nwdRsp.allocBuffer[MAX_DCI_BUFFER_NUMBER], pDci->cmdNwd.payload.allocData.allocSize, pDci->cmdNwd.payload.allocData.numOfBuff); printk(KERN_ERR "tlcProcessCmd: CMD_TUI_SW_OPEN_SESSION & disable_irq(%d);.\n",tsp_irq_num); disable_irq(tsp_irq_num); msleep(100); // temp code } hal_tui_video_space_alloc(); pDci->nwdRsp.allocBuffer[0].pa = g_sec_tuiMemPool.pa; pDci->nwdRsp.allocBuffer[1].pa = (g_sec_tuiMemPool.pa + g_sec_tuiMemPool.size/2); pDci->cmdNwd.payload.allocData.allocSize = g_sec_tuiMemPool.size; break; case CMD_TUI_SW_STOP_DISPLAY: printk(KERN_ERR "tlcProcessCmd: CMD_TUI_SW_STOP_DISPLAY.\n"); /* Deactivate linux UI drivers */ ret = hal_tui_deactivate(); break; case CMD_TUI_SW_CLOSE_SESSION: printk(KERN_ERR "tlcProcessCmd: CMD_TUI_SW_CLOSE_SESSION & enable_irq(%d).\n", tsp_irq_num); disable_irq(pwr_irq_num); /* Activate linux UI drivers */ ret = hal_tui_activate(); tui_i2c_reset(); enable_irq(tsp_irq_num); hal_tui_free(); enable_irq(pwr_irq_num); /* Stop android TUI activity */ ret = sendCmdToUser(TLC_TUI_CMD_STOP_ACTIVITY); break; default: pr_debug("ERROR tlcProcessCmd: Unknown command %d\n", commandId); break; } /* Fill in response to SWd, fill ID LAST */ pr_debug("tlcProcessCmd: return 0x%08x to cmd 0x%08x\n", ret, commandId); pDci->nwdRsp.returnCode = ret; pDci->nwdRsp.id = RSP_ID(commandId); /* Acknowledge command */ pDci->cmdNwd.id = CMD_TUI_SW_NONE; /* Notify SWd */ pr_debug("DCI RSP NOTIFY CORE\n"); ret = mc_notify(&drSessionHandle); if (MC_DRV_OK != ret) pr_debug("ERROR tlcProcessCmd: Notify failed: %d\n", ret); }