[PATCH 8/8] hw/sensor: adm1266: set default VOUT mode

Titus Rwantare <[email protected]> Wed, 29 Jul 2026 23:13:23 +0000
Newsgroups org.nongnu.qemu-arm,org.nongnu.qemu-devel
Message-ID <[email protected]>
VOUT_MODE 0 represents linear mode, and the exponent is set to -10, to
allow us to fit 3.3V in the register.

Signed-off-by: Titus Rwantare <[email protected]>
---
 hw/sensor/adm1266.c        | 17 ++++++++++++-----
 tests/qtest/adm1266-test.c |  2 +-
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c
index 1464307971..c0c6341876 100644
--- a/hw/sensor/adm1266.c
+++ b/hw/sensor/adm1266.c
@@ -42,6 +42,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ADM1266State, ADM1266)
 #define ADM1266_MFR_LOCATION_DEFAULT            "0000"
 #define ADM1266_MFR_DATE_DEFAULT                "0000"
 #define ADM1266_MFR_SERIAL_DEFAULT              "0000"
+#define ADM1266_VOUT_MODE_EXP_DEFAULT           -10
+
 
 #define ADM1266_NUM_PAGES                       17
 #define ADM1266_READ_LENGTH_DEFAULT             48
@@ -85,6 +87,10 @@ static void adm1266_exit_reset(Object *obj, ResetType type)
 {
     ADM1266State *s = ADM1266(obj);
     PMBusDevice *pmdev = PMBUS_DEVICE(obj);
+    PMBusVoutMode m = {
+        .mode = 0,
+        .exp = ADM1266_VOUT_MODE_EXP_DEFAULT
+    };
 
     pmdev->page = 0;
     pmdev->capability = ADM1266_CAPABILITY_NO_PEC;
@@ -92,11 +98,12 @@ static void adm1266_exit_reset(Object *obj, ResetType type)
     for (int i = 0; i < ADM1266_NUM_PAGES; i++) {
         pmdev->pages[i].operation = ADM1266_OPERATION_DEFAULT;
         pmdev->pages[i].revision = ADM1266_PMBUS_REVISION_DEFAULT;
-        pmdev->pages[i].vout_mode = 0;
-        pmdev->pages[i].read_vout = pmbus_data2linear_mode(12, 0);
-        pmdev->pages[i].vout_margin_high = pmbus_data2linear_mode(15, 0);
-        pmdev->pages[i].vout_margin_low = pmbus_data2linear_mode(3, 0);
-        pmdev->pages[i].vout_ov_fault_limit = pmbus_data2linear_mode(16, 0);
+
+        pmdev->pages[i].vout_mode = *(uint8_t *)&m;
+        pmdev->pages[i].read_vout = pmbus_data2linear_mode(12, m.exp);
+        pmdev->pages[i].vout_margin_high = pmbus_data2linear_mode(15, m.exp);
+        pmdev->pages[i].vout_margin_low = pmbus_data2linear_mode(3, m.exp);
+        pmdev->pages[i].vout_ov_fault_limit = pmbus_data2linear_mode(16, m.exp);
         pmdev->pages[i].revision = ADM1266_PMBUS_REVISION_DEFAULT;
     }
 
diff --git a/tests/qtest/adm1266-test.c b/tests/qtest/adm1266-test.c
index 9cdd206c3f..6fcf2505cf 100644
--- a/tests/qtest/adm1266-test.c
+++ b/tests/qtest/adm1266-test.c
@@ -47,7 +47,7 @@
 #define TEST_STRING_C                           "rev c"
 
 #define ADM1266_NUM_PAGES                       17
-#define ADM1266_MAX_VALUE                       65535000
+#define ADM1266_MAX_VALUE                       63999  /* UINT16_MAX * 2^-10 */
 
 typedef union {
     uint8_t raw;
-- 
2.55.0.508.g3f0d502094-goog