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

Jonathan Cameron <[email protected]>
Newsgroups org.kernel.vger.linux-iio,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Message-ID <20260728222558.56062c45@jic23-huawei>
On Tue, 28 Jul 2026 17:53:37 +0100
Conor Dooley <[email protected]> wrote:

> On Fri, Jul 24, 2026 at 10:27:08PM +0200, Jorijn van der Graaf wrote:
> > 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. Devicetrees describe
> > the part with an icm42631 fallback; the dedicated entries bind the
> > exact part where the kernel knows it.
> > 
> > Tested on the Fairphone 6 via a backport of this change to the
> > device's 7.1-based kernel (only the id-table style and entry placement
> > 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.
> > 
> > Acked-by: Jean-Baptiste Maneyrol <[email protected]>
> > Assisted-by: Claude:claude-fable-5
> > Signed-off-by: Jorijn van der Graaf <[email protected]>  
> 
> This patch is not needed because you can make use of the fallback and
> should be dropped.

This is related to whether we print or not.
 
+ the name is userspace ABI so whilst it will work with the fallback naming
that can cause confusion.  I don't mind just using the fallback in this
particular case given as far as we know this really is effectively identical
to the other part rather than a superset case where later driver changes
will add more features and changing the ABI by 'correcting' the name.

Jonathan

> 
> Thanks,
> Conor.
> 
> > ---
> > v2: place the match entries in numeric position (the only code
> > change); kept the Acked-by.
> >  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 f306e3ffca48..da7bc0f1155c 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 e44ed6dcde02..672b19d2e41c 100644
> > --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
> > +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
> > @@ -78,6 +78,7 @@ static const struct i2c_device_id inv_icm42600_id[] = {
> >  	{ .name = "icm42602", .driver_data = INV_CHIP_ICM42602 },
> >  	{ .name = "icm42605", .driver_data = INV_CHIP_ICM42605 },
> >  	{ .name = "icm42622", .driver_data = INV_CHIP_ICM42622 },
> > +	{ .name = "icm42630", .driver_data = INV_CHIP_ICM42630 },
> >  	{ .name = "icm42631", .driver_data = INV_CHIP_ICM42631 },
> >  	{ .name = "icm42686", .driver_data = INV_CHIP_ICM42686 },
> >  	{ .name = "icm42688", .driver_data = INV_CHIP_ICM42688 },
> > @@ -98,6 +99,9 @@ static const struct of_device_id inv_icm42600_of_matches[] = {
> >  	}, {
> >  		.compatible = "invensense,icm42622",
> >  		.data = (void *)INV_CHIP_ICM42622,
> > +	}, {
> > +		.compatible = "invensense,icm42630",
> > +		.data = (void *)INV_CHIP_ICM42630,
> >  	}, {
> >  		.compatible = "invensense,icm42631",
> >  		.data = (void *)INV_CHIP_ICM42631,
> > diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
> > index 3e2f4eb42e97..3707460d77e1 100644
> > --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
> > +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
> > @@ -75,6 +75,7 @@ static const struct spi_device_id inv_icm42600_id[] = {
> >  	{ .name = "icm42602", .driver_data = INV_CHIP_ICM42602 },
> >  	{ .name = "icm42605", .driver_data = INV_CHIP_ICM42605 },
> >  	{ .name = "icm42622", .driver_data = INV_CHIP_ICM42622 },
> > +	{ .name = "icm42630", .driver_data = INV_CHIP_ICM42630 },
> >  	{ .name = "icm42631", .driver_data = INV_CHIP_ICM42631 },
> >  	{ .name = "icm42686", .driver_data = INV_CHIP_ICM42686 },
> >  	{ .name = "icm42688", .driver_data = INV_CHIP_ICM42688 },
> > @@ -95,6 +96,9 @@ static const struct of_device_id inv_icm42600_of_matches[] = {
> >  	}, {
> >  		.compatible = "invensense,icm42622",
> >  		.data = (void *)INV_CHIP_ICM42622,
> > +	}, {
> > +		.compatible = "invensense,icm42630",
> > +		.data = (void *)INV_CHIP_ICM42630,
> >  	}, {
> >  		.compatible = "invensense,icm42631",
> >  		.data = (void *)INV_CHIP_ICM42631,
> > -- 
> > 2.55.0
> >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.