drivers: iio: magnetometer: Fix sparse endianness warnings cast to restricted __le16
PATCH 1/1 drivers: iio: magnetometer: Fix sparse endianness warnings cast to restricted __le16
Fix the following sparse endianness warnings:
drivers/iio/magnetometer/ak8975.c:716:16: warning: cast to restricted __le16 drivers/iio/magnetometer/ak8975.c:837:19: warning: cast to restricted __le16 drivers/iio/magnetometer/ak8975.c:838:19: warning: cast to restricted __le16 drivers/iio/magnetometer/ak8975.c:839:19: warning: cast to restricted __le16
--- drivers/iio/magnetometer/ak8975.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
drivers/iio/magnetometer/ak8975.c +9 -7
@@ -690,6 +690,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val)struct ak8975_data *data =iio_priv (indio_dev);const struct i2c_client *client = data->client;const struct ak_def *def = data->def; +__le16 rval;u16 buff;int ret;
@@ -703,7 +704,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val) ret =i2c_smbus_read_i2c_block_data_or_emulated ( client, def->data_regs[index], -sizeof (buff), (u8 *)&buff); +sizeof (rval), (u8 *)&rval);if (ret <0 ) goto exit;
@@ -713,7 +714,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val)pm_runtime_put_autosuspend (&data->client->dev);/* Swap bytes and convert to valid range. */ - buff =le16_to_cpu (buff); + buff =le16_to_cpu (rval); *val =clamp_t (s16, buff, -def->range, def->range);return IIO_VAL_INT ;
@@ -813,6 +814,7 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)const struct ak_def *def = data->def;int ret;s16 buff[8 ];/* 3 x 16 bits axis values + 1 aligned 64 bits timestamp */ +__le16 fval[8 ];mutex_lock (&data->lock);
@@ -826,17 +828,17 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)*/ ret =i2c_smbus_read_i2c_block_data_or_emulated (client, def->data_regs[0 ], -3 *sizeof (buff[0 ]), - (u8 *)buff); +3 *sizeof (fval[0 ]), + (u8 *)fval);if (ret <0 ) goto unlock;mutex_unlock (&data->lock);/* Clamp to valid range. */ - buff[0 ] =clamp_t (s16,le16_to_cpu (buff[0 ]), -def->range, def->range); - buff[1 ] =clamp_t (s16,le16_to_cpu (buff[1 ]), -def->range, def->range); - buff[2 ] =clamp_t (s16,le16_to_cpu (buff[2 ]), -def->range, def->range); + buff[0 ] =clamp_t (s16,le16_to_cpu (fval[0 ]), -def->range, def->range); + buff[1 ] =clamp_t (s16,le16_to_cpu (fval[1 ]), -def->range, def->range); + buff[2 ] =clamp_t (s16,le16_to_cpu (fval[2 ]), -def->range, def->range);iio_push_to_buffers_with_timestamp (indio_dev, buff,iio_get_time_ns (indio_dev));
Signature · 1 line
1.8.3.1
Jonathan Cameron
maintainerQuoted 9 lines · Sandhya Bankar
Fix the following sparse endianness warnings:
drivers/iio/magnetometer/ak8975.c:716:16: warning: cast to restricted__le16drivers/iio/magnetometer/ak8975.c:837:19: warning: cast to restricted__le16drivers/iio/magnetometer/ak8975.c:838:19: warning: cast to restricted__le16drivers/iio/magnetometer/ak8975.c:839:19: warning: cast to restricted__le16Signed-off-by Sandhya Bankar <[email protected]>
Comment inline. This one is slightly more complex than it first looks.
Jonathan
Quoted 36 lines
--- drivers/iio/magnetometer/ak8975.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)drivers/iio/magnetometer/ak8975.c +3
-2@@ -690,6 +690,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val)struct ak8975_data *data =iio_priv (indio_dev);const struct i2c_client *client = data->client;const struct ak_def *def = data->def; +__le16 rval;u16 buff;int ret;@@ -703,7 +704,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val) ret =i2c_smbus_read_i2c_block_data_or_emulated ( client, def->data_regs[index], -sizeof (buff), (u8 *)&buff); +sizeof (rval), (u8 *)&rval);if (ret <0 ) goto exit;@@ -713,7 +714,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val)pm_runtime_put_autosuspend (&data->client->dev);/* Swap bytes and convert to valid range. */ - buff =le16_to_cpu (buff); + buff =le16_to_cpu (rval); *val =clamp_t (s16, buff, -def->range, def->range);return IIO_VAL_INT ;
drivers/iio/magnetometer/ak8975.c static void ak8975_fill_buffer(struct iio_dev *indio_dev) · line 817
Quoted 4 lines
drivers/iio/magnetometer/ak8975.c +1
-0@@ -813,6 +814,7 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)const struct ak_def *def = data->def;int ret;s16 buff[8 ];/* 3 x 16 bits axis values + 1 aligned 64 bits timestamp */ +__le16 fval[8 ];
This one is more interesting. Check how many values of fval are actually used. Buff needs some padding to take a timestamp inserted (rather surprisingly by the iio_push_to_buffers_with_timestamp call), lval doesn't.
Quoted 27 lines
drivers/iio/magnetometer/ak8975.c +5
-5mutex_lock (&data->lock);@@ -826,17 +828,17 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)*/ ret =i2c_smbus_read_i2c_block_data_or_emulated (client, def->data_regs[0 ], -3 *sizeof (buff[0 ]), - (u8 *)buff); +3 *sizeof (fval[0 ]), + (u8 *)fval);if (ret <0 ) goto unlock;mutex_unlock (&data->lock);/* Clamp to valid range. */ - buff[0 ] =clamp_t (s16,le16_to_cpu (buff[0 ]), -def->range, def->range); - buff[1 ] =clamp_t (s16,le16_to_cpu (buff[1 ]), -def->range, def->range); - buff[2 ] =clamp_t (s16,le16_to_cpu (buff[2 ]), -def->range, def->range); + buff[0 ] =clamp_t (s16,le16_to_cpu (fval[0 ]), -def->range, def->range); + buff[1 ] =clamp_t (s16,le16_to_cpu (fval[1 ]), -def->range, def->range); + buff[2 ] =clamp_t (s16,le16_to_cpu (fval[2 ]), -def->range, def->range);iio_push_to_buffers_with_timestamp (indio_dev, buff,iio_get_time_ns (indio_dev));