mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 22:22:08 +02:00
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.
Fixes: 41ff93d14f ("iio: light: ROHM BU27008 color sensor")
Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
Link: https://lore.kernel.org/r/e4778b74cde41431f77bc8dd88ec18605da0b400.1686648422.git.mazziesaccount@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
d47b9b8429
commit
096649cd7c
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user