diff options
author | Guy Martin <gmsoft@tuxicoman.be> | 2011-06-01 10:25:16 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-09-25 07:45:18 -0400 |
commit | 4a6c4a9567aed23cf7e8134c63f3176a57e5572b (patch) | |
tree | 2176b46417c7e8ba93373f67bfb7d62427df57ee | |
parent | aad04c774331890befcd7a77406c2b6f273ab7a9 (diff) |
[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>
-rw-r--r-- | drivers/media/dvb/frontends/stv090x.c | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/drivers/media/dvb/frontends/stv090x.c b/drivers/media/dvb/frontends/stv090x.c index 52d8712411e5..ebda41936b90 100644 --- a/drivers/media/dvb/frontends/stv090x.c +++ b/drivers/media/dvb/frontends/stv090x.c | |||
@@ -3463,9 +3463,15 @@ static enum dvbfe_search stv090x_search(struct dvb_frontend *fe, struct dvb_fron | |||
3463 | static int stv090x_read_status(struct dvb_frontend *fe, enum fe_status *status) | 3463 | static int stv090x_read_status(struct dvb_frontend *fe, enum fe_status *status) |
3464 | { | 3464 | { |
3465 | struct stv090x_state *state = fe->demodulator_priv; | 3465 | struct stv090x_state *state = fe->demodulator_priv; |
3466 | u32 reg; | 3466 | u32 reg, dstatus; |
3467 | u8 search_state; | 3467 | u8 search_state; |
3468 | 3468 | ||
3469 | *status = 0; | ||
3470 | |||
3471 | dstatus = STV090x_READ_DEMOD(state, DSTATUS); | ||
3472 | if (STV090x_GETFIELD_Px(dstatus, CAR_LOCK_FIELD)) | ||
3473 | *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER; | ||
3474 | |||
3469 | reg = STV090x_READ_DEMOD(state, DMDSTATE); | 3475 | reg = STV090x_READ_DEMOD(state, DMDSTATE); |
3470 | search_state = STV090x_GETFIELD_Px(reg, HEADER_MODE_FIELD); | 3476 | search_state = STV090x_GETFIELD_Px(reg, HEADER_MODE_FIELD); |
3471 | 3477 | ||
@@ -3474,41 +3480,30 @@ static int stv090x_read_status(struct dvb_frontend *fe, enum fe_status *status) | |||
3474 | case 1: /* first PLH detected */ | 3480 | case 1: /* first PLH detected */ |
3475 | default: | 3481 | default: |
3476 | dprintk(FE_DEBUG, 1, "Status: Unlocked (Searching ..)"); | 3482 | dprintk(FE_DEBUG, 1, "Status: Unlocked (Searching ..)"); |
3477 | *status = 0; | ||
3478 | break; | 3483 | break; |
3479 | 3484 | ||
3480 | case 2: /* DVB-S2 mode */ | 3485 | case 2: /* DVB-S2 mode */ |
3481 | dprintk(FE_DEBUG, 1, "Delivery system: DVB-S2"); | 3486 | dprintk(FE_DEBUG, 1, "Delivery system: DVB-S2"); |
3482 | reg = STV090x_READ_DEMOD(state, DSTATUS); | 3487 | if (STV090x_GETFIELD_Px(dstatus, LOCK_DEFINITIF_FIELD)) { |
3483 | if (STV090x_GETFIELD_Px(reg, LOCK_DEFINITIF_FIELD)) { | ||
3484 | reg = STV090x_READ_DEMOD(state, PDELSTATUS1); | 3488 | reg = STV090x_READ_DEMOD(state, PDELSTATUS1); |
3485 | if (STV090x_GETFIELD_Px(reg, PKTDELIN_LOCK_FIELD)) { | 3489 | if (STV090x_GETFIELD_Px(reg, PKTDELIN_LOCK_FIELD)) { |
3490 | *status |= FE_HAS_VITERBI; | ||
3486 | reg = STV090x_READ_DEMOD(state, TSSTATUS); | 3491 | reg = STV090x_READ_DEMOD(state, TSSTATUS); |
3487 | if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) { | 3492 | if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) |
3488 | *status = FE_HAS_SIGNAL | | 3493 | *status |= FE_HAS_SYNC | FE_HAS_LOCK; |
3489 | FE_HAS_CARRIER | | ||
3490 | FE_HAS_VITERBI | | ||
3491 | FE_HAS_SYNC | | ||
3492 | FE_HAS_LOCK; | ||
3493 | } | ||
3494 | } | 3494 | } |
3495 | } | 3495 | } |
3496 | break; | 3496 | break; |
3497 | 3497 | ||
3498 | case 3: /* DVB-S1/legacy mode */ | 3498 | case 3: /* DVB-S1/legacy mode */ |
3499 | dprintk(FE_DEBUG, 1, "Delivery system: DVB-S"); | 3499 | dprintk(FE_DEBUG, 1, "Delivery system: DVB-S"); |
3500 | reg = STV090x_READ_DEMOD(state, DSTATUS); | 3500 | if (STV090x_GETFIELD_Px(dstatus, LOCK_DEFINITIF_FIELD)) { |
3501 | if (STV090x_GETFIELD_Px(reg, LOCK_DEFINITIF_FIELD)) { | ||
3502 | reg = STV090x_READ_DEMOD(state, VSTATUSVIT); | 3501 | reg = STV090x_READ_DEMOD(state, VSTATUSVIT); |
3503 | if (STV090x_GETFIELD_Px(reg, LOCKEDVIT_FIELD)) { | 3502 | if (STV090x_GETFIELD_Px(reg, LOCKEDVIT_FIELD)) { |
3503 | *status |= FE_HAS_VITERBI; | ||
3504 | reg = STV090x_READ_DEMOD(state, TSSTATUS); | 3504 | reg = STV090x_READ_DEMOD(state, TSSTATUS); |
3505 | if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) { | 3505 | if (STV090x_GETFIELD_Px(reg, TSFIFO_LINEOK_FIELD)) |
3506 | *status = FE_HAS_SIGNAL | | 3506 | *status |= FE_HAS_SYNC | FE_HAS_LOCK; |
3507 | FE_HAS_CARRIER | | ||
3508 | FE_HAS_VITERBI | | ||
3509 | FE_HAS_SYNC | | ||
3510 | FE_HAS_LOCK; | ||
3511 | } | ||
3512 | } | 3507 | } |
3513 | } | 3508 | } |
3514 | break; | 3509 | break; |