aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Martin <gmsoft@tuxicoman.be>2011-06-01 10:25:16 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-09-25 07:45:18 -0400
commit4a6c4a9567aed23cf7e8134c63f3176a57e5572b (patch)
tree2176b46417c7e8ba93373f67bfb7d62427df57ee
parentaad04c774331890befcd7a77406c2b6f273ab7a9 (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.c35
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
3463static int stv090x_read_status(struct dvb_frontend *fe, enum fe_status *status) 3463static 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;