diff -ruN wis-go7007-linux-0.9.8.orig/kernel/go7007-v4l2.c wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c
--- wis-go7007-linux-0.9.8.orig/kernel/go7007-v4l2.c	2006-04-02 08:22:03.000000000 +0900
+++ wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c	2007-01-01 07:32:55.000000000 +0900
@@ -38,6 +38,7 @@
 #include <asm/uaccess.h>
 #include <asm/semaphore.h>
 #include <asm/system.h>
+#include <linux/compat.h>
 
 #include "../include/go7007.h"
 #include "go7007-priv.h"
@@ -1455,11 +1456,69 @@
 		kfree(go);
 }
 
+struct go7007_md_region32
+{
+	__u16 region;
+	__u16 flags;
+	compat_caddr_t clips;
+	__u32 reserved[8];
+};
+
+long go7007_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
+{
+	int ret;
+
+	switch (cmd) {
+	case GO7007IOC_S_BITRATE:
+	case GO7007IOC_G_BITRATE:
+	case GO7007IOC_S_MPEG_PARAMS:
+	case GO7007IOC_G_MPEG_PARAMS:
+	case GO7007IOC_S_COMP_PARAMS:
+	case GO7007IOC_G_COMP_PARAMS:
+	case GO7007IOC_S_MD_PARAMS:
+	case GO7007IOC_G_MD_PARAMS:
+		arg = (unsigned long)compat_ptr(arg);
+		lock_kernel();
+		ret = go7007_ioctl(file->f_dentry->d_inode, file, cmd, arg);
+		unlock_kernel();
+		break;
+	case GO7007IOC_S_MD_REGION:
+	{
+		struct go7007_md_region region;
+		struct go7007_md_region32 *region32 = (void *)arg;
+		compat_caddr_t clips;
+		if (!access_ok(VERIFY_READ, region32, sizeof(*region32)) ||
+			get_user(region.region, &region32->region) ||
+			get_user(region.flags, &region32->flags) ||
+			get_user(clips, &region32->clips) ||
+			copy_from_user(region.reserved, region32->reserved, 32))
+			ret = -EFAULT;
+		else {
+			mm_segment_t old_fs = get_fs();
+			region.clips = compat_ptr(clips);
+			set_fs(KERNEL_DS);
+			lock_kernel();
+			ret = go7007_ioctl(file->f_dentry->d_inode,
+					file, cmd, (unsigned long)&region);
+			unlock_kernel();
+			set_fs(old_fs);
+		}
+		break;
+	}
+	default:
+		ret = v4l_compat_ioctl32(file, cmd, arg);
+		break;
+	}
+
+	return ret;
+}
+
 static struct file_operations go7007_fops = {
 	.owner		= THIS_MODULE,
 	.open		= go7007_open,
 	.release	= go7007_release,
 	.ioctl		= go7007_ioctl,
+	.compat_ioctl	= go7007_compat_ioctl32,
 	.llseek		= no_llseek,
 	.read		= go7007_read,
 	.mmap		= go7007_mmap,
