Skip to content

Commit 70f3d36

Browse files
iurjscsiAndi Shyti
authored andcommitted
i2c: amd756: Fix endianness handling for word data
Ensure correct handling of "endianness" for word-sized data in amd756_access - Convert word data into little-endian using cpu_to_le16 - Convert word data from little-endian to cpu native format using le16_to_cpu This fixes poteential issues on big-endian systems and ensure proper byte ordering for SMBus word transacitions Signed-off-by: Atharva Tiwari <evepolonium@gmail.com> Link: https://lore.kernel.org/r/20250101103422.30523-1-evepolonium@gmail.com Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
1 parent 1ee867e commit 70f3d36

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

drivers/i2c/busses/i2c-amd756.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include <linux/i2c.h>
3232
#include <linux/acpi.h>
3333
#include <linux/io.h>
34+
#include <linux/byteorder/generic.h>
3435

3536
/* AMD756 SMBus address offsets */
3637
#define SMB_ADDR_OFFSET 0xE0
@@ -211,7 +212,7 @@ static s32 amd756_access(struct i2c_adapter * adap, u16 addr,
211212
SMB_HOST_ADDRESS);
212213
outb_p(command, SMB_HOST_COMMAND);
213214
if (read_write == I2C_SMBUS_WRITE)
214-
outw_p(data->word, SMB_HOST_DATA); /* TODO: endian???? */
215+
outw_p(cpu_to_le16((u16)data->word), SMB_HOST_DATA);
215216
size = AMD756_WORD_DATA;
216217
break;
217218
case I2C_SMBUS_BLOCK_DATA:
@@ -256,7 +257,7 @@ static s32 amd756_access(struct i2c_adapter * adap, u16 addr,
256257
data->byte = inw_p(SMB_HOST_DATA);
257258
break;
258259
case AMD756_WORD_DATA:
259-
data->word = inw_p(SMB_HOST_DATA); /* TODO: endian???? */
260+
data->word = (u16)le16_to_cpu(inw_p(SMB_HOST_DATA));
260261
break;
261262
case AMD756_BLOCK_DATA:
262263
data->block[0] = inw_p(SMB_HOST_DATA) & 0x3f;

0 commit comments

Comments
 (0)