summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2010-10-04 20:38:01 +0530
committerRicardo Perez Olivares <x0081762@ti.com>2010-10-04 17:20:00 -0500
commit7977bb1173459f83dc1c7557092c64f322b31aa4 (patch)
treec02725e596d084baf34f725c4480f5424228e358 /drivers/media
parentaf14f9ea2bf609ba874d65d271761cd7ea87c5f1 (diff)
DSS2/V4L2: Fail to register DSS isr if mainclk is diabled
Fail to register DSS isr's if mainclk is diabled since they write/read to DISPC registers. Signed-off-by: Archit Taneja <archit@ti.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/omap/omap_vout.c15
-rw-r--r--drivers/media/video/omap/omap_wb.c12
2 files changed, 23 insertions, 4 deletions
diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index 74dfab416740..df9dd620e2c9 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -2543,7 +2543,13 @@ static int vidioc_streamon(struct file *file, void *fh, enum v4l2_buf_type i)
if (vout->wb_enabled)
mask |= DISPC_IRQ_FRAMEDONE_WB;
- omap_dispc_register_isr(omap_vout_isr, vout, mask);
+ ret = omap_dispc_register_isr(omap_vout_isr, vout, mask);
+ if (ret) {
+ v4l2_err(&vout->vid_dev->v4l2_dev,
+ "failed to register vout_isr\n");
+ goto streamon_err1;
+ }
+
#ifdef CONFIG_PM
if (pdata->set_min_bus_tput) {
@@ -2616,7 +2622,12 @@ static int vidioc_streamoff(struct file *file, void *fh, enum v4l2_buf_type i)
if (vout->wb_enabled)
mask |= DISPC_IRQ_FRAMEDONE_WB;
- omap_dispc_unregister_isr(omap_vout_isr, vout, mask);
+ ret = omap_dispc_unregister_isr(omap_vout_isr, vout, mask);
+ if (ret) {
+ v4l2_err(&vout->vid_dev->v4l2_dev,
+ "failed to unregister vout_isr\n");
+ return ret;
+ }
for (j = 0; j < ovid->num_overlays; j++) {
struct omap_overlay *ovl = ovid->overlays[j];
diff --git a/drivers/media/video/omap/omap_wb.c b/drivers/media/video/omap/omap_wb.c
index 136b57c95c35..ca7480de0de1 100644
--- a/drivers/media/video/omap/omap_wb.c
+++ b/drivers/media/video/omap/omap_wb.c
@@ -442,6 +442,10 @@ static int vidioc_streamon(struct file *file, void *fh,
mask = DISPC_IRQ_FRAMEDONE_WB;
r = omap_dispc_register_isr(omap_wb_isr, wb, mask);
+ if (r) {
+ printk(KERN_ERR WB_NAME "Failed to register wb_isr\n");
+ return r;
+ }
r = omap_setup_wb(wb, addr, uv_addr);
if (r)
@@ -456,6 +460,7 @@ static int vidioc_streamoff(struct file *file, void *fh,
{
struct omap_wb_device *wb = fh;
u32 mask = 0;
+ int r = 0;
if (!wb->streaming)
return -EINVAL;
@@ -463,8 +468,11 @@ static int vidioc_streamoff(struct file *file, void *fh,
wb->streaming = 0;
mask = DISPC_IRQ_FRAMEDONE_WB;
- omap_dispc_unregister_isr(omap_wb_isr, wb, mask);
-
+ r = omap_dispc_unregister_isr(omap_wb_isr, wb, mask);
+ if (r) {
+ printk(KERN_ERR WB_NAME "Failed to unregister wb_isr\n");
+ return r;
+ }
omap_dss_wb_flush();
INIT_LIST_HEAD(&wb->dma_queue);