From: jinhyung.jo Date: Fri, 28 Sep 2012 06:28:11 +0000 (+0900) Subject: maru_camera : added a routine for error check X-Git-Tag: 2.2.1_release^2~88^2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=082ac247df8973100e98ca22daebb7e45ac0732e;p=sdk%2Femulator%2Femulator-kernel.git maru_camera : added a routine for error check device error check while streaming Signed-off-by : Jinhyung Jo --- diff --git a/drivers/maru/maru_camera.c b/drivers/maru/maru_camera.c index d044e4a3ac45..47f8a0cd7a92 100644 --- a/drivers/maru/maru_camera.c +++ b/drivers/maru/maru_camera.c @@ -363,7 +363,7 @@ static int get_image_size(struct marucam_device *dev) return size; } -static void marucam_fillbuf(struct marucam_device *dev) +static void marucam_fillbuf(struct marucam_device *dev, uint32_t isr) { struct videobuf_queue *q = &dev->vb_vidq; struct videobuf_buffer *buf = NULL; @@ -387,7 +387,13 @@ static void marucam_fillbuf(struct marucam_device *dev) list_del(&buf->queue); - buf->state = VIDEOBUF_DONE; + if (isr & 0x08) { + marucam_err("device state is invalid\n"); + buf->state = 0xFF; /* invalid state */ + } else { + marucam_dbg(2, "video buffer is filled\n"); + buf->state = VIDEOBUF_DONE; + } do_gettimeofday(&buf->ts); buf->field_count++; wake_up_interruptible(&buf->done); @@ -403,11 +409,11 @@ static irqreturn_t marucam_irq_handler(int irq, void *dev_id) isr = ioread32(dev->mmregs + MARUCAM_ISR); if (!isr) { - marucam_info("this irq is not for this module\n"); + marucam_dbg(1, "this irq is not for this module\n"); return IRQ_NONE; } - marucam_fillbuf(dev); + marucam_fillbuf(dev, isr); return IRQ_HANDLED; } @@ -1059,8 +1065,6 @@ static int marucam_close(struct file *file) struct marucam_device *dev = file->private_data; uint32_t ret; - int minor = video_devdata(file)->minor; - mutex_lock(&dev->mlock); if (dev->opstate == S_RUNNING) { marucam_err("The device has been terminated unexpectedly.\n"); @@ -1096,8 +1100,6 @@ static int marucam_close(struct file *file) return -(ret); } - marucam_dbg(1, "close called (minor=%d)\n", minor); - dev->in_use = 0; mutex_unlock(&dev->mlock); return 0; @@ -1127,7 +1129,9 @@ marucam_poll(struct file *file, struct poll_table_struct *wait) if (ret == 0) { poll_wait(file, &buf->done, wait); - if (buf->state == VIDEOBUF_DONE || buf->state == VIDEOBUF_ERROR) + if (buf->state == VIDEOBUF_DONE || + buf->state == VIDEOBUF_ERROR || + buf->state == 0xFF) ret = POLLIN | POLLRDNORM; else iowrite32(buf->i, dev->mmregs + MARUCAM_REQFRAME);