All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Lechner <dlechner@baylibre.com>
To: linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-staging@lists.linux.dev
Cc: "David Lechner" <david@lechnology.com>,
	"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>,
	linux-kernel@vger.kernel.org,
	"David Lechner" <dlechner@baylibre.com>
Subject: [PATCH v3 25/27] staging: iio: resolver: ad2s1210: rename DOS reset min/max attrs
Date: Fri, 29 Sep 2023 12:23:30 -0500	[thread overview]
Message-ID: <20230929-ad2s1210-mainline-v3-25-fa4364281745@baylibre.com> (raw)
In-Reply-To: <20230929-ad2s1210-mainline-v3-0-fa4364281745@baylibre.com>

From: David Lechner <david@lechnology.com>

From: David Lechner <dlechner@baylibre.com>

The AD2S1210 has a programmable threshold for the degradation of signal
(DOS) mismatch fault. This fault is triggered when the difference in
amplitude between the sine and cosine inputs exceeds the threshold.

The DOS reset min/max registers on the chip provide initial values
for internal tracking of the min/max of the monitor signal after the
fault register is cleared.

This patch converts the custom device DOS reset min/max threshold
attributes custom event attributes on the monitor signal channel.

The attributes now use millivolts instead of the raw register value in
accordance with the IIO ABI.

Emitting the event will be implemented in a later patch.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---

v3 changes: This is a new patch in v3

 .../Documentation/sysfs-bus-iio-resolver-ad2s1210  | 27 ++++++
 drivers/staging/iio/resolver/ad2s1210.c            | 99 ++++++++++++----------
 2 files changed, 82 insertions(+), 44 deletions(-)

diff --git a/drivers/staging/iio/Documentation/sysfs-bus-iio-resolver-ad2s1210 b/drivers/staging/iio/Documentation/sysfs-bus-iio-resolver-ad2s1210
new file mode 100644
index 000000000000..ea75881b0c77
--- /dev/null
+++ b/drivers/staging/iio/Documentation/sysfs-bus-iio-resolver-ad2s1210
@@ -0,0 +1,27 @@
+What:		/sys/bus/iio/devices/iio:deviceX/events/in_altvoltage0-altvoltage1_thresh_rising_reset_max
+KernelVersion:  6.7
+Contact:	linux-iio@vger.kernel.org
+Description:
+		Reading returns the current Degradation of Signal Reset Maximum
+		Threshold value in millivolts. Writing sets the value.
+
+What:		/sys/bus/iio/devices/iio:deviceX/events/in_altvoltage0-altvoltage1_thresh_rising_reset_max_available
+KernelVersion:  6.7
+Contact:	linux-iio@vger.kernel.org
+Description:
+		Reading returns the allowable voltage range for
+		in_altvoltage0-altvoltage1_thresh_rising_reset_max.
+
+What:		/sys/bus/iio/devices/iio:deviceX/events/in_altvoltage0-altvoltage1_thresh_rising_reset_min
+KernelVersion:  6.7
+Contact:	linux-iio@vger.kernel.org
+Description:
+		Reading returns the current Degradation of Signal Reset Minimum
+		Threshold value in millivolts. Writing sets the value.
+
+What:		/sys/bus/iio/devices/iio:deviceX/events/in_altvoltage0-altvoltage1_thresh_rising_reset_min_available
+KernelVersion:  6.7
+Contact:	linux-iio@vger.kernel.org
+Description:
+		Reading returns the allowable voltage range for
+		in_altvoltage0-altvoltage1_thresh_rising_reset_min.
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index aa14edbe8a77..e1c95ec73545 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -283,41 +283,6 @@ static ssize_t ad2s1210_clear_fault(struct device *dev,
 	return ret < 0 ? ret : len;
 }
 
-static ssize_t ad2s1210_show_reg(struct device *dev,
-				 struct device_attribute *attr,
-				 char *buf)
-{
-	struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
-	struct iio_dev_attr *iattr = to_iio_dev_attr(attr);
-	unsigned int value;
-	int ret;
-
-	mutex_lock(&st->lock);
-	ret = regmap_read(st->regmap, iattr->address, &value);
-	mutex_unlock(&st->lock);
-
-	return ret < 0 ? ret : sprintf(buf, "%d\n", value);
-}
-
-static ssize_t ad2s1210_store_reg(struct device *dev,
-				  struct device_attribute *attr,
-				  const char *buf, size_t len)
-{
-	struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
-	unsigned char data;
-	int ret;
-	struct iio_dev_attr *iattr = to_iio_dev_attr(attr);
-
-	ret = kstrtou8(buf, 10, &data);
-	if (ret)
-		return -EINVAL;
-
-	mutex_lock(&st->lock);
-	ret = regmap_write(st->regmap, iattr->address, data);
-	mutex_unlock(&st->lock);
-	return ret < 0 ? ret : len;
-}
-
 static int ad2s1210_single_conversion(struct ad2s1210_state *st,
 				      struct iio_chan_spec const *chan,
 				      int *val)
@@ -743,13 +708,6 @@ static int ad2s1210_write_raw(struct iio_dev *indio_dev,
 static IIO_DEVICE_ATTR(fault, 0644,
 		       ad2s1210_show_fault, ad2s1210_clear_fault, 0);
 
-static IIO_DEVICE_ATTR(dos_rst_max_thrd, 0644,
-		       ad2s1210_show_reg, ad2s1210_store_reg,
-		       AD2S1210_REG_DOS_RST_MAX_THRD);
-static IIO_DEVICE_ATTR(dos_rst_min_thrd, 0644,
-		       ad2s1210_show_reg, ad2s1210_store_reg,
-		       AD2S1210_REG_DOS_RST_MIN_THRD);
-
 static const struct iio_event_spec ad2s1210_position_event_spec[] = {
 	{
 		/* Tracking error exceeds LOT threshold fault. */
@@ -867,8 +825,6 @@ static const struct iio_chan_spec ad2s1210_channels[] = {
 
 static struct attribute *ad2s1210_attributes[] = {
 	&iio_dev_attr_fault.dev_attr.attr,
-	&iio_dev_attr_dos_rst_max_thrd.dev_attr.attr,
-	&iio_dev_attr_dos_rst_min_thrd.dev_attr.attr,
 	NULL,
 };
 
@@ -876,6 +832,49 @@ static const struct attribute_group ad2s1210_attribute_group = {
 	.attrs = ad2s1210_attributes,
 };
 
+static ssize_t event_attr_voltage_reg_show(struct device *dev,
+					   struct device_attribute *attr,
+					   char *buf)
+{
+	struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
+	struct iio_dev_attr *iattr = to_iio_dev_attr(attr);
+	unsigned int value;
+	int ret;
+
+	mutex_lock(&st->lock);
+	ret = regmap_read(st->regmap, iattr->address, &value);
+	mutex_unlock(&st->lock);
+
+	if (ret < 0)
+		return ret;
+
+	return sprintf(buf, "%d\n", value * THRESHOLD_MILLIVOLT_PER_LSB);
+}
+
+static ssize_t event_attr_voltage_reg_store(struct device *dev,
+					    struct device_attribute *attr,
+					    const char *buf, size_t len)
+{
+	struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
+	struct iio_dev_attr *iattr = to_iio_dev_attr(attr);
+	u16 data;
+	int ret;
+
+	ret = kstrtou16(buf, 10, &data);
+	if (ret)
+		return -EINVAL;
+
+	mutex_lock(&st->lock);
+	ret = regmap_write(st->regmap, iattr->address,
+			   data / THRESHOLD_MILLIVOLT_PER_LSB);
+	mutex_unlock(&st->lock);
+
+	if (ret < 0)
+		return ret;
+
+	return len;
+}
+
 static ssize_t
 in_angl1_thresh_rising_value_available_show(struct device *dev,
 					    struct device_attribute *attr,
@@ -906,6 +905,14 @@ IIO_CONST_ATTR(in_phase0_mag_value_available,
 IIO_CONST_ATTR(in_altvoltage0_thresh_falling_value_available, THRESHOLD_RANGE_STR);
 IIO_CONST_ATTR(in_altvoltage0_thresh_rising_value_available, THRESHOLD_RANGE_STR);
 IIO_CONST_ATTR(in_altvoltage0_mag_value_available, THRESHOLD_RANGE_STR);
+IIO_DEVICE_ATTR(in_altvoltage0_mag_reset_max, 0644,
+		event_attr_voltage_reg_show, event_attr_voltage_reg_store,
+		AD2S1210_REG_DOS_RST_MAX_THRD);
+IIO_CONST_ATTR(in_altvoltage0_mag_reset_max_available, THRESHOLD_RANGE_STR);
+IIO_DEVICE_ATTR(in_altvoltage0_mag_reset_min, 0644,
+		event_attr_voltage_reg_show, event_attr_voltage_reg_store,
+		AD2S1210_REG_DOS_RST_MIN_THRD);
+IIO_CONST_ATTR(in_altvoltage0_mag_reset_min_available, THRESHOLD_RANGE_STR);
 IIO_DEVICE_ATTR_RO(in_angl1_thresh_rising_value_available, 0);
 IIO_DEVICE_ATTR_RO(in_angl1_thresh_rising_hysteresis_available, 0);
 
@@ -914,6 +921,10 @@ static struct attribute *ad2s1210_event_attributes[] = {
 	&iio_const_attr_in_altvoltage0_thresh_falling_value_available.dev_attr.attr,
 	&iio_const_attr_in_altvoltage0_thresh_rising_value_available.dev_attr.attr,
 	&iio_const_attr_in_altvoltage0_mag_value_available.dev_attr.attr,
+	&iio_dev_attr_in_altvoltage0_mag_reset_max.dev_attr.attr,
+	&iio_const_attr_in_altvoltage0_mag_reset_max_available.dev_attr.attr,
+	&iio_dev_attr_in_altvoltage0_mag_reset_min.dev_attr.attr,
+	&iio_const_attr_in_altvoltage0_mag_reset_min_available.dev_attr.attr,
 	&iio_dev_attr_in_angl1_thresh_rising_value_available.dev_attr.attr,
 	&iio_dev_attr_in_angl1_thresh_rising_hysteresis_available.dev_attr.attr,
 	NULL,

-- 
2.42.0


  parent reply	other threads:[~2023-09-29 17:26 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-29 17:23 [PATCH v3 00/27] iio: resolver: move ad2s1210 out of staging David Lechner
2023-09-29 17:23 ` [PATCH v3 01/27] dt-bindings: iio: resolver: add devicetree bindings for ad2s1210 David Lechner
2023-09-30 14:34   ` Jonathan Cameron
2023-10-04 10:41     ` Hennerich, Michael
2023-10-02  8:02   ` Dan Carpenter
2023-10-02  9:03     ` Jonathan Cameron
2023-10-02 15:18   ` Rob Herring
2023-10-05 14:13     ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 02/27] staging: iio: resolver: ad2s1210: fix use before initialization David Lechner
2023-09-30 14:28   ` Jonathan Cameron
2023-10-02  8:07   ` Dan Carpenter
2023-10-02  9:17     ` Jonathan Cameron
2023-10-06 14:48       ` Vincent Whitchurch
2023-10-10  9:29         ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 03/27] staging: iio: resolver: ad2s1210: remove call to spi_setup() David Lechner
2023-09-30 14:35   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 04/27] staging: iio: resolver: ad2s1210: check return of ad2s1210_initial() David Lechner
2023-09-30 14:37   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 05/27] staging: iio: resolver: ad2s1210: remove spi_set_drvdata() David Lechner
2023-09-30 14:38   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 06/27] staging: iio: resolver: ad2s1210: sort imports David Lechner
2023-09-30 14:39   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 07/27] staging: iio: resolver: ad2s1210: always use 16-bit value for raw read David Lechner
2023-09-30 14:41   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 08/27] staging: iio: resolver: ad2s1210: implement IIO_CHAN_INFO_SCALE David Lechner
2023-09-30 14:43   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 09/27] staging: iio: resolver: ad2s1210: use devicetree to get CLKIN rate David Lechner
2023-09-30 14:44   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 10/27] staging: iio: resolver: ad2s1210: use regmap for config registers David Lechner
2023-09-30 14:51   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 11/27] staging: iio: resolver: ad2s1210: add debugfs reg access David Lechner
2023-09-30 14:52   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 12/27] staging: iio: resolver: ad2s1210: remove config attribute David Lechner
2023-09-30 14:53   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 13/27] staging: iio: resolver: ad2s1210: rework gpios David Lechner
2023-09-30 14:55   ` Jonathan Cameron
2023-10-05 13:38     ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 14/27] staging: iio: resolver: ad2s1210: implement hysteresis as channel attr David Lechner
2023-09-29 17:53   ` David Lechner
2023-09-30 15:00     ` Jonathan Cameron
2023-09-30 21:23       ` David Lechner
2023-09-30 15:03   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 15/27] staging: iio: resolver: ad2s1210: refactor setting excitation frequency David Lechner
2023-09-30 15:06   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 16/27] staging: iio: resolver: ad2s1210: read excitation frequency from control register David Lechner
2023-09-30 15:08   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 17/27] staging: iio: resolver: ad2s1210: convert fexcit to channel attribute David Lechner
2023-09-30 15:12   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 18/27] staging: iio: resolver: ad2s1210: convert resolution to devicetree property David Lechner
2023-09-30 15:15   ` Jonathan Cameron
2023-09-29 17:23 ` [PATCH v3 19/27] staging: iio: resolver: ad2s1210: add phase lock range support David Lechner
2023-09-30 15:18   ` Jonathan Cameron
2023-10-03  8:03   ` kernel test robot
2023-09-29 17:23 ` [PATCH v3 20/27] staging: iio: resolver: ad2s1210: add triggered buffer support David Lechner
2023-09-29 17:23 ` [PATCH v3 21/27] staging: iio: resolver: ad2s1210: convert LOT threshold attrs to event attrs David Lechner
2023-09-30 15:29   ` Jonathan Cameron
2023-10-03 11:11   ` kernel test robot
2023-09-29 17:23 ` [PATCH v3 22/27] staging: iio: resolver: ad2s1210: convert LOS threshold to event attr David Lechner
2023-09-30 15:32   ` Jonathan Cameron
2023-10-04 11:01     ` Hennerich, Michael
2023-10-05 14:16       ` Jonathan Cameron
2023-09-30 15:42   ` Jonathan Cameron
2023-09-30 15:46     ` Jonathan Cameron
2023-10-02 16:09     ` David Lechner
2023-10-05 14:37       ` Jonathan Cameron
2023-10-05 19:25         ` David Lechner
2023-10-03 14:21   ` kernel test robot
2023-09-29 17:23 ` [PATCH v3 23/27] staging: iio: resolver: ad2s1210: convert DOS overrange " David Lechner
2023-09-30 15:33   ` Jonathan Cameron
2023-10-03 17:21   ` kernel test robot
2023-09-29 17:23 ` [PATCH v3 24/27] staging: iio: resolver: ad2s1210: convert DOS mismatch " David Lechner
2023-10-03 20:08   ` kernel test robot
2023-09-29 17:23 ` David Lechner [this message]
2023-09-30 15:47   ` [PATCH v3 25/27] staging: iio: resolver: ad2s1210: rename DOS reset min/max attrs Jonathan Cameron
2023-10-02 17:06     ` David Lechner
2023-10-03 23:23   ` kernel test robot
2023-09-29 17:23 ` [PATCH v3 26/27] staging: iio: resolver: ad2s1210: implement fault events David Lechner
2023-09-30  3:55   ` kernel test robot
2023-09-30 16:00   ` Jonathan Cameron
2023-10-02 16:43     ` David Lechner
2023-10-02 16:58     ` David Lechner
2023-10-02 18:49       ` David Lechner
2023-10-05 14:52       ` Jonathan Cameron
2023-10-03 10:53   ` Dan Carpenter
2023-09-29 17:23 ` [PATCH v3 27/27] staging: iio: resolver: ad2s1210: add label attribute support David Lechner
2023-09-29 17:49 ` [PATCH v3 00/27] iio: resolver: move ad2s1210 out of staging David Lechner
2023-09-30 14:26   ` Jonathan Cameron
2023-09-29 22:02 ` David Lechner

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=20230929-ad2s1210-mainline-v3-25-fa4364281745@baylibre.com \
    --to=dlechner@baylibre.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=ahaslam@baylibre.com \
    --cc=conor+dt@kernel.org \
    --cc=david@lechnology.com \
    --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.