[media] rtl2830: use .get_if_frequency()
Use .get_if_frequency() as all used tuner drivers (mt2060/qt1010/mxl5005s) supports it. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
86ad0f1dd7
Коммит
66b3c4deb9
|
@ -182,9 +182,6 @@ static int rtl2830_init(struct dvb_frontend *fe)
|
||||||
{
|
{
|
||||||
struct rtl2830_priv *priv = fe->demodulator_priv;
|
struct rtl2830_priv *priv = fe->demodulator_priv;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
u64 num;
|
|
||||||
u8 buf[3], tmp;
|
|
||||||
u32 if_ctl;
|
|
||||||
struct rtl2830_reg_val_mask tab[] = {
|
struct rtl2830_reg_val_mask tab[] = {
|
||||||
{ 0x00d, 0x01, 0x03 },
|
{ 0x00d, 0x01, 0x03 },
|
||||||
{ 0x00d, 0x10, 0x10 },
|
{ 0x00d, 0x10, 0x10 },
|
||||||
|
@ -240,26 +237,6 @@ static int rtl2830_init(struct dvb_frontend *fe)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
num = priv->cfg.if_dvbt % priv->cfg.xtal;
|
|
||||||
num *= 0x400000;
|
|
||||||
num = div_u64(num, priv->cfg.xtal);
|
|
||||||
num = -num;
|
|
||||||
if_ctl = num & 0x3fffff;
|
|
||||||
dev_dbg(&priv->i2c->dev, "%s: if_ctl=%08x\n", __func__, if_ctl);
|
|
||||||
|
|
||||||
ret = rtl2830_rd_reg_mask(priv, 0x119, &tmp, 0xc0); /* b[7:6] */
|
|
||||||
if (ret)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
buf[0] = tmp << 6;
|
|
||||||
buf[0] = (if_ctl >> 16) & 0x3f;
|
|
||||||
buf[1] = (if_ctl >> 8) & 0xff;
|
|
||||||
buf[2] = (if_ctl >> 0) & 0xff;
|
|
||||||
|
|
||||||
ret = rtl2830_wr_regs(priv, 0x119, buf, 3);
|
|
||||||
if (ret)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
/* TODO: spec init */
|
/* TODO: spec init */
|
||||||
|
|
||||||
/* soft reset */
|
/* soft reset */
|
||||||
|
@ -301,6 +278,9 @@ static int rtl2830_set_frontend(struct dvb_frontend *fe)
|
||||||
struct rtl2830_priv *priv = fe->demodulator_priv;
|
struct rtl2830_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;
|
||||||
|
u64 num;
|
||||||
|
u8 buf[3], tmp;
|
||||||
|
u32 if_ctl, if_frequency;
|
||||||
static u8 bw_params1[3][34] = {
|
static u8 bw_params1[3][34] = {
|
||||||
{
|
{
|
||||||
0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0xfa, 0x00, 0x17, 0x00, 0x41,
|
0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0xfa, 0x00, 0x17, 0x00, 0x41,
|
||||||
|
@ -325,7 +305,6 @@ static int rtl2830_set_frontend(struct dvb_frontend *fe)
|
||||||
{0xae, 0xba, 0xf3, 0x26, 0x66, 0x64,}, /* 8 MHz */
|
{0xae, 0xba, 0xf3, 0x26, 0x66, 0x64,}, /* 8 MHz */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
dev_dbg(&priv->i2c->dev,
|
dev_dbg(&priv->i2c->dev,
|
||||||
"%s: frequency=%d bandwidth_hz=%d inversion=%d\n",
|
"%s: frequency=%d bandwidth_hz=%d inversion=%d\n",
|
||||||
__func__, c->frequency, c->bandwidth_hz, c->inversion);
|
__func__, c->frequency, c->bandwidth_hz, c->inversion);
|
||||||
|
@ -353,6 +332,36 @@ static int rtl2830_set_frontend(struct dvb_frontend *fe)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
/* program if frequency */
|
||||||
|
if (fe->ops.tuner_ops.get_if_frequency)
|
||||||
|
ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_frequency);
|
||||||
|
else
|
||||||
|
ret = -EINVAL;
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
num = if_frequency % priv->cfg.xtal;
|
||||||
|
num *= 0x400000;
|
||||||
|
num = div_u64(num, priv->cfg.xtal);
|
||||||
|
num = -num;
|
||||||
|
if_ctl = num & 0x3fffff;
|
||||||
|
dev_dbg(&priv->i2c->dev, "%s: if_frequency=%d if_ctl=%08x\n",
|
||||||
|
__func__, if_frequency, if_ctl);
|
||||||
|
|
||||||
|
ret = rtl2830_rd_reg_mask(priv, 0x119, &tmp, 0xc0); /* b[7:6] */
|
||||||
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
buf[0] = tmp << 6;
|
||||||
|
buf[0] |= (if_ctl >> 16) & 0x3f;
|
||||||
|
buf[1] = (if_ctl >> 8) & 0xff;
|
||||||
|
buf[2] = (if_ctl >> 0) & 0xff;
|
||||||
|
|
||||||
|
ret = rtl2830_wr_regs(priv, 0x119, buf, 3);
|
||||||
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
|
||||||
/* 1/2 split I2C write */
|
/* 1/2 split I2C write */
|
||||||
ret = rtl2830_wr_regs(priv, 0x11c, &bw_params1[i][0], 17);
|
ret = rtl2830_wr_regs(priv, 0x11c, &bw_params1[i][0], 17);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
@ -46,13 +46,6 @@ struct rtl2830_config {
|
||||||
*/
|
*/
|
||||||
bool spec_inv;
|
bool spec_inv;
|
||||||
|
|
||||||
/*
|
|
||||||
* IFs for all used modes.
|
|
||||||
* Hz
|
|
||||||
* 4570000, 4571429, 36000000, 36125000, 36166667, 44000000
|
|
||||||
*/
|
|
||||||
u32 if_dvbt;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
u8 vtop;
|
u8 vtop;
|
||||||
|
|
|
@ -259,7 +259,6 @@ static struct rtl2830_config rtl28xxu_rtl2830_mt2060_config = {
|
||||||
.xtal = 28800000,
|
.xtal = 28800000,
|
||||||
.ts_mode = 0,
|
.ts_mode = 0,
|
||||||
.spec_inv = 1,
|
.spec_inv = 1,
|
||||||
.if_dvbt = 36150000,
|
|
||||||
.vtop = 0x20,
|
.vtop = 0x20,
|
||||||
.krf = 0x04,
|
.krf = 0x04,
|
||||||
.agc_targ_val = 0x2d,
|
.agc_targ_val = 0x2d,
|
||||||
|
@ -271,7 +270,6 @@ static struct rtl2830_config rtl28xxu_rtl2830_qt1010_config = {
|
||||||
.xtal = 28800000,
|
.xtal = 28800000,
|
||||||
.ts_mode = 0,
|
.ts_mode = 0,
|
||||||
.spec_inv = 1,
|
.spec_inv = 1,
|
||||||
.if_dvbt = 36125000,
|
|
||||||
.vtop = 0x20,
|
.vtop = 0x20,
|
||||||
.krf = 0x04,
|
.krf = 0x04,
|
||||||
.agc_targ_val = 0x2d,
|
.agc_targ_val = 0x2d,
|
||||||
|
@ -282,7 +280,6 @@ static struct rtl2830_config rtl28xxu_rtl2830_mxl5005s_config = {
|
||||||
.xtal = 28800000,
|
.xtal = 28800000,
|
||||||
.ts_mode = 0,
|
.ts_mode = 0,
|
||||||
.spec_inv = 0,
|
.spec_inv = 0,
|
||||||
.if_dvbt = 4570000,
|
|
||||||
.vtop = 0x3f,
|
.vtop = 0x3f,
|
||||||
.krf = 0x04,
|
.krf = 0x04,
|
||||||
.agc_targ_val = 0x3e,
|
.agc_targ_val = 0x3e,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче