* allocates and inits the device structs, registers i2c bus and v4l device
  */
 static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
+                          struct usb_interface *interface,
                           int minor)
 {
        struct em28xx *dev = *devhandle;
                }
        }
 
-       retval = v4l2_device_register(&dev->udev->dev, &dev->v4l2_dev);
+       retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
        if (retval < 0) {
                em28xx_errdev("Call to v4l2_device_register() failed!\n");
                return retval;
        /* allocate device struct */
        mutex_init(&dev->lock);
        mutex_lock(&dev->lock);
-       retval = em28xx_init_dev(&dev, udev, nr);
+       retval = em28xx_init_dev(&dev, udev, interface, nr);
        if (retval) {
                em28xx_devused &= ~(1<<dev->devno);
                kfree(dev);