Skip to content

Commit

Permalink
[media] cxd2820r: check bandwidth earlier for DVB-T/T2
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Antti Palosaari authored and Mauro Carvalho Chehab committed Nov 24, 2011
1 parent fda23fa commit 13d723b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 43 deletions.
40 changes: 20 additions & 20 deletions drivers/media/dvb/frontends/cxd2820r_t.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
{
struct cxd2820r_priv *priv = fe->demodulator_priv;
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int ret, i;
int ret, i, bw_i;
u32 if_freq, if_ctl;
u64 num;
u8 buf[3], bw_param;
Expand Down Expand Up @@ -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);

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 */
ret = cxd2820r_gpio(fe);
if (ret)
Expand All @@ -78,23 +95,6 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
priv->delivery_system = SYS_DVBT;
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 */
if (fe->ops.tuner_ops.get_if_frequency) {
ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
Expand All @@ -116,15 +116,15 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
if (ret)
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)
goto error;

ret = cxd2820r_wr_reg_mask(priv, 0x000d7, bw_param << 6, 0xc0);
if (ret)
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)
goto error;

Expand Down
46 changes: 23 additions & 23 deletions drivers/media/dvb/frontends/cxd2820r_t2.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
{
struct cxd2820r_priv *priv = fe->demodulator_priv;
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int ret, i;
int ret, i, bw_i;
u32 if_freq, if_ctl;
u64 num;
u8 buf[3], bw_param;
Expand Down Expand Up @@ -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);

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 */
ret = cxd2820r_gpio(fe);
if (ret)
Expand All @@ -91,27 +112,6 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,

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 */
if (fe->ops.tuner_ops.get_if_frequency) {
ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
Expand All @@ -133,7 +133,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
if (ret)
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)
goto error;

Expand Down

0 comments on commit 13d723b

Please sign in to comment.