iio: imu: inv_icm42600: switch to use generic name irq get
authorJean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Thu, 10 Apr 2025 15:39:41 +0000 (17:39 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 22 Apr 2025 18:10:03 +0000 (19:10 +0100)
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>
Link: https://patch.msgid.link/20250410-iio-imu-inv-icm42600-rework-interrupt-using-names-v4-2-19e4e2f8f7eb@tdk.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/inv_icm42600/inv_icm42600.h
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c

index 18787a43477b89db12caee597ab040af5c8f52d5..f893dbe6996506a33eb5d3be47e6765a923665c9 100644 (file)
@@ -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);
index ef9875d3b79db116f9fb4f6d881a7979292c1792..63d46619ebfaa1372171129fca96381ef4606b2e 100644 (file)
@@ -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 fwnode_handle *fwnode = dev_fwnode(dev);
        struct inv_icm42600_state *st;
-       int irq_type;
+       int irq, irq_type;
        bool open_drain;
        int ret;
 
@@ -697,6 +698,15 @@ int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq,
                return -ENODEV;
        }
 
+       /* get INT1 only supported interrupt or fallback to first interrupt */
+       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;
index 04e440fe023aa3869529b0f0be003ea0544bfb8d..a83a47a173d31c3eae9dd0d04745c2c9da8c27d9 100644 (file)
@@ -67,8 +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,
-                                      inv_icm42600_i2c_bus_setup);
+       return inv_icm42600_core_probe(regmap, chip, inv_icm42600_i2c_bus_setup);
 }
 
 /*
index 2bd2c4c8e50c3fe081e882aca6c64736510b474c..53956cd5534c57f37b0daca27c9e541aa05fe56d 100644 (file)
@@ -64,8 +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,
-                                      inv_icm42600_spi_bus_setup);
+       return inv_icm42600_core_probe(regmap, chip, inv_icm42600_spi_bus_setup);
 }
 
 /*