[PATCH v3 2/2] iio: imu: inv_icm42600: switch to use generic name irq get

Jean-Baptiste Maneyrol via B4 Relay posted 2 patches 8 months, 2 weeks ago
There is a newer version of this series
[PATCH v3 2/2] iio: imu: inv_icm42600: switch to use generic name irq get
Posted by Jean-Baptiste Maneyrol via B4 Relay 8 months, 2 weeks ago
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
Re: [PATCH v3 2/2] iio: imu: inv_icm42600: switch to use generic name irq get
Posted by Andy Shevchenko 8 months, 2 weeks ago
On Wed, Apr 09, 2025 at 05:14:32PM +0200, Jean-Baptiste Maneyrol via B4 Relay wrote:
> 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.

...

> -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);

If you use 100 limit, it fits now on one line.

...

> -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)

Ditto.

...

> +	struct fwnode_handle *fwnode;

Do you need to include property.h?

...

> +	/* get INT1 only supported interrupt or fallback to first interrupt */
> +	fwnode = dev_fwnode(dev);

> +	if (!fwnode)
> +		return -ENODEV;

Unneeded check, the below will do it for you,

> +	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");

...

> -	return inv_icm42600_core_probe(regmap, chip, client->irq,
> +	return inv_icm42600_core_probe(regmap, chip,
>  				       inv_icm42600_i2c_bus_setup);

This is now one line (81 characters which is fine independently on your choice
of the limit).

...

> -	return inv_icm42600_core_probe(regmap, chip, spi->irq,
> +	return inv_icm42600_core_probe(regmap, chip,
>  				       inv_icm42600_spi_bus_setup);

One line.

-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH v3 2/2] iio: imu: inv_icm42600: switch to use generic name irq get
Posted by Jonathan Cameron 8 months, 2 weeks ago
On Wed, 9 Apr 2025 20:07:43 +0300
Andy Shevchenko <andy@kernel.org> wrote:

> On Wed, Apr 09, 2025 at 05:14:32PM +0200, Jean-Baptiste Maneyrol via B4 Relay wrote:
> > 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.  
> 
> ...
> 
> > -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);  
> 
> If you use 100 limit, it fits now on one line.

I'd rather stick to 'just over 80' where it really helps. Rather than
generally switch to 100.  Maybe that day will come but I'm not sure it is
yet.

> 
> ...
> 
> > -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)  
> 
> Ditto.
> 
> ...
> 
> > +	struct fwnode_handle *fwnode;  
> 
> Do you need to include property.h?
> 
> ...
> 
> > +	/* get INT1 only supported interrupt or fallback to first interrupt */
> > +	fwnode = dev_fwnode(dev);  
> 
> > +	if (!fwnode)
> > +		return -ENODEV;  
> 
> Unneeded check, the below will do it for you,
> 
> > +	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");  
> 
> ...
> 
> > -	return inv_icm42600_core_probe(regmap, chip, client->irq,
> > +	return inv_icm42600_core_probe(regmap, chip,
> >  				       inv_icm42600_i2c_bus_setup);  
> 
> This is now one line (81 characters which is fine independently on your choice
> of the limit).
> 
> ...
> 
> > -	return inv_icm42600_core_probe(regmap, chip, spi->irq,
> > +	return inv_icm42600_core_probe(regmap, chip,
> >  				       inv_icm42600_spi_bus_setup);  
> 
> One line.
>