hw/i2c: Added linear mode translation for pmbus devices
Signed-off-by: Shengtan Mao <stmao@google.com> Reviewed-by: Titus Rwantare <titusr@google.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Acked-by: Corey Minyard <cminyard@mvista.com> Message-Id: <20220307200605.4001451-7-titusr@google.com> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
bf0e0c7092
commit
648a488216
@ -28,6 +28,24 @@ uint32_t pmbus_direct_mode2data(PMBusCoefficients c, uint16_t value)
|
||||
return x;
|
||||
}
|
||||
|
||||
uint16_t pmbus_data2linear_mode(uint16_t value, int exp)
|
||||
{
|
||||
/* L = D * 2^(-e) */
|
||||
if (exp < 0) {
|
||||
return value << (-exp);
|
||||
}
|
||||
return value >> exp;
|
||||
}
|
||||
|
||||
uint16_t pmbus_linear_mode2data(uint16_t value, int exp)
|
||||
{
|
||||
/* D = L * 2^e */
|
||||
if (exp < 0) {
|
||||
return value >> (-exp);
|
||||
}
|
||||
return value << exp;
|
||||
}
|
||||
|
||||
void pmbus_send(PMBusDevice *pmdev, const uint8_t *data, uint16_t len)
|
||||
{
|
||||
if (pmdev->out_buf_len + len > SMBUS_DATA_MAX_LEN) {
|
||||
|
@ -448,7 +448,7 @@ typedef struct PMBusCoefficients {
|
||||
*
|
||||
* Y = (m * x - b) * 10^R
|
||||
*
|
||||
* @return uint32_t
|
||||
* @return uint16_t
|
||||
*/
|
||||
uint16_t pmbus_data2direct_mode(PMBusCoefficients c, uint32_t value);
|
||||
|
||||
@ -461,6 +461,24 @@ uint16_t pmbus_data2direct_mode(PMBusCoefficients c, uint32_t value);
|
||||
*/
|
||||
uint32_t pmbus_direct_mode2data(PMBusCoefficients c, uint16_t value);
|
||||
|
||||
/**
|
||||
* Convert sensor values to linear mode format
|
||||
*
|
||||
* L = D * 2^(-e)
|
||||
*
|
||||
* @return uint16
|
||||
*/
|
||||
uint16_t pmbus_data2linear_mode(uint16_t value, int exp);
|
||||
|
||||
/**
|
||||
* Convert linear mode formatted data into sensor reading
|
||||
*
|
||||
* D = L * 2^e
|
||||
*
|
||||
* @return uint16
|
||||
*/
|
||||
uint16_t pmbus_linear_mode2data(uint16_t value, int exp);
|
||||
|
||||
/**
|
||||
* @brief Send a block of data over PMBus
|
||||
* Assumes that the bytes in the block are already ordered correctly,
|
||||
|
Loading…
Reference in New Issue
Block a user