From: Neel Bullywon <neelb2403@gmail.com>
To: lars@metafoo.de, Michael.Hennerich@analog.com, jic23@kernel.org
Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
Neel Bullywon <neelb2403@gmail.com>
Subject: [PATCH] iio: frequency: adf4350: replace loop with order_base_2()
Date: Tue, 10 Mar 2026 22:01:15 -0400 [thread overview]
Message-ID: <20260311020115.56321-1-neelb2403@gmail.com> (raw)
Address the TODO in adf4350_set_freq() by replacing the iterative
power-of-2 shift loop with the standard order_base_2() macro.
By utilizing DIV_ROUND_UP_ULL(), we
can calculate the required RF divider selection in a single step.
This ensures freq is properly shifted to meet or exceed the minimum
VCO frequency.
Signed-off-by: Neel Bullywon <neelb2403@gmail.com>
---
drivers/iio/frequency/adf4350.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/drivers/iio/frequency/adf4350.c b/drivers/iio/frequency/adf4350.c
index ed1741165f55..e07be6d5e67e 100644
--- a/drivers/iio/frequency/adf4350.c
+++ b/drivers/iio/frequency/adf4350.c
@@ -17,6 +17,8 @@
#include <linux/err.h>
#include <linux/gcd.h>
#include <linux/gpio/consumer.h>
+#include <linux/log2.h>
+#include <linux/math64.h>
#include <asm/div64.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
@@ -149,18 +151,12 @@ static int adf4350_set_freq(struct adf4350_state *st, unsigned long long freq)
if (freq > ADF4350_MAX_OUT_FREQ || freq < st->min_out_freq)
return -EINVAL;
- st->r4_rf_div_sel = 0;
-
/*
- * !\TODO: The below computation is making sure we get a power of 2
- * shift (st->r4_rf_div_sel) so that freq becomes higher or equal to
- * ADF4350_MIN_VCO_FREQ. This might be simplified with fls()/fls_long()
- * and friends.
+ * Calculate the required RF divider selection (power of 2 shift)
+ * to ensure the VCO frequency is >= ADF4350_MIN_VCO_FREQ.
*/
- while (freq < ADF4350_MIN_VCO_FREQ) {
- freq <<= 1;
- st->r4_rf_div_sel++;
- }
+ st->r4_rf_div_sel = order_base_2(DIV_ROUND_UP_ULL(ADF4350_MIN_VCO_FREQ, freq));
+ freq <<= st->r4_rf_div_sel;
if (freq > ADF4350_MAX_FREQ_45_PRESC) {
prescaler = ADF4350_REG1_PRESCALER;
--
2.44.0
next reply other threads:[~2026-03-11 2:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-11 2:01 Neel Bullywon [this message]
2026-03-11 12:07 ` [PATCH] iio: frequency: adf4350: replace loop with order_base_2() Andy Shevchenko
2026-03-14 17:20 ` [PATCH v2] iio: frequency: adf4350: replace loop with fls_long() Neel Bullywon
2026-03-15 13:00 ` Jonathan Cameron
2026-03-16 12:40 ` Andy Shevchenko
2026-03-22 11:51 ` Jonathan Cameron
2026-03-16 13:51 ` David Laight
2026-03-16 14:07 ` Andy Shevchenko
2026-03-23 11:08 ` Nuno Sá
2026-03-23 13:31 ` David Laight
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260311020115.56321-1-neelb2403@gmail.com \
--to=neelb2403@gmail.com \
--cc=Michael.Hennerich@analog.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.