]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/isdn/hisax/sedlbauer_cs.c
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
[linux-2.6-omap-h63xx.git] / drivers / isdn / hisax / sedlbauer_cs.c
index 2c611f91cfbae85a1e5efc53df4b417f4a63e5b8..9a3c9f5e4fe82b5e132bc426592e603b243a091b 100644 (file)
@@ -217,20 +217,14 @@ static void sedlbauer_detach(struct pcmcia_device *link)
 #define CS_CHECK(fn, ret) \
 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
 
-struct sedlbauer_config_data {
-       cistpl_cftable_entry_t dflt;
-       config_info_t conf;
-       win_req_t req;
-};
-
 static int sedlbauer_config_check(struct pcmcia_device *p_dev,
                                  cistpl_cftable_entry_t *cfg,
+                                 cistpl_cftable_entry_t *dflt,
+                                 unsigned int vcc,
                                  void *priv_data)
 {
-       struct sedlbauer_config_data *cfg_mem = priv_data;
+       win_req_t *req = priv_data;
 
-       if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-               cfg_mem->dflt = *cfg;
        if (cfg->index == 0)
                return -ENODEV;
 
@@ -243,26 +237,26 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
        /* Use power settings for Vcc and Vpp if present */
        /*  Note that the CIS values need to be rescaled */
        if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) {
-               if (cfg_mem->conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM]/10000)
+               if (vcc != cfg->vcc.param[CISTPL_POWER_VNOM]/10000)
                        return -ENODEV;
-       } else if (cfg_mem->dflt.vcc.present & (1<<CISTPL_POWER_VNOM)) {
-               if (cfg_mem->conf.Vcc != cfg_mem->dflt.vcc.param[CISTPL_POWER_VNOM]/10000)
+       } else if (dflt->vcc.present & (1<<CISTPL_POWER_VNOM)) {
+               if (vcc != dflt->vcc.param[CISTPL_POWER_VNOM]/10000)
                        return -ENODEV;
        }
 
        if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
                p_dev->conf.Vpp = cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
-       else if (cfg_mem->dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))
-               p_dev->conf.Vpp = cfg_mem->dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;
+       else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM))
+               p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000;
 
        /* Do we need to allocate an interrupt? */
-       if (cfg->irq.IRQInfo1 || cfg_mem->dflt.irq.IRQInfo1)
+       if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
                p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
 
        /* IO window settings */
        p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
-       if ((cfg->io.nwin > 0) || (cfg_mem->dflt.io.nwin > 0)) {
-               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &cfg_mem->dflt.io;
+       if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
                p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
                if (!(io->flags & CISTPL_IO_8BIT))
                        p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
@@ -291,15 +285,15 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
          needs to be mapped to virtual space with ioremap() before it
          is used.
        */
-       if ((cfg->mem.nwin > 0) || (cfg_mem->dflt.mem.nwin > 0)) {
-               cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &cfg_mem->dflt.mem;
+       if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
+               cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
                memreq_t map;
-               cfg_mem->req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
-               cfg_mem->req.Attributes |= WIN_ENABLE;
-               cfg_mem->req.Base = mem->win[0].host_addr;
-               cfg_mem->req.Size = mem->win[0].len;
-               cfg_mem->req.AccessSpeed = 0;
-               if (pcmcia_request_window(&p_dev, &cfg_mem->req, &p_dev->win) != 0)
+               req->Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
+               req->Attributes |= WIN_ENABLE;
+               req->Base = mem->win[0].host_addr;
+               req->Size = mem->win[0].len;
+               req->AccessSpeed = 0;
+               if (pcmcia_request_window(&p_dev, req, &p_dev->win) != 0)
                        return -ENODEV;
                map.Page = 0;
                map.CardOffset = mem->win[0].card_addr;
@@ -314,20 +308,16 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
 static int sedlbauer_config(struct pcmcia_device *link)
 {
     local_info_t *dev = link->priv;
-    struct sedlbauer_config_data *cfg_mem;
+    win_req_t *req;
     int last_fn, last_ret;
     IsdnCard_t  icard;
 
     DEBUG(0, "sedlbauer_config(0x%p)\n", link);
 
-    cfg_mem = kzalloc(sizeof(struct sedlbauer_config_data), GFP_KERNEL);
-    if (!cfg_mem)
+    req = kzalloc(sizeof(win_req_t), GFP_KERNEL);
+    if (!req)
            return -ENOMEM;
 
-    /* Look up the current Vcc */
-    CS_CHECK(GetConfigurationInfo,
-            pcmcia_get_configuration_info(link, &cfg_mem->conf));
-
     /*
       In this loop, we scan the CIS for configuration table entries,
       each of which describes a valid card configuration, including
@@ -340,7 +330,7 @@ static int sedlbauer_config(struct pcmcia_device *link)
       these things without consulting the CIS, and most client drivers
       will only use the CIS to fill in implementation-defined details.
     */
-    last_ret = pcmcia_loop_config(link, sedlbauer_config_check, cfg_mem);
+    last_ret = pcmcia_loop_config(link, sedlbauer_config_check, req);
     if (last_ret)
            goto failed;
 
@@ -381,8 +371,8 @@ static int sedlbauer_config(struct pcmcia_device *link)
        printk(" & 0x%04x-0x%04x", link->io.BasePort2,
               link->io.BasePort2+link->io.NumPorts2-1);
     if (link->win)
-       printk(", mem 0x%06lx-0x%06lx", cfg_mem->req.Base,
-              cfg_mem->req.Base+cfg_mem->req.Size-1);
+       printk(", mem 0x%06lx-0x%06lx", req->Base,
+              req->Base+req->Size-1);
     printk("\n");
 
     icard.para[0] = link->irq.AssignedIRQ;