Skip to content

Commit

Permalink
HID: cp2112: fix byte order in SMBUS operations
Browse files Browse the repository at this point in the history
Change all occurrences of be16 to le16 in cp2112_xfer(),
because SMBUS words are little endian, not big endian.

Signed-off-by: Ellen Wang <ellen@cumulusnetworks.com>
Cc: stable@vger.kernel.org
Signed-off-by: Jiri Kosina <jkosina@suse.com>
  • Loading branch information
Ellen Wang authored and Jiri Kosina committed Jul 14, 2015
1 parent 6d00d15 commit 29e2d6d
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions drivers/hid/hid-cp2112.c
Original file line number Diff line number Diff line change
Expand Up @@ -589,7 +589,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
struct cp2112_device *dev = (struct cp2112_device *)adap->algo_data;
struct hid_device *hdev = dev->hdev;
u8 buf[64];
__be16 word;
__le16 word;
ssize_t count;
size_t read_length = 0;
unsigned int retries;
Expand Down Expand Up @@ -621,7 +621,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
break;
case I2C_SMBUS_WORD_DATA:
read_length = 2;
word = cpu_to_be16(data->word);
word = cpu_to_le16(data->word);

if (I2C_SMBUS_READ == read_write)
count = cp2112_write_read_req(buf, addr, read_length,
Expand All @@ -634,7 +634,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
size = I2C_SMBUS_WORD_DATA;
read_write = I2C_SMBUS_READ;
read_length = 2;
word = cpu_to_be16(data->word);
word = cpu_to_le16(data->word);

count = cp2112_write_read_req(buf, addr, read_length, command,
(u8 *)&word, 2);
Expand Down Expand Up @@ -727,7 +727,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
data->byte = buf[0];
break;
case I2C_SMBUS_WORD_DATA:
data->word = be16_to_cpup((__be16 *)buf);
data->word = le16_to_cpup((__le16 *)buf);
break;
case I2C_SMBUS_BLOCK_DATA:
if (read_length > I2C_SMBUS_BLOCK_MAX) {
Expand Down

0 comments on commit 29e2d6d

Please sign in to comment.