[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: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
fda23faaff
commit
13d723ba98
2 changed files with 43 additions and 43 deletions
|
@ -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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue