提交 38d09093 编写于 作者: J Jiri Slaby 提交者: Linus Torvalds

Char: cyclades, use pci_iomap/unmap

fork remove code for pci -- move it to separate, new, function and don't care
about pci in the former.
Signed-off-by: NJiri Slaby <jirislaby@gmail.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 d407c781
...@@ -4775,6 +4775,7 @@ static int __devinit cy_init_Ze(unsigned long cy_pci_phys0, ...@@ -4775,6 +4775,7 @@ static int __devinit cy_init_Ze(unsigned long cy_pci_phys0,
cy_card[j].first_line = cy_next_channel; cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1; cy_card[j].num_chips = -1;
cy_card[j].pdev = pdev; cy_card[j].pdev = pdev;
pci_set_drvdata(pdev, &cy_card[j]);
/* print message */ /* print message */
#ifdef CONFIG_CYZ_INTR #ifdef CONFIG_CYZ_INTR
...@@ -4889,8 +4890,8 @@ static int __init cy_detect_pci(void) ...@@ -4889,8 +4890,8 @@ static int __init cy_detect_pci(void)
continue; continue;
} }
#endif #endif
cy_pci_addr0 = ioremap(cy_pci_phys0, CyPCI_Yctl); cy_pci_addr0 = pci_iomap(pdev, 0, CyPCI_Yctl);
cy_pci_addr2 = ioremap(cy_pci_phys2, CyPCI_Ywin); cy_pci_addr2 = pci_iomap(pdev, 2, CyPCI_Ywin);
#ifdef CY_PCI_DEBUG #ifdef CY_PCI_DEBUG
printk("Cyclom-Y/PCI: relocate winaddr=0x%lx " printk("Cyclom-Y/PCI: relocate winaddr=0x%lx "
...@@ -4948,6 +4949,7 @@ static int __init cy_detect_pci(void) ...@@ -4948,6 +4949,7 @@ static int __init cy_detect_pci(void)
cy_card[j].first_line = cy_next_channel; cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = cy_pci_nchan / 4; cy_card[j].num_chips = cy_pci_nchan / 4;
cy_card[j].pdev = pdev; cy_card[j].pdev = pdev;
pci_set_drvdata(pdev, &cy_card[j]);
/* enable interrupts in the PCI interface */ /* enable interrupts in the PCI interface */
plx_ver = readb(cy_pci_addr2 + CyPLX_VER) & 0x0f; plx_ver = readb(cy_pci_addr2 + CyPLX_VER) & 0x0f;
...@@ -5006,7 +5008,7 @@ static int __init cy_detect_pci(void) ...@@ -5006,7 +5008,7 @@ static int __init cy_detect_pci(void)
"ctladdr=0x%lx\n", "ctladdr=0x%lx\n",
(ulong) cy_pci_phys2, (ulong) cy_pci_phys0); (ulong) cy_pci_phys2, (ulong) cy_pci_phys0);
#endif #endif
cy_pci_addr0 = ioremap(cy_pci_phys0, CyPCI_Zctl); cy_pci_addr0 = pci_iomap(pdev, 0, CyPCI_Zctl);
/* Disable interrupts on the PLX before resetting it */ /* Disable interrupts on the PLX before resetting it */
cy_writew(cy_pci_addr0 + 0x68, cy_writew(cy_pci_addr0 + 0x68,
...@@ -5040,8 +5042,7 @@ static int __init cy_detect_pci(void) ...@@ -5040,8 +5042,7 @@ static int __init cy_detect_pci(void)
} }
if (mailbox == ZE_V1) { if (mailbox == ZE_V1) {
cy_pci_addr2 = ioremap(cy_pci_phys2, cy_pci_addr2 = pci_iomap(pdev, 2, CyPCI_Ze_win);
CyPCI_Ze_win);
if (ZeIndex == NR_CARDS) { if (ZeIndex == NR_CARDS) {
printk("Cyclades-Ze/PCI found at " printk("Cyclades-Ze/PCI found at "
"0x%lx but no more cards can " "0x%lx but no more cards can "
...@@ -5061,7 +5062,7 @@ static int __init cy_detect_pci(void) ...@@ -5061,7 +5062,7 @@ static int __init cy_detect_pci(void)
i--; i--;
continue; continue;
} else { } else {
cy_pci_addr2 = ioremap(cy_pci_phys2,CyPCI_Zwin); cy_pci_addr2 = pci_iomap(pdev, 2, CyPCI_Zwin);
} }
#ifdef CY_PCI_DEBUG #ifdef CY_PCI_DEBUG
...@@ -5145,6 +5146,7 @@ static int __init cy_detect_pci(void) ...@@ -5145,6 +5146,7 @@ static int __init cy_detect_pci(void)
cy_card[j].first_line = cy_next_channel; cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1; cy_card[j].num_chips = -1;
cy_card[j].pdev = pdev; cy_card[j].pdev = pdev;
pci_set_drvdata(pdev, &cy_card[j]);
/* print message */ /* print message */
#ifdef CONFIG_CYZ_INTR #ifdef CONFIG_CYZ_INTR
...@@ -5198,6 +5200,26 @@ static int __init cy_detect_pci(void) ...@@ -5198,6 +5200,26 @@ static int __init cy_detect_pci(void)
#endif /* ifdef CONFIG_PCI */ #endif /* ifdef CONFIG_PCI */
} /* cy_detect_pci */ } /* cy_detect_pci */
static void __devexit cy_pci_release(struct pci_dev *pdev)
{
#ifdef CONFIG_PCI
struct cyclades_card *cinfo = pci_get_drvdata(pdev);
pci_iounmap(pdev, cinfo->base_addr);
if (cinfo->ctl_addr)
pci_iounmap(pdev, cinfo->ctl_addr);
if (cinfo->irq
#ifndef CONFIG_CYZ_INTR
&& cinfo->num_chips != -1 /* not a Z card */
#endif /* CONFIG_CYZ_INTR */
)
free_irq(cinfo->irq, cinfo);
pci_release_regions(pdev);
cinfo->base_addr = NULL;
#endif
}
/* /*
* This routine prints out the appropriate serial driver version number * This routine prints out the appropriate serial driver version number
* and identifies which options were configured into this driver. * and identifies which options were configured into this driver.
...@@ -5546,6 +5568,10 @@ static void __exit cy_cleanup_module(void) ...@@ -5546,6 +5568,10 @@ static void __exit cy_cleanup_module(void)
for (i = 0; i < NR_CARDS; i++) { for (i = 0; i < NR_CARDS; i++) {
if (cy_card[i].base_addr) { if (cy_card[i].base_addr) {
if (cy_card[i].pdev) {
cy_pci_release(cy_card[i].pdev);
continue;
}
iounmap(cy_card[i].base_addr); iounmap(cy_card[i].base_addr);
if (cy_card[i].ctl_addr) if (cy_card[i].ctl_addr)
iounmap(cy_card[i].ctl_addr); iounmap(cy_card[i].ctl_addr);
...@@ -5555,10 +5581,6 @@ static void __exit cy_cleanup_module(void) ...@@ -5555,10 +5581,6 @@ static void __exit cy_cleanup_module(void)
#endif /* CONFIG_CYZ_INTR */ #endif /* CONFIG_CYZ_INTR */
) )
free_irq(cy_card[i].irq, &cy_card[i]); free_irq(cy_card[i].irq, &cy_card[i]);
#ifdef CONFIG_PCI
if (cy_card[i].pdev)
pci_release_regions(cy_card[i].pdev);
#endif
} }
} }
} /* cy_cleanup_module */ } /* cy_cleanup_module */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册