From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Matti Vaittinen <mazziesaccount@gmail.com>
Cc: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>,
Masahiro Yamada <masahiroy@kernel.org>,
Randy Dunlap <rdunlap@infradead.org>,
Shreeya Patel <shreeya.patel@collabora.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Jonathan Cameron <jic23@kernel.org>,
devicetree@vger.kernel.org, Zhigang Shi <Zhigang.Shi@liteon.com>,
Lars-Peter Clausen <lars@metafoo.de>,
Paul Gazzillo <paul@pgazz.com>, Rob Herring <robh+dt@kernel.org>,
Dmitry Osipenko <dmitry.osipenko@collabora.com>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
Liam Beguin <liambeguin@gmail.com>
Subject: Re: [PATCH v3 0/6] Support ROHM BU27034 ALS sensor
Date: Mon, 6 Mar 2023 14:25:18 +0200 [thread overview]
Message-ID: <ZAXbrtXUmWXWDby1@smile.fi.intel.com> (raw)
In-Reply-To: <cover.1678093787.git.mazziesaccount@gmail.com>
On Mon, Mar 06, 2023 at 11:15:10AM +0200, Matti Vaittinen wrote:
> Support ROHM BU27034 ALS sensor
>
> This series adds support for ROHM BU27034 Ambient Light Sensor.
>
> The BU27034 has configurable gain and measurement (integration) time
> settings. Both of these have inversely proportional relation to the
> sensor's intensity channel scale.
>
> Many users only set the scale, which means that many drivers attempt to
> 'guess' the best gain+time combination to meet the scale. Usually this
> is the biggest integration time which allows setting the requested
> scale. Typically, increasing the integration time has better accuracy
> than increasing the gain, which often amplifies the noise as well as the
> real signal.
>
> However, there may be cases where more responsive sensors are needed.
> So, in some cases the longest integration times may not be what the user
> prefers. The driver has no way of knowing this.
>
> Hence, the approach taken by this series is to allow user to set both
> the scale and the integration time with following logic:
>
> 1. When scale is set, the existing integration time is tried to be
> maintained as a first priority.
> 1a) If the requested scale can't be met by current time, then also
> other time + gain combinations are searched. If scale can be met
> by some other integration time, then the new time may be applied.
> If the time setting is common for all channels, then also other
> channels must be able to maintain their scale with this new time
> (by changing their gain). The new times are scanned in the order
> of preference (typically the longest times first).
> 1b) If the requested scale can be met using current time, then only
> the gain for the channel is changed.
>
> 2. When the integration time change - scale is tried to be maintained.
> When integration time change is requested also gain for all impacted
> channels is adjusted so that the scale is not changed, or is chaned
> as little as possible. This is different from the RFCv1 where the
> request was rejected if suitable gain couldn't be found for some
> channel(s).
>
> This logic is simple. When total gain (either caused by time or hw-gain)
> is doubled, the scale gets halved. Also, the supported times are given a
> 'multiplier' value which tells how much they increase the total gain.
>
> However, when I wrote this logic in bu27034 driver, I made quite a few
> errors on the way - and driver got pretty big. As I am writing drivers
> for two other sensors (RGB C/IR + flicker BU27010 and RGB C/IR BU27008)
> with similar gain-time-scale logic I thought that adding common helpers
> for these computations might be wise. I hope this way all the bugs will
> be concentrated in one place and not in every individual driver ;)
>
> Hence, this series also intriduces IIO gain-time-scale helpers
> (abbreviated as gts-helpers) + a couple of KUnit tests for the most
> hairy parts.
>
> I can't help thinking that there should've been simpler way of computing
> the gain-time-scale conversions. Also, pretty good speed improvements
> might be available if some of the do_div()s could be replaced by >>.
> This, however, is not a priority for my light-sensor use-case where
> speed demands are not that big.
>
> Finally, these added helpers do provide some value also for drivers
> which only:
> a) allow gain change
> or
> b) allow changing both the time and gain but so that the time-change is
> not reflected in register values.
>
> For a) we provide the gain - selector (register value) table format +
> selector to gain look-ups, gain <-> scale conversions and the available
> scales helpers.
>
> For latter case we also provide the time-tables, and actually all the
> APIs should be usable by setting the time multiplier to 1. (not testeted
> thoroughly though).
A few comments can still be applied here.
Can you comment on the discussion against the previous version?
--
With Best Regards,
Andy Shevchenko
prev parent reply other threads:[~2023-03-06 12:25 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-06 9:15 [PATCH v3 0/6] Support ROHM BU27034 ALS sensor Matti Vaittinen
2023-03-06 9:15 ` [PATCH v3 1/6] dt-bindings: iio: light: Support ROHM BU27034 Matti Vaittinen
2023-03-06 9:17 ` [PATCH v3 2/6] iio: light: Add gain-time-scale helpers Matti Vaittinen
2023-03-06 12:52 ` Andy Shevchenko
2023-03-12 16:51 ` Jonathan Cameron
2023-03-13 12:56 ` Matti Vaittinen
2023-03-13 13:14 ` Andy Shevchenko
2023-03-14 6:19 ` Vaittinen, Matti
2023-03-14 11:12 ` Andy Shevchenko
2023-03-18 17:17 ` Jonathan Cameron
2023-03-19 14:28 ` Matti Vaittinen
2023-03-18 17:24 ` Jonathan Cameron
2023-03-13 12:47 ` Matti Vaittinen
2023-03-13 13:25 ` Andy Shevchenko
2023-03-13 13:59 ` Matti Vaittinen
2023-03-13 14:17 ` Andy Shevchenko
2023-03-13 14:25 ` Matti Vaittinen
2023-03-18 17:29 ` Jonathan Cameron
2023-03-12 17:06 ` Jonathan Cameron
2023-03-12 17:08 ` Jonathan Cameron
2023-03-13 12:40 ` Andy Shevchenko
2023-03-13 13:11 ` Matti Vaittinen
2023-03-13 13:29 ` Andy Shevchenko
2023-03-13 13:59 ` Matti Vaittinen
2023-03-15 10:51 ` Matti Vaittinen
2023-03-15 14:12 ` Andy Shevchenko
2023-03-15 14:14 ` Andy Shevchenko
2023-03-17 10:19 ` Maxime Ripard
2023-03-17 10:57 ` Vaittinen, Matti
2023-03-13 12:52 ` Matti Vaittinen
2023-03-06 9:17 ` [PATCH v3 3/6] iio: test: test " Matti Vaittinen
2023-03-06 9:19 ` [PATCH v3 4/6] MAINTAINERS: Add IIO " Matti Vaittinen
2023-03-06 9:23 ` [PATCH v3 5/6] iio: light: ROHM BU27034 Ambient Light Sensor Matti Vaittinen
2023-03-12 17:39 ` Jonathan Cameron
2023-03-13 13:34 ` Matti Vaittinen
2023-03-06 9:27 ` [PATCH v3 6/6] MAINTAINERS: Add ROHM BU27034 Matti Vaittinen
2023-03-06 12:25 ` Andy Shevchenko [this message]
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=ZAXbrtXUmWXWDby1@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=Zhigang.Shi@liteon.com \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.osipenko@collabora.com \
--cc=jic23@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=lars@metafoo.de \
--cc=liambeguin@gmail.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masahiroy@kernel.org \
--cc=matti.vaittinen@fi.rohmeurope.com \
--cc=mazziesaccount@gmail.com \
--cc=paul@pgazz.com \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=shreeya.patel@collabora.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox