From 33cdd9d7282199a8a758a92d1f1ade07d48456e4 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 2 Mar 2003 20:56:17 +0000 Subject: [PATCH] [ARM] SA11x0 PCMCIA 7 Request PCMCIA socket resources without marking them busy - this allows future modifications to pcmcia to allow it to claim the CIS resources for statically mapped sockets. --- drivers/pcmcia/sa1100.h | 1 + drivers/pcmcia/sa1100_generic.c | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/pcmcia/sa1100.h b/drivers/pcmcia/sa1100.h index 02e156c5031b1..01ba55d3adad9 100644 --- a/drivers/pcmcia/sa1100.h +++ b/drivers/pcmcia/sa1100.h @@ -160,6 +160,7 @@ struct sa1100_pcmcia_socket { * Core PCMCIA state */ int nr; + struct resource res; socket_state_t cs_state; pccard_io_map io_map[MAX_IO_WIN]; pccard_mem_map pc_mem_map[MAX_WIN]; diff --git a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c index d840ccb9a7b7e..1dfd2e56ebf8b 100644 --- a/drivers/pcmcia/sa1100_generic.c +++ b/drivers/pcmcia/sa1100_generic.c @@ -955,6 +955,11 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops, struct device *dev) cpu_clock = cpufreq_get(0); + for (i = 0; i < sa1100_pcmcia_socket_count; i++) { + struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i); + memset(skt, 0, sizeof(*skt)); + } + /* * We initialize the MECR to default values here, because we are * not guaranteed to see a SetIOMap operation at runtime. @@ -962,11 +967,14 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops, struct device *dev) for (i = 0; i < sa1100_pcmcia_socket_count; i++) { struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i); - if (!request_mem_region(_PCMCIA(i), PCMCIASp, "PCMCIA")) { - ret = -EBUSY; - goto out_err; - } + skt->res.start = _PCMCIA(i); + skt->res.end = _PCMCIA(i) + PCMCIASp - 1; + skt->res.name = "PCMCIA"; + skt->res.flags = IORESOURCE_MEM; + ret = request_resource(&iomem_resource, &skt->res); + if (ret) + goto out_err; skt->nr = i; skt->ops = ops; @@ -1011,10 +1019,10 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops, struct device *dev) struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i); iounmap(skt->virt_io); skt->virt_io = NULL; - release_mem_region(_PCMCIA(i), PCMCIASp); + if (skt->res.start) + release_resource(&skt->res); } - shutdown: ops->shutdown(); out: @@ -1050,7 +1058,7 @@ void sa1100_unregister_pcmcia(struct pcmcia_low_level *ops, struct device *dev) iounmap(skt->virt_io); skt->virt_io = NULL; - release_mem_region(_PCMCIA(i), PCMCIASp); + release_resource(&skt->res); } ops->shutdown(); -- 2.53.0