Commit fa64cfd2 authored by Reinhard Nißl's avatar Reinhard Nißl Committed by Mauro Carvalho Chehab

[media] stb0899: enable auto inversion handling unconditionally

It seems that current inversion handling addresses only the signal
routing on the PCB, i. e. IQ signals are either swapped or not.
But when the device is operated in a Satellite Channel Router (SCR)
environment, an additional inversion is required due to the way how
the SCR works. Therefore it makes sense to me to always enable auto
inversion handling and drop the enum value IQ_SWAP_AUTO.
Signed-off-by: default avatarReinhard Nißl <rnissl@gmx.de>
Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 2eeed77f
...@@ -1373,9 +1373,6 @@ enum stb0899_status stb0899_dvbs2_algo(struct stb0899_state *state) ...@@ -1373,9 +1373,6 @@ enum stb0899_status stb0899_dvbs2_algo(struct stb0899_state *state)
case IQ_SWAP_ON: case IQ_SWAP_ON:
STB0899_SETFIELD_VAL(SPECTRUM_INVERT, reg, 1); STB0899_SETFIELD_VAL(SPECTRUM_INVERT, reg, 1);
break; break;
case IQ_SWAP_AUTO: /* use last successful search first */
STB0899_SETFIELD_VAL(SPECTRUM_INVERT, reg, 1);
break;
} }
stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_DMD_CNTRL2, STB0899_OFF0_DMD_CNTRL2, reg); stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_DMD_CNTRL2, STB0899_OFF0_DMD_CNTRL2, reg);
stb0899_dvbs2_reacquire(state); stb0899_dvbs2_reacquire(state);
...@@ -1405,41 +1402,39 @@ enum stb0899_status stb0899_dvbs2_algo(struct stb0899_state *state) ...@@ -1405,41 +1402,39 @@ enum stb0899_status stb0899_dvbs2_algo(struct stb0899_state *state)
} }
if (internal->status != DVBS2_FEC_LOCK) { if (internal->status != DVBS2_FEC_LOCK) {
if (internal->inversion == IQ_SWAP_AUTO) { reg = STB0899_READ_S2REG(STB0899_S2DEMOD, DMD_CNTRL2);
reg = STB0899_READ_S2REG(STB0899_S2DEMOD, DMD_CNTRL2); iqSpectrum = STB0899_GETFIELD(SPECTRUM_INVERT, reg);
iqSpectrum = STB0899_GETFIELD(SPECTRUM_INVERT, reg); /* IQ Spectrum Inversion */
/* IQ Spectrum Inversion */ STB0899_SETFIELD_VAL(SPECTRUM_INVERT, reg, !iqSpectrum);
STB0899_SETFIELD_VAL(SPECTRUM_INVERT, reg, !iqSpectrum); stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_DMD_CNTRL2, STB0899_OFF0_DMD_CNTRL2, reg);
stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_DMD_CNTRL2, STB0899_OFF0_DMD_CNTRL2, reg); /* start acquistion process */
/* start acquistion process */ stb0899_dvbs2_reacquire(state);
stb0899_dvbs2_reacquire(state);
/* Wait for demod lock (UWP and CSM) */
internal->status = stb0899_dvbs2_get_dmd_status(state, searchTime);
if (internal->status == DVBS2_DEMOD_LOCK) {
i = 0;
/* Demod Locked, check FEC */
internal->status = stb0899_dvbs2_get_fec_status(state, FecLockTime);
/*try thrice for false locks, (UWP and CSM Locked but no FEC) */
while ((internal->status != DVBS2_FEC_LOCK) && (i < 3)) {
/* Read the frequency offset*/
offsetfreq = STB0899_READ_S2REG(STB0899_S2DEMOD, CRL_FREQ);
/* Wait for demod lock (UWP and CSM) */ /* Set the Nominal frequency to the found frequency offset for the next reacquire*/
internal->status = stb0899_dvbs2_get_dmd_status(state, searchTime); reg = STB0899_READ_S2REG(STB0899_S2DEMOD, CRL_NOM_FREQ);
if (internal->status == DVBS2_DEMOD_LOCK) { STB0899_SETFIELD_VAL(CRL_NOM_FREQ, reg, offsetfreq);
i = 0; stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_CRL_NOM_FREQ, STB0899_OFF0_CRL_NOM_FREQ, reg);
/* Demod Locked, check FEC */
internal->status = stb0899_dvbs2_get_fec_status(state, FecLockTime); stb0899_dvbs2_reacquire(state);
/*try thrice for false locks, (UWP and CSM Locked but no FEC) */ internal->status = stb0899_dvbs2_get_fec_status(state, searchTime);
while ((internal->status != DVBS2_FEC_LOCK) && (i < 3)) { i++;
/* Read the frequency offset*/
offsetfreq = STB0899_READ_S2REG(STB0899_S2DEMOD, CRL_FREQ);
/* Set the Nominal frequency to the found frequency offset for the next reacquire*/
reg = STB0899_READ_S2REG(STB0899_S2DEMOD, CRL_NOM_FREQ);
STB0899_SETFIELD_VAL(CRL_NOM_FREQ, reg, offsetfreq);
stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_CRL_NOM_FREQ, STB0899_OFF0_CRL_NOM_FREQ, reg);
stb0899_dvbs2_reacquire(state);
internal->status = stb0899_dvbs2_get_fec_status(state, searchTime);
i++;
}
} }
}
/* /*
if (pParams->DVBS2State == FE_DVBS2_FEC_LOCKED) if (pParams->DVBS2State == FE_DVBS2_FEC_LOCKED)
pParams->IQLocked = !iqSpectrum; pParams->IQLocked = !iqSpectrum;
*/ */
}
} }
if (internal->status == DVBS2_FEC_LOCK) { if (internal->status == DVBS2_FEC_LOCK) {
dprintk(state->verbose, FE_DEBUG, 1, "----------------> DVB-S2 FEC Lock !"); dprintk(state->verbose, FE_DEBUG, 1, "----------------> DVB-S2 FEC Lock !");
......
...@@ -47,7 +47,6 @@ struct stb0899_s2_reg { ...@@ -47,7 +47,6 @@ struct stb0899_s2_reg {
enum stb0899_inversion { enum stb0899_inversion {
IQ_SWAP_OFF = 0, IQ_SWAP_OFF = 0,
IQ_SWAP_ON, IQ_SWAP_ON,
IQ_SWAP_AUTO
}; };
#define STB0899_GPIO00 0xf140 #define STB0899_GPIO00 0xf140
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment