media: lgdt330x: move *read_status functions
In preparation to implement DVBv5 stats on this driver, move the *read_status functions to happen after SNR and signal strength routines. Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
1334a7dc5f
commit
53d41728f2
|
@ -472,133 +472,6 @@ static int lgdt330x_get_frontend(struct dvb_frontend *fe,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lgdt3302_read_status(struct dvb_frontend *fe,
|
||||
enum fe_status *status)
|
||||
{
|
||||
struct lgdt330x_state *state = fe->demodulator_priv;
|
||||
u8 buf[3];
|
||||
|
||||
*status = 0; /* Reset status result */
|
||||
|
||||
/* AGC status register */
|
||||
i2c_read_demod_bytes(state, AGC_STATUS, buf, 1);
|
||||
dprintk(state, "AGC_STATUS = 0x%02x\n", buf[0]);
|
||||
if ((buf[0] & 0x0c) == 0x8) {
|
||||
/*
|
||||
* Test signal does not exist flag
|
||||
* as well as the AGC lock flag.
|
||||
*/
|
||||
*status |= FE_HAS_SIGNAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* You must set the Mask bits to 1 in the IRQ_MASK in order
|
||||
* to see that status bit in the IRQ_STATUS register.
|
||||
* This is done in SwReset();
|
||||
*/
|
||||
|
||||
/* signal status */
|
||||
i2c_read_demod_bytes(state, TOP_CONTROL, buf, sizeof(buf));
|
||||
dprintk(state,
|
||||
"TOP_CONTROL = 0x%02x, IRO_MASK = 0x%02x, IRQ_STATUS = 0x%02x\n",
|
||||
buf[0], buf[1], buf[2]);
|
||||
|
||||
/* sync status */
|
||||
if ((buf[2] & 0x03) == 0x01)
|
||||
*status |= FE_HAS_SYNC;
|
||||
|
||||
/* FEC error status */
|
||||
if ((buf[2] & 0x0c) == 0x08)
|
||||
*status |= FE_HAS_LOCK | FE_HAS_VITERBI;
|
||||
|
||||
/* Carrier Recovery Lock Status Register */
|
||||
i2c_read_demod_bytes(state, CARRIER_LOCK, buf, 1);
|
||||
dprintk(state, "CARRIER_LOCK = 0x%02x\n", buf[0]);
|
||||
switch (state->current_modulation) {
|
||||
case QAM_256:
|
||||
case QAM_64:
|
||||
/* Need to understand why there are 3 lock levels here */
|
||||
if ((buf[0] & 0x07) == 0x07)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
break;
|
||||
case VSB_8:
|
||||
if ((buf[0] & 0x80) == 0x80)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
break;
|
||||
default:
|
||||
dev_warn(&state->client->dev,
|
||||
"%s: Modulation set to unsupported value\n",
|
||||
__func__);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lgdt3303_read_status(struct dvb_frontend *fe,
|
||||
enum fe_status *status)
|
||||
{
|
||||
struct lgdt330x_state *state = fe->demodulator_priv;
|
||||
int err;
|
||||
u8 buf[3];
|
||||
|
||||
*status = 0; /* Reset status result */
|
||||
|
||||
/* lgdt3303 AGC status register */
|
||||
err = i2c_read_demod_bytes(state, 0x58, buf, 1);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
dprintk(state, "AGC_STATUS = 0x%02x\n", buf[0]);
|
||||
if ((buf[0] & 0x21) == 0x01) {
|
||||
/*
|
||||
* Test input signal does not exist flag
|
||||
* as well as the AGC lock flag.
|
||||
*/
|
||||
*status |= FE_HAS_SIGNAL;
|
||||
}
|
||||
|
||||
/* Carrier Recovery Lock Status Register */
|
||||
i2c_read_demod_bytes(state, CARRIER_LOCK, buf, 1);
|
||||
dprintk(state, "CARRIER_LOCK = 0x%02x\n", buf[0]);
|
||||
switch (state->current_modulation) {
|
||||
case QAM_256:
|
||||
case QAM_64:
|
||||
/* Need to understand why there are 3 lock levels here */
|
||||
if ((buf[0] & 0x07) == 0x07)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
else
|
||||
break;
|
||||
i2c_read_demod_bytes(state, 0x8a, buf, 1);
|
||||
dprintk(state, "QAM LOCK = 0x%02x\n", buf[0]);
|
||||
|
||||
if ((buf[0] & 0x04) == 0x04)
|
||||
*status |= FE_HAS_SYNC;
|
||||
if ((buf[0] & 0x01) == 0x01)
|
||||
*status |= FE_HAS_LOCK;
|
||||
if ((buf[0] & 0x08) == 0x08)
|
||||
*status |= FE_HAS_VITERBI;
|
||||
break;
|
||||
case VSB_8:
|
||||
if ((buf[0] & 0x80) == 0x80)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
else
|
||||
break;
|
||||
i2c_read_demod_bytes(state, 0x38, buf, 1);
|
||||
dprintk(state, "8-VSB LOCK = 0x%02x\n", buf[0]);
|
||||
|
||||
if ((buf[0] & 0x02) == 0x00)
|
||||
*status |= FE_HAS_SYNC;
|
||||
if ((buf[0] & 0xfd) == 0x01)
|
||||
*status |= FE_HAS_VITERBI | FE_HAS_LOCK;
|
||||
break;
|
||||
default:
|
||||
dev_warn(&state->client->dev,
|
||||
"%s: Modulation set to unsupported value\n",
|
||||
__func__);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate SNR estimation (scaled by 2^24)
|
||||
*
|
||||
|
@ -754,6 +627,134 @@ static int lgdt330x_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int lgdt3302_read_status(struct dvb_frontend *fe,
|
||||
enum fe_status *status)
|
||||
{
|
||||
struct lgdt330x_state *state = fe->demodulator_priv;
|
||||
u8 buf[3];
|
||||
|
||||
*status = 0; /* Reset status result */
|
||||
|
||||
/* AGC status register */
|
||||
i2c_read_demod_bytes(state, AGC_STATUS, buf, 1);
|
||||
dprintk(state, "AGC_STATUS = 0x%02x\n", buf[0]);
|
||||
if ((buf[0] & 0x0c) == 0x8) {
|
||||
/*
|
||||
* Test signal does not exist flag
|
||||
* as well as the AGC lock flag.
|
||||
*/
|
||||
*status |= FE_HAS_SIGNAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* You must set the Mask bits to 1 in the IRQ_MASK in order
|
||||
* to see that status bit in the IRQ_STATUS register.
|
||||
* This is done in SwReset();
|
||||
*/
|
||||
|
||||
/* signal status */
|
||||
i2c_read_demod_bytes(state, TOP_CONTROL, buf, sizeof(buf));
|
||||
dprintk(state,
|
||||
"TOP_CONTROL = 0x%02x, IRO_MASK = 0x%02x, IRQ_STATUS = 0x%02x\n",
|
||||
buf[0], buf[1], buf[2]);
|
||||
|
||||
/* sync status */
|
||||
if ((buf[2] & 0x03) == 0x01)
|
||||
*status |= FE_HAS_SYNC;
|
||||
|
||||
/* FEC error status */
|
||||
if ((buf[2] & 0x0c) == 0x08)
|
||||
*status |= FE_HAS_LOCK | FE_HAS_VITERBI;
|
||||
|
||||
/* Carrier Recovery Lock Status Register */
|
||||
i2c_read_demod_bytes(state, CARRIER_LOCK, buf, 1);
|
||||
dprintk(state, "CARRIER_LOCK = 0x%02x\n", buf[0]);
|
||||
switch (state->current_modulation) {
|
||||
case QAM_256:
|
||||
case QAM_64:
|
||||
/* Need to understand why there are 3 lock levels here */
|
||||
if ((buf[0] & 0x07) == 0x07)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
break;
|
||||
case VSB_8:
|
||||
if ((buf[0] & 0x80) == 0x80)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
break;
|
||||
default:
|
||||
dev_warn(&state->client->dev,
|
||||
"%s: Modulation set to unsupported value\n",
|
||||
__func__);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lgdt3303_read_status(struct dvb_frontend *fe,
|
||||
enum fe_status *status)
|
||||
{
|
||||
struct lgdt330x_state *state = fe->demodulator_priv;
|
||||
int err;
|
||||
u8 buf[3];
|
||||
|
||||
*status = 0; /* Reset status result */
|
||||
|
||||
/* lgdt3303 AGC status register */
|
||||
err = i2c_read_demod_bytes(state, 0x58, buf, 1);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
dprintk(state, "AGC_STATUS = 0x%02x\n", buf[0]);
|
||||
if ((buf[0] & 0x21) == 0x01) {
|
||||
/*
|
||||
* Test input signal does not exist flag
|
||||
* as well as the AGC lock flag.
|
||||
*/
|
||||
*status |= FE_HAS_SIGNAL;
|
||||
}
|
||||
|
||||
/* Carrier Recovery Lock Status Register */
|
||||
i2c_read_demod_bytes(state, CARRIER_LOCK, buf, 1);
|
||||
dprintk(state, "CARRIER_LOCK = 0x%02x\n", buf[0]);
|
||||
switch (state->current_modulation) {
|
||||
case QAM_256:
|
||||
case QAM_64:
|
||||
/* Need to understand why there are 3 lock levels here */
|
||||
if ((buf[0] & 0x07) == 0x07)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
else
|
||||
break;
|
||||
i2c_read_demod_bytes(state, 0x8a, buf, 1);
|
||||
dprintk(state, "QAM LOCK = 0x%02x\n", buf[0]);
|
||||
|
||||
if ((buf[0] & 0x04) == 0x04)
|
||||
*status |= FE_HAS_SYNC;
|
||||
if ((buf[0] & 0x01) == 0x01)
|
||||
*status |= FE_HAS_LOCK;
|
||||
if ((buf[0] & 0x08) == 0x08)
|
||||
*status |= FE_HAS_VITERBI;
|
||||
break;
|
||||
case VSB_8:
|
||||
if ((buf[0] & 0x80) == 0x80)
|
||||
*status |= FE_HAS_CARRIER;
|
||||
else
|
||||
break;
|
||||
i2c_read_demod_bytes(state, 0x38, buf, 1);
|
||||
dprintk(state, "8-VSB LOCK = 0x%02x\n", buf[0]);
|
||||
|
||||
if ((buf[0] & 0x02) == 0x00)
|
||||
*status |= FE_HAS_SYNC;
|
||||
if ((buf[0] & 0xfd) == 0x01)
|
||||
*status |= FE_HAS_VITERBI | FE_HAS_LOCK;
|
||||
break;
|
||||
default:
|
||||
dev_warn(&state->client->dev,
|
||||
"%s: Modulation set to unsupported value\n",
|
||||
__func__);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
lgdt330x_get_tune_settings(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_tune_settings *fe_tune_settings)
|
||||
|
|
Loading…
Reference in a new issue