AVR MCU have various GPIO ports. Add an 'id' property to distinct all instances.
Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- include/hw/gpio/avr_gpio.h | 1 + hw/avr/atmega.c | 1 + hw/gpio/avr_gpio.c | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/hw/gpio/avr_gpio.h b/include/hw/gpio/avr_gpio.h index 498a7275f05..e982f627ea3 100644 --- a/include/hw/gpio/avr_gpio.h +++ b/include/hw/gpio/avr_gpio.h @@ -48,6 +48,7 @@ struct AVRGPIOState { /* PORTx data changed IRQs */ qemu_irq out[8u]; + uint8_t id; }; #endif /* AVR_GPIO_H */ diff --git a/hw/avr/atmega.c b/hw/avr/atmega.c index 19c3122189f..a19e3035022 100644 --- a/hw/avr/atmega.c +++ b/hw/avr/atmega.c @@ -285,6 +285,7 @@ static void atmega_realize(DeviceState *dev, Error **errp) devname = g_strdup_printf("atmega-gpio-%c", 'a' + (char)i); object_initialize_child(OBJECT(dev), devname, &s->gpio[i], TYPE_AVR_GPIO); + qdev_prop_set_uint8(DEVICE(&s->gpio[i]), "id", i); sysbus_realize(SYS_BUS_DEVICE(&s->gpio[i]), &error_abort); sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio[i]), 0, OFFSET_DATA + mc->dev[idx].addr); diff --git a/hw/gpio/avr_gpio.c b/hw/gpio/avr_gpio.c index da34009daea..3db55bfa77f 100644 --- a/hw/gpio/avr_gpio.c +++ b/hw/gpio/avr_gpio.c @@ -113,6 +113,11 @@ static const VMStateDescription avr_gpio_vmstate = { }, }; +static Property avr_gpio_properties[] = { + DEFINE_PROP_UINT8("id", AVRGPIOState, id, UINT8_MAX), + DEFINE_PROP_END_OF_LIST(), +}; + static void avr_gpio_init(Object *obj) { AVRGPIOState *s = AVR_GPIO(obj); @@ -123,9 +128,13 @@ static void avr_gpio_init(Object *obj) } static void avr_gpio_realize(DeviceState *dev, Error **errp) { - /* Do nothing currently */ -} + AVRGPIOState *s = AVR_GPIO(dev); + if (s->id == UINT8_MAX) { + error_setg(errp, "property 'id' not set"); + return; + } +} static void avr_gpio_class_init(ObjectClass *klass, void *data) { @@ -134,6 +143,7 @@ static void avr_gpio_class_init(ObjectClass *klass, void *data) dc->reset = avr_gpio_reset; dc->realize = avr_gpio_realize; dc->vmsd = &avr_gpio_vmstate; + device_class_set_props(dc, avr_gpio_properties); } static const TypeInfo avr_gpio_info = { -- 2.26.2