Re: [PATCH 7/8] hw/sensor: adm1266: expose vout_mode over QMP
Peter Maydell <[email protected]> Thu, 30 Jul 2026 13:41:20 +0100
| Newsgroups | org.nongnu.qemu-arm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <CAFEAcA84j_n6MTAmwOkvQwNCq4TEL_zyGmSUc_6b=8i2VykTBA@mail.gmail.com> |
On Thu, 30 Jul 2026 at 00:13, Titus Rwantare <[email protected]> wrote: > > The vout_mode registers can now be adjusted to allow a wider value range > in read_vout. > vout_mode is per pmbus page, therefore vout_mode[n] will affect > read_vout[n]. > > Signed-off-by: Titus Rwantare <[email protected]> > --- > hw/sensor/adm1266.c | 8 ++++++++ > tests/qtest/adm1266-test.c | 35 +++++++++++++++++++++++++++++++++++ > 2 files changed, 43 insertions(+) > > diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c > index 80960dc1c4..1464307971 100644 > --- a/hw/sensor/adm1266.c > +++ b/hw/sensor/adm1266.c > @@ -271,6 +271,8 @@ static void adm1266_get(Object *obj, Visitor *v, const char *name, void *opaque, > sscanf(name, "vout[%u]", &index); > mode = (PMBusVoutMode *)&pmdev->pages[index].vout_mode; > value = pmbus_linear_mode2milliunits(*(uint16_t *)opaque, mode->exp); > + } else if (strncmp(name, "vout_mode", 9) == 0) { > + value = *(uint8_t *)opaque; > } else { > value = *(uint16_t *)opaque; > } > @@ -293,6 +295,8 @@ static void adm1266_set(Object *obj, Visitor *v, const char *name, void *opaque, > sscanf(name, "vout[%u]", &index); > mode = (PMBusVoutMode *)&pmdev->pages[index].vout_mode; > *internal = pmbus_milliunits2linear_mode(value, mode->exp); > + } else if (strncmp(name, "vout_mode", 9) == 0) { > + *(uint8_t *)opaque = value; > } else { > *internal = value; > } > @@ -321,6 +325,10 @@ static void adm1266_init(Object *obj) > object_property_add(obj, "vout[*]", "uint32", > adm1266_get, > adm1266_set, NULL, &pmdev->pages[i].read_vout); > + > + object_property_add(obj, "vout_mode[*]", "uint32", > + adm1266_get, > + adm1266_set, NULL, &pmdev->pages[i].vout_mode); > } > } Better to give the vout_mode[] property its own get/set functions rather than using the existing ones and then having to figure out which property is being accessed by using string comparisons. > +static void test_vout_mode_qmp(void *obj, void *data, > + QGuestAllocator *alloc) > +{ > + uint16_t i2c_value, value, expected; > + QI2CDevice *i2cdev = (QI2CDevice *)obj; > + ADM1266VoutMode m; > + char *path; > + > + /* set a different exponent per page and a different value */ > + for (int i = 0; i < ADM1266_NUM_PAGES; i++) { > + expected = 1000 * (i * 2); > + m.mode.exp = i - 14; > + path = g_strdup_printf("vout_mode[%d]", i); > + qmp_adm1266_set(TEST_ID, path, m.raw); > + path = g_strdup_printf("vout[%d]", i); > + qmp_adm1266_set(TEST_ID, path, expected); More string leaks in these test functions. thanks -- PMM