diff options
Diffstat (limited to 'drivers/eisa/pci_eisa.c')
-rw-r--r-- | drivers/eisa/pci_eisa.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/drivers/eisa/pci_eisa.c b/drivers/eisa/pci_eisa.c index ef5c3ec87432..6c3fca97d346 100644 --- a/drivers/eisa/pci_eisa.c +++ b/drivers/eisa/pci_eisa.c | |||
@@ -19,8 +19,7 @@ | |||
19 | /* There is only *one* pci_eisa device per machine, right ? */ | 19 | /* There is only *one* pci_eisa device per machine, right ? */ |
20 | static struct eisa_root_device pci_eisa_root; | 20 | static struct eisa_root_device pci_eisa_root; |
21 | 21 | ||
22 | static int __init pci_eisa_init(struct pci_dev *pdev, | 22 | static int __init pci_eisa_init(struct pci_dev *pdev) |
23 | const struct pci_device_id *ent) | ||
24 | { | 23 | { |
25 | int rc, i; | 24 | int rc, i; |
26 | struct resource *res, *bus_res = NULL; | 25 | struct resource *res, *bus_res = NULL; |
@@ -67,22 +66,26 @@ static int __init pci_eisa_init(struct pci_dev *pdev, | |||
67 | return 0; | 66 | return 0; |
68 | } | 67 | } |
69 | 68 | ||
70 | static struct pci_device_id pci_eisa_pci_tbl[] = { | 69 | /* |
71 | { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | 70 | * We have to call pci_eisa_init_early() before pnpacpi_init()/isapnp_init(). |
72 | PCI_CLASS_BRIDGE_EISA << 8, 0xffff00, 0 }, | 71 | * Otherwise pnp resource will get enabled early and could prevent eisa |
73 | { 0, } | 72 | * to be initialized. |
74 | }; | 73 | * Also need to make sure pci_eisa_init_early() is called after |
74 | * x86/pci_subsys_init(). | ||
75 | * So need to use subsys_initcall_sync with it. | ||
76 | */ | ||
77 | static int __init pci_eisa_init_early(void) | ||
78 | { | ||
79 | struct pci_dev *dev = NULL; | ||
80 | int ret; | ||
75 | 81 | ||
76 | static struct pci_driver __refdata pci_eisa_driver = { | 82 | for_each_pci_dev(dev) |
77 | .name = "pci_eisa", | 83 | if ((dev->class >> 8) == PCI_CLASS_BRIDGE_EISA) { |
78 | .id_table = pci_eisa_pci_tbl, | 84 | ret = pci_eisa_init(dev); |
79 | .probe = pci_eisa_init, | 85 | if (ret) |
80 | }; | 86 | return ret; |
87 | } | ||
81 | 88 | ||
82 | static int __init pci_eisa_init_module (void) | 89 | return 0; |
83 | { | ||
84 | return pci_register_driver (&pci_eisa_driver); | ||
85 | } | 90 | } |
86 | 91 | subsys_initcall_sync(pci_eisa_init_early); | |
87 | device_initcall(pci_eisa_init_module); | ||
88 | MODULE_DEVICE_TABLE(pci, pci_eisa_pci_tbl); | ||