public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Joshua Crofts via B4 Relay <devnull+joshua.crofts1.gmail.com@kernel.org>
To: "Jonathan Cameron" <jic23@kernel.org>,
	"David Lechner" <dlechner@baylibre.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Andy Shevchenko" <andy@kernel.org>
Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
	 Joshua Crofts <joshua.crofts1@gmail.com>,
	 Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: [PATCH v4 07/17] iio: magnetometer: ak8975: pass conversion timeouts as arguments
Date: Mon, 04 May 2026 11:48:19 +0200	[thread overview]
Message-ID: <20260504-magnetometer-fixes-v4-7-a291c2a7c71a@gmail.com> (raw)
In-Reply-To: <20260504-magnetometer-fixes-v4-0-a291c2a7c71a@gmail.com>

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Since we have switched to using macros from iopoll.h it's better to
use poll and timeout values supplied as parameters to the helper
functions. Also added local variables for poll and timeout values
to prevent magic number use.

Besides that, fix the home grown and obviously wrong in some cases the
jiffy-based timeout.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Co-developed-by: Joshua Crofts <joshua.crofts1@gmail.com>
Signed-off-by: Joshua Crofts <joshua.crofts1@gmail.com>
---
 drivers/iio/magnetometer/ak8975.c | 38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
index 2e750c151435da57926969a63ba9fe996d774e7a..e399a6508a3e28931ec2efe07924d5f30cebf442 100644
--- a/drivers/iio/magnetometer/ak8975.c
+++ b/drivers/iio/magnetometer/ak8975.c
@@ -16,6 +16,7 @@
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
 #include <linux/iopoll.h>
+#include <linux/jiffies.h>
 #include <linux/minmax.h>
 #include <linux/mod_devicetable.h>
 #include <linux/module.h>
@@ -133,13 +134,6 @@
 
 #define AK09912_MAX_REGS		AK09912_REG_ASAZ
 
-/*
- * Miscellaneous values.
- */
-#define AK8975_MAX_CONVERSION_TIMEOUT	500
-#define AK8975_CONVERSION_DONE_POLL_TIME 10
-#define AK8975_DATA_READY_TIMEOUT	((100*HZ)/1000)
-
 /*
  * Precalculate scale factor (in Gauss units) for each axis and
  * store in the device data.
@@ -650,7 +644,8 @@ static int ak8975_setup(struct i2c_client *client)
 	return 0;
 }
 
-static int wait_conversion_complete_gpio(struct ak8975_data *data)
+static int wait_conversion_complete_gpio(struct ak8975_data *data, int poll_ms,
+					 int timeout_ms)
 {
 	struct i2c_client *client = data->client;
 	int ret;
@@ -658,8 +653,8 @@ static int wait_conversion_complete_gpio(struct ak8975_data *data)
 
 	/* Wait for the conversion to complete. */
 	ret = readx_poll_timeout(gpiod_get_value, data->eoc_gpiod, val, val != 0,
-				 AK8975_CONVERSION_DONE_POLL_TIME * USEC_PER_MSEC,
-				 AK8975_MAX_CONVERSION_TIMEOUT * USEC_PER_MSEC);
+				 poll_ms * USEC_PER_MSEC,
+				 timeout_ms * USEC_PER_MSEC);
 	if (ret)
 		return ret;
 
@@ -670,7 +665,8 @@ static int wait_conversion_complete_gpio(struct ak8975_data *data)
 	return ret;
 }
 
-static int wait_conversion_complete_polled(struct ak8975_data *data)
+static int wait_conversion_complete_polled(struct ak8975_data *data, int poll_ms,
+					   int timeout_ms)
 {
 	struct i2c_client *client = data->client;
 	int ret;
@@ -678,8 +674,8 @@ static int wait_conversion_complete_polled(struct ak8975_data *data)
 
 	/* Wait for the conversion to complete. */
 	ret = read_poll_timeout(i2c_smbus_read_byte_data, val, val != 0,
-				AK8975_CONVERSION_DONE_POLL_TIME * USEC_PER_MSEC,
-				AK8975_MAX_CONVERSION_TIMEOUT * USEC_PER_MSEC,
+				poll_ms * USEC_PER_MSEC,
+				timeout_ms * USEC_PER_MSEC,
 				true,
 				client, data->def->ctrl_regs[ST1]);
 	if (ret)
@@ -693,13 +689,14 @@ static int wait_conversion_complete_polled(struct ak8975_data *data)
 }
 
 /* Returns 0 if the end of conversion interrupt occurred or -ETIMEDOUT otherwise */
-static int wait_conversion_complete_interrupt(struct ak8975_data *data)
+static int wait_conversion_complete_interrupt(struct ak8975_data *data,
+					      int timeout_ms)
 {
 	int ret;
 
 	ret = wait_event_timeout(data->data_ready_queue,
 				 test_bit(0, &data->flags),
-				 AK8975_DATA_READY_TIMEOUT);
+				 msecs_to_jiffies(timeout_ms));
 	clear_bit(0, &data->flags);
 
 	return ret > 0 ? 0 : -ETIMEDOUT;
@@ -708,6 +705,11 @@ static int wait_conversion_complete_interrupt(struct ak8975_data *data)
 static int ak8975_start_read_axis(struct ak8975_data *data,
 				  const struct i2c_client *client)
 {
+	int irq_timeout_ms = 100;
+	int timeout_ms = 500;
+	int poll_ms = 10;
+	int ret;
+
 	/* Set up the device for taking a sample. */
 	int ret = ak8975_set_mode(data, MODE_ONCE);
 
@@ -718,11 +720,11 @@ static int ak8975_start_read_axis(struct ak8975_data *data,
 
 	/* Wait for the conversion to complete. */
 	if (data->eoc_irq)
-		ret = wait_conversion_complete_interrupt(data);
+		ret = wait_conversion_complete_interrupt(data, irq_timeout_ms);
 	else if (data->eoc_gpiod)
-		ret = wait_conversion_complete_gpio(data);
+		ret = wait_conversion_complete_gpio(data, poll_ms, timeout_ms);
 	else
-		ret = wait_conversion_complete_polled(data);
+		ret = wait_conversion_complete_polled(data, poll_ms, timeout_ms);
 	if (ret < 0)
 		return ret;
 

-- 
2.47.3



  parent reply	other threads:[~2026-05-04  9:48 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-04  9:48 [PATCH v4 00/17] iio: magnetometer: ak8975: modernize and cleanup driver Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 01/17] iio: magnetometer: ak8975: sort headers alphabetically Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 02/17] iio: magnetometer: ak8975: update headers per IWYU principle Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 03/17] iio: magnetometer: ak8975: replace usleep_range() with fsleep() Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 04/17] iio: magnetometer: ak8975: change 'u8*' to 'u8 *' in cast Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 05/17] iio: magnetometer: ak8975: fix wrong errno on return Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 06/17] iio: magnetometer: ak8975: modernize polling loops with iopoll() macros Joshua Crofts via B4 Relay
2026-05-04 11:18   ` Andy Shevchenko
2026-05-04 15:06   ` Jonathan Cameron
2026-05-05  4:57     ` Andy Shevchenko
2026-05-05  7:07       ` Joshua Crofts
2026-05-05  7:21         ` Andy Shevchenko
2026-05-05  7:26           ` Joshua Crofts
2026-05-05  8:07             ` Joshua Crofts
2026-05-05  8:17               ` Andy Shevchenko
2026-05-04  9:48 ` Joshua Crofts via B4 Relay [this message]
2026-05-04 11:10   ` [PATCH v4 07/17] iio: magnetometer: ak8975: pass conversion timeouts as arguments Andy Shevchenko
2026-05-04 11:25     ` Joshua Crofts
2026-05-04 14:06       ` Andy Shevchenko
2026-05-04 14:11         ` Joshua Crofts
2026-05-04 15:07           ` Jonathan Cameron
2026-05-04 11:33   ` Joshua Crofts
2026-05-04 15:09     ` Jonathan Cameron
2026-05-04  9:48 ` [PATCH v4 08/17] iio: magnetometer: ak8975: avoid using temporary variable Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 09/17] iio: magnetometer: ak8975: drop duplicate NULL check Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 10/17] iio: magnetometer: ak8975: remove duplicate error message Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 11/17] iio: magnetometer: ak8975: reduce usage of magic lengths of the buffer Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 12/17] iio: magnetometer: ak8975: unify return code variable name Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 13/17] iio: magnetometer: ak8975: switch to using managed resources Joshua Crofts via B4 Relay
2026-05-04 11:13   ` Andy Shevchenko
2026-05-04 11:28     ` Joshua Crofts
2026-05-04  9:48 ` [PATCH v4 14/17] iio: magnetometer: ak8975: consistently use 'data' parameter Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 15/17] iio: magnetometer: ak8975: unify messages with help of dev_err_probe() Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 16/17] iio: magnetometer: ak8975: use temporary variable for struct device Joshua Crofts via B4 Relay
2026-05-04  9:48 ` [PATCH v4 17/17] iio: magnetometer: ak8975: make use of the macros from bits.h Joshua Crofts via B4 Relay
2026-05-04 11:01 ` [PATCH v4 00/17] iio: magnetometer: ak8975: modernize and cleanup driver Andy Shevchenko
2026-05-04 11:13   ` Joshua Crofts
2026-05-04 15:15     ` 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=20260504-magnetometer-fixes-v4-7-a291c2a7c71a@gmail.com \
    --to=devnull+joshua.crofts1.gmail.com@kernel.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=andy@kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=jic23@kernel.org \
    --cc=joshua.crofts1@gmail.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox