diff options
Diffstat (limited to 'drivers/media/dvb/frontends/stv090x.c')
| -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; |
