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 v5 06/18] iio: magnetometer: ak8975: pass conversion timeouts as arguments
Date: Tue, 05 May 2026 13:46:02 +0200	[thread overview]
Message-ID: <20260505-magnetometer-fixes-v5-6-831b9b5550fc@gmail.com> (raw)
In-Reply-To: <20260505-magnetometer-fixes-v5-0-831b9b5550fc@gmail.com>

From: Joshua Crofts <joshua.crofts1@gmail.com>

Refactor wait_conversion_complete*_() helper function to accept poll
and timeout values directly as parameters. This improves the
readability of the code and does not rely on hardcoded macros.

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

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

diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
index 57f50c09cca539c3733f516a1617375e9134c349..83878ea28b91d8316d2cc31e57fde6da957af689 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>
@@ -132,13 +133,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.
@@ -649,18 +643,19 @@ 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,
+					 unsigned int poll_ms,
+					 unsigned int timeout_ms)
 {
 	struct i2c_client *client = data->client;
-	u32 timeout_ms = AK8975_MAX_CONVERSION_TIMEOUT;
 	int ret;
 
 	/* Wait for the conversion to complete. */
 	while (timeout_ms) {
-		msleep(AK8975_CONVERSION_DONE_POLL_TIME);
+		msleep(poll_ms);
 		if (gpiod_get_value(data->eoc_gpiod))
 			break;
-		timeout_ms -= AK8975_CONVERSION_DONE_POLL_TIME;
+		timeout_ms -= poll_ms;
 	}
 	if (!timeout_ms)
 		return -ETIMEDOUT;
@@ -672,16 +667,17 @@ 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,
+					   unsigned int poll_ms,
+					   unsigned int timeout_ms)
 {
 	struct i2c_client *client = data->client;
 	u8 read_status;
-	u32 timeout_ms = AK8975_MAX_CONVERSION_TIMEOUT;
 	int ret;
 
 	/* Wait for the conversion to complete. */
 	while (timeout_ms) {
-		msleep(AK8975_CONVERSION_DONE_POLL_TIME);
+		msleep(poll_ms);
 		ret = i2c_smbus_read_byte_data(client,
 					       data->def->ctrl_regs[ST1]);
 		if (ret < 0) {
@@ -691,7 +687,7 @@ static int wait_conversion_complete_polled(struct ak8975_data *data)
 		read_status = ret;
 		if (read_status)
 			break;
-		timeout_ms -= AK8975_CONVERSION_DONE_POLL_TIME;
+		timeout_ms -= poll_ms;
 	}
 	if (!timeout_ms)
 		return -ETIMEDOUT;
@@ -700,13 +696,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,
+					      unsigned 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;
@@ -715,9 +712,10 @@ 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)
 {
-	/* Set up the device for taking a sample. */
-	int ret = ak8975_set_mode(data, MODE_ONCE);
+	int ret;
 
+	/* Set up the device for taking a sample. */
+	ret = ak8975_set_mode(data, MODE_ONCE);
 	if (ret < 0) {
 		dev_err(&client->dev, "Error in setting operating mode\n");
 		return ret;
@@ -725,11 +723,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, 100);
 	else if (data->eoc_gpiod)
-		ret = wait_conversion_complete_gpio(data);
+		ret = wait_conversion_complete_gpio(data, 10, 500);
 	else
-		ret = wait_conversion_complete_polled(data);
+		ret = wait_conversion_complete_polled(data, 10, 500);
 	if (ret < 0)
 		return ret;
 

-- 
2.47.3



  parent reply	other threads:[~2026-05-05 11:46 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-05 11:45 [PATCH v5 00/18] iio: magnetometer: ak8975: modernize and cleanup driver Joshua Crofts via B4 Relay
2026-05-05 11:45 ` [PATCH v5 01/18] iio: magnetometer: ak8975: sort headers alphabetically Joshua Crofts via B4 Relay
2026-05-05 23:46   ` Maxwell Doose
2026-05-06 16:36     ` Jonathan Cameron
2026-05-05 11:45 ` [PATCH v5 02/18] iio: magnetometer: ak8975: update headers per IWYU principle Joshua Crofts via B4 Relay
2026-05-06  0:38   ` Maxwell Doose
2026-05-06 16:37     ` Jonathan Cameron
2026-05-05 11:45 ` [PATCH v5 03/18] iio: magnetometer: ak8975: replace usleep_range() with fsleep() Joshua Crofts via B4 Relay
2026-05-05 20:30   ` Maxwell Doose
2026-05-05 21:26     ` Joshua Crofts
2026-05-05 21:42       ` Maxwell Doose
2026-05-05 21:59         ` Joshua Crofts
2026-05-05 22:12           ` Maxwell Doose
2026-05-06  6:19       ` Andy Shevchenko
2026-05-06  6:35         ` Maxwell Doose
2026-05-06 16:39           ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 04/18] iio: magnetometer: ak8975: change 'u8*' to 'u8 *' in cast Joshua Crofts via B4 Relay
2026-05-06  0:47   ` Maxwell Doose
2026-05-06  6:30   ` Andy Shevchenko
2026-05-06 16:40     ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 05/18] iio: magnetometer: ak8975: fix wrong errno on return Joshua Crofts via B4 Relay
2026-05-06 16:41   ` Jonathan Cameron
2026-05-05 11:46 ` Joshua Crofts via B4 Relay [this message]
2026-05-06  6:34   ` [PATCH v5 06/18] iio: magnetometer: ak8975: pass conversion timeouts as arguments Andy Shevchenko
2026-05-06  7:02     ` Joshua Crofts
2026-05-06  7:20       ` Andy Shevchenko
2026-05-06  7:28         ` Joshua Crofts
2026-05-06  7:32           ` Andy Shevchenko
2026-05-06 16:51             ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 07/18] iio: magnetometer: ak8975: modernize polling loops with iopoll() macros Joshua Crofts via B4 Relay
2026-05-06  6:53   ` Andy Shevchenko
2026-05-06  7:01     ` Joshua Crofts
2026-05-06 10:50       ` Joshua Crofts
2026-05-06 13:08         ` Andy Shevchenko
2026-05-06 16:52           ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 08/18] iio: magnetometer: ak8975: check if gpiod read was successful Joshua Crofts via B4 Relay
2026-05-06  1:09   ` Maxwell Doose
2026-05-06  1:42     ` Maxwell Doose
2026-05-06  7:11       ` Andy Shevchenko
2026-05-06  7:13         ` Maxwell Doose
2026-05-06  7:16           ` Andy Shevchenko
2026-05-06  7:21             ` Maxwell Doose
2026-05-06  7:31             ` Joshua Crofts
2026-05-06  7:05     ` Joshua Crofts
2026-05-06 16:48       ` Jonathan Cameron
2026-05-06  7:07     ` Andy Shevchenko
2026-05-06  7:11       ` Maxwell Doose
2026-05-06  6:53   ` Andy Shevchenko
2026-05-06  7:07     ` Joshua Crofts
2026-05-05 11:46 ` [PATCH v5 09/18] iio: magnetometer: ak8975: avoid using temporary variable Joshua Crofts via B4 Relay
2026-05-06 16:54   ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 10/18] iio: magnetometer: ak8975: drop duplicate NULL check Joshua Crofts via B4 Relay
2026-05-06 16:55   ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 11/18] iio: magnetometer: ak8975: remove duplicate error message Joshua Crofts via B4 Relay
2026-05-06 16:56   ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 12/18] iio: magnetometer: ak8975: reduce usage of magic lengths of the buffer Joshua Crofts via B4 Relay
2026-05-06 16:56   ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 13/18] iio: magnetometer: ak8975: unify return code variable name Joshua Crofts via B4 Relay
2026-05-06 16:57   ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 14/18] iio: magnetometer: ak8975: switch to using managed resources Joshua Crofts via B4 Relay
2026-05-05 14:34   ` Joshua Crofts
2026-05-06  8:21     ` Andy Shevchenko
2026-05-06 17:09   ` Jonathan Cameron
2026-05-05 11:46 ` [PATCH v5 15/18] iio: magnetometer: ak8975: consistently use 'data' parameter Joshua Crofts via B4 Relay
2026-05-05 11:46 ` [PATCH v5 16/18] iio: magnetometer: ak8975: unify messages with help of dev_err_probe() Joshua Crofts via B4 Relay
2026-05-05 11:46 ` [PATCH v5 17/18] iio: magnetometer: ak8975: use temporary variable for struct device Joshua Crofts via B4 Relay
2026-05-05 11:46 ` [PATCH v5 18/18] iio: magnetometer: ak8975: make use of the macros from bits.h Joshua Crofts via B4 Relay
2026-05-06 17:12   ` Jonathan Cameron
2026-05-06 21:25     ` Andy Shevchenko

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=20260505-magnetometer-fixes-v5-6-831b9b5550fc@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