summaryrefslogtreecommitdiffstats
path: root/hw/ssi/ssi.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/ssi/ssi.c')
-rw-r--r--hw/ssi/ssi.c43
1 files changed, 3 insertions, 40 deletions
diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c
index c6415eb6e3..67b48c31cd 100644
--- a/hw/ssi/ssi.c
+++ b/hw/ssi/ssi.c
@@ -16,6 +16,7 @@
#include "hw/ssi/ssi.h"
#include "migration/vmstate.h"
#include "qemu/module.h"
+#include "qapi/error.h"
struct SSIBus {
BusState parent_obj;
@@ -89,16 +90,11 @@ static const TypeInfo ssi_slave_info = {
.abstract = true,
};
-DeviceState *ssi_create_slave_no_init(SSIBus *bus, const char *name)
-{
- return qdev_create(BUS(bus), name);
-}
-
DeviceState *ssi_create_slave(SSIBus *bus, const char *name)
{
- DeviceState *dev = ssi_create_slave_no_init(bus, name);
+ DeviceState *dev = qdev_new(name);
- qdev_init_nofail(dev);
+ qdev_realize_and_unref(dev, &bus->parent_obj, &error_fatal);
return dev;
}
@@ -142,36 +138,3 @@ static void ssi_slave_register_types(void)
}
type_init(ssi_slave_register_types)
-
-typedef struct SSIAutoConnectArg {
- qemu_irq **cs_linep;
- SSIBus *bus;
-} SSIAutoConnectArg;
-
-static int ssi_auto_connect_slave(Object *child, void *opaque)
-{
- SSIAutoConnectArg *arg = opaque;
- SSISlave *dev = (SSISlave *)object_dynamic_cast(child, TYPE_SSI_SLAVE);
- qemu_irq cs_line;
-
- if (!dev) {
- return 0;
- }
-
- cs_line = qdev_get_gpio_in_named(DEVICE(dev), SSI_GPIO_CS, 0);
- qdev_set_parent_bus(DEVICE(dev), BUS(arg->bus));
- **arg->cs_linep = cs_line;
- (*arg->cs_linep)++;
- return 0;
-}
-
-void ssi_auto_connect_slaves(DeviceState *parent, qemu_irq *cs_line,
- SSIBus *bus)
-{
- SSIAutoConnectArg arg = {
- .cs_linep = &cs_line,
- .bus = bus
- };
-
- object_child_foreach(OBJECT(parent), ssi_auto_connect_slave, &arg);
-}