Example #1
0
int mdp_fb_mirror(struct mdp_device *mdp_dev,
		struct fb_info *src_fb, struct fb_info *dst_fb,
		struct mdp_blit_req *req)
{
	int ret;
	struct mdp_info *mdp = container_of(mdp_dev, struct mdp_info, mdp_dev);

	if (!src_fb || !dst_fb)
		return -EINVAL;
	mdp->enable_irq(mdp, DL0_ROI_DONE);
	ret = process_blit(mdp, req, (struct file *)-1, src_fb->fix.smem_start,
			src_fb->fix.smem_len, (struct file *)-1,
			dst_fb->fix.smem_start, dst_fb->fix.smem_len);
	if (ret)
		goto err_bad_blit;

	ret = mdp_ppp_wait(mdp);
	if (ret) {
		PR_DISP_ERR("mdp_ppp_wait error\n");
		goto err_wait_failed;
	}
	return 0;

err_bad_blit:
	mdp->disable_irq(mdp, DL0_ROI_DONE);

err_wait_failed:
	return ret;
}
Example #2
0
int mdp_ppp_blit_and_wait(struct mdp_info *mdp, struct mdp_blit_req *req,
		struct file *src_file, unsigned long src_start, unsigned long src_len,
		struct file *dst_file, unsigned long dst_start, unsigned long dst_len)
{
	int ret;
	mdp->enable_irq(mdp, DL0_ROI_DONE);
	ret = process_blit(mdp, req, src_file, src_start, src_len,
			   dst_file, dst_start, dst_len);
	if (unlikely(ret)) {
		mdp->disable_irq(mdp, DL0_ROI_DONE);
		return ret;
	}
	ret = mdp_ppp_wait(mdp);
	if (unlikely(ret)) {
		printk(KERN_ERR "%s: failed!\n", __func__);
		pr_err("original request:\n");
		dump_req(mdp->req, src_start, src_len, dst_start, dst_len);
		pr_err("dead request:\n");
		dump_req(req, src_start, src_len, dst_start, dst_len);
		BUG();
		return ret;
	}
	return 0;
}