summaryrefslogtreecommitdiff
path: root/hw/i2c
diff options
context:
space:
mode:
authorTitus Rwantare <titusr@google.com>2022-03-07 12:05:57 -0800
committerPhilippe Mathieu-Daudé <f4bug@amsat.org>2022-03-08 18:46:48 +0100
commit32480293db49e98c8dc891764caf726e4aa4d2a6 (patch)
tree1b2935a22f638dccd1c9d6d7c985b7b367c7b693 /hw/i2c
parent9740b907a5363c06ecf61e08b21966a81eb0dab4 (diff)
hw/i2c: pmbus: add registers
- add the VOUT_MIN and STATUS_MFR registers Signed-off-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-2-titusr@google.com> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Diffstat (limited to 'hw/i2c')
-rw-r--r--hw/i2c/pmbus_device.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/hw/i2c/pmbus_device.c b/hw/i2c/pmbus_device.c
index 24f8f522d9..07a45c99f9 100644
--- a/hw/i2c/pmbus_device.c
+++ b/hw/i2c/pmbus_device.c
@@ -368,6 +368,14 @@ static uint8_t pmbus_receive_byte(SMBusDevice *smd)
}
break;
+ case PMBUS_VOUT_MIN: /* R/W word */
+ if (pmdev->pages[index].page_flags & PB_HAS_VOUT_RATING) {
+ pmbus_send16(pmdev, pmdev->pages[index].vout_min);
+ } else {
+ goto passthough;
+ }
+ break;
+
/* TODO: implement coefficients support */
case PMBUS_POUT_MAX: /* R/W word */
@@ -708,6 +716,10 @@ static uint8_t pmbus_receive_byte(SMBusDevice *smd)
pmbus_send8(pmdev, pmdev->pages[index].status_other);
break;
+ case PMBUS_STATUS_MFR_SPECIFIC: /* R/W byte */
+ pmbus_send8(pmdev, pmdev->pages[index].status_mfr_specific);
+ break;
+
case PMBUS_READ_EIN: /* Read-Only block 5 bytes */
if (pmdev->pages[index].page_flags & PB_HAS_EIN) {
pmbus_send(pmdev, pmdev->pages[index].read_ein, 5);
@@ -1149,6 +1161,14 @@ static int pmbus_write_data(SMBusDevice *smd, uint8_t *buf, uint8_t len)
}
break;
+ case PMBUS_VOUT_MIN: /* R/W word */
+ if (pmdev->pages[index].page_flags & PB_HAS_VOUT_RATING) {
+ pmdev->pages[index].vout_min = pmbus_receive16(pmdev);
+ } else {
+ goto passthrough;
+ }
+ break;
+
case PMBUS_POUT_MAX: /* R/W word */
if (pmdev->pages[index].page_flags & PB_HAS_VOUT) {
pmdev->pages[index].pout_max = pmbus_receive16(pmdev);
@@ -1482,6 +1502,10 @@ static int pmbus_write_data(SMBusDevice *smd, uint8_t *buf, uint8_t len)
pmdev->pages[index].status_other = pmbus_receive8(pmdev);
break;
+ case PMBUS_STATUS_MFR_SPECIFIC: /* R/W byte */
+ pmdev->pages[index].status_mfr_specific = pmbus_receive8(pmdev);
+ break;
+
case PMBUS_PAGE_PLUS_READ: /* Block Read-only */
case PMBUS_CAPABILITY: /* Read-Only byte */
case PMBUS_COEFFICIENTS: /* Read-only block 5 bytes */