The bridge driver also has some helper functions it can use:
 
-struct v4l2_subdev *sd = v4l2_i2c_new_subdev(adapter, "module_foo", "chipid", 0x36);
+struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter,
+              "module_foo", "chipid", 0x36);
 
 This loads the given module (can be NULL if no module needs to be loaded) and
 calls i2c_new_device() with the given i2c_adapter and chip/address arguments.
-If all goes well, then it registers the subdev with the v4l2_device. It gets
-the v4l2_device by calling i2c_get_adapdata(adapter), so you should make sure
-to call i2c_set_adapdata(adapter, v4l2_device) when you setup the i2c_adapter
-in your driver.
+If all goes well, then it registers the subdev with the v4l2_device.
 
 You can also use v4l2_i2c_new_probed_subdev() which is very similar to
 v4l2_i2c_new_subdev(), except that it has an array of possible I2C addresses
 
                /* Load the analog demodulator driver (note this would need to
                   be abstracted out if we ever need to support a different
                   demod) */
-               sd = v4l2_i2c_new_subdev(&dev->i2c_adap, "au8522", "au8522",
-                                        0x8e >> 1);
+               sd = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                               "au8522", "au8522", 0x8e >> 1);
                if (sd == NULL)
                        printk(KERN_ERR "analog subdev registration failed\n");
        }
        /* Setup tuners */
        if (dev->board.tuner_type != TUNER_ABSENT) {
                /* Load the tuner module, which does the attach */
-               sd = v4l2_i2c_new_subdev(&dev->i2c_adap, "tuner", "tuner",
-                                        dev->board.tuner_addr);
+               sd = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                               "tuner", "tuner", dev->board.tuner_addr);
                if (sd == NULL)
                        printk(KERN_ERR "tuner subdev registration fail\n");
 
 
 
                /* Load tuner module before issuing tuner config call! */
                if (bttv_tvcards[btv->c.type].has_radio)
-                       v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "tuner", "tuner", v4l2_i2c_tuner_addrs(ADDRS_RADIO));
-               v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, "tuner",
-                               "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
-               v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, "tuner",
-                               "tuner", v4l2_i2c_tuner_addrs(ADDRS_TV_WITH_DEMOD));
+                       v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                               &btv->c.i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(ADDRS_RADIO));
+               v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                               &btv->c.i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
+               v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                               &btv->c.i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(ADDRS_TV_WITH_DEMOD));
 
                tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV;
                tun_setup.type = btv->tuner_type;
                };
                struct v4l2_subdev *sd;
 
-               sd = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "saa6588", "saa6588", addrs);
+               sd = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                       &btv->c.i2c_adap, "saa6588", "saa6588", addrs);
                btv->has_saa6588 = (sd != NULL);
        }
 
                        I2C_CLIENT_END
                };
 
-               btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "msp3400", "msp3400", addrs);
+               btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                       &btv->c.i2c_adap, "msp3400", "msp3400", addrs);
                if (btv->sd_msp34xx)
                        return;
                goto no_audio;
                        I2C_CLIENT_END
                };
 
-               if (v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "tda7432", "tda7432", addrs))
+               if (v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                               &btv->c.i2c_adap, "tda7432", "tda7432", addrs))
                        return;
                goto no_audio;
        }
 
        case 3: {
                /* The user specified that we should probe for tvaudio */
-               btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "tvaudio", "tvaudio", tvaudio_addrs);
+               btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                       &btv->c.i2c_adap, "tvaudio", "tvaudio", tvaudio_addrs);
                if (btv->sd_tvaudio)
                        return;
                goto no_audio;
                        I2C_CLIENT_END
                };
 
-               btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "msp3400", "msp3400", addrs);
+               btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                       &btv->c.i2c_adap, "msp3400", "msp3400", addrs);
        } else if (bttv_tvcards[btv->c.type].msp34xx_alt) {
                static const unsigned short addrs[] = {
                        I2C_ADDR_MSP3400_ALT >> 1,
                        I2C_CLIENT_END
                };
 
-               btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "msp3400", "msp3400", addrs);
+               btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                       &btv->c.i2c_adap, "msp3400", "msp3400", addrs);
        }
 
        /* If we found a msp34xx, then we're done. */
                        I2C_CLIENT_END
                };
 
-               if (v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                               "tda7432", "tda7432", addrs))
+               if (v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+                               &btv->c.i2c_adap, "tda7432", "tda7432", addrs))
                        return;
        }
 
        /* Now see if we can find one of the tvaudio devices. */
-       btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
-                       "tvaudio", "tvaudio", tvaudio_addrs);
+       btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
+               &btv->c.i2c_adap, "tvaudio", "tvaudio", tvaudio_addrs);
        if (btv->sd_tvaudio)
                return;
 
 
                goto out_freeirq;
 
        cam->sensor_addr = 0x42;
-       cam->sensor = v4l2_i2c_new_subdev(&cam->i2c_adapter,
+       cam->sensor = v4l2_i2c_new_subdev(&cam->v4l2_dev, &cam->i2c_adapter,
                        "ov7670", "ov7670", cam->sensor_addr);
        if (cam->sensor == NULL) {
                ret = -ENODEV;
 
 
        if (hw == CX18_HW_TUNER) {
                /* special tuner group handling */
-               sd = v4l2_i2c_new_probed_subdev(adap, mod, type,
-                                               cx->card_i2c->radio);
+               sd = v4l2_i2c_new_probed_subdev(&cx->v4l2_dev,
+                               adap, mod, type, cx->card_i2c->radio);
                if (sd != NULL)
                        sd->grp_id = hw;
-               sd = v4l2_i2c_new_probed_subdev(adap, mod, type,
-                                               cx->card_i2c->demod);
+               sd = v4l2_i2c_new_probed_subdev(&cx->v4l2_dev,
+                               adap, mod, type, cx->card_i2c->demod);
                if (sd != NULL)
                        sd->grp_id = hw;
-               sd = v4l2_i2c_new_probed_subdev(adap, mod, type,
-                                               cx->card_i2c->tv);
+               sd = v4l2_i2c_new_probed_subdev(&cx->v4l2_dev,
+                               adap, mod, type, cx->card_i2c->tv);
                if (sd != NULL)
                        sd->grp_id = hw;
                return sd != NULL ? 0 : -1;
                return -1;
 
        /* It's an I2C device other than an analog tuner */
-       sd = v4l2_i2c_new_subdev(adap, mod, type, hw_addrs[idx]);
+       sd = v4l2_i2c_new_subdev(&cx->v4l2_dev, adap, mod, type, hw_addrs[idx]);
        if (sd != NULL)
                sd->grp_id = hw;
        return sd != NULL ? 0 : -1;
 
 
        /* request some modules */
        if (dev->board.decoder == CX231XX_AVDECODER) {
-               dev->sd_cx25840 =
-                       v4l2_i2c_new_subdev(&dev->i2c_bus[0].i2c_adap,
+               dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
+                                       &dev->i2c_bus[0].i2c_adap,
                                        "cx25840", "cx25840", 0x88 >> 1);
                if (dev->sd_cx25840 == NULL)
                        cx231xx_info("cx25840 subdev registration failure\n");
        }
 
        if (dev->board.tuner_type != TUNER_ABSENT) {
-               dev->sd_tuner =
-                       v4l2_i2c_new_subdev(&dev->i2c_bus[1].i2c_adap,
+               dev->sd_tuner = v4l2_i2c_new_subdev(&dev->v4l2_dev,
+                               &dev->i2c_bus[1].i2c_adap,
                                "tuner", "tuner", 0xc2 >> 1);
                if (dev->sd_tuner == NULL)
                        cx231xx_info("tuner subdev registration failure\n");
 
        case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
        case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
        case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
-               dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->i2c_bus[2].i2c_adap,
+               dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
+                               &dev->i2c_bus[2].i2c_adap,
                                "cx25840", "cx25840", 0x88 >> 1);
                v4l2_subdev_call(dev->sd_cx25840, core, load_fw);
                break;
 
                struct v4l2_subdev *sd = NULL;
 
                if (dev->tuner_addr)
-                       sd = v4l2_i2c_new_subdev(&dev->i2c_bus[1].i2c_adap,
+                       sd = v4l2_i2c_new_subdev(&dev->v4l2_dev,
+                               &dev->i2c_bus[1].i2c_adap,
                                "tuner", "tuner", dev->tuner_addr);
                else
-                       sd = v4l2_i2c_new_probed_subdev(&dev->i2c_bus[1].i2c_adap,
+                       sd = v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
+                               &dev->i2c_bus[1].i2c_adap,
                                "tuner", "tuner", v4l2_i2c_tuner_addrs(ADDRS_TV));
                if (sd) {
                        struct tuner_setup tun_setup;
 
                   The radio_type is sometimes missing, or set to UNSET but
                   later code configures a tea5767.
                 */
-               v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner", "tuner",
+               v4l2_i2c_new_probed_subdev(&core->v4l2_dev, &core->i2c_adap,
+                               "tuner", "tuner",
                                v4l2_i2c_tuner_addrs(ADDRS_RADIO));
                if (has_demod)
-                       v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner",
-                               "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
+                       v4l2_i2c_new_probed_subdev(&core->v4l2_dev,
+                               &core->i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
                if (core->board.tuner_addr == ADDR_UNSET) {
-                       v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner",
-                               "tuner", has_demod ? tv_addrs + 4 : tv_addrs);
+                       v4l2_i2c_new_probed_subdev(&core->v4l2_dev,
+                               &core->i2c_adap, "tuner", "tuner",
+                               has_demod ? tv_addrs + 4 : tv_addrs);
                } else {
-                       v4l2_i2c_new_subdev(&core->i2c_adap,
+                       v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap,
                                "tuner", "tuner", core->board.tuner_addr);
                }
        }
 
        /* load and configure helper modules */
 
        if (core->board.audio_chip == V4L2_IDENT_WM8775)
-               v4l2_i2c_new_subdev(&core->i2c_adap,
+               v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap,
                                "wm8775", "wm8775", 0x36 >> 1);
 
        if (core->board.audio_chip == V4L2_IDENT_TVAUDIO) {
                        0xb0 >> 1, I2C_CLIENT_END
                };
 
-               v4l2_i2c_new_probed_subdev(&core->i2c_adap,
+               v4l2_i2c_new_probed_subdev(&core->v4l2_dev, &core->i2c_adap,
                                "tvaudio", "tvaudio", i2c_addr);
        }
 
 
 
        /* request some modules */
        if (dev->board.has_msp34xx)
-               v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "msp3400",
-                       "msp3400", msp3400_addrs);
+               v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                       "msp3400", "msp3400", msp3400_addrs);
 
        if (dev->board.decoder == EM28XX_SAA711X)
-               v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "saa7115",
-                       "saa7115_auto", saa711x_addrs);
+               v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                       "saa7115", "saa7115_auto", saa711x_addrs);
 
        if (dev->board.decoder == EM28XX_TVP5150)
-               v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tvp5150",
-                       "tvp5150", tvp5150_addrs);
+               v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                       "tvp5150", "tvp5150", tvp5150_addrs);
 
        if (dev->board.adecoder == EM28XX_TVAUDIO)
-               v4l2_i2c_new_subdev(&dev->i2c_adap, "tvaudio",
-                       "tvaudio", dev->board.tvaudio_addr);
+               v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                       "tvaudio", "tvaudio", dev->board.tvaudio_addr);
 
        if (dev->board.tuner_type != TUNER_ABSENT) {
                int has_demod = (dev->tda9887_conf & TDA9887_PRESENT);
 
                if (dev->board.radio.type)
-                       v4l2_i2c_new_subdev(&dev->i2c_adap, "tuner", "tuner",
-                               dev->board.radio_addr);
+                       v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                               "tuner", "tuner", dev->board.radio_addr);
 
                if (has_demod)
-                       v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner",
-                               "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
+                       v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
+                               &dev->i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
                if (dev->tuner_addr == 0) {
                        enum v4l2_i2c_tuner_type type =
                                has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
                        struct v4l2_subdev *sd;
 
-                       sd = v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner",
-                               "tuner", v4l2_i2c_tuner_addrs(type));
+                       sd = v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
+                               &dev->i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(type));
 
                        if (sd)
                                dev->tuner_addr = v4l2_i2c_subdev_addr(sd);
                } else {
-                       v4l2_i2c_new_subdev(&dev->i2c_adap, "tuner",
-                               "tuner", dev->tuner_addr);
+                       v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                               "tuner", "tuner", dev->tuner_addr);
                }
        }
 
 
                return -1;
        if (hw == IVTV_HW_TUNER) {
                /* special tuner handling */
-               sd = v4l2_i2c_new_probed_subdev(adap, mod, type,
+               sd = v4l2_i2c_new_probed_subdev(&itv->v4l2_dev,
+                               adap, mod, type,
                                itv->card_i2c->radio);
                if (sd)
                        sd->grp_id = 1 << idx;
-               sd = v4l2_i2c_new_probed_subdev(adap, mod, type,
+               sd = v4l2_i2c_new_probed_subdev(&itv->v4l2_dev,
+                               adap, mod, type,
                                itv->card_i2c->demod);
                if (sd)
                        sd->grp_id = 1 << idx;
-               sd = v4l2_i2c_new_probed_subdev(adap, mod, type,
+               sd = v4l2_i2c_new_probed_subdev(&itv->v4l2_dev,
+                               adap, mod, type,
                                itv->card_i2c->tv);
                if (sd)
                        sd->grp_id = 1 << idx;
        if (hw == IVTV_HW_UPD64031A || hw == IVTV_HW_UPD6408X) {
                unsigned short addrs[2] = { hw_addrs[idx], I2C_CLIENT_END };
 
-               sd = v4l2_i2c_new_probed_subdev(adap, mod, type, addrs);
+               sd = v4l2_i2c_new_probed_subdev(&itv->v4l2_dev,
+                               adap, mod, type, addrs);
        } else {
-               sd = v4l2_i2c_new_subdev(adap, mod, type, hw_addrs[idx]);
+               sd = v4l2_i2c_new_subdev(&itv->v4l2_dev,
+                               adap, mod, type, hw_addrs[idx]);
        }
        if (sd)
                sd->grp_id = 1 << idx;
 
                return -EFAULT;
        }
 
-       mxb->saa7111a = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "saa7115", "saa7111", I2C_SAA7111A);
-       mxb->tea6420_1 = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tea6420", "tea6420", I2C_TEA6420_1);
-       mxb->tea6420_2 = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tea6420", "tea6420", I2C_TEA6420_2);
-       mxb->tea6415c = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tea6415c", "tea6415c", I2C_TEA6415C);
-       mxb->tda9840 = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tda9840", "tda9840", I2C_TDA9840);
-       mxb->tuner = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tuner", "tuner", I2C_TUNER);
-       if (v4l2_i2c_new_subdev(&mxb->i2c_adapter, "saa5246a", "saa5246a", I2C_SAA5246A)) {
+       mxb->saa7111a = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
+                       "saa7115", "saa7111", I2C_SAA7111A);
+       mxb->tea6420_1 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
+                       "tea6420", "tea6420", I2C_TEA6420_1);
+       mxb->tea6420_2 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
+                       "tea6420", "tea6420", I2C_TEA6420_2);
+       mxb->tea6415c = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
+                       "tea6415c", "tea6415c", I2C_TEA6415C);
+       mxb->tda9840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
+                       "tda9840", "tda9840", I2C_TDA9840);
+       mxb->tuner = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
+                       "tuner", "tuner", I2C_TUNER);
+       if (v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
+                       "saa5246a", "saa5246a", I2C_SAA5246A)) {
                printk(KERN_INFO "mxb: found teletext decoder\n");
        }
 
 
                           "Module ID %u:"
                           " Setting up with specified i2c address 0x%x",
                           mid, i2caddr[0]);
-               sd = v4l2_i2c_new_subdev(&hdw->i2c_adap,
+               sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
                                         fname, fname,
                                         i2caddr[0]);
        } else {
                           "Module ID %u:"
                           " Setting up with address probe list",
                           mid);
-               sd = v4l2_i2c_new_probed_subdev(&hdw->i2c_adap,
+               sd = v4l2_i2c_new_probed_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
                                                fname, fname,
                                                i2caddr);
        }
 
                /* Note: radio tuner address is always filled in,
                   so we do not need to probe for a radio tuner device. */
                if (dev->radio_type != UNSET)
-                       v4l2_i2c_new_subdev(&dev->i2c_adap,
-                               "tuner", "tuner", dev->radio_addr);
+                       v4l2_i2c_new_subdev(&dev->v4l2_dev,
+                               &dev->i2c_adap, "tuner", "tuner",
+                               dev->radio_addr);
                if (has_demod)
-                       v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner",
-                               "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
+                       v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
+                               &dev->i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
                if (dev->tuner_addr == ADDR_UNSET) {
                        enum v4l2_i2c_tuner_type type =
                                has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
 
-                       v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner",
-                               "tuner", v4l2_i2c_tuner_addrs(type));
+                       v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
+                               &dev->i2c_adap, "tuner", "tuner",
+                               v4l2_i2c_tuner_addrs(type));
                } else {
-                       v4l2_i2c_new_subdev(&dev->i2c_adap,
-                               "tuner", "tuner", dev->tuner_addr);
+                       v4l2_i2c_new_subdev(&dev->v4l2_dev,
+                               &dev->i2c_adap, "tuner", "tuner",
+                               dev->tuner_addr);
                }
        }
 
 
        /* load i2c helpers */
        if (card_is_empress(dev)) {
                struct v4l2_subdev *sd =
-                       v4l2_i2c_new_subdev(&dev->i2c_adap,
+                       v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
                                "saa6752hs", "saa6752hs",
                                saa7134_boards[dev->board].empress_addr);
 
                struct v4l2_subdev *sd;
 
                addrs[0] = saa7134_boards[dev->board].rds_addr;
-               sd = v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "saa6588",
-                           "saa6588", addrs);
+               sd = v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
+                               "saa6588", "saa6588", addrs);
                if (sd)
                        printk(KERN_INFO "%s: found RDS decoder\n", dev->name);
        }
 
        switch (usbvision_device_data[usbvision->DevModel].Codec) {
        case CODEC_SAA7113:
        case CODEC_SAA7111:
-               v4l2_i2c_new_probed_subdev(&usbvision->i2c_adap, "saa7115",
+               v4l2_i2c_new_probed_subdev(&usbvision->v4l2_dev,
+                               &usbvision->i2c_adap, "saa7115",
                                "saa7115_auto", saa711x_addrs);
                break;
        }
                enum v4l2_i2c_tuner_type type;
                struct tuner_setup tun_setup;
 
-               sd = v4l2_i2c_new_probed_subdev(&usbvision->i2c_adap, "tuner",
+               sd = v4l2_i2c_new_probed_subdev(&usbvision->v4l2_dev,
+                               &usbvision->i2c_adap, "tuner",
                                "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
                /* depending on whether we found a demod or not, select
                   the tuner type. */
                type = sd ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
 
-               sd = v4l2_i2c_new_probed_subdev(&usbvision->i2c_adap, "tuner",
+               sd = v4l2_i2c_new_probed_subdev(&usbvision->v4l2_dev,
+                               &usbvision->i2c_adap, "tuner",
                                "tuner", v4l2_i2c_tuner_addrs(type));
 
                if (usbvision->tuner_type != -1) {
 
 
 
 
-/* Load an i2c sub-device. It assumes that i2c_get_adapdata(adapter)
-   returns the v4l2_device and that i2c_get_clientdata(client)
-   returns the v4l2_subdev. */
-struct v4l2_subdev *v4l2_i2c_new_subdev(struct i2c_adapter *adapter,
+/* Load an i2c sub-device. */
+struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
+               struct i2c_adapter *adapter,
                const char *module_name, const char *client_type, u8 addr)
 {
-       struct v4l2_device *dev = i2c_get_adapdata(adapter);
        struct v4l2_subdev *sd = NULL;
        struct i2c_client *client;
        struct i2c_board_info info;
 
-       BUG_ON(!dev);
+       BUG_ON(!v4l2_dev);
 
        if (module_name)
                request_module(module_name);
 
        /* Register with the v4l2_device which increases the module's
           use count as well. */
-       if (v4l2_device_register_subdev(dev, sd))
+       if (v4l2_device_register_subdev(v4l2_dev, sd))
                sd = NULL;
        /* Decrease the module use count to match the first try_module_get. */
        module_put(client->driver->driver.owner);
 }
 EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev);
 
-/* Probe and load an i2c sub-device. It assumes that i2c_get_adapdata(adapter)
-   returns the v4l2_device and that i2c_get_clientdata(client)
-   returns the v4l2_subdev. */
-struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter,
+/* Probe and load an i2c sub-device. */
+struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct v4l2_device *v4l2_dev,
+       struct i2c_adapter *adapter,
        const char *module_name, const char *client_type,
        const unsigned short *addrs)
 {
-       struct v4l2_device *dev = i2c_get_adapdata(adapter);
        struct v4l2_subdev *sd = NULL;
        struct i2c_client *client = NULL;
        struct i2c_board_info info;
 
-       BUG_ON(!dev);
+       BUG_ON(!v4l2_dev);
 
        if (module_name)
                request_module(module_name);
 
        /* Register with the v4l2_device which increases the module's
           use count as well. */
-       if (v4l2_device_register_subdev(dev, sd))
+       if (v4l2_device_register_subdev(v4l2_dev, sd))
                sd = NULL;
        /* Decrease the module use count to match the first try_module_get. */
        module_put(client->driver->driver.owner);
 
        vino_init_stage++;
 
        addr[0] = 0x45;
-       vino_drvdata->decoder = v4l2_i2c_new_probed_subdev(&vino_i2c_adapter,
-                       "saa7191", "saa7191", addr);
+       vino_drvdata->decoder =
+               v4l2_i2c_new_probed_subdev(&vino_drvdata->v4l2_dev,
+                       &vino_i2c_adapter, "saa7191", "saa7191", addr);
        addr[0] = 0x2b;
-       vino_drvdata->camera = v4l2_i2c_new_probed_subdev(&vino_i2c_adapter,
-                       "indycam", "indycam", addr);
+       vino_drvdata->camera =
+               v4l2_i2c_new_probed_subdev(&vino_drvdata->v4l2_dev,
+                       &vino_i2c_adapter, "indycam", "indycam", addr);
 
        dprintk("init complete!\n");
 
 
        w9968cf_turn_on_led(cam);
 
        w9968cf_i2c_init(cam);
-       cam->sensor_sd = v4l2_i2c_new_probed_subdev(&cam->i2c_adapter,
+       cam->sensor_sd = v4l2_i2c_new_probed_subdev(&cam->v4l2_dev,
+                       &cam->i2c_adapter,
                        "ovcamchip", "ovcamchip", addrs);
 
        usb_set_intfdata(intf, cam);
 
                goto zr_free_irq;
        }
 
-       zr->decoder = v4l2_i2c_new_probed_subdev(&zr->i2c_adapter,
-               zr->card.mod_decoder, zr->card.i2c_decoder, zr->card.addrs_decoder);
+       zr->decoder = v4l2_i2c_new_probed_subdev(&zr->v4l2_dev,
+               &zr->i2c_adapter, zr->card.mod_decoder, zr->card.i2c_decoder,
+               zr->card.addrs_decoder);
 
        if (zr->card.mod_encoder)
-               zr->encoder = v4l2_i2c_new_probed_subdev(&zr->i2c_adapter,
+               zr->encoder = v4l2_i2c_new_probed_subdev(&zr->v4l2_dev,
+                       &zr->i2c_adapter,
                        zr->card.mod_encoder, zr->card.i2c_encoder,
                        zr->card.addrs_encoder);
 
 
 /* Load an i2c module and return an initialized v4l2_subdev struct.
    Only call request_module if module_name != NULL.
    The client_type argument is the name of the chip that's on the adapter. */
-struct v4l2_subdev *v4l2_i2c_new_subdev(struct i2c_adapter *adapter,
+struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
+               struct i2c_adapter *adapter,
                const char *module_name, const char *client_type, u8 addr);
 /* Probe and load an i2c module and return an initialized v4l2_subdev struct.
    Only call request_module if module_name != NULL.
    The client_type argument is the name of the chip that's on the adapter. */
-struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter,
+struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct v4l2_device *v4l2_dev,
+               struct i2c_adapter *adapter,
                const char *module_name, const char *client_type,
                const unsigned short *addrs);
 /* Like v4l2_i2c_new_probed_subdev, except probe for a single address. */