From: Daniel Scheller <d.schel...@gmx.net>

In some configurations (due to different PIN config, wiring or so), the
QAM FECLock might be signalled using a different register than
F367CAB_QAMFEC_LOCK (e.g. F367CAB_DESCR_SYNCSTATE on Digital Devices hw),
so make that register selectable.

Signed-off-by: Daniel Scheller <d.schel...@gmx.net>
---
 drivers/media/dvb-frontends/stv0367.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/media/dvb-frontends/stv0367.c 
b/drivers/media/dvb-frontends/stv0367.c
index 74fee3f..fb41c7b 100644
--- a/drivers/media/dvb-frontends/stv0367.c
+++ b/drivers/media/dvb-frontends/stv0367.c
@@ -57,6 +57,7 @@ struct stv0367cab_state {
        u32 freq_khz;                   /* found frequency (in kHz)     */
        u32 symbol_rate;                /* found symbol rate (in Bds)   */
        enum fe_spectral_inversion spect_inv; /* Spectrum Inversion     */
+       u32 qamfec_status_reg;          /* status reg to poll for FEC Lock */
 };
 
 struct stv0367ter_state {
@@ -2145,7 +2146,8 @@ static int stv0367cab_read_status(struct dvb_frontend *fe,
 
        *status = 0;
 
-       if (stv0367_readbits(state, F367CAB_QAMFEC_LOCK)) {
+       if (stv0367_readbits(state, (state->cab_state->qamfec_status_reg ?
+               state->cab_state->qamfec_status_reg : F367CAB_QAMFEC_LOCK))) {
                *status |= FE_HAS_LOCK;
                dprintk("%s: stv0367 has locked\n", __func__);
        }
@@ -2410,7 +2412,9 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct 
stv0367_state *state,
                        usleep_range(5000, 7000);
                        LockTime += 5;
                        QAMFEC_Lock = stv0367_readbits(state,
-                                                       F367CAB_QAMFEC_LOCK);
+                               (state->cab_state->qamfec_status_reg ?
+                               state->cab_state->qamfec_status_reg :
+                               F367CAB_QAMFEC_LOCK));
                } while (!QAMFEC_Lock && (LockTime < FECTimeOut));
        } else
                QAMFEC_Lock = 0;
@@ -2849,6 +2853,7 @@ struct dvb_frontend *stv0367cab_attach(const struct 
stv0367_config *config,
        state->i2c = i2c;
        state->config = config;
        cab_state->search_range = 280000;
+       cab_state->qamfec_status_reg = F367CAB_QAMFEC_LOCK;
        state->cab_state = cab_state;
        state->fe.ops = stv0367cab_ops;
        state->fe.demodulator_priv = state;
-- 
2.10.2

Reply via email to