|
@@ -27,7 +27,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;
|
|
|
- u32 if_khz, if_ctl;
|
|
|
+ u32 if_freq, if_ctl;
|
|
|
u64 num;
|
|
|
u8 buf[3], bw_param;
|
|
|
u8 bw_params1[][5] = {
|
|
@@ -93,22 +93,18 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
|
|
|
|
|
|
switch (c->bandwidth_hz) {
|
|
|
case 5000000:
|
|
|
- if_khz = priv->cfg.if_dvbt2_5;
|
|
|
i = 0;
|
|
|
bw_param = 3;
|
|
|
break;
|
|
|
case 6000000:
|
|
|
- if_khz = priv->cfg.if_dvbt2_6;
|
|
|
i = 1;
|
|
|
bw_param = 2;
|
|
|
break;
|
|
|
case 7000000:
|
|
|
- if_khz = priv->cfg.if_dvbt2_7;
|
|
|
i = 2;
|
|
|
bw_param = 1;
|
|
|
break;
|
|
|
case 8000000:
|
|
|
- if_khz = priv->cfg.if_dvbt2_8;
|
|
|
i = 3;
|
|
|
bw_param = 0;
|
|
|
break;
|
|
@@ -116,7 +112,17 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- num = if_khz;
|
|
|
+ /* program IF frequency */
|
|
|
+ if (fe->ops.tuner_ops.get_if_frequency) {
|
|
|
+ ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
|
|
|
+ if (ret)
|
|
|
+ goto error;
|
|
|
+ } else
|
|
|
+ if_freq = 0;
|
|
|
+
|
|
|
+ dbg("%s: if_freq=%d", __func__, if_freq);
|
|
|
+
|
|
|
+ num = if_freq / 1000; /* Hz => kHz */
|
|
|
num *= 0x1000000;
|
|
|
if_ctl = cxd2820r_div_u64_round_closest(num, 41000);
|
|
|
buf[0] = ((if_ctl >> 16) & 0xff);
|