Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76656
b: refs/heads/master
c: fe0bf6d
h: refs/heads/master
v: v3
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Jan 25, 2008
1 parent ef4eebf commit 2f1728a
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 44 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f0bd504fb91c8929bfbacbad759a8e3fe572589f
refs/heads/master: fe0bf6d783d8057bd3dd0dd69613a390d6986c47
99 changes: 56 additions & 43 deletions trunk/drivers/media/dvb/frontends/tda18271-fe.c
Original file line number Diff line number Diff line change
Expand Up @@ -371,13 +371,64 @@ static int tda18271_init(struct dvb_frontend *fe)
return 0;
}

static int tda18271_calc_main_pll(struct dvb_frontend *fe, u32 freq)
{
/* Sets Main Post-Divider & Divider bytes, but does not write them */
struct tda18271_priv *priv = fe->tuner_priv;
unsigned char *regs = priv->tda18271_regs;
u8 d, pd;
u32 div;

tda18271_lookup_main_pll(&freq, &pd, &d);

regs[R_MPD] = (0x77 & pd);

switch (priv->mode) {
case TDA18271_ANALOG:
regs[R_MPD] &= ~0x08;
break;
case TDA18271_DIGITAL:
regs[R_MPD] |= 0x08;
break;
}

div = ((d * (freq / 1000)) << 7) / 125;

regs[R_MD1] = 0x7f & (div >> 16);
regs[R_MD2] = 0xff & (div >> 8);
regs[R_MD3] = 0xff & div;

return 0;
}

static int tda18271_calc_cal_pll(struct dvb_frontend *fe, u32 freq)
{
/* Sets Cal Post-Divider & Divider bytes, but does not write them */
struct tda18271_priv *priv = fe->tuner_priv;
unsigned char *regs = priv->tda18271_regs;
u8 d, pd;
u32 div;

tda18271_lookup_cal_pll(&freq, &pd, &d);

regs[R_CPD] = pd;

div = ((d * (freq / 1000)) << 7) / 125;

regs[R_CD1] = 0x7f & (div >> 16);
regs[R_CD2] = 0xff & (div >> 8);
regs[R_CD3] = 0xff & div;

return 0;
}

static int tda18271_tune(struct dvb_frontend *fe,
u32 ifc, u32 freq, u32 bw, u8 std)
{
struct tda18271_priv *priv = fe->tuner_priv;
unsigned char *regs = priv->tda18271_regs;
u32 div, N = 0;
u8 d, pd, val;
u32 N = 0;
u8 val;

tda18271_init(fe);

Expand Down Expand Up @@ -419,14 +470,7 @@ static int tda18271_tune(struct dvb_frontend *fe,
break;
}

tda18271_lookup_cal_pll(&N, &pd, &d);

regs[R_CPD] = pd;

div = ((d * (N / 1000)) << 7) / 125;
regs[R_CD1] = 0x7f & (div >> 16);
regs[R_CD2] = 0xff & (div >> 8);
regs[R_CD3] = 0xff & div;
tda18271_calc_cal_pll(fe, N);

/* calculate MAIN PLL */

Expand All @@ -439,23 +483,7 @@ static int tda18271_tune(struct dvb_frontend *fe,
break;
}

tda18271_lookup_main_pll(&N, &pd, &d);

regs[R_MPD] = (0x7f & pd);

switch (priv->mode) {
case TDA18271_ANALOG:
regs[R_MPD] &= ~0x08;
break;
case TDA18271_DIGITAL:
regs[R_MPD] |= 0x08;
break;
}

div = ((d * (N / 1000)) << 7) / 125;
regs[R_MD1] = 0x7f & (div >> 16);
regs[R_MD2] = 0xff & (div >> 8);
regs[R_MD3] = 0xff & div;
tda18271_calc_main_pll(fe, N);

tda18271_write_regs(fe, R_EP3, 11);
msleep(5); /* RF tracking filter calibration initialization */
Expand Down Expand Up @@ -554,22 +582,7 @@ static int tda18271_tune(struct dvb_frontend *fe,
/* calculate MAIN PLL */
N = freq + ifc;

tda18271_lookup_main_pll(&N, &pd, &d);

regs[R_MPD] = (0x7f & pd);
switch (priv->mode) {
case TDA18271_ANALOG:
regs[R_MPD] &= ~0x08;
break;
case TDA18271_DIGITAL:
regs[R_MPD] |= 0x08;
break;
}

div = ((d * (N / 1000)) << 7) / 125;
regs[R_MD1] = 0x7f & (div >> 16);
regs[R_MD2] = 0xff & (div >> 8);
regs[R_MD3] = 0xff & div;
tda18271_calc_main_pll(fe, N);

tda18271_write_regs(fe, R_TM, 15);
msleep(5);
Expand Down

0 comments on commit 2f1728a

Please sign in to comment.