mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 17:41:44 +00:00
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: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
0e7830b50b
commit
44e645c203
@ -45,6 +45,21 @@ static inline int charge_pump_source(struct dvb_frontend *fe, int 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,
|
||||
struct tda18271_std_map_item *map,
|
||||
u32 freq, u32 bw)
|
||||
@ -66,19 +81,10 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
/* set cal mode to normal */
|
||||
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] |= (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 */
|
||||
regs[R_EP4] &= ~0x80;
|
||||
regs[R_EP4] |= map->fm_rfn << 7;
|
||||
@ -135,6 +141,7 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
switch (priv->role) {
|
||||
case TDA18271_MASTER:
|
||||
tda18271_calc_main_pll(fe, N);
|
||||
tda18271_set_if_notch(fe);
|
||||
tda18271_write_regs(fe, R_MPD, 4);
|
||||
break;
|
||||
case TDA18271_SLAVE:
|
||||
@ -142,6 +149,7 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
tda18271_write_regs(fe, R_CPD, 4);
|
||||
|
||||
regs[R_MPD] = regs[R_CPD] & 0x7f;
|
||||
tda18271_set_if_notch(fe);
|
||||
tda18271_write_regs(fe, R_MPD, 1);
|
||||
break;
|
||||
}
|
||||
@ -507,7 +515,7 @@ static int tda18271_powerscan_init(struct dvb_frontend *fe)
|
||||
/* set cal mode to normal */
|
||||
regs[R_EP4] &= ~0x03;
|
||||
|
||||
/* update IF output level & IF notch frequency */
|
||||
/* update IF output level */
|
||||
regs[R_EP4] &= ~0x1c; /* clear if level bits */
|
||||
|
||||
ret = tda18271_write_regs(fe, R_EP3, 2);
|
||||
|
Loading…
Reference in New Issue
Block a user