Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fe0bf6d783d8057bd3dd0dd69613a390d6986c47
Commit:     fe0bf6d783d8057bd3dd0dd69613a390d6986c47
Parent:     f0bd504fb91c8929bfbacbad759a8e3fe572589f
Author:     Michael Krufky <[EMAIL PROTECTED]>
AuthorDate: Mon Dec 24 05:05:05 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Fri Jan 25 19:04:19 2008 -0200

    V4L/DVB (6907): tda18271: create separate calc_pll functions
    
    Consolidate duplicated code by creating functions:
    
    tda18271_calc_main_pll
    tda18271_calc_cal_pll
    
    Signed-off-by: Michael Krufky <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/dvb/frontends/tda18271-fe.c |   99 ++++++++++++++++-------------
 1 files changed, 56 insertions(+), 43 deletions(-)

diff --git a/drivers/media/dvb/frontends/tda18271-fe.c 
b/drivers/media/dvb/frontends/tda18271-fe.c
index 4c10585..19c9be9 100644
--- a/drivers/media/dvb/frontends/tda18271-fe.c
+++ b/drivers/media/dvb/frontends/tda18271-fe.c
@@ -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);
 
@@ -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 */
 
@@ -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 */
@@ -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);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to