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)
|
static int stv090x_read_status(struct dvb_frontend *fe, enum fe_status *status)
|
||||||
{
|
{
|
||||||
struct stv090x_state *state = fe->demodulator_priv;
|
struct stv090x_state *state = fe->demodulator_priv;
|
||||||
u32 reg;
|
u32 reg, dstatus;
|
||||||
u8 search_state;
|
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);
|
reg = STV090x_READ_DEMOD(state, DMDSTATE);
|
||||||
search_state = STV090x_GETFIELD_Px(reg, HEADER_MODE_FIELD);
|
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 */
|
case 1: /* first PLH detected */
|
||||||
default:
|
default:
|
||||||
dprintk(FE_DEBUG, 1, "Status: Unlocked (Searching ..)");
|
dprintk(FE_DEBUG, 1, "Status: Unlocked (Searching ..)");
|
||||||
*status = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /* DVB-S2 mode */
|
case 2: /* DVB-S2 mode */
|
||||||
dprintk(FE_DEBUG, 1, "Delivery system: DVB-S2");
|
dprintk(FE_DEBUG, 1, "Delivery system: DVB-S2");
|
||||||
reg = STV090x_READ_DEMOD(state, DSTATUS);
|
if (STV090x_GETFIELD_Px(dstatus, LOCK_DEFINITIF_FIELD)) {
|
||||||
if (STV090x_GETFIELD_Px(reg, LOCK_DEFINITIF_FIELD)) {
|
|
||||||
reg = STV090x_READ_DEMOD(state, PDELSTATUS1);
|
reg = STV090x_READ_DEMOD(state, PDELSTATUS1);
|
||||||
if (STV090x_GETFIELD_Px(reg, PKTDELIN_LOCK_FIELD)) {
|
if (STV090x_GETFIELD_Px(reg, PKTDELIN_LOCK_FIELD)) {
|
||||||
|
*status |= FE_HAS_VITERBI;
|
||||||
reg = STV090x_READ_DEMOD(state, TSSTATUS);
|
reg = STV090x_READ_DEMOD(state, TSSTATUS);
|
||||||
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) {
|
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD))
|
||||||
*status = FE_HAS_SIGNAL |
|
*status |= FE_HAS_SYNC | FE_HAS_LOCK;
|
||||||
FE_HAS_CARRIER |
|
|
||||||
FE_HAS_VITERBI |
|
|
||||||
FE_HAS_SYNC |
|
|
||||||
FE_HAS_LOCK;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /* DVB-S1/legacy mode */
|
case 3: /* DVB-S1/legacy mode */
|
||||||
dprintk(FE_DEBUG, 1, "Delivery system: DVB-S");
|
dprintk(FE_DEBUG, 1, "Delivery system: DVB-S");
|
||||||
reg = STV090x_READ_DEMOD(state, DSTATUS);
|
if (STV090x_GETFIELD_Px(dstatus, LOCK_DEFINITIF_FIELD)) {
|
||||||
if (STV090x_GETFIELD_Px(reg, LOCK_DEFINITIF_FIELD)) {
|
|
||||||
reg = STV090x_READ_DEMOD(state, VSTATUSVIT);
|
reg = STV090x_READ_DEMOD(state, VSTATUSVIT);
|
||||||
if (STV090x_GETFIELD_Px(reg, LOCKEDVIT_FIELD)) {
|
if (STV090x_GETFIELD_Px(reg, LOCKEDVIT_FIELD)) {
|
||||||
|
*status |= FE_HAS_VITERBI;
|
||||||
reg = STV090x_READ_DEMOD(state, TSSTATUS);
|
reg = STV090x_READ_DEMOD(state, TSSTATUS);
|
||||||
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) {
|
if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD))
|
||||||
*status = FE_HAS_SIGNAL |
|
*status |= FE_HAS_SYNC | FE_HAS_LOCK;
|
||||||
FE_HAS_CARRIER |
|
|
||||||
FE_HAS_VITERBI |
|
|
||||||
FE_HAS_SYNC |
|
|
||||||
FE_HAS_LOCK;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user