Re: [PATCH v2] iio: accel: bmi088: Correctly compute the address of the struct spi_device

From: Christophe JAILLET
Date: Mon Apr 03 2023 - 13:28:41 EST


Le 02/04/2023 à 22:58, Christophe JAILLET a écrit :
bmi088_regmap_spi_write() is said to be similar to the SPI generic write
function.
However, regmap_spi_write() calls to_spi_device() in order to find the
reference to the "struct spi_device", instead of considering that 'context'
is already the correct value.

Just NACK.
The patch looks just plain wrong.

Sorry for the noise.

CJ



This works because "struct device dev" is the first entry of
"struct spi_device".

Align bmi088_regmap_spi_write() and regmap_spi_write() to be more
future proof, should "struct spi_device" be shuffled one day.

Also update bmi088_regmap_spi_read() in the same way.

Fixes: c19ae6be7555 ("iio: accel: Add support for the Bosch-Sensortec BMI088")
Signed-off-by: Christophe JAILLET <christophe.jaillet-39ZsbGIQGT5GWvitb5QawA@xxxxxxxxxxxxxxxx>
---
v2: do the same for bmi088_regmap_spi_read()
---
drivers/iio/accel/bmi088-accel-spi.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/accel/bmi088-accel-spi.c b/drivers/iio/accel/bmi088-accel-spi.c
index ee540edd8412..79e4b5392312 100644
--- a/drivers/iio/accel/bmi088-accel-spi.c
+++ b/drivers/iio/accel/bmi088-accel-spi.c
@@ -15,7 +15,8 @@
static int bmi088_regmap_spi_write(void *context, const void *data, size_t count)
{
- struct spi_device *spi = context;
+ struct device *dev = context;
+ struct spi_device *spi = to_spi_device(dev);
/* Write register is same as generic SPI */
return spi_write(spi, data, count);
@@ -24,7 +25,8 @@ static int bmi088_regmap_spi_write(void *context, const void *data, size_t count
static int bmi088_regmap_spi_read(void *context, const void *reg,
size_t reg_size, void *val, size_t val_size)
{
- struct spi_device *spi = context;
+ struct device *dev = context;
+ struct spi_device *spi = to_spi_device(dev);
u8 addr[2];
addr[0] = *(u8 *)reg;