}
 }
 
-static int pci_pwrctl_unregister(struct device *dev, void *data)
+static void pci_pwrctl_unregister(struct device *dev)
 {
-       struct device_node *pci_node = data, *plat_node = dev_of_node(dev);
+       struct platform_device *pdev;
 
-       if (dev_is_platform(dev) && plat_node && plat_node == pci_node) {
-               of_device_unregister(to_platform_device(dev));
-               of_node_clear_flag(plat_node, OF_POPULATED);
-       }
+       pdev = of_find_device_by_node(dev_of_node(dev));
+       if (!pdev)
+               return;
 
-       return 0;
+       of_device_unregister(pdev);
+       of_node_clear_flag(dev_of_node(dev), OF_POPULATED);
 }
 
 static void pci_stop_dev(struct pci_dev *dev)
        pci_pme_active(dev, false);
 
        if (pci_dev_is_added(dev)) {
-               device_for_each_child(dev->dev.parent, dev_of_node(&dev->dev),
-                                     pci_pwrctl_unregister);
+               pci_pwrctl_unregister(&dev->dev);
                device_release_driver(&dev->dev);
                pci_proc_detach_device(dev);
                pci_remove_sysfs_dev_files(dev);