Thread (28 messages) read the whole thread 28 messages, 7 authors, 2026-01-22

Re: [PATCH v4 3/7] iio: frequency: adf41513: driver implementation

From: Rodrigo Alencar <hidden>
Date: 2026-01-20 10:43:35
Also in: linux-doc, linux-iio, lkml

On 26/01/19 07:07PM, Andy Shevchenko wrote:
On Mon, Jan 19, 2026 at 04:37:09PM +0000, Rodrigo Alencar wrote:
quoted
On 26/01/19 03:42PM, Andy Shevchenko wrote:
quoted
On Mon, Jan 19, 2026 at 11:21:59AM +0000, Rodrigo Alencar wrote:
quoted
On 26/01/19 09:31AM, Andy Shevchenko wrote:
quoted
On Fri, Jan 16, 2026 at 02:32:22PM +0000, Rodrigo Alencar via B4 Relay wrote:
...
quoted
quoted
quoted
quoted
quoted
+static int adf41513_parse_uhz(const char *str, u64 *freq_uhz)
+{
+	u64 uhz = 0;
+	int f_count = ADF41513_HZ_DECIMAL_PRECISION;
+	bool frac_part = false;
+
+	if (str[0] == '+')
+		str++;
+
+	while (*str && f_count > 0) {
+		if ('0' <= *str && *str <= '9') {
+			uhz = uhz * 10 + *str - '0';
+			if (frac_part)
+				f_count--;
+		} else if (*str == '\n') {
+			if (*(str + 1) == '\0')
+				break;
+			return -EINVAL;
quoted
+		} else if (*str == '.' && !frac_part) {
This can be found by strchr() / strrchr() (depending on the expectations of
the input).
quoted
+			frac_part = true;
+		} else {
+			return -EINVAL;
+		}
+		str++;
+	}
With the above the rest becomes just a couple of simple_strtoull() calls with
a couple of int_pow(10) calls (and some validation on top).
quoted
+	for (; f_count > 0; f_count--)
+		uhz *= 10;
This is int_pow(10).
quoted
+	*freq_uhz = uhz;
+
+	return 0;
+}
The current implementation is kind of a stripped version of
__iio_str_to_fixpoint(). Would you prefer something like this, then?:
Do they have most of the parts in common? If so, why can't we use
__iio_str_to_fixpoint() directly? Or why can't we slightly refactor
that to give us the results we need here?
__iio_str_to_fixpoint() only parses "int" chunks, adf41513_parse_uhz
was modified to accomodate the u64 parsing removing unnecessary stuff.
But why? The fractional part most likely will be kept int (it's up to 10⁻⁹).
The integer can be bigger than 10⁹?
Correct, integer part of the frequency value goes up to 26.5 GHz
(uint_max is approx 4.3 GHz). Also, with the dual modulus, the PLL can
achieve micro Hz resolution.

Kind regards,

Rodrigo Alencar
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help