mfd: sec: Fix RTC alarm interrupt number on S2MPS11
[firefly-linux-kernel-4.4.55.git] / drivers / staging / comedi / drivers / comedi_fc.h
1 /*
2  * comedi_fc.h
3  * This is a place for code driver writers wish to share between
4  * two or more drivers. These functions are meant to be used only
5  * by drivers, they are NOT part of the kcomedilib API!
6  *
7  * Author: Frank Mori Hess <fmhess@users.sourceforge.net>
8  * Copyright (C) 2002 Frank Mori Hess
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  */
20
21 #ifndef _COMEDI_FC_H
22 #define _COMEDI_FC_H
23
24 #include "../comedidev.h"
25
26 /**
27  * cfc_check_trigger_src() - trivially validate a comedi_cmd trigger source
28  * @src: pointer to the trigger source to validate
29  * @flags: bitmask of valid TRIG_* for the trigger
30  *
31  * This is used in "step 1" of the do_cmdtest functions of comedi drivers
32  * to vaildate the comedi_cmd triggers. The mask of the @src against the
33  * @flags allows the userspace comedilib to pass all the comedi_cmd
34  * triggers as TRIG_ANY and get back a bitmask of the valid trigger sources.
35  */
36 static inline int cfc_check_trigger_src(unsigned int *src, unsigned int flags)
37 {
38         unsigned int orig_src = *src;
39
40         *src = orig_src & flags;
41         if (*src == TRIG_INVALID || *src != orig_src)
42                 return -EINVAL;
43         return 0;
44 }
45
46 /**
47  * cfc_check_trigger_is_unique() - make sure a trigger source is unique
48  * @src: the trigger source to check
49  */
50 static inline int cfc_check_trigger_is_unique(unsigned int src)
51 {
52         /* this test is true if more than one _src bit is set */
53         if ((src & (src - 1)) != 0)
54                 return -EINVAL;
55         return 0;
56 }
57
58 /**
59  * cfc_check_trigger_arg_is() - trivially validate a trigger argument
60  * @arg: pointer to the trigger arg to validate
61  * @val: the value the argument should be
62  */
63 static inline int cfc_check_trigger_arg_is(unsigned int *arg, unsigned int val)
64 {
65         if (*arg != val) {
66                 *arg = val;
67                 return -EINVAL;
68         }
69         return 0;
70 }
71
72 /**
73  * cfc_check_trigger_arg_min() - trivially validate a trigger argument
74  * @arg: pointer to the trigger arg to validate
75  * @val: the minimum value the argument should be
76  */
77 static inline int cfc_check_trigger_arg_min(unsigned int *arg,
78                                             unsigned int val)
79 {
80         if (*arg < val) {
81                 *arg = val;
82                 return -EINVAL;
83         }
84         return 0;
85 }
86
87 /**
88  * cfc_check_trigger_arg_max() - trivially validate a trigger argument
89  * @arg: pointer to the trigger arg to validate
90  * @val: the maximum value the argument should be
91  */
92 static inline int cfc_check_trigger_arg_max(unsigned int *arg,
93                                             unsigned int val)
94 {
95         if (*arg > val) {
96                 *arg = val;
97                 return -EINVAL;
98         }
99         return 0;
100 }
101
102 #endif /* _COMEDI_FC_H */