diff options
author | Archit Taneja <archit@ti.com> | 2010-10-04 20:38:01 +0530 |
---|---|---|
committer | Ricardo Perez Olivares <x0081762@ti.com> | 2010-10-04 17:20:00 -0500 |
commit | 7977bb1173459f83dc1c7557092c64f322b31aa4 (patch) | |
tree | c02725e596d084baf34f725c4480f5424228e358 /drivers/media | |
parent | af14f9ea2bf609ba874d65d271761cd7ea87c5f1 (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.c | 15 | ||||
-rw-r--r-- | drivers/media/video/omap/omap_wb.c | 12 |
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); |