Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a1dcd9de648c8cf21abaeca7f77885665eed4117
Commit:     a1dcd9de648c8cf21abaeca7f77885665eed4117
Parent:     702a67624e4bc9c7056418b576af928940b7dbb9
Author:     Chris Pascoe <[EMAIL PROTECTED]>
AuthorDate: Tue Nov 20 08:17:54 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Fri Jan 25 19:02:37 2008 -0200

    V4L/DVB (6656): zl10353: store frequencies in 0.1kHz to eliminate rounding 
errors
    
    Whilst reanalysing my formulas I realised it was no longer possible to get 
the
    right values for a 36.1667MHz IF due to rounding problems.
    
    Storing frequencies in units of 0.1kHz makes it possible to calculate these
    again correctly.
    
    Signed-off-by: Chris Pascoe <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/dvb/dvb-usb/cxusb.c     |    2 +-
 drivers/media/dvb/frontends/zl10353.c |   15 +++++++++------
 drivers/media/dvb/frontends/zl10353.h |    8 ++++----
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/media/dvb/dvb-usb/cxusb.c 
b/drivers/media/dvb/dvb-usb/cxusb.c
index c44b979..deeb387 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -435,7 +435,7 @@ static struct mt352_config cxusb_mt352_config = {
 
 static struct zl10353_config cxusb_zl10353_xc3028_config = {
        .demod_address = 0x0f,
-       .if2 = 4560,
+       .if2 = 45600,
        .no_tuner = 1,
        .parallel_ts = 1,
 };
diff --git a/drivers/media/dvb/frontends/zl10353.c 
b/drivers/media/dvb/frontends/zl10353.c
index 1736c6a..091fbcc 100644
--- a/drivers/media/dvb/frontends/zl10353.c
+++ b/drivers/media/dvb/frontends/zl10353.c
@@ -123,9 +123,10 @@ static void zl10353_calc_nominal_rate(struct dvb_frontend 
*fe,
                                      enum fe_bandwidth bandwidth,
                                      u16 *nominal_rate)
 {
-       u32 adc_clock = 45056; /* 45.056 MHz */
-       u8 bw;
        struct zl10353_state *state = fe->demodulator_priv;
+       u32 adc_clock = 450560; /* 45.056 MHz */
+       u64 value;
+       u8 bw;
 
        if (state->config.adc_clock)
                adc_clock = state->config.adc_clock;
@@ -143,7 +144,9 @@ static void zl10353_calc_nominal_rate(struct dvb_frontend 
*fe,
                break;
        }
 
-       *nominal_rate = (bw * (1 << 23) / 7 * 125 + adc_clock / 2) / adc_clock;
+       value = (bw * (u64)10 * (1 << 23) / 7 * 125 + adc_clock / 2);
+       do_div(value, adc_clock);
+       *nominal_rate = value;
 
        dprintk("%s: bw %d, adc_clock %d => 0x%x\n",
                __FUNCTION__, bw, adc_clock, *nominal_rate);
@@ -153,8 +156,8 @@ static void zl10353_calc_input_freq(struct dvb_frontend *fe,
                                    u16 *input_freq)
 {
        struct zl10353_state *state = fe->demodulator_priv;
-       u32 adc_clock = 45056;  /* 45.056 MHz */
-       int if2 = 36167;        /* 36.167 MHz */
+       u32 adc_clock = 450560; /* 45.056  MHz */
+       int if2 = 361667;       /* 36.1667 MHz */
        int ife;
        u64 value;
 
@@ -170,7 +173,7 @@ static void zl10353_calc_input_freq(struct dvb_frontend *fe,
                if (ife > adc_clock / 2)
                        ife = adc_clock - ife;
        }
-       value = 65536ULL * ife + adc_clock / 2;
+       value = (u64)65536 * ife + adc_clock / 2;
        do_div(value, adc_clock);
        *input_freq = -value;
 
diff --git a/drivers/media/dvb/frontends/zl10353.h 
b/drivers/media/dvb/frontends/zl10353.h
index 2660cec..fc734c2 100644
--- a/drivers/media/dvb/frontends/zl10353.h
+++ b/drivers/media/dvb/frontends/zl10353.h
@@ -29,9 +29,9 @@ struct zl10353_config
        /* demodulator's I2C address */
        u8 demod_address;
 
-       /* frequencies in kHz */
-       int adc_clock;  /* default: 45056 */
-       int if2;        /* default: 36167 */
+       /* frequencies in units of 0.1kHz */
+       int adc_clock;  /* default: 450560 (45.056  MHz) */
+       int if2;        /* default: 361667 (36.1667 MHz) */
 
        /* set if no pll is connected to the secondary i2c bus */
        int no_tuner;
@@ -50,6 +50,6 @@ static inline struct dvb_frontend* zl10353_attach(const 
struct zl10353_config *c
        printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
        return NULL;
 }
-#endif // CONFIG_DVB_ZL10353
+#endif /* CONFIG_DVB_ZL10353 */
 
 #endif /* ZL10353_H */
-
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