Message ID | 20190517133711.21266-1-alexandru.ardelean@analog.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [RESEND] iio: ad9523-1: Improve reported VCO frequency accuracy | expand |
On Fri, 17 May 2019 16:37:11 +0300 Alexandru Ardelean <alexandru.ardelean@analog.com> wrote: > From: Lars-Peter Clausen <lars@metafoo.de> > > To improve the accuracy of the reported VCO frequency perform all > multiplications before divisions. This reduces rounding errors and makes > sure the reported rates are accurate down to the last digit. > > Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> > Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> Not sure how I missed this one the first time around! Thanks for the resend and applied to the togreg branch of iio.git. Thanks, Jonathan > --- > drivers/iio/frequency/ad9523.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/iio/frequency/ad9523.c b/drivers/iio/frequency/ad9523.c > index 246e38d76eff..541cb5975dd9 100644 > --- a/drivers/iio/frequency/ad9523.c > +++ b/drivers/iio/frequency/ad9523.c > @@ -1140,9 +1140,11 @@ static int ad9523_setup(struct iio_dev *indio_dev) > if (ret < 0) > return ret; > > - st->vco_freq = (pdata->vcxo_freq * (pdata->pll2_freq_doubler_en ? 2 : 1) > - / pdata->pll2_r2_div) * AD9523_PLL2_FB_NDIV(pdata-> > - pll2_ndiv_a_cnt, pdata->pll2_ndiv_b_cnt); > + st->vco_freq = div_u64((unsigned long long)pdata->vcxo_freq * > + (pdata->pll2_freq_doubler_en ? 2 : 1) * > + AD9523_PLL2_FB_NDIV(pdata->pll2_ndiv_a_cnt, > + pdata->pll2_ndiv_b_cnt), > + pdata->pll2_r2_div); > > ret = ad9523_write(indio_dev, AD9523_PLL2_VCO_CTRL, > AD9523_PLL2_VCO_CALIBRATE);
diff --git a/drivers/iio/frequency/ad9523.c b/drivers/iio/frequency/ad9523.c index 246e38d76eff..541cb5975dd9 100644 --- a/drivers/iio/frequency/ad9523.c +++ b/drivers/iio/frequency/ad9523.c @@ -1140,9 +1140,11 @@ static int ad9523_setup(struct iio_dev *indio_dev) if (ret < 0) return ret; - st->vco_freq = (pdata->vcxo_freq * (pdata->pll2_freq_doubler_en ? 2 : 1) - / pdata->pll2_r2_div) * AD9523_PLL2_FB_NDIV(pdata-> - pll2_ndiv_a_cnt, pdata->pll2_ndiv_b_cnt); + st->vco_freq = div_u64((unsigned long long)pdata->vcxo_freq * + (pdata->pll2_freq_doubler_en ? 2 : 1) * + AD9523_PLL2_FB_NDIV(pdata->pll2_ndiv_a_cnt, + pdata->pll2_ndiv_b_cnt), + pdata->pll2_r2_div); ret = ad9523_write(indio_dev, AD9523_PLL2_VCO_CTRL, AD9523_PLL2_VCO_CALIBRATE);