diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-09-11 17:47:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-09-11 17:47:23 -0400 |
commit | 6e21ce9d816b9ecc2349ad652fee9c6f28c43877 (patch) | |
tree | a598c00d6f9615e99673d348de93b3d31adf4911 /drivers/ide/setup-pci.c | |
parent | 01a6a7790e8e466584fc845f3cfc1770ffa1fee5 (diff) | |
parent | 56fe23d5a702a39ee3bb29a04b55db292479d07a (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6:
pdc202xx_new: PLL detection fix
via82cxxx: add Arima W730-K8 and other rebadgings to short cables list
pmac: build fix
pata_ali/alim15x3: override 80-wire cable detection for Toshiba S1800-814
hpt366: UltraDMA filter for SATA cards (take 2)
ide: add ide_dev_is_sata() helper (take 2)
hpt366: fix PCI clock detection for HPT374 (take 4)
pdc202xx_new: fix PCI refcounting
ide: fix PCI refcounting
mpc8xx: Only build mpc8xx on arch/ppc
Diffstat (limited to 'drivers/ide/setup-pci.c')
-rw-r--r-- | drivers/ide/setup-pci.c | 41 |
1 files changed, 16 insertions, 25 deletions
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c index 30e596c0f120..1129f8c30840 100644 --- a/drivers/ide/setup-pci.c +++ b/drivers/ide/setup-pci.c | |||
@@ -816,19 +816,15 @@ static int __init ide_scan_pcidev(struct pci_dev *dev) | |||
816 | struct list_head *l; | 816 | struct list_head *l; |
817 | struct pci_driver *d; | 817 | struct pci_driver *d; |
818 | 818 | ||
819 | list_for_each(l, &ide_pci_drivers) | 819 | list_for_each(l, &ide_pci_drivers) { |
820 | { | ||
821 | d = list_entry(l, struct pci_driver, node); | 820 | d = list_entry(l, struct pci_driver, node); |
822 | if(d->id_table) | 821 | if (d->id_table) { |
823 | { | 822 | const struct pci_device_id *id = pci_match_id(d->id_table, |
824 | const struct pci_device_id *id = pci_match_id(d->id_table, dev); | 823 | dev); |
825 | if(id != NULL) | 824 | if (id != NULL && d->probe(dev, id) >= 0) { |
826 | { | 825 | dev->driver = d; |
827 | if(d->probe(dev, id) >= 0) | 826 | pci_dev_get(dev); |
828 | { | 827 | return 1; |
829 | dev->driver = d; | ||
830 | return 1; | ||
831 | } | ||
832 | } | 828 | } |
833 | } | 829 | } |
834 | } | 830 | } |
@@ -851,15 +847,13 @@ void __init ide_scan_pcibus (int scan_direction) | |||
851 | struct list_head *l, *n; | 847 | struct list_head *l, *n; |
852 | 848 | ||
853 | pre_init = 0; | 849 | pre_init = 0; |
854 | if (!scan_direction) { | 850 | if (!scan_direction) |
855 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { | 851 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) |
856 | ide_scan_pcidev(dev); | 852 | ide_scan_pcidev(dev); |
857 | } | 853 | else |
858 | } else { | 854 | while ((dev = pci_get_device_reverse(PCI_ANY_ID, PCI_ANY_ID, dev)) |
859 | while ((dev = pci_get_device_reverse(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { | 855 | != NULL) |
860 | ide_scan_pcidev(dev); | 856 | ide_scan_pcidev(dev); |
861 | } | ||
862 | } | ||
863 | 857 | ||
864 | /* | 858 | /* |
865 | * Hand the drivers over to the PCI layer now we | 859 | * Hand the drivers over to the PCI layer now we |
@@ -869,12 +863,9 @@ void __init ide_scan_pcibus (int scan_direction) | |||
869 | list_for_each_safe(l, n, &ide_pci_drivers) { | 863 | list_for_each_safe(l, n, &ide_pci_drivers) { |
870 | list_del(l); | 864 | list_del(l); |
871 | d = list_entry(l, struct pci_driver, node); | 865 | d = list_entry(l, struct pci_driver, node); |
872 | if (__pci_register_driver(d, d->driver.owner, | 866 | if (__pci_register_driver(d, d->driver.owner, d->driver.mod_name)) |
873 | d->driver.mod_name)) { | 867 | printk(KERN_ERR "%s: failed to register driver for %s\n", |
874 | printk(KERN_ERR "%s: failed to register driver " | 868 | __FUNCTION__, d->driver.mod_name); |
875 | "for %s\n", __FUNCTION__, | ||
876 | d->driver.mod_name); | ||
877 | } | ||
878 | } | 869 | } |
879 | } | 870 | } |
880 | #endif | 871 | #endif |