From: Stelian Pop <stelian@popies.net>

Signed-off-by: Stelian Pop <stelian@popies.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/media/video/meye.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+)

diff -puN drivers/media/video/meye.c~meye-implement-non-blocking-access-using-poll drivers/media/video/meye.c
--- 25/drivers/media/video/meye.c~meye-implement-non-blocking-access-using-poll	Thu Nov  4 15:04:39 2004
+++ 25-akpm/drivers/media/video/meye.c	Thu Nov  4 15:04:39 2004
@@ -937,6 +937,10 @@ static int meye_do_ioctl(struct inode *i
 			up(&meye.lock);
 			return -EINVAL;
 		case MEYE_BUF_USING:
+			if (file->f_flags & O_NONBLOCK) {
+				up(&meye.lock);
+				return -EAGAIN;
+			}
 			if (wait_event_interruptible(meye.proc_list,
 						     (meye.grab_buffer[*i].state != MEYE_BUF_USING))) {
 				up(&meye.lock);
@@ -1072,6 +1076,10 @@ static int meye_do_ioctl(struct inode *i
 			up(&meye.lock);
 			return -EINVAL;
 		case MEYE_BUF_USING:
+			if (file->f_flags & O_NONBLOCK) {
+				up(&meye.lock);
+				return -EAGAIN;
+			}
 			if (wait_event_interruptible(meye.proc_list,
 						     (meye.grab_buffer[*i].state != MEYE_BUF_USING))) {
 				up(&meye.lock);
@@ -1137,6 +1145,18 @@ static int meye_ioctl(struct inode *inod
 	return video_usercopy(inode, file, cmd, arg, meye_do_ioctl);
 }
 
+static unsigned int meye_poll(struct file *file, poll_table *wait)
+{
+	unsigned int res = 0;
+
+	down(&meye.lock);
+	poll_wait(file, &meye.proc_list, wait);
+	if (kfifo_len(meye.doneq))
+		res = POLLIN | POLLRDNORM;
+	up(&meye.lock);
+	return res;
+}
+
 static int meye_mmap(struct file *file, struct vm_area_struct *vma) {
 	unsigned long start = vma->vm_start;
 	unsigned long size  = vma->vm_end - vma->vm_start;
@@ -1178,6 +1198,7 @@ static struct file_operations meye_fops 
 	.release	= meye_release,
 	.mmap		= meye_mmap,
 	.ioctl		= meye_ioctl,
+	.poll		= meye_poll,
 	.llseek		= no_llseek,
 };
 
_