[PATCH v4 0/5] Add support for InvenSense ICM-42370-P accelerometer
From: Kanak Shilledar
Date: Thu Sep 17 2026 - 10:46:58 EST
InvenSense ICM42370P is a high performance MEMS MotionTracking 3-axis
accelerometer. It supports I2C, I3C and SPI protocols. It has a 2.25kB
FIFO and two programmable interrupts with support for ultra-low-power
wake-on-motion support. It has a built-in temperature sensor. This
patch series adds basic support for the sensor with functionality of
performing raw reads and writes via the I2C interface.
This device contains 4 register banks for configuring the device called
MREG0, MREG1, MREG2 and MREG3. Unlike other devices from the same
vendor, this contains a very different way of accessing the register
banks apart from the default user bank 0 (MREG0). The register bank access
procedure is mentioned in the datasheet Section 13. This is very
similar to the existing InvenSense, ICM-42607-P driver. Thus, it
improves the existing driver support and adds the ICM-42370-P device to
it.
While adding the support for new device, I tried to perform some fixes
to the existing driver which were pointed out in the v2 of this patch
series.
The buffer support will be added in another patch series.
Note: The datasheet for InvenSense, ICM-42607-P could not be found on the
official https://www.invensense.tdk.com/en-us website. Thus, I am
using the datasheet available at https://www.lcsc.com.
Datasheet: https://www.invensense.tdk.com/en-us/products/3-axis/icm-42370-p
Datasheet: https://www.lcsc.com/product-detail/C5129967.html
Signed-off-by: Kanak Shilledar <kanak.shilledar@xxxxxxxx>
---
Changes in v4:
- Drop the little endian ABI change patch.
- Drop the odr formatting patch.
- Drop the gyroscope calibbias implementation patch.
- Reword commit subject for changes to the IIO channels macro.
- Fix formatting across patch stack.
* DT bindings
- Reword the commit message of dt-bindings patch.
- Drop the MAINTAINERS entry.
* ICM42370-P support
- Update the probe to select gyroscope functionality based on the
chipinfo struct based on the `has_gyro` member.
- Drop setting gyro member in the `inv_icm42370_default_conf` struct to
NULL.
* MREG bank access
- Update the bank access as per @Jean's comment to make it similar to
icm45600 driver.
- Use the regmap approach to handle bank access.
- Dropped setting the default configuration for the ICM42370 to be
always start in the LOW_POWER mode.
* Calibbias support
- Add calibbias to `inv_icm42607_accel_read_avail()` function.
- Instead of clamping out of range values reject them with -EINVAL.
- Fix return handling of calibbias functions.
- Link to v3: https://patch.msgid.link/20260901-b4-inv_icm42370p-v3-0-77cc31642115@xxxxxxxx
Changes in v3:
- Updated the cover letter to match the implementation.
- Add SPI properties to dt-bindings and fix typo (leave out I3C for now).
- Move the implementation to inv_icm42607 driver as both are similar
devices.
- Fix formatting of the drivers based on the comments received in v2.
- Switch endianness of the driver.
- Update mreg checking to perform bank access even if the device is in
OFF or LOW POWER state.
- Implement mreg read writes and calibbias support for inv_icm42607
driver.
- Drop buffer and interrupt handling implementation for next patch series.
- Link to v2: https://patch.msgid.link/20260813-b4-inv_icm42370p-v2-0-11aedfdf76d3@xxxxxxxx
Changes in v2:
* Changes across all files
- Update MAINTAINERS with company mailing list
- Sort/Cleanup of includes
- Use `guard(mutex)` and newer `pm_runtime` APIs
- Fix code formatting and add empty lines
- Be consistent in inv_icm42370_data variable name
- Fix MODULE_DESCRIPTION
- Drop secondary state struct and merge it's properties in
`inv_icm42370_data` struct
- Update mreg_read/write function calls
- Change the compatible and filename to `icm42370p`
* Changes to dt-binding
- Add dependencies property
- Made vdd and vddio supply as required
- Add description to drive-open-drain property
- Add mount-matrix property
- Add interrupt-names property
* Changes to `inv_icm42370.h` and `inv_icm42370_buffer.h`:
- Resturcture the file according to @Marcelo's advice
- Move struct __aligned properties to the end
* Changes to `inv_icm42370_core.c`:
- Fix _accel_scale[] values
- Add IIO_TIMESTAMP to channel spec
- Update mreg_read/write to fix bank access
- Replace usleep_range() with fsleep()
- Use constants from linux/units.h
- Call `_update_fifo_period()` after updating the ODR values
- Fix mathematical error in offset calculation
- Implement handling of mount matrix
- Implement handling of named interrupts
- Use devm_regulator_get_enable for the vdd/vddio regulators
- Use better error handling
- Move iio device registration after performing IRQ init
* Changes to `inv_icm42370_i2c.c`
- Change compatible string as per the binding
- Use named identifiers
- Add `id_table` to the i2c_driver struct
* Changes to `inv_icm42370_buffer.c`
- Update FIFO enable/disable logic
- Update FIFO buffer to match the specification and handle increased
size dynamically.
- Link to v1: https://patch.msgid.link/20260806-b4-inv_icm42370p-v1-0-670837f5842f@xxxxxxxx
To: Kanak Shilledar <kanak.shilledar@xxxxxxxx>
To: Henrik Grimler <henrik.grimler@xxxxxxxx>
To: Jonathan Cameron <jic23@xxxxxxxxxx>
To: David Lechner <dlechner@xxxxxxxxxxxx>
To: Nuno Sá <nuno.sa@xxxxxxxxxx>
To: Andy Shevchenko <andy@xxxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>
To: Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>
To: Conor Dooley <conor+dt@xxxxxxxxxx>
To: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@xxxxxxx>
To: Joshua Crofts <joshua.crofts1@xxxxxxxxx>
To: Marcelo Schmitt <marcelo.schmitt1@xxxxxxxxx>
To: Chris Morgan <macromorgan@xxxxxxxxxxx>
Cc: kernel@xxxxxxxx
Cc: linux-iio@xxxxxxxxxxxxxxx
Cc: devicetree@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
---
Kanak Shilledar (5):
dt-bindings: Add InvenSense ICM-42370-p accelerometer
iio: imu: inv_icm42607: Simplify IIO channel macros
iio: imu: inv_icm42607: Add support for ICM-42370-P
iio: imu: inv_icm42607: Implement MREGx register access
iio: imu: inv_icm42607: Add accelerometer calibbias support
.../bindings/iio/accel/invensense,icm42370p.yaml | 87 +++++++
drivers/iio/imu/inv_icm42607/inv_icm42607.h | 170 +++++++++-----
drivers/iio/imu/inv_icm42607/inv_icm42607_accel.c | 217 ++++++++++++++++--
drivers/iio/imu/inv_icm42607/inv_icm42607_core.c | 253 ++++++++++++++++++---
drivers/iio/imu/inv_icm42607/inv_icm42607_gyro.c | 23 +-
drivers/iio/imu/inv_icm42607/inv_icm42607_i2c.c | 11 +
drivers/iio/imu/inv_icm42607/inv_icm42607_spi.c | 5 +
7 files changed, 649 insertions(+), 117 deletions(-)
---
base-commit: 69fa76f0af3414cc189c3b0b807cb59e327ecc00
change-id: 20260629-b4-inv_icm42370p-ccd671066bcf
Best regards,
--
Kanak Shilledar <kanak.shilledar@xxxxxxxx>