]> err.no Git - linux-2.6/blobdiff - drivers/media/dvb/b2c2/flexcop-fe-tuner.c
[PATCH] dvb: frontend: stv0299: pass i2c bus to pll callback
[linux-2.6] / drivers / media / dvb / b2c2 / flexcop-fe-tuner.c
index 71be400e9aeb710316ae65bf1860bb66323f51e9..a36bec3a2beaa9f2a79491ac6a2b01a185381609 100644 (file)
@@ -10,6 +10,7 @@
 #include "stv0299.h"
 #include "mt352.h"
 #include "nxt2002.h"
+#include "bcm3510.h"
 #include "stv0297.h"
 #include "mt312.h"
 
@@ -163,12 +164,11 @@ static int samsung_tbmu24112_set_symbol_rate(struct dvb_frontend* fe, u32 srate,
        return 0;
 }
 
-static int samsung_tbmu24112_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
+static int samsung_tbmu24112_pll_set(struct dvb_frontend* fe, struct i2c_adapter *i2c, struct dvb_frontend_parameters* params)
 {
        u8 buf[4];
        u32 div;
        struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = buf, .len = sizeof(buf) };
-       struct flexcop_device *fc = fe->dvb->priv;
 
        div = params->frequency / 125;
 
@@ -179,7 +179,7 @@ static int samsung_tbmu24112_pll_set(struct dvb_frontend* fe, struct dvb_fronten
 
        if (params->frequency < 1500000) buf[3] |= 0x10;
 
-       if (i2c_transfer(&fc->i2c_adap, &msg, 1) != 1)
+       if (i2c_transfer(i2c, &msg, 1) != 1)
                return -EIO;
        return 0;
 }
@@ -285,21 +285,25 @@ static int samsung_tdtc9251dh0_pll_set(struct dvb_frontend* fe, struct dvb_front
 }
 
 static struct mt352_config samsung_tdtc9251dh0_config = {
-
        .demod_address = 0x0f,
-       .demod_init = samsung_tdtc9251dh0_demod_init,
-       .pll_set = samsung_tdtc9251dh0_pll_set,
+       .demod_init    = samsung_tdtc9251dh0_demod_init,
+       .pll_set       = samsung_tdtc9251dh0_pll_set,
 };
 
-static int nxt2002_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
+static int flexcop_fe_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
 {
        struct flexcop_device *fc = fe->dvb->priv;
        return request_firmware(fw, name, fc->dev);
 }
 
 static struct nxt2002_config samsung_tbmv_config = {
-       .demod_address = 0x0a,
-       .request_firmware = nxt2002_request_firmware,
+       .demod_address    = 0x0a,
+       .request_firmware = flexcop_fe_request_firmware,
+};
+
+static struct bcm3510_config air2pc_atsc_first_gen_config = {
+       .demod_address    = 0x0f,
+       .request_firmware = flexcop_fe_request_firmware,
 };
 
 static int skystar23_samsung_tbdu18132_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
@@ -354,11 +358,16 @@ int flexcop_frontend_init(struct flexcop_device *fc)
                fc->dev_type          = FC_AIR_DVB;
                info("found the mt352 at i2c address: 0x%02x",samsung_tdtc9251dh0_config.demod_address);
        } else
-       /* try the air atsc (nxt2002) */
+       /* try the air atsc 2nd generation (nxt2002) */
        if ((fc->fe = nxt2002_attach(&samsung_tbmv_config, &fc->i2c_adap)) != NULL) {
-               fc->dev_type          = FC_AIR_ATSC;
+               fc->dev_type          = FC_AIR_ATSC2;
                info("found the nxt2002 at i2c address: 0x%02x",samsung_tbmv_config.demod_address);
        } else
+       /* try the air atsc 1nd generation (bcm3510)/panasonic ct10s */
+       if ((fc->fe = bcm3510_attach(&air2pc_atsc_first_gen_config, &fc->i2c_adap)) != NULL) {
+               fc->dev_type          = FC_AIR_ATSC1;
+               info("found the bcm3510 at i2c address: 0x%02x",air2pc_atsc_first_gen_config.demod_address);
+       } else
        /* try the cable dvb (stv0297) */
        if ((fc->fe = stv0297_attach(&alps_tdee4_stv0297_config, &fc->i2c_adap, 0xf8)) != NULL) {
                fc->dev_type                        = FC_CABLE;