Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1411810 > unrolled thread

[PATCH v2 3/7] iio: adc: ad7793: claim direct mode when writing frequency

Started byAlison Schofield <amsfield22@gmail.com>
First post2016-06-02 06:30 +0200
Last post2016-06-03 14:10 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2 3/7] iio: adc: ad7793: claim direct mode when writing  frequency Alison Schofield <amsfield22@gmail.com> - 2016-06-02 06:30 +0200
    Re: [PATCH v2 3/7] iio: adc: ad7793: claim direct mode when writing  frequency Lars-Peter Clausen <lars@metafoo.de> - 2016-06-02 10:40 +0200
      Re: [PATCH v2 3/7] iio: adc: ad7793: claim direct mode when writing  frequency Jonathan Cameron <jic23@kernel.org> - 2016-06-03 14:10 +0200

#1411810 — [PATCH v2 3/7] iio: adc: ad7793: claim direct mode when writing frequency

FromAlison Schofield <amsfield22@gmail.com>
Date2016-06-02 06:30 +0200
Subject[PATCH v2 3/7] iio: adc: ad7793: claim direct mode when writing frequency
Message-ID<rFsqC-1dm-15@gated-at.bofh.it>
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 <amsfield22@gmail.com>
Cc: Daniel Baluta <daniel.baluta@gmail.com>
---
Changes in v2
Refactored function per reviewers comments
Updated changelog

 drivers/iio/adc/ad7793.c | 32 +++++++++++++-------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index 7b07bb6..a43722f 100644
--- a/drivers/iio/adc/ad7793.c
+++ b/drivers/iio/adc/ad7793.c
@@ -369,13 +369,6 @@ static ssize_t ad7793_write_frequency(struct device *dev,
 	long lval;
 	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 = kstrtol(buf, 10, &lval);
 	if (ret)
 		return ret;
@@ -383,20 +376,21 @@ static ssize_t ad7793_write_frequency(struct device *dev,
 	if (lval == 0)
 		return -EINVAL;
 
-	ret = -EINVAL;
-
 	for (i = 0; i < 16; i++)
-		if (lval == st->chip_info->sample_freq_avail[i]) {
-			mutex_lock(&indio_dev->mlock);
-			st->mode &= ~AD7793_MODE_RATE(-1);
-			st->mode |= AD7793_MODE_RATE(i);
-			ad_sd_write_reg(&st->sd, AD7793_REG_MODE,
-					 sizeof(st->mode), st->mode);
-			mutex_unlock(&indio_dev->mlock);
-			ret = 0;
-		}
+		if (lval == st->chip_info->sample_freq_avail[i])
+			break;
+	if (i == 16)
+		return -EINVAL;
 
-	return ret ? ret : len;
+	ret = iio_device_claim_direct_mode(indio_dev);
+	if (ret)
+		return ret;
+	st->mode &= ~AD7793_MODE_RATE(-1);
+	st->mode |= AD7793_MODE_RATE(i);
+	ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), st->mode);
+	iio_device_release_direct_mode(indio_dev);
+
+	return len;
 }
 
 static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
-- 
2.1.4

[toc] | [next] | [standalone]


#1411996

FromLars-Peter Clausen <lars@metafoo.de>
Date2016-06-02 10:40 +0200
Message-ID<rFwkx-3Ay-3@gated-at.bofh.it>
In reply to#1411810
On 06/02/2016 06:28 AM, Alison Schofield wrote:
> 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 <amsfield22@gmail.com>
> Cc: Daniel Baluta <daniel.baluta@gmail.com>

Looks good, thanks.

Acked-by: Lars-Peter Clausen <lars@metafoo.de>

[toc] | [prev] | [next] | [standalone]


#1413167

FromJonathan Cameron <jic23@kernel.org>
Date2016-06-03 14:10 +0200
Message-ID<rFW5k-2Y2-35@gated-at.bofh.it>
In reply to#1411996
On 02/06/16 09:37, Lars-Peter Clausen wrote:
> On 06/02/2016 06:28 AM, Alison Schofield wrote:
>> 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 <amsfield22@gmail.com>
>> Cc: Daniel Baluta <daniel.baluta@gmail.com>
> 
> Looks good, thanks.
> 
> Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git - initially pushed out as
testing for the autobuilders to play with it.

Thanks,

Jonathan
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web