diff --git a/drivers/iio/imu/inv_icm42670/inv_icm42670.h b/drivers/iio/imu/inv_icm42670/inv_icm42670.h index 6deb78ac30e7..99234eb8c339 100644 --- a/drivers/iio/imu/inv_icm42670/inv_icm42670.h +++ b/drivers/iio/imu/inv_icm42670/inv_icm42670.h @@ -243,12 +243,12 @@ #define SHIFT_INT1_POLARITY 0x00 #define BIT_ONLY_INT1_ACTIVE_HIGH \ ((1 << SHIFT_INT1_POLARITY) | \ - (1 << SHIFT_INT1_DRIVE_CIRCUIT) | \ (0 << SHIFT_INT1_MODE)) #define BIT_ONLY_INT1_ACTIVE_LOW \ ((0 << SHIFT_INT1_POLARITY) | \ - (1 << SHIFT_INT1_DRIVE_CIRCUIT) | \ (0 << SHIFT_INT1_MODE)) +#define BIT_ONLY_INT1_OPEN_DRAIN (0 << SHIFT_INT1_DRIVE_CIRCUIT) +#define BIT_ONLY_INT1_PUSH_PULL (1 << SHIFT_INT1_DRIVE_CIRCUIT) /* Bank0 REG_PWR_MGMT_0 */ #define BIT_PWR_MGMTO_ACCEL_LP_CLK_SEL BIT(7) diff --git a/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c b/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c index 0f7de499958c..abb39f4a2396 100644 --- a/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c +++ b/drivers/iio/imu/inv_icm42670/inv_icm42670_core.c @@ -1071,6 +1071,11 @@ int icm42670_core_probe(struct regmap *regmap, return -EINVAL; } + if (device_property_read_bool(dev, "drive-open-drain")) + data->irq_mask |= BIT_ONLY_INT1_OPEN_DRAIN; + else + data->irq_mask |= BIT_ONLY_INT1_PUSH_PULL; + data->vdd_supply = devm_regulator_get(dev, "vcc_3v3_s0"); if (IS_ERR(data->vdd_supply)) { dev_err(dev, "Could not find vdd_avdd!\n");