提交 df810e8a 编写于 作者: A Antti Palosaari 提交者: Mauro Carvalho Chehab

[media] mn88473: improve IF frequency and BW handling

Separate IF and BW based registers.
Add support for DVB-T and DVB-T2 6MHz channel bandwidth.
Signed-off-by: NAntti Palosaari <crope@iki.fi>
Signed-off-by: NMauro Carvalho Chehab <mchehab@osg.samsung.com>
上级 6ebbe22d
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
......@@ -117,8 +117,8 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
struct mn88473_dev *dev = fe->demodulator_priv;
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int ret, i;
u32 if_frequency = 0;
u8 params[10], delivery_system;
u32 if_frequency;
u8 delivery_system_val, if_val[3], bw_val[7];
dev_dbg(&dev->i2c->dev,
"%s: delivery_system=%u modulation=%u frequency=%u bandwidth_hz=%u symbol_rate=%u inversion=%d stream_id=%d\n",
......@@ -133,22 +133,43 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
switch (c->delivery_system) {
case SYS_DVBT:
delivery_system = 0x02;
if (c->bandwidth_hz <= 7000000)
memcpy(params, "\x2e\xcb\xfb\xc8\x00\x00\x17\x0a\x17\x0a", 10);
else if (c->bandwidth_hz <= 8000000)
memcpy(params, "\x2e\xcb\xfb\xaf\x00\x00\x11\xec\x11\xec", 10);
delivery_system_val = 0x02;
break;
case SYS_DVBT2:
delivery_system = 0x03;
if (c->bandwidth_hz <= 7000000)
memcpy(params, "\x2e\xcb\xfb\xc8\x00\x00\x17\x0a\x17\x0a", 10);
else if (c->bandwidth_hz <= 8000000)
memcpy(params, "\x2e\xcb\xfb\xaf\x00\x00\x11\xec\x11\xec", 10);
delivery_system_val = 0x03;
break;
case SYS_DVBC_ANNEX_A:
delivery_system = 0x04;
memcpy(params, "\x33\xea\xb3\xaf\x00\x00\x11\xec\x11\xec", 10);
delivery_system_val = 0x04;
break;
default:
ret = -EINVAL;
goto err;
}
switch (c->delivery_system) {
case SYS_DVBT:
case SYS_DVBT2:
if (c->bandwidth_hz <= 6000000) {
/* IF 3570000 Hz, BW 6000000 Hz */
memcpy(if_val, "\x24\x8e\x8a", 3);
memcpy(bw_val, "\xe9\x55\x55\x1c\x29\x1c\x29", 7);
} else if (c->bandwidth_hz <= 7000000) {
/* IF 4570000 Hz, BW 7000000 Hz */
memcpy(if_val, "\x2e\xcb\xfb", 3);
memcpy(bw_val, "\xc8\x00\x00\x17\x0a\x17\x0a", 7);
} else if (c->bandwidth_hz <= 8000000) {
/* IF 4570000 Hz, BW 8000000 Hz */
memcpy(if_val, "\x2e\xcb\xfb", 3);
memcpy(bw_val, "\xaf\x00\x00\x11\xec\x11\xec", 7);
} else {
ret = -EINVAL;
goto err;
}
break;
case SYS_DVBC_ANNEX_A:
/* IF 5070000 Hz, BW 8000000 Hz */
memcpy(if_val, "\x33\xea\xb3", 3);
memcpy(bw_val, "\xaf\x00\x00\x11\xec\x11\xec", 7);
break;
default:
ret = -EINVAL;
......@@ -169,9 +190,12 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
dev_dbg(&dev->i2c->dev, "%s: get_if_frequency=%d\n",
__func__, if_frequency);
} else {
if_frequency = 0;
}
switch (if_frequency) {
case 3570000:
case 4570000:
case 5070000:
break;
......@@ -189,11 +213,17 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
ret = mn88473_wregs(dev, 0x1c00, "\x18", 1);
ret = mn88473_wregs(dev, 0x1c01, "\x01", 1);
ret = mn88473_wregs(dev, 0x1c02, "\x21", 1);
ret = mn88473_wreg(dev, 0x1c03, delivery_system);
ret = mn88473_wreg(dev, 0x1c03, delivery_system_val);
ret = mn88473_wregs(dev, 0x1c0b, "\x00", 1);
for (i = 0; i < 10; i++) {
ret = mn88473_wreg(dev, 0x1c10 + i, params[i]);
for (i = 0; i < sizeof(if_val); i++) {
ret = mn88473_wreg(dev, 0x1c10 + i, if_val[i]);
if (ret)
goto err;
}
for (i = 0; i < sizeof(bw_val); i++) {
ret = mn88473_wreg(dev, 0x1c13 + i, bw_val[i]);
if (ret)
goto err;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部