tmp105: Fix I2C protocol bug
An early length postincrement in the TMP105's I2C TX path led to transfers of more than one byte to place the second byte in the third byte's place within the buffer and the third byte to get discarded. Fix this by explictly incrementing the length after the checks but before the callback is called, which again checks the length. Adjust the Coding Style while at it. Signed-off-by: Alex Horn <alex.horn@cs.ox.ac.uk> Signed-off-by: Andreas Färber <andreas.faerber@web.de> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
6d0b430176
commit
cb5ef3fa18
@ -153,11 +153,14 @@ static int tmp105_tx(I2CSlave *i2c, uint8_t data)
|
|||||||
{
|
{
|
||||||
TMP105State *s = (TMP105State *) i2c;
|
TMP105State *s = (TMP105State *) i2c;
|
||||||
|
|
||||||
if (!s->len ++)
|
if (s->len == 0) {
|
||||||
s->pointer = data;
|
s->pointer = data;
|
||||||
else {
|
s->len++;
|
||||||
if (s->len <= 2)
|
} else {
|
||||||
|
if (s->len <= 2) {
|
||||||
s->buf[s->len - 1] = data;
|
s->buf[s->len - 1] = data;
|
||||||
|
}
|
||||||
|
s->len++;
|
||||||
tmp105_write(s);
|
tmp105_write(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user