[PATCH V3 0/9] Add Invensense ICM42607

Chris Morgan
2026-03-30T20:01:29Z

Add support for the ICM42607 IMU. This sensor shares the same
functionality but a different register layout with the existing
ICM42600.

This driver should work with the ICM42607 and ICM42607P over both I2C
and SPI, however only the ICM42607P over I2C could be tested.

Changes Since V1:
- Instead of creating a new driver, merged with the existing inv_icm42600
driver. This necessitated adding some code to the existing driver to
permit using a different register layout for the same functionality.
- Split changes up a bit more to decrease the size of the individual
patches. Note that patch 0004 is still pretty hefty; if I need to split
further I may need to create some temporary stub functions.
- Used guard() and PM_RUNTIME_ACQUIRE_AUTOSUSPEND() on the new functions
per Jonathan's recommendations.

Changes Since V2:
- Went back to using a new driver on advice from Invensense engineer.
- Further split changes up into smaller chunks of functionality. Note
still that the largest patch is approximately 900 lines, and that while
the driver compiles cleanly at each commit it is not able to drive the
hardware until the commit that adds the Interrupt (as it also adds the
Makefile).
- Change the error to a warning when the devicetree binding does not match
the hardware ID.
- Dropped the ack on the devicetree bindings, as I am creating a new file
(for a new driver) instead of modifying the existing one.

Chris Morgan (9):
dt-bindings: iio: imu: icm42607: Add devicetree binding
iio: imu: inv_icm42607: Add Core for inv_icm42607 Driver
iio: imu: inv_icm42607: Add I2C and SPI For icm42607
iio: imu: inv_icm42607: Add Buffer support functions to icm42607
iio: imu: inv_icm42607: Add Temperature Support in icm42607
iio: imu: inv_icm42607: Add Accelerometer for icm42607
iio: imu: inv_icm42607: Add Interrupt and Wake on Movement for
icm42607
iio: imu: inv_icm42607: Add Gyroscope to icm42607
arm64: dts: rockchip: Add icm42607p IMU for RG-DS

.../bindings/iio/imu/invensense,icm42607.yaml | 95 ++
.../dts/rockchip/rk3568-anbernic-rg-ds.dts | 20 +-
drivers/iio/imu/Kconfig | 1 +
drivers/iio/imu/Makefile | 1 +
drivers/iio/imu/inv_icm42607/Kconfig | 30 +
drivers/iio/imu/inv_icm42607/Makefile | 14 +
drivers/iio/imu/inv_icm42607/inv_icm42607.h | 472 ++++++++
.../iio/imu/inv_icm42607/inv_icm42607_accel.c | 1028 +++++++++++++++++
.../imu/inv_icm42607/inv_icm42607_buffer.c | 566 +++++++++
.../imu/inv_icm42607/inv_icm42607_buffer.h | 100 ++
.../iio/imu/inv_icm42607/inv_icm42607_core.c | 806 +++++++++++++
.../iio/imu/inv_icm42607/inv_icm42607_gyro.c | 579 ++++++++++
.../iio/imu/inv_icm42607/inv_icm42607_i2c.c | 93 ++
.../iio/imu/inv_icm42607/inv_icm42607_spi.c | 100 ++
.../iio/imu/inv_icm42607/inv_icm42607_temp.c | 81 ++
.../iio/imu/inv_icm42607/inv_icm42607_temp.h | 30 +
16 files changed, 4015 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/iio/imu/invensense,icm42607.yaml
create mode 100644 drivers/iio/imu/inv_icm42607/Kconfig
create mode 100644 drivers/iio/imu/inv_icm42607/Makefile
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607.h
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_accel.c
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_buffer.c
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_buffer.h
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_core.c
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_gyro.c
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_i2c.c
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_spi.c
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_temp.c
create mode 100644 drivers/iio/imu/inv_icm42607/inv_icm42607_temp.h