.i2c_wr_max = 21,
 };
 
-static const struct fc2580_config af9035_fc2580_config = {
-       .i2c_addr = 0x56,
-       .clock = 16384000,
-};
-
 static const struct fc0012_config af9035_fc0012_config[] = {
        {
                .i2c_address = 0x63,
                fe = dvb_attach(tda18218_attach, adap->fe[0],
                                &d->i2c_adap, &af9035_tda18218_config);
                break;
-       case AF9033_TUNER_FC2580:
+       case AF9033_TUNER_FC2580: {
+               struct fc2580_platform_data fc2580_pdata = {
+                       .dvb_frontend = adap->fe[0],
+               };
+
                /* Tuner enable using gpiot2_o, gpiot2_en and gpiot2_on  */
                ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
                if (ret < 0)
 
                usleep_range(10000, 50000);
                /* attach tuner */
-               fe = dvb_attach(fc2580_attach, adap->fe[0],
-                               &d->i2c_adap, &af9035_fc2580_config);
+               ret = af9035_add_i2c_dev(d, "fc2580", 0x56, &fc2580_pdata,
+                                        &d->i2c_adap);
+               if (ret)
+                       goto err;
+
+               fe = adap->fe[0];
                break;
+       }
        case AF9033_TUNER_FC0012:
                /*
                 * AF9035 gpiot2 = FC0012 enable
        dev_dbg(&d->udev->dev, "%s: adap->id=%d\n", __func__, adap->id);
 
        switch (state->af9033_config[adap->id].tuner) {
+       case AF9033_TUNER_FC2580:
        case AF9033_TUNER_IT9135_38:
        case AF9033_TUNER_IT9135_51:
        case AF9033_TUNER_IT9135_52: