1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include "../comedi.h"
25#include "../comedilib.h"
26#include "../comedidev.h"
27
28#include <linux/string.h>
29#include <linux/delay.h>
30
31int comedi_data_write(void *dev, unsigned int subdev, unsigned int chan,
32 unsigned int range, unsigned int aref, unsigned int data)
33{
34 struct comedi_insn insn;
35
36 memset(&insn, 0, sizeof(insn));
37 insn.insn = INSN_WRITE;
38 insn.n = 1;
39 insn.data = &data;
40 insn.subdev = subdev;
41 insn.chanspec = CR_PACK(chan, range, aref);
42
43 return comedi_do_insn(dev, &insn);
44}
45
46int comedi_data_read(void *dev, unsigned int subdev, unsigned int chan,
47 unsigned int range, unsigned int aref, unsigned int *data)
48{
49 struct comedi_insn insn;
50
51 memset(&insn, 0, sizeof(insn));
52 insn.insn = INSN_READ;
53 insn.n = 1;
54 insn.data = data;
55 insn.subdev = subdev;
56 insn.chanspec = CR_PACK(chan, range, aref);
57
58 return comedi_do_insn(dev, &insn);
59}
60
61int comedi_data_read_hint(void *dev, unsigned int subdev,
62 unsigned int chan, unsigned int range,
63 unsigned int aref)
64{
65 struct comedi_insn insn;
66 unsigned int dummy_data;
67
68 memset(&insn, 0, sizeof(insn));
69 insn.insn = INSN_READ;
70 insn.n = 0;
71 insn.data = &dummy_data;
72 insn.subdev = subdev;
73 insn.chanspec = CR_PACK(chan, range, aref);
74
75 return comedi_do_insn(dev, &insn);
76}
77
78int comedi_data_read_delayed(void *dev, unsigned int subdev,
79 unsigned int chan, unsigned int range,
80 unsigned int aref, unsigned int *data,
81 unsigned int nano_sec)
82{
83 int retval;
84
85 retval = comedi_data_read_hint(dev, subdev, chan, range, aref);
86 if (retval < 0)
87 return retval;
88
89 udelay((nano_sec + 999) / 1000);
90
91 return comedi_data_read(dev, subdev, chan, range, aref, data);
92}
93