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>
This commit is contained in:
parent
9740b907a5
commit
32480293db
@ -368,6 +368,14 @@ static uint8_t pmbus_receive_byte(SMBusDevice *smd)
|
|||||||
}
|
}
|
||||||
break;
|
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 */
|
/* TODO: implement coefficients support */
|
||||||
|
|
||||||
case PMBUS_POUT_MAX: /* R/W word */
|
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);
|
pmbus_send8(pmdev, pmdev->pages[index].status_other);
|
||||||
break;
|
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 */
|
case PMBUS_READ_EIN: /* Read-Only block 5 bytes */
|
||||||
if (pmdev->pages[index].page_flags & PB_HAS_EIN) {
|
if (pmdev->pages[index].page_flags & PB_HAS_EIN) {
|
||||||
pmbus_send(pmdev, pmdev->pages[index].read_ein, 5);
|
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;
|
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 */
|
case PMBUS_POUT_MAX: /* R/W word */
|
||||||
if (pmdev->pages[index].page_flags & PB_HAS_VOUT) {
|
if (pmdev->pages[index].page_flags & PB_HAS_VOUT) {
|
||||||
pmdev->pages[index].pout_max = pmbus_receive16(pmdev);
|
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);
|
pmdev->pages[index].status_other = pmbus_receive8(pmdev);
|
||||||
break;
|
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_PAGE_PLUS_READ: /* Block Read-only */
|
||||||
case PMBUS_CAPABILITY: /* Read-Only byte */
|
case PMBUS_CAPABILITY: /* Read-Only byte */
|
||||||
case PMBUS_COEFFICIENTS: /* Read-only block 5 bytes */
|
case PMBUS_COEFFICIENTS: /* Read-only block 5 bytes */
|
||||||
|
@ -43,6 +43,7 @@ enum pmbus_registers {
|
|||||||
PMBUS_VOUT_DROOP = 0x28, /* R/W word */
|
PMBUS_VOUT_DROOP = 0x28, /* R/W word */
|
||||||
PMBUS_VOUT_SCALE_LOOP = 0x29, /* R/W word */
|
PMBUS_VOUT_SCALE_LOOP = 0x29, /* R/W word */
|
||||||
PMBUS_VOUT_SCALE_MONITOR = 0x2A, /* R/W word */
|
PMBUS_VOUT_SCALE_MONITOR = 0x2A, /* R/W word */
|
||||||
|
PMBUS_VOUT_MIN = 0x2B, /* R/W word */
|
||||||
PMBUS_COEFFICIENTS = 0x30, /* Read-only block 5 bytes */
|
PMBUS_COEFFICIENTS = 0x30, /* Read-only block 5 bytes */
|
||||||
PMBUS_POUT_MAX = 0x31, /* R/W word */
|
PMBUS_POUT_MAX = 0x31, /* R/W word */
|
||||||
PMBUS_MAX_DUTY = 0x32, /* R/W word */
|
PMBUS_MAX_DUTY = 0x32, /* R/W word */
|
||||||
@ -255,6 +256,7 @@ OBJECT_DECLARE_TYPE(PMBusDevice, PMBusDeviceClass,
|
|||||||
#define PB_HAS_TEMP3 BIT_ULL(42)
|
#define PB_HAS_TEMP3 BIT_ULL(42)
|
||||||
#define PB_HAS_TEMP_RATING BIT_ULL(43)
|
#define PB_HAS_TEMP_RATING BIT_ULL(43)
|
||||||
#define PB_HAS_MFR_INFO BIT_ULL(50)
|
#define PB_HAS_MFR_INFO BIT_ULL(50)
|
||||||
|
#define PB_HAS_STATUS_MFR_SPECIFIC BIT_ULL(51)
|
||||||
|
|
||||||
struct PMBusDeviceClass {
|
struct PMBusDeviceClass {
|
||||||
SMBusDeviceClass parent_class;
|
SMBusDeviceClass parent_class;
|
||||||
@ -295,6 +297,7 @@ typedef struct PMBusPage {
|
|||||||
uint16_t vout_droop; /* R/W word */
|
uint16_t vout_droop; /* R/W word */
|
||||||
uint16_t vout_scale_loop; /* R/W word */
|
uint16_t vout_scale_loop; /* R/W word */
|
||||||
uint16_t vout_scale_monitor; /* R/W word */
|
uint16_t vout_scale_monitor; /* R/W word */
|
||||||
|
uint16_t vout_min; /* R/W word */
|
||||||
uint8_t coefficients[5]; /* Read-only block 5 bytes */
|
uint8_t coefficients[5]; /* Read-only block 5 bytes */
|
||||||
uint16_t pout_max; /* R/W word */
|
uint16_t pout_max; /* R/W word */
|
||||||
uint16_t max_duty; /* R/W word */
|
uint16_t max_duty; /* R/W word */
|
||||||
|
Loading…
Reference in New Issue
Block a user