vserver 1.9.5.x5
[linux-2.6.git] / drivers / pcmcia / soc_common.c
index 6d393e7..e8c3f1f 100644 (file)
 
 #include "soc_common.h"
 
+/* FIXME: platform dependent resource declaration has to move out of this file */
+#ifdef CONFIG_ARCH_PXA
+#include <asm/arch/pxa-regs.h>
+#endif
+
 #ifdef DEBUG
 
 static int pc_debug;
@@ -203,7 +208,7 @@ static int soc_common_pcmcia_suspend(struct pcmcia_socket *sock)
        return ret;
 }
 
-static spinlock_t status_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(status_lock);
 
 static void soc_common_check_status(struct soc_pcmcia_socket *skt)
 {
@@ -392,8 +397,8 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m
                map->stop = PAGE_SIZE-1;
 
        map->stop -= map->start;
-       map->stop += (unsigned long)skt->virt_io;
-       map->start = (unsigned long)skt->virt_io;
+       map->stop += skt->socket.io_offset;
+       map->start = skt->socket.io_offset;
 
        return 0;
 }
@@ -448,9 +453,7 @@ soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map
 
        skt->ops->set_timing(skt);
 
-       map->sys_stop -= map->sys_start;
-       map->sys_stop += res->start + map->card_start;
-       map->sys_start = res->start + map->card_start;
+       map->static_start = res->start + map->card_start;
 
        return 0;
 }
@@ -662,6 +665,7 @@ static void soc_pcmcia_cpufreq_unregister(void)
 int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr)
 {
        struct skt_dev_info *sinfo;
+       struct soc_pcmcia_socket *skt;
        int ret, i;
 
        down(&soc_pcmcia_sockets_lock);
@@ -679,7 +683,7 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops
         * Initialise the per-socket structure.
         */
        for (i = 0; i < nr; i++) {
-               struct soc_pcmcia_socket *skt = &sinfo->skt[i];
+               skt = &sinfo->skt[i];
 
                skt->socket.ops = &soc_common_pcmcia_operations;
                skt->socket.owner = ops->owner;
@@ -754,6 +758,7 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops
                        goto out_err_6;
 
                skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD;
+               skt->socket.resource_ops = &pccard_static_ops;
                skt->socket.irq_mask = 0;
                skt->socket.map_size = PAGE_SIZE;
                skt->socket.pci_irq = skt->irq;
@@ -777,7 +782,7 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops
        goto out;
 
        do {
-               struct soc_pcmcia_socket *skt = &sinfo->skt[i];
+               skt = &sinfo->skt[i];
 
                del_timer_sync(&skt->poll_timer);
                pcmcia_unregister_socket(&skt->socket);