Commit 13d723ba authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

[media] cxd2820r: check bandwidth earlier for DVB-T/T2

It is param that could be potentially unsupported and
due to that it is good idea to check it very first.
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent fda23faa
...@@ -26,7 +26,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe, ...@@ -26,7 +26,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
{ {
struct cxd2820r_priv *priv = fe->demodulator_priv; struct cxd2820r_priv *priv = fe->demodulator_priv;
struct dtv_frontend_properties *c = &fe->dtv_property_cache; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int ret, i; int ret, i, bw_i;
u32 if_freq, if_ctl; u32 if_freq, if_ctl;
u64 num; u64 num;
u8 buf[3], bw_param; u8 buf[3], bw_param;
...@@ -57,6 +57,23 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe, ...@@ -57,6 +57,23 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
dbg("%s: RF=%d BW=%d", __func__, c->frequency, c->bandwidth_hz); dbg("%s: RF=%d BW=%d", __func__, c->frequency, c->bandwidth_hz);
switch (c->bandwidth_hz) {
case 6000000:
bw_i = 0;
bw_param = 2;
break;
case 7000000:
bw_i = 1;
bw_param = 1;
break;
case 8000000:
bw_i = 2;
bw_param = 0;
break;
default:
return -EINVAL;
}
/* update GPIOs */ /* update GPIOs */
ret = cxd2820r_gpio(fe); ret = cxd2820r_gpio(fe);
if (ret) if (ret)
...@@ -78,23 +95,6 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe, ...@@ -78,23 +95,6 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
priv->delivery_system = SYS_DVBT; priv->delivery_system = SYS_DVBT;
priv->ber_running = 0; /* tune stops BER counter */ priv->ber_running = 0; /* tune stops BER counter */
switch (c->bandwidth_hz) {
case 6000000:
i = 0;
bw_param = 2;
break;
case 7000000:
i = 1;
bw_param = 1;
break;
case 8000000:
i = 2;
bw_param = 0;
break;
default:
return -EINVAL;
}
/* program IF frequency */ /* program IF frequency */
if (fe->ops.tuner_ops.get_if_frequency) { if (fe->ops.tuner_ops.get_if_frequency) {
ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq); ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
...@@ -116,7 +116,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe, ...@@ -116,7 +116,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
if (ret) if (ret)
goto error; goto error;
ret = cxd2820r_wr_regs(priv, 0x0009f, bw_params1[i], 5); ret = cxd2820r_wr_regs(priv, 0x0009f, bw_params1[bw_i], 5);
if (ret) if (ret)
goto error; goto error;
...@@ -124,7 +124,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe, ...@@ -124,7 +124,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
if (ret) if (ret)
goto error; goto error;
ret = cxd2820r_wr_regs(priv, 0x000d9, bw_params2[i], 2); ret = cxd2820r_wr_regs(priv, 0x000d9, bw_params2[bw_i], 2);
if (ret) if (ret)
goto error; goto error;
......
...@@ -26,7 +26,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe, ...@@ -26,7 +26,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
{ {
struct cxd2820r_priv *priv = fe->demodulator_priv; struct cxd2820r_priv *priv = fe->demodulator_priv;
struct dtv_frontend_properties *c = &fe->dtv_property_cache; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int ret, i; int ret, i, bw_i;
u32 if_freq, if_ctl; u32 if_freq, if_ctl;
u64 num; u64 num;
u8 buf[3], bw_param; u8 buf[3], bw_param;
...@@ -71,6 +71,27 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe, ...@@ -71,6 +71,27 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
dbg("%s: RF=%d BW=%d", __func__, c->frequency, c->bandwidth_hz); dbg("%s: RF=%d BW=%d", __func__, c->frequency, c->bandwidth_hz);
switch (c->bandwidth_hz) {
case 5000000:
bw_i = 0;
bw_param = 3;
break;
case 6000000:
bw_i = 1;
bw_param = 2;
break;
case 7000000:
bw_i = 2;
bw_param = 1;
break;
case 8000000:
bw_i = 3;
bw_param = 0;
break;
default:
return -EINVAL;
}
/* update GPIOs */ /* update GPIOs */
ret = cxd2820r_gpio(fe); ret = cxd2820r_gpio(fe);
if (ret) if (ret)
...@@ -91,27 +112,6 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe, ...@@ -91,27 +112,6 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
priv->delivery_system = SYS_DVBT2; priv->delivery_system = SYS_DVBT2;
switch (c->bandwidth_hz) {
case 5000000:
i = 0;
bw_param = 3;
break;
case 6000000:
i = 1;
bw_param = 2;
break;
case 7000000:
i = 2;
bw_param = 1;
break;
case 8000000:
i = 3;
bw_param = 0;
break;
default:
return -EINVAL;
}
/* program IF frequency */ /* program IF frequency */
if (fe->ops.tuner_ops.get_if_frequency) { if (fe->ops.tuner_ops.get_if_frequency) {
ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq); ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
...@@ -133,7 +133,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe, ...@@ -133,7 +133,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
if (ret) if (ret)
goto error; goto error;
ret = cxd2820r_wr_regs(priv, 0x0209f, bw_params1[i], 5); ret = cxd2820r_wr_regs(priv, 0x0209f, bw_params1[bw_i], 5);
if (ret) if (ret)
goto error; goto error;
......
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