Index: v4l-dvb-mc/linux/drivers/media/radio/dsbr100.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/radio/dsbr100.c
+++ v4l-dvb-mc/linux/drivers/media/radio/dsbr100.c
@@ -657,7 +657,7 @@ static int usb_dsbr100_probe(struct usb_
 	}
 
 	strlcpy(radio->videodev.name, v4l2_dev->name, sizeof(radio->videodev.name));
-	radio->videodev.v4l2_dev = v4l2_dev;
+	radio->videodev.entity.parent = v4l2_dev;
 	radio->videodev.fops = &usb_dsbr100_fops;
 	radio->videodev.ioctl_ops = &usb_dsbr100_ioctl_ops;
 	radio->videodev.release = usb_dsbr100_video_device_release;
Index: v4l-dvb-mc/linux/drivers/media/radio/radio-gemtek-pci.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/radio/radio-gemtek-pci.c
+++ v4l-dvb-mc/linux/drivers/media/radio/radio-gemtek-pci.c
@@ -414,7 +414,7 @@ static int __devinit gemtek_pci_probe(st
 	}
 
 	strlcpy(card->vdev.name, v4l2_dev->name, sizeof(card->vdev.name));
-	card->vdev.v4l2_dev = v4l2_dev;
+	card->vdev.entity.parent = v4l2_dev;
 	card->vdev.fops = &gemtek_pci_fops;
 	card->vdev.ioctl_ops = &gemtek_pci_ioctl_ops;
 	card->vdev.release = video_device_release_empty;
Index: v4l-dvb-mc/linux/drivers/media/radio/radio-maestro.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/radio/radio-maestro.c
+++ v4l-dvb-mc/linux/drivers/media/radio/radio-maestro.c
@@ -373,7 +373,7 @@ static int __devinit maestro_probe(struc
 	dev->io = pci_resource_start(pdev, 0) + GPIO_DATA;
 
 	strlcpy(dev->vdev.name, v4l2_dev->name, sizeof(dev->vdev.name));
-	dev->vdev.v4l2_dev = v4l2_dev;
+	dev->vdev.entity.parent = v4l2_dev;
 	dev->vdev.fops = &maestro_fops;
 	dev->vdev.ioctl_ops = &maestro_ioctl_ops;
 	dev->vdev.release = video_device_release_empty;
Index: v4l-dvb-mc/linux/drivers/media/radio/radio-maxiradio.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/radio/radio-maxiradio.c
+++ v4l-dvb-mc/linux/drivers/media/radio/radio-maxiradio.c
@@ -397,7 +397,7 @@ static int __devinit maxiradio_init_one(
 
 	dev->io = pci_resource_start(pdev, 0);
 	strlcpy(dev->vdev.name, v4l2_dev->name, sizeof(dev->vdev.name));
-	dev->vdev.v4l2_dev = v4l2_dev;
+	dev->vdev.entity.parent = v4l2_dev;
 	dev->vdev.fops = &maxiradio_fops;
 	dev->vdev.ioctl_ops = &maxiradio_ioctl_ops;
 	dev->vdev.release = video_device_release_empty;
Index: v4l-dvb-mc/linux/drivers/media/radio/radio-mr800.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/radio/radio-mr800.c
+++ v4l-dvb-mc/linux/drivers/media/radio/radio-mr800.c
@@ -700,7 +700,7 @@ static int usb_amradio_probe(struct usb_
 	}
 
 	strlcpy(radio->videodev->name, v4l2_dev->name, sizeof(radio->videodev->name));
-	radio->videodev->v4l2_dev = v4l2_dev;
+	radio->videodev->entity.parent = v4l2_dev;
 	radio->videodev->fops = &usb_amradio_fops;
 	radio->videodev->ioctl_ops = &usb_amradio_ioctl_ops;
 	radio->videodev->release = usb_amradio_video_device_release;
Index: v4l-dvb-mc/linux/drivers/media/video/bt8xx/bttv-driver.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/bt8xx/bttv-driver.c
+++ v4l-dvb-mc/linux/drivers/media/video/bt8xx/bttv-driver.c
@@ -4204,7 +4204,7 @@ static struct video_device *vdev_init(st
 	if (NULL == vfd)
 		return NULL;
 	*vfd = *template;
-	vfd->v4l2_dev = &btv->c.v4l2_dev;
+	vfd->entity.parent = &btv->c.v4l2_dev;
 	vfd->release = video_device_release;
 	vfd->debug   = bttv_debug;
 	video_set_drvdata(vfd, btv);
Index: v4l-dvb-mc/linux/drivers/media/video/cafe_ccic.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/cafe_ccic.c
+++ v4l-dvb-mc/linux/drivers/media/video/cafe_ccic.c
@@ -1972,7 +1972,7 @@ static int cafe_pci_probe(struct pci_dev
 	cam->vdev = cafe_v4l_template;
 	cam->vdev.debug = 0;
 /*	cam->vdev.debug = V4L2_DEBUG_IOCTL_ARG;*/
-	cam->vdev.v4l2_dev = &cam->v4l2_dev;
+	cam->vdev.entity.parent = &cam->v4l2_dev;
 	ret = video_register_device(&cam->vdev, VFL_TYPE_GRABBER, -1);
 	if (ret)
 		goto out_smbus;
Index: v4l-dvb-mc/linux/drivers/media/video/cx18/cx18-streams.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/cx18/cx18-streams.c
+++ v4l-dvb-mc/linux/drivers/media/video/cx18/cx18-streams.c
@@ -182,7 +182,7 @@ static int cx18_prep_dev(struct cx18 *cx
 		 cx->v4l2_dev.name, s->name);
 
 	s->video_dev->num = num;
-	s->video_dev->v4l2_dev = &cx->v4l2_dev;
+	s->video_dev->entity.parent = &cx->v4l2_dev;
 	s->video_dev->fops = &cx18_v4l2_enc_fops;
 	s->video_dev->release = video_device_release;
 	s->video_dev->tvnorms = V4L2_STD_ALL;
Index: v4l-dvb-mc/linux/drivers/media/video/cx231xx/cx231xx-video.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/cx231xx/cx231xx-video.c
+++ v4l-dvb-mc/linux/drivers/media/video/cx231xx/cx231xx-video.c
@@ -2320,7 +2320,7 @@ static struct video_device *cx231xx_vdev
 
 	*vfd = *template;
 	vfd->minor = -1;
-	vfd->v4l2_dev = &dev->v4l2_dev;
+	vfd->entity.parent = &dev->v4l2_dev;
 	vfd->release = video_device_release;
 	vfd->debug = video_debug;
 
Index: v4l-dvb-mc/linux/drivers/media/video/cx23885/cx23885-video.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/cx23885/cx23885-video.c
+++ v4l-dvb-mc/linux/drivers/media/video/cx23885/cx23885-video.c
@@ -353,7 +353,7 @@ static struct video_device *cx23885_vdev
 		return NULL;
 	*vfd = *template;
 	vfd->minor = -1;
-	vfd->v4l2_dev = &dev->v4l2_dev;
+	vfd->entity.parent = &dev->v4l2_dev;
 	vfd->release = video_device_release;
 	snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
 		 dev->name, type, cx23885_boards[dev->board].name);
Index: v4l-dvb-mc/linux/drivers/media/video/cx88/cx88-core.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/cx88/cx88-core.c
+++ v4l-dvb-mc/linux/drivers/media/video/cx88/cx88-core.c
@@ -1057,7 +1057,7 @@ struct video_device *cx88_vdev_init(stru
 	if (NULL == vfd)
 		return NULL;
 	*vfd = *template;
-	vfd->v4l2_dev = &core->v4l2_dev;
+	vfd->entity.parent = &core->v4l2_dev;
 	vfd->parent = &pci->dev;
 	vfd->release = video_device_release;
 	snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
Index: v4l-dvb-mc/linux/drivers/media/video/em28xx/em28xx-video.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/em28xx/em28xx-video.c
+++ v4l-dvb-mc/linux/drivers/media/video/em28xx/em28xx-video.c
@@ -2154,7 +2154,7 @@ static struct video_device *em28xx_vdev_
 
 	*vfd		= *template;
 	vfd->minor	= -1;
-	vfd->v4l2_dev	= &dev->v4l2_dev;
+	vfd->entity.parent = &dev->v4l2_dev;
 	vfd->release	= video_device_release;
 	vfd->debug	= video_debug;
 
Index: v4l-dvb-mc/linux/drivers/media/video/ivtv/ivtv-streams.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/ivtv/ivtv-streams.c
+++ v4l-dvb-mc/linux/drivers/media/video/ivtv/ivtv-streams.c
@@ -207,7 +207,7 @@ static int ivtv_prep_dev(struct ivtv *it
 			itv->v4l2_dev.name, s->name);
 
 	s->vdev->num = num;
-	s->vdev->v4l2_dev = &itv->v4l2_dev;
+	s->vdev->entity.parent = &itv->v4l2_dev;
 	s->vdev->fops = ivtv_stream_info[type].fops;
 	s->vdev->release = video_device_release;
 	s->vdev->tvnorms = V4L2_STD_ALL;
Index: v4l-dvb-mc/linux/drivers/media/video/saa7134/saa7134-core.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/saa7134/saa7134-core.c
+++ v4l-dvb-mc/linux/drivers/media/video/saa7134/saa7134-core.c
@@ -853,7 +853,7 @@ static struct video_device *vdev_init(st
 	if (NULL == vfd)
 		return NULL;
 	*vfd = *template;
-	vfd->v4l2_dev  = &dev->v4l2_dev;
+	vfd->entity.parent = &dev->v4l2_dev;
 	vfd->release = video_device_release;
 	vfd->debug   = video_debug;
 	snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
Index: v4l-dvb-mc/linux/drivers/media/video/usbvision/usbvision-video.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/usbvision/usbvision-video.c
+++ v4l-dvb-mc/linux/drivers/media/video/usbvision/usbvision-video.c
@@ -1406,7 +1406,7 @@ static struct video_device *usbvision_vd
 	}
 	*vdev = *vdev_template;
 //	vdev->minor   = -1;
-	vdev->v4l2_dev = &usbvision->v4l2_dev;
+	vdev->entity.parent = &usbvision->v4l2_dev;
 	snprintf(vdev->name, sizeof(vdev->name), "%s", name);
 	video_set_drvdata(vdev, usbvision);
 	return vdev;
Index: v4l-dvb-mc/linux/drivers/media/video/v4l2-dev.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/v4l2-dev.c
+++ v4l-dvb-mc/linux/drivers/media/video/v4l2-dev.c
@@ -439,8 +439,8 @@ int video_register_device(struct video_d
 
 	vdev->vfl_type = type;
 	vdev->cdev = NULL;
-	if (vdev->v4l2_dev && vdev->v4l2_dev->dev)
-		vdev->parent = vdev->v4l2_dev->dev;
+	if (vdev->entity.parent && vdev->entity.parent->dev)
+		vdev->parent = vdev->entity.parent->dev;
 
 	/* Part 2: find a free minor, kernel number and device index. */
 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
@@ -573,13 +573,13 @@ int video_register_device(struct video_d
 	   reference to the device goes away. */
 	vdev->dev.release = v4l2_device_release;
 
-	if (vdev->v4l2_dev) {
+	if (vdev->entity.parent) {
 		vdev->entity.type = V4L2_ENTITY_TYPE_NODE;
 		vdev->entity.subtype = V4L2_NODE_TYPE_V4L;
 		vdev->entity.v4l.major = VIDEO_MAJOR;
 		vdev->entity.v4l.minor = vdev->minor;
 		vdev->entity.name = vdev->name;
-		ret = v4l2_device_register_node(vdev->v4l2_dev, vdev);
+		ret = v4l2_device_register_node(vdev->entity.parent, vdev);
 		if (ret < 0)
 			printk(KERN_ERR "error\n"); /* TODO */
 	}
Index: v4l-dvb-mc/linux/drivers/media/video/v4l2-device.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/v4l2-device.c
+++ v4l-dvb-mc/linux/drivers/media/video/v4l2-device.c
@@ -196,10 +196,10 @@ static long mc_ioctl(struct file *filp, 
 
 	switch (cmd) {
 	case VIDIOC_MC_ENUM_ENTITIES:
-		return mc_enum_entities(vdev->v4l2_dev, (struct v4l2_mc_entity __user *)arg);
+		return mc_enum_entities(vdev->entity.parent, (struct v4l2_mc_entity __user *)arg);
 
 	case VIDIOC_MC_ENUM_LINKS:
-		return mc_enum_links(vdev->v4l2_dev, (struct v4l2_mc_ios __user *)arg);
+		return mc_enum_links(vdev->entity.parent, (struct v4l2_mc_ios __user *)arg);
 
 	case VIDIOC_MC_G_ENTITY:
 		id = fh->ent ? fh->ent->id : 0;
@@ -208,17 +208,17 @@ static long mc_ioctl(struct file *filp, 
 	case VIDIOC_MC_S_ENTITY:
 		if (copy_from_user(&id, uarg, sizeof(*uarg)))
 			return -EFAULT;
-		ent = find_entity(vdev->v4l2_dev, id);
+		ent = find_entity(vdev->entity.parent, id);
 		if (ent == NULL)
 			return -EINVAL;
 		fh->ent = ent;
 		break;
 
 	case VIDIOC_MC_MAKE_LINK:
-		return mc_make_link(vdev->v4l2_dev, (struct v4l2_mc_link __user *)arg);
+		return mc_make_link(vdev->entity.parent, (struct v4l2_mc_link __user *)arg);
 
 	case VIDIOC_MC_DELETE_LINK:
-		return mc_delete_link(vdev->v4l2_dev, (struct v4l2_mc_link __user *)arg);
+		return mc_delete_link(vdev->entity.parent, (struct v4l2_mc_link __user *)arg);
 
 	default:
 		if (fh->ent == NULL || fh->ent->ioctl == NULL)
@@ -264,7 +264,7 @@ int v4l2_device_register(struct device *
 	vdev = &v4l2_dev->mc;
 
 	snprintf(vdev->name, sizeof(vdev->name), "media controller");
-	vdev->v4l2_dev = v4l2_dev;
+	vdev->entity.parent = v4l2_dev;
 	vdev->fops = &mc_fops;
 	vdev->release = video_device_release_empty;
 	return video_register_device(vdev, VFL_TYPE_MC, -1);
@@ -363,7 +363,7 @@ int v4l2_device_register_node(struct v4l
 	/* Check for valid input */
 	if (v4l2_dev == NULL || vdev == NULL)
 		return -EINVAL;
-	vdev->v4l2_dev = v4l2_dev;
+	vdev->entity.parent = v4l2_dev;
 	spin_lock(&v4l2_dev->lock);
 	vdev->entity.id = v4l2_dev->devnode_id++;
 	list_add_tail(&vdev->entity.list, &v4l2_dev->devnodes);
@@ -375,12 +375,12 @@ EXPORT_SYMBOL_GPL(v4l2_device_register_n
 void v4l2_device_unregister_node(struct video_device *vdev)
 {
 	/* return if it isn't registered */
-	if (vdev == NULL || vdev->v4l2_dev == NULL)
+	if (vdev == NULL || vdev->entity.parent == NULL)
 		return;
-	spin_lock(&vdev->v4l2_dev->lock);
+	spin_lock(&vdev->entity.parent->lock);
 	list_del(&vdev->entity.list);
-	spin_unlock(&vdev->v4l2_dev->lock);
-	vdev->v4l2_dev = NULL;
+	spin_unlock(&vdev->entity.parent->lock);
+	vdev->entity.parent = NULL;
 }
 EXPORT_SYMBOL_GPL(v4l2_device_unregister_node);
 
Index: v4l-dvb-mc/linux/drivers/media/video/w9968cf.c
===================================================================
--- v4l-dvb-mc.orig/linux/drivers/media/video/w9968cf.c
+++ v4l-dvb-mc/linux/drivers/media/video/w9968cf.c
@@ -3502,7 +3502,7 @@ w9968cf_usb_probe(struct usb_interface* 
 	cam->v4ldev->minor = video_nr[dev_nr];
 	cam->v4ldev->release = video_device_release;
 	video_set_drvdata(cam->v4ldev, cam);
-	cam->v4ldev->v4l2_dev = &cam->v4l2_dev;
+	cam->v4ldev->entity.parent = &cam->v4l2_dev;
 
 	err = video_register_device(cam->v4ldev, VFL_TYPE_GRABBER,
 				    video_nr[dev_nr]);
Index: v4l-dvb-mc/linux/include/media/v4l2-dev.h
===================================================================
--- v4l-dvb-mc.orig/linux/include/media/v4l2-dev.h
+++ v4l-dvb-mc/linux/include/media/v4l2-dev.h
@@ -29,7 +29,6 @@
 struct v4l2_ioctl_callbacks;
 struct video_device;
 struct v4l2_alsa_device;
-struct v4l2_device;
 
 /* Flag to mark the video_device struct as unregistered.
    Drivers can set this flag if they want to block all future
@@ -71,9 +70,8 @@ struct video_device
 #endif
 	struct cdev *cdev;		/* character device */
 
-	/* Set either parent or v4l2_dev if your driver uses v4l2_device */
+	/* Set either parent or entity.parent if your driver uses v4l2_device */
 	struct device *parent;		/* device parent */
-	struct v4l2_device *v4l2_dev;	/* v4l2_device parent */
 
 	/* device info */
 	char name[32];
