3 * Copyright (C) 2008-2010 Jonathan Cameron
5 * based on linux/drivers/i2c/chips/max123x
6 * Copyright (C) 2002-2004 Stefan Eletzhofer
8 * based on linux/drivers/acron/char/pcf8583.c
9 * Copyright (C) 2000 Russell King
11 * Driver for max1363 and similar chips.
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
18 #include <linux/interrupt.h>
19 #include <linux/device.h>
20 #include <linux/kernel.h>
21 #include <linux/sysfs.h>
22 #include <linux/list.h>
23 #include <linux/i2c.h>
24 #include <linux/regulator/consumer.h>
25 #include <linux/slab.h>
26 #include <linux/err.h>
27 #include <linux/module.h>
29 #include <linux/of_device.h>
31 #include <linux/iio/iio.h>
32 #include <linux/iio/sysfs.h>
33 #include <linux/iio/events.h>
34 #include <linux/iio/buffer.h>
35 #include <linux/iio/driver.h>
36 #include <linux/iio/kfifo_buf.h>
37 #include <linux/iio/trigger_consumer.h>
38 #include <linux/iio/triggered_buffer.h>
40 #define MAX1363_SETUP_BYTE(a) ((a) | 0x80)
42 /* There is a fair bit more defined here than currently
43 * used, but the intention is to support everything these
44 * chips do in the long run */
47 /* max1363 and max1236, max1237, max1238, max1239 */
48 #define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD 0x00
49 #define MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF 0x20
50 #define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT 0x40
51 #define MAX1363_SETUP_AIN3_IS_REF_REF_IS_INT 0x60
52 #define MAX1363_SETUP_POWER_UP_INT_REF 0x10
53 #define MAX1363_SETUP_POWER_DOWN_INT_REF 0x00
55 /* think about including max11600 etc - more settings */
56 #define MAX1363_SETUP_EXT_CLOCK 0x08
57 #define MAX1363_SETUP_INT_CLOCK 0x00
58 #define MAX1363_SETUP_UNIPOLAR 0x00
59 #define MAX1363_SETUP_BIPOLAR 0x04
60 #define MAX1363_SETUP_RESET 0x00
61 #define MAX1363_SETUP_NORESET 0x02
62 /* max1363 only - though don't care on others.
63 * For now monitor modes are not implemented as the relevant
64 * line is not connected on my test board.
65 * The definitions are here as I intend to add this soon.
67 #define MAX1363_SETUP_MONITOR_SETUP 0x01
69 /* Specific to the max1363 */
70 #define MAX1363_MON_RESET_CHAN(a) (1 << ((a) + 4))
71 #define MAX1363_MON_INT_ENABLE 0x01
73 /* defined for readability reasons */
75 #define MAX1363_CONFIG_BYTE(a) ((a))
77 #define MAX1363_CONFIG_SE 0x01
78 #define MAX1363_CONFIG_DE 0x00
79 #define MAX1363_CONFIG_SCAN_TO_CS 0x00
80 #define MAX1363_CONFIG_SCAN_SINGLE_8 0x20
81 #define MAX1363_CONFIG_SCAN_MONITOR_MODE 0x40
82 #define MAX1363_CONFIG_SCAN_SINGLE_1 0x60
83 /* max123{6-9} only */
84 #define MAX1236_SCAN_MID_TO_CHANNEL 0x40
86 /* max1363 only - merely part of channel selects or don't care for others */
87 #define MAX1363_CONFIG_EN_MON_MODE_READ 0x18
89 #define MAX1363_CHANNEL_SEL(a) ((a) << 1)
91 /* max1363 strictly 0x06 - but doesn't matter */
92 #define MAX1363_CHANNEL_SEL_MASK 0x1E
93 #define MAX1363_SCAN_MASK 0x60
94 #define MAX1363_SE_DE_MASK 0x01
96 #define MAX1363_MAX_CHANNELS 25
98 * struct max1363_mode - scan mode information
99 * @conf: The corresponding value of the configuration register
100 * @modemask: Bit mask corresponding to channels enabled in this mode
102 struct max1363_mode {
104 DECLARE_BITMAP(modemask, MAX1363_MAX_CHANNELS);
107 /* This must be maintained along side the max1363_mode_table in max1363_core */
109 /* Single read of a single channel */
110 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
111 /* Differential single read */
112 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
113 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
114 /* Scan to channel and mid to channel where overlapping */
115 s0to1, s0to2, s2to3, s0to3, s0to4, s0to5, s0to6,
116 s6to7, s0to7, s6to8, s0to8, s6to9,
117 s0to9, s6to10, s0to10, s6to11, s0to11,
118 /* Differential scan to channel and mid to channel where overlapping */
119 d0m1to2m3, d0m1to4m5, d0m1to6m7, d6m7to8m9,
120 d0m1to8m9, d6m7to10m11, d0m1to10m11, d1m0to3m2,
121 d1m0to5m4, d1m0to7m6, d7m6to9m8, d1m0to9m8,
122 d7m6to11m10, d1m0to11m10,
126 * struct max1363_chip_info - chip specifc information
127 * @info: iio core function callbacks structure
128 * @channels: channel specification
129 * @num_channels: number of channels
130 * @mode_list: array of available scan modes
131 * @default_mode: the scan mode in which the chip starts up
132 * @int_vref_mv: the internal reference voltage
133 * @num_modes: number of modes
134 * @bits: accuracy of the adc in bits
136 struct max1363_chip_info {
137 const struct iio_info *info;
138 const struct iio_chan_spec *channels;
140 const enum max1363_modes *mode_list;
141 enum max1363_modes default_mode;
148 * struct max1363_state - driver instance specific data
149 * @client: i2c_client
150 * @setupbyte: cache of current device setup byte
151 * @configbyte: cache of current device config byte
152 * @chip_info: chip model specific constants, available modes, etc.
153 * @current_mode: the scan mode of this chip
154 * @requestedmask: a valid requested set of channels
155 * @reg: supply regulator
156 * @monitor_on: whether monitor mode is enabled
157 * @monitor_speed: parameter corresponding to device monitor speed setting
158 * @mask_high: bitmask for enabled high thresholds
159 * @mask_low: bitmask for enabled low thresholds
160 * @thresh_high: high threshold values
161 * @thresh_low: low threshold values
162 * @vref: Reference voltage regulator
163 * @vref_uv: Actual (external or internal) reference voltage
164 * @send: function used to send data to the chip
165 * @recv: function used to receive data from the chip
167 struct max1363_state {
168 struct i2c_client *client;
171 const struct max1363_chip_info *chip_info;
172 const struct max1363_mode *current_mode;
174 struct regulator *reg;
176 /* Using monitor modes and buffer at the same time is
177 currently not supported */
179 unsigned int monitor_speed:3;
182 /* 4x unipolar first then the fours bipolar ones */
185 struct regulator *vref;
187 int (*send)(const struct i2c_client *client,
188 const char *buf, int count);
189 int (*recv)(const struct i2c_client *client,
190 char *buf, int count);
193 #define MAX1363_MODE_SINGLE(_num, _mask) { \
194 .conf = MAX1363_CHANNEL_SEL(_num) \
195 | MAX1363_CONFIG_SCAN_SINGLE_1 \
196 | MAX1363_CONFIG_SE, \
197 .modemask[0] = _mask, \
200 #define MAX1363_MODE_SCAN_TO_CHANNEL(_num, _mask) { \
201 .conf = MAX1363_CHANNEL_SEL(_num) \
202 | MAX1363_CONFIG_SCAN_TO_CS \
203 | MAX1363_CONFIG_SE, \
204 .modemask[0] = _mask, \
207 /* note not available for max1363 hence naming */
208 #define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num, _mask) { \
209 .conf = MAX1363_CHANNEL_SEL(_num) \
210 | MAX1236_SCAN_MID_TO_CHANNEL \
211 | MAX1363_CONFIG_SE, \
212 .modemask[0] = _mask \
215 #define MAX1363_MODE_DIFF_SINGLE(_nump, _numm, _mask) { \
216 .conf = MAX1363_CHANNEL_SEL(_nump) \
217 | MAX1363_CONFIG_SCAN_SINGLE_1 \
218 | MAX1363_CONFIG_DE, \
219 .modemask[0] = _mask \
222 /* Can't think how to automate naming so specify for now */
223 #define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(_num, _numvals, _mask) { \
224 .conf = MAX1363_CHANNEL_SEL(_num) \
225 | MAX1363_CONFIG_SCAN_TO_CS \
226 | MAX1363_CONFIG_DE, \
227 .modemask[0] = _mask \
230 /* note only available for max1363 hence naming */
231 #define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(_num, _numvals, _mask) { \
232 .conf = MAX1363_CHANNEL_SEL(_num) \
233 | MAX1236_SCAN_MID_TO_CHANNEL \
234 | MAX1363_CONFIG_SE, \
235 .modemask[0] = _mask \
238 static const struct max1363_mode max1363_mode_table[] = {
239 /* All of the single channel options first */
240 MAX1363_MODE_SINGLE(0, 1 << 0),
241 MAX1363_MODE_SINGLE(1, 1 << 1),
242 MAX1363_MODE_SINGLE(2, 1 << 2),
243 MAX1363_MODE_SINGLE(3, 1 << 3),
244 MAX1363_MODE_SINGLE(4, 1 << 4),
245 MAX1363_MODE_SINGLE(5, 1 << 5),
246 MAX1363_MODE_SINGLE(6, 1 << 6),
247 MAX1363_MODE_SINGLE(7, 1 << 7),
248 MAX1363_MODE_SINGLE(8, 1 << 8),
249 MAX1363_MODE_SINGLE(9, 1 << 9),
250 MAX1363_MODE_SINGLE(10, 1 << 10),
251 MAX1363_MODE_SINGLE(11, 1 << 11),
253 MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12),
254 MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13),
255 MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14),
256 MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15),
257 MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16),
258 MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17),
259 MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18),
260 MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19),
261 MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20),
262 MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21),
263 MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22),
264 MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23),
266 /* The multichannel scans next */
267 MAX1363_MODE_SCAN_TO_CHANNEL(1, 0x003),
268 MAX1363_MODE_SCAN_TO_CHANNEL(2, 0x007),
269 MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3, 0x00C),
270 MAX1363_MODE_SCAN_TO_CHANNEL(3, 0x00F),
271 MAX1363_MODE_SCAN_TO_CHANNEL(4, 0x01F),
272 MAX1363_MODE_SCAN_TO_CHANNEL(5, 0x03F),
273 MAX1363_MODE_SCAN_TO_CHANNEL(6, 0x07F),
274 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7, 0x0C0),
275 MAX1363_MODE_SCAN_TO_CHANNEL(7, 0x0FF),
276 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8, 0x1C0),
277 MAX1363_MODE_SCAN_TO_CHANNEL(8, 0x1FF),
278 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9, 0x3C0),
279 MAX1363_MODE_SCAN_TO_CHANNEL(9, 0x3FF),
280 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10, 0x7C0),
281 MAX1363_MODE_SCAN_TO_CHANNEL(10, 0x7FF),
282 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11, 0xFC0),
283 MAX1363_MODE_SCAN_TO_CHANNEL(11, 0xFFF),
285 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(2, 2, 0x003000),
286 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(4, 3, 0x007000),
287 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(6, 4, 0x00F000),
288 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(8, 2, 0x018000),
289 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(8, 5, 0x01F000),
290 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(10, 3, 0x038000),
291 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(10, 6, 0x3F000),
292 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(3, 2, 0x0C0000),
293 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(5, 3, 0x1C0000),
294 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(7, 4, 0x3C0000),
295 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(9, 2, 0x600000),
296 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(9, 5, 0x7C0000),
297 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(11, 3, 0xE00000),
298 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(11, 6, 0xFC0000),
301 static const struct max1363_mode
302 *max1363_match_mode(const unsigned long *mask,
303 const struct max1363_chip_info *ci)
307 for (i = 0; i < ci->num_modes; i++)
308 if (bitmap_subset(mask,
309 max1363_mode_table[ci->mode_list[i]].
311 MAX1363_MAX_CHANNELS))
312 return &max1363_mode_table[ci->mode_list[i]];
316 static int max1363_smbus_send(const struct i2c_client *client, const char *buf,
321 for (i = err = 0; err == 0 && i < count; ++i)
322 err = i2c_smbus_write_byte(client, buf[i]);
324 return err ? err : count;
327 static int max1363_smbus_recv(const struct i2c_client *client, char *buf,
332 for (i = 0; i < count; ++i) {
333 ret = i2c_smbus_read_byte(client);
342 static int max1363_write_basic_config(struct max1363_state *st)
344 u8 tx_buf[2] = { st->setupbyte, st->configbyte };
346 return st->send(st->client, tx_buf, 2);
349 static int max1363_set_scan_mode(struct max1363_state *st)
351 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
353 | MAX1363_SE_DE_MASK);
354 st->configbyte |= st->current_mode->conf;
356 return max1363_write_basic_config(st);
359 static int max1363_read_single_chan(struct iio_dev *indio_dev,
360 struct iio_chan_spec const *chan,
367 struct max1363_state *st = iio_priv(indio_dev);
368 struct i2c_client *client = st->client;
370 mutex_lock(&indio_dev->mlock);
372 * If monitor mode is enabled, the method for reading a single
373 * channel will have to be rather different and has not yet
376 * Also, cannot read directly if buffered capture enabled.
378 if (st->monitor_on || iio_buffer_enabled(indio_dev)) {
383 /* Check to see if current scan mode is correct */
384 if (st->current_mode != &max1363_mode_table[chan->address]) {
385 /* Update scan mode if needed */
386 st->current_mode = &max1363_mode_table[chan->address];
387 ret = max1363_set_scan_mode(st);
391 if (st->chip_info->bits != 8) {
393 data = st->recv(client, rxbuf, 2);
398 data = (rxbuf[1] | rxbuf[0] << 8) &
399 ((1 << st->chip_info->bits) - 1);
402 data = st->recv(client, rxbuf, 1);
411 mutex_unlock(&indio_dev->mlock);
416 static int max1363_read_raw(struct iio_dev *indio_dev,
417 struct iio_chan_spec const *chan,
422 struct max1363_state *st = iio_priv(indio_dev);
426 case IIO_CHAN_INFO_RAW:
427 ret = max1363_read_single_chan(indio_dev, chan, val, m);
431 case IIO_CHAN_INFO_SCALE:
432 *val = st->vref_uv / 1000;
433 *val2 = st->chip_info->bits;
434 return IIO_VAL_FRACTIONAL_LOG2;
441 /* Applies to max1363 */
442 static const enum max1363_modes max1363_mode_list[] = {
445 d0m1, d2m3, d1m0, d3m2,
446 d0m1to2m3, d1m0to3m2,
449 static const struct iio_event_spec max1363_events[] = {
451 .type = IIO_EV_TYPE_THRESH,
452 .dir = IIO_EV_DIR_RISING,
453 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
454 BIT(IIO_EV_INFO_ENABLE),
456 .type = IIO_EV_TYPE_THRESH,
457 .dir = IIO_EV_DIR_FALLING,
458 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
459 BIT(IIO_EV_INFO_ENABLE),
463 #define MAX1363_CHAN_U(num, addr, si, bits, ev_spec, num_ev_spec) \
465 .type = IIO_VOLTAGE, \
469 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
470 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
471 .datasheet_name = "AIN"#num, \
475 .storagebits = (bits > 8) ? 16 : 8, \
476 .endianness = IIO_BE, \
479 .event_spec = ev_spec, \
480 .num_event_specs = num_ev_spec, \
483 /* bipolar channel */
484 #define MAX1363_CHAN_B(num, num2, addr, si, bits, ev_spec, num_ev_spec) \
486 .type = IIO_VOLTAGE, \
492 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
493 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
494 .datasheet_name = "AIN"#num"-AIN"#num2, \
498 .storagebits = (bits > 8) ? 16 : 8, \
499 .endianness = IIO_BE, \
502 .event_spec = ev_spec, \
503 .num_event_specs = num_ev_spec, \
506 #define MAX1363_4X_CHANS(bits, ev_spec, num_ev_spec) { \
507 MAX1363_CHAN_U(0, _s0, 0, bits, ev_spec, num_ev_spec), \
508 MAX1363_CHAN_U(1, _s1, 1, bits, ev_spec, num_ev_spec), \
509 MAX1363_CHAN_U(2, _s2, 2, bits, ev_spec, num_ev_spec), \
510 MAX1363_CHAN_U(3, _s3, 3, bits, ev_spec, num_ev_spec), \
511 MAX1363_CHAN_B(0, 1, d0m1, 4, bits, ev_spec, num_ev_spec), \
512 MAX1363_CHAN_B(2, 3, d2m3, 5, bits, ev_spec, num_ev_spec), \
513 MAX1363_CHAN_B(1, 0, d1m0, 6, bits, ev_spec, num_ev_spec), \
514 MAX1363_CHAN_B(3, 2, d3m2, 7, bits, ev_spec, num_ev_spec), \
515 IIO_CHAN_SOFT_TIMESTAMP(8) \
518 static const struct iio_chan_spec max1036_channels[] =
519 MAX1363_4X_CHANS(8, NULL, 0);
520 static const struct iio_chan_spec max1136_channels[] =
521 MAX1363_4X_CHANS(10, NULL, 0);
522 static const struct iio_chan_spec max1236_channels[] =
523 MAX1363_4X_CHANS(12, NULL, 0);
524 static const struct iio_chan_spec max1361_channels[] =
525 MAX1363_4X_CHANS(10, max1363_events, ARRAY_SIZE(max1363_events));
526 static const struct iio_chan_spec max1363_channels[] =
527 MAX1363_4X_CHANS(12, max1363_events, ARRAY_SIZE(max1363_events));
529 /* Applies to max1236, max1237 */
530 static const enum max1363_modes max1236_mode_list[] = {
533 d0m1, d2m3, d1m0, d3m2,
534 d0m1to2m3, d1m0to3m2,
538 /* Applies to max1238, max1239 */
539 static const enum max1363_modes max1238_mode_list[] = {
540 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
541 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6,
542 s0to7, s0to8, s0to9, s0to10, s0to11,
543 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
544 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
545 d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11,
546 d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10,
547 s6to7, s6to8, s6to9, s6to10, s6to11,
548 d6m7to8m9, d6m7to10m11, d7m6to9m8, d7m6to11m10,
551 #define MAX1363_12X_CHANS(bits) { \
552 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
553 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
554 MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
555 MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
556 MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
557 MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
558 MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
559 MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
560 MAX1363_CHAN_U(8, _s8, 8, bits, NULL, 0), \
561 MAX1363_CHAN_U(9, _s9, 9, bits, NULL, 0), \
562 MAX1363_CHAN_U(10, _s10, 10, bits, NULL, 0), \
563 MAX1363_CHAN_U(11, _s11, 11, bits, NULL, 0), \
564 MAX1363_CHAN_B(0, 1, d0m1, 12, bits, NULL, 0), \
565 MAX1363_CHAN_B(2, 3, d2m3, 13, bits, NULL, 0), \
566 MAX1363_CHAN_B(4, 5, d4m5, 14, bits, NULL, 0), \
567 MAX1363_CHAN_B(6, 7, d6m7, 15, bits, NULL, 0), \
568 MAX1363_CHAN_B(8, 9, d8m9, 16, bits, NULL, 0), \
569 MAX1363_CHAN_B(10, 11, d10m11, 17, bits, NULL, 0), \
570 MAX1363_CHAN_B(1, 0, d1m0, 18, bits, NULL, 0), \
571 MAX1363_CHAN_B(3, 2, d3m2, 19, bits, NULL, 0), \
572 MAX1363_CHAN_B(5, 4, d5m4, 20, bits, NULL, 0), \
573 MAX1363_CHAN_B(7, 6, d7m6, 21, bits, NULL, 0), \
574 MAX1363_CHAN_B(9, 8, d9m8, 22, bits, NULL, 0), \
575 MAX1363_CHAN_B(11, 10, d11m10, 23, bits, NULL, 0), \
576 IIO_CHAN_SOFT_TIMESTAMP(24) \
578 static const struct iio_chan_spec max1038_channels[] = MAX1363_12X_CHANS(8);
579 static const struct iio_chan_spec max1138_channels[] = MAX1363_12X_CHANS(10);
580 static const struct iio_chan_spec max1238_channels[] = MAX1363_12X_CHANS(12);
582 static const enum max1363_modes max11607_mode_list[] = {
586 d0m1, d2m3, d1m0, d3m2,
587 d0m1to2m3, d1m0to3m2,
590 static const enum max1363_modes max11608_mode_list[] = {
591 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7,
592 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7,
594 d0m1, d2m3, d4m5, d6m7,
595 d1m0, d3m2, d5m4, d7m6,
596 d0m1to2m3, d0m1to4m5, d0m1to6m7,
597 d1m0to3m2, d1m0to5m4, d1m0to7m6,
600 #define MAX1363_8X_CHANS(bits) { \
601 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
602 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
603 MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
604 MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
605 MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
606 MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
607 MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
608 MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
609 MAX1363_CHAN_B(0, 1, d0m1, 8, bits, NULL, 0), \
610 MAX1363_CHAN_B(2, 3, d2m3, 9, bits, NULL, 0), \
611 MAX1363_CHAN_B(4, 5, d4m5, 10, bits, NULL, 0), \
612 MAX1363_CHAN_B(6, 7, d6m7, 11, bits, NULL, 0), \
613 MAX1363_CHAN_B(1, 0, d1m0, 12, bits, NULL, 0), \
614 MAX1363_CHAN_B(3, 2, d3m2, 13, bits, NULL, 0), \
615 MAX1363_CHAN_B(5, 4, d5m4, 14, bits, NULL, 0), \
616 MAX1363_CHAN_B(7, 6, d7m6, 15, bits, NULL, 0), \
617 IIO_CHAN_SOFT_TIMESTAMP(16) \
619 static const struct iio_chan_spec max11602_channels[] = MAX1363_8X_CHANS(8);
620 static const struct iio_chan_spec max11608_channels[] = MAX1363_8X_CHANS(10);
621 static const struct iio_chan_spec max11614_channels[] = MAX1363_8X_CHANS(12);
623 static const enum max1363_modes max11644_mode_list[] = {
624 _s0, _s1, s0to1, d0m1, d1m0,
627 #define MAX1363_2X_CHANS(bits) { \
628 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
629 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
630 MAX1363_CHAN_B(0, 1, d0m1, 2, bits, NULL, 0), \
631 MAX1363_CHAN_B(1, 0, d1m0, 3, bits, NULL, 0), \
632 IIO_CHAN_SOFT_TIMESTAMP(4) \
635 static const struct iio_chan_spec max11646_channels[] = MAX1363_2X_CHANS(10);
636 static const struct iio_chan_spec max11644_channels[] = MAX1363_2X_CHANS(12);
678 static const int max1363_monitor_speeds[] = { 133000, 665000, 33300, 16600,
679 8300, 4200, 2000, 1000 };
681 static ssize_t max1363_monitor_show_freq(struct device *dev,
682 struct device_attribute *attr,
685 struct max1363_state *st = iio_priv(dev_to_iio_dev(dev));
686 return sprintf(buf, "%d\n", max1363_monitor_speeds[st->monitor_speed]);
689 static ssize_t max1363_monitor_store_freq(struct device *dev,
690 struct device_attribute *attr,
694 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
695 struct max1363_state *st = iio_priv(indio_dev);
700 ret = kstrtoul(buf, 10, &val);
703 for (i = 0; i < ARRAY_SIZE(max1363_monitor_speeds); i++)
704 if (val == max1363_monitor_speeds[i]) {
711 mutex_lock(&indio_dev->mlock);
712 st->monitor_speed = i;
713 mutex_unlock(&indio_dev->mlock);
718 static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
719 max1363_monitor_show_freq,
720 max1363_monitor_store_freq);
722 static IIO_CONST_ATTR(sampling_frequency_available,
723 "133000 665000 33300 16600 8300 4200 2000 1000");
725 static int max1363_read_thresh(struct iio_dev *indio_dev,
726 const struct iio_chan_spec *chan, enum iio_event_type type,
727 enum iio_event_direction dir, enum iio_event_info info, int *val,
730 struct max1363_state *st = iio_priv(indio_dev);
731 if (dir == IIO_EV_DIR_FALLING)
732 *val = st->thresh_low[chan->channel];
734 *val = st->thresh_high[chan->channel];
738 static int max1363_write_thresh(struct iio_dev *indio_dev,
739 const struct iio_chan_spec *chan, enum iio_event_type type,
740 enum iio_event_direction dir, enum iio_event_info info, int val,
743 struct max1363_state *st = iio_priv(indio_dev);
744 /* make it handle signed correctly as well */
745 switch (st->chip_info->bits) {
757 case IIO_EV_DIR_FALLING:
758 st->thresh_low[chan->channel] = val;
760 case IIO_EV_DIR_RISING:
761 st->thresh_high[chan->channel] = val;
770 static const u64 max1363_event_codes[] = {
771 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
772 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
773 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
774 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
775 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
776 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
777 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
778 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
779 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
780 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
781 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
782 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
783 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
784 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
785 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
786 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
789 static irqreturn_t max1363_event_handler(int irq, void *private)
791 struct iio_dev *indio_dev = private;
792 struct max1363_state *st = iio_priv(indio_dev);
793 s64 timestamp = iio_get_time_ns(indio_dev);
794 unsigned long mask, loc;
796 u8 tx[2] = { st->setupbyte,
797 MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0 };
799 st->recv(st->client, &rx, 1);
801 for_each_set_bit(loc, &mask, 8)
802 iio_push_event(indio_dev, max1363_event_codes[loc], timestamp);
803 st->send(st->client, tx, 2);
808 static int max1363_read_event_config(struct iio_dev *indio_dev,
809 const struct iio_chan_spec *chan, enum iio_event_type type,
810 enum iio_event_direction dir)
812 struct max1363_state *st = iio_priv(indio_dev);
814 int number = chan->channel;
816 mutex_lock(&indio_dev->mlock);
817 if (dir == IIO_EV_DIR_FALLING)
818 val = (1 << number) & st->mask_low;
820 val = (1 << number) & st->mask_high;
821 mutex_unlock(&indio_dev->mlock);
826 static int max1363_monitor_mode_update(struct max1363_state *st, int enabled)
830 unsigned long numelements;
832 const long *modemask;
835 /* transition to buffered capture is not currently supported */
836 st->setupbyte &= ~MAX1363_SETUP_MONITOR_SETUP;
837 st->configbyte &= ~MAX1363_SCAN_MASK;
838 st->monitor_on = false;
839 return max1363_write_basic_config(st);
842 /* Ensure we are in the relevant mode */
843 st->setupbyte |= MAX1363_SETUP_MONITOR_SETUP;
844 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
846 | MAX1363_SE_DE_MASK);
847 st->configbyte |= MAX1363_CONFIG_SCAN_MONITOR_MODE;
848 if ((st->mask_low | st->mask_high) & 0x0F) {
849 st->configbyte |= max1363_mode_table[s0to3].conf;
850 modemask = max1363_mode_table[s0to3].modemask;
851 } else if ((st->mask_low | st->mask_high) & 0x30) {
852 st->configbyte |= max1363_mode_table[d0m1to2m3].conf;
853 modemask = max1363_mode_table[d0m1to2m3].modemask;
855 st->configbyte |= max1363_mode_table[d1m0to3m2].conf;
856 modemask = max1363_mode_table[d1m0to3m2].modemask;
858 numelements = bitmap_weight(modemask, MAX1363_MAX_CHANNELS);
859 len = 3 * numelements + 3;
860 tx_buf = kmalloc(len, GFP_KERNEL);
865 tx_buf[0] = st->configbyte;
866 tx_buf[1] = st->setupbyte;
867 tx_buf[2] = (st->monitor_speed << 1);
870 * So we need to do yet another bit of nefarious scan mode
871 * setup to match what we need.
873 for (j = 0; j < 8; j++)
874 if (test_bit(j, modemask)) {
875 /* Establish the mode is in the scan */
876 if (st->mask_low & (1 << j)) {
877 tx_buf[i] = (st->thresh_low[j] >> 4) & 0xFF;
878 tx_buf[i + 1] = (st->thresh_low[j] << 4) & 0xF0;
886 if (st->mask_high & (1 << j)) {
888 (st->thresh_high[j] >> 8) & 0x0F;
889 tx_buf[i + 2] = st->thresh_high[j] & 0xFF;
891 tx_buf[i + 1] |= 0x0F;
892 tx_buf[i + 2] = 0xFF;
894 tx_buf[i + 1] |= 0x07;
895 tx_buf[i + 2] = 0xFF;
901 ret = st->send(st->client, tx_buf, len);
910 * Now that we hopefully have sensible thresholds in place it is
911 * time to turn the interrupts on.
912 * It is unclear from the data sheet if this should be necessary
913 * (i.e. whether monitor mode setup is atomic) but it appears to
916 tx_buf[0] = st->setupbyte;
917 tx_buf[1] = MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0;
918 ret = st->send(st->client, tx_buf, 2);
926 st->monitor_on = true;
935 * To keep this manageable we always use one of 3 scan modes.
936 * Scan 0...3, 0-1,2-3 and 1-0,3-2
939 static inline int __max1363_check_event_mask(int thismask, int checkmask)
944 if (checkmask & ~0x0F) {
948 } else if (thismask < 6) {
949 if (checkmask & ~0x30) {
953 } else if (checkmask & ~0xC0)
959 static int max1363_write_event_config(struct iio_dev *indio_dev,
960 const struct iio_chan_spec *chan, enum iio_event_type type,
961 enum iio_event_direction dir, int state)
964 struct max1363_state *st = iio_priv(indio_dev);
966 int number = chan->channel;
968 mutex_lock(&indio_dev->mlock);
969 unifiedmask = st->mask_low | st->mask_high;
970 if (dir == IIO_EV_DIR_FALLING) {
973 st->mask_low &= ~(1 << number);
975 ret = __max1363_check_event_mask((1 << number),
979 st->mask_low |= (1 << number);
983 st->mask_high &= ~(1 << number);
985 ret = __max1363_check_event_mask((1 << number),
989 st->mask_high |= (1 << number);
993 max1363_monitor_mode_update(st, !!(st->mask_high | st->mask_low));
995 mutex_unlock(&indio_dev->mlock);
1001 * As with scan_elements, only certain sets of these can
1004 static struct attribute *max1363_event_attributes[] = {
1005 &iio_dev_attr_sampling_frequency.dev_attr.attr,
1006 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
1010 static struct attribute_group max1363_event_attribute_group = {
1011 .attrs = max1363_event_attributes,
1014 static int max1363_update_scan_mode(struct iio_dev *indio_dev,
1015 const unsigned long *scan_mask)
1017 struct max1363_state *st = iio_priv(indio_dev);
1020 * Need to figure out the current mode based upon the requested
1021 * scan mask in iio_dev
1023 st->current_mode = max1363_match_mode(scan_mask, st->chip_info);
1024 if (!st->current_mode)
1026 max1363_set_scan_mode(st);
1030 static const struct iio_info max1238_info = {
1031 .read_raw = &max1363_read_raw,
1032 .driver_module = THIS_MODULE,
1033 .update_scan_mode = &max1363_update_scan_mode,
1036 static const struct iio_info max1363_info = {
1037 .read_event_value = &max1363_read_thresh,
1038 .write_event_value = &max1363_write_thresh,
1039 .read_event_config = &max1363_read_event_config,
1040 .write_event_config = &max1363_write_event_config,
1041 .read_raw = &max1363_read_raw,
1042 .update_scan_mode = &max1363_update_scan_mode,
1043 .driver_module = THIS_MODULE,
1044 .event_attrs = &max1363_event_attribute_group,
1047 /* max1363 and max1368 tested - rest from data sheet */
1048 static const struct max1363_chip_info max1363_chip_info_tbl[] = {
1051 .int_vref_mv = 2048,
1052 .mode_list = max1363_mode_list,
1053 .num_modes = ARRAY_SIZE(max1363_mode_list),
1054 .default_mode = s0to3,
1055 .channels = max1361_channels,
1056 .num_channels = ARRAY_SIZE(max1361_channels),
1057 .info = &max1363_info,
1061 .int_vref_mv = 4096,
1062 .mode_list = max1363_mode_list,
1063 .num_modes = ARRAY_SIZE(max1363_mode_list),
1064 .default_mode = s0to3,
1065 .channels = max1361_channels,
1066 .num_channels = ARRAY_SIZE(max1361_channels),
1067 .info = &max1363_info,
1071 .int_vref_mv = 2048,
1072 .mode_list = max1363_mode_list,
1073 .num_modes = ARRAY_SIZE(max1363_mode_list),
1074 .default_mode = s0to3,
1075 .channels = max1363_channels,
1076 .num_channels = ARRAY_SIZE(max1363_channels),
1077 .info = &max1363_info,
1081 .int_vref_mv = 4096,
1082 .mode_list = max1363_mode_list,
1083 .num_modes = ARRAY_SIZE(max1363_mode_list),
1084 .default_mode = s0to3,
1085 .channels = max1363_channels,
1086 .num_channels = ARRAY_SIZE(max1363_channels),
1087 .info = &max1363_info,
1091 .int_vref_mv = 4096,
1092 .mode_list = max1236_mode_list,
1093 .num_modes = ARRAY_SIZE(max1236_mode_list),
1094 .default_mode = s0to3,
1095 .info = &max1238_info,
1096 .channels = max1036_channels,
1097 .num_channels = ARRAY_SIZE(max1036_channels),
1101 .int_vref_mv = 2048,
1102 .mode_list = max1236_mode_list,
1103 .num_modes = ARRAY_SIZE(max1236_mode_list),
1104 .default_mode = s0to3,
1105 .info = &max1238_info,
1106 .channels = max1036_channels,
1107 .num_channels = ARRAY_SIZE(max1036_channels),
1111 .int_vref_mv = 4096,
1112 .mode_list = max1238_mode_list,
1113 .num_modes = ARRAY_SIZE(max1238_mode_list),
1114 .default_mode = s0to11,
1115 .info = &max1238_info,
1116 .channels = max1038_channels,
1117 .num_channels = ARRAY_SIZE(max1038_channels),
1121 .int_vref_mv = 2048,
1122 .mode_list = max1238_mode_list,
1123 .num_modes = ARRAY_SIZE(max1238_mode_list),
1124 .default_mode = s0to11,
1125 .info = &max1238_info,
1126 .channels = max1038_channels,
1127 .num_channels = ARRAY_SIZE(max1038_channels),
1131 .int_vref_mv = 4096,
1132 .mode_list = max1236_mode_list,
1133 .num_modes = ARRAY_SIZE(max1236_mode_list),
1134 .default_mode = s0to3,
1135 .info = &max1238_info,
1136 .channels = max1136_channels,
1137 .num_channels = ARRAY_SIZE(max1136_channels),
1141 .int_vref_mv = 2048,
1142 .mode_list = max1236_mode_list,
1143 .num_modes = ARRAY_SIZE(max1236_mode_list),
1144 .default_mode = s0to3,
1145 .info = &max1238_info,
1146 .channels = max1136_channels,
1147 .num_channels = ARRAY_SIZE(max1136_channels),
1151 .int_vref_mv = 4096,
1152 .mode_list = max1238_mode_list,
1153 .num_modes = ARRAY_SIZE(max1238_mode_list),
1154 .default_mode = s0to11,
1155 .info = &max1238_info,
1156 .channels = max1138_channels,
1157 .num_channels = ARRAY_SIZE(max1138_channels),
1161 .int_vref_mv = 2048,
1162 .mode_list = max1238_mode_list,
1163 .num_modes = ARRAY_SIZE(max1238_mode_list),
1164 .default_mode = s0to11,
1165 .info = &max1238_info,
1166 .channels = max1138_channels,
1167 .num_channels = ARRAY_SIZE(max1138_channels),
1171 .int_vref_mv = 4096,
1172 .mode_list = max1236_mode_list,
1173 .num_modes = ARRAY_SIZE(max1236_mode_list),
1174 .default_mode = s0to3,
1175 .info = &max1238_info,
1176 .channels = max1236_channels,
1177 .num_channels = ARRAY_SIZE(max1236_channels),
1181 .int_vref_mv = 2048,
1182 .mode_list = max1236_mode_list,
1183 .num_modes = ARRAY_SIZE(max1236_mode_list),
1184 .default_mode = s0to3,
1185 .info = &max1238_info,
1186 .channels = max1236_channels,
1187 .num_channels = ARRAY_SIZE(max1236_channels),
1191 .int_vref_mv = 4096,
1192 .mode_list = max1238_mode_list,
1193 .num_modes = ARRAY_SIZE(max1238_mode_list),
1194 .default_mode = s0to11,
1195 .info = &max1238_info,
1196 .channels = max1238_channels,
1197 .num_channels = ARRAY_SIZE(max1238_channels),
1201 .int_vref_mv = 2048,
1202 .mode_list = max1238_mode_list,
1203 .num_modes = ARRAY_SIZE(max1238_mode_list),
1204 .default_mode = s0to11,
1205 .info = &max1238_info,
1206 .channels = max1238_channels,
1207 .num_channels = ARRAY_SIZE(max1238_channels),
1211 .int_vref_mv = 4096,
1212 .mode_list = max11607_mode_list,
1213 .num_modes = ARRAY_SIZE(max11607_mode_list),
1214 .default_mode = s0to3,
1215 .info = &max1238_info,
1216 .channels = max1036_channels,
1217 .num_channels = ARRAY_SIZE(max1036_channels),
1221 .int_vref_mv = 2048,
1222 .mode_list = max11607_mode_list,
1223 .num_modes = ARRAY_SIZE(max11607_mode_list),
1224 .default_mode = s0to3,
1225 .info = &max1238_info,
1226 .channels = max1036_channels,
1227 .num_channels = ARRAY_SIZE(max1036_channels),
1231 .int_vref_mv = 4096,
1232 .mode_list = max11608_mode_list,
1233 .num_modes = ARRAY_SIZE(max11608_mode_list),
1234 .default_mode = s0to7,
1235 .info = &max1238_info,
1236 .channels = max11602_channels,
1237 .num_channels = ARRAY_SIZE(max11602_channels),
1241 .int_vref_mv = 2048,
1242 .mode_list = max11608_mode_list,
1243 .num_modes = ARRAY_SIZE(max11608_mode_list),
1244 .default_mode = s0to7,
1245 .info = &max1238_info,
1246 .channels = max11602_channels,
1247 .num_channels = ARRAY_SIZE(max11602_channels),
1251 .int_vref_mv = 4096,
1252 .mode_list = max1238_mode_list,
1253 .num_modes = ARRAY_SIZE(max1238_mode_list),
1254 .default_mode = s0to11,
1255 .info = &max1238_info,
1256 .channels = max1038_channels,
1257 .num_channels = ARRAY_SIZE(max1038_channels),
1261 .int_vref_mv = 2048,
1262 .mode_list = max1238_mode_list,
1263 .num_modes = ARRAY_SIZE(max1238_mode_list),
1264 .default_mode = s0to11,
1265 .info = &max1238_info,
1266 .channels = max1038_channels,
1267 .num_channels = ARRAY_SIZE(max1038_channels),
1271 .int_vref_mv = 4096,
1272 .mode_list = max11607_mode_list,
1273 .num_modes = ARRAY_SIZE(max11607_mode_list),
1274 .default_mode = s0to3,
1275 .info = &max1238_info,
1276 .channels = max1136_channels,
1277 .num_channels = ARRAY_SIZE(max1136_channels),
1281 .int_vref_mv = 2048,
1282 .mode_list = max11607_mode_list,
1283 .num_modes = ARRAY_SIZE(max11607_mode_list),
1284 .default_mode = s0to3,
1285 .info = &max1238_info,
1286 .channels = max1136_channels,
1287 .num_channels = ARRAY_SIZE(max1136_channels),
1291 .int_vref_mv = 4096,
1292 .mode_list = max11608_mode_list,
1293 .num_modes = ARRAY_SIZE(max11608_mode_list),
1294 .default_mode = s0to7,
1295 .info = &max1238_info,
1296 .channels = max11608_channels,
1297 .num_channels = ARRAY_SIZE(max11608_channels),
1301 .int_vref_mv = 2048,
1302 .mode_list = max11608_mode_list,
1303 .num_modes = ARRAY_SIZE(max11608_mode_list),
1304 .default_mode = s0to7,
1305 .info = &max1238_info,
1306 .channels = max11608_channels,
1307 .num_channels = ARRAY_SIZE(max11608_channels),
1311 .int_vref_mv = 4096,
1312 .mode_list = max1238_mode_list,
1313 .num_modes = ARRAY_SIZE(max1238_mode_list),
1314 .default_mode = s0to11,
1315 .info = &max1238_info,
1316 .channels = max1138_channels,
1317 .num_channels = ARRAY_SIZE(max1138_channels),
1321 .int_vref_mv = 2048,
1322 .mode_list = max1238_mode_list,
1323 .num_modes = ARRAY_SIZE(max1238_mode_list),
1324 .default_mode = s0to11,
1325 .info = &max1238_info,
1326 .channels = max1138_channels,
1327 .num_channels = ARRAY_SIZE(max1138_channels),
1331 .int_vref_mv = 4096,
1332 .mode_list = max11607_mode_list,
1333 .num_modes = ARRAY_SIZE(max11607_mode_list),
1334 .default_mode = s0to3,
1335 .info = &max1238_info,
1336 .channels = max1363_channels,
1337 .num_channels = ARRAY_SIZE(max1363_channels),
1341 .int_vref_mv = 2048,
1342 .mode_list = max11607_mode_list,
1343 .num_modes = ARRAY_SIZE(max11607_mode_list),
1344 .default_mode = s0to3,
1345 .info = &max1238_info,
1346 .channels = max1363_channels,
1347 .num_channels = ARRAY_SIZE(max1363_channels),
1351 .int_vref_mv = 4096,
1352 .mode_list = max11608_mode_list,
1353 .num_modes = ARRAY_SIZE(max11608_mode_list),
1354 .default_mode = s0to7,
1355 .info = &max1238_info,
1356 .channels = max11614_channels,
1357 .num_channels = ARRAY_SIZE(max11614_channels),
1361 .int_vref_mv = 2048,
1362 .mode_list = max11608_mode_list,
1363 .num_modes = ARRAY_SIZE(max11608_mode_list),
1364 .default_mode = s0to7,
1365 .info = &max1238_info,
1366 .channels = max11614_channels,
1367 .num_channels = ARRAY_SIZE(max11614_channels),
1371 .int_vref_mv = 4096,
1372 .mode_list = max1238_mode_list,
1373 .num_modes = ARRAY_SIZE(max1238_mode_list),
1374 .default_mode = s0to11,
1375 .info = &max1238_info,
1376 .channels = max1238_channels,
1377 .num_channels = ARRAY_SIZE(max1238_channels),
1381 .int_vref_mv = 2048,
1382 .mode_list = max1238_mode_list,
1383 .num_modes = ARRAY_SIZE(max1238_mode_list),
1384 .default_mode = s0to11,
1385 .info = &max1238_info,
1386 .channels = max1238_channels,
1387 .num_channels = ARRAY_SIZE(max1238_channels),
1391 .int_vref_mv = 4096,
1392 .mode_list = max11644_mode_list,
1393 .num_modes = ARRAY_SIZE(max11644_mode_list),
1394 .default_mode = s0to1,
1395 .info = &max1238_info,
1396 .channels = max11644_channels,
1397 .num_channels = ARRAY_SIZE(max11644_channels),
1401 .int_vref_mv = 2048,
1402 .mode_list = max11644_mode_list,
1403 .num_modes = ARRAY_SIZE(max11644_mode_list),
1404 .default_mode = s0to1,
1405 .info = &max1238_info,
1406 .channels = max11644_channels,
1407 .num_channels = ARRAY_SIZE(max11644_channels),
1411 .int_vref_mv = 4096,
1412 .mode_list = max11644_mode_list,
1413 .num_modes = ARRAY_SIZE(max11644_mode_list),
1414 .default_mode = s0to1,
1415 .info = &max1238_info,
1416 .channels = max11646_channels,
1417 .num_channels = ARRAY_SIZE(max11646_channels),
1421 .int_vref_mv = 2048,
1422 .mode_list = max11644_mode_list,
1423 .num_modes = ARRAY_SIZE(max11644_mode_list),
1424 .default_mode = s0to1,
1425 .info = &max1238_info,
1426 .channels = max11646_channels,
1427 .num_channels = ARRAY_SIZE(max11646_channels),
1431 static int max1363_initial_setup(struct max1363_state *st)
1433 st->setupbyte = MAX1363_SETUP_INT_CLOCK
1434 | MAX1363_SETUP_UNIPOLAR
1435 | MAX1363_SETUP_NORESET;
1438 st->setupbyte |= MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF;
1440 st->setupbyte |= MAX1363_SETUP_POWER_UP_INT_REF
1441 | MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT;
1443 /* Set scan mode writes the config anyway so wait until then */
1444 st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
1445 st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
1446 st->configbyte = MAX1363_CONFIG_BYTE(st->configbyte);
1448 return max1363_set_scan_mode(st);
1451 static int max1363_alloc_scan_masks(struct iio_dev *indio_dev)
1453 struct max1363_state *st = iio_priv(indio_dev);
1454 unsigned long *masks;
1457 masks = devm_kzalloc(&indio_dev->dev,
1458 BITS_TO_LONGS(MAX1363_MAX_CHANNELS) * sizeof(long) *
1459 (st->chip_info->num_modes + 1), GFP_KERNEL);
1463 for (i = 0; i < st->chip_info->num_modes; i++)
1464 bitmap_copy(masks + BITS_TO_LONGS(MAX1363_MAX_CHANNELS)*i,
1465 max1363_mode_table[st->chip_info->mode_list[i]]
1466 .modemask, MAX1363_MAX_CHANNELS);
1468 indio_dev->available_scan_masks = masks;
1473 static irqreturn_t max1363_trigger_handler(int irq, void *p)
1475 struct iio_poll_func *pf = p;
1476 struct iio_dev *indio_dev = pf->indio_dev;
1477 struct max1363_state *st = iio_priv(indio_dev);
1481 unsigned long numvals = bitmap_weight(st->current_mode->modemask,
1482 MAX1363_MAX_CHANNELS);
1484 /* Ensure the timestamp is 8 byte aligned */
1485 if (st->chip_info->bits != 8)
1489 if (indio_dev->scan_timestamp) {
1490 d_size += sizeof(s64);
1491 if (d_size % sizeof(s64))
1492 d_size += sizeof(s64) - (d_size % sizeof(s64));
1494 /* Monitor mode prevents reading. Whilst not currently implemented
1495 * might as well have this test in here in the meantime as it does
1501 rxbuf = kmalloc(d_size, GFP_KERNEL);
1504 if (st->chip_info->bits != 8)
1505 b_sent = st->recv(st->client, rxbuf, numvals * 2);
1507 b_sent = st->recv(st->client, rxbuf, numvals);
1511 iio_push_to_buffers_with_timestamp(indio_dev, rxbuf,
1512 iio_get_time_ns(indio_dev));
1517 iio_trigger_notify_done(indio_dev->trig);
1524 #define MAX1363_COMPATIBLE(of_compatible, cfg) { \
1525 .compatible = of_compatible, \
1526 .data = &max1363_chip_info_tbl[cfg], \
1529 static const struct of_device_id max1363_of_match[] = {
1530 MAX1363_COMPATIBLE("maxim,max1361", max1361),
1531 MAX1363_COMPATIBLE("maxim,max1362", max1362),
1532 MAX1363_COMPATIBLE("maxim,max1363", max1363),
1533 MAX1363_COMPATIBLE("maxim,max1364", max1364),
1534 MAX1363_COMPATIBLE("maxim,max1036", max1036),
1535 MAX1363_COMPATIBLE("maxim,max1037", max1037),
1536 MAX1363_COMPATIBLE("maxim,max1038", max1038),
1537 MAX1363_COMPATIBLE("maxim,max1039", max1039),
1538 MAX1363_COMPATIBLE("maxim,max1136", max1136),
1539 MAX1363_COMPATIBLE("maxim,max1137", max1137),
1540 MAX1363_COMPATIBLE("maxim,max1138", max1138),
1541 MAX1363_COMPATIBLE("maxim,max1139", max1139),
1542 MAX1363_COMPATIBLE("maxim,max1236", max1236),
1543 MAX1363_COMPATIBLE("maxim,max1237", max1237),
1544 MAX1363_COMPATIBLE("maxim,max1238", max1238),
1545 MAX1363_COMPATIBLE("maxim,max1239", max1239),
1546 MAX1363_COMPATIBLE("maxim,max11600", max11600),
1547 MAX1363_COMPATIBLE("maxim,max11601", max11601),
1548 MAX1363_COMPATIBLE("maxim,max11602", max11602),
1549 MAX1363_COMPATIBLE("maxim,max11603", max11603),
1550 MAX1363_COMPATIBLE("maxim,max11604", max11604),
1551 MAX1363_COMPATIBLE("maxim,max11605", max11605),
1552 MAX1363_COMPATIBLE("maxim,max11606", max11606),
1553 MAX1363_COMPATIBLE("maxim,max11607", max11607),
1554 MAX1363_COMPATIBLE("maxim,max11608", max11608),
1555 MAX1363_COMPATIBLE("maxim,max11609", max11609),
1556 MAX1363_COMPATIBLE("maxim,max11610", max11610),
1557 MAX1363_COMPATIBLE("maxim,max11611", max11611),
1558 MAX1363_COMPATIBLE("maxim,max11612", max11612),
1559 MAX1363_COMPATIBLE("maxim,max11613", max11613),
1560 MAX1363_COMPATIBLE("maxim,max11614", max11614),
1561 MAX1363_COMPATIBLE("maxim,max11615", max11615),
1562 MAX1363_COMPATIBLE("maxim,max11616", max11616),
1563 MAX1363_COMPATIBLE("maxim,max11617", max11617),
1564 MAX1363_COMPATIBLE("maxim,max11644", max11644),
1565 MAX1363_COMPATIBLE("maxim,max11645", max11645),
1566 MAX1363_COMPATIBLE("maxim,max11646", max11646),
1567 MAX1363_COMPATIBLE("maxim,max11647", max11647),
1572 static int max1363_probe(struct i2c_client *client,
1573 const struct i2c_device_id *id)
1576 struct max1363_state *st;
1577 struct iio_dev *indio_dev;
1578 struct regulator *vref;
1579 const struct of_device_id *match;
1581 indio_dev = devm_iio_device_alloc(&client->dev,
1582 sizeof(struct max1363_state));
1586 indio_dev->dev.of_node = client->dev.of_node;
1587 ret = iio_map_array_register(indio_dev, client->dev.platform_data);
1591 st = iio_priv(indio_dev);
1593 st->reg = devm_regulator_get(&client->dev, "vcc");
1594 if (IS_ERR(st->reg)) {
1595 ret = PTR_ERR(st->reg);
1596 goto error_unregister_map;
1599 ret = regulator_enable(st->reg);
1601 goto error_unregister_map;
1603 /* this is only used for device removal purposes */
1604 i2c_set_clientdata(client, indio_dev);
1606 match = of_match_device(of_match_ptr(max1363_of_match),
1609 st->chip_info = of_device_get_match_data(&client->dev);
1611 st->chip_info = &max1363_chip_info_tbl[id->driver_data];
1612 st->client = client;
1614 st->vref_uv = st->chip_info->int_vref_mv * 1000;
1615 vref = devm_regulator_get_optional(&client->dev, "vref");
1616 if (!IS_ERR(vref)) {
1619 ret = regulator_enable(vref);
1621 goto error_disable_reg;
1623 vref_uv = regulator_get_voltage(vref);
1626 goto error_disable_reg;
1628 st->vref_uv = vref_uv;
1631 if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1632 st->send = i2c_master_send;
1633 st->recv = i2c_master_recv;
1634 } else if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE)
1635 && st->chip_info->bits == 8) {
1636 st->send = max1363_smbus_send;
1637 st->recv = max1363_smbus_recv;
1640 goto error_disable_reg;
1643 ret = max1363_alloc_scan_masks(indio_dev);
1645 goto error_disable_reg;
1647 /* Establish that the iio_dev is a child of the i2c device */
1648 indio_dev->dev.parent = &client->dev;
1649 indio_dev->dev.of_node = client->dev.of_node;
1650 indio_dev->name = id->name;
1651 indio_dev->channels = st->chip_info->channels;
1652 indio_dev->num_channels = st->chip_info->num_channels;
1653 indio_dev->info = st->chip_info->info;
1654 indio_dev->modes = INDIO_DIRECT_MODE;
1655 ret = max1363_initial_setup(st);
1657 goto error_disable_reg;
1659 ret = iio_triggered_buffer_setup(indio_dev, NULL,
1660 &max1363_trigger_handler, NULL);
1662 goto error_disable_reg;
1665 ret = devm_request_threaded_irq(&client->dev, st->client->irq,
1667 &max1363_event_handler,
1668 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
1673 goto error_uninit_buffer;
1676 ret = iio_device_register(indio_dev);
1678 goto error_uninit_buffer;
1682 error_uninit_buffer:
1683 iio_triggered_buffer_cleanup(indio_dev);
1686 regulator_disable(st->vref);
1687 regulator_disable(st->reg);
1688 error_unregister_map:
1689 iio_map_array_unregister(indio_dev);
1693 static int max1363_remove(struct i2c_client *client)
1695 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1696 struct max1363_state *st = iio_priv(indio_dev);
1698 iio_device_unregister(indio_dev);
1699 iio_triggered_buffer_cleanup(indio_dev);
1701 regulator_disable(st->vref);
1702 regulator_disable(st->reg);
1703 iio_map_array_unregister(indio_dev);
1708 static const struct i2c_device_id max1363_id[] = {
1709 { "max1361", max1361 },
1710 { "max1362", max1362 },
1711 { "max1363", max1363 },
1712 { "max1364", max1364 },
1713 { "max1036", max1036 },
1714 { "max1037", max1037 },
1715 { "max1038", max1038 },
1716 { "max1039", max1039 },
1717 { "max1136", max1136 },
1718 { "max1137", max1137 },
1719 { "max1138", max1138 },
1720 { "max1139", max1139 },
1721 { "max1236", max1236 },
1722 { "max1237", max1237 },
1723 { "max1238", max1238 },
1724 { "max1239", max1239 },
1725 { "max11600", max11600 },
1726 { "max11601", max11601 },
1727 { "max11602", max11602 },
1728 { "max11603", max11603 },
1729 { "max11604", max11604 },
1730 { "max11605", max11605 },
1731 { "max11606", max11606 },
1732 { "max11607", max11607 },
1733 { "max11608", max11608 },
1734 { "max11609", max11609 },
1735 { "max11610", max11610 },
1736 { "max11611", max11611 },
1737 { "max11612", max11612 },
1738 { "max11613", max11613 },
1739 { "max11614", max11614 },
1740 { "max11615", max11615 },
1741 { "max11616", max11616 },
1742 { "max11617", max11617 },
1743 { "max11644", max11644 },
1744 { "max11645", max11645 },
1745 { "max11646", max11646 },
1746 { "max11647", max11647 },
1750 MODULE_DEVICE_TABLE(i2c, max1363_id);
1752 static struct i2c_driver max1363_driver = {
1755 .of_match_table = of_match_ptr(max1363_of_match),
1757 .probe = max1363_probe,
1758 .remove = max1363_remove,
1759 .id_table = max1363_id,
1761 module_i2c_driver(max1363_driver);
1763 MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
1764 MODULE_DESCRIPTION("Maxim 1363 ADC");
1765 MODULE_LICENSE("GPL v2");