Skip to content

Commit

Permalink
V4L/DVB (3887): Convert bt8xx to refactored tuner code
Browse files Browse the repository at this point in the history
Rename pll calls to appropriate tuner calls.
Remove pll functions from demod structures.
Hook tuner call into tuner_ops.
Attach dvb-pll where possible.
Add pll gate control calls where appropriate.

Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Andrew de Quincey authored and Mauro Carvalho Chehab committed Jun 25, 2006
1 parent 272bc4d commit 74aa7a2
Showing 1 changed file with 44 additions and 27 deletions.
71 changes: 44 additions & 27 deletions drivers/media/dvb/bt8xx/dvb-bt8xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,12 +147,15 @@ static int thomson_dtt7579_demod_init(struct dvb_frontend* fe)
return 0;
}

static int thomson_dtt7579_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf)
static int thomson_dtt7579_tuner_pllbuf(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf, int buf_len)
{
u32 div;
unsigned char bs = 0;
unsigned char cp = 0;

if (buf_len < 5)
return -EINVAL;

div = (((params->frequency + 83333) * 3) / 500000) + IF_FREQUENCYx6;

if (params->frequency < 542000000)
Expand All @@ -169,27 +172,25 @@ static int thomson_dtt7579_pll_set(struct dvb_frontend* fe, struct dvb_frontend_
else
bs = 0x08;

pllbuf[0] = 0xc0; // Note: non-linux standard PLL i2c address
pllbuf[0] = 0x60;
pllbuf[1] = div >> 8;
pllbuf[2] = div & 0xff;
pllbuf[3] = cp;
pllbuf[4] = bs;

return 0;
return 5;
}

static struct mt352_config thomson_dtt7579_config = {
.demod_address = 0x0f,
.demod_init = thomson_dtt7579_demod_init,
.pll_set = thomson_dtt7579_pll_set,
};

static struct zl10353_config thomson_dtt7579_zl10353_config = {
.demod_address = 0x0f,
.pll_set = thomson_dtt7579_pll_set,
};

static int cx24108_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
static int cx24108_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
{
u32 freq = params->frequency;

Expand Down Expand Up @@ -242,7 +243,7 @@ static int cx24108_pll_set(struct dvb_frontend* fe, struct dvb_frontend_paramete
return 0;
}

static int pinnsat_pll_init(struct dvb_frontend* fe)
static int pinnsat_tuner_init(struct dvb_frontend* fe)
{
struct dvb_bt8xx_card *card = fe->dvb->priv;

Expand All @@ -252,7 +253,7 @@ static int pinnsat_pll_init(struct dvb_frontend* fe)
return 0;
}

static int pinnsat_pll_sleep(struct dvb_frontend* fe)
static int pinnsat_tuner_sleep(struct dvb_frontend* fe)
{
struct dvb_bt8xx_card *card = fe->dvb->priv;

Expand All @@ -263,12 +264,9 @@ static int pinnsat_pll_sleep(struct dvb_frontend* fe)

static struct cx24110_config pctvsat_config = {
.demod_address = 0x55,
.pll_init = pinnsat_pll_init,
.pll_set = cx24108_pll_set,
.pll_sleep = pinnsat_pll_sleep,
};

static int microtune_mt7202dtf_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
static int microtune_mt7202dtf_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
{
struct dvb_bt8xx_card *card = (struct dvb_bt8xx_card *) fe->dvb->priv;
u8 cfg, cpump, band_select;
Expand Down Expand Up @@ -302,6 +300,8 @@ static int microtune_mt7202dtf_pll_set(struct dvb_frontend* fe, struct dvb_front
data[2] = ((div >> 10) & 0x60) | cfg;
data[3] = (cpump << 6) | band_select;

if (fe->ops->i2c_gate_ctrl)
fe->ops->i2c_gate_ctrl(fe, 1);
i2c_transfer(card->i2c_adapter, &msg, 1);
return (div * 166666 - 36000000);
}
Expand All @@ -315,7 +315,6 @@ static int microtune_mt7202dtf_request_firmware(struct dvb_frontend* fe, const s

static struct sp887x_config microtune_mt7202dtf_config = {
.demod_address = 0x70,
.pll_set = microtune_mt7202dtf_pll_set,
.request_firmware = microtune_mt7202dtf_request_firmware,
};

Expand All @@ -342,12 +341,14 @@ static int advbt771_samsung_tdtc9251dh0_demod_init(struct dvb_frontend* fe)
return 0;
}

static int advbt771_samsung_tdtc9251dh0_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf)
static int advbt771_samsung_tdtc9251dh0_tuner_pllbuf(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf, int buf_len)
{
u32 div;
unsigned char bs = 0;
unsigned char cp = 0;

if (buf_len < 5) return -EINVAL;

div = (((params->frequency + 83333) * 3) / 500000) + IF_FREQUENCYx6;

if (params->frequency < 150000000)
Expand Down Expand Up @@ -388,19 +389,18 @@ static int advbt771_samsung_tdtc9251dh0_pll_set(struct dvb_frontend* fe, struct
else
bs = 0x08;

pllbuf[0] = 0xc2; // Note: non-linux standard PLL i2c address
pllbuf[0] = 0x61;
pllbuf[1] = div >> 8;
pllbuf[2] = div & 0xff;
pllbuf[3] = cp;
pllbuf[4] = bs;

return 0;
return 5;
}

static struct mt352_config advbt771_samsung_tdtc9251dh0_config = {
.demod_address = 0x0f,
.demod_init = advbt771_samsung_tdtc9251dh0_demod_init,
.pll_set = advbt771_samsung_tdtc9251dh0_pll_set,
};

static struct dst_config dst_config = {
Expand Down Expand Up @@ -460,7 +460,7 @@ static struct or51211_config or51211_config = {
.sleep = or51211_sleep,
};

static int vp3021_alps_tded4_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
static int vp3021_alps_tded4_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
{
struct dvb_bt8xx_card *card = (struct dvb_bt8xx_card *) fe->dvb->priv;
u8 buf[4];
Expand All @@ -483,14 +483,15 @@ static int vp3021_alps_tded4_pll_set(struct dvb_frontend* fe, struct dvb_fronten
else
return -EINVAL;

if (fe->ops->i2c_gate_ctrl)
fe->ops->i2c_gate_ctrl(fe, 1);
i2c_transfer(card->i2c_adapter, &msg, 1);
return 0;
}

static struct nxt6000_config vp3021_alps_tded4_config = {
.demod_address = 0x0a,
.clock_inversion = 1,
.pll_set = vp3021_alps_tded4_pll_set,
};

static int digitv_alps_tded4_demod_init(struct dvb_frontend* fe)
Expand All @@ -511,14 +512,17 @@ static int digitv_alps_tded4_demod_init(struct dvb_frontend* fe)
return 0;
}

static int digitv_alps_tded4_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf)
static int digitv_alps_tded4_tuner_pllbuf(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf, int buf_len)
{
u32 div;
struct dvb_ofdm_parameters *op = &params->u.ofdm;

if (buf_len < 5)
return -EINVAL;

div = (((params->frequency + 83333) * 3) / 500000) + IF_FREQUENCYx6;

pllbuf[0] = 0xc2;
pllbuf[0] = 0x61;
pllbuf[1] = (div >> 8) & 0x7F;
pllbuf[2] = div & 0xFF;
pllbuf[3] = 0x85;
Expand All @@ -535,7 +539,7 @@ static int digitv_alps_tded4_pll_set(struct dvb_frontend* fe, struct dvb_fronten
if (op->bandwidth == 8)
pllbuf[4] |= 0x04;

return 0;
return 5;
}

static void digitv_alps_tded4_reset(struct dvb_bt8xx_card *bt)
Expand All @@ -562,10 +566,9 @@ static void digitv_alps_tded4_reset(struct dvb_bt8xx_card *bt)
static struct mt352_config digitv_alps_tded4_config = {
.demod_address = 0x0a,
.demod_init = digitv_alps_tded4_demod_init,
.pll_set = digitv_alps_tded4_pll_set,
};

static int tdvs_tua6034_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
static int tdvs_tua6034_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
{
struct dvb_bt8xx_card *card = (struct dvb_bt8xx_card *) fe->dvb->priv;
return lg_h06xf_pll_set(fe, card->i2c_adapter, params);
Expand All @@ -575,7 +578,6 @@ static struct lgdt330x_config tdvs_tua6034_config = {
.demod_address = 0x0e,
.demod_chip = LGDT3303,
.serial_mpeg = 0x40, /* TPSERIAL for 3303 in TOP_CONTROL */
.pll_set = tdvs_tua6034_pll_set,
};

static void lgdt330x_reset(struct dvb_bt8xx_card *bt)
Expand Down Expand Up @@ -605,6 +607,7 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
card->i2c_adapter);

if (card->fe != NULL) {
card->fe->ops->tuner_ops.pllbuf = thomson_dtt7579_tuner_pllbuf;
card->fe->ops->info.frequency_min = 174000000;
card->fe->ops->info.frequency_max = 862000000;
}
Expand All @@ -613,8 +616,10 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
case BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE:
lgdt330x_reset(card);
card->fe = lgdt330x_attach(&tdvs_tua6034_config, card->i2c_adapter);
if (card->fe != NULL)
if (card->fe != NULL) {
card->fe->ops->tuner_ops.set_params = tdvs_tua6034_tuner_set_params;
dprintk ("dvb_bt8xx: lgdt330x detected\n");
}
break;

case BTTV_BOARD_NEBULA_DIGITV:
Expand All @@ -627,6 +632,7 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
digitv_alps_tded4_reset(card);
card->fe = nxt6000_attach(&vp3021_alps_tded4_config, card->i2c_adapter);
if (card->fe != NULL) {
card->fe->ops->tuner_ops.set_params = vp3021_alps_tded4_tuner_set_params;
dprintk ("dvb_bt8xx: an nxt6000 was detected on your digitv card\n");
break;
}
Expand All @@ -635,17 +641,23 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
digitv_alps_tded4_reset(card);
card->fe = mt352_attach(&digitv_alps_tded4_config, card->i2c_adapter);

if (card->fe != NULL)
if (card->fe != NULL) {
card->fe->ops->tuner_ops.pllbuf = digitv_alps_tded4_tuner_pllbuf;
dprintk ("dvb_bt8xx: an mt352 was detected on your digitv card\n");
}
break;

case BTTV_BOARD_AVDVBT_761:
card->fe = sp887x_attach(&microtune_mt7202dtf_config, card->i2c_adapter);
if (card->fe) {
card->fe->ops->tuner_ops.set_params = microtune_mt7202dtf_tuner_set_params;
}
break;

case BTTV_BOARD_AVDVBT_771:
card->fe = mt352_attach(&advbt771_samsung_tdtc9251dh0_config, card->i2c_adapter);
if (card->fe != NULL) {
card->fe->ops->tuner_ops.pllbuf = advbt771_samsung_tdtc9251dh0_tuner_pllbuf;
card->fe->ops->info.frequency_min = 174000000;
card->fe->ops->info.frequency_max = 862000000;
}
Expand Down Expand Up @@ -674,6 +686,11 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)

case BTTV_BOARD_PINNACLESAT:
card->fe = cx24110_attach(&pctvsat_config, card->i2c_adapter);
if (card->fe) {
card->fe->ops->tuner_ops.init = pinnsat_tuner_init;
card->fe->ops->tuner_ops.sleep = pinnsat_tuner_sleep;
card->fe->ops->tuner_ops.set_params = cx24108_tuner_set_params;
}
break;

case BTTV_BOARD_PC_HDTV:
Expand Down

0 comments on commit 74aa7a2

Please sign in to comment.