From: Janani Sunil <jananisunil.dev@gmail.com>
To: Andy Shevchenko <andriy.shevchenko@intel.com>,
Janani Sunil <janani.sunil@analog.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>,
"Michael Hennerich" <Michael.Hennerich@analog.com>,
"Jonathan Cameron" <jic23@kernel.org>,
"David Lechner" <dlechner@baylibre.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Olivier Moysan" <olivier.moysan@foss.st.com>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
"Linus Walleij" <linusw@kernel.org>,
"Bartosz Golaszewski" <brgl@kernel.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Shuah Khan" <skhan@linuxfoundation.org>,
"Michael Walle" <mwalle@kernel.org>,
linux@analog.com, linux-iio@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org,
"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>
Subject: Re: [PATCH v4 08/14] iio: adc: ad7768: Add per-channel conversion delay
Date: Tue, 25 Aug 2026 15:17:14 +0200 [thread overview]
Message-ID: <9e7edec5-578d-48e0-b253-e50cf848236e@gmail.com> (raw)
In-Reply-To: <aovua1sy4sm6RmSt@ashevche-desk.local>
On 8/24/26 09:10, Andy Shevchenko wrote:
> On Fri, Aug 21, 2026 at 04:07:01PM +0200, Janani Sunil wrote:
>> Expose the per-channel synchronization phase offset through the IIO
>> conversion-delay attribute.
>>
>> Derive the delay resolution from MCLK, power mode and decimation rate.
>> Validate the requested delay and program the corresponding phase
>> register when applying the active channel configuration.
> ...
>
>> +static int ad7768_get_convdelay_params(struct ad7768_state *st, unsigned int ch,
>> + struct ad7768_convdelay_params *params)
>> +{
>> + struct ad7768_freq_config f_cfg;
>> + unsigned int dec_rate;
>> + unsigned int mclk_div;
>> + unsigned int mult;
>> + u64 mclk;
>> + int ret;
>> +
>> + ret = ad7768_get_freq_cfg(st, st->ch_freq[ch], &f_cfg);
>> + if (ret)
>> + return ret;
>> +
>> + dec_rate = ad7768_dec_rate[f_cfg.dec_rate];
>> + switch (dec_rate) {
>> + case 32:
>> + params->shift = 3;
>> + params->max_raw = 31;
>> + mult = 1;
>> + break;
>> + case 64:
>> + params->shift = 2;
>> + params->max_raw = 63;
>> + mult = 1;
>> + break;
>> + case 128:
>> + params->shift = 1;
>> + params->max_raw = 127;
>> + mult = 1;
>> + break;
>> + case 256:
>> + params->shift = 0;
>> + params->max_raw = 255;
>> + mult = 1;
>> + break;
>> + case 512:
>> + params->shift = 0;
>> + params->max_raw = 255;
>> + mult = 2;
>> + break;
>> + case 1024:
>> + params->shift = 0;
>> + params->max_raw = 255;
>> + mult = 4;
>> + break;
>> + default:
>> + return -EINVAL;
>> + }
> So, this is just a bit twiddling of the dec_rate.
>
> Can be written like
>
> /* Optional, perhaps shouldn't appear */
> if (!dec_rate)
> return -EINVAL;
>
> /* Same? What does table allow to have? */
> if (!is_power_of_two(dec_rate))
> return -EINVAL;
>
> mult = ilog2(dec_rate);
> if (mult > 10) {
> return -EINVAL;
> } else if (mult > 8) {
> params->shift = 0;
> params->max_raw = 255;
> mult = BIT(mult - 8);
> } else if (mult > 5) {
> params->shift = 8 - mult;
> params->max_raw = dec_rate - 1;
> mult = 1;
> } else {
> return -EINVAL;
> }
>
> TBH, I don't know which looks easier to read. It all depends on what datasheet
> says about these parameters and multiplier and what the table allows to have.
>
I kept the explicit switch case because it the device supports only the 6 discrete decimation ratios listed in the table 32.
The switch directly mirrors the phase resolution, number of steps and register bit mappings from that table, which I find easier to verify against the datasheet.
The arithmetic version is more compact, but the proposed conditions would reject the valid x32 case because ilog2(32) is 5. A corrected arithmetic version would be functionally equivalent, but I do not think it improves the readability here.
Regards,
Jan
next prev parent reply other threads:[~2026-08-25 13:17 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-21 14:06 [PATCH v4 00/14] iio: adc: Add AD7768/AD7768-4 ADC driver support Janani Sunil
2026-08-21 14:06 ` [PATCH v4 01/14] iio: adc: adi-axi-adc: Initialize state mutex Janani Sunil
2026-08-23 18:52 ` Jonathan Cameron
2026-08-23 19:05 ` Jonathan Cameron
2026-08-21 14:06 ` [PATCH v4 02/14] dt-bindings: iio: adc: Add AD7768 Janani Sunil
2026-08-21 15:57 ` David Lechner
2026-08-23 1:45 ` Jonathan Cameron
2026-08-21 14:06 ` [PATCH v4 03/14] iio: backend: Add support for CRC Janani Sunil
2026-08-21 16:02 ` David Lechner
2026-08-21 14:06 ` [PATCH v4 04/14] iio: adc: adi-axi-adc: " Janani Sunil
2026-08-21 16:03 ` David Lechner
2026-08-21 14:06 ` [PATCH v4 05/14] iio: adc: Add AD7768 and AD7768-4 core support Janani Sunil
2026-08-22 17:30 ` David Lechner
2026-08-23 8:35 ` Andy Shevchenko
2026-08-25 10:43 ` Janani Sunil
2026-08-23 19:16 ` Jonathan Cameron
2026-08-21 14:06 ` [PATCH v4 06/14] iio: adc: ad7768: Add configurable sampling modes Janani Sunil
2026-08-23 19:25 ` Jonathan Cameron
2026-08-24 6:43 ` Andy Shevchenko
2026-08-21 14:07 ` [PATCH v4 07/14] iio: adc: ad7768: Add calibration controls Janani Sunil
2026-08-24 6:50 ` Andy Shevchenko
2026-08-21 14:07 ` [PATCH v4 08/14] iio: adc: ad7768: Add per-channel conversion delay Janani Sunil
2026-08-24 7:10 ` Andy Shevchenko
2026-08-25 13:17 ` Janani Sunil [this message]
2026-08-21 14:07 ` [PATCH v4 09/14] iio: adc: ad7768: Add VCM regulator support Janani Sunil
2026-08-24 7:13 ` Andy Shevchenko
2026-08-21 14:07 ` [PATCH v4 10/14] iio: adc: ad7768: Register GPIO auxiliary device Janani Sunil
2026-08-21 14:07 ` [PATCH v4 11/14] gpio: regmap: Use regmap_test_bits() for single bit reads Janani Sunil
2026-08-24 7:47 ` Andy Shevchenko
2026-08-21 14:07 ` [PATCH v4 12/14] gpio: regmap: Add optional runtime PM support Janani Sunil
2026-08-24 8:05 ` Andy Shevchenko
2026-08-25 13:50 ` Janani Sunil
2026-08-21 14:07 ` [PATCH v4 13/14] gpio: ad7768: Add AD7768 GPIO auxiliary driver Janani Sunil
2026-08-23 19:39 ` Jonathan Cameron
2026-08-24 8:13 ` Andy Shevchenko
2026-08-25 19:37 ` Linus Walleij
2026-08-24 8:10 ` Andy Shevchenko
2026-08-25 19:40 ` Linus Walleij
2026-08-21 14:07 ` [PATCH v4 14/14] Documentation: iio: Add AD7768 Documentation Janani Sunil
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=9e7edec5-578d-48e0-b253-e50cf848236e@gmail.com \
--to=jananisunil.dev@gmail.com \
--cc=Michael.Hennerich@analog.com \
--cc=andriy.shevchenko@intel.com \
--cc=andy@kernel.org \
--cc=brgl@kernel.org \
--cc=conor+dt@kernel.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=janani.sunil@analog.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@analog.com \
--cc=mwalle@kernel.org \
--cc=nuno.sa@analog.com \
--cc=olivier.moysan@foss.st.com \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=u.kleine-koenig@baylibre.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.