Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32d640de authored by Archit Taneja's avatar Archit Taneja Committed by Mauro Carvalho Chehab
Browse files

[media] omap_vout: Set DSS overlay_info only if paddr is non zero



The omap_vout driver tries to set the DSS overlay_info using set_overlay_info()
when the physical address for the overlay is still not configured. This happens
in omap_vout_probe() and vidioc_s_fmt_vid_out().
The calls to omapvid_init(which internally calls set_overlay_info()) are removed
from these functions. They don't need to be called as the omap_vout_device
struct anyway maintains the overlay related changes made. Also, remove the
explicit call to set_overlay_info() in vidioc_streamon(), this was used to set
the paddr, this isn't needed as omapvid_init() does the same thing later.
These changes are required as the DSS2 driver since 3.3 kernel doesn't let you
set the overlay info with paddr as 0.

Signed-off-by: default avatarArchit Taneja <archit@ti.com>
Tested-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 4e44cd08
Loading
Loading
Loading
Loading
+5 −31
Original line number Original line Diff line number Diff line
@@ -1174,13 +1174,6 @@ static int vidioc_s_fmt_vid_out(struct file *file, void *fh,
	/* set default crop and win */
	/* set default crop and win */
	omap_vout_new_format(&vout->pix, &vout->fbuf, &vout->crop, &vout->win);
	omap_vout_new_format(&vout->pix, &vout->fbuf, &vout->crop, &vout->win);


	/* Save the changes in the overlay strcuture */
	ret = omapvid_init(vout, 0);
	if (ret) {
		v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode\n");
		goto s_fmt_vid_out_exit;
	}

	ret = 0;
	ret = 0;


s_fmt_vid_out_exit:
s_fmt_vid_out_exit:
@@ -1684,20 +1677,6 @@ static int vidioc_streamon(struct file *file, void *fh, enum v4l2_buf_type i)


	omap_dispc_register_isr(omap_vout_isr, vout, mask);
	omap_dispc_register_isr(omap_vout_isr, vout, mask);


	for (j = 0; j < ovid->num_overlays; j++) {
		struct omap_overlay *ovl = ovid->overlays[j];

		if (ovl->get_device(ovl)) {
			struct omap_overlay_info info;
			ovl->get_overlay_info(ovl, &info);
			info.paddr = addr;
			if (ovl->set_overlay_info(ovl, &info)) {
				ret = -EINVAL;
				goto streamon_err1;
			}
		}
	}

	/* First save the configuration in ovelray structure */
	/* First save the configuration in ovelray structure */
	ret = omapvid_init(vout, addr);
	ret = omapvid_init(vout, addr);
	if (ret)
	if (ret)
@@ -2094,11 +2073,12 @@ static int __init omap_vout_create_video_devices(struct platform_device *pdev)
		}
		}
		video_set_drvdata(vfd, vout);
		video_set_drvdata(vfd, vout);


		/* Configure the overlay structure */
		dev_info(&pdev->dev, ": registered and initialized"
		ret = omapvid_init(vid_dev->vouts[k], 0);
				" video device %d\n", vfd->minor);
		if (!ret)
		if (k == (pdev->num_resources - 1))
			goto success;
			return 0;


		continue;
error2:
error2:
		if (vout->vid_info.rotation_type == VOUT_ROT_VRFB)
		if (vout->vid_info.rotation_type == VOUT_ROT_VRFB)
			omap_vout_release_vrfb(vout);
			omap_vout_release_vrfb(vout);
@@ -2108,12 +2088,6 @@ static int __init omap_vout_create_video_devices(struct platform_device *pdev)
error:
error:
		kfree(vout);
		kfree(vout);
		return ret;
		return ret;

success:
		dev_info(&pdev->dev, ": registered and initialized"
				" video device %d\n", vfd->minor);
		if (k == (pdev->num_resources - 1))
			return 0;
	}
	}


	return -ENODEV;
	return -ENODEV;