iio: adc: ad7791: claim direct mode when writing frequency
Subsystems (2)
PATCH v2 2/7 iio: adc: ad7791: claim direct mode when writing frequency
Driver was checking for direct mode and trying to lock it, but left a gap where mode could change before the desired operation. Use iio_device_claim_direct_mode() to guarantee device stays in direct mode.
Refactor function to clarify look-up followed by lock sequence.
---
Changes in v2
Refactored function per reviewers comments
Updated changelog
drivers/iio/adc/ad7791.c | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-)
drivers/iio/adc/ad7791.c +14 -22
@@ -272,30 +272,22 @@ static ssize_t ad7791_write_frequency(struct device *dev,struct ad7791_state *st =iio_priv (indio_dev);int i, ret; -mutex_lock (&indio_dev->mlock); -if (iio_buffer_enabled (indio_dev)) { -mutex_unlock (&indio_dev->mlock); -return -EBUSY ; - } -mutex_unlock (&indio_dev->mlock); - - ret = -EINVAL ; - -for (i =0 ; i <ARRAY_SIZE (ad7791_sample_freq_avail); i++) { -if (sysfs_streq (ad7791_sample_freq_avail[i], buf)) { - -mutex_lock (&indio_dev->mlock); - st->filter &= ~AD7791_FILTER_RATE_MASK ; - st->filter |= i; -ad_sd_write_reg (&st->sd,AD7791_REG_FILTER , -sizeof (st->filter), st->filter); -mutex_unlock (&indio_dev->mlock); - ret =0 ; +for (i =0 ; i <ARRAY_SIZE (ad7791_sample_freq_avail); i++) +if (sysfs_streq (ad7791_sample_freq_avail[i], buf))break ; - } - } +if (i ==ARRAY_SIZE (ad7791_sample_freq_avail)) +return -EINVAL ; + + ret =iio_device_claim_direct_mode (indio_dev); +if (ret) +return ret; + st->filter &= ~AD7791_FILTER_RATE_MASK ; + st->filter |= i; +ad_sd_write_reg (&st->sd,AD7791_REG_FILTER ,sizeof (st->filter), + st->filter); +iio_device_release_direct_mode (indio_dev); -return ret ? ret : len; +return len; } static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
Signature · 1 line
2.1.4
Quoted 9 lines · Alison Schofield
Driver was checking for direct mode and trying to lock it, but left a gap where mode could change before the desired operation. Use
iio_device_claim_direct_mode()to guarantee device stays in direct mode.Refactor function to clarify look-up followed by lock sequence.
Signed-off-by Alison Schofield <[email protected]>Cc Daniel Baluta <[email protected]>
Looks good, thanks.
Jonathan Cameron
maintainerQuoted 6 lines · Lars-Peter Clausen
Quoted 5 lines · Alison Schofield
Driver was checking for direct mode and trying to lock it, but left a gap where mode could change before the desired operation. Use
iio_device_claim_direct_mode()to guarantee device stays in direct mode.
Quoted 8 lines
Quoted 4 lines
Refactor function to clarify look-up followed by lock sequence.
Signed-off-by Alison Schofield <[email protected]>Cc Daniel Baluta <[email protected]>Looks good, thanks.
Applied - thanks.
Quoted 6 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html