__s32 DRV_DISP_MExit(void) { __u8 err; BSP_disp_close(); BSP_disp_exit(g_disp_drv.exit_mode); #if DRV_VCOM_TIMER #if KNOB_USE_HW_TIMER if(g_vcom_timer_hdl) { esTIME_StopTimer(g_vcom_timer_hdl); esTIME_ReleaseTimer(g_vcom_timer_hdl); g_vcom_timer_hdl = NULL; } #else if (esKRNL_TmrStateGet(g_vcom_timer_hdl) == OS_TMR_STATE_RUNNING) { esKRNL_TmrStop(g_vcom_timer_hdl, OS_TMR_OPT_NONE, NULL); esKRNL_TmrDel(g_vcom_timer_hdl); g_vcom_timer_hdl = NULL; } #endif esPINS_PinGrpRel(vcom_io, 0); #endif esKRNL_SemDel(g_disp_drv.scaler_finished_sem[0], 0, &err); esKRNL_SemDel(g_disp_drv.scaler_finished_sem[1], 0, &err); return EPDK_OK; }
/** * 释放 touch panel 消息传输通道 */ __s32 msg_srv_deinit_tp_channel(__memit_ctr_t *emit) { __u8 err; /* 删除 psys_msg_queue */ esKRNL_QDel(emit->psys_msg_queue, 0, &err); emit->psys_msg_queue = NULL; /* 删除 p_array_sem */ esKRNL_SemDel(emit->p_array_sem, 0, &err); esKRNL_SemDel(emit->p_hook_sem, 0, &err); emit->p_array_sem = NULL; emit->p_hook_sem = NULL; emit->sys_msg_counter = 0; /* 注销回调函数 */ /*{ ES_FILE *p_tpfile; p_tpfile = eLIBs_fopen("b:\\HID\\TP", "r+"); if( !p_tpfile ) { __err(" open touchpanel driver error \n"); return EPDK_FAIL; } eLIBs_fioctrl(p_tpfile, DRV_TP_CMD_UNREG, 0, (void *)tp_msg_cb); eLIBs_fclose(p_tpfile); }*/ esINPUT_LdevRelease(emit_ctr.h_tpGraber); return EPDK_OK; }
void ve_release_clock(void) { u8 err; //register call-back fucntion for adjust ve clock esCLK_MclkUnregCb(CSP_CCM_MOD_CLK_VE, cb_ve_clock_change); //* release handle of VE clock gate. if(h_ve_clock) { esCLK_MclkOnOff(h_ve_clock, CLK_OFF); esCLK_CloseMclk(h_ve_clock); h_ve_clock = 0; } //* release handle of AHB to VE clock gate. if(h_ve_ahb_gate) { esCLK_MclkOnOff(h_ve_ahb_gate, CLK_OFF); esCLK_CloseMclk(h_ve_ahb_gate); h_ve_ahb_gate = 0; } //* release handle of DRAM to VE clock gate. if(h_ve_dram_gate) { esCLK_MclkOnOff(h_ve_dram_gate, CLK_OFF); esCLK_CloseMclk(h_ve_dram_gate); h_ve_dram_gate = 0; } //* delete semaphore if(sem_ve_clk_adjust) { esKRNL_SemDel(sem_ve_clk_adjust, OS_DEL_ALWAYS, &err); sem_ve_clk_adjust = NULL; } esINT_UniISR(INTC_IRQNO_MACC, (__pISR_t)ve_interrupt_service); if(sem_intr) { esKRNL_SemDel(sem_intr, OS_DEL_ALWAYS, &err); sem_intr = NULL; } if(h_ve_sram) { esMEM_SramRelBlk(h_ve_sram); h_ve_sram = 0; } return; }
s32 semaphore_delete(Handle h, u32 opt) { u8 err; if(opt == SEM_DEL_ALWAYS) opt = OS_DEL_ALWAYS; else opt = OS_DEL_NO_PEND; esKRNL_SemDel((__krnl_event_t*)h, opt, &err); if(err == 0) return 0; else return -1; }
void ve_init_clock(void) { u8 err; //* create semaphore for VE interrupt. sem_intr = esKRNL_SemCreate(0); if(sem_intr == NULL) return; //* create semaphore to sync adjust clock operation sem_ve_clk_adjust = esKRNL_SemCreate(1); if(sem_ve_clk_adjust == NULL) { esKRNL_SemDel(sem_intr, OS_DEL_ALWAYS, &err); sem_intr = NULL; return; } //* request handle of VE module clock h_ve_clock = esCLK_OpenMclk(CSP_CCM_MOD_CLK_VE); esCLK_MclkRegCb(CSP_CCM_MOD_CLK_VE, cb_ve_clock_change); //* request handle of AHB to VE clock gate. h_ve_ahb_gate = esCLK_OpenMclk(CSP_CCM_MOD_CLK_AHB_VE); //* request handle of DRAM to VE clock gate. h_ve_dram_gate = esCLK_OpenMclk(CSP_CCM_MOD_CLK_SDRAM_VE); //* set MACC clock source to video PLL. esCLK_SetMclkSrc(h_ve_clock, CSP_CCM_SYS_CLK_VE_PLL); esCLK_SetMclkDiv(h_ve_clock, 1); //* switch SRAM to MACC. h_ve_sram = esMEM_SramReqBlk(CSP_SRAM_ZONE_C1, SRAM_REQ_MODE_WAIT); esMEM_SramSwitchBlk(h_ve_sram, CSP_SRAM_MODULE_VE); //* enable MACC module clock esCLK_MclkOnOff(h_ve_clock, CLK_ON); esCLK_MclkOnOff(h_ve_ahb_gate, CLK_ON); esCLK_MclkOnOff(h_ve_dram_gate, CLK_ON); esINT_InsISR(INTC_IRQNO_MACC, (__pISR_t)ve_interrupt_service, 0); return; }