diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2007-12-24 03:05:05 -0500 |
---|---|---|
committer | Michael Krufky <mkrufky@linuxtv.org> | 2007-12-24 03:05:05 -0500 |
commit | 391255eb77b1c4fc5d70a1ddec9195736e13a8c6 (patch) | |
tree | 4bbbc27601d8b12fa3e29f69654c9f2977548f91 /linux/drivers/media/dvb | |
parent | 209b5578be1d3c65d1b3812d185e9d08d869b6b7 (diff) | |
download | mediapointer-dvb-s2-391255eb77b1c4fc5d70a1ddec9195736e13a8c6.tar.gz mediapointer-dvb-s2-391255eb77b1c4fc5d70a1ddec9195736e13a8c6.tar.bz2 |
tda18271: create separate calc_pll functions
From: Michael Krufky <mkrufky@linuxtv.org>
Consolidate duplicated code by creating functions:
tda18271_calc_main_pll
tda18271_calc_cal_pll
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Diffstat (limited to 'linux/drivers/media/dvb')
-rw-r--r-- | linux/drivers/media/dvb/frontends/tda18271-fe.c | 99 |
1 files changed, 56 insertions, 43 deletions
diff --git a/linux/drivers/media/dvb/frontends/tda18271-fe.c b/linux/drivers/media/dvb/frontends/tda18271-fe.c index 24ef6fd05..e1a187e14 100644 --- a/linux/drivers/media/dvb/frontends/tda18271-fe.c +++ b/linux/drivers/media/dvb/frontends/tda18271-fe.c @@ -372,13 +372,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); #if 0 @@ -425,14 +476,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 */ @@ -445,23 +489,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 */ @@ -560,22 +588,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); |