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;
|
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)
|
void pmbus_send(PMBusDevice *pmdev, const uint8_t *data, uint16_t len)
|
||||||
{
|
{
|
||||||
if (pmdev->out_buf_len + len > SMBUS_DATA_MAX_LEN) {
|
if (pmdev->out_buf_len + len > SMBUS_DATA_MAX_LEN) {
|
||||||
|
|
|
@ -448,7 +448,7 @@ typedef struct PMBusCoefficients {
|
||||||
*
|
*
|
||||||
* Y = (m * x - b) * 10^R
|
* Y = (m * x - b) * 10^R
|
||||||
*
|
*
|
||||||
* @return uint32_t
|
* @return uint16_t
|
||||||
*/
|
*/
|
||||||
uint16_t pmbus_data2direct_mode(PMBusCoefficients c, uint32_t value);
|
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);
|
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
|
* @brief Send a block of data over PMBus
|
||||||
* Assumes that the bytes in the block are already ordered correctly,
|
* Assumes that the bytes in the block are already ordered correctly,
|
||||||
|
|
Loading…
Reference in New Issue