[media] cx23885: Hauppauge WinTV-HVR5525 bind I2C SEC
authorAntti Palosaari <crope@iki.fi>
Mon, 20 Apr 2015 20:08:01 +0000 (17:08 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Sat, 6 Jun 2015 10:24:55 +0000 (07:24 -0300)
Bind a8293 SEC using I2C binding.

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

index ef1ebcb0420b2d5a4449a5717368763f9c25d664..9f377ad5e84573622942b1ad14f29dabe764e24b 100644 (file)
@@ -864,10 +864,6 @@ static const struct tda10071_platform_data hauppauge_tda10071_pdata = {
        .tuner_i2c_addr = 0x54,
 };
 
-static const struct a8293_config hauppauge_a8293_config = {
-       .i2c_addr = 0x0b,
-};
-
 static const struct si2165_config hauppauge_hvr4400_si2165_config = {
        .i2c_addr       = 0x64,
        .chip_mode      = SI2165_MODE_PLL_XTAL,
@@ -2167,6 +2163,7 @@ static int dvb_register(struct cx23885_tsport *port)
        case CX23885_BOARD_HAUPPAUGE_HVR5525:
                switch (port->nr) {
                struct m88rs6000t_config m88rs6000t_config;
+               struct a8293_platform_data a8293_pdata = {};
 
                /* port b - satellite */
                case 1:
@@ -2178,10 +2175,20 @@ static int dvb_register(struct cx23885_tsport *port)
                                break;
 
                        /* attach SEC */
-                       if (!dvb_attach(a8293_attach, fe0->dvb.frontend,
-                                       &dev->i2c_bus[0].i2c_adap,
-                                       &hauppauge_a8293_config))
+                       a8293_pdata.dvb_frontend = fe0->dvb.frontend;
+                       memset(&info, 0, sizeof(info));
+                       strlcpy(info.type, "a8293", I2C_NAME_SIZE);
+                       info.addr = 0x0b;
+                       info.platform_data = &a8293_pdata;
+                       request_module("a8293");
+                       client_sec = i2c_new_device(&dev->i2c_bus[0].i2c_adap, &info);
+                       if (!client_sec || !client_sec->dev.driver)
                                goto frontend_detach;
+                       if (!try_module_get(client_sec->dev.driver->owner)) {
+                               i2c_unregister_device(client_sec);
+                               goto frontend_detach;
+                       }
+                       port->i2c_client_sec = client_sec;
 
                        /* attach tuner */
                        memset(&m88rs6000t_config, 0, sizeof(m88rs6000t_config));