static void jpeg_drv_dec_deinit(void) { if(dec_status != 0) { spin_lock(&jpeg_dec_lock); dec_status = 0; spin_unlock(&jpeg_dec_lock); jpeg_drv_dec_reset(); jpeg_drv_dec_power_off(); } }
static void jpeg_drv_dec_deinit(void) { if(dec_status != 0) { #ifndef USE_SYSRAM if(table_buffer_va != 0) { dma_free_coherent(0, TABLE_SIZE, table_buffer_va, table_buffer_pa); table_buffer_va = 0; } #endif spin_lock(&jpeg_dec_lock); dec_status = 0; spin_unlock(&jpeg_dec_lock); jpeg_drv_dec_reset(); jpeg_drv_dec_power_off(); } }
/* workaround for jpeg odd read operation at cg gating state */ void jpeg_drv_dec_verify_state_and_reset(void) { unsigned int temp, value; IMG_REG_WRITE(0x00, REG_ADDR_JPGDEC_RESET); IMG_REG_WRITE(0x00, REG_ADDR_JPGDEC_RESET); IMG_REG_WRITE(0x10, REG_ADDR_JPGDEC_RESET); IMG_REG_WRITE(0x10, REG_ADDR_JPGDEC_RESET); IMG_REG_READ(temp, REG_ADDR_JPGDEC_ULTRA_THRES); IMG_REG_READ(value, REG_ADDR_JPGDEC_FILE_ADDR); /* issue happen, need to do 1 read at cg gating state */ if (value == 0xFFFFFFFF) { JPEG_MSG("JPGDEC APB R/W issue found, start to do recovery!\n"); jpeg_drv_dec_power_off(); IMG_REG_READ(value, REG_ADDR_JPGDEC_ULTRA_THRES); jpeg_drv_dec_power_on(); } _jpeg_dec_int_status = 0; _jpeg_dec_mode = 0; }
static void jpeg_drv_dec_deinit(void) { if(dec_status != 0) { #ifdef USE_SYSRAM if(table_buffer_pa != 0) { MT6573_SYSRAM_FREE(MT6573SYSRAMUSR_JPGDECODER); table_buffer_pa = 0; } #else if(table_buffer_va != 0) { dma_free_coherent(0, TABLE_SIZE, table_buffer_va, table_buffer_pa); table_buffer_va = 0; } #endif spin_lock(&jpeg_dec_lock); dec_status = 0; spin_unlock(&jpeg_dec_lock); jpeg_drv_dec_reset(); jpeg_drv_dec_power_off(); } }