/* Shut down the PVR chip from ready status, leaving it in 2D mode as it was before the init. */ int pvr_shutdown() { if(!pvr_state.valid) return -1; /* Set us invalid */ pvr_state.valid = 0; /* Stop anything that might be going on */ PVR_SET(PVR_RESET, PVR_RESET_ALL); PVR_SET(PVR_RESET, PVR_RESET_NONE); /* Unhook any int handlers */ vblank_handler_remove(pvr_state.vbl_handle); asic_evt_set_handler(ASIC_EVT_PVR_OPAQUEDONE, NULL); asic_evt_disable(ASIC_EVT_PVR_OPAQUEDONE, ASIC_IRQ_DEFAULT); asic_evt_set_handler(ASIC_EVT_PVR_OPAQUEMODDONE, NULL); asic_evt_disable(ASIC_EVT_PVR_OPAQUEMODDONE, ASIC_IRQ_DEFAULT); asic_evt_set_handler(ASIC_EVT_PVR_TRANSDONE, NULL); asic_evt_disable(ASIC_EVT_PVR_TRANSDONE, ASIC_IRQ_DEFAULT); asic_evt_set_handler(ASIC_EVT_PVR_TRANSMODDONE, NULL); asic_evt_disable(ASIC_EVT_PVR_TRANSMODDONE, ASIC_IRQ_DEFAULT); asic_evt_set_handler(ASIC_EVT_PVR_PTDONE, NULL); asic_evt_disable(ASIC_EVT_PVR_PTDONE, ASIC_IRQ_DEFAULT); asic_evt_set_handler(ASIC_EVT_PVR_RENDERDONE, NULL); asic_evt_disable(ASIC_EVT_PVR_RENDERDONE, ASIC_IRQ_DEFAULT); /* Shut down PVR DMA */ pvr_dma_shutdown(); /* Invalidate our memory pool */ pvr_mem_reset(); /* Destroy the semaphore */ sem_destroy((semaphore_t *)&pvr_state.ready_sem); mutex_destroy((mutex_t *)&pvr_state.dma_lock); /* Clear video memory */ vid_empty(); /* Reset the frame buffer offset */ vid_waitvbl(); vid_set_start(0); /* Return success */ return 0; }
void yuv_conv_shutdown() { asic_evt_disable(ASIC_EVT_PVR_YUV_DONE, ASIC_IRQ_DEFAULT); asic_evt_set_handler(ASIC_EVT_PVR_YUV_DONE, NULL); sem_destroy(&yuv_done); }