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

Commit e84b133e authored by Oliver Endriss's avatar Oliver Endriss Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (7661): stv0299: Add flag to turn off OP0 output



Add flag to turn off OP0 output.

Signed-off-by: default avatarOliver Endriss <o.endriss@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 94ad6de7
Loading
Loading
Loading
Loading
+30 −15
Original line number Diff line number Diff line
@@ -366,26 +366,32 @@ static int stv0299_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltag
	 *  H/V switching over OP0, OP1 and OP2 are LNB power enable bits
	 */
	reg0x0c &= 0x0f;

	if (voltage == SEC_VOLTAGE_OFF) {
		stv0299_writeregI (state, 0x0c, 0x00); /*	LNB power off! */
		return stv0299_writeregI (state, 0x08, 0x00); /*	LNB power off! */
	}

	stv0299_writeregI (state, 0x08, (reg0x08 & 0x3f) | (state->config->lock_output << 6));
	reg0x08 = (reg0x08 & 0x3f) | (state->config->lock_output << 6);

	switch (voltage) {
	case SEC_VOLTAGE_13:
		if (state->config->volt13_op0_op1 == STV0299_VOLT13_OP0) reg0x0c |= 0x10;
		else reg0x0c |= 0x40;

		return stv0299_writeregI(state, 0x0c, reg0x0c);

		if (state->config->volt13_op0_op1 == STV0299_VOLT13_OP0)
			reg0x0c |= 0x10; /* OP1 off, OP0 on */
		else
			reg0x0c |= 0x40; /* OP1 on, OP0 off */
		break;
	case SEC_VOLTAGE_18:
		return stv0299_writeregI(state, 0x0c, reg0x0c | 0x50);
		reg0x0c |= 0x50; /* OP1 on, OP0 on */
		break;
	case SEC_VOLTAGE_OFF:
		/* LNB power off! */
		reg0x08 = 0x00;
		reg0x0c = 0x00;
		break;
	default:
		return -EINVAL;
	};

	if (state->config->op0_off)
		reg0x0c &= ~0x10;

	stv0299_writeregI(state, 0x08, reg0x08);
	return stv0299_writeregI(state, 0x0c, reg0x0c);
}

static int stv0299_send_legacy_dish_cmd (struct dvb_frontend* fe, unsigned long cmd)
@@ -445,11 +451,20 @@ static int stv0299_init (struct dvb_frontend* fe)
{
	struct stv0299_state* state = fe->demodulator_priv;
	int i;
	u8 reg;
	u8 val;

	dprintk("stv0299: init chip\n");

	for (i=0; !(state->config->inittab[i] == 0xff && state->config->inittab[i+1] == 0xff); i+=2)
		stv0299_writeregI(state, state->config->inittab[i], state->config->inittab[i+1]);
	for (i = 0; ; i += 2)  {
		reg = state->config->inittab[i];
		val = state->config->inittab[i+1];
		if (reg == 0xff && val == 0xff)
			break;
		if (reg == 0x0c && state->config->op0_off)
			val &= ~0x10;
		stv0299_writeregI(state, reg, val);
	}

	return 0;
}
+3 −0
Original line number Diff line number Diff line
@@ -82,6 +82,9 @@ struct stv0299_config
	/* Is 13v controlled by OP0 or OP1? */
	u8 volt13_op0_op1:1;

	/* Turn-off OP0? */
	u8 op0_off:1;

	/* minimum delay before retuning */
	int min_delay_ms;