Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
- index 0c70eb688a00..f747f34dfd4b 100644
- --- a/arch/arm/include/asm/io.h
- +++ b/arch/arm/include/asm/io.h
- @@ -200,7 +200,7 @@ void __iomem *pci_remap_cfgspace(resource_size_t res_cookie, size_t size);
- */
- #ifdef CONFIG_NEED_MACH_IO_H
- #include <mach/io.h>
- -#elif defined(CONFIG_PCI)
- +#elif defined(CONFIG_PCI) || IS_ENABLED(CONFIG_PCMCIA_SOC_COMMON)
- #define IO_SPACE_LIMIT ((resource_size_t)0xfffff)
- #define __io(a) __typesafe_io(PCI_IO_VIRT_BASE + ((a) & IO_SPACE_LIMIT))
- #else
- @@ -219,9 +219,7 @@ void __iomem *pci_remap_cfgspace(resource_size_t res_cookie, size_t size);
- * readb() et.al. on such platforms.
- */
- #ifndef IO_SPACE_LIMIT
- -#if defined(CONFIG_PCMCIA_SOC_COMMON) || defined(CONFIG_PCMCIA_SOC_COMMON_MODULE)
- -#define IO_SPACE_LIMIT ((resource_size_t)0xffffffff)
- -#elif defined(CONFIG_PCI) || defined(CONFIG_ISA) || defined(CONFIG_PCCARD)
- +#if defined(CONFIG_PCI) || defined(CONFIG_ISA) || defined(CONFIG_PCCARD)
- #define IO_SPACE_LIMIT ((resource_size_t)0xffff)
- #else
- #define IO_SPACE_LIMIT ((resource_size_t)0)
- diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
- index ec977f031bc2..018e852f35d1 100644
- --- a/drivers/pcmcia/Kconfig
- +++ b/drivers/pcmcia/Kconfig
- @@ -174,6 +174,7 @@ config PCMCIA_BCM63XX
- config PCMCIA_SOC_COMMON
- tristate
- + select PCI # for pci_remap_iospace
- config PCMCIA_SA11XX_BASE
- tristate
- diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c
- index 9276a628473d..cb80d4848333 100644
- --- a/drivers/pcmcia/soc_common.c
- +++ b/drivers/pcmcia/soc_common.c
- @@ -46,6 +46,7 @@
- #include <linux/regulator/consumer.h>
- #include <linux/spinlock.h>
- #include <linux/timer.h>
- +#include <linux/pci.h>
- #include "soc_common.h"
- @@ -782,8 +783,7 @@ void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt)
- /* should not be required; violates some lowlevel drivers */
- soc_common_pcmcia_config_skt(skt, &dead_socket);
- - iounmap(skt->virt_io);
- - skt->virt_io = NULL;
- + pci_unmap_iospace(&skt->res_io_io);
- release_resource(&skt->res_attr);
- release_resource(&skt->res_mem);
- release_resource(&skt->res_io);
- @@ -816,11 +816,11 @@ int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
- if (ret)
- goto out_err_4;
- - skt->virt_io = ioremap(skt->res_io.start, 0x10000);
- - if (skt->virt_io == NULL) {
- - ret = -ENOMEM;
- + skt->res_io_io = (struct resource)
- + DEFINE_RES_IO_NAMED(skt->nr * 0x10000, 0x10000, "PCMCIA I/O");
- + ret = pci_remap_iospace(&skt->res_io_io, skt->res_io.start);
- + if (ret)
- goto out_err_5;
- - }
- /*
- * We initialize default socket timing here, because
- @@ -838,7 +838,7 @@ int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
- skt->socket.resource_ops = &pccard_static_ops;
- skt->socket.irq_mask = 0;
- skt->socket.map_size = PAGE_SIZE;
- - skt->socket.io_offset = (unsigned long)skt->virt_io;
- + skt->socket.io_offset = (unsigned long)skt->res_io_io.start;
- skt->status = soc_common_pcmcia_skt_state(skt);
- @@ -872,7 +872,7 @@ int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
- out_err_7:
- soc_pcmcia_hw_shutdown(skt);
- out_err_6:
- - iounmap(skt->virt_io);
- + pci_unmap_iospace(&skt->res_io_io);
- out_err_5:
- release_resource(&skt->res_attr);
- out_err_4:
- diff --git a/include/pcmcia/soc_common.h b/include/pcmcia/soc_common.h
- index 26f1473a06c5..d4f18f4679df 100644
- --- a/include/pcmcia/soc_common.h
- +++ b/include/pcmcia/soc_common.h
- @@ -46,9 +46,9 @@ struct soc_pcmcia_socket {
- struct resource res_skt;
- struct resource res_io;
- + struct resource res_io_io;
- struct resource res_mem;
- struct resource res_attr;
- - void __iomem *virt_io;
- struct {
- int gpio;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement