Re: [PATCH 2/2] iio: imu: inv_icm42600: add support for icm42630

From: Jean-Baptiste Maneyrol

Date: Tue Jul 21 2026 - 03:18:26 EST


>
>________________________________________
>From: Jorijn van der Graaf <jorijnvdgraaf@xxxxxxxxxxxxx>
>Sent: Monday, July 20, 2026 19:34
>To: Jonathan Cameron; Jean-Baptiste Maneyrol
>Cc: Jorijn van der Graaf; David Lechner; Nuno Sá; Andy Shevchenko; Rob Herring; Krzysztof Kozlowski; Conor Dooley; Chris Morgan; Luca Weiss; linux-iio@xxxxxxxxxxxxxxx; devicetree@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
>Subject: [PATCH 2/2] iio: imu: inv_icm42600: add support for icm42630
>
>The TDK InvenSense ICM-42630 is a 6-axis IMU of the ICM-42600 family, found e. g. in the Fairphone 6. It is register-compatible with its siblings (the existing driver works on it unmodified) and reports WHOAMI value 0x0C. The part appears to
>ZjQcmQRYFpfptBannerStart
>This Message Is From an External Sender
>This message came from outside your organization.
>
>ZjQcmQRYFpfptBannerEnd
>
>The TDK InvenSense ICM-42630 is a 6-axis IMU of the ICM-42600 family,
>found e.g. in the Fairphone 6. It is register-compatible with its
>siblings (the existing driver works on it unmodified) and reports
>WHOAMI value 0x0C.
>
>The part appears to be a mobile SKU and has no public datasheet: the
>identity comes from the Fairphone 6 platform documentation and
>schematics naming the part, and the WHOAMI value was read from the
>hardware, whose bank 0 register defaults match the ICM-42600 family
>layout.
>
>Add the chip id, WHOAMI value and I2C/SPI match entries, using the
>family default configuration like the ICM-42631.
>
>Tested on the Fairphone 6 via a backport of this change to the
>device's 7.1-based kernel (only the id-table style adjusted to that
>base), on a bit-banged SPI bus with INT1 wired to the SoC: probe,
>accelerometer, gyroscope and temperature raw reads, all full-scale
>ranges, multiple sampling frequencies, and watermark-paced FIFO reads
>through the INT1 interrupt.
>
>Assisted-by: Claude:claude-fable-5
>Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@xxxxxxxxxxxxx>
>---
> drivers/iio/imu/inv_icm42600/inv_icm42600.h | 2 ++
> drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 5 +++++
> drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c | 4 ++++
> drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c | 4 ++++
> 4 files changed, 15 insertions(+)
>
>diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600.h b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
>index b55d993f0264..349de5458581 100644
>--- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h
>+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
>@@ -28,6 +28,7 @@ enum inv_icm42600_chip {
> INV_CHIP_ICM42622,
> INV_CHIP_ICM42688,
> INV_CHIP_ICM42631,
>+ INV_CHIP_ICM42630,
> INV_CHIP_NB,
> };
>
>@@ -386,6 +387,7 @@ struct inv_icm42600_sensor_state {
> #define INV_ICM42600_WHOAMI_ICM42622 0x46
> #define INV_ICM42600_WHOAMI_ICM42688 0x47
> #define INV_ICM42600_WHOAMI_ICM42631 0x5C
>+#define INV_ICM42600_WHOAMI_ICM42630 0x0C
>
> /* User bank 1 (MSB 0x10) */
> #define INV_ICM42600_REG_SENSOR_CONFIG0 0x1003
>diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
>index dc97d8a274e3..9a31ca3615b3 100644
>--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
>+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
>@@ -177,6 +177,11 @@ static const struct inv_icm42600_hw inv_icm42600_hw[INV_CHIP_NB] = {
> .name = "icm42631",
> .conf = &inv_icm42600_default_conf,
> },
>+ [INV_CHIP_ICM42630] = {
>+ .whoami = INV_ICM42600_WHOAMI_ICM42630,
>+ .name = "icm42630",
>+ .conf = &inv_icm42600_default_conf,
>+ },
> };
>
> const struct iio_mount_matrix *
>diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
>index 28552d2db91d..c413904c8680 100644
>--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
>+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
>@@ -81,6 +81,7 @@ static const struct i2c_device_id inv_icm42600_id[] = {
> { .name = "icm42622", .driver_data = INV_CHIP_ICM42622 },
> { .name = "icm42688", .driver_data = INV_CHIP_ICM42688 },
> { .name = "icm42631", .driver_data = INV_CHIP_ICM42631 },
>+ { .name = "icm42630", .driver_data = INV_CHIP_ICM42630 },
> { }
> };
> MODULE_DEVICE_TABLE(i2c, inv_icm42600_id);
>@@ -107,6 +108,9 @@ static const struct of_device_id inv_icm42600_of_matches[] = {
> }, {
> .compatible = "invensense,icm42631",
> .data = (void *)INV_CHIP_ICM42631,
>+ }, {
>+ .compatible = "invensense,icm42630",
>+ .data = (void *)INV_CHIP_ICM42630,
> },
> { }
> };
>diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
>index faf743bc6444..a1d12ce3bf87 100644
>--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
>+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
>@@ -78,6 +78,7 @@ static const struct spi_device_id inv_icm42600_id[] = {
> { .name = "icm42622", .driver_data = INV_CHIP_ICM42622 },
> { .name = "icm42688", .driver_data = INV_CHIP_ICM42688 },
> { .name = "icm42631", .driver_data = INV_CHIP_ICM42631 },
>+ { .name = "icm42630", .driver_data = INV_CHIP_ICM42630 },
> { }
> };
> MODULE_DEVICE_TABLE(spi, inv_icm42600_id);
>@@ -104,6 +105,9 @@ static const struct of_device_id inv_icm42600_of_matches[] = {
> }, {
> .compatible = "invensense,icm42631",
> .data = (void *)INV_CHIP_ICM42631,
>+ }, {
>+ .compatible = "invensense,icm42630",
>+ .data = (void *)INV_CHIP_ICM42630,
> },
> { }
> };
>--
>2.55.0
>

Hello Jorijn,

it is OK for me, thanks for the patch.

Acked-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@xxxxxxx>

Thanks,
JB