Commit 3569476d authored by Darron Broad's avatar Darron Broad Committed by Mauro Carvalho Chehab

V4L/DVB (9914): cx24116: bugfix: add missing delsys in FEC lookup

Delsys was missing when searching for FEC in table.

This fixes FEC lookup for DVB-S2 QPSK modulation.

Cc: Steven Toth <stoth@hauppauge.com>
Signed-off-by: default avatarDarron Broad <darron@kewl.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent e278e746
...@@ -160,6 +160,7 @@ struct cx24116_tuning { ...@@ -160,6 +160,7 @@ struct cx24116_tuning {
fe_spectral_inversion_t inversion; fe_spectral_inversion_t inversion;
fe_code_rate_t fec; fe_code_rate_t fec;
fe_delivery_system_t delsys;
fe_modulation_t modulation; fe_modulation_t modulation;
fe_pilot_t pilot; fe_pilot_t pilot;
fe_rolloff_t rolloff; fe_rolloff_t rolloff;
...@@ -411,14 +412,15 @@ struct cx24116_modfec { ...@@ -411,14 +412,15 @@ struct cx24116_modfec {
}; };
static int cx24116_lookup_fecmod(struct cx24116_state *state, static int cx24116_lookup_fecmod(struct cx24116_state *state,
fe_modulation_t m, fe_code_rate_t f) fe_delivery_system_t d, fe_modulation_t m, fe_code_rate_t f)
{ {
int i, ret = -EOPNOTSUPP; int i, ret = -EOPNOTSUPP;
dprintk("%s(0x%02x,0x%02x)\n", __func__, m, f); dprintk("%s(0x%02x,0x%02x)\n", __func__, m, f);
for (i = 0; i < ARRAY_SIZE(CX24116_MODFEC_MODES); i++) { for (i = 0; i < ARRAY_SIZE(CX24116_MODFEC_MODES); i++) {
if ((m == CX24116_MODFEC_MODES[i].modulation) && if ((d == CX24116_MODFEC_MODES[i].delivery_system) &&
(m == CX24116_MODFEC_MODES[i].modulation) &&
(f == CX24116_MODFEC_MODES[i].fec)) { (f == CX24116_MODFEC_MODES[i].fec)) {
ret = i; ret = i;
break; break;
...@@ -429,13 +431,13 @@ static int cx24116_lookup_fecmod(struct cx24116_state *state, ...@@ -429,13 +431,13 @@ static int cx24116_lookup_fecmod(struct cx24116_state *state,
} }
static int cx24116_set_fec(struct cx24116_state *state, static int cx24116_set_fec(struct cx24116_state *state,
fe_modulation_t mod, fe_code_rate_t fec) fe_delivery_system_t delsys, fe_modulation_t mod, fe_code_rate_t fec)
{ {
int ret = 0; int ret = 0;
dprintk("%s(0x%02x,0x%02x)\n", __func__, mod, fec); dprintk("%s(0x%02x,0x%02x)\n", __func__, mod, fec);
ret = cx24116_lookup_fecmod(state, mod, fec); ret = cx24116_lookup_fecmod(state, delsys, mod, fec);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -1287,6 +1289,7 @@ static int cx24116_set_frontend(struct dvb_frontend *fe, ...@@ -1287,6 +1289,7 @@ static int cx24116_set_frontend(struct dvb_frontend *fe,
__func__, c->delivery_system); __func__, c->delivery_system);
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
state->dnxt.delsys = c->delivery_system;
state->dnxt.modulation = c->modulation; state->dnxt.modulation = c->modulation;
state->dnxt.frequency = c->frequency; state->dnxt.frequency = c->frequency;
state->dnxt.pilot = c->pilot; state->dnxt.pilot = c->pilot;
...@@ -1297,7 +1300,7 @@ static int cx24116_set_frontend(struct dvb_frontend *fe, ...@@ -1297,7 +1300,7 @@ static int cx24116_set_frontend(struct dvb_frontend *fe,
return ret; return ret;
/* FEC_NONE/AUTO for DVB-S2 is not supported and detected here */ /* FEC_NONE/AUTO for DVB-S2 is not supported and detected here */
ret = cx24116_set_fec(state, c->modulation, c->fec_inner); ret = cx24116_set_fec(state, c->delivery_system, c->modulation, c->fec_inner);
if (ret != 0) if (ret != 0)
return ret; return ret;
...@@ -1308,6 +1311,7 @@ static int cx24116_set_frontend(struct dvb_frontend *fe, ...@@ -1308,6 +1311,7 @@ static int cx24116_set_frontend(struct dvb_frontend *fe,
/* discard the 'current' tuning parameters and prepare to tune */ /* discard the 'current' tuning parameters and prepare to tune */
cx24116_clone_params(fe); cx24116_clone_params(fe);
dprintk("%s: delsys = %d\n", __func__, state->dcur.delsys);
dprintk("%s: modulation = %d\n", __func__, state->dcur.modulation); dprintk("%s: modulation = %d\n", __func__, state->dcur.modulation);
dprintk("%s: frequency = %d\n", __func__, state->dcur.frequency); dprintk("%s: frequency = %d\n", __func__, state->dcur.frequency);
dprintk("%s: pilot = %d (val = 0x%02x)\n", __func__, dprintk("%s: pilot = %d (val = 0x%02x)\n", __func__,
......
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