[PATCH v3 2/3] iio: imu: inv_icm42600: drop the whoami check
Jorijn van der Graaf <[email protected]>
| Newsgroups | org.kernel.vger.linux-iio,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
A WHOAMI value differing from the one the compatible implies aborts probe with -ENODEV, preventing a register-compatible part described with a fallback compatible from probing at all. The devicetree compatible is authoritative for which part is fitted: drop the check, and with it the now-unused whoami definitions. No warning replaces it, since probing via a fallback compatible is legitimate use, not a condition to report. This changes the probe outcome on mismatch for all parts the driver supports. Tested via a backport to a Fairphone 6 running a 7.1-based kernel: its ICM-42630 (WHOAMI 0x0C), described with an icm42631 fallback compatible and matched as icm42631, probes silently, and accelerometer, gyroscope and temperature reads work. Suggested-by: Conor Dooley <[email protected]> Link: https://lore.kernel.org/all/20260722-creature-volley-0f083b904c1d@spud/ Link: https://lore.kernel.org/all/20260728-extradite-yanking-42d918637f61@spud/ Assisted-by: Claude:claude-fable-5 Signed-off-by: Jorijn van der Graaf <[email protected]> --- v3: drop the check and the now-unused whoami definitions instead of demoting the mismatch error to a warning (Conor); retested on the device. New in v2, as a demotion of the error to a warning. drivers/iio/imu/inv_icm42600/inv_icm42600.h | 9 --------- .../iio/imu/inv_icm42600/inv_icm42600_core.c | 17 ----------------- 2 files changed, 26 deletions(-) diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600.h b/drivers/iio/imu/inv_icm42600/inv_icm42600.h index b55d993f0264..88acdbab14c3 100644 --- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h @@ -378,15 +378,6 @@ struct inv_icm42600_sensor_state { #define INV_ICM42600_INT_SOURCE1_SMD_INT1_EN BIT(3) #define INV_ICM42600_INT_SOURCE1_WOM_INT1_EN GENMASK(2, 0) -#define INV_ICM42600_REG_WHOAMI 0x0075 -#define INV_ICM42600_WHOAMI_ICM42600 0x40 -#define INV_ICM42600_WHOAMI_ICM42602 0x41 -#define INV_ICM42600_WHOAMI_ICM42605 0x42 -#define INV_ICM42600_WHOAMI_ICM42686 0x44 -#define INV_ICM42600_WHOAMI_ICM42622 0x46 -#define INV_ICM42600_WHOAMI_ICM42688 0x47 -#define INV_ICM42600_WHOAMI_ICM42631 0x5C - /* User bank 1 (MSB 0x10) */ #define INV_ICM42600_REG_SENSOR_CONFIG0 0x1003 #define INV_ICM42600_SENSOR_CONFIG0_ZG_DISABLE BIT(5) diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c index dc97d8a274e3..963c9425e31a 100644 --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c @@ -103,7 +103,6 @@ const struct regmap_config inv_icm42600_spi_regmap_config = { EXPORT_SYMBOL_NS_GPL(inv_icm42600_spi_regmap_config, "IIO_ICM42600"); struct inv_icm42600_hw { - u8 whoami; const char *name; const struct inv_icm42600_conf *conf; }; @@ -143,37 +142,30 @@ static const struct inv_icm42600_conf inv_icm42686_default_conf = { static const struct inv_icm42600_hw inv_icm42600_hw[INV_CHIP_NB] = { [INV_CHIP_ICM42600] = { - .whoami = INV_ICM42600_WHOAMI_ICM42600, .name = "icm42600", .conf = &inv_icm42600_default_conf, }, [INV_CHIP_ICM42602] = { - .whoami = INV_ICM42600_WHOAMI_ICM42602, .name = "icm42602", .conf = &inv_icm42600_default_conf, }, [INV_CHIP_ICM42605] = { - .whoami = INV_ICM42600_WHOAMI_ICM42605, .name = "icm42605", .conf = &inv_icm42600_default_conf, }, [INV_CHIP_ICM42686] = { - .whoami = INV_ICM42600_WHOAMI_ICM42686, .name = "icm42686", .conf = &inv_icm42686_default_conf, }, [INV_CHIP_ICM42622] = { - .whoami = INV_ICM42600_WHOAMI_ICM42622, .name = "icm42622", .conf = &inv_icm42600_default_conf, }, [INV_CHIP_ICM42688] = { - .whoami = INV_ICM42600_WHOAMI_ICM42688, .name = "icm42688", .conf = &inv_icm42600_default_conf, }, [INV_CHIP_ICM42631] = { - .whoami = INV_ICM42600_WHOAMI_ICM42631, .name = "icm42631", .conf = &inv_icm42600_default_conf, }, @@ -505,15 +497,6 @@ static int inv_icm42600_setup(struct inv_icm42600_state *st, unsigned int val; int ret; - /* check chip self-identification value */ - ret = regmap_read(st->map, INV_ICM42600_REG_WHOAMI, &val); - if (ret) - return ret; - if (val != hw->whoami) { - dev_err(dev, "invalid whoami %#02x expected %#02x (%s)\n", - val, hw->whoami, hw->name); - return -ENODEV; - } st->name = hw->name; /* reset to make sure previous state are not there */ -- 2.55.0