[PATCH v2 24/25] hw/arm: catalina: drive pca9554 io expander input pins externally
Emmanuel Blot via <[email protected]> Fri, 31 Jul 2026 12:45:23 +0200
| Newsgroups | org.nongnu.qemu-arm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Create io_expander5 (pca9554@27) with hw-dir=true so its pin%d QOM properties drive the external input level of each pin, matching the pca9555 expanders, instead of the legacy behaviour that forces the pin to an output. This lets external agents, including tests, stimulate the input pins and have the guest read them back. Signed-off-by: Emmanuel Blot <[email protected]> --- hw/arm/aspeed_ast2600_catalina.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/hw/arm/aspeed_ast2600_catalina.c b/hw/arm/aspeed_ast2600_catalina.c index 928e140b21..69e072c932 100644 --- a/hw/arm/aspeed_ast2600_catalina.c +++ b/hw/arm/aspeed_ast2600_catalina.c @@ -545,9 +545,16 @@ static void catalina_bmc_i2c_init(AspeedMachineState *bmc) i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 5), TYPE_TMP75, 0x4f); /* i2c1mux0ch6 */ - /* io_expander5 - pca9554@27 */ - i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 6), - TYPE_PCA9554, 0x27); + /* io_expander5 - pca9554@27 (external agents drive its input pins) */ + { + I2CBus *bus = pca954x_i2c_get_bus(i2c_mux, 6); + I2CSlave *ioexp = i2c_slave_new(TYPE_PCA9554, 0x27); + + object_property_add_child(OBJECT(bus), "0x27", OBJECT(ioexp)); + object_property_set_bool(OBJECT(ioexp), "hw-dir", true, + &error_abort); + i2c_slave_realize_and_unref(ioexp, bus, &error_abort); + } /* io_expander6 - pca9555@25 */ i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 6), TYPE_PCA9555, 0x25); -- 2.50.1