/* Complete the transaction which has been scheduled for execution. */ static int fimc_m2m_shutdown(struct fimc_ctx *ctx) { struct fimc_dev *fimc = ctx->fimc_dev; int ret; if (!fimc_m2m_pending(fimc)) return 0; fimc_ctx_state_lock_set(FIMC_CTX_SHUT, ctx); ret = wait_event_timeout(fimc->irq_queue, !fimc_ctx_state_is_set(FIMC_CTX_SHUT, ctx), FIMC_SHUTDOWN_TIMEOUT); return ret == 0 ? -ETIMEDOUT : ret; }
/* Complete the transaction which has been scheduled for execution. */ static void fimc_m2m_shutdown(struct fimc_ctx *ctx) { struct fimc_dev *fimc = ctx->fimc_dev; int ret; if (!fimc_m2m_pending(fimc)) return; fimc_ctx_state_lock_set(FIMC_CTX_SHUT, ctx); ret = wait_event_timeout(fimc->irq_queue, !fimc_ctx_state_is_set(FIMC_CTX_SHUT, ctx), FIMC_SHUTDOWN_TIMEOUT); /* * In case of a timeout the buffers are not released in the interrupt * handler so return them here with the error flag set, if there are * any on the queue. */ if (ret == 0) fimc_m2m_job_finish(ctx, VB2_BUF_STATE_ERROR); }