Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74aa7a29 authored by Andrew de Quincey's avatar Andrew de Quincey Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (3887): Convert bt8xx to refactored tuner code



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: default avatarAndrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 272bc4db
Loading
Loading
Loading
Loading
+44 −27
Original line number Diff line number Diff line
@@ -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)
@@ -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;

@@ -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;

@@ -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;

@@ -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;
@@ -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);
}
@@ -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,
};

@@ -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)
@@ -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 = {
@@ -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];
@@ -483,6 +483,8 @@ 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;
}
@@ -490,7 +492,6 @@ static int vp3021_alps_tded4_pll_set(struct dvb_frontend* fe, struct dvb_fronten
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)
@@ -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;
@@ -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)
@@ -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);
@@ -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)
@@ -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;
		}
@@ -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:
@@ -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;
		}
@@ -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;
		}
@@ -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: