--- /dev/null
+diff -urN em28xx-new.orig/cx25843/em28xx-cx25843.c em28xx-new/cx25843/em28xx-cx25843.c
+--- em28xx-new.orig/cx25843/em28xx-cx25843.c 2009-04-09 19:28:53.000000000 +0200
++++ em28xx-new/cx25843/em28xx-cx25843.c 2009-06-12 15:11:43.865650156 +0200
+@@ -23,6 +23,10 @@
+
+ #include "em28xx-cx25843.h"
+
++#define VIDIOC_INT_S_VIDEO_ROUTING _IOW ('d', 111, struct v4l2_routing)
++#define VIDIOC_INT_G_VIDEO_ROUTING _IOR ('d', 112, struct v4l2_routing)
++#define VIDIOC_INT_S_AUDIO_ROUTING _IOW ('d', 109, struct v4l2_routing)
++
+ MODULE_DESCRIPTION("cx25843 for Empia em28xx based devices");
+ MODULE_AUTHOR("Markus Rechberger <mrechberger@empiatech.com>");
+ MODULE_LICENSE("GPL");
+diff -urN em28xx-new.orig/em28xx-audio.c em28xx-new/em28xx-audio.c
+--- em28xx-new.orig/em28xx-audio.c 2009-04-09 19:28:53.000000000 +0200
++++ em28xx-new/em28xx-audio.c 2009-06-12 15:09:38.869977396 +0200
+@@ -46,6 +46,8 @@
+ #include "em28xx.h"
+ #include "xc5000/xc5000_control.h"
+
++#define VIDIOC_INT_S_AUDIO_ROUTING _IOW ('d', 109, struct v4l2_routing)
++
+ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
+ static int em28xx_cmd(struct em28xx *dev, int cmd, int arg);
+
+diff -urN em28xx-new.orig/em28xx-i2c.c em28xx-new/em28xx-i2c.c
+--- em28xx-new.orig/em28xx-i2c.c 2009-04-09 19:28:53.000000000 +0200
++++ em28xx-new/em28xx-i2c.c 2009-06-12 15:08:44.596693725 +0200
+@@ -44,6 +44,8 @@
+
+ #include "xc5000/xc5000_control.h"
+
++#define TUNER_SET_TYPE_ADDR _IOW('d', 90, int)
++
+
+ /* ----------------------------------------------------------- */
+
+diff -urN em28xx-new.orig/em28xx-video.c em28xx-new/em28xx-video.c
+--- em28xx-new.orig/em28xx-video.c 2009-04-22 15:19:52.000000000 +0200
++++ em28xx-new/em28xx-video.c 2009-06-12 15:07:31.429010659 +0200
+@@ -53,6 +53,10 @@
+ #include "xc5000/xc5000_module.h"
+ #include "cx25843/em28xx-cx25843.h"
+
++#define VIDIOC_INT_S_VIDEO_ROUTING _IOW ('d', 111, struct v4l2_routing)
++#define VIDIOC_INT_I2S_CLOCK_FREQ _IOW ('d', 108, u32)
++#define VIDIOC_INT_S_AUDIO_ROUTING _IOW ('d', 109, struct v4l2_routing)
++
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
+ #include "i2c-compat.h"
+ #include <linux/moduleparam.h>
+@@ -578,9 +582,9 @@
+ * inits the device and starts isoc transfer
+ */
+
+-static int em28xx_v4l2_open(struct inode *inode, struct file *filp)
++static int em28xx_v4l2_open(struct file *filp)
+ {
+- int minor = iminor(inode);
++ int minor = video_devdata(filp)->minor;
+ int errCode = 0;
+ int mode = V4L2_TUNER_ANALOG_TV;
+ int type = 0;
+@@ -880,7 +884,7 @@
+ * stops streaming and deallocates all resources allocated by the
+ * v4l2 calls and ioctls
+ */
+-static int em28xx_v4l2_close(struct inode *inode, struct file *filp)
++static int em28xx_v4l2_close(struct file *filp)
+ {
+ int errCode;
+ struct em28xx_fh *fh;
+@@ -1169,7 +1173,7 @@
+ * em28xx_v4l2_poll()
+ * will allocate buffers when called for the first time
+ */
+-static unsigned int em28xx_v4l2_poll(struct file *filp, poll_table *wait)
++static unsigned int em28xx_v4l2_poll(struct file *filp, struct poll_table_struct *wait)
+ {
+ unsigned int mask = 0;
+ struct em28xx_fh *fh = filp->private_data;
+@@ -1919,7 +1923,7 @@
+ * em28xx_v4l2_ioctl() via em28xx_video_do_ioctl(). Userspace
+ * copying is done already, arg is a kernel pointer.
+ */
+-static int em28xx_do_ioctl(struct inode *inode, struct file *filp,
++static int em28xx_do_ioctl(struct file *filp,
+ struct em28xx *dev, unsigned int cmd, void *arg,
+ v4l2_kioctl driver_ioctl)
+ {
+@@ -2436,7 +2440,7 @@
+ * em28xx_v4l2_ioctl. Userspace
+ * copying is done already, arg is a kernel pointer.
+ */
+-static int em28xx_video_do_ioctl(struct inode *inode, struct file *filp,
++static int em28xx_video_do_ioctl(struct file *filp,
+ unsigned int cmd, void *arg)
+ {
+ struct em28xx_fh *fh = filp->private_data;
+@@ -2459,8 +2463,8 @@
+ strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
+ strlcpy(cap->card, em28xx_boards[dev->model].name,
+ sizeof(cap->card));
+- strlcpy(cap->bus_info, dev->udev->dev.bus_id,
+- sizeof(cap->bus_info));
++ /*strlcpy(cap->bus_info, dev->udev->dev.bus_id,
++ sizeof(cap->bus_info));*/
+ cap->version = EM28XX_VERSION_CODE;
+ cap->capabilities =
+ #if 0
+@@ -2875,7 +2879,7 @@
+ return em28xx_do_ioctl(inode, filp, dev, cmd, arg,
+ em28xx_video_do_ioctl);
+ #else
+- return em28xx_do_ioctl(inode, filp, dev, cmd, arg,
++ return em28xx_do_ioctl(filp, dev, cmd, arg,
+ em28xx_v4l2_ioctl);
+ #endif
+ }
+@@ -2930,7 +2934,7 @@
+ * struct v4l2_ioctl_ops. The struct v4l2_ioctl_ops was introduced with commit
+ * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=a399810ca69d9d4bd30ab8c1678c7439e567f90b
+ */
+-static int em28xx_v4l2_ioctl_fops(struct inode *inode, struct file *filp,
++static int em28xx_v4l2_ioctl_fops(struct file *filp,
+ unsigned int cmd, unsigned long arg)
+ {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28)
+@@ -2940,7 +2944,7 @@
+ #endif
+ }
+
+-static struct file_operations em28xx_v4l_fops = {
++static struct v4l2_file_operations em28xx_v4l_fops = {
+ .owner = THIS_MODULE,
+ .open = em28xx_v4l2_open,
+ .release = em28xx_v4l2_close,
+@@ -2948,7 +2952,6 @@
+ .read = em28xx_v4l2_read,
+ .poll = em28xx_v4l2_poll,
+ .mmap = em28xx_v4l2_mmap,
+- .llseek = no_llseek,
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
+ #if 0
+ .compat_ioctl = v4l_compat_ioctl32,
+diff -urN em28xx-new.orig/tvp5150/tvp5150.c em28xx-new/tvp5150/tvp5150.c
+--- em28xx-new.orig/tvp5150/tvp5150.c 2009-04-09 19:28:53.000000000 +0200
++++ em28xx-new/tvp5150/tvp5150.c 2009-06-14 04:58:09.246216302 +0200
+@@ -9,7 +9,7 @@
+ #include <linux/version.h>
+ #include <linux/videodev.h>
+ #include <linux/delay.h>
+-#include <linux/video_decoder.h>
++//#include <linux/video_decoder.h>
+ #include <media/v4l2-common.h>
+ #include <media/tvp5150.h>
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+@@ -21,6 +21,10 @@
+
+ #include "tvp5150_reg.h"
+
++#define VIDIOC_INT_S_VIDEO_ROUTING _IOW ('d', 111, struct v4l2_routing)
++#define VIDIOC_INT_G_VIDEO_ROUTING _IOR ('d', 112, struct v4l2_routing)
++#define I2C_DRIVERID_TVP5150 76
++
+ MODULE_DESCRIPTION("Texas Instruments TVP5150A video decoder driver");
+ MODULE_AUTHOR("Mauro Carvalho Chehab");
+ MODULE_LICENSE("GPL");
--- /dev/null
+--- em28xx-video.c.orig 2009-04-22 15:19:52.775497497 +0200
++++ em28xx-video.c 2009-04-22 18:02:38.381164273 +0200
+@@ -578,9 +578,9 @@
+ * inits the device and starts isoc transfer
+ */
+
+-static int em28xx_v4l2_open(struct inode *inode, struct file *filp)
++static int em28xx_v4l2_open(struct file *filp)
+ {
+- int minor = iminor(inode);
++ int minor = video_devdata(filp)->minor;
+ int errCode = 0;
+ int mode = V4L2_TUNER_ANALOG_TV;
+ int type = 0;
+@@ -880,7 +880,7 @@
+ * stops streaming and deallocates all resources allocated by the
+ * v4l2 calls and ioctls
+ */
+-static int em28xx_v4l2_close(struct inode *inode, struct file *filp)
++static int em28xx_v4l2_close(struct file *filp)
+ {
+ int errCode;
+ struct em28xx_fh *fh;
+@@ -1169,7 +1169,7 @@
+ * em28xx_v4l2_poll()
+ * will allocate buffers when called for the first time
+ */
+-static unsigned int em28xx_v4l2_poll(struct file *filp, poll_table *wait)
++static unsigned int em28xx_v4l2_poll(struct file *filp, struct poll_table_struct *wait)
+ {
+ unsigned int mask = 0;
+ struct em28xx_fh *fh = filp->private_data;
+@@ -1919,7 +1919,7 @@
+ * em28xx_v4l2_ioctl() via em28xx_video_do_ioctl(). Userspace
+ * copying is done already, arg is a kernel pointer.
+ */
+-static int em28xx_do_ioctl(struct inode *inode, struct file *filp,
++static int em28xx_do_ioctl(struct file *filp,
+ struct em28xx *dev, unsigned int cmd, void *arg,
+ v4l2_kioctl driver_ioctl)
+ {
+@@ -2436,7 +2436,7 @@
+ * em28xx_v4l2_ioctl. Userspace
+ * copying is done already, arg is a kernel pointer.
+ */
+-static int em28xx_video_do_ioctl(struct inode *inode, struct file *filp,
++static int em28xx_video_do_ioctl(struct file *filp,
+ unsigned int cmd, void *arg)
+ {
+ struct em28xx_fh *fh = filp->private_data;
+@@ -2875,7 +2875,7 @@
+ return em28xx_do_ioctl(inode, filp, dev, cmd, arg,
+ em28xx_video_do_ioctl);
+ #else
+- return em28xx_do_ioctl(inode, filp, dev, cmd, arg,
++ return em28xx_do_ioctl(filp, dev, cmd, arg,
+ em28xx_v4l2_ioctl);
+ #endif
+ }
+@@ -2930,7 +2930,7 @@
+ * struct v4l2_ioctl_ops. The struct v4l2_ioctl_ops was introduced with commit
+ * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=a399810ca69d9d4bd30ab8c1678c7439e567f90b
+ */
+-static int em28xx_v4l2_ioctl_fops(struct inode *inode, struct file *filp,
++static int em28xx_v4l2_ioctl_fops(struct file *filp,
+ unsigned int cmd, unsigned long arg)
+ {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28)
+@@ -2940,7 +2940,7 @@
+ #endif
+ }
+
+-static struct file_operations em28xx_v4l_fops = {
++static struct v4l2_file_operations em28xx_v4l_fops = {
+ .owner = THIS_MODULE,
+ .open = em28xx_v4l2_open,
+ .release = em28xx_v4l2_close,
+@@ -2948,7 +2948,6 @@
+ .read = em28xx_v4l2_read,
+ .poll = em28xx_v4l2_poll,
+ .mmap = em28xx_v4l2_mmap,
+- .llseek = no_llseek,
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
+ #if 0
+ .compat_ioctl = v4l_compat_ioctl32,