PCMCIA support broke again with 2.6.35 kernel, so add yet more ugly hacks.
authorIan Abbott <abbotti@mev.co.uk>
Thu, 30 Sep 2010 15:59:41 +0000 (15:59 +0000)
committerIan Abbott <abbotti@mev.co.uk>
Thu, 30 Sep 2010 15:59:41 +0000 (15:59 +0000)
comedi/drivers/cb_das16_cs.c
comedi/drivers/das08_cs.c
comedi/drivers/ni_daq_700.c
comedi/drivers/ni_daq_dio24.c
comedi/drivers/ni_labpc_cs.c
comedi/drivers/ni_mio_cs.c
comedi/drivers/quatech_daqp_cs.c
configure.ac
m4/as-linux.m4

index 4229d47698d94ff3bf695362d2273b34f970b252..3e36fb46224904f0b72d80615bec2ca8e788d6a2 100644 (file)
@@ -193,12 +193,22 @@ static int das16cs_attach(comedi_device * dev, comedi_devconfig * it)
        }
        printk("\n");
 
-       ret = comedi_request_irq(link->irq.AssignedIRQ, das16cs_interrupt,
+       ret = comedi_request_irq(
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
+               link->irq.AssignedIRQ,
+#else
+               link->irq,
+#endif
+               das16cs_interrupt,
                IRQF_SHARED, "cb_das16_cs", dev);
        if (ret < 0) {
                return ret;
        }
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        dev->irq = link->irq.AssignedIRQ;
+#else
+       dev->irq = link->irq;
+#endif
        printk("irq=%u ", dev->irq);
 
        dev->board_ptr = das16cs_probe(dev, link);
@@ -693,7 +703,9 @@ static dev_info_t dev_info = "cb_das16_cs";
 
 typedef struct local_info_t {
        struct pcmcia_device *link;
+#ifdef COMEDI_HAVE_DS_DEV_NODE_T
        dev_node_t node;
+#endif
        int stop;
        struct bus_operations *bus;
 } local_info_t;
@@ -724,12 +736,14 @@ static int das16cs_pcmcia_attach(struct pcmcia_device *link)
        link->priv = local;
 
        /* Initialize the pcmcia_device structure */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->irq.IRQInfo1 = IRQ_LEVEL_ID;
 #endif
        link->irq.Handler = NULL;
+#endif
 
        link->conf.Attributes = 0;
        link->conf.IntType = INT_MEMORY_AND_IO;
@@ -745,7 +759,10 @@ static void das16cs_pcmcia_detach(struct pcmcia_device *link)
 {
        DEBUG(0, "das16cs_pcmcia_detach(0x%p)\n", link);
 
-       if (link->dev_node) {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
+       if (link->dev_node)
+#endif
+       {
                ((local_info_t *) link->priv)->stop = 1;
                das16cs_pcmcia_release(link);
        }
@@ -765,8 +782,12 @@ static int das16cs_pcmcia_config_loop(struct pcmcia_device *p_dev,
                return -EINVAL;
 
        /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+#endif
+       {
                p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+       }
 
        /* IO window settings */
        p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -795,7 +816,9 @@ static int das16cs_pcmcia_config_loop(struct pcmcia_device *p_dev,
 
 static void das16cs_pcmcia_config(struct pcmcia_device *link)
 {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        local_info_t *dev = link->priv;
+#endif
        int last_ret;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        tuple_t tuple;
@@ -871,8 +894,12 @@ static void das16cs_pcmcia_config(struct pcmcia_device *link)
        }
 */
                /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
+#endif
+               {
                        link->conf.Attributes |= CONF_ENABLE_IRQ;
+               }
 
                /* IO window settings */
                link->io.NumPorts1 = link->io.NumPorts2 = 0;
@@ -906,6 +933,7 @@ static void das16cs_pcmcia_config(struct pcmcia_device *link)
        }
 #endif
 
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        /*
           Allocate an interrupt line.  Note that this does not assign a
           handler to the interrupt, unless the 'Handler' member of the
@@ -918,6 +946,11 @@ static void das16cs_pcmcia_config(struct pcmcia_device *link)
                if ((last_ret = pcmcia_request_irq(link, &link->irq)) != 0)
                        goto cs_failed;
        }
+#else
+       /* Check an interrupt line has been allocated. */
+       if (!link->irq)
+               goto cs_failed;
+#endif
        /*
           This actually configures the PCMCIA socket -- setting up
           the I/O windows and the interrupt mapping, and putting the
@@ -929,6 +962,7 @@ static void das16cs_pcmcia_config(struct pcmcia_device *link)
        if ((last_ret = pcmcia_request_configuration(link, &link->conf)) != 0)
                goto cs_failed;
 
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        /*
           At this point, the dev_node_t structure(s) need to be
           initialized and arranged in a linked list at link->dev.
@@ -936,12 +970,24 @@ static void das16cs_pcmcia_config(struct pcmcia_device *link)
        sprintf(dev->node.dev_name, "cb_das16_cs");
        dev->node.major = dev->node.minor = 0;
        link->dev_node = &dev->node;
+#endif
 
        /* Finally, report what we've done */
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        printk(KERN_INFO "%s: index 0x%02x",
                dev->node.dev_name, link->conf.ConfigIndex);
+#else
+       dev_info(&link->dev, "index 0x%02x", link->conf.ConfigIndex);
+#endif
        if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               printk(", irq %u", link->irq.AssignedIRQ);
+               printk(", irq %u",
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
+                       link->irq.AssignedIRQ
+#else
+                       link->irq
+#endif
+                       );
+
        if (link->io.NumPorts1)
                printk(", io 0x%04x-0x%04x", link->io.BasePort1,
                        link->io.BasePort1 + link->io.NumPorts1 - 1);
index 702030753ecfcc71fd52fd9218e2c2c63ea98bc2..f72df3eaa9e097faf42167995e8621e11af4a589 100644 (file)
@@ -159,7 +159,9 @@ static const dev_info_t dev_info = "pcm-das08";
 
 typedef struct local_info_t {
        struct pcmcia_device *link;
+#ifdef COMEDI_HAVE_DS_DEV_NODE_T
        dev_node_t node;
+#endif
        int stop;
        struct bus_operations *bus;
 } local_info_t;
@@ -189,12 +191,14 @@ static int das08_pcmcia_attach(struct pcmcia_device *link)
        local->link = link;
        link->priv = local;
 
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->irq.IRQInfo1 = IRQ_LEVEL_ID;
 #endif
        link->irq.Handler = NULL;
+#endif
 
        /*
           General socket configuration defaults can go here.  In this
@@ -227,7 +231,10 @@ static void das08_pcmcia_detach(struct pcmcia_device *link)
 
        DEBUG(0, "das08_pcmcia_detach(0x%p)\n", link);
 
-       if (link->dev_node) {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
+       if (link->dev_node)
+#endif
+       {
                ((local_info_t *) link->priv)->stop = 1;
                das08_pcmcia_release(link);
        }
@@ -257,8 +264,12 @@ static int das08_pcmcia_config_loop(struct pcmcia_device *p_dev,
                return -ENODEV;
 
        /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+#endif
+       {
                p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+       }
 
        /* IO window settings */
        p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -286,7 +297,9 @@ static int das08_pcmcia_config_loop(struct pcmcia_device *p_dev,
 
 static void das08_pcmcia_config(struct pcmcia_device *link)
 {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        local_info_t *dev = link->priv;
+#endif
        int last_ret;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        tuple_t tuple;
@@ -362,8 +375,12 @@ static void das08_pcmcia_config(struct pcmcia_device *link)
        }
 */
                /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
+#endif
+               {
                        link->conf.Attributes |= CONF_ENABLE_IRQ;
+               }
 
                /* IO window settings */
                link->io.NumPorts1 = link->io.NumPorts2 = 0;
@@ -397,6 +414,7 @@ static void das08_pcmcia_config(struct pcmcia_device *link)
        }
 #endif
 
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
                last_fn = RequestIRQ;
@@ -404,6 +422,11 @@ static void das08_pcmcia_config(struct pcmcia_device *link)
                if ((last_ret = pcmcia_request_irq(link, &link->irq)) != 0)
                        goto cs_failed;
        }
+#else
+       /* Check an interrupt line has been allocated. */
+       if (!link->irq)
+               goto cs_failed;
+#endif
 
        /*
           This actually configures the PCMCIA socket -- setting up
@@ -416,6 +439,7 @@ static void das08_pcmcia_config(struct pcmcia_device *link)
        if ((last_ret = pcmcia_request_configuration(link, &link->conf)) != 0)
                goto cs_failed;
 
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        /*
           At this point, the dev_node_t structure(s) need to be
           initialized and arranged in a linked list at link->dev.
@@ -423,12 +447,23 @@ static void das08_pcmcia_config(struct pcmcia_device *link)
        sprintf(dev->node.dev_name, "pcm-das08");
        dev->node.major = dev->node.minor = 0;
        link->dev_node = &dev->node;
+#endif
 
        /* Finally, report what we've done */
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        printk(KERN_INFO "%s: index 0x%02x",
                dev->node.dev_name, link->conf.ConfigIndex);
+#else
+       dev_info(&link->dev, "index 0x%02x", link->conf.ConfigIndex);
+#endif
        if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               printk(", irq %u", link->irq.AssignedIRQ);
+               printk(", irq %u",
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
+                       link->irq.AssignedIRQ
+#else
+                       link->irq
+#endif
+                       );
        if (link->io.NumPorts1)
                printk(", io 0x%04x-0x%04x", link->io.BasePort1,
                        link->io.BasePort1 + link->io.NumPorts1 - 1);
index 44f16939611116d272effa5f921b8cb199ca26ab..29701b859aa9632b002f4644a64bcd3aea1b171d 100644 (file)
@@ -372,7 +372,11 @@ static int dio700_attach(comedi_device * dev, comedi_devconfig * it)
                        return -EIO;
                iobase = link->io.BasePort1;
 #ifdef incomplete
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
                irq = link->irq.AssignedIRQ;
+#else
+               irq = link->irq;
+#endif
 #endif
                break;
        default:
@@ -480,7 +484,9 @@ static const dev_info_t dev_info = "ni_daq_700";
 
 typedef struct local_info_t {
        struct pcmcia_device *link;
+#ifdef COMEDI_HAVE_DS_DEV_NODE_T
        dev_node_t node;
+#endif
        int stop;
        struct bus_operations *bus;
 } local_info_t;
@@ -512,12 +518,14 @@ static int dio700_cs_attach(struct pcmcia_device *link)
        local->link = link;
        link->priv = local;
 
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->irq.IRQInfo1 = IRQ_LEVEL_ID;
 #endif
        link->irq.Handler = NULL;
+#endif
 
        /*
           General socket configuration defaults can go here.  In this
@@ -552,7 +560,10 @@ static void dio700_cs_detach(struct pcmcia_device *link)
 
        DEBUG(0, "dio700_cs_detach(0x%p)\n", link);
 
-       if (link->dev_node) {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
+       if (link->dev_node)
+#endif
+       {
                ((local_info_t *) link->priv)->stop = 1;
                dio700_release(link);
        }
@@ -591,8 +602,12 @@ static int dio700_pcmcia_config_loop(struct pcmcia_device *p_dev,
        }
 
        /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+#endif
+       {
                p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+       }
 
        /* IO window settings */
        p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -640,7 +655,9 @@ static int dio700_pcmcia_config_loop(struct pcmcia_device *p_dev,
 
 static void dio700_config(struct pcmcia_device *link)
 {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        local_info_t *dev = link->priv;
+#endif
        int last_ret;
        win_req_t req;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
@@ -724,8 +741,12 @@ static void dio700_config(struct pcmcia_device *link)
                }
 
                /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
+#endif
+               {
                        link->conf.Attributes |= CONF_ENABLE_IRQ;
+               }
 
                /* IO window settings */
                link->io.NumPorts1 = link->io.NumPorts2 = 0;
@@ -777,6 +798,7 @@ static void dio700_config(struct pcmcia_device *link)
        }
 #endif
 
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        /*
           Allocate an interrupt line.  Note that this does not assign a
           handler to the interrupt, unless the 'Handler' member of the
@@ -789,6 +811,11 @@ static void dio700_config(struct pcmcia_device *link)
                if ((last_ret = pcmcia_request_irq(link, &link->irq)) != 0) {
                        goto cs_failed;
                }
+#else
+       /* Check an interrupt line has been allocated. */
+       if (!link->irq)
+               goto cs_failed;
+#endif
 
        /*
           This actually configures the PCMCIA socket -- setting up
@@ -802,6 +829,7 @@ static void dio700_config(struct pcmcia_device *link)
                goto cs_failed;
        }
 
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        /*
           At this point, the dev_node_t structure(s) need to be
           initialized and arranged in a linked list at link->dev.
@@ -809,12 +837,23 @@ static void dio700_config(struct pcmcia_device *link)
        sprintf(dev->node.dev_name, "ni_daq_700");
        dev->node.major = dev->node.minor = 0;
        link->dev_node = &dev->node;
+#endif
 
        /* Finally, report what we've done */
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        printk(KERN_INFO "%s: index 0x%02x",
                dev->node.dev_name, link->conf.ConfigIndex);
+#else
+       dev_info(&link->dev, "index 0x%02x", link->conf.ConfigIndex);
+#endif
        if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               printk(", irq %d", link->irq.AssignedIRQ);
+               printk(", irq %u",
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
+                       link->irq.AssignedIRQ
+#else
+                       link->irq
+#endif
+                       );
        if (link->io.NumPorts1)
                printk(", io 0x%04x-0x%04x", link->io.BasePort1,
                        link->io.BasePort1 + link->io.NumPorts1 - 1);
index 35755cc49cab6addf47b14ce1d1ac9884df500c0..41e978450587806cc34580c73e117963938dd97e 100644 (file)
@@ -129,7 +129,11 @@ static int dio24_attach(comedi_device * dev, comedi_devconfig * it)
                        return -EIO;
                iobase = link->io.BasePort1;
 #ifdef incomplete
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                irq = link->irq.AssignedIRQ;
+#else
+               irq = link->irq;
+#endif
 #endif
                break;
        default:
@@ -237,7 +241,9 @@ static const dev_info_t dev_info = "ni_daq_dio24";
 
 typedef struct local_info_t {
        struct pcmcia_device *link;
+#ifdef COMEDI_HAVE_DS_DEV_NODE_T
        dev_node_t node;
+#endif
        int stop;
        struct bus_operations *bus;
 } local_info_t;
@@ -269,12 +275,14 @@ static int dio24_cs_attach(struct pcmcia_device *link)
        local->link = link;
        link->priv = local;
 
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->irq.IRQInfo1 = IRQ_LEVEL_ID;
 #endif
        link->irq.Handler = NULL;
+#endif
 
        /*
           General socket configuration defaults can go here.  In this
@@ -309,7 +317,10 @@ static void dio24_cs_detach(struct pcmcia_device *link)
 
        DEBUG(0, "dio24_cs_detach(0x%p)\n", link);
 
-       if (link->dev_node) {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
+       if (link->dev_node)
+#endif
+       {
                ((local_info_t *) link->priv)->stop = 1;
                dio24_release(link);
        }
@@ -348,8 +359,12 @@ static int dio24_pcmcia_config_loop(struct pcmcia_device *p_dev,
        }
 
        /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+#endif
+       {
                p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+       }
 
        /* IO window settings */
        p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -397,7 +412,9 @@ static int dio24_pcmcia_config_loop(struct pcmcia_device *p_dev,
 
 static void dio24_config(struct pcmcia_device *link)
 {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        local_info_t *dev = link->priv;
+#endif
        int last_ret;
        win_req_t req;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
@@ -481,8 +498,12 @@ static void dio24_config(struct pcmcia_device *link)
                }
 
                /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
+#endif
+               {
                        link->conf.Attributes |= CONF_ENABLE_IRQ;
+               }
 
                /* IO window settings */
                link->io.NumPorts1 = link->io.NumPorts2 = 0;
@@ -534,6 +555,7 @@ static void dio24_config(struct pcmcia_device *link)
        }
 #endif
 
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        /*
           Allocate an interrupt line.  Note that this does not assign a
           handler to the interrupt, unless the 'Handler' member of the
@@ -546,6 +568,11 @@ static void dio24_config(struct pcmcia_device *link)
                if ((last_ret = pcmcia_request_irq(link, &link->irq)) != 0) {
                        goto cs_failed;
                }
+#else
+       /* Check an interrupt line has been allocated. */
+       if (!link->irq)
+               goto cs_failed;
+#endif
 
        /*
           This actually configures the PCMCIA socket -- setting up
@@ -559,6 +586,7 @@ static void dio24_config(struct pcmcia_device *link)
                goto cs_failed;
        }
 
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        /*
           At this point, the dev_node_t structure(s) need to be
           initialized and arranged in a linked list at link->dev.
@@ -566,12 +594,23 @@ static void dio24_config(struct pcmcia_device *link)
        sprintf(dev->node.dev_name, "ni_daq_dio24");
        dev->node.major = dev->node.minor = 0;
        link->dev_node = &dev->node;
+#endif
 
        /* Finally, report what we've done */
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        printk(KERN_INFO "%s: index 0x%02x",
                dev->node.dev_name, link->conf.ConfigIndex);
+#else
+       dev_info(&link->dev, "index 0x%02x", link->conf.ConfigIndex);
+#endif
        if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               printk(", irq %d", link->irq.AssignedIRQ);
+               printk(", irq %u",
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
+                       link->irq.AssignedIRQ
+#else
+                       link->irq
+#endif
+                       );
        if (link->io.NumPorts1)
                printk(", io 0x%04x-0x%04x", link->io.BasePort1,
                        link->io.BasePort1 + link->io.NumPorts1 - 1);
index 28c538c1f4a4dfbedc22ed79acd4360bd0d698dd..ab250e93e141d28a7aea07f354bfbabc7d23b695 100644 (file)
@@ -144,7 +144,11 @@ static int labpc_attach(comedi_device * dev, comedi_devconfig * it)
                if (!link)
                        return -EIO;
                iobase = link->io.BasePort1;
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                irq = link->irq.AssignedIRQ;
+#else
+               irq = link->irq;
+#endif
                break;
        default:
                printk("bug! couldn't determine board type\n");
@@ -216,7 +220,9 @@ static const dev_info_t dev_info = "daqcard-1200";
 
 typedef struct local_info_t {
        struct pcmcia_device *link;
+#ifdef COMEDI_HAVE_DS_DEV_NODE_T
        dev_node_t node;
+#endif
        int stop;
        struct bus_operations *bus;
 } local_info_t;
@@ -246,12 +252,14 @@ static int labpc_cs_attach(struct pcmcia_device *link)
        local->link = link;
        link->priv = local;
 
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_FORCED_PULSE;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_PULSE_ID;
 #endif
        link->irq.Handler = NULL;
+#endif
 
        /*
           General socket configuration defaults can go here.  In this
@@ -289,7 +297,10 @@ static void labpc_cs_detach(struct pcmcia_device *link)
           the release() function is called, that will trigger a proper
           detach().
         */
-       if (link->dev_node) {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
+       if (link->dev_node)
+#endif
+       {
                ((local_info_t *) link->priv)->stop = 1;
                labpc_release(link);
        }
@@ -328,8 +339,12 @@ static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev,
        }
 
        /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
                p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+#else
+       p_dev->conf.Attributes |= CONF_ENABLE_IRQ | CONF_ENABLE_PULSE_IRQ;
+#endif
 
        /* IO window settings */
        p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -377,7 +392,9 @@ static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev,
 
 static void labpc_config(struct pcmcia_device *link)
 {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        local_info_t *dev = link->priv;
+#endif
        int last_ret;
        win_req_t req;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
@@ -459,8 +476,12 @@ static void labpc_config(struct pcmcia_device *link)
                }
 
                /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
                        link->conf.Attributes |= CONF_ENABLE_IRQ;
+#else
+               link->conf.Attributes |= CONF_ENABLE_IRQ | CONF_ENABLE_PULSE_IRQ;
+#endif
 
                /* IO window settings */
                link->io.NumPorts1 = link->io.NumPorts2 = 0;
@@ -509,6 +530,7 @@ static void labpc_config(struct pcmcia_device *link)
        }
 #endif
 
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        /*
           Allocate an interrupt line.  Note that this does not assign a
           handler to the interrupt, unless the 'Handler' member of the
@@ -521,6 +543,11 @@ static void labpc_config(struct pcmcia_device *link)
                if ((last_ret = pcmcia_request_irq(link, &link->irq))) {
                        goto cs_failed;
                }
+#else
+       /* Check an interrupt line has been allocated. */
+       if (!link->irq)
+               goto cs_failed;
+#endif
 
        /*
           This actually configures the PCMCIA socket -- setting up
@@ -534,6 +561,7 @@ static void labpc_config(struct pcmcia_device *link)
                goto cs_failed;
        }
 
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        /*
           At this point, the dev_node_t structure(s) need to be
           initialized and arranged in a linked list at link->dev.
@@ -541,12 +569,23 @@ static void labpc_config(struct pcmcia_device *link)
        sprintf(dev->node.dev_name, "daqcard-1200");
        dev->node.major = dev->node.minor = 0;
        link->dev_node = &dev->node;
+#endif
 
        /* Finally, report what we've done */
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        printk(KERN_INFO "%s: index 0x%02x",
                dev->node.dev_name, link->conf.ConfigIndex);
+#else
+       dev_info(&link->dev, "index 0x%02x", link->conf.ConfigIndex);
+#endif
        if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               printk(", irq %d", link->irq.AssignedIRQ);
+               printk(", irq %u",
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
+                       link->irq.AssignedIRQ
+#else
+                       link->irq
+#endif
+                       );
        if (link->io.NumPorts1)
                printk(", io 0x%04x-0x%04x", link->io.BasePort1,
                        link->io.BasePort1 + link->io.NumPorts1 - 1);
index 277f758088d342dfe3976ef560b845a17ca47287..58c9d0450d675da623536fc798346ae55dc8df89 100644 (file)
@@ -260,18 +260,22 @@ static void cs_detach(struct pcmcia_device *);
 
 static struct pcmcia_device *cur_dev = NULL;
 static const dev_info_t dev_info = "ni_mio_cs";
+#ifdef COMEDI_HAVE_DS_DEV_NODE_T
 static dev_node_t dev_node = {
        "ni_mio_cs",
        COMEDI_MAJOR, 0,
        NULL
 };
+#endif
 static int cs_attach(struct pcmcia_device *link)
 {
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
        link->io.NumPorts1 = 16;
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+#endif
 #endif
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
@@ -292,7 +296,10 @@ static void cs_detach(struct pcmcia_device *link)
 {
        DPRINTK("cs_detach(link=%p)\n", link);
 
-       if (link->dev_node) {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
+       if (link->dev_node)
+#endif
+       {
                cs_release(link);
        }
 }
@@ -423,11 +430,16 @@ static void mio_cs_config(struct pcmcia_device *link)
        link->irq.IRQInfo1 = parse.cftable_entry.irq.IRQInfo1;
        link->irq.IRQInfo2 = parse.cftable_entry.irq.IRQInfo2;
 #endif
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        ret = pcmcia_request_irq(link, &link->irq);
        if (ret) {
                printk("pcmcia_request_irq() returned error: %i\n", ret);
        }
        //printk("RequestIRQ 0x%02x\n",ret);
+#else
+       if (!link->irq)
+               dev_info(&link->dev, "no IRQ available\n");
+#endif
 
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->conf.ConfigIndex = 1;
@@ -436,7 +448,9 @@ static void mio_cs_config(struct pcmcia_device *link)
        ret = pcmcia_request_configuration(link, &link->conf);
        //printk("RequestConfiguration %d\n",ret);
 
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        link->dev_node = &dev_node;
+#endif
 }
 
 static int mio_cs_attach(comedi_device * dev, comedi_devconfig * it)
@@ -454,7 +468,11 @@ static int mio_cs_attach(comedi_device * dev, comedi_devconfig * it)
        dev->driver = &driver_ni_mio_cs;
        dev->iobase = link->io.BasePort1;
 
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        irq = link->irq.AssignedIRQ;
+#else
+       irq = link->irq;
+#endif
 
        printk("comedi%d: %s: DAQCard: io 0x%04lx, irq %u, ",
                dev->minor, dev->driver->driver_name, dev->iobase, irq);
index ceda71c64c5e85b39729839398c75838c6ab5ce9..c963ff417cdbb6f526b87c2c0f9fe0ea9e0c4b92 100644 (file)
@@ -79,7 +79,9 @@ static char *version = "quatech_daqp_cs.c 1.10 2003/04/21 (Brent Baccala)";
 
 typedef struct local_info_t {
        struct pcmcia_device *link;
+#ifdef COMEDI_HAVE_DS_DEV_NODE_T
        dev_node_t node;
+#endif
        int stop;
        int table_index;
        char board_name[32];
@@ -1099,6 +1101,7 @@ static int daqp_cs_attach(struct pcmcia_device *link)
        local->link = link;
        link->priv = local;
 
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
@@ -1107,6 +1110,7 @@ static int daqp_cs_attach(struct pcmcia_device *link)
        link->irq.Handler = daqp_interrupt;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        link->irq.Instance = local;
+#endif
 #endif
 
        /*
@@ -1139,7 +1143,10 @@ static void daqp_cs_detach(struct pcmcia_device *link)
 
        DEBUG(0, "daqp_cs_detach(0x%p)\n", link);
 
-       if (link->dev_node) {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
+       if (link->dev_node)
+#endif
+       {
                dev->stop = 1;
                daqp_cs_release(link);
        }
@@ -1170,8 +1177,12 @@ static int daqp_pcmcia_config_loop(struct pcmcia_device *p_dev,
                return -ENODEV;
 
        /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
        if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+#endif
+       {
                p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+       }
 
        /* IO window settings */
        p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -1199,7 +1210,9 @@ static int daqp_pcmcia_config_loop(struct pcmcia_device *p_dev,
 
 static void daqp_cs_config(struct pcmcia_device *link)
 {
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        local_info_t *dev = link->priv;
+#endif
        int last_ret;
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
        tuple_t tuple;
@@ -1273,8 +1286,12 @@ static void daqp_cs_config(struct pcmcia_device *link)
                link->conf.ConfigIndex = cfg->index;
 
                /* Do we need to allocate an interrupt? */
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
                if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
+#endif
+               {
                        link->conf.Attributes |= CONF_ENABLE_IRQ;
+               }
 
                /* IO window settings */
                link->io.NumPorts1 = link->io.NumPorts2 = 0;
@@ -1315,13 +1332,21 @@ static void daqp_cs_config(struct pcmcia_device *link)
           handler to the interrupt, unless the 'Handler' member of the
           irq structure is initialized.
         */
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
        if (link->conf.Attributes & CONF_ENABLE_IRQ)
+#endif
+       {
 #ifndef CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE
                last_fn = RequestIRQ;
 #endif
-               if ((last_ret = pcmcia_request_irq(link, &link->irq))) {
+#ifdef COMEDI_HAVE_CS_IRQ_REQ_T
+               last_ret = pcmcia_request_irq(link, &link->irq);
+#else
+               last_ret = pcmcia_request_irq(link, daqp_interrupt);
+#endif
+               if (last_ret)
                        goto cs_failed;
-               }
+       }
 
        /*
           This actually configures the PCMCIA socket -- setting up
@@ -1335,6 +1360,7 @@ static void daqp_cs_config(struct pcmcia_device *link)
                goto cs_failed;
        }
 
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        /*
           At this point, the dev_node_t structure(s) need to be
           initialized and arranged in a linked list at link->dev.
@@ -1346,12 +1372,23 @@ static void daqp_cs_config(struct pcmcia_device *link)
        sprintf(dev->node.dev_name, "quatech_daqp_cs");
        dev->node.major = dev->node.minor = 0;
        link->dev_node = &dev->node;
+#endif
 
        /* Finally, report what we've done */
+#ifdef CONFIG_COMEDI_HAVE_DS_DEV_NODE_T
        printk(KERN_INFO "%s: index 0x%02x",
                dev->node.dev_name, link->conf.ConfigIndex);
+#else
+       dev_info(&link->dev, "index 0x%02x", link->conf.ConfigIndex);
+#endif
        if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               printk(", irq %u", link->irq.AssignedIRQ);
+               printk(", irq %u",
+#ifdef CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T
+                       link->irq.AssignedIRQ
+#else
+                       link->irq
+#endif
+                       );
        if (link->io.NumPorts1)
                printk(", io 0x%04x-0x%04x", link->io.BasePort1,
                        link->io.BasePort1 + link->io.NumPorts1 - 1);
index dc214f15fc2d7b57c29773d004518d89304858e5..0a8f934bd5c30caec3fbe7d509456cbe3ac462ee 100644 (file)
@@ -116,6 +116,18 @@ if test "$HAVE_PCMCIA_LOOP_TUPLE" = "yes" ; then
        AC_DEFINE([CONFIG_COMEDI_HAVE_PCMCIA_LOOP_TUPLE],[true],[Define if Linux kernel source has pcmcia_loop_tuple function])
 fi
 
+COMEDI_CHECK_DS_DEV_NODE_T([$LINUX_SRC_DIR],
+      [HAVE_DS_DEV_NODE_T="yes"], [HAVE_DS_DEV_NODE_T="no"])
+if test "$HAVE_DS_DEV_NODE_T" = "yes" ; then
+       AC_DEFINE([CONFIG_COMEDI_HAVE_DS_DEV_NODE_T],[true],[Define if Linux kernel source has dev_node_t in pcmcia/ds.h (removed in 2.6.35)])
+fi
+
+COMEDI_CHECK_CS_IRQ_REQ_T([$LINUX_SRC_DIR],
+      [HAVE_CS_IRQ_REQ_T="yes"], [HAVE_CS_IRQ_REQ_T="no"])
+if test "$HAVE_CS_IRQ_REQ_T" = "yes" ; then
+       AC_DEFINE([CONFIG_COMEDI_HAVE_CS_IRQ_REQ_T],[true],[Define if Linux kernel source has irq_req_t in pcmcia/cs.h (removed in 2.6.35)])
+fi
+
 AS_CHECK_LINUX_CONFIG_OPTION([CONFIG_USB],[HAVE_USB="yes"],[HAVE_USB="yes"],[HAVE_USB="no"])
 AM_CONDITIONAL([CONFIG_USB],[test "$HAVE_USB" = "yes"])
 AC_ARG_ENABLE([usb],[  --disable-usb           Disable support for USB devices],
index 934908914a28936afdbdd275fe57f99e9e4616c3..4e4f8ccf9b6e3bff120ab98079e3418a8800ce40 100644 (file)
@@ -803,6 +803,40 @@ AC_DEFUN([COMEDI_CHECK_PCMCIA_LOOP_TUPLE],
        fi
 ])
 
+# COMEDI_CHECK_DS_DEV_NODE_T([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is old enough to have the dev_node_t type
+# in pcmcia/ds.h.
+AC_DEFUN([COMEDI_CHECK_DS_DEV_NODE_T],
+[
+       AC_MSG_CHECKING([$1 for dev_node_t in pcmcia/ds.h (removed in 2.6.35)])
+       if [grep -q dev_node_t "$1/include/pcmcia/ds.h"] 2>/dev/null ; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_CS_IRQ_REQ_T([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is old enough to have the irq_req_t type
+# in pcmcia/cs.h.
+AC_DEFUN([COMEDI_CHECK_CS_IRQ_REQ_T],
+[
+       AC_MSG_CHECKING([$1 for irq_req_t in pcmcia/cs.h (removed in 2.6.35)])
+       if [grep -q irq_req_t "$1/include/pcmcia/cs.h"] 2>/dev/null ; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
 # COMEDI_CHECK_HAVE_MUTEX_H([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
 # -------------------------------------------------------------
 #