Commit 10bdaaa0 authored by Russell King's avatar Russell King Committed by Russell King

[ARM] ecard: add ecardm_iomap() / ecardm_iounmap()

Add devres ecardm_iomap() and ecardm_iounmap() for Acorn expansion
cards.  Convert all expansion card drivers to use them.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent c7b87f3d
...@@ -41,11 +41,11 @@ ...@@ -41,11 +41,11 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/io.h>
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/ecard.h> #include <asm/ecard.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
...@@ -966,6 +966,23 @@ void ecard_setirq(struct expansion_card *ec, const struct expansion_card_ops *op ...@@ -966,6 +966,23 @@ void ecard_setirq(struct expansion_card *ec, const struct expansion_card_ops *op
} }
EXPORT_SYMBOL(ecard_setirq); EXPORT_SYMBOL(ecard_setirq);
void __iomem *ecardm_iomap(struct expansion_card *ec, unsigned int res,
unsigned long offset, unsigned long maxsize)
{
unsigned long start = ecard_resource_start(ec, res);
unsigned long end = ecard_resource_end(ec, res);
if (offset > (end - start))
return NULL;
start += offset;
if (maxsize && end - start > maxsize)
end = start + maxsize;
return devm_ioremap(&ec->dev, start, end - start);
}
EXPORT_SYMBOL(ecardm_iomap);
/* /*
* Probe for an expansion card. * Probe for an expansion card.
* *
......
...@@ -425,8 +425,7 @@ pata_icside_register_v5(struct ata_probe_ent *ae, struct expansion_card *ec) ...@@ -425,8 +425,7 @@ pata_icside_register_v5(struct ata_probe_ent *ae, struct expansion_card *ec)
struct pata_icside_state *state = ae->private_data; struct pata_icside_state *state = ae->private_data;
void __iomem *base; void __iomem *base;
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC), base = ecardm_iomap(info->ec, ECARD_RES_MEMC, 0, 0);
ecard_resource_len(ec, ECARD_RES_MEMC));
if (!base) if (!base)
return -ENOMEM; return -ENOMEM;
...@@ -453,24 +452,17 @@ pata_icside_register_v6(struct ata_probe_ent *ae, struct expansion_card *ec) ...@@ -453,24 +452,17 @@ pata_icside_register_v6(struct ata_probe_ent *ae, struct expansion_card *ec)
struct pata_icside_state *state = ae->private_data; struct pata_icside_state *state = ae->private_data;
void __iomem *ioc_base, *easi_base; void __iomem *ioc_base, *easi_base;
unsigned int sel = 0; unsigned int sel = 0;
int ret;
ioc_base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
ecard_resource_len(ec, ECARD_RES_IOCFAST)); if (!ioc_base)
if (!ioc_base) { return -ENOMEM;
ret = -ENOMEM;
goto out;
}
easi_base = ioc_base; easi_base = ioc_base;
if (ecard_resource_flags(ec, ECARD_RES_EASI)) { if (ecard_resource_flags(ec, ECARD_RES_EASI)) {
easi_base = ioremap(ecard_resource_start(ec, ECARD_RES_EASI), easi_base = ecardm_iomap(ec, ECARD_RES_EASI, 0, 0);
ecard_resource_len(ec, ECARD_RES_EASI)); if (!easi_base)
if (!easi_base) { return -ENOMEM;
ret = -ENOMEM;
goto unmap_slot;
}
/* /*
* Enable access to the EASI region. * Enable access to the EASI region.
...@@ -507,10 +499,6 @@ pata_icside_register_v6(struct ata_probe_ent *ae, struct expansion_card *ec) ...@@ -507,10 +499,6 @@ pata_icside_register_v6(struct ata_probe_ent *ae, struct expansion_card *ec)
return icside_dma_init(ae, ec); return icside_dma_init(ae, ec);
unmap_slot:
iounmap(ioc_base);
out:
return ret;
} }
static int __devinit static int __devinit
...@@ -534,8 +522,7 @@ pata_icside_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -534,8 +522,7 @@ pata_icside_probe(struct expansion_card *ec, const struct ecard_id *id)
state->type = ICS_TYPE_NOTYPE; state->type = ICS_TYPE_NOTYPE;
state->dma = NO_DMA; state->dma = NO_DMA;
idmem = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), idmem = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
ecard_resource_len(ec, ECARD_RES_IOCFAST));
if (idmem) { if (idmem) {
unsigned int type; unsigned int type;
...@@ -543,7 +530,7 @@ pata_icside_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -543,7 +530,7 @@ pata_icside_probe(struct expansion_card *ec, const struct ecard_id *id)
type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1; type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1;
type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2; type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2;
type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3; type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3;
iounmap(idmem); ecardm_iounmap(ec, idmem);
state->type = type; state->type = type;
} }
...@@ -638,10 +625,6 @@ static void __devexit pata_icside_remove(struct expansion_card *ec) ...@@ -638,10 +625,6 @@ static void __devexit pata_icside_remove(struct expansion_card *ec)
*/ */
if (state->dma != NO_DMA) if (state->dma != NO_DMA)
free_dma(state->dma); free_dma(state->dma);
if (state->ioc_base)
iounmap(state->ioc_base);
if (state->ioc_base != state->irq_port)
iounmap(state->irq_port);
kfree(state); kfree(state);
ecard_release_resources(ec); ecard_release_resources(ec);
......
...@@ -565,8 +565,7 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec) ...@@ -565,8 +565,7 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
ide_hwif_t *hwif; ide_hwif_t *hwif;
void __iomem *base; void __iomem *base;
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC), base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
ecard_resource_len(ec, ECARD_RES_MEMC));
if (!base) if (!base)
return -ENOMEM; return -ENOMEM;
...@@ -583,10 +582,8 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec) ...@@ -583,10 +582,8 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
icside_irqdisable_arcin_v5(ec, 0); icside_irqdisable_arcin_v5(ec, 0);
hwif = icside_setup(base, &icside_cardinfo_v5, ec); hwif = icside_setup(base, &icside_cardinfo_v5, ec);
if (!hwif) { if (!hwif)
iounmap(base);
return -ENODEV; return -ENODEV;
}
state->hwif[0] = hwif; state->hwif[0] = hwif;
...@@ -605,8 +602,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec) ...@@ -605,8 +602,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
unsigned int sel = 0; unsigned int sel = 0;
int ret; int ret;
ioc_base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
ecard_resource_len(ec, ECARD_RES_IOCFAST));
if (!ioc_base) { if (!ioc_base) {
ret = -ENOMEM; ret = -ENOMEM;
goto out; goto out;
...@@ -615,11 +611,10 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec) ...@@ -615,11 +611,10 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
easi_base = ioc_base; easi_base = ioc_base;
if (ecard_resource_flags(ec, ECARD_RES_EASI)) { if (ecard_resource_flags(ec, ECARD_RES_EASI)) {
easi_base = ioremap(ecard_resource_start(ec, ECARD_RES_EASI), easi_base = ecardm_iomap(ec, ECARD_RES_EASI, 0, 0);
ecard_resource_len(ec, ECARD_RES_EASI));
if (!easi_base) { if (!easi_base) {
ret = -ENOMEM; ret = -ENOMEM;
goto unmap_slot; goto out;
} }
/* /*
...@@ -648,7 +643,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec) ...@@ -648,7 +643,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
if (!hwif || !mate) { if (!hwif || !mate) {
ret = -ENODEV; ret = -ENODEV;
goto unmap_port; goto out;
} }
state->hwif[0] = hwif; state->hwif[0] = hwif;
...@@ -685,11 +680,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec) ...@@ -685,11 +680,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
return 0; return 0;
unmap_port:
if (easi_base != ioc_base)
iounmap(easi_base);
unmap_slot:
iounmap(ioc_base);
out: out:
return ret; return ret;
} }
...@@ -715,8 +705,7 @@ icside_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -715,8 +705,7 @@ icside_probe(struct expansion_card *ec, const struct ecard_id *id)
state->type = ICS_TYPE_NOTYPE; state->type = ICS_TYPE_NOTYPE;
state->dev = &ec->dev; state->dev = &ec->dev;
idmem = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), idmem = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
ecard_resource_len(ec, ECARD_RES_IOCFAST));
if (idmem) { if (idmem) {
unsigned int type; unsigned int type;
...@@ -724,7 +713,7 @@ icside_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -724,7 +713,7 @@ icside_probe(struct expansion_card *ec, const struct ecard_id *id)
type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1; type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1;
type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2; type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2;
type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3; type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3;
iounmap(idmem); ecardm_iounmap(ec, idmem);
state->type = type; state->type = type;
} }
...@@ -793,11 +782,6 @@ static void __devexit icside_remove(struct expansion_card *ec) ...@@ -793,11 +782,6 @@ static void __devexit icside_remove(struct expansion_card *ec)
ecard_set_drvdata(ec, NULL); ecard_set_drvdata(ec, NULL);
if (state->ioc_base)
iounmap(state->ioc_base);
if (state->ioc_base != state->irq_port)
iounmap(state->irq_port);
kfree(state); kfree(state);
ecard_release_resources(ec); ecard_release_resources(ec);
} }
......
...@@ -63,8 +63,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -63,8 +63,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
if (ret) if (ret)
goto out; goto out;
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC), base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
ecard_resource_len(ec, ECARD_RES_MEMC));
if (!base) { if (!base) {
ret = -ENOMEM; ret = -ENOMEM;
goto release; goto release;
...@@ -81,7 +80,6 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -81,7 +80,6 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
goto out; goto out;
} }
iounmap(base);
release: release:
ecard_release_resources(ec); ecard_release_resources(ec);
out: out:
...@@ -96,7 +94,6 @@ static void __devexit rapide_remove(struct expansion_card *ec) ...@@ -96,7 +94,6 @@ static void __devexit rapide_remove(struct expansion_card *ec)
/* there must be a better way */ /* there must be a better way */
ide_unregister(hwif - ide_hwifs); ide_unregister(hwif - ide_hwifs);
iounmap(hwif->hwif_data);
ecard_release_resources(ec); ecard_release_resources(ec);
} }
......
...@@ -1014,8 +1014,7 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -1014,8 +1014,7 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id)
SET_NETDEV_DEV(dev, &ec->dev); SET_NETDEV_DEV(dev, &ec->dev);
dev->irq = ec->irq; dev->irq = ec->irq;
priv(dev)->base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), priv(dev)->base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
ecard_resource_len(ec, ECARD_RES_IOCFAST));
if (!priv(dev)->base) { if (!priv(dev)->base) {
ret = -ENOMEM; ret = -ENOMEM;
goto free; goto free;
...@@ -1056,8 +1055,6 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -1056,8 +1055,6 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id)
return 0; return 0;
free: free:
if (priv(dev)->base)
iounmap(priv(dev)->base);
free_netdev(dev); free_netdev(dev);
release: release:
ecard_release_resources(ec); ecard_release_resources(ec);
...@@ -1072,7 +1069,6 @@ static void __devexit ether1_remove(struct expansion_card *ec) ...@@ -1072,7 +1069,6 @@ static void __devexit ether1_remove(struct expansion_card *ec)
ecard_set_drvdata(ec, NULL); ecard_set_drvdata(ec, NULL);
unregister_netdev(dev); unregister_netdev(dev);
iounmap(priv(dev)->base);
free_netdev(dev); free_netdev(dev);
ecard_release_resources(ec); ecard_release_resources(ec);
} }
......
...@@ -793,8 +793,7 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -793,8 +793,7 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id)
SET_MODULE_OWNER(dev); SET_MODULE_OWNER(dev);
SET_NETDEV_DEV(dev, &ec->dev); SET_NETDEV_DEV(dev, &ec->dev);
priv(dev)->base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC), priv(dev)->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
ecard_resource_len(ec, ECARD_RES_MEMC));
if (!priv(dev)->base) { if (!priv(dev)->base) {
ret = -ENOMEM; ret = -ENOMEM;
goto free; goto free;
...@@ -869,8 +868,6 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -869,8 +868,6 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id)
return 0; return 0;
free: free:
if (priv(dev)->base)
iounmap(priv(dev)->base);
free_netdev(dev); free_netdev(dev);
release: release:
ecard_release_resources(ec); ecard_release_resources(ec);
...@@ -885,7 +882,6 @@ static void __devexit ether3_remove(struct expansion_card *ec) ...@@ -885,7 +882,6 @@ static void __devexit ether3_remove(struct expansion_card *ec)
ecard_set_drvdata(ec, NULL); ecard_set_drvdata(ec, NULL);
unregister_netdev(dev); unregister_netdev(dev);
iounmap(priv(dev)->base);
free_netdev(dev); free_netdev(dev);
ecard_release_resources(ec); ecard_release_resources(ec);
} }
......
...@@ -686,7 +686,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -686,7 +686,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
eh->supported = data->supported; eh->supported = data->supported;
eh->ctrl = 0; eh->ctrl = 0;
eh->id = ec->cid.product; eh->id = ec->cid.product;
eh->memc = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC), PAGE_SIZE); eh->memc = ecardm_iomap(ec, ECARD_RES_MEMC, 0, PAGE_SIZE);
if (!eh->memc) { if (!eh->memc) {
ret = -ENOMEM; ret = -ENOMEM;
goto free; goto free;
...@@ -694,7 +694,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -694,7 +694,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
eh->ctrl_port = eh->memc; eh->ctrl_port = eh->memc;
if (data->ctrl_ioc) { if (data->ctrl_ioc) {
eh->ioc_fast = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), PAGE_SIZE); eh->ioc_fast = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, PAGE_SIZE);
if (!eh->ioc_fast) { if (!eh->ioc_fast) {
ret = -ENOMEM; ret = -ENOMEM;
goto free; goto free;
...@@ -758,10 +758,6 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -758,10 +758,6 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
return 0; return 0;
free: free:
if (eh->ioc_fast)
iounmap(eh->ioc_fast);
if (eh->memc)
iounmap(eh->memc);
free_netdev(dev); free_netdev(dev);
release: release:
ecard_release_resources(ec); ecard_release_resources(ec);
...@@ -772,16 +768,11 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -772,16 +768,11 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
static void __devexit etherh_remove(struct expansion_card *ec) static void __devexit etherh_remove(struct expansion_card *ec)
{ {
struct net_device *dev = ecard_get_drvdata(ec); struct net_device *dev = ecard_get_drvdata(ec);
struct etherh_priv *eh = etherh_priv(dev);
ecard_set_drvdata(ec, NULL); ecard_set_drvdata(ec, NULL);
unregister_netdev(dev); unregister_netdev(dev);
if (eh->ioc_fast)
iounmap(eh->ioc_fast);
iounmap(eh->memc);
free_netdev(dev); free_netdev(dev);
ecard_release_resources(ec); ecard_release_resources(ec);
......
...@@ -281,7 +281,6 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -281,7 +281,6 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
{ {
struct Scsi_Host *host; struct Scsi_Host *host;
struct arxescsi_info *info; struct arxescsi_info *info;
unsigned long resbase, reslen;
void __iomem *base; void __iomem *base;
int ret; int ret;
...@@ -289,9 +288,7 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -289,9 +288,7 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
if (ret) if (ret)
goto out; goto out;
resbase = ecard_resource_start(ec, ECARD_RES_MEMC); base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
reslen = ecard_resource_len(ec, ECARD_RES_MEMC);
base = ioremap(resbase, reslen);
if (!base) { if (!base) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_region; goto out_region;
...@@ -300,7 +297,7 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -300,7 +297,7 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
host = scsi_host_alloc(&arxescsi_template, sizeof(struct arxescsi_info)); host = scsi_host_alloc(&arxescsi_template, sizeof(struct arxescsi_info));
if (!host) { if (!host) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_unmap; goto out_region;
} }
info = (struct arxescsi_info *)host->hostdata; info = (struct arxescsi_info *)host->hostdata;
...@@ -337,8 +334,6 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -337,8 +334,6 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
fas216_release(host); fas216_release(host);
out_unregister: out_unregister:
scsi_host_put(host); scsi_host_put(host);
out_unmap:
iounmap(base);
out_region: out_region:
ecard_release_resources(ec); ecard_release_resources(ec);
out: out:
...@@ -348,13 +343,10 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -348,13 +343,10 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
static void __devexit arxescsi_remove(struct expansion_card *ec) static void __devexit arxescsi_remove(struct expansion_card *ec)
{ {
struct Scsi_Host *host = ecard_get_drvdata(ec); struct Scsi_Host *host = ecard_get_drvdata(ec);
struct arxescsi_info *info = (struct arxescsi_info *)host->hostdata;
ecard_set_drvdata(ec, NULL); ecard_set_drvdata(ec, NULL);
fas216_remove(host); fas216_remove(host);
iounmap(info->base);
fas216_release(host); fas216_release(host);
scsi_host_put(host); scsi_host_put(host);
ecard_release_resources(ec); ecard_release_resources(ec);
......
...@@ -401,7 +401,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -401,7 +401,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
{ {
struct Scsi_Host *host; struct Scsi_Host *host;
struct cumanascsi2_info *info; struct cumanascsi2_info *info;
unsigned long resbase, reslen;
void __iomem *base; void __iomem *base;
int ret; int ret;
...@@ -409,9 +408,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -409,9 +408,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
if (ret) if (ret)
goto out; goto out;
resbase = ecard_resource_start(ec, ECARD_RES_MEMC); base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
reslen = ecard_resource_len(ec, ECARD_RES_MEMC);
base = ioremap(resbase, reslen);
if (!base) { if (!base) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_region; goto out_region;
...@@ -421,7 +418,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -421,7 +418,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
sizeof(struct cumanascsi2_info)); sizeof(struct cumanascsi2_info));
if (!host) { if (!host) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_unmap; goto out_region;
} }
ecard_set_drvdata(ec, host); ecard_set_drvdata(ec, host);
...@@ -490,9 +487,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -490,9 +487,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
out_free: out_free:
scsi_host_put(host); scsi_host_put(host);
out_unmap:
iounmap(base);
out_region: out_region:
ecard_release_resources(ec); ecard_release_resources(ec);
...@@ -512,8 +506,6 @@ static void __devexit cumanascsi2_remove(struct expansion_card *ec) ...@@ -512,8 +506,6 @@ static void __devexit cumanascsi2_remove(struct expansion_card *ec)
free_dma(info->info.scsi.dma); free_dma(info->info.scsi.dma);
free_irq(ec->irq, info); free_irq(ec->irq, info);
iounmap(info->base);
fas216_release(host); fas216_release(host);
scsi_host_put(host); scsi_host_put(host);
ecard_release_resources(ec); ecard_release_resources(ec);
......
...@@ -519,7 +519,6 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -519,7 +519,6 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
{ {
struct Scsi_Host *host; struct Scsi_Host *host;
struct eesoxscsi_info *info; struct eesoxscsi_info *info;
unsigned long resbase, reslen;
void __iomem *base; void __iomem *base;
int ret; int ret;
...@@ -527,9 +526,7 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -527,9 +526,7 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
if (ret) if (ret)
goto out; goto out;
resbase = ecard_resource_start(ec, ECARD_RES_IOCFAST); base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
reslen = ecard_resource_len(ec, ECARD_RES_IOCFAST);
base = ioremap(resbase, reslen);
if (!base) { if (!base) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_region; goto out_region;
...@@ -539,7 +536,7 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -539,7 +536,7 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
sizeof(struct eesoxscsi_info)); sizeof(struct eesoxscsi_info));
if (!host) { if (!host) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_unmap; goto out_region;
} }
ecard_set_drvdata(ec, host); ecard_set_drvdata(ec, host);
...@@ -612,9 +609,6 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -612,9 +609,6 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
device_remove_file(&ec->dev, &dev_attr_bus_term); device_remove_file(&ec->dev, &dev_attr_bus_term);
scsi_host_put(host); scsi_host_put(host);
out_unmap:
iounmap(base);
out_region: out_region:
ecard_release_resources(ec); ecard_release_resources(ec);
...@@ -636,8 +630,6 @@ static void __devexit eesoxscsi_remove(struct expansion_card *ec) ...@@ -636,8 +630,6 @@ static void __devexit eesoxscsi_remove(struct expansion_card *ec)
device_remove_file(&ec->dev, &dev_attr_bus_term); device_remove_file(&ec->dev, &dev_attr_bus_term);
iounmap(info->base);
fas216_release(host); fas216_release(host);
scsi_host_put(host); scsi_host_put(host);
ecard_release_resources(ec); ecard_release_resources(ec);
......
...@@ -313,7 +313,6 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -313,7 +313,6 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
{ {
struct Scsi_Host *host; struct Scsi_Host *host;
struct powertec_info *info; struct powertec_info *info;
unsigned long resbase, reslen;
void __iomem *base; void __iomem *base;
int ret; int ret;
...@@ -321,9 +320,7 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -321,9 +320,7 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
if (ret) if (ret)
goto out; goto out;
resbase = ecard_resource_start(ec, ECARD_RES_IOCFAST); base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
reslen = ecard_resource_len(ec, ECARD_RES_IOCFAST);
base = ioremap(resbase, reslen);
if (!base) { if (!base) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_region; goto out_region;
...@@ -333,7 +330,7 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -333,7 +330,7 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
sizeof (struct powertec_info)); sizeof (struct powertec_info));
if (!host) { if (!host) {
ret = -ENOMEM; ret = -ENOMEM;
goto out_unmap; goto out_region;
} }
ecard_set_drvdata(ec, host); ecard_set_drvdata(ec, host);
...@@ -404,9 +401,6 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -404,9 +401,6 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
device_remove_file(&ec->dev, &dev_attr_bus_term); device_remove_file(&ec->dev, &dev_attr_bus_term);
scsi_host_put(host); scsi_host_put(host);
out_unmap:
iounmap(base);
out_region: out_region:
ecard_release_resources(ec); ecard_release_resources(ec);
...@@ -428,8 +422,6 @@ static void __devexit powertecscsi_remove(struct expansion_card *ec) ...@@ -428,8 +422,6 @@ static void __devexit powertecscsi_remove(struct expansion_card *ec)
free_dma(info->info.scsi.dma); free_dma(info->info.scsi.dma);
free_irq(ec->irq, info); free_irq(ec->irq, info);
iounmap(info->base);
fas216_release(host); fas216_release(host);
scsi_host_put(host); scsi_host_put(host);
ecard_release_resources(ec); ecard_release_resources(ec);
......
...@@ -54,7 +54,7 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -54,7 +54,7 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id)
info->num_ports = type->num_ports; info->num_ports = type->num_ports;
bus_addr = ecard_resource_start(ec, type->type); bus_addr = ecard_resource_start(ec, type->type);
info->vaddr = ioremap(bus_addr, ecard_resource_len(ec, type->type)); info->vaddr = ecardm_iomap(ec, type->type, 0, 0);
if (!info->vaddr) { if (!info->vaddr) {
kfree(info); kfree(info);
return -ENOMEM; return -ENOMEM;
...@@ -91,7 +91,6 @@ static void __devexit serial_card_remove(struct expansion_card *ec) ...@@ -91,7 +91,6 @@ static void __devexit serial_card_remove(struct expansion_card *ec)
if (info->ports[i] > 0) if (info->ports[i] > 0)
serial8250_unregister_port(info->ports[i]); serial8250_unregister_port(info->ports[i]);
iounmap(info->vaddr);
kfree(info); kfree(info);
} }
......
...@@ -226,6 +226,10 @@ ecard_address(struct expansion_card *ec, card_type_t type, card_speed_t speed) ...@@ -226,6 +226,10 @@ ecard_address(struct expansion_card *ec, card_type_t type, card_speed_t speed)
extern int ecard_request_resources(struct expansion_card *ec); extern int ecard_request_resources(struct expansion_card *ec);
extern void ecard_release_resources(struct expansion_card *ec); extern void ecard_release_resources(struct expansion_card *ec);
void __iomem *ecardm_iomap(struct expansion_card *ec, unsigned int res,
unsigned long offset, unsigned long maxsize);
#define ecardm_iounmap(__ec, __addr) devm_iounmap(&(__ec)->dev, __addr)
extern struct bus_type ecard_bus_type; extern struct bus_type ecard_bus_type;
#define ECARD_DEV(_d) container_of((_d), struct expansion_card, dev) #define ECARD_DEV(_d) container_of((_d), struct expansion_card, dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment