iio: proximity: vcnl3020: remove iio_claim/release_direct

Remove iio_claim/release and change it on mutex accordingly in
vcnl3020_write_proxy_samp_freq.

Signed-off-by: Ivan Mikhaylov <i.mikhaylov@yadro.com>
Link: https://lore.kernel.org/r/20210722154420.915082-4-i.mikhaylov@yadro.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Ivan Mikhaylov 2021-07-22 18:44:20 +03:00 committed by Jonathan Cameron
parent 3363fbbe19
commit 7ff98c8afa

View File

@ -236,10 +236,15 @@ static int vcnl3020_write_proxy_samp_freq(struct vcnl3020_data *data, int val,
{ {
unsigned int i; unsigned int i;
int index = -1; int index = -1;
int rc;
mutex_lock(&data->lock);
/* Protect against event capture. */ /* Protect against event capture. */
if (vcnl3020_is_in_periodic_mode(data)) if (vcnl3020_is_in_periodic_mode(data)) {
return -EBUSY; rc = -EBUSY;
goto err_unlock;
}
for (i = 0; i < ARRAY_SIZE(vcnl3020_prox_sampling_frequency); i++) { for (i = 0; i < ARRAY_SIZE(vcnl3020_prox_sampling_frequency); i++) {
if (val == vcnl3020_prox_sampling_frequency[i][0] && if (val == vcnl3020_prox_sampling_frequency[i][0] &&
@ -249,10 +254,20 @@ static int vcnl3020_write_proxy_samp_freq(struct vcnl3020_data *data, int val,
} }
} }
if (index < 0) if (index < 0) {
return -EINVAL; rc = -EINVAL;
goto err_unlock;
}
return regmap_write(data->regmap, VCNL_PROXIMITY_RATE, index); rc = regmap_write(data->regmap, VCNL_PROXIMITY_RATE, index);
if (rc)
dev_err(data->dev,
"Error (%d) writing proximity rate register\n", rc);
err_unlock:
mutex_unlock(&data->lock);
return rc;
} }
static bool vcnl3020_is_thr_enabled(struct vcnl3020_data *data) static bool vcnl3020_is_thr_enabled(struct vcnl3020_data *data)
@ -513,17 +528,11 @@ static int vcnl3020_write_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, struct iio_chan_spec const *chan,
int val, int val2, long mask) int val, int val2, long mask)
{ {
int rc;
struct vcnl3020_data *data = iio_priv(indio_dev); struct vcnl3020_data *data = iio_priv(indio_dev);
switch (mask) { switch (mask) {
case IIO_CHAN_INFO_SAMP_FREQ: case IIO_CHAN_INFO_SAMP_FREQ:
rc = iio_device_claim_direct_mode(indio_dev); return vcnl3020_write_proxy_samp_freq(data, val, val2);
if (rc)
return rc;
rc = vcnl3020_write_proxy_samp_freq(data, val, val2);
iio_device_release_direct_mode(indio_dev);
return rc;
default: default:
return -EINVAL; return -EINVAL;
} }