diff --git a/hw/pci.h b/hw/pci.h
index 5340bbb..0686591 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -341,7 +341,7 @@
 void usb_uhci_piix4_init(PCIBus *bus, int devfn);
 
 /* usb-ohci.c */
-void usb_ohci_init_pci(struct PCIBus *bus, int num_ports, int devfn);
+void usb_ohci_init_pci(struct PCIBus *bus, int devfn);
 
 /* prep_pci.c */
 PCIBus *pci_prep_init(qemu_irq *pic);
diff --git a/hw/ppc_newworld.c b/hw/ppc_newworld.c
index 4951ea7..9a491eb 100644
--- a/hw/ppc_newworld.c
+++ b/hw/ppc_newworld.c
@@ -332,7 +332,7 @@
                escc_mem_index);
 
     if (usb_enabled) {
-        usb_ohci_init_pci(pci_bus, 3, -1);
+        usb_ohci_init_pci(pci_bus, -1);
     }
 
     if (graphic_depth != 15 && graphic_depth != 32 && graphic_depth != 8)
diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c
index 25ab19e..6933650 100644
--- a/hw/ppc_oldworld.c
+++ b/hw/ppc_oldworld.c
@@ -356,7 +356,7 @@
                escc_mem_index);
 
     if (usb_enabled) {
-        usb_ohci_init_pci(pci_bus, 3, -1);
+        usb_ohci_init_pci(pci_bus, -1);
     }
 
     if (graphic_depth != 15 && graphic_depth != 32 && graphic_depth != 8)
diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c
index c081d58..8ba434d 100644
--- a/hw/ppc_prep.c
+++ b/hw/ppc_prep.c
@@ -745,7 +745,7 @@
 #endif
 
     if (usb_enabled) {
-        usb_ohci_init_pci(pci_bus, 3, -1);
+        usb_ohci_init_pci(pci_bus, -1);
     }
 
     m48t59 = m48t59_init(i8259[8], 0, 0x0074, NVRAM_SIZE, 59);
diff --git a/hw/realview.c b/hw/realview.c
index 8e176b9..a55fba7 100644
--- a/hw/realview.c
+++ b/hw/realview.c
@@ -111,7 +111,7 @@
                                 pic[48], pic[49], pic[50], pic[51], NULL);
     pci_bus = (PCIBus *)qdev_get_child_bus(dev, "pci");
     if (usb_enabled) {
-        usb_ohci_init_pci(pci_bus, 3, -1);
+        usb_ohci_init_pci(pci_bus, -1);
     }
     n = drive_get_max_bus(IF_SCSI);
     while (n >= 0) {
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index 7f620c7..96a9555 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -1660,7 +1660,8 @@
     ohci_mem_write
 };
 
-static void usb_ohci_init(OHCIState *ohci, int num_ports, int devfn,
+static void usb_ohci_init(OHCIState *ohci, DeviceState *dev,
+                          int num_ports, int devfn,
                           qemu_irq irq, enum ohci_type type,
                           const char *name, uint32_t localmem_base)
 {
@@ -1689,7 +1690,7 @@
     ohci->irq = irq;
     ohci->type = type;
 
-    ohci->bus = usb_bus_new(NULL /* FIXME */);
+    ohci->bus = usb_bus_new(dev);
     ohci->num_ports = num_ports;
     for (i = 0; i < num_ports; i++) {
         usb_register_port(ohci->bus, &ohci->rhport[i].port, ohci, i, ohci_attach);
@@ -1712,17 +1713,10 @@
     cpu_register_physical_memory(addr, size, ohci->state.mem);
 }
 
-void usb_ohci_init_pci(struct PCIBus *bus, int num_ports, int devfn)
+static int usb_ohci_initfn_pci(struct PCIDevice *dev)
 {
-    OHCIPCIState *ohci;
-
-    ohci = DO_UPCAST(OHCIPCIState, pci_dev,
-                     pci_register_device(bus, "OHCI USB", sizeof(*ohci),
-                                         devfn, NULL, NULL));
-    if (ohci == NULL) {
-        fprintf(stderr, "usb-ohci: Failed to register PCI device\n");
-        return;
-    }
+    OHCIPCIState *ohci = DO_UPCAST(OHCIPCIState, pci_dev, dev);
+    int num_ports = 3;
 
     pci_config_set_vendor_id(ohci->pci_dev.config, PCI_VENDOR_ID_APPLE);
     pci_config_set_device_id(ohci->pci_dev.config,
@@ -1731,11 +1725,18 @@
     pci_config_set_class(ohci->pci_dev.config, PCI_CLASS_SERIAL_USB);
     ohci->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */
 
-    usb_ohci_init(&ohci->state, num_ports, devfn, ohci->pci_dev.irq[0],
+    usb_ohci_init(&ohci->state, &dev->qdev, num_ports,
+                  ohci->pci_dev.devfn, ohci->pci_dev.irq[0],
                   OHCI_TYPE_PCI, ohci->pci_dev.name, 0);
 
     pci_register_bar((struct PCIDevice *)ohci, 0, 256,
                            PCI_ADDRESS_SPACE_MEM, ohci_mapfunc);
+    return 0;
+}
+
+void usb_ohci_init_pci(struct PCIBus *bus, int devfn)
+{
+    pci_create_simple(bus, devfn, "OHCI USB PCI");
 }
 
 void usb_ohci_init_pxa(target_phys_addr_t base, int num_ports, int devfn,
@@ -1743,7 +1744,7 @@
 {
     OHCIState *ohci = (OHCIState *)qemu_mallocz(sizeof(OHCIState));
 
-    usb_ohci_init(ohci, num_ports, devfn, irq,
+    usb_ohci_init(ohci, NULL /* FIXME */, num_ports, devfn, irq,
                   OHCI_TYPE_PXA, "OHCI USB", 0);
 
     cpu_register_physical_memory(base, 0x1000, ohci->mem);
@@ -1754,9 +1755,22 @@
 {
     OHCIState *ohci = (OHCIState *)qemu_mallocz(sizeof(OHCIState));
 
-    usb_ohci_init(ohci, num_ports, devfn, irq,
+    usb_ohci_init(ohci, NULL /* FIXME */, num_ports, devfn, irq,
                   OHCI_TYPE_SM501, "OHCI USB", localmem_base);
 
     cpu_register_physical_memory(mmio_base, 0x1000, ohci->mem);
 }
 
+static PCIDeviceInfo ohci_info = {
+    .qdev.name    = "OHCI USB PCI",
+    .qdev.alias   = "pci-ohci",
+    .qdev.desc    = "Apple USB Controller",
+    .qdev.size    = sizeof(OHCIPCIState),
+    .init         = usb_ohci_initfn_pci,
+};
+
+static void ohci_register(void)
+{
+    pci_qdev_register(&ohci_info);
+}
+device_init(ohci_register);
diff --git a/hw/versatilepb.c b/hw/versatilepb.c
index 4c01720..29b85ae 100644
--- a/hw/versatilepb.c
+++ b/hw/versatilepb.c
@@ -217,7 +217,7 @@
         }
     }
     if (usb_enabled) {
-        usb_ohci_init_pci(pci_bus, 3, -1);
+        usb_ohci_init_pci(pci_bus, -1);
     }
     n = drive_get_max_bus(IF_SCSI);
     while (n >= 0) {
