From: Jonathan Cameron <jic23@kernel.org>
To: Aldo Conte <aldocontelk@gmail.com>
Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org,
shuah@kernel.org, joshua.crofts1@gmail.com,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kernel-mentees@lists.linux.dev
Subject: Re: [PATCH v3 8/8] iio: tcs3472: implement wait time and sampling frequency
Date: Thu, 4 Jun 2026 11:42:50 +0100 [thread overview]
Message-ID: <20260604114250.3fb62d93@jic23-huawei> (raw)
In-Reply-To: <d82b27d8-4e0e-4749-bea7-a09f43554fb2@gmail.com>
On Thu, 4 Jun 2026 10:10:02 +0200
Aldo Conte <aldocontelk@gmail.com> wrote:
> On 22/05/26 14:34, Aldo Conte wrote:
> > @@ -196,15 +359,29 @@ static int tcs3472_write_raw(struct iio_dev *indio_dev,
> > if (val != 0)
> > return -EINVAL;
> > for (i = 0; i < 256; i++) {
> > - if (val2 == (256 - i) * 2400) {
> > - data->atime = i;
> > - return i2c_smbus_write_byte_data(
> > - data->client, TCS3472_ATIME,
> > - data->atime);
> > - }
> > -
> > + if (val2 != (256 - i) * 2400)
> > + continue;
> > +
> > + data->atime = i;
> > + ret = i2c_smbus_write_byte_data(data->client,
> > + TCS3472_ATIME,
> > + data->atime);
> > + if (ret)
> > + return ret;
>
> Hi Jonathan,
>
> Two questions on the INT_TIME case in tcs3472_write_raw() before
> I send v4.
>
> - The compute/write/commit pattern issue you raised elsewhere
> also applies here. I plan to swap the order: write first with i
>
> return i2c_smbus_write_byte_data( data->client, TCS3472_ATIME, i);
>
> then update data->atime only on success. OK?
Yes. That's conventional way to do it as ensures the cache reflects
the most likely state (fails that don't write are probably slightly
more likely than fails that do).
>
> - Sashiko flagged a race (
> https://sashiko.dev/#/patchset/20260522123420.45495-1-aldocontelk%40gmail.com ) :
> target_freq_hz/uhz are read without
> the lock and then passed to tcs3472_set_sampling_freq() which
> takes the lock internally. Two options:
>
> 1) Take the lock briefly in write_raw() to write ATIME, update
> data->atime, and snapshot target_freq_hz/uhz. Then release the
> lock and call tcs3472_set_sampling_freq() (which takes the lock
> again internally). Minimal change, but ATIME and WTIME updates
> are not atomic with each other.
>
> 2) Split tcs3472_set_sampling_freq() into a public wrapper that
> takes the lock and a __tcs3472_set_sampling_freq() helper with
> the lock already held. Then in write_raw() take the lock once,
> write ATIME, and call the helper. This keeps ATIME and WTIME
> updates atomic.
>
> In these cases, what is used to do?
2 is cleanest solution so do that.
> Thanks,
> Aldo
>
> > +
> > + /*
> > + * ATIME just changed, so the cycle time changed too.
> > + * Re-run the sampling frequency logic to recompute
> > + * WTIME and preserve the user's last requested
> > + * frequency.
> > + */
> > + return tcs3472_set_sampling_freq(data,
> > + data->target_freq_hz,
> > + data->target_freq_uhz);
> > }
> > return -EINVAL;
> > + case IIO_CHAN_INFO_SAMP_FREQ:
> > + return tcs3472_set_sampling_freq(data, val, val2);
> > default:
> > return -EINVAL;
> > }
>
>
next prev parent reply other threads:[~2026-06-04 10:42 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-22 12:34 [PATCH v3 0/8] iio: tcs3472: cleanups, devm conversion and wait time Aldo Conte
2026-05-22 12:34 ` [PATCH v3 1/8] iio: tcs3472: power down chip on probe failure Aldo Conte
2026-05-22 12:34 ` [PATCH v3 2/8] iio: tcs3472: sort headers alphabetically Aldo Conte
2026-05-22 12:34 ` [PATCH v3 3/8] iio: tcs3472: convert remaining locking to guard(mutex) Aldo Conte
2026-05-26 12:57 ` Jonathan Cameron
2026-05-22 12:34 ` [PATCH v3 4/8] iio: tcs3472: use ! instead of explicit NULL check Aldo Conte
2026-05-26 12:58 ` Jonathan Cameron
2026-06-04 8:31 ` Andy Shevchenko
2026-06-04 8:38 ` Joshua Crofts
2026-06-04 10:37 ` Jonathan Cameron
2026-05-22 12:34 ` [PATCH v3 5/8] iio: tcs3472: use devm for resource management Aldo Conte
2026-05-26 13:00 ` Jonathan Cameron
2026-05-22 12:34 ` [PATCH v3 6/8] iio: tcs3472: use local struct device * for remaining cases Aldo Conte
2026-05-26 13:04 ` Jonathan Cameron
2026-05-22 12:34 ` [PATCH v3 7/8] iio: tcs3472: move standalone return to default case Aldo Conte
2026-05-22 12:34 ` [PATCH v3 8/8] iio: tcs3472: implement wait time and sampling frequency Aldo Conte
2026-05-26 13:11 ` Jonathan Cameron
2026-05-26 15:10 ` Aldo Conte
2026-05-26 16:52 ` Jonathan Cameron
2026-06-04 8:10 ` Aldo Conte
2026-06-04 10:42 ` Jonathan Cameron [this message]
2026-06-04 9:23 ` Aldo Conte
2026-06-06 9:27 ` Aldo Conte
2026-06-06 14:09 ` Jonathan Cameron
2026-06-07 9:44 ` Aldo Conte
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=20260604114250.3fb62d93@jic23-huawei \
--to=jic23@kernel.org \
--cc=aldocontelk@gmail.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=joshua.crofts1@gmail.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox