From 4ebddb8c853fc5dd1e6dc7662f7de4dec5e699ba Mon Sep 17 00:00:00 2001 From: LiuDiMing Lin Date: Wed, 26 Feb 2025 14:52:51 +0800 Subject: [PATCH] iio: imu: inv_icm42670: use gpiod_to_irq to get interrupts instead Change-Id: I968b7f0186d0ad3bbe926a47dbed2f173d6538ce Signed-off-by: LiuDiMing Lin --- drivers/iio/imu/inv_icm42670/inv_icm42670.h | 2 +- .../iio/imu/inv_icm42670/inv_icm42670_core.c | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/iio/imu/inv_icm42670/inv_icm42670.h b/drivers/iio/imu/inv_icm42670/inv_icm42670.h index d7c863f71cbf..3dc9d042455b 100644 --- a/drivers/iio/imu/inv_icm42670/inv_icm42670.h +++ b/drivers/iio/imu/inv_icm42670/inv_icm42670.h @@ -520,7 +520,7 @@ struct icm42670_data { struct regmap *regmap; struct iio_trigger *trig; struct device_node *node; - int int1_gpio; + struct gpio_desc *int1_gpiod; struct regulator *vdd_supply; struct regulator *vddio_supply; u16 accel_frequency; diff --git a/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c b/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c index 8b249c10a7e8..5bb09a83139b 100644 --- a/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c +++ b/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c @@ -1092,10 +1092,6 @@ static int icm42670_chip_init(struct icm42670_data *data, icm42670_bus_setup bus dev_err(dev, "reset done status bit missing (%0x)\n", regval); return -ENODEV; } - // Configure the INT1 GPIO as input - ret = gpio_direction_input(data->int1_gpio); - if (ret < 0) - dev_err(dev, "gpio_direction_input failed!\r\n"); /* set chip bus configuration */ ret = bus_setup(data); @@ -1224,11 +1220,16 @@ int icm42670_core_probe(struct regmap *regmap, if (data->node == NULL) dev_err(dev, "ic2 node not find!\n"); - data->int1_gpio = of_get_named_gpio(data->node, "int1-gpio", 0); - if (data->int1_gpio < 0) { - dev_err(dev, "Could not get int1_gpio!\n"); - return -EINVAL; - } + data->int1_gpiod = devm_gpiod_get(dev, "int1", GPIOD_IN); + if (IS_ERR(data->int1_gpiod)) + return dev_err_probe(dev, PTR_ERR(data->int1_gpiod), "Could not get int1 gpio\n"); + + /* Get the same result through gpiod_to_irq to ensure that + * the affinity can be restored after CPU off/on + */ + irq = gpiod_to_irq(data->int1_gpiod); + if (irq < 0) + return dev_err_probe(dev, irq, "Could not get IRQ from GPIO\n"); data->enable_fifo = of_property_read_bool(data->node, "enable-fifo"); if (true != data->enable_fifo)