mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 03:21:32 +00:00
[media] stv090x: set status bits when there is no lock
Currently, the stv090x driver only set the status bits to SCVYL when there is a lock. This patch set the right bits even if there is no lock. Signed-off-by: Guy Martin <gmsoft@tuxicoman.be> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
aad04c7743
commit
4a6c4a9567
@ -3463,9 +3463,15 @@ static enum dvbfe_search stv090x_search(struct dvb_frontend *fe, struct dvb_fron
|
||||
static int stv090x_read_status(struct dvb_frontend *fe, enum fe_status *status)
|
||||
{
|
||||
struct stv090x_state *state = fe->demodulator_priv;
|
||||
u32 reg;
|
||||
u32 reg, dstatus;
|
||||
u8 search_state;
|
||||
|
||||
*status = 0;
|
||||
|
||||
dstatus = STV090x_READ_DEMOD(state, DSTATUS);
|
||||
if (STV090x_GETFIELD_Px(dstatus, CAR_LOCK_FIELD))
|
||||
*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER;
|
||||
|
||||
reg = STV090x_READ_DEMOD(state, DMDSTATE);
|
||||
search_state = STV090x_GETFIELD_Px(reg, HEADER_MODE_FIELD);
|
||||
|
||||
@ -3474,41 +3480,30 @@ static int stv090x_read_status(struct dvb_frontend *fe, enum fe_status *status)
|
||||
case 1: /* first PLH detected */
|
||||
default:
|
||||
dprintk(FE_DEBUG, 1, "Status: Unlocked (Searching ..)");
|
||||
*status = 0;
|
||||
break;
|
||||
|
||||
case 2: /* DVB-S2 mode */
|
||||
dprintk(FE_DEBUG, 1, "Delivery system: DVB-S2");
|
||||
reg = STV090x_READ_DEMOD(state, DSTATUS);
|
||||
if (STV090x_GETFIELD_Px(reg, LOCK_DEFINITIF_FIELD)) {
|
||||
if (STV090x_GETFIELD_Px(dstatus, LOCK_DEFINITIF_FIELD)) {
|
||||
reg = STV090x_READ_DEMOD(state, PDELSTATUS1);
|
||||
if (STV090x_GETFIELD_Px(reg, PKTDELIN_LOCK_FIELD)) {
|
||||
*status |= FE_HAS_VITERBI;
|
||||
reg = STV090x_READ_DEMOD(state, TSSTATUS);
|
||||
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) {
|
||||
*status = FE_HAS_SIGNAL |
|
||||
FE_HAS_CARRIER |
|
||||
FE_HAS_VITERBI |
|
||||
FE_HAS_SYNC |
|
||||
FE_HAS_LOCK;
|
||||
}
|
||||
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD))
|
||||
*status |= FE_HAS_SYNC | FE_HAS_LOCK;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: /* DVB-S1/legacy mode */
|
||||
dprintk(FE_DEBUG, 1, "Delivery system: DVB-S");
|
||||
reg = STV090x_READ_DEMOD(state, DSTATUS);
|
||||
if (STV090x_GETFIELD_Px(reg, LOCK_DEFINITIF_FIELD)) {
|
||||
if (STV090x_GETFIELD_Px(dstatus, LOCK_DEFINITIF_FIELD)) {
|
||||
reg = STV090x_READ_DEMOD(state, VSTATUSVIT);
|
||||
if (STV090x_GETFIELD_Px(reg, LOCKEDVIT_FIELD)) {
|
||||
*status |= FE_HAS_VITERBI;
|
||||
reg = STV090x_READ_DEMOD(state, TSSTATUS);
|
||||
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) {
|
||||
*status = FE_HAS_SIGNAL |
|
||||
FE_HAS_CARRIER |
|
||||
FE_HAS_VITERBI |
|
||||
FE_HAS_SYNC |
|
||||
FE_HAS_LOCK;
|
||||
}
|
||||
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD))
|
||||
*status |= FE_HAS_SYNC | FE_HAS_LOCK;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user