2023-06-13 09:59:32

by Matti Vaittinen

[permalink] [raw]
Subject: [PATCH 0/3] ROHM BUxxx light sensor fixes

A couple of fixes to newly introduced light sensor drivers.

The patch 1/N "iio: light: bu27034: Fix scale format" should be applied
as a fix because the bu27034 is already merged upstream. Please note
that there are already a few fixes to bu27034 in fixes-togreg.

The patches 2/N and 3/N can be taken in as "new features" because the
bu27008 has not yet been merged upstream.

Please, let me know if you want me to split the series and rebase the
bu27034 fix on top of the fixes-togreg (or some other base).



Matti Vaittinen (3):
iio: light: bu27034: Fix scale format
iio: light: bu27008: Fix scale format
iio: light: bu27008: Fix intensity data type

drivers/iio/light/rohm-bu27008.c | 22 +++++++++++++++++++---
drivers/iio/light/rohm-bu27034.c | 22 +++++++++++++++++++---
2 files changed, 38 insertions(+), 6 deletions(-)


base-commit: 0cf9a77e80fa48e4392e408f8660e93c080cb78d
--
2.40.1


--
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND

~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =]


Attachments:
(No filename) (1.24 kB)
signature.asc (499.00 B)
Download all attachments

2023-06-13 09:59:37

by Matti Vaittinen

[permalink] [raw]
Subject: [PATCH 3/3] iio: light: bu27008: Fix intensity data type

The intensity data from bu27008 is unsigned. The type of the scan data
was incorrectly marked as signed resulting large intensity values to be
interpreted as negative ones.

Fix the scan data type.

Signed-off-by: Matti Vaittinen <[email protected]>

---
Fixes tag not added because AFACS the bu27008 is not yet in any releases.
---
drivers/iio/light/rohm-bu27008.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/light/rohm-bu27008.c b/drivers/iio/light/rohm-bu27008.c
index 80eb14ea8193..b50bf8973d9a 100644
--- a/drivers/iio/light/rohm-bu27008.c
+++ b/drivers/iio/light/rohm-bu27008.c
@@ -190,7 +190,7 @@ static const struct iio_itime_sel_mul bu27008_itimes[] = {
.address = BU27008_REG_##data##_LO, \
.scan_index = BU27008_##color, \
.scan_type = { \
- .sign = 's', \
+ .sign = 'u', \
.realbits = 16, \
.storagebits = 16, \
.endianness = IIO_LE, \
--
2.40.1


--
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND

~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =]


Attachments:
(No filename) (1.30 kB)
signature.asc (499.00 B)
Download all attachments

2023-06-13 09:59:48

by Matti Vaittinen

[permalink] [raw]
Subject: [PATCH 2/3] iio: light: bu27008: Fix scale format

The driver is expecting accuracy of NANOs for intensity scale in
raw_write. The IIO core is however defaulting to MICROs. This leads the
raw-write of smallest scales to never succeed as correct selector(s) are
not found.

Fix this by implementing the .write_raw_get_fmt callback to use NANO
accuracy for writes of IIO_CHAN_INFO_SCALE.

Signed-off-by: Matti Vaittinen <[email protected]>

---
Fixes tag not added because AFACS the bu27008 is not yet in any releases.
---
drivers/iio/light/rohm-bu27008.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/light/rohm-bu27008.c b/drivers/iio/light/rohm-bu27008.c
index 489902bed7f0..80eb14ea8193 100644
--- a/drivers/iio/light/rohm-bu27008.c
+++ b/drivers/iio/light/rohm-bu27008.c
@@ -633,7 +633,7 @@ static int bu27008_try_find_new_time_gain(struct bu27008_data *data, int val,
for (i = 0; i < data->gts.num_itime; i++) {
new_time_sel = data->gts.itime_table[i].sel;
ret = iio_gts_find_gain_sel_for_scale_using_time(&data->gts,
- new_time_sel, val, val2 * 1000, gain_sel);
+ new_time_sel, val, val2, gain_sel);
if (!ret)
break;
}
@@ -662,7 +662,7 @@ static int bu27008_set_scale(struct bu27008_data *data,
goto unlock_out;

ret = iio_gts_find_gain_sel_for_scale_using_time(&data->gts, time_sel,
- val, val2 * 1000, &gain_sel);
+ val, val2, &gain_sel);
if (ret) {
ret = bu27008_try_find_new_time_gain(data, val, val2, &gain_sel);
if (ret)
@@ -677,6 +677,21 @@ static int bu27008_set_scale(struct bu27008_data *data,
return ret;
}

+static int bu27008_write_raw_get_fmt(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ long mask)
+{
+
+ switch (mask) {
+ case IIO_CHAN_INFO_SCALE:
+ return IIO_VAL_INT_PLUS_NANO;
+ case IIO_CHAN_INFO_INT_TIME:
+ return IIO_VAL_INT_PLUS_MICRO;
+ default:
+ return -EINVAL;
+ }
+}
+
static int bu27008_write_raw(struct iio_dev *idev,
struct iio_chan_spec const *chan,
int val, int val2, long mask)
@@ -756,6 +771,7 @@ static int bu27008_update_scan_mode(struct iio_dev *idev,
static const struct iio_info bu27008_info = {
.read_raw = &bu27008_read_raw,
.write_raw = &bu27008_write_raw,
+ .write_raw_get_fmt = &bu27008_write_raw_get_fmt,
.read_avail = &bu27008_read_avail,
.update_scan_mode = bu27008_update_scan_mode,
.validate_trigger = iio_validate_own_trigger,
--
2.40.1


--
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND

~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =]


Attachments:
(No filename) (2.78 kB)
signature.asc (499.00 B)
Download all attachments

2023-06-17 20:37:07

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH 3/3] iio: light: bu27008: Fix intensity data type

On Tue, 13 Jun 2023 12:35:12 +0300
Matti Vaittinen <[email protected]> wrote:

> The intensity data from bu27008 is unsigned. The type of the scan data
> was incorrectly marked as signed resulting large intensity values to be
> interpreted as negative ones.
>
> Fix the scan data type.
>
> Signed-off-by: Matti Vaittinen <[email protected]>
Applied series to the fixes-togreg branch of iio.git (which now includes
this as it's upstream in char-misc-next) Added fixes tags where needed given
the ids are now stable

Thanks,
Jonathan

>
> ---
> Fixes tag not added because AFACS the bu27008 is not yet in any releases.
> ---
> drivers/iio/light/rohm-bu27008.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/iio/light/rohm-bu27008.c b/drivers/iio/light/rohm-bu27008.c
> index 80eb14ea8193..b50bf8973d9a 100644
> --- a/drivers/iio/light/rohm-bu27008.c
> +++ b/drivers/iio/light/rohm-bu27008.c
> @@ -190,7 +190,7 @@ static const struct iio_itime_sel_mul bu27008_itimes[] = {
> .address = BU27008_REG_##data##_LO, \
> .scan_index = BU27008_##color, \
> .scan_type = { \
> - .sign = 's', \
> + .sign = 'u', \
> .realbits = 16, \
> .storagebits = 16, \
> .endianness = IIO_LE, \