“fdca4f16f57da76a8e68047923588a87d1c01f0a”上不存在“arch/git@gitcode.net:openeuler/kernel.git”
提交 44e645c2 编写于 作者: M Michael Krufky 提交者: Mauro Carvalho Chehab

V4L/DVB (8034): tda18271: fix IF notch frequency handling

The IF notch bit gets unset when we update the Main Post Div register
value, before we have a chance to write the desired IF notch setting
to the tuner.  Move the IF notch configuration to after we update MPD.
Signed-off-by: NMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 0e7830b5
无相关合并请求
...@@ -45,6 +45,21 @@ static inline int charge_pump_source(struct dvb_frontend *fe, int force) ...@@ -45,6 +45,21 @@ static inline int charge_pump_source(struct dvb_frontend *fe, int force)
TDA18271_MAIN_PLL, force); TDA18271_MAIN_PLL, force);
} }
static inline void tda18271_set_if_notch(struct dvb_frontend *fe)
{
struct tda18271_priv *priv = fe->tuner_priv;
unsigned char *regs = priv->tda18271_regs;
switch (priv->mode) {
case TDA18271_ANALOG:
regs[R_MPD] &= ~0x80; /* IF notch = 0 */
break;
case TDA18271_DIGITAL:
regs[R_MPD] |= 0x80; /* IF notch = 1 */
break;
}
}
static int tda18271_channel_configuration(struct dvb_frontend *fe, static int tda18271_channel_configuration(struct dvb_frontend *fe,
struct tda18271_std_map_item *map, struct tda18271_std_map_item *map,
u32 freq, u32 bw) u32 freq, u32 bw)
...@@ -66,19 +81,10 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe, ...@@ -66,19 +81,10 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
/* set cal mode to normal */ /* set cal mode to normal */
regs[R_EP4] &= ~0x03; regs[R_EP4] &= ~0x03;
/* update IF output level & IF notch frequency */ /* update IF output level */
regs[R_EP4] &= ~0x1c; /* clear if level bits */ regs[R_EP4] &= ~0x1c; /* clear if level bits */
regs[R_EP4] |= (map->if_lvl << 2); regs[R_EP4] |= (map->if_lvl << 2);
switch (priv->mode) {
case TDA18271_ANALOG:
regs[R_MPD] &= ~0x80; /* IF notch = 0 */
break;
case TDA18271_DIGITAL:
regs[R_MPD] |= 0x80; /* IF notch = 1 */
break;
}
/* update FM_RFn */ /* update FM_RFn */
regs[R_EP4] &= ~0x80; regs[R_EP4] &= ~0x80;
regs[R_EP4] |= map->fm_rfn << 7; regs[R_EP4] |= map->fm_rfn << 7;
...@@ -135,6 +141,7 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe, ...@@ -135,6 +141,7 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
switch (priv->role) { switch (priv->role) {
case TDA18271_MASTER: case TDA18271_MASTER:
tda18271_calc_main_pll(fe, N); tda18271_calc_main_pll(fe, N);
tda18271_set_if_notch(fe);
tda18271_write_regs(fe, R_MPD, 4); tda18271_write_regs(fe, R_MPD, 4);
break; break;
case TDA18271_SLAVE: case TDA18271_SLAVE:
...@@ -142,6 +149,7 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe, ...@@ -142,6 +149,7 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
tda18271_write_regs(fe, R_CPD, 4); tda18271_write_regs(fe, R_CPD, 4);
regs[R_MPD] = regs[R_CPD] & 0x7f; regs[R_MPD] = regs[R_CPD] & 0x7f;
tda18271_set_if_notch(fe);
tda18271_write_regs(fe, R_MPD, 1); tda18271_write_regs(fe, R_MPD, 1);
break; break;
} }
...@@ -507,7 +515,7 @@ static int tda18271_powerscan_init(struct dvb_frontend *fe) ...@@ -507,7 +515,7 @@ static int tda18271_powerscan_init(struct dvb_frontend *fe)
/* set cal mode to normal */ /* set cal mode to normal */
regs[R_EP4] &= ~0x03; regs[R_EP4] &= ~0x03;
/* update IF output level & IF notch frequency */ /* update IF output level */
regs[R_EP4] &= ~0x1c; /* clear if level bits */ regs[R_EP4] &= ~0x1c; /* clear if level bits */
ret = tda18271_write_regs(fe, R_EP3, 2); ret = tda18271_write_regs(fe, R_EP3, 2);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部