Re: [PATCH v4 7/8] iio: light: ROHM BU27034 Ambient Light Sensor

From: Matti Vaittinen
Date: Fri Mar 17 2023 - 10:48:51 EST


On 3/17/23 16:44, Matti Vaittinen wrote:
ROHM BU27034 is an ambient light sensor with 3 channels and 3 photo diodes
capable of detecting a very wide range of illuminance. Typical application
is adjusting LCD and backlight power of TVs and mobile phones.

Add initial support for the ROHM BU27034 ambient light sensor.

NOTE:
- Driver exposes 4 channels. One IIO_LIGHT channel providing the
calculated lux values based on measured data from diodes #0 and
#1. In addition, 3 IIO_INTENSITY channels are emitting the raw
register data from all diodes for more intense user-space
computations.
- Sensor has GAIN values that can be adjusted from 1x to 4096x.
- Sensor has adjustible measurement times of 5, 55, 100, 200 and
400 mS. Driver does not support 5 mS which has special
limitations.
- Driver exposes standard 'scale' adjustment which is
implemented by:
1) Trying to adjust only the GAIN
2) If GAIN adjustment alone can't provide requested
scale, adjusting both the time and the gain is
attempted.
- Driver exposes writable INT_TIME property that can be used
for adjusting the measurement time. Time adjustment will also
cause the driver to try to adjust the GAIN so that the
overall scale is kept as close to the original as possible.

Signed-off-by: Matti Vaittinen <mazziesaccount@xxxxxxxxx>

---
Changes
v3 => v4:
- use min_t() for division by zero check
- adapt to new GTS helper header location
- calculate luxes not milli luxes
- drop scale for PROCESSED channel
- comment improvements
- do not allow changing gain (scale) for channel 2.
- 'tie' channel 2 scale to channel 0 scale
This is because channel 0 and channel 2 GAIN settings share part of
the bits in the register. This means that setting one will also
impact the other. The v3 of the patches attempted to work-around
this by only disallowing the channel 2 gain setting to set the bits
which were shared with channel 0 gain. This does not work because
setting channel 0 gain (which was allowed to set also the shared
bits) could result unsupported bit combinations for channel 2 gain.
Thus it is safest to always set also the channel 2 gain to same
value as channel 0 gain.
- Use the correct integration time (55 mS) in the gain table as the
calcuations can be done based on the time multiplier.
- styling


And right after sending out this version I realized I forgot to run spell-checker for the comments. I will do that for v5 - please bear with me.

Yours,
-- Matti

--
Matti Vaittinen
Linux kernel developer at ROHM Semiconductors
Oulu Finland

~~ When things go utterly wrong vim users can always type :help! ~~