Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / comedi / drivers / pcm_common.c
1 #include "../comedidev.h"
2
3 #include "comedi_fc.h"
4 #include "pcm_common.h"
5
6 int comedi_pcm_cmdtest(struct comedi_device *dev,
7 struct comedi_subdevice *s, struct comedi_cmd *cmd)
8 {
9 int err = 0;
10
11 /* Step 1 : check if triggers are trivially valid */
12
13 err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW | TRIG_INT);
14 err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_EXT);
15 err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_NOW);
16 err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT);
17 err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_COUNT | TRIG_NONE);
18
19 if (err)
20 return 1;
21
22 /* Step 2a : make sure trigger sources are unique */
23
24 err |= cfc_check_trigger_is_unique(cmd->start_src);
25 err |= cfc_check_trigger_is_unique(cmd->stop_src);
26
27 /* Step 2b : and mutually compatible */
28
29 if (err)
30 return 2;
31
32 /* Step 3: check if arguments are trivially valid */
33
34 err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);
35 err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, 0);
36 err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0);
37 err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len);
38
39 switch (cmd->stop_src) {
40 case TRIG_COUNT:
41 /* any count allowed */
42 break;
43 case TRIG_NONE:
44 err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0);
45 break;
46 default:
47 break;
48 }
49
50 if (err)
51 return 3;
52
53 /* step 4: fix up any arguments */
54
55 /* if (err) return 4; */
56
57 return 0;
58 }
59 EXPORT_SYMBOL(comedi_pcm_cmdtest);
60
61 MODULE_AUTHOR("Comedi http://www.comedi.org");
62 MODULE_DESCRIPTION("Comedi low-level driver");
63 MODULE_LICENSE("GPL");