4 #define MAX1363_SETUP_BYTE(a) ((a) | 0x80)
6 /* There is a fair bit more defined here than currently
7 * used, but the intention is to support everything these
8 * chips do in the long run */
11 /* max1363 and max1236, max1237, max1238, max1239 */
12 #define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD 0x00
13 #define MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF 0x20
14 #define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT 0x40
15 #define MAX1363_SETUP_AIN3_IS_REF_REF_IS_INT 0x60
16 #define MAX1363_SETUP_POWER_UP_INT_REF 0x10
17 #define MAX1363_SETUP_POWER_DOWN_INT_REF 0x00
19 /* think about includeing max11600 etc - more settings */
20 #define MAX1363_SETUP_EXT_CLOCK 0x08
21 #define MAX1363_SETUP_INT_CLOCK 0x00
22 #define MAX1363_SETUP_UNIPOLAR 0x00
23 #define MAX1363_SETUP_BIPOLAR 0x04
24 #define MAX1363_SETUP_RESET 0x00
25 #define MAX1363_SETUP_NORESET 0x02
26 /* max1363 only - though don't care on others.
27 * For now monitor modes are not implemented as the relevant
28 * line is not connected on my test board.
29 * The definitions are here as I intend to add this soon.
31 #define MAX1363_SETUP_MONITOR_SETUP 0x01
33 /* Specific to the max1363 */
34 #define MAX1363_MON_RESET_CHAN(a) (1 << ((a) + 4))
35 #define MAX1363_MON_CONV_RATE_133ksps 0
36 #define MAX1363_MON_CONV_RATE_66_5ksps 0x02
37 #define MAX1363_MON_CONV_RATE_33_3ksps 0x04
38 #define MAX1363_MON_CONV_RATE_16_6ksps 0x06
39 #define MAX1363_MON_CONV_RATE_8_3ksps 0x08
40 #define MAX1363_MON_CONV_RATE_4_2ksps 0x0A
41 #define MAX1363_MON_CONV_RATE_2_0ksps 0x0C
42 #define MAX1363_MON_CONV_RATE_1_0ksps 0x0E
43 #define MAX1363_MON_INT_ENABLE 0x01
45 /* defined for readability reasons */
47 #define MAX1363_CONFIG_BYTE(a) ((a))
49 #define MAX1363_CONFIG_SE 0x01
50 #define MAX1363_CONFIG_DE 0x00
51 #define MAX1363_CONFIG_SCAN_TO_CS 0x00
52 #define MAX1363_CONFIG_SCAN_SINGLE_8 0x20
53 #define MAX1363_CONFIG_SCAN_MONITOR_MODE 0x40
54 #define MAX1363_CONFIG_SCAN_SINGLE_1 0x60
55 /* max123{6-9} only */
56 #define MAX1236_SCAN_MID_TO_CHANNEL 0x40
58 /* max1363 only - merely part of channel selects or don't care for others*/
59 #define MAX1363_CONFIG_EN_MON_MODE_READ 0x18
61 #define MAX1363_CHANNEL_SEL(a) ((a) << 1)
63 /* max1363 strictly 0x06 - but doesn't matter */
64 #define MAX1363_CHANNEL_SEL_MASK 0x1E
65 #define MAX1363_SCAN_MASK 0x60
66 #define MAX1363_SE_DE_MASK 0x01
69 * struct max1363_mode - scan mode information
70 * @name: Name used to identify the scan mode.
71 * @conf: The corresponding value of the configuration register
72 * @numvals: The number of values returned by a single scan
79 #define MAX1363_MODE_SINGLE(_num, _mask) { \
80 .conf = MAX1363_CHANNEL_SEL(_num) \
81 | MAX1363_CONFIG_SCAN_SINGLE_1 \
82 | MAX1363_CONFIG_SE, \
86 #define MAX1363_MODE_SCAN_TO_CHANNEL(_num, _mask) { \
87 .conf = MAX1363_CHANNEL_SEL(_num) \
88 | MAX1363_CONFIG_SCAN_TO_CS \
89 | MAX1363_CONFIG_SE, \
94 /* note not available for max1363 hence naming */
95 #define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num, _mask) { \
96 .conf = MAX1363_CHANNEL_SEL(_num) \
97 | MAX1236_SCAN_MID_TO_CHANNEL \
98 | MAX1363_CONFIG_SE, \
102 #define MAX1363_MODE_DIFF_SINGLE(_nump, _numm, _mask) { \
103 .conf = MAX1363_CHANNEL_SEL(_nump) \
104 | MAX1363_CONFIG_SCAN_SINGLE_1 \
105 | MAX1363_CONFIG_DE, \
109 /* Can't think how to automate naming so specify for now */
110 #define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(_num, _numvals, _mask) { \
111 .conf = MAX1363_CHANNEL_SEL(_num) \
112 | MAX1363_CONFIG_SCAN_TO_CS \
113 | MAX1363_CONFIG_DE, \
117 /* note only available for max1363 hence naming */
118 #define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(_num, _numvals, _mask) { \
119 .conf = MAX1363_CHANNEL_SEL(_num) \
120 | MAX1236_SCAN_MID_TO_CHANNEL \
121 | MAX1363_CONFIG_SE, \
125 /* Not currently handled */
126 #define MAX1363_MODE_MONITOR { \
128 .conf = MAX1363_CHANNEL_SEL(3) \
129 | MAX1363_CONFIG_SCAN_MONITOR_MODE \
130 | MAX1363_CONFIG_SE, \
134 /* This may seem an overly long winded way to do this, but at least it makes
135 * clear what all the various options actually do. Alternative suggestions
136 * that don't require user to have intimate knowledge of the chip welcomed.
138 enum max1363_channels {
139 max1363_in0, max1363_in1, max1363_in2, max1363_in3,
140 max1363_in4, max1363_in5, max1363_in6, max1363_in7,
141 max1363_in8, max1363_in9, max1363_in10, max1363_in11,
143 max1363_in0min1, max1363_in2min3,
144 max1363_in4min5, max1363_in6min7,
145 max1363_in8min9, max1363_in10min11,
147 max1363_in1min0, max1363_in3min2,
148 max1363_in5min4, max1363_in7min6,
149 max1363_in9min8, max1363_in11min10,
152 /* This must be maintained along side the max1363_mode_table in max1363_core */
154 /* Single read of a single channel */
155 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
156 /* Differential single read */
157 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
158 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
159 /* Scan to channel and mid to channel where overlapping */
160 s0to1, s0to2, s2to3, s0to3, s0to4, s0to5, s0to6,
161 s6to7, s0to7, s6to8, s0to8, s6to9,
162 s0to9, s6to10, s0to10, s6to11, s0to11,
163 /* Differential scan to channel and mid to channel where overlapping */
164 d0m1to2m3, d0m1to4m5, d0m1to6m7, d6m7to8m9,
165 d0m1to8m9, d6m7to10m11, d0m1to10m11, d1m0to3m2,
166 d1m0to5m4, d1m0to7m6, d7m6to9m8, d1m0to9m8,
167 d7m6to11m10, d1m0to11m10,
171 * struct max1363_chip_info - chip specifc information
172 * @name: indentification string for chip
173 * @num_inputs: number of physical inputs on chip
174 * @bits: accuracy of the adc in bits
175 * @int_vref_mv: the internal reference voltage
176 * @monitor_mode: whether the chip supports monitor interrupts
177 * @mode_list: array of available scan modes
178 * @num_modes: the number of scan modes available
179 * @default_mode: the scan mode in which the chip starts up
181 struct max1363_chip_info {
187 const enum max1363_modes *mode_list;
189 enum max1363_modes default_mode;
190 struct attribute_group *dev_attrs;
191 struct attribute_group *scan_attrs;
196 * struct max1363_state - driver instance specific data
197 * @indio_dev: the industrial I/O device
198 * @client: i2c_client
199 * @setupbyte: cache of current device setup byte
200 * @configbyte: cache of current device config byte
201 * @chip_info: chip model specific constants, available modes etc
202 * @current_mode: the scan mode of this chip
203 * @requestedmask: a valid requested set of channels
204 * @poll_work: bottom half of polling interrupt handler
205 * @protect_ring: used to ensure only one polling bh running at a time
206 * @reg: supply regulator
208 struct max1363_state {
209 struct iio_dev *indio_dev;
210 struct i2c_client *client;
213 const struct max1363_chip_info *chip_info;
214 const struct max1363_mode *current_mode;
216 struct work_struct poll_work;
217 atomic_t protect_ring;
218 struct iio_trigger *trig;
219 struct regulator *reg;
222 const struct max1363_mode
223 *max1363_match_mode(u32 mask, const struct max1363_chip_info *ci);
225 int max1363_set_scan_mode(struct max1363_state *st);
227 #ifdef CONFIG_MAX1363_RING_BUFFER
229 int max1363_single_channel_from_ring(long mask, struct max1363_state *st);
230 int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev);
231 void max1363_ring_cleanup(struct iio_dev *indio_dev);
233 int max1363_initialize_ring(struct iio_ring_buffer *ring);
234 void max1363_uninitialize_ring(struct iio_ring_buffer *ring);
236 #else /* CONFIG_MAX1363_RING_BUFFER */
238 static inline void max1363_uninitialize_ring(struct iio_ring_buffer *ring)
242 static inline int max1363_initialize_ring(struct iio_ring_buffer *ring)
247 int max1363_single_channel_from_ring(long mask, struct max1363_state *st)
254 max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev)
259 static inline void max1363_ring_cleanup(struct iio_dev *indio_dev) {};
260 #endif /* CONFIG_MAX1363_RING_BUFFER */
261 #endif /* _MAX1363_H_ */