From: Jonathan Cameron <jic23@kernel.org>
To: Chris Morgan <macroalpha82@gmail.com>
Cc: linux-iio@vger.kernel.org, andy@kernel.org, nuno.sa@analog.com,
dlechner@baylibre.com, jean-baptiste.maneyrol@tdk.com,
linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org,
heiko@sntech.de, conor+dt@kernel.org, krzk+dt@kernel.org,
robh@kernel.org, andriy.shevchenko@intel.com,
Chris Morgan <macromorgan@hotmail.com>
Subject: Re: [PATCH V9 09/11] iio: imu: inv_icm42607: Add IRQ for icm42607
Date: Sun, 31 May 2026 13:49:36 +0100 [thread overview]
Message-ID: <20260531134936.051e9824@jic23-huawei> (raw)
In-Reply-To: <20260530031739.109063-10-macroalpha82@gmail.com>
On Fri, 29 May 2026 22:17:36 -0500
Chris Morgan <macroalpha82@gmail.com> wrote:
> From: Chris Morgan <macromorgan@hotmail.com>
>
> Add IRQ support for the icm42607 driver.
Note I'm only calling out a few things sashiko commented on. Make sure
you verify any others are fixed or false positives.
https://sashiko.dev/#/patchset/20260530031739.109063-1-macroalpha82%40gmail.com
I didn't have anything non sashiko related to add to this patch.
>
> Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
> ---
> .../iio/imu/inv_icm42607/inv_icm42607_core.c | 97 ++++++++++++++++++-
> 1 file changed, 96 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c b/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c
> index 6b623fb679f3..3c91623dffb2 100644
> --- a/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c
> +++ b/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c
> +
> +static irqreturn_t inv_icm42607_irq_handler(int irq, void *_data)
> +{
> + struct inv_icm42607_state *st = _data;
> + struct device *dev = regmap_get_device(st->map);
> + unsigned int status;
> + int ret;
> +
> + mutex_lock(&st->lock);
> +
> + ret = regmap_read(st->map, INV_ICM42607_REG_INT_STATUS, &status);
> + if (ret) {
> + dev_err(dev, "Interrut status read error %d\n", ret);
> + goto out_unlock;
> + }
> +
> + if (status & INV_ICM42607_INT_STATUS_FIFO_FULL)
> + dev_warn(dev, "FIFO full data lost!\n");
> +
> + if (status & INV_ICM42607_INT_STATUS_FIFO_THS) {
> + mutex_unlock(&st->lock);
> + ret = inv_icm42607_buffer_fifo_read(st, 0);
> + if (ret) {
> + dev_err(dev, "FIFO read error %d\n", ret);
> + goto out_unlock;
Sashiko caught this one.
Lock isn't held. This dance is horrible though. Normally we avoid this
by having an unlocked variant of the inner function
__inv_icm42607_buffer_fifo_read() and a locked wrapper without the underscores.
Or push the lock out of there in general and add a __must_hold() marking so
we can detect any paths that don't have the lock.
> + }
> +
> + mutex_lock(&st->lock);
> + ret = inv_icm42607_buffer_fifo_parse(st);
> + if (ret)
> + dev_err(dev, "FIFO parsing error %d\n", ret);
> + }
> +
> +out_unlock:
> + mutex_unlock(&st->lock);
> + return IRQ_HANDLED;
> +}
> +
> static int inv_icm42607_enable_vddio_reg(struct inv_icm42607_state *st)
> {
> int ret;
> @@ -367,13 +452,18 @@ int inv_icm42607_core_probe(struct regmap *regmap,
> {
> struct device *dev = regmap_get_device(regmap);
> struct inv_icm42607_state *st;
> - int irq;
> + int irq, irq_type;
> + bool open_drain;
> int ret;
>
> irq = fwnode_irq_get_byname(dev_fwnode(dev), "INT1");
> if (irq < 0)
> return dev_err_probe(dev, irq, "Unable to get INT1 interrupt\n");
>
> + irq_type = irq_get_trigger_type(irq);
> +
> + open_drain = device_property_read_bool(dev, "drive-open-drain");
> +
> st = devm_kzalloc(dev, sizeof(*st), GFP_KERNEL);
> if (!st)
> return -ENOMEM;
> @@ -433,6 +523,11 @@ int inv_icm42607_core_probe(struct regmap *regmap,
> if (IS_ERR(st->indio_accel))
> return PTR_ERR(st->indio_accel);
>
> + /* Initialize interrupt handling */
> + ret = inv_icm42607_irq_init(st, irq, irq_type, open_drain);
Sashiko asks some stuff about ordering wrt to this call. It is relatively
unusual to register an irq after the driver is exposed to userspace. Tends to
lead to potentially silly races. Can we move it before device registration
and rely on presence checks to handle any interrupts that we see before those
iio devices are registered?
> + if (ret)
> + return ret;
> +
> return 0;
> }
> EXPORT_SYMBOL_NS_GPL(inv_icm42607_core_probe, "IIO_ICM42607");
next prev parent reply other threads:[~2026-05-31 12:49 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-30 3:17 [PATCH V9 00/11] Add Invensense ICM42607 Chris Morgan
2026-05-30 3:17 ` [PATCH V9 01/11] dt-bindings: iio: imu: icm42600: Add mount-matrix to icm42600 Chris Morgan
2026-05-30 3:17 ` [PATCH V9 02/11] dt-bindings: iio: imu: icm42600: Add icm42607 binding Chris Morgan
2026-05-30 7:26 ` Krzysztof Kozlowski
2026-06-01 1:44 ` Chris Morgan
2026-06-01 8:42 ` Krzysztof Kozlowski
2026-06-01 9:15 ` Jonathan Cameron
2026-05-30 3:17 ` [PATCH V9 03/11] iio: imu: inv_icm42607: Add inv_icm42607 Core Driver Chris Morgan
2026-05-30 3:43 ` sashiko-bot
2026-05-31 12:11 ` Jonathan Cameron
2026-05-30 3:17 ` [PATCH V9 04/11] iio: imu: inv_icm42607: Add I2C and SPI For icm42607 Chris Morgan
2026-05-30 3:51 ` sashiko-bot
2026-05-31 12:15 ` Jonathan Cameron
2026-05-30 3:17 ` [PATCH V9 05/11] iio: imu: inv_icm42607: Add PM support for icm42607 Chris Morgan
2026-05-30 3:57 ` sashiko-bot
2026-05-31 12:21 ` Jonathan Cameron
2026-05-30 3:17 ` [PATCH V9 06/11] iio: imu: inv_icm42607: Add Buffer " Chris Morgan
2026-05-30 4:05 ` sashiko-bot
2026-05-31 12:38 ` Jonathan Cameron
2026-06-01 13:50 ` Chris Morgan
2026-06-01 14:36 ` Jonathan Cameron
2026-05-30 3:17 ` [PATCH V9 07/11] iio: imu: inv_icm42607: Add Temp Support in icm42607 Chris Morgan
2026-05-30 4:13 ` sashiko-bot
2026-05-30 3:17 ` [PATCH V9 08/11] iio: imu: inv_icm42607: Add Accelerometer for icm42607 Chris Morgan
2026-05-30 4:22 ` sashiko-bot
2026-05-30 3:17 ` [PATCH V9 09/11] iio: imu: inv_icm42607: Add IRQ " Chris Morgan
2026-05-30 4:23 ` sashiko-bot
2026-05-31 12:49 ` Jonathan Cameron [this message]
2026-05-30 3:17 ` [PATCH V9 10/11] iio: imu: inv_icm42607: Add Gyroscope to icm42607 Chris Morgan
2026-05-30 4:57 ` sashiko-bot
2026-05-31 12:58 ` Jonathan Cameron
2026-06-01 14:37 ` Chris Morgan
2026-06-01 16:39 ` Jonathan Cameron
2026-05-30 3:17 ` [PATCH V9 11/11] arm64: dts: rockchip: Add icm42607p IMU for RG-DS Chris Morgan
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=20260531134936.051e9824@jic23-huawei \
--to=jic23@kernel.org \
--cc=andriy.shevchenko@intel.com \
--cc=andy@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=heiko@sntech.de \
--cc=jean-baptiste.maneyrol@tdk.com \
--cc=krzk+dt@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=macroalpha82@gmail.com \
--cc=macromorgan@hotmail.com \
--cc=nuno.sa@analog.com \
--cc=robh@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox