On Mon, Aug 10, 2026 at 01:04:23PM +0200, Jorijn van der Graaf wrote:
> The Sensortek STK36C61 is a 3-in-1 ambient light / proximity / RGB
> colour sensor (chip ID 0x95) found in the Fairphone 6. Its register
> interface is compatible with the feature set this driver uses: the
> STATE/FLAG bit layout, the data and threshold registers and the gain
> and integration-time fields, verified on that device (the ALS and
> proximity readings scale with their gain and integration-time fields,
> thresholds written through the event interface read back from the
> chip, and the FLAG near/far bit crosses with them). Add its chip ID to
> the known-ID list and the device table entries.
> 
> Whenever the ALS engine runs, the chip also measures four colour
> channels, laid out directly after the ALS data as 16-bit big-endian
> values in R (0x15), G (0x17), B (0x19), C (0x1B) order; the R, G and B
> assignments were each confirmed by the matching channel dominating
> under red, green and blue illumination, and clear by its broadband
> response. The ALS data register tracks the green channel exactly.
> There is no public datasheet and therefore no counts-to-physical
> mapping for the colour channels, so they are exposed as raw-only
> intensity channels; the gain field the scale attribute controls does
> not govern clear either.

...

> -     if (chan->type != IIO_LIGHT && chan->type != IIO_PROXIMITY)
> +     if (chan->type != IIO_LIGHT && chan->type != IIO_PROXIMITY &&
> +         chan->type != IIO_INTENSITY)
>               return -EINVAL;

Is this now a duplicating a bit with the below choices?

...

>       switch (mask) {

>       case IIO_CHAN_INFO_INT_TIME:
>               if (chan->type == IIO_LIGHT)
>                       ret = regmap_field_read(data->reg_als_it, &index);
> -             else
> +             else if (chan->type == IIO_PROXIMITY)
>                       ret = regmap_field_read(data->reg_ps_it, &index);
> +             else
> +                     return -EINVAL;

If you want to keep a single point of return, use

                        ret = -EINVAL;

here and below in _read_raw().

>               if (ret < 0)
>                       return ret;

-- 
With Best Regards,
Andy Shevchenko



Reply via email to