static void gsc_m2m_job_abort(void *priv) { struct gsc_ctx *ctx = priv; struct gsc_dev *gsc = ctx->gsc_dev; int ret; vb2_wait_for_all_buffers(v4l2_m2m_get_src_vq(ctx->m2m_ctx)); vb2_wait_for_all_buffers(v4l2_m2m_get_dst_vq(ctx->m2m_ctx)); ret = gsc_ctx_stop_req(ctx); /* FIXME: need to add v4l2_m2m_job_finish(fail) if ret is timeout */ if (ret < 0) dev_err(&gsc->pdev->dev, "wait timeout : %s\n", __func__); }
static int gsc_capture_stop_streaming(struct vb2_queue *q) { struct gsc_ctx *ctx = q->drv_priv; struct gsc_dev *gsc = ctx->gsc_dev; vb2_wait_for_all_buffers(q); return gsc_cap_stop_capture(gsc); }
static int gsc_m2m_stop_streaming(struct vb2_queue *q) { struct gsc_ctx *ctx = q->drv_priv; struct gsc_dev *gsc = ctx->gsc_dev; int ret; vb2_wait_for_all_buffers(q); ret = gsc_ctx_stop_req(ctx); /* FIXME: need to add v4l2_m2m_job_finish(fail) if ret is timeout */ if (ret < 0) dev_err(&gsc->pdev->dev, "wait timeout : %s\n", __func__); return 0; }
static void fthd_stop_streaming(struct vb2_queue *vq) { struct fthd_private *dev_priv = vb2_get_drv_priv(vq); struct h2t_buf_ctx *ctx; int ret, i; ret = fthd_stop_channel(dev_priv, 0); if (!ret) { pr_debug("waiting for buffers...\n"); vb2_wait_for_all_buffers(vq); pr_debug("done\n"); } else { /* Firmware doesn't respond. */ for(i = 0; i < FTHD_BUFFERS;i++) { ctx = dev_priv->h2t_bufs + i; if (ctx->state == BUF_DRV_QUEUED || ctx->state == BUF_HW_QUEUED) { vb2_buffer_done(ctx->vb, VB2_BUF_STATE_DONE); ctx->vb = NULL; ctx->state = BUF_ALLOC; } } } }