drivers:iio:stm:imu:lsm6ds3h: remove VLA usage

Removing VLAs as per displeasure demonstrated by kernel
developers. Additionally, Android kernels built with clang defaults
forbids usage of it.

Signed-off-by: Denis Ciocca <denis.ciocca@st.com>
Change-Id: I22436b560d4a5057fedcba13bb8c4c3ec1ef0555
Reviewed-on: https://gerrit.st.com/c/linuxandroidopen/stm-ldd-iio/+/273649
Tested-by: CITOOLS <MDG-smet-aci-reviews@list.st.com>
Reviewed-by: Mario TESI <mario.tesi@st.com>
This commit is contained in:
Denis Ciocca 2022-10-31 15:06:44 -07:00 committed by Denis CIOCCA
parent 4f9405d4b1
commit ed3bbbd4ac
2 changed files with 15 additions and 8 deletions

View File

@ -47,10 +47,13 @@ static int st_lsm6ds3h_i2c_read(struct lsm6ds3h_data *cdata,
static int st_lsm6ds3h_i2c_write(struct lsm6ds3h_data *cdata,
u8 reg_addr, int len, u8 *data, bool b_lock)
{
int err = 0;
u8 send[len + 1];
struct i2c_msg msg;
struct i2c_client *client = to_i2c_client(cdata->dev);
struct i2c_msg msg;
int err = 0;
u8 send[8];
if (len >= ARRAY_SIZE(send))
return -ENOMEM;
send[0] = reg_addr;
memcpy(&send[1], data, len * sizeof(u8));

View File

@ -1241,11 +1241,15 @@ static int st_lsm6ds3h_i2c_master_set_enable(
}
static int st_lsm6ds3h_i2c_master_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *ch, int *val, int *val2, long mask)
struct iio_chan_spec const *ch,
int *val, int *val2, long mask)
{
int err;
u8 outdata[(ch->scan_type.storagebits >> 3)];
struct lsm6ds3h_sensor_data *sdata = iio_priv(indio_dev);
int err, ch_num_byte = ch->scan_type.storagebits >> 3;
u8 outdata[4];
if (ch_num_byte > ARRAY_SIZE(outdata))
return -ENOMEM;
switch (mask) {
case IIO_CHAN_INFO_RAW:
@ -1270,7 +1274,7 @@ static int st_lsm6ds3h_i2c_master_read_raw(struct iio_dev *indio_dev,
msleep((1000U / sdata->cdata->trigger_odr) + 2);
err = sdata->cdata->tf->read(sdata->cdata, sdata->data_out_reg,
ch->scan_type.storagebits >> 3, outdata, true);
ch_num_byte, outdata, true);
if (err < 0) {
st_lsm6ds3h_i2c_master_set_enable(sdata, false, false);
mutex_unlock(&sdata->cdata->odr_lock);
@ -1285,7 +1289,7 @@ static int st_lsm6ds3h_i2c_master_read_raw(struct iio_dev *indio_dev,
return err;
}
if ((ch->scan_type.storagebits >> 3) > 2)
if (ch_num_byte > 2)
*val = (s32)get_unaligned_le32(outdata);
else
*val = (s16)get_unaligned_le16(outdata);