mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-23 01:40:30 +00:00
iio: maxim_thermocouple: Align 16 bit big endian value of raw reads
Driver was reporting invalid raw read values for MAX6675 on big
endian architectures. MAX6675 buffered mode is not affected, nor
is the MAX31855.
The driver was losing a 2 byte read value when it used a 32 bit
integer buffer to store a 16 bit big endian value. Use big endian
types to properly align buffers on big endian architectures.
Fixes following sparse endianness warnings:
warning: cast to restricted __be16
warning: cast to restricted __be32
Fixes checkpatch issue:
CHECK: No space is necessary after a cast
Signed-off-by: sayli karnik <karniksayli1995@gmail.com>
Fixes: 1f25ca11d8
("iio: temperature: add support for Maxim
thermocouple chips")
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
0ae952e3bd
commit
231147ee77
@ -123,22 +123,24 @@ static int maxim_thermocouple_read(struct maxim_thermocouple_data *data,
|
||||
{
|
||||
unsigned int storage_bytes = data->chip->read_size;
|
||||
unsigned int shift = chan->scan_type.shift + (chan->address * 8);
|
||||
unsigned int buf;
|
||||
__be16 buf16;
|
||||
__be32 buf32;
|
||||
int ret;
|
||||
|
||||
ret = spi_read(data->spi, (void *) &buf, storage_bytes);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
switch (storage_bytes) {
|
||||
case 2:
|
||||
*val = be16_to_cpu(buf);
|
||||
ret = spi_read(data->spi, (void *)&buf16, storage_bytes);
|
||||
*val = be16_to_cpu(buf16);
|
||||
break;
|
||||
case 4:
|
||||
*val = be32_to_cpu(buf);
|
||||
ret = spi_read(data->spi, (void *)&buf32, storage_bytes);
|
||||
*val = be32_to_cpu(buf32);
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* check to be sure this is a valid reading */
|
||||
if (*val & data->chip->status_bit)
|
||||
return -EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user