[PATCH v3 4/8] iio: imu: inv_icm42607: Switch to little endian

From: Kanak Shilledar

Date: Tue Sep 01 2026 - 11:20:51 EST


The device supports both big and little endian formats for sensor data,
this is handled via the SENSOR_DATA_BIT in INTF_CONFIG0 register. The
default value is big-endian format.

Switch to little-endian as it matches the native byte order on vast
majority of systems and avoids unnecessary byte-swapping.

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>
---
drivers/iio/imu/inv_icm42607/inv_icm42607_accel.c | 2 +-
drivers/iio/imu/inv_icm42607/inv_icm42607_core.c | 6 +++---
drivers/iio/imu/inv_icm42607/inv_icm42607_gyro.c | 2 +-
drivers/iio/imu/inv_icm42607/inv_icm42607_temp.c | 2 +-
drivers/iio/imu/inv_icm42607/inv_icm42607_temp.h | 2 +-
5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/iio/imu/inv_icm42607/inv_icm42607_accel.c b/drivers/iio/imu/inv_icm42607/inv_icm42607_accel.c
index 8f61bc901452..318373efeb9e 100644
--- a/drivers/iio/imu/inv_icm42607/inv_icm42607_accel.c
+++ b/drivers/iio/imu/inv_icm42607/inv_icm42607_accel.c
@@ -32,7 +32,7 @@
.sign = 's', \
.realbits = 16, \
.storagebits = 16, \
- .endianness = IIO_BE, \
+ .endianness = IIO_LE, \
}, \
.ext_info = inv_icm42607_accel_ext_infos, \
}
diff --git a/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c b/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c
index de3b158f446c..7eb486ff673b 100644
--- a/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c
+++ b/drivers/iio/imu/inv_icm42607/inv_icm42607_core.c
@@ -343,7 +343,7 @@ int inv_icm42607_read_sensor(struct iio_dev *indio_dev,
struct inv_icm42607_sensor_state *sensor_st = iio_priv(indio_dev);
struct device *dev = regmap_get_device(st->map);
unsigned int reg;
- __be16 data;
+ __le16 data;
int ret;

if ((chan->type != IIO_ANGL_VEL) && (chan->type != IIO_ACCEL))
@@ -391,7 +391,7 @@ int inv_icm42607_read_sensor(struct iio_dev *indio_dev,
if (ret)
return ret;

- *val = be16_to_cpu(data);
+ *val = le16_to_cpu(data);
if (*val == INV_ICM42607_DATA_INVALID)
return -EINVAL;

@@ -490,7 +490,7 @@ static int inv_icm42607_setup(struct inv_icm42607_state *st,
if (ret)
return ret;

- ret = regmap_set_bits(st->map, INV_ICM42607_REG_INTF_CONFIG0,
+ ret = regmap_clear_bits(st->map, INV_ICM42607_REG_INTF_CONFIG0,
INV_ICM42607_INTF_CONFIG0_SENSOR_DATA_ENDIAN);
if (ret)
return ret;
diff --git a/drivers/iio/imu/inv_icm42607/inv_icm42607_gyro.c b/drivers/iio/imu/inv_icm42607/inv_icm42607_gyro.c
index 8e8d36461e51..fb9bacee4e8d 100644
--- a/drivers/iio/imu/inv_icm42607/inv_icm42607_gyro.c
+++ b/drivers/iio/imu/inv_icm42607/inv_icm42607_gyro.c
@@ -32,7 +32,7 @@
.sign = 's', \
.realbits = 16, \
.storagebits = 16, \
- .endianness = IIO_BE, \
+ .endianness = IIO_LE, \
}, \
.ext_info = inv_icm42607_gyro_ext_infos, \
}
diff --git a/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.c b/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.c
index 53f0484c0845..ab2ba7900095 100644
--- a/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.c
+++ b/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.c
@@ -58,7 +58,7 @@ static int inv_icm42607_temp_read(struct inv_icm42607_state *st, s16 *temp)
if (ret)
return ret;

- *temp = get_unaligned_be16(raw);
+ *temp = get_unaligned_le16(raw);
if (*temp == INV_ICM42607_DATA_INVALID)
return -EINVAL;

diff --git a/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.h b/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.h
index 18499b4d0b94..eb55e2daac89 100644
--- a/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.h
+++ b/drivers/iio/imu/inv_icm42607/inv_icm42607_temp.h
@@ -27,7 +27,7 @@ struct iio_chan_spec;
.sign = 's', \
.realbits = 16, \
.storagebits = 16, \
- .endianness = IIO_BE, \
+ .endianness = IIO_LE, \
}, \
}


--
2.43.0