|
@@ -132,9 +132,9 @@ static int mt352_aver777_init(struct dvb_frontend* fe)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
|
|
|
- struct dvb_frontend_parameters* params,
|
|
|
- u8* pllbuf)
|
|
|
+static int mt352_pinnacle_tuner_pllbuf(struct dvb_frontend* fe,
|
|
|
+ struct dvb_frontend_parameters* params,
|
|
|
+ u8* pllbuf, int buf_len)
|
|
|
{
|
|
|
u8 off[] = { 0x00, 0xf1};
|
|
|
u8 on[] = { 0x00, 0x71};
|
|
@@ -143,6 +143,9 @@ static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
struct v4l2_frequency f;
|
|
|
|
|
|
+ if (buf_len < 5)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
/* set frequency (mt2050) */
|
|
|
f.tuner = 0;
|
|
|
f.type = V4L2_TUNER_DIGITAL_TV;
|
|
@@ -156,21 +159,24 @@ static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
|
|
|
|
|
|
/* mt352 setup */
|
|
|
mt352_pinnacle_init(fe);
|
|
|
- pllbuf[0] = 0xc2;
|
|
|
+ pllbuf[0] = 0x61;
|
|
|
pllbuf[1] = 0x00;
|
|
|
pllbuf[2] = 0x00;
|
|
|
pllbuf[3] = 0x80;
|
|
|
pllbuf[4] = 0x00;
|
|
|
- return 0;
|
|
|
+ return 5;
|
|
|
}
|
|
|
|
|
|
-static int mt352_aver777_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params, u8* pllbuf)
|
|
|
+static int mt352_aver777_tuner_pllbuf(struct dvb_frontend *fe, struct dvb_frontend_parameters *params, u8* pllbuf, int buf_len)
|
|
|
{
|
|
|
- pllbuf[0] = 0xc2;
|
|
|
+ if (buf_len < 5)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ pllbuf[0] = 0x61;
|
|
|
dvb_pll_configure(&dvb_pll_philips_td1316, pllbuf+1,
|
|
|
params->frequency,
|
|
|
params->u.ofdm.bandwidth);
|
|
|
- return 0;
|
|
|
+ return 5;
|
|
|
}
|
|
|
|
|
|
static struct mt352_config pinnacle_300i = {
|
|
@@ -179,13 +185,11 @@ static struct mt352_config pinnacle_300i = {
|
|
|
.if2 = 36150,
|
|
|
.no_tuner = 1,
|
|
|
.demod_init = mt352_pinnacle_init,
|
|
|
- .pll_set = mt352_pinnacle_pll_set,
|
|
|
};
|
|
|
|
|
|
static struct mt352_config avermedia_777 = {
|
|
|
.demod_address = 0xf,
|
|
|
.demod_init = mt352_aver777_init,
|
|
|
- .pll_set = mt352_aver777_pll_set,
|
|
|
};
|
|
|
#endif
|
|
|
|
|
@@ -268,6 +272,8 @@ static int philips_tda6651_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb_
|
|
|
tuner_buf[2] = 0xca;
|
|
|
tuner_buf[3] = (cp << 5) | (filter << 3) | band;
|
|
|
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
msleep(1);
|
|
@@ -281,6 +287,8 @@ static int philips_tda6651_pll_init(u8 addr, struct dvb_frontend *fe)
|
|
|
struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tu1216_init,.len = sizeof(tu1216_init) };
|
|
|
|
|
|
/* setup PLL configuration */
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
msleep(1);
|
|
@@ -290,12 +298,12 @@ static int philips_tda6651_pll_init(u8 addr, struct dvb_frontend *fe)
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int philips_tu1216_pll_60_init(struct dvb_frontend *fe)
|
|
|
+static int philips_tu1216_tuner_60_init(struct dvb_frontend *fe)
|
|
|
{
|
|
|
return philips_tda6651_pll_init(0x60, fe);
|
|
|
}
|
|
|
|
|
|
-static int philips_tu1216_pll_60_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int philips_tu1216_tuner_60_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
return philips_tda6651_pll_set(0x60, fe, params);
|
|
|
}
|
|
@@ -315,20 +323,17 @@ static struct tda1004x_config philips_tu1216_60_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_4M,
|
|
|
.agc_config = TDA10046_AGC_DEFAULT,
|
|
|
.if_freq = TDA10046_FREQ_3617,
|
|
|
- .pll_init = philips_tu1216_pll_60_init,
|
|
|
- .pll_set = philips_tu1216_pll_60_set,
|
|
|
- .pll_sleep = NULL,
|
|
|
.request_firmware = philips_tu1216_request_firmware,
|
|
|
};
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int philips_tu1216_pll_61_init(struct dvb_frontend *fe)
|
|
|
+static int philips_tu1216_tuner_61_init(struct dvb_frontend *fe)
|
|
|
{
|
|
|
return philips_tda6651_pll_init(0x61, fe);
|
|
|
}
|
|
|
|
|
|
-static int philips_tu1216_pll_61_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int philips_tu1216_tuner_61_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
return philips_tda6651_pll_set(0x61, fe, params);
|
|
|
}
|
|
@@ -341,21 +346,20 @@ static struct tda1004x_config philips_tu1216_61_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_4M,
|
|
|
.agc_config = TDA10046_AGC_DEFAULT,
|
|
|
.if_freq = TDA10046_FREQ_3617,
|
|
|
- .pll_init = philips_tu1216_pll_61_init,
|
|
|
- .pll_set = philips_tu1216_pll_61_set,
|
|
|
- .pll_sleep = NULL,
|
|
|
.request_firmware = philips_tu1216_request_firmware,
|
|
|
};
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int philips_europa_pll_init(struct dvb_frontend *fe)
|
|
|
+static int philips_europa_tuner_init(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
static u8 msg[] = { 0x0b, 0xf5, 0x86, 0xab };
|
|
|
struct i2c_msg init_msg = {.addr = 0x61,.flags = 0,.buf = msg,.len = sizeof(msg) };
|
|
|
|
|
|
/* setup PLL configuration */
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
msleep(1);
|
|
@@ -365,18 +369,20 @@ static int philips_europa_pll_init(struct dvb_frontend *fe)
|
|
|
init_msg.len = 0x02;
|
|
|
msg[0] = 0x00;
|
|
|
msg[1] = 0x40;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int philips_td1316_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int philips_td1316_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
return philips_tda6651_pll_set(0x61, fe, params);
|
|
|
}
|
|
|
|
|
|
-static void philips_europa_analog(struct dvb_frontend *fe)
|
|
|
+static int philips_europa_tuner_sleep(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
/* this message actually turns the tuner back to analog mode */
|
|
@@ -391,7 +397,20 @@ static void philips_europa_analog(struct dvb_frontend *fe)
|
|
|
analog_msg.len = 0x02;
|
|
|
msg[0] = 0x00;
|
|
|
msg[1] = 0x14;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &analog_msg, 1);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int philips_europa_demod_sleep(struct dvb_frontend *fe)
|
|
|
+{
|
|
|
+ struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
+
|
|
|
+ if (dev->original_demod_sleep)
|
|
|
+ dev->original_demod_sleep(fe);
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static struct tda1004x_config philips_europa_config = {
|
|
@@ -402,21 +421,20 @@ static struct tda1004x_config philips_europa_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_4M,
|
|
|
.agc_config = TDA10046_AGC_IFO_AUTO_POS,
|
|
|
.if_freq = TDA10046_FREQ_052,
|
|
|
- .pll_init = philips_europa_pll_init,
|
|
|
- .pll_set = philips_td1316_pll_set,
|
|
|
- .pll_sleep = philips_europa_analog,
|
|
|
.request_firmware = NULL,
|
|
|
};
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int philips_fmd1216_pll_init(struct dvb_frontend *fe)
|
|
|
+static int philips_fmd1216_tuner_init(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
/* this message is to set up ATC and ALC */
|
|
|
static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0xa0 };
|
|
|
struct i2c_msg tuner_msg = {.addr = 0x61,.flags = 0,.buf = fmd1216_init,.len = sizeof(fmd1216_init) };
|
|
|
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
msleep(1);
|
|
@@ -424,22 +442,27 @@ static int philips_fmd1216_pll_init(struct dvb_frontend *fe)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void philips_fmd1216_analog(struct dvb_frontend *fe)
|
|
|
+static int philips_fmd1216_tuner_sleep(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
/* this message actually turns the tuner back to analog mode */
|
|
|
static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0x60 };
|
|
|
struct i2c_msg tuner_msg = {.addr = 0x61,.flags = 0,.buf = fmd1216_init,.len = sizeof(fmd1216_init) };
|
|
|
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
|
|
|
msleep(1);
|
|
|
fmd1216_init[2] = 0x86;
|
|
|
fmd1216_init[3] = 0x54;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
|
|
|
msleep(1);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
-static int philips_fmd1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int philips_fmd1216_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
u8 tuner_buf[4];
|
|
@@ -516,6 +539,8 @@ static int philips_fmd1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_
|
|
|
tuner_buf[2] = 0x80 | (cp << 6) | (mode << 3) | 4;
|
|
|
tuner_buf[3] = 0x40 | band;
|
|
|
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
return 0;
|
|
@@ -528,9 +553,6 @@ static struct tda1004x_config medion_cardbus = {
|
|
|
.xtal_freq = TDA10046_XTAL_16M,
|
|
|
.agc_config = TDA10046_AGC_IFO_AUTO_NEG,
|
|
|
.if_freq = TDA10046_FREQ_3613,
|
|
|
- .pll_init = philips_fmd1216_pll_init,
|
|
|
- .pll_set = philips_fmd1216_pll_set,
|
|
|
- .pll_sleep = philips_fmd1216_analog,
|
|
|
.request_firmware = NULL,
|
|
|
};
|
|
|
|
|
@@ -578,12 +600,12 @@ static struct tda827x_data tda827x_dvbt[] = {
|
|
|
{ .lomax = 0, .spd = 0, .bs = 0, .bp = 0, .cp = 0, .gc3 = 0, .div1p5 = 0}
|
|
|
};
|
|
|
|
|
|
-static int philips_tda827x_pll_init(struct dvb_frontend *fe)
|
|
|
+static int philips_tda827x_tuner_init(struct dvb_frontend *fe)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int philips_tda827x_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int philips_tda827x_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
u8 tuner_buf[14];
|
|
@@ -630,6 +652,8 @@ static int philips_tda827x_pll_set(struct dvb_frontend *fe, struct dvb_frontend_
|
|
|
tuner_buf[13] = 0x40;
|
|
|
|
|
|
tuner_msg.len = 14;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
|
|
@@ -638,18 +662,23 @@ static int philips_tda827x_pll_set(struct dvb_frontend *fe, struct dvb_frontend_
|
|
|
tuner_buf[0] = 0x30;
|
|
|
tuner_buf[1] = 0x50 + tda827x_dvbt[i].cp;
|
|
|
tuner_msg.len = 2;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void philips_tda827x_pll_sleep(struct dvb_frontend *fe)
|
|
|
+static int philips_tda827x_tuner_sleep(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
static u8 tda827x_sleep[] = { 0x30, 0xd0};
|
|
|
struct i2c_msg tuner_msg = {.addr = 0x60,.flags = 0,.buf = tda827x_sleep,
|
|
|
.len = sizeof(tda827x_sleep) };
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static struct tda1004x_config tda827x_lifeview_config = {
|
|
@@ -659,9 +688,6 @@ static struct tda1004x_config tda827x_lifeview_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_16M,
|
|
|
.agc_config = TDA10046_AGC_TDA827X,
|
|
|
.if_freq = TDA10046_FREQ_045,
|
|
|
- .pll_init = philips_tda827x_pll_init,
|
|
|
- .pll_set = philips_tda827x_pll_set,
|
|
|
- .pll_sleep = philips_tda827x_pll_sleep,
|
|
|
.request_firmware = NULL,
|
|
|
};
|
|
|
|
|
@@ -753,6 +779,8 @@ static int philips_tda827xa_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb
|
|
|
tuner_buf[12] = 0x00;
|
|
|
tuner_buf[13] = 0x39; // lpsel
|
|
|
msg.len = 14;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
|
|
|
return -EIO;
|
|
|
|
|
@@ -760,10 +788,14 @@ static int philips_tda827xa_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb
|
|
|
msg.len = 2;
|
|
|
reg2[0] = 0x60;
|
|
|
reg2[1] = 0x3c;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
|
|
|
|
|
reg2[0] = 0xa0;
|
|
|
reg2[1] = 0x40;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
|
|
|
|
|
msleep(2);
|
|
@@ -771,36 +803,43 @@ static int philips_tda827xa_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb
|
|
|
reg2[0] = 0x30;
|
|
|
reg2[1] = 0x10 + tda827xa_dvbt[i].scr;
|
|
|
msg.len = 2;
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
|
|
|
|
|
msleep(550);
|
|
|
reg2[0] = 0x50;
|
|
|
reg2[1] = 0x4f + (tda827xa_dvbt[i].gc3 << 4);
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
-static void philips_tda827xa_pll_sleep(u8 addr, struct dvb_frontend *fe)
|
|
|
+static int philips_tda827xa_tuner_sleep(u8 addr, struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
static u8 tda827xa_sleep[] = { 0x30, 0x90};
|
|
|
struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tda827xa_sleep,
|
|
|
.len = sizeof(tda827xa_sleep) };
|
|
|
+ if (fe->ops->i2c_gate_ctrl)
|
|
|
+ fe->ops->i2c_gate_ctrl(fe, 1);
|
|
|
i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
|
|
|
-
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int philips_tiger_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int philips_tiger_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
int ret;
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
static u8 tda8290_close[] = { 0x21, 0xc0};
|
|
|
static u8 tda8290_open[] = { 0x21, 0x80};
|
|
|
struct i2c_msg tda8290_msg = {.addr = 0x4b,.flags = 0, .len = 2};
|
|
|
+
|
|
|
/* close tda8290 i2c bridge */
|
|
|
tda8290_msg.buf = tda8290_close;
|
|
|
ret = i2c_transfer(&dev->i2c_adap, &tda8290_msg, 1);
|
|
@@ -816,7 +855,7 @@ static int philips_tiger_pll_set(struct dvb_frontend *fe, struct dvb_frontend_pa
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int philips_tiger_dvb_mode(struct dvb_frontend *fe)
|
|
|
+static int philips_tiger_tuner_init(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
static u8 data[] = { 0x3c, 0x33, 0x6a};
|
|
@@ -827,14 +866,15 @@ static int philips_tiger_dvb_mode(struct dvb_frontend *fe)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void philips_tiger_analog_mode(struct dvb_frontend *fe)
|
|
|
+static int philips_tiger_tuner_sleep(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
static u8 data[] = { 0x3c, 0x33, 0x68};
|
|
|
struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
|
|
|
|
|
|
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
|
|
- philips_tda827xa_pll_sleep( 0x61, fe);
|
|
|
+ philips_tda827xa_tuner_sleep( 0x61, fe);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static struct tda1004x_config philips_tiger_config = {
|
|
@@ -844,15 +884,12 @@ static struct tda1004x_config philips_tiger_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_16M,
|
|
|
.agc_config = TDA10046_AGC_TDA827X,
|
|
|
.if_freq = TDA10046_FREQ_045,
|
|
|
- .pll_init = philips_tiger_dvb_mode,
|
|
|
- .pll_set = philips_tiger_pll_set,
|
|
|
- .pll_sleep = philips_tiger_analog_mode,
|
|
|
.request_firmware = NULL,
|
|
|
};
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int lifeview_trio_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int lifeview_trio_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
@@ -860,16 +897,12 @@ static int lifeview_trio_pll_set(struct dvb_frontend *fe, struct dvb_frontend_pa
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int lifeview_trio_dvb_mode(struct dvb_frontend *fe)
|
|
|
+static int lifeview_trio_tuner_sleep(struct dvb_frontend *fe)
|
|
|
{
|
|
|
+ philips_tda827xa_tuner_sleep(0x60, fe);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void lifeview_trio_analog_mode(struct dvb_frontend *fe)
|
|
|
-{
|
|
|
- philips_tda827xa_pll_sleep(0x60, fe);
|
|
|
-}
|
|
|
-
|
|
|
static struct tda1004x_config lifeview_trio_config = {
|
|
|
.demod_address = 0x09,
|
|
|
.invert = 1,
|
|
@@ -877,15 +910,12 @@ static struct tda1004x_config lifeview_trio_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_16M,
|
|
|
.agc_config = TDA10046_AGC_TDA827X_GPL,
|
|
|
.if_freq = TDA10046_FREQ_045,
|
|
|
- .pll_init = lifeview_trio_dvb_mode,
|
|
|
- .pll_set = lifeview_trio_pll_set,
|
|
|
- .pll_sleep = lifeview_trio_analog_mode,
|
|
|
.request_firmware = NULL,
|
|
|
};
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int ads_duo_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int ads_duo_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
@@ -893,7 +923,7 @@ static int ads_duo_pll_set(struct dvb_frontend *fe, struct dvb_frontend_paramete
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int ads_duo_dvb_mode(struct dvb_frontend *fe)
|
|
|
+static int ads_duo_tuner_init(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
/* route TDA8275a AGC input to the channel decoder */
|
|
@@ -901,12 +931,13 @@ static int ads_duo_dvb_mode(struct dvb_frontend *fe)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void ads_duo_analog_mode(struct dvb_frontend *fe)
|
|
|
+static int ads_duo_tuner_sleep(struct dvb_frontend *fe)
|
|
|
{
|
|
|
struct saa7134_dev *dev = fe->dvb->priv;
|
|
|
/* route TDA8275a AGC input to the analog IF chip*/
|
|
|
saa_writeb(SAA7134_GPIO_GPSTATUS2, 0x20);
|
|
|
- philips_tda827xa_pll_sleep( 0x61, fe);
|
|
|
+ philips_tda827xa_tuner_sleep( 0x61, fe);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static struct tda1004x_config ads_tech_duo_config = {
|
|
@@ -916,31 +947,24 @@ static struct tda1004x_config ads_tech_duo_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_16M,
|
|
|
.agc_config = TDA10046_AGC_TDA827X_GPL,
|
|
|
.if_freq = TDA10046_FREQ_045,
|
|
|
- .pll_init = ads_duo_dvb_mode,
|
|
|
- .pll_set = ads_duo_pll_set,
|
|
|
- .pll_sleep = ads_duo_analog_mode,
|
|
|
.request_firmware = NULL,
|
|
|
};
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
|
|
-static int tevion_dvb220rf_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
+static int tevion_dvb220rf_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
|
|
{
|
|
|
int ret;
|
|
|
ret = philips_tda827xa_pll_set(0x60, fe, params);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int tevion_dvb220rf_pll_init(struct dvb_frontend *fe)
|
|
|
+static int tevion_dvb220rf_tuner_sleep(struct dvb_frontend *fe)
|
|
|
{
|
|
|
+ philips_tda827xa_tuner_sleep( 0x61, fe);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void tevion_dvb220rf_pll_sleep(struct dvb_frontend *fe)
|
|
|
-{
|
|
|
- philips_tda827xa_pll_sleep( 0x61, fe);
|
|
|
-}
|
|
|
-
|
|
|
static struct tda1004x_config tevion_dvbt220rf_config = {
|
|
|
.demod_address = 0x08,
|
|
|
.invert = 1,
|
|
@@ -948,9 +972,6 @@ static struct tda1004x_config tevion_dvbt220rf_config = {
|
|
|
.xtal_freq = TDA10046_XTAL_16M,
|
|
|
.agc_config = TDA10046_AGC_TDA827X,
|
|
|
.if_freq = TDA10046_FREQ_045,
|
|
|
- .pll_init = tevion_dvb220rf_pll_init,
|
|
|
- .pll_set = tevion_dvb220rf_pll_set,
|
|
|
- .pll_sleep = tevion_dvb220rf_pll_sleep,
|
|
|
.request_firmware = NULL,
|
|
|
};
|
|
|
|
|
@@ -961,8 +982,6 @@ static struct tda1004x_config tevion_dvbt220rf_config = {
|
|
|
#ifdef HAVE_NXT200X
|
|
|
static struct nxt200x_config avertvhda180 = {
|
|
|
.demod_address = 0x0a,
|
|
|
- .pll_address = 0x61,
|
|
|
- .pll_desc = &dvb_pll_tdhu2,
|
|
|
};
|
|
|
|
|
|
static int nxt200x_set_pll_input(u8 *buf, int input)
|
|
@@ -976,8 +995,6 @@ static int nxt200x_set_pll_input(u8 *buf, int input)
|
|
|
|
|
|
static struct nxt200x_config kworldatsc110 = {
|
|
|
.demod_address = 0x0a,
|
|
|
- .pll_address = 0x61,
|
|
|
- .pll_desc = &dvb_pll_tuv1236d,
|
|
|
.set_pll_input = nxt200x_set_pll_input,
|
|
|
};
|
|
|
#endif
|
|
@@ -1003,78 +1020,126 @@ static int dvb_init(struct saa7134_dev *dev)
|
|
|
printk("%s: pinnacle 300i dvb setup\n",dev->name);
|
|
|
dev->dvb.frontend = mt352_attach(&pinnacle_300i,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.pllbuf = mt352_pinnacle_tuner_pllbuf;
|
|
|
break;
|
|
|
|
|
|
case SAA7134_BOARD_AVERMEDIA_777:
|
|
|
printk("%s: avertv 777 dvb setup\n",dev->name);
|
|
|
dev->dvb.frontend = mt352_attach(&avermedia_777,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.pllbuf = mt352_aver777_tuner_pllbuf;
|
|
|
break;
|
|
|
#endif
|
|
|
#ifdef HAVE_TDA1004X
|
|
|
case SAA7134_BOARD_MD7134:
|
|
|
dev->dvb.frontend = tda10046_attach(&medion_cardbus,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_fmd1216_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_fmd1216_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_fmd1216_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_PHILIPS_TOUGH:
|
|
|
dev->dvb.frontend = tda10046_attach(&philips_tu1216_60_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_tu1216_tuner_60_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_tu1216_tuner_60_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_FLYDVBTDUO:
|
|
|
dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_tda827x_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_tda827x_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_tda827x_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_FLYDVBT_DUO_CARDBUS:
|
|
|
dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_tda827x_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_tda827x_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_tda827x_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_PHILIPS_EUROPA:
|
|
|
dev->dvb.frontend = tda10046_attach(&philips_europa_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->original_demod_sleep = dev->dvb.frontend->ops->sleep;
|
|
|
+ dev->dvb.frontend->ops->sleep = philips_europa_demod_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_europa_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_europa_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_td1316_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_VIDEOMATE_DVBT_300:
|
|
|
dev->dvb.frontend = tda10046_attach(&philips_europa_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_europa_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_europa_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_td1316_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_VIDEOMATE_DVBT_200:
|
|
|
dev->dvb.frontend = tda10046_attach(&philips_tu1216_61_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_tu1216_tuner_61_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_tu1216_tuner_61_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_PHILIPS_TIGER:
|
|
|
dev->dvb.frontend = tda10046_attach(&philips_tiger_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_tiger_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_tiger_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_tiger_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_ASUSTeK_P7131_DUAL:
|
|
|
dev->dvb.frontend = tda10046_attach(&philips_tiger_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_tiger_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_tiger_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_tiger_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_FLYDVBT_LR301:
|
|
|
dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = philips_tda827x_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = philips_tda827x_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = philips_tda827x_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_FLYDVB_TRIO:
|
|
|
dev->dvb.frontend = tda10046_attach(&lifeview_trio_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = lifeview_trio_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = lifeview_trio_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331:
|
|
|
dev->dvb.frontend = tda10046_attach(&ads_tech_duo_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = ads_duo_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = ads_duo_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = ads_duo_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_TEVION_DVBT_220RF:
|
|
|
dev->dvb.frontend = tda10046_attach(&tevion_dvbt220rf_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = tevion_dvb220rf_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = tevion_dvb220rf_tuner_set_params;
|
|
|
break;
|
|
|
case SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS:
|
|
|
dev->dvb.frontend = tda10046_attach(&ads_tech_duo_config,
|
|
|
&dev->i2c_adap);
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.init = ads_duo_tuner_init;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.sleep = ads_duo_tuner_sleep;
|
|
|
+ dev->dvb.frontend->ops->tuner_ops.set_params = ads_duo_tuner_set_params;
|
|
|
break;
|
|
|
#endif
|
|
|
#ifdef HAVE_NXT200X
|
|
|
case SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180:
|
|
|
dev->dvb.frontend = nxt200x_attach(&avertvhda180, &dev->i2c_adap);
|
|
|
+ if (dev->dvb.frontend) {
|
|
|
+ dvb_pll_attach(dev->dvb.frontend, 0x61, &dev->i2c_adap, &dvb_pll_tdhu2);
|
|
|
+ }
|
|
|
break;
|
|
|
case SAA7134_BOARD_KWORLD_ATSC110:
|
|
|
dev->dvb.frontend = nxt200x_attach(&kworldatsc110, &dev->i2c_adap);
|
|
|
+ if (dev->dvb.frontend) {
|
|
|
+ dvb_pll_attach(dev->dvb.frontend, 0x61, &dev->i2c_adap, &dvb_pll_tuv1236d);
|
|
|
+ }
|
|
|
break;
|
|
|
#endif
|
|
|
default:
|