+++ /dev/null
-From c0f866de4ce447bca3191b9cefac60c4b36a7922 Mon Sep 17 00:00:00 2001
-From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
-Date: Tue, 12 Nov 2024 10:30:10 +0100
-Subject: iio: imu: inv_icm42600: fix spi burst write not supported
-
-From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
-
-commit c0f866de4ce447bca3191b9cefac60c4b36a7922 upstream.
-
-Burst write with SPI is not working for all icm42600 chips. It was
-only used for setting user offsets with regmap_bulk_write.
-
-Add specific SPI regmap config for using only single write with SPI.
-
-Fixes: 9f9ff91b775b ("iio: imu: inv_icm42600: add SPI driver for inv_icm42600 driver")
-Cc: stable@vger.kernel.org
-Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
-Link: https://patch.msgid.link/20241112-inv-icm42600-fix-spi-burst-write-not-supported-v2-1-97690dc03607@tdk.com
-Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/iio/imu/inv_icm42600/inv_icm42600.h | 1 +
- drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 15 +++++++++++++++
- drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c | 3 ++-
- 3 files changed, 18 insertions(+), 1 deletion(-)
-
---- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h
-+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
-@@ -403,6 +403,7 @@ struct inv_icm42600_sensor_state {
- typedef int (*inv_icm42600_bus_setup)(struct inv_icm42600_state *);
-
- extern const struct regmap_config inv_icm42600_regmap_config;
-+extern const struct regmap_config inv_icm42600_spi_regmap_config;
- extern const struct dev_pm_ops inv_icm42600_pm_ops;
-
- const struct iio_mount_matrix *
---- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
-+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
-@@ -87,6 +87,21 @@ const struct regmap_config inv_icm42600_
- };
- EXPORT_SYMBOL_NS_GPL(inv_icm42600_regmap_config, IIO_ICM42600);
-
-+/* define specific regmap for SPI not supporting burst write */
-+const struct regmap_config inv_icm42600_spi_regmap_config = {
-+ .name = "inv_icm42600",
-+ .reg_bits = 8,
-+ .val_bits = 8,
-+ .max_register = 0x4FFF,
-+ .ranges = inv_icm42600_regmap_ranges,
-+ .num_ranges = ARRAY_SIZE(inv_icm42600_regmap_ranges),
-+ .volatile_table = inv_icm42600_regmap_volatile_accesses,
-+ .rd_noinc_table = inv_icm42600_regmap_rd_noinc_accesses,
-+ .cache_type = REGCACHE_RBTREE,
-+ .use_single_write = true,
-+};
-+EXPORT_SYMBOL_NS_GPL(inv_icm42600_spi_regmap_config, "IIO_ICM42600");
-+
- struct inv_icm42600_hw {
- uint8_t whoami;
- const char *name;
---- a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
-+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
-@@ -59,7 +59,8 @@ static int inv_icm42600_probe(struct spi
- return -EINVAL;
- chip = (uintptr_t)match;
-
-- regmap = devm_regmap_init_spi(spi, &inv_icm42600_regmap_config);
-+ /* use SPI specific regmap */
-+ regmap = devm_regmap_init_spi(spi, &inv_icm42600_spi_regmap_config);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-