emul: Correct emul_sbs_gauge to allow SBS word r/w
Fix SBS I2C transfer emulation to accept reads and writes of 16 bit words as defined by the SBS spec. This change is tested by a following commit that implements writing and subsequently reading a written SBS property. Signed-off-by: Aaron Massey <aaronmassey@google.com>
This commit is contained in:
parent
f5d269538b
commit
48d5b6c1f1
1 changed files with 8 additions and 3 deletions
|
@ -115,17 +115,22 @@ static int sbs_gauge_emul_transfer_i2c(const struct emul *target, struct i2c_msg
|
||||||
/* Return before writing bad value to message buffer */
|
/* Return before writing bad value to message buffer */
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
msgs->buf[0] = val;
|
|
||||||
|
/* SBS uses SMBus, which sends data in little-endian format. */
|
||||||
|
sys_put_le16(val, msgs->buf);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERR("Unexpected msg1 length %d", msgs->len);
|
LOG_ERR("Unexpected msg1 length %d", msgs->len);
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (msgs->len != 1) {
|
/* We write a word (2 bytes by the SBS spec) */
|
||||||
|
if (msgs->len != 2) {
|
||||||
LOG_ERR("Unexpected msg1 length %d", msgs->len);
|
LOG_ERR("Unexpected msg1 length %d", msgs->len);
|
||||||
}
|
}
|
||||||
rc = emul_sbs_gauge_reg_write(target, reg, msgs->buf[0]);
|
uint16_t *value = (uint16_t *)msgs->buf;
|
||||||
|
|
||||||
|
rc = emul_sbs_gauge_reg_write(target, reg, *value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue