[media] rtl28xxu: bind tua9001 using I2C binding
authorAntti Palosaari <crope@iki.fi>
Wed, 15 Apr 2015 22:25:32 +0000 (19:25 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 18 May 2015 18:52:36 +0000 (15:52 -0300)
Change tua9001 driver from media binding to I2C client binding.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/usb/dvb-usb-v2/rtl28xxu.c

index 3ff4362585df895b876ab20e6bb17e10ae02dc14..2bb71056ec3b859baa4ec5b5a1f1e26f59ec4feb 100644 (file)
@@ -1100,10 +1100,6 @@ err:
        return ret;
 }
 
-static struct tua9001_config rtl2832u_tua9001_config = {
-       .i2c_addr = 0x60,
-};
-
 static const struct fc0012_config rtl2832u_fc0012_config = {
        .i2c_address = 0x63, /* 0xc6 >> 1 */
        .xtal_freq = FC_XTAL_28_8_MHZ,
@@ -1203,7 +1199,12 @@ static int rtl2832u_tuner_attach(struct dvb_usb_adapter *adap)
                        dev->i2c_client_tuner = client;
                }
                break;
-       case TUNER_RTL2832_TUA9001:
+       case TUNER_RTL2832_TUA9001: {
+               struct tua9001_platform_data tua9001_pdata = {
+                       .dvb_frontend = adap->fe[0],
+               };
+               struct i2c_board_info board_info = {};
+
                /* enable GPIO1 and GPIO4 as output */
                ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_DIR, 0x00, 0x12);
                if (ret)
@@ -1213,10 +1214,20 @@ static int rtl2832u_tuner_attach(struct dvb_usb_adapter *adap)
                if (ret)
                        goto err;
 
-               fe = dvb_attach(tua9001_attach, adap->fe[0],
-                               dev->demod_i2c_adapter,
-                               &rtl2832u_tua9001_config);
+               strlcpy(board_info.type, "tua9001", I2C_NAME_SIZE);
+               board_info.addr = 0x60;
+               board_info.platform_data = &tua9001_pdata;
+               request_module("tua9001");
+               client = i2c_new_device(dev->demod_i2c_adapter, &board_info);
+               if (client == NULL || client->dev.driver == NULL)
+                       break;
+               if (!try_module_get(client->dev.driver->owner)) {
+                       i2c_unregister_device(client);
+                       break;
+               }
+               dev->i2c_client_tuner = client;
                break;
+       }
        case TUNER_RTL2832_R820T:
                fe = dvb_attach(r820t_attach, adap->fe[0],
                                dev->demod_i2c_adapter,