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 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.