示例#1
0
void gsc_op_timer_handler(unsigned long arg)
{
	struct gsc_dev *gsc = (struct gsc_dev *)arg;
	struct gsc_ctx *ctx = v4l2_m2m_get_curr_priv(gsc->m2m.m2m_dev);
	struct vb2_buffer *src_vb, *dst_vb;

	if (!test_bit(ST_M2M_RUN, &gsc->state)) {
		gsc_warn("gsc state is 0x%lx", gsc->state);
		return;
	}

	gsc_dump_registers(gsc);

	clear_bit(ST_M2M_RUN, &gsc->state);
	pm_runtime_put(&gsc->pdev->dev);

	src_vb = v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
	dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
	if (src_vb && dst_vb) {
		v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_ERROR);
		v4l2_m2m_buf_done(dst_vb, VB2_BUF_STATE_ERROR);
	}
	gsc_err("GSCALER[%d] interrupt hasn't been triggered", gsc->id);
	gsc_err("erro ctx: %p, ctx->state: 0x%x", ctx, ctx->state);
}
示例#2
0
void gsc_op_timer_handler(unsigned long arg)
{
	struct gsc_dev *gsc = (struct gsc_dev *)arg;
	struct gsc_ctx *ctx = v4l2_m2m_get_curr_priv(gsc->m2m.m2m_dev);
	struct vb2_buffer *src_vb, *dst_vb;
#ifdef GSC_PERF
	gsc->end_time = sched_clock();
	gsc_err("expire time: %llu\n", gsc->end_time - gsc->start_time);
#endif
	gsc_dump_registers(gsc);
	exynos_iommu_dump_status(&gsc->pdev->dev);

	clear_bit(ST_M2M_RUN, &gsc->state);
	pm_runtime_put(&gsc->pdev->dev);
	gsc->runtime_put_cnt++;

	src_vb = v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
	dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
	if (src_vb && dst_vb) {
		v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_ERROR);
		v4l2_m2m_buf_done(dst_vb, VB2_BUF_STATE_ERROR);
	}
	gsc_err("GSCALER[%d] interrupt hasn't been triggered", gsc->id);
	gsc_err("erro ctx: %p, ctx->state: 0x%x", ctx, ctx->state);
}