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

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

V4L/DVB (3935): Add missing pll gate control calls



I'd missed some of these out, breaking the av7110 tuning. I then checked for
more and added them in where necessary. They may not actually be necessary
in all these locations, but if not, they'll simply have no effect.
Add small delay to stv0299 pll gate control to fix tuning problems.

Signed-off-by: default avatarAndrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent ebfbc305
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -106,6 +106,8 @@ static int alps_bsbe1_tuner_set_params(struct dvb_frontend* fe, struct dvb_front
	data[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
	data[3] = (params->frequency > 1530000) ? 0xE0 : 0xE4;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	ret = i2c_transfer(i2c, &msg, 1);
	return (ret != 1) ? -EIO : 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -120,6 +120,8 @@ static int alps_bsru6_tuner_set_params(struct dvb_frontend *fe, struct dvb_front
	if (params->frequency > 1530000)
		buf[3] = 0xc0;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(i2c, &msg, 1) != 1)
		return -EIO;
	return 0;
+4 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ static int lg_h06xf_pll_set(struct dvb_frontend* fe, struct i2c_adapter* i2c_ada
	int err;

	dvb_pll_configure(&dvb_pll_lg_tdvs_h06xf, buf, params->frequency, 0);
	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if ((err = i2c_transfer(i2c_adap, &msg, 1)) != 1) {
		printk(KERN_WARNING "lg_h06xf: %s error "
			"(addr %02x <- %02x, err = %i)\n",
@@ -45,6 +47,8 @@ static int lg_h06xf_pll_set(struct dvb_frontend* fe, struct i2c_adapter* i2c_ada
	buf[0] |= 0x18;
	buf[1] = 0x50;
	msg.len = 2;
	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if ((err = i2c_transfer(i2c_adap, &msg, 1)) != 1) {
		printk(KERN_WARNING "lg_h06xf: %s error "
			"(addr %02x <- %02x, err = %i)\n",
+4 −2
Original line number Diff line number Diff line
@@ -604,10 +604,12 @@ static int stv0299_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
	struct stv0299_state* state = fe->demodulator_priv;

	if (enable) {
		return stv0299_writeregI(state, 0x05, 0xb5);
		stv0299_writeregI(state, 0x05, 0xb5);
	} else {
		return stv0299_writeregI(state, 0x05, 0x35);
		stv0299_writeregI(state, 0x05, 0x35);
	}
	udelay(1);
	return 0;
}

static int stv0299_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings)
+14 −0
Original line number Diff line number Diff line
@@ -1039,6 +1039,8 @@ static int alps_tdmb7_tuner_set_params(struct dvb_frontend* fe, struct dvb_front
	data[2] = ((div >> 10) & 0x60) | 0x85;
	data[3] = params->frequency < 592000000 ? 0x40 : 0x80;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1) return -EIO;
	return 0;
}
@@ -1059,6 +1061,8 @@ static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
	struct i2c_msg tuner_msg = { .addr=0x60, .flags=0, .buf=td1316_init, .len=sizeof(td1316_init) };

	// setup PLL configuration
	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) return -EIO;
	msleep(1);

@@ -1066,6 +1070,8 @@ static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
	tuner_msg.addr = 0x65;
	tuner_msg.buf = disable_mc44BC374c;
	tuner_msg.len = sizeof(disable_mc44BC374c);
	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
		i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1);
	}
@@ -1133,6 +1139,8 @@ static int philips_tdm1316l_tuner_set_params(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(&ttusb->i2c_adap, &tuner_msg, 1) != 1)
		return -EIO;

@@ -1296,6 +1304,8 @@ static int philips_tsa5059_tuner_set_params(struct dvb_frontend *fe, struct dvb_
	if (ttusb->revision == TTUSB_REV_2_2)
		buf[3] |= 0x20;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
		return -EIO;

@@ -1328,6 +1338,8 @@ static int ttusb_novas_grundig_29504_491_tuner_set_params(struct dvb_frontend *f
	buf[2] = 0x8e;
	buf[3] = 0x00;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
		return -EIO;

@@ -1353,6 +1365,8 @@ static int alps_tdbe2_tuner_set_params(struct dvb_frontend* fe, struct dvb_front
	data[2] = 0x85 | ((div >> 10) & 0x60);
	data[3] = (params->frequency < 174000000 ? 0x88 : params->frequency < 470000000 ? 0x84 : 0x81);

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (i2c_transfer (&ttusb->i2c_adap, &msg, 1) != 1)
		return -EIO;

Loading