diff options
-rw-r--r-- | drivers/pci/probe.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 49599ac49bda..8c158b9abd41 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -842,6 +842,11 @@ static int pci_setup_device(struct pci_dev * dev) | |||
842 | return 0; | 842 | return 0; |
843 | } | 843 | } |
844 | 844 | ||
845 | static void pci_release_capabilities(struct pci_dev *dev) | ||
846 | { | ||
847 | pci_vpd_release(dev); | ||
848 | } | ||
849 | |||
845 | /** | 850 | /** |
846 | * pci_release_dev - free a pci device structure when all users of it are finished. | 851 | * pci_release_dev - free a pci device structure when all users of it are finished. |
847 | * @dev: device that's been disconnected | 852 | * @dev: device that's been disconnected |
@@ -854,7 +859,7 @@ static void pci_release_dev(struct device *dev) | |||
854 | struct pci_dev *pci_dev; | 859 | struct pci_dev *pci_dev; |
855 | 860 | ||
856 | pci_dev = to_pci_dev(dev); | 861 | pci_dev = to_pci_dev(dev); |
857 | pci_vpd_release(pci_dev); | 862 | pci_release_capabilities(pci_dev); |
858 | kfree(pci_dev); | 863 | kfree(pci_dev); |
859 | } | 864 | } |
860 | 865 | ||
@@ -935,8 +940,6 @@ struct pci_dev *alloc_pci_dev(void) | |||
935 | 940 | ||
936 | INIT_LIST_HEAD(&dev->bus_list); | 941 | INIT_LIST_HEAD(&dev->bus_list); |
937 | 942 | ||
938 | pci_msi_init_pci_dev(dev); | ||
939 | |||
940 | return dev; | 943 | return dev; |
941 | } | 944 | } |
942 | EXPORT_SYMBOL(alloc_pci_dev); | 945 | EXPORT_SYMBOL(alloc_pci_dev); |
@@ -1009,11 +1012,21 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) | |||
1009 | return NULL; | 1012 | return NULL; |
1010 | } | 1013 | } |
1011 | 1014 | ||
1012 | pci_vpd_pci22_init(dev); | ||
1013 | |||
1014 | return dev; | 1015 | return dev; |
1015 | } | 1016 | } |
1016 | 1017 | ||
1018 | static void pci_init_capabilities(struct pci_dev *dev) | ||
1019 | { | ||
1020 | /* MSI/MSI-X list */ | ||
1021 | pci_msi_init_pci_dev(dev); | ||
1022 | |||
1023 | /* Power Management */ | ||
1024 | pci_pm_init(dev); | ||
1025 | |||
1026 | /* Vital Product Data */ | ||
1027 | pci_vpd_pci22_init(dev); | ||
1028 | } | ||
1029 | |||
1017 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) | 1030 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) |
1018 | { | 1031 | { |
1019 | device_initialize(&dev->dev); | 1032 | device_initialize(&dev->dev); |
@@ -1030,8 +1043,8 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) | |||
1030 | /* Fix up broken headers */ | 1043 | /* Fix up broken headers */ |
1031 | pci_fixup_device(pci_fixup_header, dev); | 1044 | pci_fixup_device(pci_fixup_header, dev); |
1032 | 1045 | ||
1033 | /* Initialize power management of the device */ | 1046 | /* Initialize various capabilities */ |
1034 | pci_pm_init(dev); | 1047 | pci_init_capabilities(dev); |
1035 | 1048 | ||
1036 | /* | 1049 | /* |
1037 | * Add the device to our list of discovered devices | 1050 | * Add the device to our list of discovered devices |