iio: sx9310: Fix write_.._debounce()
Check input to be sure it matches Semtech sx9310 specification and
can fit into debounce register.
Compare argument writen to thresh_.._period with read from same
sysfs attribute:
Before: Afer:
write | read write | read
-1 | 8 -1 fails: -EINVAL
0 | 8 0 | 0
1 | 0 1 | 0
2..15 | 2^log2(N) 2..15 | 2^log2(N)
16 | 0 >= 16 fails: -EINVAL
Fixes: 1b6872015f
("iio: sx9310: Support setting debounce values")
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Cc: stable@vger.kernel.org
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20210331182222.219533-1-gwendal@chromium.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
6f0078ae70
commit
fc948409cc
|
@ -763,7 +763,11 @@ static int sx9310_write_far_debounce(struct sx9310_data *data, int val)
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int regval;
|
unsigned int regval;
|
||||||
|
|
||||||
val = ilog2(val);
|
if (val > 0)
|
||||||
|
val = ilog2(val);
|
||||||
|
if (!FIELD_FIT(SX9310_REG_PROX_CTRL10_FAR_DEBOUNCE_MASK, val))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
regval = FIELD_PREP(SX9310_REG_PROX_CTRL10_FAR_DEBOUNCE_MASK, val);
|
regval = FIELD_PREP(SX9310_REG_PROX_CTRL10_FAR_DEBOUNCE_MASK, val);
|
||||||
|
|
||||||
mutex_lock(&data->mutex);
|
mutex_lock(&data->mutex);
|
||||||
|
@ -780,7 +784,11 @@ static int sx9310_write_close_debounce(struct sx9310_data *data, int val)
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int regval;
|
unsigned int regval;
|
||||||
|
|
||||||
val = ilog2(val);
|
if (val > 0)
|
||||||
|
val = ilog2(val);
|
||||||
|
if (!FIELD_FIT(SX9310_REG_PROX_CTRL10_CLOSE_DEBOUNCE_MASK, val))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
regval = FIELD_PREP(SX9310_REG_PROX_CTRL10_CLOSE_DEBOUNCE_MASK, val);
|
regval = FIELD_PREP(SX9310_REG_PROX_CTRL10_CLOSE_DEBOUNCE_MASK, val);
|
||||||
|
|
||||||
mutex_lock(&data->mutex);
|
mutex_lock(&data->mutex);
|
||||||
|
|
Loading…
Reference in New Issue