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

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

V4L/DVB (4032): Fix Pinnacle 300i



I had broken the mt352 tuning when a non-directly connected PLL was used -
uncommon, but this is what is used on the pinnacle card.

Signed-off-by: default avatarAndrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 976e3483
Loading
Loading
Loading
Loading
+10 −18
Original line number Diff line number Diff line
@@ -287,31 +287,23 @@ static int mt352_set_parameters(struct dvb_frontend* fe,
	mt352_calc_nominal_rate(state, op->bandwidth, buf+4);
	mt352_calc_input_freq(state, buf+6);

	// if there is no secondary tuner, call set_params to set up a potential
	// tuner attached elsewhere
	if (state->config.no_tuner) {
		if (fe->ops->tuner_ops.set_params) {
			fe->ops->tuner_ops.set_params(fe, param);
			if (fe->ops->i2c_gate_ctrl) fe->ops->i2c_gate_ctrl(fe, 0);
			if (fe->ops->i2c_gate_ctrl)
				fe->ops->i2c_gate_ctrl(fe, 0);
		}

		/* start decoding only */
		mt352_write(fe, buf, 8);
		mt352_write(fe, fsm_go, 2);
	}

	// retrieve the pllbuf - we do this even if there is no
	// secondary tuner simply so we have a record of what was sent for
	// debugging.
	} else {
		if (fe->ops->tuner_ops.calc_regs) {
			fe->ops->tuner_ops.calc_regs(fe, param, buf+8, 5);
			buf[8] <<= 1;
			mt352_write(fe, buf, sizeof(buf));
	}

	// send PLL and start tuning and then decoding
	if (!state->config.no_tuner) {
			mt352_write(fe, tuner_go, 2);
		}
	}

	return 0;
}
+4 −14
Original line number Diff line number Diff line
@@ -132,9 +132,8 @@ static int mt352_aver777_init(struct dvb_frontend* fe)
	return 0;
}

static int mt352_pinnacle_tuner_calc_regs(struct dvb_frontend* fe,
				       struct dvb_frontend_parameters* params,
				       u8* pllbuf, int buf_len)
static int mt352_pinnacle_tuner_set_params(struct dvb_frontend* fe,
					   struct dvb_frontend_parameters* params)
{
	u8 off[] = { 0x00, 0xf1};
	u8 on[]  = { 0x00, 0x71};
@@ -143,9 +142,6 @@ static int mt352_pinnacle_tuner_calc_regs(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;
@@ -162,13 +158,7 @@ static int mt352_pinnacle_tuner_calc_regs(struct dvb_frontend* fe,
	pinnacle_antenna_pwr(dev, antenna_pwr);

	/* mt352 setup */
	mt352_pinnacle_init(fe);
	pllbuf[0] = 0x61;
	pllbuf[1] = 0x00;
	pllbuf[2] = 0x00;
	pllbuf[3] = 0x80;
	pllbuf[4] = 0x00;
	return 5;
	return mt352_pinnacle_init(fe);
}

static int mt352_aver777_tuner_calc_regs(struct dvb_frontend *fe, struct dvb_frontend_parameters *params, u8* pllbuf, int buf_len)
@@ -1025,7 +1015,7 @@ static int dvb_init(struct saa7134_dev *dev)
		dev->dvb.frontend = mt352_attach(&pinnacle_300i,
						 &dev->i2c_adap);
		if (dev->dvb.frontend) {
			dev->dvb.frontend->ops->tuner_ops.calc_regs = mt352_pinnacle_tuner_calc_regs;
			dev->dvb.frontend->ops->tuner_ops.set_params = mt352_pinnacle_tuner_set_params;
		}
		break;