diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2006-09-22 05:19:20 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2006-09-22 05:19:20 -0400 |
commit | dd8e9ed6ed544e2b924429d29cd2a6b55590109b (patch) | |
tree | 0961c205e59591e7da65ce7504c919e7ee3e4351 | |
parent | 668040fcd1e06fc3e68a92708cbdfa5a52c37d3c (diff) |
[MTD] Switch to pci_get_device and do ref counting
Signed-off-by: Alan Cox <alan@redhat.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
-rw-r--r-- | drivers/mtd/devices/pmc551.c | 11 | ||||
-rw-r--r-- | drivers/mtd/maps/amd76xrom.c | 5 | ||||
-rw-r--r-- | drivers/mtd/maps/ichxrom.c | 3 | ||||
-rw-r--r-- | drivers/mtd/maps/l440gx.c | 12 | ||||
-rw-r--r-- | drivers/mtd/maps/scx200_docflash.c | 9 |
5 files changed, 32 insertions, 8 deletions
diff --git a/drivers/mtd/devices/pmc551.c b/drivers/mtd/devices/pmc551.c index 2c0149708739..a03a8a79e5c5 100644 --- a/drivers/mtd/devices/pmc551.c +++ b/drivers/mtd/devices/pmc551.c | |||
@@ -674,7 +674,7 @@ static int __init init_pmc551(void) | |||
674 | */ | 674 | */ |
675 | for( count = 0; count < MAX_MTD_DEVICES; count++ ) { | 675 | for( count = 0; count < MAX_MTD_DEVICES; count++ ) { |
676 | 676 | ||
677 | if ((PCI_Device = pci_find_device(PCI_VENDOR_ID_V3_SEMI, | 677 | if ((PCI_Device = pci_get_device(PCI_VENDOR_ID_V3_SEMI, |
678 | PCI_DEVICE_ID_V3_SEMI_V370PDC, | 678 | PCI_DEVICE_ID_V3_SEMI_V370PDC, |
679 | PCI_Device ) ) == NULL) { | 679 | PCI_Device ) ) == NULL) { |
680 | break; | 680 | break; |
@@ -783,6 +783,10 @@ static int __init init_pmc551(void) | |||
783 | kfree(mtd); | 783 | kfree(mtd); |
784 | break; | 784 | break; |
785 | } | 785 | } |
786 | |||
787 | /* Keep a reference as the add_mtd_device worked */ | ||
788 | pci_dev_get(PCI_Device); | ||
789 | |||
786 | printk(KERN_NOTICE "Registered pmc551 memory device.\n"); | 790 | printk(KERN_NOTICE "Registered pmc551 memory device.\n"); |
787 | printk(KERN_NOTICE "Mapped %dM of memory from 0x%p to 0x%p\n", | 791 | printk(KERN_NOTICE "Mapped %dM of memory from 0x%p to 0x%p\n", |
788 | priv->asize>>20, | 792 | priv->asize>>20, |
@@ -797,6 +801,10 @@ static int __init init_pmc551(void) | |||
797 | found++; | 801 | found++; |
798 | } | 802 | } |
799 | 803 | ||
804 | /* Exited early, reference left over */ | ||
805 | if (PCI_Device) | ||
806 | pci_dev_put(PCI_Device); | ||
807 | |||
800 | if( !pmc551list ) { | 808 | if( !pmc551list ) { |
801 | printk(KERN_NOTICE "pmc551: not detected\n"); | 809 | printk(KERN_NOTICE "pmc551: not detected\n"); |
802 | return -ENODEV; | 810 | return -ENODEV; |
@@ -824,6 +832,7 @@ static void __exit cleanup_pmc551(void) | |||
824 | priv->asize>>20, priv->start); | 832 | priv->asize>>20, priv->start); |
825 | iounmap (priv->start); | 833 | iounmap (priv->start); |
826 | } | 834 | } |
835 | pci_dev_put(priv->dev); | ||
827 | 836 | ||
828 | kfree (mtd->priv); | 837 | kfree (mtd->priv); |
829 | del_mtd_device (mtd); | 838 | del_mtd_device (mtd); |
diff --git a/drivers/mtd/maps/amd76xrom.c b/drivers/mtd/maps/amd76xrom.c index 447955be18af..797caffb20b1 100644 --- a/drivers/mtd/maps/amd76xrom.c +++ b/drivers/mtd/maps/amd76xrom.c | |||
@@ -57,6 +57,7 @@ static void amd76xrom_cleanup(struct amd76xrom_window *window) | |||
57 | /* Disable writes through the rom window */ | 57 | /* Disable writes through the rom window */ |
58 | pci_read_config_byte(window->pdev, 0x40, &byte); | 58 | pci_read_config_byte(window->pdev, 0x40, &byte); |
59 | pci_write_config_byte(window->pdev, 0x40, byte & ~1); | 59 | pci_write_config_byte(window->pdev, 0x40, byte & ~1); |
60 | pci_dev_put(window->pdev); | ||
60 | } | 61 | } |
61 | 62 | ||
62 | /* Free all of the mtd devices */ | 63 | /* Free all of the mtd devices */ |
@@ -91,7 +92,7 @@ static int __devinit amd76xrom_init_one (struct pci_dev *pdev, | |||
91 | struct amd76xrom_map_info *map = NULL; | 92 | struct amd76xrom_map_info *map = NULL; |
92 | unsigned long map_top; | 93 | unsigned long map_top; |
93 | 94 | ||
94 | /* Remember the pci dev I find the window in */ | 95 | /* Remember the pci dev I find the window in - already have a ref */ |
95 | window->pdev = pdev; | 96 | window->pdev = pdev; |
96 | 97 | ||
97 | /* Assume the rom window is properly setup, and find it's size */ | 98 | /* Assume the rom window is properly setup, and find it's size */ |
@@ -302,7 +303,7 @@ static int __init init_amd76xrom(void) | |||
302 | struct pci_device_id *id; | 303 | struct pci_device_id *id; |
303 | pdev = NULL; | 304 | pdev = NULL; |
304 | for(id = amd76xrom_pci_tbl; id->vendor; id++) { | 305 | for(id = amd76xrom_pci_tbl; id->vendor; id++) { |
305 | pdev = pci_find_device(id->vendor, id->device, NULL); | 306 | pdev = pci_get_device(id->vendor, id->device, NULL); |
306 | if (pdev) { | 307 | if (pdev) { |
307 | break; | 308 | break; |
308 | } | 309 | } |
diff --git a/drivers/mtd/maps/ichxrom.c b/drivers/mtd/maps/ichxrom.c index db4b570d874a..2bb3e63606e5 100644 --- a/drivers/mtd/maps/ichxrom.c +++ b/drivers/mtd/maps/ichxrom.c | |||
@@ -61,6 +61,7 @@ static void ichxrom_cleanup(struct ichxrom_window *window) | |||
61 | /* Disable writes through the rom window */ | 61 | /* Disable writes through the rom window */ |
62 | pci_read_config_word(window->pdev, BIOS_CNTL, &word); | 62 | pci_read_config_word(window->pdev, BIOS_CNTL, &word); |
63 | pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1); | 63 | pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1); |
64 | pci_dev_put(window->pdev); | ||
64 | 65 | ||
65 | /* Free all of the mtd devices */ | 66 | /* Free all of the mtd devices */ |
66 | list_for_each_entry_safe(map, scratch, &window->maps, list) { | 67 | list_for_each_entry_safe(map, scratch, &window->maps, list) { |
@@ -355,7 +356,7 @@ static int __init init_ichxrom(void) | |||
355 | 356 | ||
356 | pdev = NULL; | 357 | pdev = NULL; |
357 | for (id = ichxrom_pci_tbl; id->vendor; id++) { | 358 | for (id = ichxrom_pci_tbl; id->vendor; id++) { |
358 | pdev = pci_find_device(id->vendor, id->device, NULL); | 359 | pdev = pci_get_device(id->vendor, id->device, NULL); |
359 | if (pdev) { | 360 | if (pdev) { |
360 | break; | 361 | break; |
361 | } | 362 | } |
diff --git a/drivers/mtd/maps/l440gx.c b/drivers/mtd/maps/l440gx.c index 6b784ef5ee70..67620adf4811 100644 --- a/drivers/mtd/maps/l440gx.c +++ b/drivers/mtd/maps/l440gx.c | |||
@@ -61,14 +61,17 @@ static int __init init_l440gx(void) | |||
61 | struct resource *pm_iobase; | 61 | struct resource *pm_iobase; |
62 | __u16 word; | 62 | __u16 word; |
63 | 63 | ||
64 | dev = pci_find_device(PCI_VENDOR_ID_INTEL, | 64 | dev = pci_get_device(PCI_VENDOR_ID_INTEL, |
65 | PCI_DEVICE_ID_INTEL_82371AB_0, NULL); | 65 | PCI_DEVICE_ID_INTEL_82371AB_0, NULL); |
66 | 66 | ||
67 | pm_dev = pci_find_device(PCI_VENDOR_ID_INTEL, | 67 | pm_dev = pci_get_device(PCI_VENDOR_ID_INTEL, |
68 | PCI_DEVICE_ID_INTEL_82371AB_3, NULL); | 68 | PCI_DEVICE_ID_INTEL_82371AB_3, NULL); |
69 | 69 | ||
70 | pci_dev_put(dev); | ||
71 | |||
70 | if (!dev || !pm_dev) { | 72 | if (!dev || !pm_dev) { |
71 | printk(KERN_NOTICE "L440GX flash mapping: failed to find PIIX4 ISA bridge, cannot continue\n"); | 73 | printk(KERN_NOTICE "L440GX flash mapping: failed to find PIIX4 ISA bridge, cannot continue\n"); |
74 | pci_dev_put(pm_dev); | ||
72 | return -ENODEV; | 75 | return -ENODEV; |
73 | } | 76 | } |
74 | 77 | ||
@@ -76,6 +79,7 @@ static int __init init_l440gx(void) | |||
76 | 79 | ||
77 | if (!l440gx_map.virt) { | 80 | if (!l440gx_map.virt) { |
78 | printk(KERN_WARNING "Failed to ioremap L440GX flash region\n"); | 81 | printk(KERN_WARNING "Failed to ioremap L440GX flash region\n"); |
82 | pci_dev_put(pm_dev); | ||
79 | return -ENOMEM; | 83 | return -ENOMEM; |
80 | } | 84 | } |
81 | simple_map_init(&l440gx_map); | 85 | simple_map_init(&l440gx_map); |
@@ -99,8 +103,12 @@ static int __init init_l440gx(void) | |||
99 | pm_iobase->start += iobase & ~1; | 103 | pm_iobase->start += iobase & ~1; |
100 | pm_iobase->end += iobase & ~1; | 104 | pm_iobase->end += iobase & ~1; |
101 | 105 | ||
106 | pci_dev_put(pm_dev); | ||
107 | |||
102 | /* Allocate the resource region */ | 108 | /* Allocate the resource region */ |
103 | if (pci_assign_resource(pm_dev, PIIXE_IOBASE_RESOURCE) != 0) { | 109 | if (pci_assign_resource(pm_dev, PIIXE_IOBASE_RESOURCE) != 0) { |
110 | pci_dev_put(dev); | ||
111 | pci_dev_put(pm_dev); | ||
104 | printk(KERN_WARNING "Could not allocate pm iobase resource\n"); | 112 | printk(KERN_WARNING "Could not allocate pm iobase resource\n"); |
105 | iounmap(l440gx_map.virt); | 113 | iounmap(l440gx_map.virt); |
106 | return -ENXIO; | 114 | return -ENXIO; |
diff --git a/drivers/mtd/maps/scx200_docflash.c b/drivers/mtd/maps/scx200_docflash.c index 7391fd544e86..5e2bce22f37c 100644 --- a/drivers/mtd/maps/scx200_docflash.c +++ b/drivers/mtd/maps/scx200_docflash.c | |||
@@ -87,19 +87,23 @@ static int __init init_scx200_docflash(void) | |||
87 | 87 | ||
88 | printk(KERN_DEBUG NAME ": NatSemi SCx200 DOCCS Flash Driver\n"); | 88 | printk(KERN_DEBUG NAME ": NatSemi SCx200 DOCCS Flash Driver\n"); |
89 | 89 | ||
90 | if ((bridge = pci_find_device(PCI_VENDOR_ID_NS, | 90 | if ((bridge = pci_get_device(PCI_VENDOR_ID_NS, |
91 | PCI_DEVICE_ID_NS_SCx200_BRIDGE, | 91 | PCI_DEVICE_ID_NS_SCx200_BRIDGE, |
92 | NULL)) == NULL) | 92 | NULL)) == NULL) |
93 | return -ENODEV; | 93 | return -ENODEV; |
94 | 94 | ||
95 | /* check that we have found the configuration block */ | 95 | /* check that we have found the configuration block */ |
96 | if (!scx200_cb_present()) | 96 | if (!scx200_cb_present()) { |
97 | pci_dev_put(bridge); | ||
97 | return -ENODEV; | 98 | return -ENODEV; |
99 | } | ||
98 | 100 | ||
99 | if (probe) { | 101 | if (probe) { |
100 | /* Try to use the present flash mapping if any */ | 102 | /* Try to use the present flash mapping if any */ |
101 | pci_read_config_dword(bridge, SCx200_DOCCS_BASE, &base); | 103 | pci_read_config_dword(bridge, SCx200_DOCCS_BASE, &base); |
102 | pci_read_config_dword(bridge, SCx200_DOCCS_CTRL, &ctrl); | 104 | pci_read_config_dword(bridge, SCx200_DOCCS_CTRL, &ctrl); |
105 | pci_dev_put(bridge); | ||
106 | |||
103 | pmr = inl(scx200_cb_base + SCx200_PMR); | 107 | pmr = inl(scx200_cb_base + SCx200_PMR); |
104 | 108 | ||
105 | if (base == 0 | 109 | if (base == 0 |
@@ -127,6 +131,7 @@ static int __init init_scx200_docflash(void) | |||
127 | return -ENOMEM; | 131 | return -ENOMEM; |
128 | } | 132 | } |
129 | } else { | 133 | } else { |
134 | pci_dev_put(bridge); | ||
130 | for (u = size; u > 1; u >>= 1) | 135 | for (u = size; u > 1; u >>= 1) |
131 | ; | 136 | ; |
132 | if (u != 1) { | 137 | if (u != 1) { |