GNU Linux-libre 4.9.333-gnu1
[releases.git] / drivers / staging / comedi / drivers / das08_cs.c
1 /*
2  * Comedi driver for DAS008 PCMCIA boards
3  *
4  * COMEDI - Linux Control and Measurement Device Interface
5  * Copyright (C) 2000 David A. Schleef <ds@schleef.org>
6  * Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * PCMCIA support code for this driver is adapted from the dummy_cs.c
19  * driver of the Linux PCMCIA Card Services package.
20  *
21  * The initial developer of the original code is David A. Hinds
22  * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
23  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
24  */
25
26 /*
27  * Driver: das08_cs
28  * Description: DAS-08 PCMCIA boards
29  * Author: Warren Jasper, ds, Frank Hess
30  * Devices: [ComputerBoards] PCM-DAS08 (pcm-das08)
31  * Status: works
32  *
33  * This is the PCMCIA-specific support split off from the
34  * das08 driver.
35  *
36  * Configuration Options: none, uses PCMCIA auto config
37  *
38  * Command support does not exist, but could be added for this board.
39  */
40
41 #include <linux/module.h>
42
43 #include "../comedi_pcmcia.h"
44
45 #include "das08.h"
46
47 static const struct das08_board_struct das08_cs_boards[] = {
48         {
49                 .name           = "pcm-das08",
50                 .ai_nbits       = 12,
51                 .ai_pg          = das08_bipolar5,
52                 .ai_encoding    = das08_pcm_encode12,
53                 .di_nchan       = 3,
54                 .do_nchan       = 3,
55                 .iosize         = 16,
56         },
57 };
58
59 static int das08_cs_auto_attach(struct comedi_device *dev,
60                                 unsigned long context)
61 {
62         struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
63         struct das08_private_struct *devpriv;
64         unsigned long iobase;
65         int ret;
66
67         /* The das08 driver needs the board_ptr */
68         dev->board_ptr = &das08_cs_boards[0];
69
70         link->config_flags |= CONF_AUTO_SET_IO;
71         ret = comedi_pcmcia_enable(dev, NULL);
72         if (ret)
73                 return ret;
74         iobase = link->resource[0]->start;
75
76         devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
77         if (!devpriv)
78                 return -ENOMEM;
79
80         return das08_common_attach(dev, iobase);
81 }
82
83 static struct comedi_driver driver_das08_cs = {
84         .driver_name    = "das08_cs",
85         .module         = THIS_MODULE,
86         .auto_attach    = das08_cs_auto_attach,
87         .detach         = comedi_pcmcia_disable,
88 };
89
90 static int das08_pcmcia_attach(struct pcmcia_device *link)
91 {
92         return comedi_pcmcia_auto_config(link, &driver_das08_cs);
93 }
94
95 static const struct pcmcia_device_id das08_cs_id_table[] = {
96         PCMCIA_DEVICE_MANF_CARD(0x01c5, 0x4001),
97         PCMCIA_DEVICE_NULL
98 };
99 MODULE_DEVICE_TABLE(pcmcia, das08_cs_id_table);
100
101 static struct pcmcia_driver das08_cs_driver = {
102         .name           = "pcm-das08",
103         .owner          = THIS_MODULE,
104         .id_table       = das08_cs_id_table,
105         .probe          = das08_pcmcia_attach,
106         .remove         = comedi_pcmcia_auto_unconfig,
107 };
108 module_comedi_pcmcia_driver(driver_das08_cs, das08_cs_driver);
109
110 MODULE_AUTHOR("David A. Schleef <ds@schleef.org>");
111 MODULE_AUTHOR("Frank Mori Hess <fmhess@users.sourceforge.net>");
112 MODULE_DESCRIPTION("Comedi driver for ComputerBoards DAS-08 PCMCIA boards");
113 MODULE_LICENSE("GPL");