From: David Lechner <dlechner@baylibre.com>
To: linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
linux-staging@lists.linux.dev
Cc: linux-kernel@vger.kernel.org,
"Jonathan Cameron" <jic23@kernel.org>,
"Rob Herring" <robh+dt@kernel.org>,
"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Michael Hennerich" <Michael.Hennerich@analog.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Axel Haslam" <ahaslam@baylibre.com>,
"Philip Molloy" <pmolloy@baylibre.com>,
"David Lechner" <dlechner@baylibre.com>
Subject: [PATCH v2 14/19] staging: iio: resolver: ad2s1210: refactor setting excitation frequency
Date: Thu, 21 Sep 2023 09:43:55 -0500 [thread overview]
Message-ID: <20230921144400.62380-15-dlechner@baylibre.com> (raw)
In-Reply-To: <20230921144400.62380-1-dlechner@baylibre.com>
This combines the ad2s1210_update_frequency_control_word() and
ad2s1210_soft_reset() functions into a single function since they
both have to be called together.
Also clean up a few things while touching this:
- move AD2S1210_DEF_EXCIT macro with similar macros
- remove unnecessary dev_err() calls
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/staging/iio/resolver/ad2s1210.c | 63 ++++++++++++-------------
1 file changed, 31 insertions(+), 32 deletions(-)
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index fe413759deb9..f1ffee34ebbc 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -53,12 +53,11 @@
#define AD2S1210_MIN_CLKIN 6144000
#define AD2S1210_MAX_CLKIN 10240000
#define AD2S1210_MIN_EXCIT 2000
+#define AD2S1210_DEF_EXCIT 10000
#define AD2S1210_MAX_EXCIT 20000
#define AD2S1210_MIN_FCW 0x4
#define AD2S1210_MAX_FCW 0x50
-#define AD2S1210_DEF_EXCIT 10000
-
enum ad2s1210_mode {
MOD_POS = 0b00,
MOD_VEL = 0b01,
@@ -184,18 +183,29 @@ static int ad2s1210_regmap_reg_read(void *context, unsigned int reg,
return 0;
}
-static inline
-int ad2s1210_update_frequency_control_word(struct ad2s1210_state *st)
+/*
+ * Sets the excitation frequency and performs software reset.
+ *
+ * Must be called with lock held.
+ */
+static int ad2s1210_set_excitation_frequency(struct ad2s1210_state *st,
+ u16 fexcit)
{
- unsigned char fcw;
+ int ret;
+ u8 fcw;
- fcw = (unsigned char)(st->fexcit * (1 << 15) / st->fclkin);
- if (fcw < AD2S1210_MIN_FCW || fcw > AD2S1210_MAX_FCW) {
- dev_err(&st->sdev->dev, "ad2s1210: FCW out of range\n");
+ fcw = fexcit * (1 << 15) / st->fclkin;
+ if (fcw < AD2S1210_MIN_FCW || fcw > AD2S1210_MAX_FCW)
return -ERANGE;
- }
- return regmap_write(st->regmap, AD2S1210_REG_EXCIT_FREQ, fcw);
+ ret = regmap_write(st->regmap, AD2S1210_REG_EXCIT_FREQ, fcw);
+ if (ret < 0)
+ return ret;
+
+ st->fexcit = fexcit;
+
+ /* software reset reinitializes the excitation frequency output */
+ return regmap_write(st->regmap, AD2S1210_REG_SOFT_RESET, 0);
}
static int ad2s1210_set_resolution_gpios(struct ad2s1210_state *st,
@@ -210,11 +220,6 @@ static int ad2s1210_set_resolution_gpios(struct ad2s1210_state *st,
bitmap);
}
-static inline int ad2s1210_soft_reset(struct ad2s1210_state *st)
-{
- return regmap_write(st->regmap, AD2S1210_REG_SOFT_RESET, 0);
-}
-
static ssize_t ad2s1210_show_fexcit(struct device *dev,
struct device_attribute *attr,
char *buf)
@@ -229,27 +234,24 @@ static ssize_t ad2s1210_store_fexcit(struct device *dev,
const char *buf, size_t len)
{
struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
- unsigned int fexcit;
+ u16 fexcit;
int ret;
- ret = kstrtouint(buf, 10, &fexcit);
- if (ret < 0)
- return ret;
- if (fexcit < AD2S1210_MIN_EXCIT || fexcit > AD2S1210_MAX_EXCIT) {
- dev_err(dev,
- "ad2s1210: excitation frequency out of range\n");
+ ret = kstrtou16(buf, 10, &fexcit);
+ if (ret < 0 || fexcit < AD2S1210_MIN_EXCIT || fexcit > AD2S1210_MAX_EXCIT)
return -EINVAL;
- }
+
mutex_lock(&st->lock);
- st->fexcit = fexcit;
- ret = ad2s1210_update_frequency_control_word(st);
+ ret = ad2s1210_set_excitation_frequency(st, fexcit);
if (ret < 0)
goto error_ret;
- ret = ad2s1210_soft_reset(st);
+
+ ret = len;
+
error_ret:
mutex_unlock(&st->lock);
- return ret < 0 ? ret : len;
+ return ret;
}
static ssize_t ad2s1210_show_resolution(struct device *dev,
@@ -624,10 +626,8 @@ static int ad2s1210_initial(struct ad2s1210_state *st)
if (ret < 0)
goto error_ret;
- ret = ad2s1210_update_frequency_control_word(st);
- if (ret < 0)
- goto error_ret;
- ret = ad2s1210_soft_reset(st);
+ ret = ad2s1210_set_excitation_frequency(st, AD2S1210_DEF_EXCIT);
+
error_ret:
mutex_unlock(&st->lock);
return ret;
@@ -773,7 +773,6 @@ static int ad2s1210_probe(struct spi_device *spi)
mutex_init(&st->lock);
st->sdev = spi;
st->resolution = 12;
- st->fexcit = AD2S1210_DEF_EXCIT;
ret = ad2s1210_setup_clocks(st);
if (ret < 0)
--
2.34.1
next prev parent reply other threads:[~2023-09-21 20:48 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-21 14:43 [PATCH v2 00/19] iio: resolver: move ad2s1210 out of staging David Lechner
2023-09-21 14:43 ` [PATCH v2 01/19] dt-bindings: iio: resolver: add devicetree bindings for ad2s1210 David Lechner
2023-09-22 22:44 ` Rob Herring
2023-09-24 16:57 ` Jonathan Cameron
2023-09-25 15:54 ` David Lechner
2023-09-25 17:47 ` David Lechner
2023-09-21 14:43 ` [PATCH v2 02/19] staging: iio: Documentation: document IIO resolver AD2S1210 sysfs attributes David Lechner
2023-09-24 17:15 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 03/19] staging: iio: resolver: ad2s1210: fix ad2s1210_show_fault David Lechner
2023-09-24 17:17 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 04/19] staging: iio: resolver: ad2s1210: fix not restoring sample gpio in channel read David Lechner
2023-09-24 17:19 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 05/19] staging: iio: resolver: ad2s1210: fix probe David Lechner
2023-09-24 17:25 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 06/19] staging: iio: resolver: ad2s1210: always use 16-bit value for raw read David Lechner
2023-09-24 17:31 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 07/19] staging: iio: resolver: ad2s1210: implement IIO_CHAN_INFO_SCALE David Lechner
2023-09-24 17:38 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 08/19] staging: iio: resolver: ad2s1210: use devicetree to get fclkin David Lechner
2023-09-24 17:43 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 09/19] staging: iio: resolver: ad2s1210: use regmap for config registers David Lechner
2023-09-24 17:59 ` Jonathan Cameron
2023-09-25 16:37 ` David Lechner
2023-09-21 14:43 ` [PATCH v2 10/19] staging: iio: resolver: ad2s1210: add debugfs reg access David Lechner
2023-09-21 14:43 ` [PATCH v2 11/19] staging: iio: resolver: ad2s1210: remove config attribute David Lechner
2023-09-21 14:43 ` [PATCH v2 12/19] staging: iio: resolver: ad2s1210: rework gpios David Lechner
2023-09-21 14:43 ` [PATCH v2 13/19] staging: iio: resolver: ad2s1210: implement hysteresis as channel attr David Lechner
2023-09-24 18:05 ` Jonathan Cameron
2023-09-21 14:43 ` David Lechner [this message]
2023-09-24 18:08 ` [PATCH v2 14/19] staging: iio: resolver: ad2s1210: refactor setting excitation frequency Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 15/19] staging: iio: resolver: ad2s1210: read excitation frequency from control register David Lechner
2023-09-21 14:43 ` [PATCH v2 16/19] staging: iio: resolver: ad2s1210: rename fexcit attribute David Lechner
2023-09-21 14:43 ` [PATCH v2 17/19] staging: iio: resolver: ad2s1210: convert resolution to devicetree property David Lechner
2023-09-24 18:10 ` Jonathan Cameron
2023-09-21 14:43 ` [PATCH v2 18/19] staging: iio: resolver: ad2s1210: add phase_lock_range attributes David Lechner
2023-09-24 18:12 ` Jonathan Cameron
2023-09-21 14:44 ` [PATCH v2 19/19] staging: iio: resolver: ad2s1210: add triggered buffer support David Lechner
2023-09-24 18:17 ` Jonathan Cameron
2023-09-25 16:50 ` David Lechner
2023-09-24 16:51 ` [PATCH v2 00/19] iio: resolver: move ad2s1210 out of staging Jonathan Cameron
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=20230921144400.62380-15-dlechner@baylibre.com \
--to=dlechner@baylibre.com \
--cc=Michael.Hennerich@analog.com \
--cc=ahaslam@baylibre.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jic23@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-staging@lists.linux.dev \
--cc=nuno.sa@analog.com \
--cc=pmolloy@baylibre.com \
--cc=robh+dt@kernel.org \
/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: link
Be 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.