Staging: comedi: Remove lsampl_t and sampl_t typedefs
[safe/jmp/linux-2.6] / drivers / staging / comedi / kcomedilib / dio.c
1 /*
2     kcomedilib/dio.c
3     implements comedi_dio_*() functions
4
5     COMEDI - Linux Control and Measurement Device Interface
6     Copyright (C) 2000 David A. Schleef <ds@schleef.org>
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     You should have received a copy of the GNU General Public License
19     along with this program; if not, write to the Free Software
20     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22 */
23
24 #include "../comedi.h"
25 #include "../comedilib.h"
26
27 #include <linux/string.h>
28
29 int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan,
30         unsigned int io)
31 {
32         comedi_insn insn;
33
34         memset(&insn, 0, sizeof(insn));
35         insn.insn = INSN_CONFIG;
36         insn.n = 1;
37         insn.data = &io;
38         insn.subdev = subdev;
39         insn.chanspec = CR_PACK(chan, 0, 0);
40
41         return comedi_do_insn(dev, &insn);
42 }
43
44 int comedi_dio_read(void *dev, unsigned int subdev, unsigned int chan,
45         unsigned int *val)
46 {
47         comedi_insn insn;
48
49         memset(&insn, 0, sizeof(insn));
50         insn.insn = INSN_READ;
51         insn.n = 1;
52         insn.data = val;
53         insn.subdev = subdev;
54         insn.chanspec = CR_PACK(chan, 0, 0);
55
56         return comedi_do_insn(dev, &insn);
57 }
58
59 int comedi_dio_write(void *dev, unsigned int subdev, unsigned int chan,
60         unsigned int val)
61 {
62         comedi_insn insn;
63
64         memset(&insn, 0, sizeof(insn));
65         insn.insn = INSN_WRITE;
66         insn.n = 1;
67         insn.data = &val;
68         insn.subdev = subdev;
69         insn.chanspec = CR_PACK(chan, 0, 0);
70
71         return comedi_do_insn(dev, &insn);
72 }
73
74 int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask,
75         unsigned int *bits)
76 {
77         comedi_insn insn;
78         unsigned int data[2];
79         int ret;
80
81         memset(&insn, 0, sizeof(insn));
82         insn.insn = INSN_BITS;
83         insn.n = 2;
84         insn.data = data;
85         insn.subdev = subdev;
86
87         data[0] = mask;
88         data[1] = *bits;
89
90         ret = comedi_do_insn(dev, &insn);
91
92         *bits = data[1];
93
94         return ret;
95 }