79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
64 lines
2.2 KiB
Diff
64 lines
2.2 KiB
Diff
From b2314562968c124503dbd08529a2bef39701aaa7 Mon Sep 17 00:00:00 2001
|
|
From: qihao <qihao_yewu@cmss.chinamobile.com>
|
|
Date: Wed, 6 Sep 2023 20:30:27 +0800
|
|
Subject: [PATCH] hw/i2c/pmbus_device: Fix modifying QOM class internals from
|
|
instance
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
cheery-pick from f0e4588fd4ae39d1ad46f19c76ed298f89e61d6a
|
|
|
|
QOM object instance should not modify its class state (because
|
|
all other objects instanciated from this class get affected).
|
|
|
|
Instead of modifying the PMBusDeviceClass 'device_num_pages' field
|
|
the first time a instance is initialized (in pmbus_pages_alloc),
|
|
introduce a new pmbus_pages_num() helper which returns the page
|
|
number from the class without modifying the class state.
|
|
|
|
The code logic become slighly simplified.
|
|
|
|
Inspired-by: Bernhard Beschow <shentey@gmail.com>
|
|
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
|
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
|
|
Message-Id: <20230523064408.57941-4-philmd@linaro.org>
|
|
Signed-off-by: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
|
---
|
|
hw/i2c/pmbus_device.c | 17 ++++++++++-------
|
|
1 file changed, 10 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/hw/i2c/pmbus_device.c b/hw/i2c/pmbus_device.c
|
|
index 24f8f522d9..f39cd532de 100644
|
|
--- a/hw/i2c/pmbus_device.c
|
|
+++ b/hw/i2c/pmbus_device.c
|
|
@@ -166,15 +166,18 @@ static void pmbus_quick_cmd(SMBusDevice *smd, uint8_t read)
|
|
}
|
|
}
|
|
|
|
-static void pmbus_pages_alloc(PMBusDevice *pmdev)
|
|
+static uint8_t pmbus_pages_num(PMBusDevice *pmdev)
|
|
{
|
|
+ const PMBusDeviceClass *k = PMBUS_DEVICE_GET_CLASS(pmdev);
|
|
+
|
|
/* some PMBus devices don't use the PAGE command, so they get 1 page */
|
|
- PMBusDeviceClass *k = PMBUS_DEVICE_GET_CLASS(pmdev);
|
|
- if (k->device_num_pages == 0) {
|
|
- k->device_num_pages = 1;
|
|
- }
|
|
- pmdev->num_pages = k->device_num_pages;
|
|
- pmdev->pages = g_new0(PMBusPage, k->device_num_pages);
|
|
+ return k->device_num_pages ? : 1;
|
|
+}
|
|
+
|
|
+static void pmbus_pages_alloc(PMBusDevice *pmdev)
|
|
+{
|
|
+ pmdev->num_pages = pmbus_pages_num(pmdev);
|
|
+ pmdev->pages = g_new0(PMBusPage, pmdev->num_pages);
|
|
}
|
|
|
|
void pmbus_check_limits(PMBusDevice *pmdev)
|
|
--
|
|
2.41.0.windows.1
|
|
|