/* request some modules */
        if (dev->board.decoder == CX231XX_AVDECODER) {
                dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
-                                       &dev->i2c_bus[I2C_0].i2c_adap,
+                                       cx231xx_get_i2c_adap(dev, I2C_0),
                                        "cx25840", 0x88 >> 1, NULL);
                if (dev->sd_cx25840 == NULL)
                        cx231xx_info("cx25840 subdev registration failure\n");
 
        /* Initialize the tuner */
        if (dev->board.tuner_type != TUNER_ABSENT) {
+               struct i2c_adapter *tuner_i2c = cx231xx_get_i2c_adap(dev,
+                                               dev->board.tuner_i2c_master);
                dev->sd_tuner = v4l2_i2c_new_subdev(&dev->v4l2_dev,
-                                                   &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                                                   tuner_i2c,
                                                    "tuner",
                                                    dev->tuner_addr, NULL);
                if (dev->sd_tuner == NULL)
                        struct i2c_client client;
 
                        memset(&client, 0, sizeof(client));
-                       client.adapter = &dev->i2c_bus[I2C_1].i2c_adap;
+                       client.adapter = cx231xx_get_i2c_adap(dev, I2C_1);
                        client.addr = 0xa0 >> 1;
 
                        read_eeprom(dev, &client, eeprom, sizeof(eeprom));
 
        struct xc5000_config cfg;
 
        memset(&cfg, 0, sizeof(cfg));
-       cfg.i2c_adap = &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap;
+       cfg.i2c_adap = cx231xx_get_i2c_adap(dev, dev->board.tuner_i2c_master);
        cfg.i2c_addr = addr;
 
        if (!dev->dvb->frontend) {
 {
        int result = 0;
        struct cx231xx_dvb *dvb;
+       struct i2c_adapter *tuner_i2c;
+       struct i2c_adapter *demod_i2c;
 
        if (!dev->board.has_dvb) {
                /* This device does not support the extension */
        dev->cx231xx_set_analog_freq = cx231xx_set_analog_freq;
        dev->cx231xx_reset_analog_tuner = cx231xx_reset_analog_tuner;
 
+       tuner_i2c = cx231xx_get_i2c_adap(dev, dev->board.tuner_i2c_master);
+       demod_i2c = cx231xx_get_i2c_adap(dev, dev->board.demod_i2c_master);
        mutex_lock(&dev->lock);
        cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE);
        cx231xx_demod_reset(dev);
 
                dev->dvb->frontend = dvb_attach(s5h1432_attach,
                                        &dvico_s5h1432_config,
-                                       &dev->i2c_bus[dev->board.demod_i2c_master].i2c_adap);
+                                       demod_i2c);
 
                if (dev->dvb->frontend == NULL) {
                        printk(DRIVER_NAME
                dvb->frontend->callback = cx231xx_tuner_callback;
 
                if (!dvb_attach(xc5000_attach, dev->dvb->frontend,
-                              &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                              tuner_i2c,
                               &cnxt_rde250_tunerconfig)) {
                        result = -EINVAL;
                        goto out_free;
 
                dev->dvb->frontend = dvb_attach(s5h1411_attach,
                                               &xc5000_s5h1411_config,
-                                              &dev->i2c_bus[dev->board.demod_i2c_master].i2c_adap);
+                                              demod_i2c);
 
                if (dev->dvb->frontend == NULL) {
                        printk(DRIVER_NAME
                dvb->frontend->callback = cx231xx_tuner_callback;
 
                if (!dvb_attach(xc5000_attach, dev->dvb->frontend,
-                              &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                              tuner_i2c,
                               &cnxt_rdu250_tunerconfig)) {
                        result = -EINVAL;
                        goto out_free;
 
                dev->dvb->frontend = dvb_attach(s5h1432_attach,
                                        &dvico_s5h1432_config,
-                                       &dev->i2c_bus[dev->board.demod_i2c_master].i2c_adap);
+                                       demod_i2c);
 
                if (dev->dvb->frontend == NULL) {
                        printk(DRIVER_NAME
                dvb->frontend->callback = cx231xx_tuner_callback;
 
                if (!dvb_attach(tda18271_attach, dev->dvb->frontend,
-                              0x60, &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                              0x60, tuner_i2c,
                               &cnxt_rde253s_tunerconfig)) {
                        result = -EINVAL;
                        goto out_free;
 
                dev->dvb->frontend = dvb_attach(s5h1411_attach,
                                               &tda18271_s5h1411_config,
-                                              &dev->i2c_bus[dev->board.demod_i2c_master].i2c_adap);
+                                              demod_i2c);
 
                if (dev->dvb->frontend == NULL) {
                        printk(DRIVER_NAME
                dvb->frontend->callback = cx231xx_tuner_callback;
 
                if (!dvb_attach(tda18271_attach, dev->dvb->frontend,
-                              0x60, &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                              0x60, tuner_i2c,
                               &cnxt_rde253s_tunerconfig)) {
                        result = -EINVAL;
                        goto out_free;
        case CX231XX_BOARD_HAUPPAUGE_EXETER:
 
                printk(KERN_INFO "%s: looking for tuner / demod on i2c bus: %d\n",
-                      __func__, i2c_adapter_id(&dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap));
+                      __func__, i2c_adapter_id(tuner_i2c));
 
                dev->dvb->frontend = dvb_attach(lgdt3305_attach,
                                                &hcw_lgdt3305_config,
-                                               &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap);
+                                               tuner_i2c);
 
                if (dev->dvb->frontend == NULL) {
                        printk(DRIVER_NAME
                dvb->frontend->callback = cx231xx_tuner_callback;
 
                dvb_attach(tda18271_attach, dev->dvb->frontend,
-                          0x60, &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                          0x60, tuner_i2c,
                           &hcw_tda18271_config);
                break;
 
 
                dev->dvb->frontend = dvb_attach(si2165_attach,
                        &hauppauge_930C_HD_1113xx_si2165_config,
-                       &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap
+                       tuner_i2c
                        );
 
                if (dev->dvb->frontend == NULL) {
 
                dvb_attach(tda18271_attach, dev->dvb->frontend,
                        0x60,
-                       &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                       tuner_i2c,
                        &hcw_tda18271_config);
 
                dev->cx231xx_reset_analog_tuner = NULL;
 
                dev->dvb->frontend = dvb_attach(si2165_attach,
                        &pctv_quatro_stick_1114xx_si2165_config,
-                       &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap
+                       tuner_i2c
                        );
 
                if (dev->dvb->frontend == NULL) {
                request_module("si2157");
 
                client = i2c_new_device(
-                       &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                       tuner_i2c,
                        &info);
                if (client == NULL || client->dev.driver == NULL) {
                        dvb_frontend_detach(dev->dvb->frontend);
        case CX231XX_BOARD_KWORLD_UB430_USB_HYBRID:
 
                printk(KERN_INFO "%s: looking for demod on i2c bus: %d\n",
-                      __func__, i2c_adapter_id(&dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap));
+                      __func__, i2c_adapter_id(tuner_i2c));
 
                dev->dvb->frontend = dvb_attach(mb86a20s_attach,
                                                &pv_mb86a20s_config,
-                                               &dev->i2c_bus[dev->board.demod_i2c_master].i2c_adap);
+                                               demod_i2c);
 
                if (dev->dvb->frontend == NULL) {
                        printk(DRIVER_NAME
                dvb->frontend->callback = cx231xx_tuner_callback;
 
                dvb_attach(tda18271_attach, dev->dvb->frontend,
-                          0x60, &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
+                          0x60, tuner_i2c,
                           &pv_tda18271_config);
                break;