* [PATCH v2 0/2] iio: imu: inv_icm42600: switch to use generic name irq get
@ 2025-04-07 19:57 Jean-Baptiste Maneyrol via B4 Relay
2025-04-07 19:57 ` [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support Jean-Baptiste Maneyrol via B4 Relay
2025-04-07 19:57 ` [PATCH v2 2/2] iio: imu: inv_icm42600: switch to use generic name irq get Jean-Baptiste Maneyrol via B4 Relay
0 siblings, 2 replies; 5+ messages in thread
From: Jean-Baptiste Maneyrol via B4 Relay @ 2025-04-07 19:57 UTC (permalink / raw)
To: Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Conor Dooley
Cc: linux-iio, devicetree, linux-kernel, Jean-Baptiste Maneyrol
The purpose of this series is to switch to fwnode_irq_get_by_name()
in the core module instead of using irq from the bus parsing.
Add interrupt naming and support only INT1.
Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
---
Changes in v2:
- Add INT2 in interrupt-names enum and fix enum
- Add fallback to first interrupt if naming is not here to ensure
backward compatibility
- Link to v1: https://lore.kernel.org/r/20250404-iio-imu-inv-icm42600-rework-interrupt-using-names-v1-0-72ed5100da14@tdk.com
---
Jean-Baptiste Maneyrol (2):
dt-bindings: iio: imu: icm42600: add interrupt naming support
iio: imu: inv_icm42600: switch to use generic name irq get
.../bindings/iio/imu/invensense,icm42600.yaml | 13 +++++++++++++
drivers/iio/imu/inv_icm42600/inv_icm42600.h | 2 +-
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 17 +++++++++++++++--
drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c | 2 +-
drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c | 2 +-
5 files changed, 31 insertions(+), 5 deletions(-)
---
base-commit: e3ee177e2a3e21ef4502f68336023154049d2acd
change-id: 20250325-iio-imu-inv-icm42600-rework-interrupt-using-names-b397ced72835
Best regards,
--
Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support 2025-04-07 19:57 [PATCH v2 0/2] iio: imu: inv_icm42600: switch to use generic name irq get Jean-Baptiste Maneyrol via B4 Relay @ 2025-04-07 19:57 ` Jean-Baptiste Maneyrol via B4 Relay 2025-04-08 16:23 ` Conor Dooley 2025-04-07 19:57 ` [PATCH v2 2/2] iio: imu: inv_icm42600: switch to use generic name irq get Jean-Baptiste Maneyrol via B4 Relay 1 sibling, 1 reply; 5+ messages in thread From: Jean-Baptiste Maneyrol via B4 Relay @ 2025-04-07 19:57 UTC (permalink / raw) To: Jonathan Cameron, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: linux-iio, devicetree, linux-kernel, Jean-Baptiste Maneyrol From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> Add interrupt-names field for specifying interrupt used. Only INT1 is supported by the driver currently. Add minItems 1 for interrupts since interrupt is mandatory for the driver. Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> --- .../devicetree/bindings/iio/imu/invensense,icm42600.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml b/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml index 7e4492bbd0278a336587dc5ac04da7153453da29..707f2169ce9a3ca41d81560bed15786fe010109e 100644 --- a/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml +++ b/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml @@ -41,6 +41,17 @@ properties: interrupts: maxItems: 1 + interrupt-names: + minItems: 1 + maxItems: 1 + items: + enum: + - INT1 + - INT2 + description: | + choose chip interrupt pin to be used as interrupt input, beware that the + only support interrupt pin is INT1 for the moment. + drive-open-drain: type: boolean @@ -76,6 +87,7 @@ examples: reg = <0x68>; interrupt-parent = <&gpio2>; interrupts = <7 IRQ_TYPE_EDGE_FALLING>; + interrupt-names = "INT1"; vdd-supply = <&vdd>; vddio-supply = <&vddio>; }; @@ -95,6 +107,7 @@ examples: spi-cpol; interrupt-parent = <&gpio1>; interrupts = <2 IRQ_TYPE_EDGE_FALLING>; + interrupt-names = "INT1"; vdd-supply = <&vdd>; vddio-supply = <&vddio>; }; -- 2.49.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support 2025-04-07 19:57 ` [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support Jean-Baptiste Maneyrol via B4 Relay @ 2025-04-08 16:23 ` Conor Dooley 2025-04-09 15:03 ` Jean-Baptiste Maneyrol 0 siblings, 1 reply; 5+ messages in thread From: Conor Dooley @ 2025-04-08 16:23 UTC (permalink / raw) To: jean-baptiste.maneyrol Cc: Jonathan Cameron, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio, devicetree, linux-kernel [-- Attachment #1: Type: text/plain, Size: 2388 bytes --] On Mon, Apr 07, 2025 at 09:57:16PM +0200, Jean-Baptiste Maneyrol via B4 Relay wrote: > From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> > > Add interrupt-names field for specifying interrupt used. Only INT1 > is supported by the driver currently. > > Add minItems 1 for interrupts since interrupt is mandatory for the driver. > > Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> > --- > .../devicetree/bindings/iio/imu/invensense,icm42600.yaml | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml b/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml > index 7e4492bbd0278a336587dc5ac04da7153453da29..707f2169ce9a3ca41d81560bed15786fe010109e 100644 > --- a/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml > +++ b/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml > @@ -41,6 +41,17 @@ properties: > interrupts: > maxItems: 1 > > + interrupt-names: > + minItems: 1 > + maxItems: 1 > + items: > + enum: > + - INT1 > + - INT2 I might be misremembering from looking up the datasheet, but it gave the impression that either all interrupts can be wired to int1 or int1 and int2 are usable. How come maxItems is set to one here, not two? Surely someone could wire them both up, even if the driver only ever uses the former. > + description: | > + choose chip interrupt pin to be used as interrupt input, beware that the > + only support interrupt pin is INT1 for the moment. What linux supports should not be part of the hardware description. > + > drive-open-drain: > type: boolean > > @@ -76,6 +87,7 @@ examples: > reg = <0x68>; > interrupt-parent = <&gpio2>; > interrupts = <7 IRQ_TYPE_EDGE_FALLING>; > + interrupt-names = "INT1"; > vdd-supply = <&vdd>; > vddio-supply = <&vddio>; > }; > @@ -95,6 +107,7 @@ examples: > spi-cpol; > interrupt-parent = <&gpio1>; > interrupts = <2 IRQ_TYPE_EDGE_FALLING>; > + interrupt-names = "INT1"; > vdd-supply = <&vdd>; > vddio-supply = <&vddio>; > }; > > -- > 2.49.0 > > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support 2025-04-08 16:23 ` Conor Dooley @ 2025-04-09 15:03 ` Jean-Baptiste Maneyrol 0 siblings, 0 replies; 5+ messages in thread From: Jean-Baptiste Maneyrol @ 2025-04-09 15:03 UTC (permalink / raw) To: Conor Dooley Cc: Jonathan Cameron, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Hello Conor, the chips have 2 interrupts pins and it is possible to configure each event (data ready, FIFO watermark, ...) to trigger the interrupt pin we want. But the driver is supporting only INT1 interrupt pin. I will modify the binding to report the 2 interrupts with the 2 names and delete the description that was really needed only for the driver limitation. Thanks for your feedback, JB ________________________________________ From: Conor Dooley Sent: Tuesday, April 08, 2025 18:23 To: Jean-Baptiste Maneyrol Cc: Jonathan Cameron; Lars-Peter Clausen; Rob Herring; Krzysztof Kozlowski; Conor Dooley; linux-iio@vger.kernel.org; devicetree@vger.kernel.org; linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support On Mon, Apr 07, 2025 at 09:57:16PM +0200, Jean-Baptiste Maneyrol via B4 Relay wrote: > From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> > > Add interrupt-names field for specifying interrupt used. Only INT1 > is supported by the driver currently. > > Add minItems 1 for interrupts since interrupt is mandatory for the driver. > > Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> > --- > .../devicetree/bindings/iio/imu/invensense,icm42600.yaml | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml b/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml > index 7e4492bbd0278a336587dc5ac04da7153453da29..707f2169ce9a3ca41d81560bed15786fe010109e 100644 > --- a/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml > +++ b/Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml > @@ -41,6 +41,17 @@ properties: > interrupts: > maxItems: 1 > > + interrupt-names: > + minItems: 1 > + maxItems: 1 > + items: > + enum: > + - INT1 > + - INT2 I might be misremembering from looking up the datasheet, but it gave the impression that either all interrupts can be wired to int1 or int1 and int2 are usable. How come maxItems is set to one here, not two? Surely someone could wire them both up, even if the driver only ever uses the former. > + description: | > + choose chip interrupt pin to be used as interrupt input, beware that the > + only support interrupt pin is INT1 for the moment. What linux supports should not be part of the hardware description. > + > drive-open-drain: > type: boolean > > @@ -76,6 +87,7 @@ examples: > reg = <0x68>; > interrupt-parent = <&gpio2>; > interrupts = <7 IRQ_TYPE_EDGE_FALLING>; > + interrupt-names = "INT1"; > vdd-supply = <&vdd>; > vddio-supply = <&vddio>; > }; > @@ -95,6 +107,7 @@ examples: > spi-cpol; > interrupt-parent = <&gpio1>; > interrupts = <2 IRQ_TYPE_EDGE_FALLING>; > + interrupt-names = "INT1"; > vdd-supply = <&vdd>; > vddio-supply = <&vddio>; > }; > > -- > 2.49.0 > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] iio: imu: inv_icm42600: switch to use generic name irq get 2025-04-07 19:57 [PATCH v2 0/2] iio: imu: inv_icm42600: switch to use generic name irq get Jean-Baptiste Maneyrol via B4 Relay 2025-04-07 19:57 ` [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support Jean-Baptiste Maneyrol via B4 Relay @ 2025-04-07 19:57 ` Jean-Baptiste Maneyrol via B4 Relay 1 sibling, 0 replies; 5+ messages in thread From: Jean-Baptiste Maneyrol via B4 Relay @ 2025-04-07 19:57 UTC (permalink / raw) To: Jonathan Cameron, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: linux-iio, devicetree, linux-kernel, Jean-Baptiste Maneyrol From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> Use generic fwnode_irq_get_byname() for getting interrupt pin using interrupt name. Only INT1 is supported by the driver currently. If not found fallback to first defined interrupt to keep compatibility. Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> --- drivers/iio/imu/inv_icm42600/inv_icm42600.h | 2 +- drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 17 +++++++++++++++-- drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c | 2 +- drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600.h b/drivers/iio/imu/inv_icm42600/inv_icm42600.h index 18787a43477b89db12caee597ab040af5c8f52d5..f893dbe6996506a33eb5d3be47e6765a923665c9 100644 --- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h @@ -426,7 +426,7 @@ int inv_icm42600_set_temp_conf(struct inv_icm42600_state *st, bool enable, int inv_icm42600_debugfs_reg(struct iio_dev *indio_dev, unsigned int reg, unsigned int writeval, unsigned int *readval); -int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq, +int inv_icm42600_core_probe(struct regmap *regmap, int chip, inv_icm42600_bus_setup bus_setup); struct iio_dev *inv_icm42600_gyro_init(struct inv_icm42600_state *st); diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c index ef9875d3b79db116f9fb4f6d881a7979292c1792..8ce817a4d5aa78cc8b228ee3064083b336c2c357 100644 --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c @@ -683,12 +683,13 @@ static void inv_icm42600_disable_pm(void *_data) pm_runtime_disable(dev); } -int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq, +int inv_icm42600_core_probe(struct regmap *regmap, int chip, inv_icm42600_bus_setup bus_setup) { struct device *dev = regmap_get_device(regmap); struct inv_icm42600_state *st; - int irq_type; + struct fwnode_handle *fwnode; + int irq, irq_type; bool open_drain; int ret; @@ -697,6 +698,18 @@ int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq, return -ENODEV; } + /* get INT1 only supported interrupt or fallback to first interrupt */ + fwnode = dev_fwnode(dev); + if (!fwnode) + return -ENODEV; + irq = fwnode_irq_get_byname(fwnode, "INT1"); + if (irq < 0 && irq != -EPROBE_DEFER) { + dev_info(dev, "no INT1 interrupt defined, fallback to first interrupt\n"); + irq = fwnode_irq_get(fwnode, 0); + } + if (irq < 0) + return dev_err_probe(dev, irq, "error missing INT1 interrupt\n"); + irq_type = irq_get_trigger_type(irq); if (!irq_type) irq_type = IRQF_TRIGGER_FALLING; diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c index 04e440fe023aa3869529b0f0be003ea0544bfb8d..38cc0d7834fcb96dabc401f29d613cf9fc75b8f5 100644 --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c @@ -67,7 +67,7 @@ static int inv_icm42600_probe(struct i2c_client *client) if (IS_ERR(regmap)) return PTR_ERR(regmap); - return inv_icm42600_core_probe(regmap, chip, client->irq, + return inv_icm42600_core_probe(regmap, chip, inv_icm42600_i2c_bus_setup); } diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c index 2bd2c4c8e50c3fe081e882aca6c64736510b474c..f40a09c4cbfc673e76922d13d61a3634785300ec 100644 --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c @@ -64,7 +64,7 @@ static int inv_icm42600_probe(struct spi_device *spi) if (IS_ERR(regmap)) return PTR_ERR(regmap); - return inv_icm42600_core_probe(regmap, chip, spi->irq, + return inv_icm42600_core_probe(regmap, chip, inv_icm42600_spi_bus_setup); } -- 2.49.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-04-09 15:04 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-04-07 19:57 [PATCH v2 0/2] iio: imu: inv_icm42600: switch to use generic name irq get Jean-Baptiste Maneyrol via B4 Relay 2025-04-07 19:57 ` [PATCH v2 1/2] dt-bindings: iio: imu: icm42600: add interrupt naming support Jean-Baptiste Maneyrol via B4 Relay 2025-04-08 16:23 ` Conor Dooley 2025-04-09 15:03 ` Jean-Baptiste Maneyrol 2025-04-07 19:57 ` [PATCH v2 2/2] iio: imu: inv_icm42600: switch to use generic name irq get Jean-Baptiste Maneyrol via B4 Relay
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox