Scan elements for x,y,z channels is little endian and requires no bit shifts.
LE vs. BE is controlled in register SENS_CONFIG2 and bit LE_BE, default
value is LE.
Fixes: a3e0b51884ee ("iio: accel: add support for FXLS8962AF/FXLS8964AF accelerometers")
Signed-off-by: Sean Nyekjaer <[email protected]>
Cc: [email protected]
---
drivers/iio/accel/fxls8962af-core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/iio/accel/fxls8962af-core.c b/drivers/iio/accel/fxls8962af-core.c
index 0d672b1469e8..bf7949e51e6c 100644
--- a/drivers/iio/accel/fxls8962af-core.c
+++ b/drivers/iio/accel/fxls8962af-core.c
@@ -724,8 +724,8 @@ static const struct iio_event_spec fxls8962af_event[] = {
.sign = 's', \
.realbits = 12, \
.storagebits = 16, \
- .shift = 4, \
- .endianness = IIO_BE, \
+ .shift = 0, \
+ .endianness = IIO_LE, \
}, \
.event_spec = fxls8962af_event, \
.num_event_specs = ARRAY_SIZE(fxls8962af_event), \
--
2.40.0
Remove special errata handling if FXLS8964AF is used.
Fixes: af959b7b96b8 ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads")
Signed-off-by: Sean Nyekjaer <[email protected]>
Cc: [email protected]
---
drivers/iio/accel/fxls8962af-core.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/iio/accel/fxls8962af-core.c b/drivers/iio/accel/fxls8962af-core.c
index bf7949e51e6c..3f27834ef04c 100644
--- a/drivers/iio/accel/fxls8962af-core.c
+++ b/drivers/iio/accel/fxls8962af-core.c
@@ -904,9 +904,10 @@ static int fxls8962af_fifo_transfer(struct fxls8962af_data *data,
int total_length = samples * sample_length;
int ret;
- if (i2c_verify_client(dev))
+ if (i2c_verify_client(dev) &&
+ data->chip_info->chip_id == FXLS8962AF_DEVICE_ID)
/*
- * Due to errata bug:
+ * Due to errata bug (only applicable on fxls8962af):
* E3: FIFO burst read operation error using I2C interface
* We have to avoid burst reads on I2C..
*/
--
2.40.0
On Mon, 5 Jun 2023 12:32:21 +0200
Sean Nyekjaer <[email protected]> wrote:
> Scan elements for x,y,z channels is little endian and requires no bit shifts.
> LE vs. BE is controlled in register SENS_CONFIG2 and bit LE_BE, default
> value is LE.
>
> Fixes: a3e0b51884ee ("iio: accel: add support for FXLS8962AF/FXLS8964AF accelerometers")
> Signed-off-by: Sean Nyekjaer <[email protected]>
> Cc: [email protected]
Hmm. I'm not going to ask how this didn't come up in testing before now...
> ---
> drivers/iio/accel/fxls8962af-core.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/accel/fxls8962af-core.c b/drivers/iio/accel/fxls8962af-core.c
> index 0d672b1469e8..bf7949e51e6c 100644
> --- a/drivers/iio/accel/fxls8962af-core.c
> +++ b/drivers/iio/accel/fxls8962af-core.c
> @@ -724,8 +724,8 @@ static const struct iio_event_spec fxls8962af_event[] = {
> .sign = 's', \
> .realbits = 12, \
> .storagebits = 16, \
> - .shift = 4, \
> - .endianness = IIO_BE, \
> + .shift = 0, \
We'd normally not explicitly specify shift = 0 as that's both the obvious default and
what C will give us for free.
I'll tidy that up whilst applying.
Applied to the fixes-togreg branch of iio.git.
Thanks,
Jonathan
> + .endianness = IIO_LE, \
> }, \
> .event_spec = fxls8962af_event, \
> .num_event_specs = ARRAY_SIZE(fxls8962af_event), \
On Mon, 5 Jun 2023 12:32:22 +0200
Sean Nyekjaer <[email protected]> wrote:
> Remove special errata handling if FXLS8964AF is used.
>
> Fixes: af959b7b96b8 ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads")
> Signed-off-by: Sean Nyekjaer <[email protected]>
> Cc: [email protected]
Applied to the fixes-togreg branch of iio.git
Thanks,
Jonathan
> ---
> drivers/iio/accel/fxls8962af-core.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/accel/fxls8962af-core.c b/drivers/iio/accel/fxls8962af-core.c
> index bf7949e51e6c..3f27834ef04c 100644
> --- a/drivers/iio/accel/fxls8962af-core.c
> +++ b/drivers/iio/accel/fxls8962af-core.c
> @@ -904,9 +904,10 @@ static int fxls8962af_fifo_transfer(struct fxls8962af_data *data,
> int total_length = samples * sample_length;
> int ret;
>
> - if (i2c_verify_client(dev))
> + if (i2c_verify_client(dev) &&
> + data->chip_info->chip_id == FXLS8962AF_DEVICE_ID)
> /*
> - * Due to errata bug:
> + * Due to errata bug (only applicable on fxls8962af):
> * E3: FIFO burst read operation error using I2C interface
> * We have to avoid burst reads on I2C..
> */