From: Andy Shevchenko <andriy.shevchenko@intel.com>
To: Aldo Conte <aldocontelk@gmail.com>
Cc: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com,
andy@kernel.org, shuah@kernel.org, linux-iio@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-kernel-mentees@lists.linux.dev
Subject: Re: [PATCH v2 4/5] iio: light: tcs3472: implement wait time and sampling frequency
Date: Wed, 13 May 2026 14:17:34 +0300 [thread overview]
Message-ID: <agRdzneWb2RIidIp@ashevche-desk.local> (raw)
In-Reply-To: <20260512223215.25596-5-aldocontelk@gmail.com>
On Wed, May 13, 2026 at 12:32:14AM +0200, Aldo Conte wrote:
> The TCS3472 has a wait state controlled by the WEN bit in the ENABLE
> register and the WAIT register, with an additional WLONG bit in CONFIG
> that if set multiplies the wait step by 12. The driver previously
> defined TCS3472_WTIME but never used it leaving the TODO comment on
> the top of the source file.
>
> Implement control of the wait time through IIO_CHAN_INFO_SAMP_FREQ:
>
> - Reading sampling_frequency returns the chip's current cycle time,
> computed as the sum of ATIME, the fixed RGBC initialization time
> and the wait time (which depends on WEN and WLONG).
>
> - Writing sampling_frequency programs WTIME so that the resulting
> cycle period approximates the requested frequency. If the
> requested frequency cannot be reached with any
> non-zero wait time, WEN is disabled and the chip runs
> back-to-back conversions at the maximum rate allowed by ATIME.
> If the requested period exceeds the maximum WTIME range, WLONG
> is enabled to extend the wait step from 2.4 ms to 28.8 ms.
>
> - The user's last requested frequency is stored in the driver's
> private data so that subsequent changes to integration_time
> recompute WTIME and preserve the requested sampling rate as
> closely as possible.
>
> Add TCS3472_ENABLE_WEN, TCS3472_ENABLE_RUN and TCS3472_CONFIG_WLONG
> bit definitions. TCS3472_ENABLE_RUN bundles the bits
> (AEN | PON | WEN) that are simultaneously set when the chip is in
> running state and cleared during powerdown, and is used by
> tcs3472_probe(), tcs3472_powerdown() and tcs3472_resume().
>
> Remove the "TODO: wait time" comment at the top of the file.
> Suggested-by: Andy Shevchenko <andy@kernel.org>
Inappropriate tag.
You must not put tags on your own, if in doubt, ask first!
...
> +#define TCS3472_ENABLE_RUN (TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON | \
> + TCS3472_ENABLE_WEN)
Better style is
#define TCS3472_ENABLE_RUN \
(TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON | TCS3472_ENABLE_WEN)
...
> + cycle_us = div_u64((u64)PSEC_PER_SEC,
> + (u64)val * USEC_PER_SEC + val2);
First of all, it's one line. Second, the divisor for this function is 32-bit.
And at last the castings are not needed. I think I already told these...
...
> + wtime = 256 - DIV_ROUND_CLOSEST_ULL(wait_us, 2400);
> + if (wtime < 0) {
> + wlong = true;
> + wtime = 256 - DIV_ROUND_CLOSEST_ULL(wait_us, 28800);
> + }
Why 64-bit divisions? Do you expect the wait_us be outside INT_MIN/INT_MAX range?
This will need a comment and/or dropping the 64-bit arithmetics.
> + wtime = clamp(wtime, 0, 255);
...
> + ret = i2c_smbus_write_byte_data(data->client, TCS3472_WTIME, wtime);
> + if (ret < 0)
What's the meaning of positive returned values? I think this function never
does that. If I'm right, drop ' < 0' parts in all similar cases.
> + return ret;
...
> + *val = USEC_PER_SEC / cycle_us;
> + *val2 = div_u64((u64)(USEC_PER_SEC % cycle_us) * USEC_PER_SEC,
> + cycle_us);
Is this even correct? We take modulo of cycle_us to get under the MICRO range,
then multiply to MICRO (seconds) and divide by full cycle_us. I'm lost here.
...
> + cycle_us = tcs3472_cycle_time_us(data);
> + data->target_freq_hz = USEC_PER_SEC / cycle_us;
> + data->target_freq_uhz = div_u64((u64)(USEC_PER_SEC % cycle_us) *
> + USEC_PER_SEC, cycle_us);
Okay, this might help with the above... Can you deduplicate this division to
a helper with a comment that explains the calculations behind?
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2026-05-13 11:17 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-12 22:32 [PATCH v2 0/5] devm conversion, wait time, locking cleanup Aldo Conte
2026-05-12 22:32 ` [PATCH v2 1/5] iio: light: tcs3472: sort headers alphabetically Aldo Conte
2026-05-13 8:15 ` Joshua Crofts
2026-05-12 22:32 ` [PATCH v2 2/5] iio: light: tcs3472: convert remaining locking to guard(mutex) Aldo Conte
2026-05-13 7:47 ` Joshua Crofts
2026-05-13 11:00 ` Andy Shevchenko
2026-05-13 10:58 ` Andy Shevchenko
2026-05-15 15:18 ` Jonathan Cameron
2026-05-12 22:32 ` [PATCH v2 3/5] iio: light: tcs3472: use devm for resource management Aldo Conte
2026-05-13 8:07 ` Joshua Crofts
2026-05-13 11:02 ` Andy Shevchenko
2026-05-13 20:29 ` Aldo Conte
2026-05-15 15:21 ` Jonathan Cameron
2026-05-15 17:19 ` Jonathan Cameron
2026-05-12 22:32 ` [PATCH v2 4/5] iio: light: tcs3472: implement wait time and sampling frequency Aldo Conte
2026-05-13 11:17 ` Andy Shevchenko [this message]
2026-05-15 15:57 ` Aldo Conte
2026-05-15 18:01 ` Jonathan Cameron
2026-05-12 22:32 ` [PATCH v2 5/5] iio: light: tcs3472: move standalone return to default case Aldo Conte
2026-05-13 8:16 ` Joshua Crofts
2026-05-13 11:23 ` Andy Shevchenko
2026-05-13 16:12 ` Aldo Conte
2026-05-13 17:58 ` Andy Shevchenko
2026-05-15 18:05 ` Jonathan Cameron
2026-05-15 15:11 ` [PATCH v2 0/5] devm conversion, wait time, locking cleanup Jonathan Cameron
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=agRdzneWb2RIidIp@ashevche-desk.local \
--to=andriy.shevchenko@intel.com \
--cc=aldocontelk@gmail.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel-mentees@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=shuah@kernel.org \
/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.