From: Nuno Sa via B4 Relay <devnull+nuno.sa.analog.com@kernel.org> To: linux-iio@vger.kernel.org Cc: Michael Hennerich <Michael.Hennerich@analog.com>, Jonathan Cameron <jic23@kernel.org>, Lars-Peter Clausen <lars@metafoo.de> Subject: [PATCH v2 3/8] iio: adc: ad9467: add mutex to struct ad9467_state Date: Thu, 07 Dec 2023 13:39:26 +0100 [thread overview] Message-ID: <20231207-iio-backend-prep-v2-3-a4a33bc4d70e@analog.com> (raw) In-Reply-To: <20231207-iio-backend-prep-v2-0-a4a33bc4d70e@analog.com> From: Nuno Sa <nuno.sa@analog.com> When calling ad9467_set_scale(), multiple calls to ad9467_spi_write() are done which means we need to properly protect the whole operation so we are sure we will be in a sane state if two concurrent calls occur. Fixes: ad6797120238 ("iio: adc: ad9467: add support AD9467 ADC") Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- drivers/iio/adc/ad9467.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/iio/adc/ad9467.c b/drivers/iio/adc/ad9467.c index d3c98c4eccd3..104c6d394a3e 100644 --- a/drivers/iio/adc/ad9467.c +++ b/drivers/iio/adc/ad9467.c @@ -4,8 +4,9 @@ * * Copyright 2012-2020 Analog Devices Inc. */ - +#include <linux/cleanup.h> #include <linux/module.h> +#include <linux/mutex.h> #include <linux/device.h> #include <linux/kernel.h> #include <linux/slab.h> @@ -121,6 +122,8 @@ struct ad9467_state { unsigned int output_mode; struct gpio_desc *pwrdown_gpio; + /* ensure consistent state obtained on multiple related accesses */ + struct mutex lock; }; static int ad9467_spi_read(struct spi_device *spi, unsigned int reg) @@ -161,6 +164,7 @@ static int ad9467_reg_access(struct adi_axi_adc_conv *conv, unsigned int reg, int ret; if (readval == NULL) { + guard(mutex)(&st->lock); ret = ad9467_spi_write(spi, reg, writeval); if (ret) return ret; @@ -310,6 +314,7 @@ static int ad9467_set_scale(struct adi_axi_adc_conv *conv, int val, int val2) if (scale_val[0] != val || scale_val[1] != val2) continue; + guard(mutex)(&st->lock); ret = ad9467_spi_write(st->spi, AN877_ADC_REG_VREF, info->scale_table[i][1]); if (ret < 0) -- 2.43.0
WARNING: multiple messages have this Message-ID (diff)
From: Nuno Sa <nuno.sa@analog.com> To: linux-iio@vger.kernel.org Cc: Michael Hennerich <Michael.Hennerich@analog.com>, Jonathan Cameron <jic23@kernel.org>, Lars-Peter Clausen <lars@metafoo.de> Subject: [PATCH v2 3/8] iio: adc: ad9467: add mutex to struct ad9467_state Date: Thu, 07 Dec 2023 13:39:26 +0100 [thread overview] Message-ID: <20231207-iio-backend-prep-v2-3-a4a33bc4d70e@analog.com> (raw) In-Reply-To: <20231207-iio-backend-prep-v2-0-a4a33bc4d70e@analog.com> When calling ad9467_set_scale(), multiple calls to ad9467_spi_write() are done which means we need to properly protect the whole operation so we are sure we will be in a sane state if two concurrent calls occur. Fixes: ad6797120238 ("iio: adc: ad9467: add support AD9467 ADC") Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- drivers/iio/adc/ad9467.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/iio/adc/ad9467.c b/drivers/iio/adc/ad9467.c index d3c98c4eccd3..104c6d394a3e 100644 --- a/drivers/iio/adc/ad9467.c +++ b/drivers/iio/adc/ad9467.c @@ -4,8 +4,9 @@ * * Copyright 2012-2020 Analog Devices Inc. */ - +#include <linux/cleanup.h> #include <linux/module.h> +#include <linux/mutex.h> #include <linux/device.h> #include <linux/kernel.h> #include <linux/slab.h> @@ -121,6 +122,8 @@ struct ad9467_state { unsigned int output_mode; struct gpio_desc *pwrdown_gpio; + /* ensure consistent state obtained on multiple related accesses */ + struct mutex lock; }; static int ad9467_spi_read(struct spi_device *spi, unsigned int reg) @@ -161,6 +164,7 @@ static int ad9467_reg_access(struct adi_axi_adc_conv *conv, unsigned int reg, int ret; if (readval == NULL) { + guard(mutex)(&st->lock); ret = ad9467_spi_write(spi, reg, writeval); if (ret) return ret; @@ -310,6 +314,7 @@ static int ad9467_set_scale(struct adi_axi_adc_conv *conv, int val, int val2) if (scale_val[0] != val || scale_val[1] != val2) continue; + guard(mutex)(&st->lock); ret = ad9467_spi_write(st->spi, AN877_ADC_REG_VREF, info->scale_table[i][1]); if (ret < 0) -- 2.43.0
next prev parent reply other threads:[~2023-12-07 12:39 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-12-07 12:39 [PATCH v2 0/8] iio: ad9467 and axi-adc cleanups Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-07 12:39 ` [PATCH v2 1/8] iio: adc: ad9467: fix reset gpio handling Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-07 12:39 ` [PATCH v2 2/8] iio: adc: ad9467: don't ignore error codes Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-07 12:39 ` Nuno Sa via B4 Relay [this message] 2023-12-07 12:39 ` [PATCH v2 3/8] iio: adc: ad9467: add mutex to struct ad9467_state Nuno Sa 2023-12-07 15:04 ` David Lechner 2023-12-07 12:39 ` [PATCH v2 4/8] iio: adc: ad9467: fix scale setting Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-07 15:05 ` David Lechner 2023-12-07 12:39 ` [PATCH v2 5/8] iio: adc: ad9467: use spi_get_device_match_data() Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-07 12:39 ` [PATCH v2 6/8] iio: adc: ad9467: use chip_info variables instead of array Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-07 12:39 ` [PATCH v2 7/8] iio: adc: ad9467: use the more common !val NULL check Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-07 12:39 ` [PATCH v2 8/8] iio: adc: adi-axi-adc: convert to regmap Nuno Sa via B4 Relay 2023-12-07 12:39 ` Nuno Sa 2023-12-11 13:18 ` Nuno Sá 2023-12-11 19:16 ` Jonathan Cameron 2023-12-12 14:28 ` Nuno Sá 2023-12-10 11:43 ` [PATCH v2 0/8] iio: ad9467 and axi-adc cleanups Jonathan Cameron 2023-12-11 9:29 ` Nuno Sá
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20231207-iio-backend-prep-v2-3-a4a33bc4d70e@analog.com \ --to=devnull+nuno.sa.analog.com@kernel.org \ --cc=Michael.Hennerich@analog.com \ --cc=jic23@kernel.org \ --cc=lars@metafoo.de \ --cc=linux-iio@vger.kernel.org \ --cc=nuno.sa@analog.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.