Loading...
1// SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * iio/adc/max1363.c
4 * Copyright (C) 2008-2010 Jonathan Cameron
5 *
6 * based on linux/drivers/i2c/chips/max123x
7 * Copyright (C) 2002-2004 Stefan Eletzhofer
8 *
9 * based on linux/drivers/acron/char/pcf8583.c
10 * Copyright (C) 2000 Russell King
11 *
12 * Driver for max1363 and similar chips.
13 */
14
15#include <linux/interrupt.h>
16#include <linux/device.h>
17#include <linux/kernel.h>
18#include <linux/sysfs.h>
19#include <linux/list.h>
20#include <linux/i2c.h>
21#include <linux/regulator/consumer.h>
22#include <linux/slab.h>
23#include <linux/err.h>
24#include <linux/module.h>
25#include <linux/of.h>
26#include <linux/of_device.h>
27
28#include <linux/iio/iio.h>
29#include <linux/iio/sysfs.h>
30#include <linux/iio/events.h>
31#include <linux/iio/buffer.h>
32#include <linux/iio/driver.h>
33#include <linux/iio/kfifo_buf.h>
34#include <linux/iio/trigger_consumer.h>
35#include <linux/iio/triggered_buffer.h>
36
37#define MAX1363_SETUP_BYTE(a) ((a) | 0x80)
38
39/* There is a fair bit more defined here than currently
40 * used, but the intention is to support everything these
41 * chips do in the long run */
42
43/* see data sheets */
44/* max1363 and max1236, max1237, max1238, max1239 */
45#define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD 0x00
46#define MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF 0x20
47#define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT 0x40
48#define MAX1363_SETUP_AIN3_IS_REF_REF_IS_INT 0x60
49#define MAX1363_SETUP_POWER_UP_INT_REF 0x10
50#define MAX1363_SETUP_POWER_DOWN_INT_REF 0x00
51
52/* think about including max11600 etc - more settings */
53#define MAX1363_SETUP_EXT_CLOCK 0x08
54#define MAX1363_SETUP_INT_CLOCK 0x00
55#define MAX1363_SETUP_UNIPOLAR 0x00
56#define MAX1363_SETUP_BIPOLAR 0x04
57#define MAX1363_SETUP_RESET 0x00
58#define MAX1363_SETUP_NORESET 0x02
59/* max1363 only - though don't care on others.
60 * For now monitor modes are not implemented as the relevant
61 * line is not connected on my test board.
62 * The definitions are here as I intend to add this soon.
63 */
64#define MAX1363_SETUP_MONITOR_SETUP 0x01
65
66/* Specific to the max1363 */
67#define MAX1363_MON_RESET_CHAN(a) (1 << ((a) + 4))
68#define MAX1363_MON_INT_ENABLE 0x01
69
70/* defined for readability reasons */
71/* All chips */
72#define MAX1363_CONFIG_BYTE(a) ((a))
73
74#define MAX1363_CONFIG_SE 0x01
75#define MAX1363_CONFIG_DE 0x00
76#define MAX1363_CONFIG_SCAN_TO_CS 0x00
77#define MAX1363_CONFIG_SCAN_SINGLE_8 0x20
78#define MAX1363_CONFIG_SCAN_MONITOR_MODE 0x40
79#define MAX1363_CONFIG_SCAN_SINGLE_1 0x60
80/* max123{6-9} only */
81#define MAX1236_SCAN_MID_TO_CHANNEL 0x40
82
83/* max1363 only - merely part of channel selects or don't care for others */
84#define MAX1363_CONFIG_EN_MON_MODE_READ 0x18
85
86#define MAX1363_CHANNEL_SEL(a) ((a) << 1)
87
88/* max1363 strictly 0x06 - but doesn't matter */
89#define MAX1363_CHANNEL_SEL_MASK 0x1E
90#define MAX1363_SCAN_MASK 0x60
91#define MAX1363_SE_DE_MASK 0x01
92
93#define MAX1363_MAX_CHANNELS 25
94/**
95 * struct max1363_mode - scan mode information
96 * @conf: The corresponding value of the configuration register
97 * @modemask: Bit mask corresponding to channels enabled in this mode
98 */
99struct max1363_mode {
100 int8_t conf;
101 DECLARE_BITMAP(modemask, MAX1363_MAX_CHANNELS);
102};
103
104/* This must be maintained along side the max1363_mode_table in max1363_core */
105enum max1363_modes {
106 /* Single read of a single channel */
107 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
108 /* Differential single read */
109 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
110 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
111 /* Scan to channel and mid to channel where overlapping */
112 s0to1, s0to2, s2to3, s0to3, s0to4, s0to5, s0to6,
113 s6to7, s0to7, s6to8, s0to8, s6to9,
114 s0to9, s6to10, s0to10, s6to11, s0to11,
115 /* Differential scan to channel and mid to channel where overlapping */
116 d0m1to2m3, d0m1to4m5, d0m1to6m7, d6m7to8m9,
117 d0m1to8m9, d6m7to10m11, d0m1to10m11, d1m0to3m2,
118 d1m0to5m4, d1m0to7m6, d7m6to9m8, d1m0to9m8,
119 d7m6to11m10, d1m0to11m10,
120};
121
122/**
123 * struct max1363_chip_info - chip specifc information
124 * @info: iio core function callbacks structure
125 * @channels: channel specification
126 * @num_channels: number of channels
127 * @mode_list: array of available scan modes
128 * @default_mode: the scan mode in which the chip starts up
129 * @int_vref_mv: the internal reference voltage
130 * @num_modes: number of modes
131 * @bits: accuracy of the adc in bits
132 */
133struct max1363_chip_info {
134 const struct iio_info *info;
135 const struct iio_chan_spec *channels;
136 int num_channels;
137 const enum max1363_modes *mode_list;
138 enum max1363_modes default_mode;
139 u16 int_vref_mv;
140 u8 num_modes;
141 u8 bits;
142};
143
144/**
145 * struct max1363_state - driver instance specific data
146 * @client: i2c_client
147 * @setupbyte: cache of current device setup byte
148 * @configbyte: cache of current device config byte
149 * @chip_info: chip model specific constants, available modes, etc.
150 * @current_mode: the scan mode of this chip
151 * @requestedmask: a valid requested set of channels
152 * @reg: supply regulator
153 * @monitor_on: whether monitor mode is enabled
154 * @monitor_speed: parameter corresponding to device monitor speed setting
155 * @mask_high: bitmask for enabled high thresholds
156 * @mask_low: bitmask for enabled low thresholds
157 * @thresh_high: high threshold values
158 * @thresh_low: low threshold values
159 * @vref: Reference voltage regulator
160 * @vref_uv: Actual (external or internal) reference voltage
161 * @send: function used to send data to the chip
162 * @recv: function used to receive data from the chip
163 */
164struct max1363_state {
165 struct i2c_client *client;
166 u8 setupbyte;
167 u8 configbyte;
168 const struct max1363_chip_info *chip_info;
169 const struct max1363_mode *current_mode;
170 u32 requestedmask;
171 struct regulator *reg;
172
173 /* Using monitor modes and buffer at the same time is
174 currently not supported */
175 bool monitor_on;
176 unsigned int monitor_speed:3;
177 u8 mask_high;
178 u8 mask_low;
179 /* 4x unipolar first then the fours bipolar ones */
180 s16 thresh_high[8];
181 s16 thresh_low[8];
182 struct regulator *vref;
183 u32 vref_uv;
184 int (*send)(const struct i2c_client *client,
185 const char *buf, int count);
186 int (*recv)(const struct i2c_client *client,
187 char *buf, int count);
188};
189
190#define MAX1363_MODE_SINGLE(_num, _mask) { \
191 .conf = MAX1363_CHANNEL_SEL(_num) \
192 | MAX1363_CONFIG_SCAN_SINGLE_1 \
193 | MAX1363_CONFIG_SE, \
194 .modemask[0] = _mask, \
195 }
196
197#define MAX1363_MODE_SCAN_TO_CHANNEL(_num, _mask) { \
198 .conf = MAX1363_CHANNEL_SEL(_num) \
199 | MAX1363_CONFIG_SCAN_TO_CS \
200 | MAX1363_CONFIG_SE, \
201 .modemask[0] = _mask, \
202 }
203
204/* note not available for max1363 hence naming */
205#define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num, _mask) { \
206 .conf = MAX1363_CHANNEL_SEL(_num) \
207 | MAX1236_SCAN_MID_TO_CHANNEL \
208 | MAX1363_CONFIG_SE, \
209 .modemask[0] = _mask \
210}
211
212#define MAX1363_MODE_DIFF_SINGLE(_nump, _numm, _mask) { \
213 .conf = MAX1363_CHANNEL_SEL(_nump) \
214 | MAX1363_CONFIG_SCAN_SINGLE_1 \
215 | MAX1363_CONFIG_DE, \
216 .modemask[0] = _mask \
217 }
218
219/* Can't think how to automate naming so specify for now */
220#define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(_num, _numvals, _mask) { \
221 .conf = MAX1363_CHANNEL_SEL(_num) \
222 | MAX1363_CONFIG_SCAN_TO_CS \
223 | MAX1363_CONFIG_DE, \
224 .modemask[0] = _mask \
225 }
226
227/* note only available for max1363 hence naming */
228#define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(_num, _numvals, _mask) { \
229 .conf = MAX1363_CHANNEL_SEL(_num) \
230 | MAX1236_SCAN_MID_TO_CHANNEL \
231 | MAX1363_CONFIG_SE, \
232 .modemask[0] = _mask \
233}
234
235static const struct max1363_mode max1363_mode_table[] = {
236 /* All of the single channel options first */
237 MAX1363_MODE_SINGLE(0, 1 << 0),
238 MAX1363_MODE_SINGLE(1, 1 << 1),
239 MAX1363_MODE_SINGLE(2, 1 << 2),
240 MAX1363_MODE_SINGLE(3, 1 << 3),
241 MAX1363_MODE_SINGLE(4, 1 << 4),
242 MAX1363_MODE_SINGLE(5, 1 << 5),
243 MAX1363_MODE_SINGLE(6, 1 << 6),
244 MAX1363_MODE_SINGLE(7, 1 << 7),
245 MAX1363_MODE_SINGLE(8, 1 << 8),
246 MAX1363_MODE_SINGLE(9, 1 << 9),
247 MAX1363_MODE_SINGLE(10, 1 << 10),
248 MAX1363_MODE_SINGLE(11, 1 << 11),
249
250 MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12),
251 MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13),
252 MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14),
253 MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15),
254 MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16),
255 MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17),
256 MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18),
257 MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19),
258 MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20),
259 MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21),
260 MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22),
261 MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23),
262
263 /* The multichannel scans next */
264 MAX1363_MODE_SCAN_TO_CHANNEL(1, 0x003),
265 MAX1363_MODE_SCAN_TO_CHANNEL(2, 0x007),
266 MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3, 0x00C),
267 MAX1363_MODE_SCAN_TO_CHANNEL(3, 0x00F),
268 MAX1363_MODE_SCAN_TO_CHANNEL(4, 0x01F),
269 MAX1363_MODE_SCAN_TO_CHANNEL(5, 0x03F),
270 MAX1363_MODE_SCAN_TO_CHANNEL(6, 0x07F),
271 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7, 0x0C0),
272 MAX1363_MODE_SCAN_TO_CHANNEL(7, 0x0FF),
273 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8, 0x1C0),
274 MAX1363_MODE_SCAN_TO_CHANNEL(8, 0x1FF),
275 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9, 0x3C0),
276 MAX1363_MODE_SCAN_TO_CHANNEL(9, 0x3FF),
277 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10, 0x7C0),
278 MAX1363_MODE_SCAN_TO_CHANNEL(10, 0x7FF),
279 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11, 0xFC0),
280 MAX1363_MODE_SCAN_TO_CHANNEL(11, 0xFFF),
281
282 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(2, 2, 0x003000),
283 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(4, 3, 0x007000),
284 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(6, 4, 0x00F000),
285 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(8, 2, 0x018000),
286 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(8, 5, 0x01F000),
287 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(10, 3, 0x038000),
288 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(10, 6, 0x3F000),
289 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(3, 2, 0x0C0000),
290 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(5, 3, 0x1C0000),
291 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(7, 4, 0x3C0000),
292 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(9, 2, 0x600000),
293 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(9, 5, 0x7C0000),
294 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(11, 3, 0xE00000),
295 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(11, 6, 0xFC0000),
296};
297
298static const struct max1363_mode
299*max1363_match_mode(const unsigned long *mask,
300 const struct max1363_chip_info *ci)
301{
302 int i;
303 if (mask)
304 for (i = 0; i < ci->num_modes; i++)
305 if (bitmap_subset(mask,
306 max1363_mode_table[ci->mode_list[i]].
307 modemask,
308 MAX1363_MAX_CHANNELS))
309 return &max1363_mode_table[ci->mode_list[i]];
310 return NULL;
311}
312
313static int max1363_smbus_send(const struct i2c_client *client, const char *buf,
314 int count)
315{
316 int i, err;
317
318 for (i = err = 0; err == 0 && i < count; ++i)
319 err = i2c_smbus_write_byte(client, buf[i]);
320
321 return err ? err : count;
322}
323
324static int max1363_smbus_recv(const struct i2c_client *client, char *buf,
325 int count)
326{
327 int i, ret;
328
329 for (i = 0; i < count; ++i) {
330 ret = i2c_smbus_read_byte(client);
331 if (ret < 0)
332 return ret;
333 buf[i] = ret;
334 }
335
336 return count;
337}
338
339static int max1363_write_basic_config(struct max1363_state *st)
340{
341 u8 tx_buf[2] = { st->setupbyte, st->configbyte };
342
343 return st->send(st->client, tx_buf, 2);
344}
345
346static int max1363_set_scan_mode(struct max1363_state *st)
347{
348 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
349 | MAX1363_SCAN_MASK
350 | MAX1363_SE_DE_MASK);
351 st->configbyte |= st->current_mode->conf;
352
353 return max1363_write_basic_config(st);
354}
355
356static int max1363_read_single_chan(struct iio_dev *indio_dev,
357 struct iio_chan_spec const *chan,
358 int *val,
359 long m)
360{
361 int ret = 0;
362 s32 data;
363 u8 rxbuf[2];
364 struct max1363_state *st = iio_priv(indio_dev);
365 struct i2c_client *client = st->client;
366
367 mutex_lock(&indio_dev->mlock);
368 /*
369 * If monitor mode is enabled, the method for reading a single
370 * channel will have to be rather different and has not yet
371 * been implemented.
372 *
373 * Also, cannot read directly if buffered capture enabled.
374 */
375 if (st->monitor_on || iio_buffer_enabled(indio_dev)) {
376 ret = -EBUSY;
377 goto error_ret;
378 }
379
380 /* Check to see if current scan mode is correct */
381 if (st->current_mode != &max1363_mode_table[chan->address]) {
382 /* Update scan mode if needed */
383 st->current_mode = &max1363_mode_table[chan->address];
384 ret = max1363_set_scan_mode(st);
385 if (ret < 0)
386 goto error_ret;
387 }
388 if (st->chip_info->bits != 8) {
389 /* Get reading */
390 data = st->recv(client, rxbuf, 2);
391 if (data < 0) {
392 ret = data;
393 goto error_ret;
394 }
395 data = (rxbuf[1] | rxbuf[0] << 8) &
396 ((1 << st->chip_info->bits) - 1);
397 } else {
398 /* Get reading */
399 data = st->recv(client, rxbuf, 1);
400 if (data < 0) {
401 ret = data;
402 goto error_ret;
403 }
404 data = rxbuf[0];
405 }
406 *val = data;
407error_ret:
408 mutex_unlock(&indio_dev->mlock);
409 return ret;
410
411}
412
413static int max1363_read_raw(struct iio_dev *indio_dev,
414 struct iio_chan_spec const *chan,
415 int *val,
416 int *val2,
417 long m)
418{
419 struct max1363_state *st = iio_priv(indio_dev);
420 int ret;
421
422 switch (m) {
423 case IIO_CHAN_INFO_RAW:
424 ret = max1363_read_single_chan(indio_dev, chan, val, m);
425 if (ret < 0)
426 return ret;
427 return IIO_VAL_INT;
428 case IIO_CHAN_INFO_SCALE:
429 *val = st->vref_uv / 1000;
430 *val2 = st->chip_info->bits;
431 return IIO_VAL_FRACTIONAL_LOG2;
432 default:
433 return -EINVAL;
434 }
435 return 0;
436}
437
438/* Applies to max1363 */
439static const enum max1363_modes max1363_mode_list[] = {
440 _s0, _s1, _s2, _s3,
441 s0to1, s0to2, s0to3,
442 d0m1, d2m3, d1m0, d3m2,
443 d0m1to2m3, d1m0to3m2,
444};
445
446static const struct iio_event_spec max1363_events[] = {
447 {
448 .type = IIO_EV_TYPE_THRESH,
449 .dir = IIO_EV_DIR_RISING,
450 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
451 BIT(IIO_EV_INFO_ENABLE),
452 }, {
453 .type = IIO_EV_TYPE_THRESH,
454 .dir = IIO_EV_DIR_FALLING,
455 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
456 BIT(IIO_EV_INFO_ENABLE),
457 },
458};
459
460#define MAX1363_CHAN_U(num, addr, si, bits, ev_spec, num_ev_spec) \
461 { \
462 .type = IIO_VOLTAGE, \
463 .indexed = 1, \
464 .channel = num, \
465 .address = addr, \
466 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
467 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
468 .datasheet_name = "AIN"#num, \
469 .scan_type = { \
470 .sign = 'u', \
471 .realbits = bits, \
472 .storagebits = (bits > 8) ? 16 : 8, \
473 .endianness = IIO_BE, \
474 }, \
475 .scan_index = si, \
476 .event_spec = ev_spec, \
477 .num_event_specs = num_ev_spec, \
478 }
479
480/* bipolar channel */
481#define MAX1363_CHAN_B(num, num2, addr, si, bits, ev_spec, num_ev_spec) \
482 { \
483 .type = IIO_VOLTAGE, \
484 .differential = 1, \
485 .indexed = 1, \
486 .channel = num, \
487 .channel2 = num2, \
488 .address = addr, \
489 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
490 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
491 .datasheet_name = "AIN"#num"-AIN"#num2, \
492 .scan_type = { \
493 .sign = 's', \
494 .realbits = bits, \
495 .storagebits = (bits > 8) ? 16 : 8, \
496 .endianness = IIO_BE, \
497 }, \
498 .scan_index = si, \
499 .event_spec = ev_spec, \
500 .num_event_specs = num_ev_spec, \
501 }
502
503#define MAX1363_4X_CHANS(bits, ev_spec, num_ev_spec) { \
504 MAX1363_CHAN_U(0, _s0, 0, bits, ev_spec, num_ev_spec), \
505 MAX1363_CHAN_U(1, _s1, 1, bits, ev_spec, num_ev_spec), \
506 MAX1363_CHAN_U(2, _s2, 2, bits, ev_spec, num_ev_spec), \
507 MAX1363_CHAN_U(3, _s3, 3, bits, ev_spec, num_ev_spec), \
508 MAX1363_CHAN_B(0, 1, d0m1, 4, bits, ev_spec, num_ev_spec), \
509 MAX1363_CHAN_B(2, 3, d2m3, 5, bits, ev_spec, num_ev_spec), \
510 MAX1363_CHAN_B(1, 0, d1m0, 6, bits, ev_spec, num_ev_spec), \
511 MAX1363_CHAN_B(3, 2, d3m2, 7, bits, ev_spec, num_ev_spec), \
512 IIO_CHAN_SOFT_TIMESTAMP(8) \
513 }
514
515static const struct iio_chan_spec max1036_channels[] =
516 MAX1363_4X_CHANS(8, NULL, 0);
517static const struct iio_chan_spec max1136_channels[] =
518 MAX1363_4X_CHANS(10, NULL, 0);
519static const struct iio_chan_spec max1236_channels[] =
520 MAX1363_4X_CHANS(12, NULL, 0);
521static const struct iio_chan_spec max1361_channels[] =
522 MAX1363_4X_CHANS(10, max1363_events, ARRAY_SIZE(max1363_events));
523static const struct iio_chan_spec max1363_channels[] =
524 MAX1363_4X_CHANS(12, max1363_events, ARRAY_SIZE(max1363_events));
525
526/* Applies to max1236, max1237 */
527static const enum max1363_modes max1236_mode_list[] = {
528 _s0, _s1, _s2, _s3,
529 s0to1, s0to2, s0to3,
530 d0m1, d2m3, d1m0, d3m2,
531 d0m1to2m3, d1m0to3m2,
532 s2to3,
533};
534
535/* Applies to max1238, max1239 */
536static const enum max1363_modes max1238_mode_list[] = {
537 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
538 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6,
539 s0to7, s0to8, s0to9, s0to10, s0to11,
540 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
541 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
542 d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11,
543 d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10,
544 s6to7, s6to8, s6to9, s6to10, s6to11,
545 d6m7to8m9, d6m7to10m11, d7m6to9m8, d7m6to11m10,
546};
547
548#define MAX1363_12X_CHANS(bits) { \
549 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
550 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
551 MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
552 MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
553 MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
554 MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
555 MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
556 MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
557 MAX1363_CHAN_U(8, _s8, 8, bits, NULL, 0), \
558 MAX1363_CHAN_U(9, _s9, 9, bits, NULL, 0), \
559 MAX1363_CHAN_U(10, _s10, 10, bits, NULL, 0), \
560 MAX1363_CHAN_U(11, _s11, 11, bits, NULL, 0), \
561 MAX1363_CHAN_B(0, 1, d0m1, 12, bits, NULL, 0), \
562 MAX1363_CHAN_B(2, 3, d2m3, 13, bits, NULL, 0), \
563 MAX1363_CHAN_B(4, 5, d4m5, 14, bits, NULL, 0), \
564 MAX1363_CHAN_B(6, 7, d6m7, 15, bits, NULL, 0), \
565 MAX1363_CHAN_B(8, 9, d8m9, 16, bits, NULL, 0), \
566 MAX1363_CHAN_B(10, 11, d10m11, 17, bits, NULL, 0), \
567 MAX1363_CHAN_B(1, 0, d1m0, 18, bits, NULL, 0), \
568 MAX1363_CHAN_B(3, 2, d3m2, 19, bits, NULL, 0), \
569 MAX1363_CHAN_B(5, 4, d5m4, 20, bits, NULL, 0), \
570 MAX1363_CHAN_B(7, 6, d7m6, 21, bits, NULL, 0), \
571 MAX1363_CHAN_B(9, 8, d9m8, 22, bits, NULL, 0), \
572 MAX1363_CHAN_B(11, 10, d11m10, 23, bits, NULL, 0), \
573 IIO_CHAN_SOFT_TIMESTAMP(24) \
574 }
575static const struct iio_chan_spec max1038_channels[] = MAX1363_12X_CHANS(8);
576static const struct iio_chan_spec max1138_channels[] = MAX1363_12X_CHANS(10);
577static const struct iio_chan_spec max1238_channels[] = MAX1363_12X_CHANS(12);
578
579static const enum max1363_modes max11607_mode_list[] = {
580 _s0, _s1, _s2, _s3,
581 s0to1, s0to2, s0to3,
582 s2to3,
583 d0m1, d2m3, d1m0, d3m2,
584 d0m1to2m3, d1m0to3m2,
585};
586
587static const enum max1363_modes max11608_mode_list[] = {
588 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7,
589 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7,
590 s6to7,
591 d0m1, d2m3, d4m5, d6m7,
592 d1m0, d3m2, d5m4, d7m6,
593 d0m1to2m3, d0m1to4m5, d0m1to6m7,
594 d1m0to3m2, d1m0to5m4, d1m0to7m6,
595};
596
597#define MAX1363_8X_CHANS(bits) { \
598 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
599 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
600 MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
601 MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
602 MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
603 MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
604 MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
605 MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
606 MAX1363_CHAN_B(0, 1, d0m1, 8, bits, NULL, 0), \
607 MAX1363_CHAN_B(2, 3, d2m3, 9, bits, NULL, 0), \
608 MAX1363_CHAN_B(4, 5, d4m5, 10, bits, NULL, 0), \
609 MAX1363_CHAN_B(6, 7, d6m7, 11, bits, NULL, 0), \
610 MAX1363_CHAN_B(1, 0, d1m0, 12, bits, NULL, 0), \
611 MAX1363_CHAN_B(3, 2, d3m2, 13, bits, NULL, 0), \
612 MAX1363_CHAN_B(5, 4, d5m4, 14, bits, NULL, 0), \
613 MAX1363_CHAN_B(7, 6, d7m6, 15, bits, NULL, 0), \
614 IIO_CHAN_SOFT_TIMESTAMP(16) \
615}
616static const struct iio_chan_spec max11602_channels[] = MAX1363_8X_CHANS(8);
617static const struct iio_chan_spec max11608_channels[] = MAX1363_8X_CHANS(10);
618static const struct iio_chan_spec max11614_channels[] = MAX1363_8X_CHANS(12);
619
620static const enum max1363_modes max11644_mode_list[] = {
621 _s0, _s1, s0to1, d0m1, d1m0,
622};
623
624#define MAX1363_2X_CHANS(bits) { \
625 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
626 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
627 MAX1363_CHAN_B(0, 1, d0m1, 2, bits, NULL, 0), \
628 MAX1363_CHAN_B(1, 0, d1m0, 3, bits, NULL, 0), \
629 IIO_CHAN_SOFT_TIMESTAMP(4) \
630 }
631
632static const struct iio_chan_spec max11646_channels[] = MAX1363_2X_CHANS(10);
633static const struct iio_chan_spec max11644_channels[] = MAX1363_2X_CHANS(12);
634
635enum { max1361,
636 max1362,
637 max1363,
638 max1364,
639 max1036,
640 max1037,
641 max1038,
642 max1039,
643 max1136,
644 max1137,
645 max1138,
646 max1139,
647 max1236,
648 max1237,
649 max1238,
650 max1239,
651 max11600,
652 max11601,
653 max11602,
654 max11603,
655 max11604,
656 max11605,
657 max11606,
658 max11607,
659 max11608,
660 max11609,
661 max11610,
662 max11611,
663 max11612,
664 max11613,
665 max11614,
666 max11615,
667 max11616,
668 max11617,
669 max11644,
670 max11645,
671 max11646,
672 max11647
673};
674
675static const int max1363_monitor_speeds[] = { 133000, 665000, 33300, 16600,
676 8300, 4200, 2000, 1000 };
677
678static ssize_t max1363_monitor_show_freq(struct device *dev,
679 struct device_attribute *attr,
680 char *buf)
681{
682 struct max1363_state *st = iio_priv(dev_to_iio_dev(dev));
683 return sprintf(buf, "%d\n", max1363_monitor_speeds[st->monitor_speed]);
684}
685
686static ssize_t max1363_monitor_store_freq(struct device *dev,
687 struct device_attribute *attr,
688 const char *buf,
689 size_t len)
690{
691 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
692 struct max1363_state *st = iio_priv(indio_dev);
693 int i, ret;
694 unsigned long val;
695 bool found = false;
696
697 ret = kstrtoul(buf, 10, &val);
698 if (ret)
699 return -EINVAL;
700 for (i = 0; i < ARRAY_SIZE(max1363_monitor_speeds); i++)
701 if (val == max1363_monitor_speeds[i]) {
702 found = true;
703 break;
704 }
705 if (!found)
706 return -EINVAL;
707
708 mutex_lock(&indio_dev->mlock);
709 st->monitor_speed = i;
710 mutex_unlock(&indio_dev->mlock);
711
712 return 0;
713}
714
715static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
716 max1363_monitor_show_freq,
717 max1363_monitor_store_freq);
718
719static IIO_CONST_ATTR(sampling_frequency_available,
720 "133000 665000 33300 16600 8300 4200 2000 1000");
721
722static int max1363_read_thresh(struct iio_dev *indio_dev,
723 const struct iio_chan_spec *chan, enum iio_event_type type,
724 enum iio_event_direction dir, enum iio_event_info info, int *val,
725 int *val2)
726{
727 struct max1363_state *st = iio_priv(indio_dev);
728 if (dir == IIO_EV_DIR_FALLING)
729 *val = st->thresh_low[chan->channel];
730 else
731 *val = st->thresh_high[chan->channel];
732 return IIO_VAL_INT;
733}
734
735static int max1363_write_thresh(struct iio_dev *indio_dev,
736 const struct iio_chan_spec *chan, enum iio_event_type type,
737 enum iio_event_direction dir, enum iio_event_info info, int val,
738 int val2)
739{
740 struct max1363_state *st = iio_priv(indio_dev);
741 /* make it handle signed correctly as well */
742 switch (st->chip_info->bits) {
743 case 10:
744 if (val > 0x3FF)
745 return -EINVAL;
746 break;
747 case 12:
748 if (val > 0xFFF)
749 return -EINVAL;
750 break;
751 }
752
753 switch (dir) {
754 case IIO_EV_DIR_FALLING:
755 st->thresh_low[chan->channel] = val;
756 break;
757 case IIO_EV_DIR_RISING:
758 st->thresh_high[chan->channel] = val;
759 break;
760 default:
761 return -EINVAL;
762 }
763
764 return 0;
765}
766
767static const u64 max1363_event_codes[] = {
768 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
769 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
770 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
771 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
772 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
773 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
774 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
775 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
776 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
777 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
778 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
779 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
780 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
781 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
782 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
783 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
784};
785
786static irqreturn_t max1363_event_handler(int irq, void *private)
787{
788 struct iio_dev *indio_dev = private;
789 struct max1363_state *st = iio_priv(indio_dev);
790 s64 timestamp = iio_get_time_ns(indio_dev);
791 unsigned long mask, loc;
792 u8 rx;
793 u8 tx[2] = { st->setupbyte,
794 MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0 };
795
796 st->recv(st->client, &rx, 1);
797 mask = rx;
798 for_each_set_bit(loc, &mask, 8)
799 iio_push_event(indio_dev, max1363_event_codes[loc], timestamp);
800 st->send(st->client, tx, 2);
801
802 return IRQ_HANDLED;
803}
804
805static int max1363_read_event_config(struct iio_dev *indio_dev,
806 const struct iio_chan_spec *chan, enum iio_event_type type,
807 enum iio_event_direction dir)
808{
809 struct max1363_state *st = iio_priv(indio_dev);
810 int val;
811 int number = chan->channel;
812
813 mutex_lock(&indio_dev->mlock);
814 if (dir == IIO_EV_DIR_FALLING)
815 val = (1 << number) & st->mask_low;
816 else
817 val = (1 << number) & st->mask_high;
818 mutex_unlock(&indio_dev->mlock);
819
820 return val;
821}
822
823static int max1363_monitor_mode_update(struct max1363_state *st, int enabled)
824{
825 u8 *tx_buf;
826 int ret, i = 3, j;
827 unsigned long numelements;
828 int len;
829 const long *modemask;
830
831 if (!enabled) {
832 /* transition to buffered capture is not currently supported */
833 st->setupbyte &= ~MAX1363_SETUP_MONITOR_SETUP;
834 st->configbyte &= ~MAX1363_SCAN_MASK;
835 st->monitor_on = false;
836 return max1363_write_basic_config(st);
837 }
838
839 /* Ensure we are in the relevant mode */
840 st->setupbyte |= MAX1363_SETUP_MONITOR_SETUP;
841 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
842 | MAX1363_SCAN_MASK
843 | MAX1363_SE_DE_MASK);
844 st->configbyte |= MAX1363_CONFIG_SCAN_MONITOR_MODE;
845 if ((st->mask_low | st->mask_high) & 0x0F) {
846 st->configbyte |= max1363_mode_table[s0to3].conf;
847 modemask = max1363_mode_table[s0to3].modemask;
848 } else if ((st->mask_low | st->mask_high) & 0x30) {
849 st->configbyte |= max1363_mode_table[d0m1to2m3].conf;
850 modemask = max1363_mode_table[d0m1to2m3].modemask;
851 } else {
852 st->configbyte |= max1363_mode_table[d1m0to3m2].conf;
853 modemask = max1363_mode_table[d1m0to3m2].modemask;
854 }
855 numelements = bitmap_weight(modemask, MAX1363_MAX_CHANNELS);
856 len = 3 * numelements + 3;
857 tx_buf = kmalloc(len, GFP_KERNEL);
858 if (!tx_buf) {
859 ret = -ENOMEM;
860 goto error_ret;
861 }
862 tx_buf[0] = st->configbyte;
863 tx_buf[1] = st->setupbyte;
864 tx_buf[2] = (st->monitor_speed << 1);
865
866 /*
867 * So we need to do yet another bit of nefarious scan mode
868 * setup to match what we need.
869 */
870 for (j = 0; j < 8; j++)
871 if (test_bit(j, modemask)) {
872 /* Establish the mode is in the scan */
873 if (st->mask_low & (1 << j)) {
874 tx_buf[i] = (st->thresh_low[j] >> 4) & 0xFF;
875 tx_buf[i + 1] = (st->thresh_low[j] << 4) & 0xF0;
876 } else if (j < 4) {
877 tx_buf[i] = 0;
878 tx_buf[i + 1] = 0;
879 } else {
880 tx_buf[i] = 0x80;
881 tx_buf[i + 1] = 0;
882 }
883 if (st->mask_high & (1 << j)) {
884 tx_buf[i + 1] |=
885 (st->thresh_high[j] >> 8) & 0x0F;
886 tx_buf[i + 2] = st->thresh_high[j] & 0xFF;
887 } else if (j < 4) {
888 tx_buf[i + 1] |= 0x0F;
889 tx_buf[i + 2] = 0xFF;
890 } else {
891 tx_buf[i + 1] |= 0x07;
892 tx_buf[i + 2] = 0xFF;
893 }
894 i += 3;
895 }
896
897
898 ret = st->send(st->client, tx_buf, len);
899 if (ret < 0)
900 goto error_ret;
901 if (ret != len) {
902 ret = -EIO;
903 goto error_ret;
904 }
905
906 /*
907 * Now that we hopefully have sensible thresholds in place it is
908 * time to turn the interrupts on.
909 * It is unclear from the data sheet if this should be necessary
910 * (i.e. whether monitor mode setup is atomic) but it appears to
911 * be in practice.
912 */
913 tx_buf[0] = st->setupbyte;
914 tx_buf[1] = MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0;
915 ret = st->send(st->client, tx_buf, 2);
916 if (ret < 0)
917 goto error_ret;
918 if (ret != 2) {
919 ret = -EIO;
920 goto error_ret;
921 }
922 ret = 0;
923 st->monitor_on = true;
924error_ret:
925
926 kfree(tx_buf);
927
928 return ret;
929}
930
931/*
932 * To keep this manageable we always use one of 3 scan modes.
933 * Scan 0...3, 0-1,2-3 and 1-0,3-2
934 */
935
936static inline int __max1363_check_event_mask(int thismask, int checkmask)
937{
938 int ret = 0;
939 /* Is it unipolar */
940 if (thismask < 4) {
941 if (checkmask & ~0x0F) {
942 ret = -EBUSY;
943 goto error_ret;
944 }
945 } else if (thismask < 6) {
946 if (checkmask & ~0x30) {
947 ret = -EBUSY;
948 goto error_ret;
949 }
950 } else if (checkmask & ~0xC0)
951 ret = -EBUSY;
952error_ret:
953 return ret;
954}
955
956static int max1363_write_event_config(struct iio_dev *indio_dev,
957 const struct iio_chan_spec *chan, enum iio_event_type type,
958 enum iio_event_direction dir, int state)
959{
960 int ret = 0;
961 struct max1363_state *st = iio_priv(indio_dev);
962 u16 unifiedmask;
963 int number = chan->channel;
964
965 mutex_lock(&indio_dev->mlock);
966 unifiedmask = st->mask_low | st->mask_high;
967 if (dir == IIO_EV_DIR_FALLING) {
968
969 if (state == 0)
970 st->mask_low &= ~(1 << number);
971 else {
972 ret = __max1363_check_event_mask((1 << number),
973 unifiedmask);
974 if (ret)
975 goto error_ret;
976 st->mask_low |= (1 << number);
977 }
978 } else {
979 if (state == 0)
980 st->mask_high &= ~(1 << number);
981 else {
982 ret = __max1363_check_event_mask((1 << number),
983 unifiedmask);
984 if (ret)
985 goto error_ret;
986 st->mask_high |= (1 << number);
987 }
988 }
989
990 max1363_monitor_mode_update(st, !!(st->mask_high | st->mask_low));
991error_ret:
992 mutex_unlock(&indio_dev->mlock);
993
994 return ret;
995}
996
997/*
998 * As with scan_elements, only certain sets of these can
999 * be combined.
1000 */
1001static struct attribute *max1363_event_attributes[] = {
1002 &iio_dev_attr_sampling_frequency.dev_attr.attr,
1003 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
1004 NULL,
1005};
1006
1007static const struct attribute_group max1363_event_attribute_group = {
1008 .attrs = max1363_event_attributes,
1009};
1010
1011static int max1363_update_scan_mode(struct iio_dev *indio_dev,
1012 const unsigned long *scan_mask)
1013{
1014 struct max1363_state *st = iio_priv(indio_dev);
1015
1016 /*
1017 * Need to figure out the current mode based upon the requested
1018 * scan mask in iio_dev
1019 */
1020 st->current_mode = max1363_match_mode(scan_mask, st->chip_info);
1021 if (!st->current_mode)
1022 return -EINVAL;
1023 max1363_set_scan_mode(st);
1024 return 0;
1025}
1026
1027static const struct iio_info max1238_info = {
1028 .read_raw = &max1363_read_raw,
1029 .update_scan_mode = &max1363_update_scan_mode,
1030};
1031
1032static const struct iio_info max1363_info = {
1033 .read_event_value = &max1363_read_thresh,
1034 .write_event_value = &max1363_write_thresh,
1035 .read_event_config = &max1363_read_event_config,
1036 .write_event_config = &max1363_write_event_config,
1037 .read_raw = &max1363_read_raw,
1038 .update_scan_mode = &max1363_update_scan_mode,
1039 .event_attrs = &max1363_event_attribute_group,
1040};
1041
1042/* max1363 and max1368 tested - rest from data sheet */
1043static const struct max1363_chip_info max1363_chip_info_tbl[] = {
1044 [max1361] = {
1045 .bits = 10,
1046 .int_vref_mv = 2048,
1047 .mode_list = max1363_mode_list,
1048 .num_modes = ARRAY_SIZE(max1363_mode_list),
1049 .default_mode = s0to3,
1050 .channels = max1361_channels,
1051 .num_channels = ARRAY_SIZE(max1361_channels),
1052 .info = &max1363_info,
1053 },
1054 [max1362] = {
1055 .bits = 10,
1056 .int_vref_mv = 4096,
1057 .mode_list = max1363_mode_list,
1058 .num_modes = ARRAY_SIZE(max1363_mode_list),
1059 .default_mode = s0to3,
1060 .channels = max1361_channels,
1061 .num_channels = ARRAY_SIZE(max1361_channels),
1062 .info = &max1363_info,
1063 },
1064 [max1363] = {
1065 .bits = 12,
1066 .int_vref_mv = 2048,
1067 .mode_list = max1363_mode_list,
1068 .num_modes = ARRAY_SIZE(max1363_mode_list),
1069 .default_mode = s0to3,
1070 .channels = max1363_channels,
1071 .num_channels = ARRAY_SIZE(max1363_channels),
1072 .info = &max1363_info,
1073 },
1074 [max1364] = {
1075 .bits = 12,
1076 .int_vref_mv = 4096,
1077 .mode_list = max1363_mode_list,
1078 .num_modes = ARRAY_SIZE(max1363_mode_list),
1079 .default_mode = s0to3,
1080 .channels = max1363_channels,
1081 .num_channels = ARRAY_SIZE(max1363_channels),
1082 .info = &max1363_info,
1083 },
1084 [max1036] = {
1085 .bits = 8,
1086 .int_vref_mv = 4096,
1087 .mode_list = max1236_mode_list,
1088 .num_modes = ARRAY_SIZE(max1236_mode_list),
1089 .default_mode = s0to3,
1090 .info = &max1238_info,
1091 .channels = max1036_channels,
1092 .num_channels = ARRAY_SIZE(max1036_channels),
1093 },
1094 [max1037] = {
1095 .bits = 8,
1096 .int_vref_mv = 2048,
1097 .mode_list = max1236_mode_list,
1098 .num_modes = ARRAY_SIZE(max1236_mode_list),
1099 .default_mode = s0to3,
1100 .info = &max1238_info,
1101 .channels = max1036_channels,
1102 .num_channels = ARRAY_SIZE(max1036_channels),
1103 },
1104 [max1038] = {
1105 .bits = 8,
1106 .int_vref_mv = 4096,
1107 .mode_list = max1238_mode_list,
1108 .num_modes = ARRAY_SIZE(max1238_mode_list),
1109 .default_mode = s0to11,
1110 .info = &max1238_info,
1111 .channels = max1038_channels,
1112 .num_channels = ARRAY_SIZE(max1038_channels),
1113 },
1114 [max1039] = {
1115 .bits = 8,
1116 .int_vref_mv = 2048,
1117 .mode_list = max1238_mode_list,
1118 .num_modes = ARRAY_SIZE(max1238_mode_list),
1119 .default_mode = s0to11,
1120 .info = &max1238_info,
1121 .channels = max1038_channels,
1122 .num_channels = ARRAY_SIZE(max1038_channels),
1123 },
1124 [max1136] = {
1125 .bits = 10,
1126 .int_vref_mv = 4096,
1127 .mode_list = max1236_mode_list,
1128 .num_modes = ARRAY_SIZE(max1236_mode_list),
1129 .default_mode = s0to3,
1130 .info = &max1238_info,
1131 .channels = max1136_channels,
1132 .num_channels = ARRAY_SIZE(max1136_channels),
1133 },
1134 [max1137] = {
1135 .bits = 10,
1136 .int_vref_mv = 2048,
1137 .mode_list = max1236_mode_list,
1138 .num_modes = ARRAY_SIZE(max1236_mode_list),
1139 .default_mode = s0to3,
1140 .info = &max1238_info,
1141 .channels = max1136_channels,
1142 .num_channels = ARRAY_SIZE(max1136_channels),
1143 },
1144 [max1138] = {
1145 .bits = 10,
1146 .int_vref_mv = 4096,
1147 .mode_list = max1238_mode_list,
1148 .num_modes = ARRAY_SIZE(max1238_mode_list),
1149 .default_mode = s0to11,
1150 .info = &max1238_info,
1151 .channels = max1138_channels,
1152 .num_channels = ARRAY_SIZE(max1138_channels),
1153 },
1154 [max1139] = {
1155 .bits = 10,
1156 .int_vref_mv = 2048,
1157 .mode_list = max1238_mode_list,
1158 .num_modes = ARRAY_SIZE(max1238_mode_list),
1159 .default_mode = s0to11,
1160 .info = &max1238_info,
1161 .channels = max1138_channels,
1162 .num_channels = ARRAY_SIZE(max1138_channels),
1163 },
1164 [max1236] = {
1165 .bits = 12,
1166 .int_vref_mv = 4096,
1167 .mode_list = max1236_mode_list,
1168 .num_modes = ARRAY_SIZE(max1236_mode_list),
1169 .default_mode = s0to3,
1170 .info = &max1238_info,
1171 .channels = max1236_channels,
1172 .num_channels = ARRAY_SIZE(max1236_channels),
1173 },
1174 [max1237] = {
1175 .bits = 12,
1176 .int_vref_mv = 2048,
1177 .mode_list = max1236_mode_list,
1178 .num_modes = ARRAY_SIZE(max1236_mode_list),
1179 .default_mode = s0to3,
1180 .info = &max1238_info,
1181 .channels = max1236_channels,
1182 .num_channels = ARRAY_SIZE(max1236_channels),
1183 },
1184 [max1238] = {
1185 .bits = 12,
1186 .int_vref_mv = 4096,
1187 .mode_list = max1238_mode_list,
1188 .num_modes = ARRAY_SIZE(max1238_mode_list),
1189 .default_mode = s0to11,
1190 .info = &max1238_info,
1191 .channels = max1238_channels,
1192 .num_channels = ARRAY_SIZE(max1238_channels),
1193 },
1194 [max1239] = {
1195 .bits = 12,
1196 .int_vref_mv = 2048,
1197 .mode_list = max1238_mode_list,
1198 .num_modes = ARRAY_SIZE(max1238_mode_list),
1199 .default_mode = s0to11,
1200 .info = &max1238_info,
1201 .channels = max1238_channels,
1202 .num_channels = ARRAY_SIZE(max1238_channels),
1203 },
1204 [max11600] = {
1205 .bits = 8,
1206 .int_vref_mv = 4096,
1207 .mode_list = max11607_mode_list,
1208 .num_modes = ARRAY_SIZE(max11607_mode_list),
1209 .default_mode = s0to3,
1210 .info = &max1238_info,
1211 .channels = max1036_channels,
1212 .num_channels = ARRAY_SIZE(max1036_channels),
1213 },
1214 [max11601] = {
1215 .bits = 8,
1216 .int_vref_mv = 2048,
1217 .mode_list = max11607_mode_list,
1218 .num_modes = ARRAY_SIZE(max11607_mode_list),
1219 .default_mode = s0to3,
1220 .info = &max1238_info,
1221 .channels = max1036_channels,
1222 .num_channels = ARRAY_SIZE(max1036_channels),
1223 },
1224 [max11602] = {
1225 .bits = 8,
1226 .int_vref_mv = 4096,
1227 .mode_list = max11608_mode_list,
1228 .num_modes = ARRAY_SIZE(max11608_mode_list),
1229 .default_mode = s0to7,
1230 .info = &max1238_info,
1231 .channels = max11602_channels,
1232 .num_channels = ARRAY_SIZE(max11602_channels),
1233 },
1234 [max11603] = {
1235 .bits = 8,
1236 .int_vref_mv = 2048,
1237 .mode_list = max11608_mode_list,
1238 .num_modes = ARRAY_SIZE(max11608_mode_list),
1239 .default_mode = s0to7,
1240 .info = &max1238_info,
1241 .channels = max11602_channels,
1242 .num_channels = ARRAY_SIZE(max11602_channels),
1243 },
1244 [max11604] = {
1245 .bits = 8,
1246 .int_vref_mv = 4096,
1247 .mode_list = max1238_mode_list,
1248 .num_modes = ARRAY_SIZE(max1238_mode_list),
1249 .default_mode = s0to11,
1250 .info = &max1238_info,
1251 .channels = max1038_channels,
1252 .num_channels = ARRAY_SIZE(max1038_channels),
1253 },
1254 [max11605] = {
1255 .bits = 8,
1256 .int_vref_mv = 2048,
1257 .mode_list = max1238_mode_list,
1258 .num_modes = ARRAY_SIZE(max1238_mode_list),
1259 .default_mode = s0to11,
1260 .info = &max1238_info,
1261 .channels = max1038_channels,
1262 .num_channels = ARRAY_SIZE(max1038_channels),
1263 },
1264 [max11606] = {
1265 .bits = 10,
1266 .int_vref_mv = 4096,
1267 .mode_list = max11607_mode_list,
1268 .num_modes = ARRAY_SIZE(max11607_mode_list),
1269 .default_mode = s0to3,
1270 .info = &max1238_info,
1271 .channels = max1136_channels,
1272 .num_channels = ARRAY_SIZE(max1136_channels),
1273 },
1274 [max11607] = {
1275 .bits = 10,
1276 .int_vref_mv = 2048,
1277 .mode_list = max11607_mode_list,
1278 .num_modes = ARRAY_SIZE(max11607_mode_list),
1279 .default_mode = s0to3,
1280 .info = &max1238_info,
1281 .channels = max1136_channels,
1282 .num_channels = ARRAY_SIZE(max1136_channels),
1283 },
1284 [max11608] = {
1285 .bits = 10,
1286 .int_vref_mv = 4096,
1287 .mode_list = max11608_mode_list,
1288 .num_modes = ARRAY_SIZE(max11608_mode_list),
1289 .default_mode = s0to7,
1290 .info = &max1238_info,
1291 .channels = max11608_channels,
1292 .num_channels = ARRAY_SIZE(max11608_channels),
1293 },
1294 [max11609] = {
1295 .bits = 10,
1296 .int_vref_mv = 2048,
1297 .mode_list = max11608_mode_list,
1298 .num_modes = ARRAY_SIZE(max11608_mode_list),
1299 .default_mode = s0to7,
1300 .info = &max1238_info,
1301 .channels = max11608_channels,
1302 .num_channels = ARRAY_SIZE(max11608_channels),
1303 },
1304 [max11610] = {
1305 .bits = 10,
1306 .int_vref_mv = 4096,
1307 .mode_list = max1238_mode_list,
1308 .num_modes = ARRAY_SIZE(max1238_mode_list),
1309 .default_mode = s0to11,
1310 .info = &max1238_info,
1311 .channels = max1138_channels,
1312 .num_channels = ARRAY_SIZE(max1138_channels),
1313 },
1314 [max11611] = {
1315 .bits = 10,
1316 .int_vref_mv = 2048,
1317 .mode_list = max1238_mode_list,
1318 .num_modes = ARRAY_SIZE(max1238_mode_list),
1319 .default_mode = s0to11,
1320 .info = &max1238_info,
1321 .channels = max1138_channels,
1322 .num_channels = ARRAY_SIZE(max1138_channels),
1323 },
1324 [max11612] = {
1325 .bits = 12,
1326 .int_vref_mv = 4096,
1327 .mode_list = max11607_mode_list,
1328 .num_modes = ARRAY_SIZE(max11607_mode_list),
1329 .default_mode = s0to3,
1330 .info = &max1238_info,
1331 .channels = max1363_channels,
1332 .num_channels = ARRAY_SIZE(max1363_channels),
1333 },
1334 [max11613] = {
1335 .bits = 12,
1336 .int_vref_mv = 2048,
1337 .mode_list = max11607_mode_list,
1338 .num_modes = ARRAY_SIZE(max11607_mode_list),
1339 .default_mode = s0to3,
1340 .info = &max1238_info,
1341 .channels = max1363_channels,
1342 .num_channels = ARRAY_SIZE(max1363_channels),
1343 },
1344 [max11614] = {
1345 .bits = 12,
1346 .int_vref_mv = 4096,
1347 .mode_list = max11608_mode_list,
1348 .num_modes = ARRAY_SIZE(max11608_mode_list),
1349 .default_mode = s0to7,
1350 .info = &max1238_info,
1351 .channels = max11614_channels,
1352 .num_channels = ARRAY_SIZE(max11614_channels),
1353 },
1354 [max11615] = {
1355 .bits = 12,
1356 .int_vref_mv = 2048,
1357 .mode_list = max11608_mode_list,
1358 .num_modes = ARRAY_SIZE(max11608_mode_list),
1359 .default_mode = s0to7,
1360 .info = &max1238_info,
1361 .channels = max11614_channels,
1362 .num_channels = ARRAY_SIZE(max11614_channels),
1363 },
1364 [max11616] = {
1365 .bits = 12,
1366 .int_vref_mv = 4096,
1367 .mode_list = max1238_mode_list,
1368 .num_modes = ARRAY_SIZE(max1238_mode_list),
1369 .default_mode = s0to11,
1370 .info = &max1238_info,
1371 .channels = max1238_channels,
1372 .num_channels = ARRAY_SIZE(max1238_channels),
1373 },
1374 [max11617] = {
1375 .bits = 12,
1376 .int_vref_mv = 2048,
1377 .mode_list = max1238_mode_list,
1378 .num_modes = ARRAY_SIZE(max1238_mode_list),
1379 .default_mode = s0to11,
1380 .info = &max1238_info,
1381 .channels = max1238_channels,
1382 .num_channels = ARRAY_SIZE(max1238_channels),
1383 },
1384 [max11644] = {
1385 .bits = 12,
1386 .int_vref_mv = 4096,
1387 .mode_list = max11644_mode_list,
1388 .num_modes = ARRAY_SIZE(max11644_mode_list),
1389 .default_mode = s0to1,
1390 .info = &max1238_info,
1391 .channels = max11644_channels,
1392 .num_channels = ARRAY_SIZE(max11644_channels),
1393 },
1394 [max11645] = {
1395 .bits = 12,
1396 .int_vref_mv = 2048,
1397 .mode_list = max11644_mode_list,
1398 .num_modes = ARRAY_SIZE(max11644_mode_list),
1399 .default_mode = s0to1,
1400 .info = &max1238_info,
1401 .channels = max11644_channels,
1402 .num_channels = ARRAY_SIZE(max11644_channels),
1403 },
1404 [max11646] = {
1405 .bits = 10,
1406 .int_vref_mv = 4096,
1407 .mode_list = max11644_mode_list,
1408 .num_modes = ARRAY_SIZE(max11644_mode_list),
1409 .default_mode = s0to1,
1410 .info = &max1238_info,
1411 .channels = max11646_channels,
1412 .num_channels = ARRAY_SIZE(max11646_channels),
1413 },
1414 [max11647] = {
1415 .bits = 10,
1416 .int_vref_mv = 2048,
1417 .mode_list = max11644_mode_list,
1418 .num_modes = ARRAY_SIZE(max11644_mode_list),
1419 .default_mode = s0to1,
1420 .info = &max1238_info,
1421 .channels = max11646_channels,
1422 .num_channels = ARRAY_SIZE(max11646_channels),
1423 },
1424};
1425
1426static int max1363_initial_setup(struct max1363_state *st)
1427{
1428 st->setupbyte = MAX1363_SETUP_INT_CLOCK
1429 | MAX1363_SETUP_UNIPOLAR
1430 | MAX1363_SETUP_NORESET;
1431
1432 if (st->vref)
1433 st->setupbyte |= MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF;
1434 else
1435 st->setupbyte |= MAX1363_SETUP_POWER_UP_INT_REF
1436 | MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT;
1437
1438 /* Set scan mode writes the config anyway so wait until then */
1439 st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
1440 st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
1441 st->configbyte = MAX1363_CONFIG_BYTE(st->configbyte);
1442
1443 return max1363_set_scan_mode(st);
1444}
1445
1446static int max1363_alloc_scan_masks(struct iio_dev *indio_dev)
1447{
1448 struct max1363_state *st = iio_priv(indio_dev);
1449 unsigned long *masks;
1450 int i;
1451
1452 masks = devm_kzalloc(&indio_dev->dev,
1453 array3_size(BITS_TO_LONGS(MAX1363_MAX_CHANNELS),
1454 sizeof(long),
1455 st->chip_info->num_modes + 1),
1456 GFP_KERNEL);
1457 if (!masks)
1458 return -ENOMEM;
1459
1460 for (i = 0; i < st->chip_info->num_modes; i++)
1461 bitmap_copy(masks + BITS_TO_LONGS(MAX1363_MAX_CHANNELS)*i,
1462 max1363_mode_table[st->chip_info->mode_list[i]]
1463 .modemask, MAX1363_MAX_CHANNELS);
1464
1465 indio_dev->available_scan_masks = masks;
1466
1467 return 0;
1468}
1469
1470static irqreturn_t max1363_trigger_handler(int irq, void *p)
1471{
1472 struct iio_poll_func *pf = p;
1473 struct iio_dev *indio_dev = pf->indio_dev;
1474 struct max1363_state *st = iio_priv(indio_dev);
1475 __u8 *rxbuf;
1476 int b_sent;
1477 size_t d_size;
1478 unsigned long numvals = bitmap_weight(st->current_mode->modemask,
1479 MAX1363_MAX_CHANNELS);
1480
1481 /* Ensure the timestamp is 8 byte aligned */
1482 if (st->chip_info->bits != 8)
1483 d_size = numvals*2;
1484 else
1485 d_size = numvals;
1486 if (indio_dev->scan_timestamp) {
1487 d_size += sizeof(s64);
1488 if (d_size % sizeof(s64))
1489 d_size += sizeof(s64) - (d_size % sizeof(s64));
1490 }
1491 /* Monitor mode prevents reading. Whilst not currently implemented
1492 * might as well have this test in here in the meantime as it does
1493 * no harm.
1494 */
1495 if (numvals == 0)
1496 goto done;
1497
1498 rxbuf = kmalloc(d_size, GFP_KERNEL);
1499 if (rxbuf == NULL)
1500 goto done;
1501 if (st->chip_info->bits != 8)
1502 b_sent = st->recv(st->client, rxbuf, numvals * 2);
1503 else
1504 b_sent = st->recv(st->client, rxbuf, numvals);
1505 if (b_sent < 0)
1506 goto done_free;
1507
1508 iio_push_to_buffers_with_timestamp(indio_dev, rxbuf,
1509 iio_get_time_ns(indio_dev));
1510
1511done_free:
1512 kfree(rxbuf);
1513done:
1514 iio_trigger_notify_done(indio_dev->trig);
1515
1516 return IRQ_HANDLED;
1517}
1518
1519#ifdef CONFIG_OF
1520
1521#define MAX1363_COMPATIBLE(of_compatible, cfg) { \
1522 .compatible = of_compatible, \
1523 .data = &max1363_chip_info_tbl[cfg], \
1524}
1525
1526static const struct of_device_id max1363_of_match[] = {
1527 MAX1363_COMPATIBLE("maxim,max1361", max1361),
1528 MAX1363_COMPATIBLE("maxim,max1362", max1362),
1529 MAX1363_COMPATIBLE("maxim,max1363", max1363),
1530 MAX1363_COMPATIBLE("maxim,max1364", max1364),
1531 MAX1363_COMPATIBLE("maxim,max1036", max1036),
1532 MAX1363_COMPATIBLE("maxim,max1037", max1037),
1533 MAX1363_COMPATIBLE("maxim,max1038", max1038),
1534 MAX1363_COMPATIBLE("maxim,max1039", max1039),
1535 MAX1363_COMPATIBLE("maxim,max1136", max1136),
1536 MAX1363_COMPATIBLE("maxim,max1137", max1137),
1537 MAX1363_COMPATIBLE("maxim,max1138", max1138),
1538 MAX1363_COMPATIBLE("maxim,max1139", max1139),
1539 MAX1363_COMPATIBLE("maxim,max1236", max1236),
1540 MAX1363_COMPATIBLE("maxim,max1237", max1237),
1541 MAX1363_COMPATIBLE("maxim,max1238", max1238),
1542 MAX1363_COMPATIBLE("maxim,max1239", max1239),
1543 MAX1363_COMPATIBLE("maxim,max11600", max11600),
1544 MAX1363_COMPATIBLE("maxim,max11601", max11601),
1545 MAX1363_COMPATIBLE("maxim,max11602", max11602),
1546 MAX1363_COMPATIBLE("maxim,max11603", max11603),
1547 MAX1363_COMPATIBLE("maxim,max11604", max11604),
1548 MAX1363_COMPATIBLE("maxim,max11605", max11605),
1549 MAX1363_COMPATIBLE("maxim,max11606", max11606),
1550 MAX1363_COMPATIBLE("maxim,max11607", max11607),
1551 MAX1363_COMPATIBLE("maxim,max11608", max11608),
1552 MAX1363_COMPATIBLE("maxim,max11609", max11609),
1553 MAX1363_COMPATIBLE("maxim,max11610", max11610),
1554 MAX1363_COMPATIBLE("maxim,max11611", max11611),
1555 MAX1363_COMPATIBLE("maxim,max11612", max11612),
1556 MAX1363_COMPATIBLE("maxim,max11613", max11613),
1557 MAX1363_COMPATIBLE("maxim,max11614", max11614),
1558 MAX1363_COMPATIBLE("maxim,max11615", max11615),
1559 MAX1363_COMPATIBLE("maxim,max11616", max11616),
1560 MAX1363_COMPATIBLE("maxim,max11617", max11617),
1561 MAX1363_COMPATIBLE("maxim,max11644", max11644),
1562 MAX1363_COMPATIBLE("maxim,max11645", max11645),
1563 MAX1363_COMPATIBLE("maxim,max11646", max11646),
1564 MAX1363_COMPATIBLE("maxim,max11647", max11647),
1565 { /* sentinel */ }
1566};
1567MODULE_DEVICE_TABLE(of, max1363_of_match);
1568#endif
1569
1570static int max1363_probe(struct i2c_client *client,
1571 const struct i2c_device_id *id)
1572{
1573 int ret;
1574 struct max1363_state *st;
1575 struct iio_dev *indio_dev;
1576 struct regulator *vref;
1577
1578 indio_dev = devm_iio_device_alloc(&client->dev,
1579 sizeof(struct max1363_state));
1580 if (!indio_dev)
1581 return -ENOMEM;
1582
1583 indio_dev->dev.of_node = client->dev.of_node;
1584 ret = iio_map_array_register(indio_dev, client->dev.platform_data);
1585 if (ret < 0)
1586 return ret;
1587
1588 st = iio_priv(indio_dev);
1589
1590 st->reg = devm_regulator_get(&client->dev, "vcc");
1591 if (IS_ERR(st->reg)) {
1592 ret = PTR_ERR(st->reg);
1593 goto error_unregister_map;
1594 }
1595
1596 ret = regulator_enable(st->reg);
1597 if (ret)
1598 goto error_unregister_map;
1599
1600 /* this is only used for device removal purposes */
1601 i2c_set_clientdata(client, indio_dev);
1602
1603 st->chip_info = of_device_get_match_data(&client->dev);
1604 if (!st->chip_info)
1605 st->chip_info = &max1363_chip_info_tbl[id->driver_data];
1606 st->client = client;
1607
1608 st->vref_uv = st->chip_info->int_vref_mv * 1000;
1609 vref = devm_regulator_get_optional(&client->dev, "vref");
1610 if (!IS_ERR(vref)) {
1611 int vref_uv;
1612
1613 ret = regulator_enable(vref);
1614 if (ret)
1615 goto error_disable_reg;
1616 st->vref = vref;
1617 vref_uv = regulator_get_voltage(vref);
1618 if (vref_uv <= 0) {
1619 ret = -EINVAL;
1620 goto error_disable_reg;
1621 }
1622 st->vref_uv = vref_uv;
1623 }
1624
1625 if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1626 st->send = i2c_master_send;
1627 st->recv = i2c_master_recv;
1628 } else if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE)
1629 && st->chip_info->bits == 8) {
1630 st->send = max1363_smbus_send;
1631 st->recv = max1363_smbus_recv;
1632 } else {
1633 ret = -EOPNOTSUPP;
1634 goto error_disable_reg;
1635 }
1636
1637 ret = max1363_alloc_scan_masks(indio_dev);
1638 if (ret)
1639 goto error_disable_reg;
1640
1641 /* Establish that the iio_dev is a child of the i2c device */
1642 indio_dev->dev.parent = &client->dev;
1643 indio_dev->dev.of_node = client->dev.of_node;
1644 indio_dev->name = id->name;
1645 indio_dev->channels = st->chip_info->channels;
1646 indio_dev->num_channels = st->chip_info->num_channels;
1647 indio_dev->info = st->chip_info->info;
1648 indio_dev->modes = INDIO_DIRECT_MODE;
1649 ret = max1363_initial_setup(st);
1650 if (ret < 0)
1651 goto error_disable_reg;
1652
1653 ret = iio_triggered_buffer_setup(indio_dev, NULL,
1654 &max1363_trigger_handler, NULL);
1655 if (ret)
1656 goto error_disable_reg;
1657
1658 if (client->irq) {
1659 ret = devm_request_threaded_irq(&client->dev, st->client->irq,
1660 NULL,
1661 &max1363_event_handler,
1662 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
1663 "max1363_event",
1664 indio_dev);
1665
1666 if (ret)
1667 goto error_uninit_buffer;
1668 }
1669
1670 ret = iio_device_register(indio_dev);
1671 if (ret < 0)
1672 goto error_uninit_buffer;
1673
1674 return 0;
1675
1676error_uninit_buffer:
1677 iio_triggered_buffer_cleanup(indio_dev);
1678error_disable_reg:
1679 if (st->vref)
1680 regulator_disable(st->vref);
1681 regulator_disable(st->reg);
1682error_unregister_map:
1683 iio_map_array_unregister(indio_dev);
1684 return ret;
1685}
1686
1687static int max1363_remove(struct i2c_client *client)
1688{
1689 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1690 struct max1363_state *st = iio_priv(indio_dev);
1691
1692 iio_device_unregister(indio_dev);
1693 iio_triggered_buffer_cleanup(indio_dev);
1694 if (st->vref)
1695 regulator_disable(st->vref);
1696 regulator_disable(st->reg);
1697 iio_map_array_unregister(indio_dev);
1698
1699 return 0;
1700}
1701
1702static const struct i2c_device_id max1363_id[] = {
1703 { "max1361", max1361 },
1704 { "max1362", max1362 },
1705 { "max1363", max1363 },
1706 { "max1364", max1364 },
1707 { "max1036", max1036 },
1708 { "max1037", max1037 },
1709 { "max1038", max1038 },
1710 { "max1039", max1039 },
1711 { "max1136", max1136 },
1712 { "max1137", max1137 },
1713 { "max1138", max1138 },
1714 { "max1139", max1139 },
1715 { "max1236", max1236 },
1716 { "max1237", max1237 },
1717 { "max1238", max1238 },
1718 { "max1239", max1239 },
1719 { "max11600", max11600 },
1720 { "max11601", max11601 },
1721 { "max11602", max11602 },
1722 { "max11603", max11603 },
1723 { "max11604", max11604 },
1724 { "max11605", max11605 },
1725 { "max11606", max11606 },
1726 { "max11607", max11607 },
1727 { "max11608", max11608 },
1728 { "max11609", max11609 },
1729 { "max11610", max11610 },
1730 { "max11611", max11611 },
1731 { "max11612", max11612 },
1732 { "max11613", max11613 },
1733 { "max11614", max11614 },
1734 { "max11615", max11615 },
1735 { "max11616", max11616 },
1736 { "max11617", max11617 },
1737 { "max11644", max11644 },
1738 { "max11645", max11645 },
1739 { "max11646", max11646 },
1740 { "max11647", max11647 },
1741 {}
1742};
1743
1744MODULE_DEVICE_TABLE(i2c, max1363_id);
1745
1746static struct i2c_driver max1363_driver = {
1747 .driver = {
1748 .name = "max1363",
1749 .of_match_table = of_match_ptr(max1363_of_match),
1750 },
1751 .probe = max1363_probe,
1752 .remove = max1363_remove,
1753 .id_table = max1363_id,
1754};
1755module_i2c_driver(max1363_driver);
1756
1757MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
1758MODULE_DESCRIPTION("Maxim 1363 ADC");
1759MODULE_LICENSE("GPL v2");
1// SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * iio/adc/max1363.c
4 * Copyright (C) 2008-2010 Jonathan Cameron
5 *
6 * based on linux/drivers/i2c/chips/max123x
7 * Copyright (C) 2002-2004 Stefan Eletzhofer
8 *
9 * based on linux/drivers/acron/char/pcf8583.c
10 * Copyright (C) 2000 Russell King
11 *
12 * Driver for max1363 and similar chips.
13 */
14
15#include <linux/interrupt.h>
16#include <linux/device.h>
17#include <linux/kernel.h>
18#include <linux/sysfs.h>
19#include <linux/list.h>
20#include <linux/i2c.h>
21#include <linux/regulator/consumer.h>
22#include <linux/slab.h>
23#include <linux/err.h>
24#include <linux/module.h>
25#include <linux/mod_devicetable.h>
26#include <linux/property.h>
27
28#include <linux/iio/iio.h>
29#include <linux/iio/sysfs.h>
30#include <linux/iio/events.h>
31#include <linux/iio/buffer.h>
32#include <linux/iio/driver.h>
33#include <linux/iio/kfifo_buf.h>
34#include <linux/iio/trigger_consumer.h>
35#include <linux/iio/triggered_buffer.h>
36
37#define MAX1363_SETUP_BYTE(a) ((a) | 0x80)
38
39/* There is a fair bit more defined here than currently
40 * used, but the intention is to support everything these
41 * chips do in the long run */
42
43/* see data sheets */
44/* max1363 and max1236, max1237, max1238, max1239 */
45#define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD 0x00
46#define MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF 0x20
47#define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT 0x40
48#define MAX1363_SETUP_AIN3_IS_REF_REF_IS_INT 0x60
49#define MAX1363_SETUP_POWER_UP_INT_REF 0x10
50#define MAX1363_SETUP_POWER_DOWN_INT_REF 0x00
51
52/* think about including max11600 etc - more settings */
53#define MAX1363_SETUP_EXT_CLOCK 0x08
54#define MAX1363_SETUP_INT_CLOCK 0x00
55#define MAX1363_SETUP_UNIPOLAR 0x00
56#define MAX1363_SETUP_BIPOLAR 0x04
57#define MAX1363_SETUP_RESET 0x00
58#define MAX1363_SETUP_NORESET 0x02
59/* max1363 only - though don't care on others.
60 * For now monitor modes are not implemented as the relevant
61 * line is not connected on my test board.
62 * The definitions are here as I intend to add this soon.
63 */
64#define MAX1363_SETUP_MONITOR_SETUP 0x01
65
66/* Specific to the max1363 */
67#define MAX1363_MON_RESET_CHAN(a) (1 << ((a) + 4))
68#define MAX1363_MON_INT_ENABLE 0x01
69
70/* defined for readability reasons */
71/* All chips */
72#define MAX1363_CONFIG_BYTE(a) ((a))
73
74#define MAX1363_CONFIG_SE 0x01
75#define MAX1363_CONFIG_DE 0x00
76#define MAX1363_CONFIG_SCAN_TO_CS 0x00
77#define MAX1363_CONFIG_SCAN_SINGLE_8 0x20
78#define MAX1363_CONFIG_SCAN_MONITOR_MODE 0x40
79#define MAX1363_CONFIG_SCAN_SINGLE_1 0x60
80/* max123{6-9} only */
81#define MAX1236_SCAN_MID_TO_CHANNEL 0x40
82
83/* max1363 only - merely part of channel selects or don't care for others */
84#define MAX1363_CONFIG_EN_MON_MODE_READ 0x18
85
86#define MAX1363_CHANNEL_SEL(a) ((a) << 1)
87
88/* max1363 strictly 0x06 - but doesn't matter */
89#define MAX1363_CHANNEL_SEL_MASK 0x1E
90#define MAX1363_SCAN_MASK 0x60
91#define MAX1363_SE_DE_MASK 0x01
92
93#define MAX1363_MAX_CHANNELS 25
94/**
95 * struct max1363_mode - scan mode information
96 * @conf: The corresponding value of the configuration register
97 * @modemask: Bit mask corresponding to channels enabled in this mode
98 */
99struct max1363_mode {
100 int8_t conf;
101 DECLARE_BITMAP(modemask, MAX1363_MAX_CHANNELS);
102};
103
104/* This must be maintained along side the max1363_mode_table in max1363_core */
105enum max1363_modes {
106 /* Single read of a single channel */
107 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
108 /* Differential single read */
109 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
110 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
111 /* Scan to channel and mid to channel where overlapping */
112 s0to1, s0to2, s2to3, s0to3, s0to4, s0to5, s0to6,
113 s6to7, s0to7, s6to8, s0to8, s6to9,
114 s0to9, s6to10, s0to10, s6to11, s0to11,
115 /* Differential scan to channel and mid to channel where overlapping */
116 d0m1to2m3, d0m1to4m5, d0m1to6m7, d6m7to8m9,
117 d0m1to8m9, d6m7to10m11, d0m1to10m11, d1m0to3m2,
118 d1m0to5m4, d1m0to7m6, d7m6to9m8, d1m0to9m8,
119 d7m6to11m10, d1m0to11m10,
120};
121
122/**
123 * struct max1363_chip_info - chip specifc information
124 * @info: iio core function callbacks structure
125 * @channels: channel specification
126 * @num_channels: number of channels
127 * @mode_list: array of available scan modes
128 * @default_mode: the scan mode in which the chip starts up
129 * @int_vref_mv: the internal reference voltage
130 * @num_modes: number of modes
131 * @bits: accuracy of the adc in bits
132 */
133struct max1363_chip_info {
134 const struct iio_info *info;
135 const struct iio_chan_spec *channels;
136 int num_channels;
137 const enum max1363_modes *mode_list;
138 enum max1363_modes default_mode;
139 u16 int_vref_mv;
140 u8 num_modes;
141 u8 bits;
142};
143
144/**
145 * struct max1363_state - driver instance specific data
146 * @client: i2c_client
147 * @setupbyte: cache of current device setup byte
148 * @configbyte: cache of current device config byte
149 * @chip_info: chip model specific constants, available modes, etc.
150 * @current_mode: the scan mode of this chip
151 * @requestedmask: a valid requested set of channels
152 * @reg: supply regulator
153 * @lock: lock to ensure state is consistent
154 * @monitor_on: whether monitor mode is enabled
155 * @monitor_speed: parameter corresponding to device monitor speed setting
156 * @mask_high: bitmask for enabled high thresholds
157 * @mask_low: bitmask for enabled low thresholds
158 * @thresh_high: high threshold values
159 * @thresh_low: low threshold values
160 * @vref: Reference voltage regulator
161 * @vref_uv: Actual (external or internal) reference voltage
162 * @send: function used to send data to the chip
163 * @recv: function used to receive data from the chip
164 */
165struct max1363_state {
166 struct i2c_client *client;
167 u8 setupbyte;
168 u8 configbyte;
169 const struct max1363_chip_info *chip_info;
170 const struct max1363_mode *current_mode;
171 u32 requestedmask;
172 struct regulator *reg;
173 struct mutex lock;
174
175 /* Using monitor modes and buffer at the same time is
176 currently not supported */
177 bool monitor_on;
178 unsigned int monitor_speed:3;
179 u8 mask_high;
180 u8 mask_low;
181 /* 4x unipolar first then the fours bipolar ones */
182 s16 thresh_high[8];
183 s16 thresh_low[8];
184 struct regulator *vref;
185 u32 vref_uv;
186 int (*send)(const struct i2c_client *client,
187 const char *buf, int count);
188 int (*recv)(const struct i2c_client *client,
189 char *buf, int count);
190};
191
192#define MAX1363_MODE_SINGLE(_num, _mask) { \
193 .conf = MAX1363_CHANNEL_SEL(_num) \
194 | MAX1363_CONFIG_SCAN_SINGLE_1 \
195 | MAX1363_CONFIG_SE, \
196 .modemask[0] = _mask, \
197 }
198
199#define MAX1363_MODE_SCAN_TO_CHANNEL(_num, _mask) { \
200 .conf = MAX1363_CHANNEL_SEL(_num) \
201 | MAX1363_CONFIG_SCAN_TO_CS \
202 | MAX1363_CONFIG_SE, \
203 .modemask[0] = _mask, \
204 }
205
206/* note not available for max1363 hence naming */
207#define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num, _mask) { \
208 .conf = MAX1363_CHANNEL_SEL(_num) \
209 | MAX1236_SCAN_MID_TO_CHANNEL \
210 | MAX1363_CONFIG_SE, \
211 .modemask[0] = _mask \
212}
213
214#define MAX1363_MODE_DIFF_SINGLE(_nump, _numm, _mask) { \
215 .conf = MAX1363_CHANNEL_SEL(_nump) \
216 | MAX1363_CONFIG_SCAN_SINGLE_1 \
217 | MAX1363_CONFIG_DE, \
218 .modemask[0] = _mask \
219 }
220
221/* Can't think how to automate naming so specify for now */
222#define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(_num, _numvals, _mask) { \
223 .conf = MAX1363_CHANNEL_SEL(_num) \
224 | MAX1363_CONFIG_SCAN_TO_CS \
225 | MAX1363_CONFIG_DE, \
226 .modemask[0] = _mask \
227 }
228
229/* note only available for max1363 hence naming */
230#define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(_num, _numvals, _mask) { \
231 .conf = MAX1363_CHANNEL_SEL(_num) \
232 | MAX1236_SCAN_MID_TO_CHANNEL \
233 | MAX1363_CONFIG_SE, \
234 .modemask[0] = _mask \
235}
236
237static const struct max1363_mode max1363_mode_table[] = {
238 /* All of the single channel options first */
239 MAX1363_MODE_SINGLE(0, 1 << 0),
240 MAX1363_MODE_SINGLE(1, 1 << 1),
241 MAX1363_MODE_SINGLE(2, 1 << 2),
242 MAX1363_MODE_SINGLE(3, 1 << 3),
243 MAX1363_MODE_SINGLE(4, 1 << 4),
244 MAX1363_MODE_SINGLE(5, 1 << 5),
245 MAX1363_MODE_SINGLE(6, 1 << 6),
246 MAX1363_MODE_SINGLE(7, 1 << 7),
247 MAX1363_MODE_SINGLE(8, 1 << 8),
248 MAX1363_MODE_SINGLE(9, 1 << 9),
249 MAX1363_MODE_SINGLE(10, 1 << 10),
250 MAX1363_MODE_SINGLE(11, 1 << 11),
251
252 MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12),
253 MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13),
254 MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14),
255 MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15),
256 MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16),
257 MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17),
258 MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18),
259 MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19),
260 MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20),
261 MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21),
262 MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22),
263 MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23),
264
265 /* The multichannel scans next */
266 MAX1363_MODE_SCAN_TO_CHANNEL(1, 0x003),
267 MAX1363_MODE_SCAN_TO_CHANNEL(2, 0x007),
268 MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3, 0x00C),
269 MAX1363_MODE_SCAN_TO_CHANNEL(3, 0x00F),
270 MAX1363_MODE_SCAN_TO_CHANNEL(4, 0x01F),
271 MAX1363_MODE_SCAN_TO_CHANNEL(5, 0x03F),
272 MAX1363_MODE_SCAN_TO_CHANNEL(6, 0x07F),
273 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7, 0x0C0),
274 MAX1363_MODE_SCAN_TO_CHANNEL(7, 0x0FF),
275 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8, 0x1C0),
276 MAX1363_MODE_SCAN_TO_CHANNEL(8, 0x1FF),
277 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9, 0x3C0),
278 MAX1363_MODE_SCAN_TO_CHANNEL(9, 0x3FF),
279 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10, 0x7C0),
280 MAX1363_MODE_SCAN_TO_CHANNEL(10, 0x7FF),
281 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11, 0xFC0),
282 MAX1363_MODE_SCAN_TO_CHANNEL(11, 0xFFF),
283
284 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(2, 2, 0x003000),
285 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(4, 3, 0x007000),
286 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(6, 4, 0x00F000),
287 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(8, 2, 0x018000),
288 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(8, 5, 0x01F000),
289 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(10, 3, 0x038000),
290 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(10, 6, 0x3F000),
291 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(3, 2, 0x0C0000),
292 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(5, 3, 0x1C0000),
293 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(7, 4, 0x3C0000),
294 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(9, 2, 0x600000),
295 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(9, 5, 0x7C0000),
296 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(11, 3, 0xE00000),
297 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(11, 6, 0xFC0000),
298};
299
300static const struct max1363_mode
301*max1363_match_mode(const unsigned long *mask,
302 const struct max1363_chip_info *ci)
303{
304 int i;
305 if (mask)
306 for (i = 0; i < ci->num_modes; i++)
307 if (bitmap_subset(mask,
308 max1363_mode_table[ci->mode_list[i]].
309 modemask,
310 MAX1363_MAX_CHANNELS))
311 return &max1363_mode_table[ci->mode_list[i]];
312 return NULL;
313}
314
315static int max1363_smbus_send(const struct i2c_client *client, const char *buf,
316 int count)
317{
318 int i, err;
319
320 for (i = err = 0; err == 0 && i < count; ++i)
321 err = i2c_smbus_write_byte(client, buf[i]);
322
323 return err ? err : count;
324}
325
326static int max1363_smbus_recv(const struct i2c_client *client, char *buf,
327 int count)
328{
329 int i, ret;
330
331 for (i = 0; i < count; ++i) {
332 ret = i2c_smbus_read_byte(client);
333 if (ret < 0)
334 return ret;
335 buf[i] = ret;
336 }
337
338 return count;
339}
340
341static int max1363_write_basic_config(struct max1363_state *st)
342{
343 u8 tx_buf[2] = { st->setupbyte, st->configbyte };
344
345 return st->send(st->client, tx_buf, 2);
346}
347
348static int max1363_set_scan_mode(struct max1363_state *st)
349{
350 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
351 | MAX1363_SCAN_MASK
352 | MAX1363_SE_DE_MASK);
353 st->configbyte |= st->current_mode->conf;
354
355 return max1363_write_basic_config(st);
356}
357
358static int max1363_read_single_chan(struct iio_dev *indio_dev,
359 struct iio_chan_spec const *chan,
360 int *val,
361 long m)
362{
363 int ret = 0;
364 s32 data;
365 u8 rxbuf[2];
366 struct max1363_state *st = iio_priv(indio_dev);
367 struct i2c_client *client = st->client;
368
369 ret = iio_device_claim_direct_mode(indio_dev);
370 if (ret)
371 return ret;
372 mutex_lock(&st->lock);
373
374 /*
375 * If monitor mode is enabled, the method for reading a single
376 * channel will have to be rather different and has not yet
377 * been implemented.
378 *
379 * Also, cannot read directly if buffered capture enabled.
380 */
381 if (st->monitor_on) {
382 ret = -EBUSY;
383 goto error_ret;
384 }
385
386 /* Check to see if current scan mode is correct */
387 if (st->current_mode != &max1363_mode_table[chan->address]) {
388 /* Update scan mode if needed */
389 st->current_mode = &max1363_mode_table[chan->address];
390 ret = max1363_set_scan_mode(st);
391 if (ret < 0)
392 goto error_ret;
393 }
394 if (st->chip_info->bits != 8) {
395 /* Get reading */
396 data = st->recv(client, rxbuf, 2);
397 if (data < 0) {
398 ret = data;
399 goto error_ret;
400 }
401 data = (rxbuf[1] | rxbuf[0] << 8) &
402 ((1 << st->chip_info->bits) - 1);
403 } else {
404 /* Get reading */
405 data = st->recv(client, rxbuf, 1);
406 if (data < 0) {
407 ret = data;
408 goto error_ret;
409 }
410 data = rxbuf[0];
411 }
412 *val = data;
413
414error_ret:
415 mutex_unlock(&st->lock);
416 iio_device_release_direct_mode(indio_dev);
417 return ret;
418
419}
420
421static int max1363_read_raw(struct iio_dev *indio_dev,
422 struct iio_chan_spec const *chan,
423 int *val,
424 int *val2,
425 long m)
426{
427 struct max1363_state *st = iio_priv(indio_dev);
428 int ret;
429
430 switch (m) {
431 case IIO_CHAN_INFO_RAW:
432 ret = max1363_read_single_chan(indio_dev, chan, val, m);
433 if (ret < 0)
434 return ret;
435 return IIO_VAL_INT;
436 case IIO_CHAN_INFO_SCALE:
437 *val = st->vref_uv / 1000;
438 *val2 = st->chip_info->bits;
439 return IIO_VAL_FRACTIONAL_LOG2;
440 default:
441 return -EINVAL;
442 }
443 return 0;
444}
445
446/* Applies to max1363 */
447static const enum max1363_modes max1363_mode_list[] = {
448 _s0, _s1, _s2, _s3,
449 s0to1, s0to2, s0to3,
450 d0m1, d2m3, d1m0, d3m2,
451 d0m1to2m3, d1m0to3m2,
452};
453
454static const struct iio_event_spec max1363_events[] = {
455 {
456 .type = IIO_EV_TYPE_THRESH,
457 .dir = IIO_EV_DIR_RISING,
458 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
459 BIT(IIO_EV_INFO_ENABLE),
460 }, {
461 .type = IIO_EV_TYPE_THRESH,
462 .dir = IIO_EV_DIR_FALLING,
463 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
464 BIT(IIO_EV_INFO_ENABLE),
465 },
466};
467
468#define MAX1363_CHAN_U(num, addr, si, bits, ev_spec, num_ev_spec) \
469 { \
470 .type = IIO_VOLTAGE, \
471 .indexed = 1, \
472 .channel = num, \
473 .address = addr, \
474 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
475 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
476 .datasheet_name = "AIN"#num, \
477 .scan_type = { \
478 .sign = 'u', \
479 .realbits = bits, \
480 .storagebits = (bits > 8) ? 16 : 8, \
481 .endianness = IIO_BE, \
482 }, \
483 .scan_index = si, \
484 .event_spec = ev_spec, \
485 .num_event_specs = num_ev_spec, \
486 }
487
488/* bipolar channel */
489#define MAX1363_CHAN_B(num, num2, addr, si, bits, ev_spec, num_ev_spec) \
490 { \
491 .type = IIO_VOLTAGE, \
492 .differential = 1, \
493 .indexed = 1, \
494 .channel = num, \
495 .channel2 = num2, \
496 .address = addr, \
497 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
498 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
499 .datasheet_name = "AIN"#num"-AIN"#num2, \
500 .scan_type = { \
501 .sign = 's', \
502 .realbits = bits, \
503 .storagebits = (bits > 8) ? 16 : 8, \
504 .endianness = IIO_BE, \
505 }, \
506 .scan_index = si, \
507 .event_spec = ev_spec, \
508 .num_event_specs = num_ev_spec, \
509 }
510
511#define MAX1363_4X_CHANS(bits, ev_spec, num_ev_spec) { \
512 MAX1363_CHAN_U(0, _s0, 0, bits, ev_spec, num_ev_spec), \
513 MAX1363_CHAN_U(1, _s1, 1, bits, ev_spec, num_ev_spec), \
514 MAX1363_CHAN_U(2, _s2, 2, bits, ev_spec, num_ev_spec), \
515 MAX1363_CHAN_U(3, _s3, 3, bits, ev_spec, num_ev_spec), \
516 MAX1363_CHAN_B(0, 1, d0m1, 4, bits, ev_spec, num_ev_spec), \
517 MAX1363_CHAN_B(2, 3, d2m3, 5, bits, ev_spec, num_ev_spec), \
518 MAX1363_CHAN_B(1, 0, d1m0, 6, bits, ev_spec, num_ev_spec), \
519 MAX1363_CHAN_B(3, 2, d3m2, 7, bits, ev_spec, num_ev_spec), \
520 IIO_CHAN_SOFT_TIMESTAMP(8) \
521 }
522
523static const struct iio_chan_spec max1036_channels[] =
524 MAX1363_4X_CHANS(8, NULL, 0);
525static const struct iio_chan_spec max1136_channels[] =
526 MAX1363_4X_CHANS(10, NULL, 0);
527static const struct iio_chan_spec max1236_channels[] =
528 MAX1363_4X_CHANS(12, NULL, 0);
529static const struct iio_chan_spec max1361_channels[] =
530 MAX1363_4X_CHANS(10, max1363_events, ARRAY_SIZE(max1363_events));
531static const struct iio_chan_spec max1363_channels[] =
532 MAX1363_4X_CHANS(12, max1363_events, ARRAY_SIZE(max1363_events));
533
534/* Applies to max1236, max1237 */
535static const enum max1363_modes max1236_mode_list[] = {
536 _s0, _s1, _s2, _s3,
537 s0to1, s0to2, s0to3,
538 d0m1, d2m3, d1m0, d3m2,
539 d0m1to2m3, d1m0to3m2,
540 s2to3,
541};
542
543/* Applies to max1238, max1239 */
544static const enum max1363_modes max1238_mode_list[] = {
545 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
546 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6,
547 s0to7, s0to8, s0to9, s0to10, s0to11,
548 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
549 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
550 d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11,
551 d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10,
552 s6to7, s6to8, s6to9, s6to10, s6to11,
553 d6m7to8m9, d6m7to10m11, d7m6to9m8, d7m6to11m10,
554};
555
556#define MAX1363_12X_CHANS(bits) { \
557 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
558 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
559 MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
560 MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
561 MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
562 MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
563 MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
564 MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
565 MAX1363_CHAN_U(8, _s8, 8, bits, NULL, 0), \
566 MAX1363_CHAN_U(9, _s9, 9, bits, NULL, 0), \
567 MAX1363_CHAN_U(10, _s10, 10, bits, NULL, 0), \
568 MAX1363_CHAN_U(11, _s11, 11, bits, NULL, 0), \
569 MAX1363_CHAN_B(0, 1, d0m1, 12, bits, NULL, 0), \
570 MAX1363_CHAN_B(2, 3, d2m3, 13, bits, NULL, 0), \
571 MAX1363_CHAN_B(4, 5, d4m5, 14, bits, NULL, 0), \
572 MAX1363_CHAN_B(6, 7, d6m7, 15, bits, NULL, 0), \
573 MAX1363_CHAN_B(8, 9, d8m9, 16, bits, NULL, 0), \
574 MAX1363_CHAN_B(10, 11, d10m11, 17, bits, NULL, 0), \
575 MAX1363_CHAN_B(1, 0, d1m0, 18, bits, NULL, 0), \
576 MAX1363_CHAN_B(3, 2, d3m2, 19, bits, NULL, 0), \
577 MAX1363_CHAN_B(5, 4, d5m4, 20, bits, NULL, 0), \
578 MAX1363_CHAN_B(7, 6, d7m6, 21, bits, NULL, 0), \
579 MAX1363_CHAN_B(9, 8, d9m8, 22, bits, NULL, 0), \
580 MAX1363_CHAN_B(11, 10, d11m10, 23, bits, NULL, 0), \
581 IIO_CHAN_SOFT_TIMESTAMP(24) \
582 }
583static const struct iio_chan_spec max1038_channels[] = MAX1363_12X_CHANS(8);
584static const struct iio_chan_spec max1138_channels[] = MAX1363_12X_CHANS(10);
585static const struct iio_chan_spec max1238_channels[] = MAX1363_12X_CHANS(12);
586
587static const enum max1363_modes max11607_mode_list[] = {
588 _s0, _s1, _s2, _s3,
589 s0to1, s0to2, s0to3,
590 s2to3,
591 d0m1, d2m3, d1m0, d3m2,
592 d0m1to2m3, d1m0to3m2,
593};
594
595static const enum max1363_modes max11608_mode_list[] = {
596 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7,
597 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7,
598 s6to7,
599 d0m1, d2m3, d4m5, d6m7,
600 d1m0, d3m2, d5m4, d7m6,
601 d0m1to2m3, d0m1to4m5, d0m1to6m7,
602 d1m0to3m2, d1m0to5m4, d1m0to7m6,
603};
604
605#define MAX1363_8X_CHANS(bits) { \
606 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
607 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
608 MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
609 MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
610 MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
611 MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
612 MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
613 MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
614 MAX1363_CHAN_B(0, 1, d0m1, 8, bits, NULL, 0), \
615 MAX1363_CHAN_B(2, 3, d2m3, 9, bits, NULL, 0), \
616 MAX1363_CHAN_B(4, 5, d4m5, 10, bits, NULL, 0), \
617 MAX1363_CHAN_B(6, 7, d6m7, 11, bits, NULL, 0), \
618 MAX1363_CHAN_B(1, 0, d1m0, 12, bits, NULL, 0), \
619 MAX1363_CHAN_B(3, 2, d3m2, 13, bits, NULL, 0), \
620 MAX1363_CHAN_B(5, 4, d5m4, 14, bits, NULL, 0), \
621 MAX1363_CHAN_B(7, 6, d7m6, 15, bits, NULL, 0), \
622 IIO_CHAN_SOFT_TIMESTAMP(16) \
623}
624static const struct iio_chan_spec max11602_channels[] = MAX1363_8X_CHANS(8);
625static const struct iio_chan_spec max11608_channels[] = MAX1363_8X_CHANS(10);
626static const struct iio_chan_spec max11614_channels[] = MAX1363_8X_CHANS(12);
627
628static const enum max1363_modes max11644_mode_list[] = {
629 _s0, _s1, s0to1, d0m1, d1m0,
630};
631
632#define MAX1363_2X_CHANS(bits) { \
633 MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
634 MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
635 MAX1363_CHAN_B(0, 1, d0m1, 2, bits, NULL, 0), \
636 MAX1363_CHAN_B(1, 0, d1m0, 3, bits, NULL, 0), \
637 IIO_CHAN_SOFT_TIMESTAMP(4) \
638 }
639
640static const struct iio_chan_spec max11646_channels[] = MAX1363_2X_CHANS(10);
641static const struct iio_chan_spec max11644_channels[] = MAX1363_2X_CHANS(12);
642
643enum { max1361,
644 max1362,
645 max1363,
646 max1364,
647 max1036,
648 max1037,
649 max1038,
650 max1039,
651 max1136,
652 max1137,
653 max1138,
654 max1139,
655 max1236,
656 max1237,
657 max1238,
658 max1239,
659 max11600,
660 max11601,
661 max11602,
662 max11603,
663 max11604,
664 max11605,
665 max11606,
666 max11607,
667 max11608,
668 max11609,
669 max11610,
670 max11611,
671 max11612,
672 max11613,
673 max11614,
674 max11615,
675 max11616,
676 max11617,
677 max11644,
678 max11645,
679 max11646,
680 max11647
681};
682
683static const int max1363_monitor_speeds[] = { 133000, 665000, 33300, 16600,
684 8300, 4200, 2000, 1000 };
685
686static ssize_t max1363_monitor_show_freq(struct device *dev,
687 struct device_attribute *attr,
688 char *buf)
689{
690 struct max1363_state *st = iio_priv(dev_to_iio_dev(dev));
691 return sprintf(buf, "%d\n", max1363_monitor_speeds[st->monitor_speed]);
692}
693
694static ssize_t max1363_monitor_store_freq(struct device *dev,
695 struct device_attribute *attr,
696 const char *buf,
697 size_t len)
698{
699 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
700 struct max1363_state *st = iio_priv(indio_dev);
701 int i, ret;
702 unsigned long val;
703 bool found = false;
704
705 ret = kstrtoul(buf, 10, &val);
706 if (ret)
707 return -EINVAL;
708 for (i = 0; i < ARRAY_SIZE(max1363_monitor_speeds); i++)
709 if (val == max1363_monitor_speeds[i]) {
710 found = true;
711 break;
712 }
713 if (!found)
714 return -EINVAL;
715
716 mutex_lock(&st->lock);
717 st->monitor_speed = i;
718 mutex_unlock(&st->lock);
719
720 return 0;
721}
722
723static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
724 max1363_monitor_show_freq,
725 max1363_monitor_store_freq);
726
727static IIO_CONST_ATTR(sampling_frequency_available,
728 "133000 665000 33300 16600 8300 4200 2000 1000");
729
730static int max1363_read_thresh(struct iio_dev *indio_dev,
731 const struct iio_chan_spec *chan, enum iio_event_type type,
732 enum iio_event_direction dir, enum iio_event_info info, int *val,
733 int *val2)
734{
735 struct max1363_state *st = iio_priv(indio_dev);
736 if (dir == IIO_EV_DIR_FALLING)
737 *val = st->thresh_low[chan->channel];
738 else
739 *val = st->thresh_high[chan->channel];
740 return IIO_VAL_INT;
741}
742
743static int max1363_write_thresh(struct iio_dev *indio_dev,
744 const struct iio_chan_spec *chan, enum iio_event_type type,
745 enum iio_event_direction dir, enum iio_event_info info, int val,
746 int val2)
747{
748 struct max1363_state *st = iio_priv(indio_dev);
749 /* make it handle signed correctly as well */
750 switch (st->chip_info->bits) {
751 case 10:
752 if (val > 0x3FF)
753 return -EINVAL;
754 break;
755 case 12:
756 if (val > 0xFFF)
757 return -EINVAL;
758 break;
759 }
760
761 switch (dir) {
762 case IIO_EV_DIR_FALLING:
763 st->thresh_low[chan->channel] = val;
764 break;
765 case IIO_EV_DIR_RISING:
766 st->thresh_high[chan->channel] = val;
767 break;
768 default:
769 return -EINVAL;
770 }
771
772 return 0;
773}
774
775static const u64 max1363_event_codes[] = {
776 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
777 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
778 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
779 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
780 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
781 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
782 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
783 IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
784 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
785 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
786 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
787 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
788 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
789 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
790 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
791 IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
792};
793
794static irqreturn_t max1363_event_handler(int irq, void *private)
795{
796 struct iio_dev *indio_dev = private;
797 struct max1363_state *st = iio_priv(indio_dev);
798 s64 timestamp = iio_get_time_ns(indio_dev);
799 unsigned long mask, loc;
800 u8 rx;
801 u8 tx[2] = { st->setupbyte,
802 MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0 };
803
804 st->recv(st->client, &rx, 1);
805 mask = rx;
806 for_each_set_bit(loc, &mask, 8)
807 iio_push_event(indio_dev, max1363_event_codes[loc], timestamp);
808 st->send(st->client, tx, 2);
809
810 return IRQ_HANDLED;
811}
812
813static int max1363_read_event_config(struct iio_dev *indio_dev,
814 const struct iio_chan_spec *chan, enum iio_event_type type,
815 enum iio_event_direction dir)
816{
817 struct max1363_state *st = iio_priv(indio_dev);
818 int val;
819 int number = chan->channel;
820
821 mutex_lock(&st->lock);
822 if (dir == IIO_EV_DIR_FALLING)
823 val = (1 << number) & st->mask_low;
824 else
825 val = (1 << number) & st->mask_high;
826 mutex_unlock(&st->lock);
827
828 return val;
829}
830
831static int max1363_monitor_mode_update(struct max1363_state *st, int enabled)
832{
833 u8 *tx_buf;
834 int ret, i = 3, j;
835 unsigned long numelements;
836 int len;
837 const long *modemask;
838
839 if (!enabled) {
840 /* transition to buffered capture is not currently supported */
841 st->setupbyte &= ~MAX1363_SETUP_MONITOR_SETUP;
842 st->configbyte &= ~MAX1363_SCAN_MASK;
843 st->monitor_on = false;
844 return max1363_write_basic_config(st);
845 }
846
847 /* Ensure we are in the relevant mode */
848 st->setupbyte |= MAX1363_SETUP_MONITOR_SETUP;
849 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
850 | MAX1363_SCAN_MASK
851 | MAX1363_SE_DE_MASK);
852 st->configbyte |= MAX1363_CONFIG_SCAN_MONITOR_MODE;
853 if ((st->mask_low | st->mask_high) & 0x0F) {
854 st->configbyte |= max1363_mode_table[s0to3].conf;
855 modemask = max1363_mode_table[s0to3].modemask;
856 } else if ((st->mask_low | st->mask_high) & 0x30) {
857 st->configbyte |= max1363_mode_table[d0m1to2m3].conf;
858 modemask = max1363_mode_table[d0m1to2m3].modemask;
859 } else {
860 st->configbyte |= max1363_mode_table[d1m0to3m2].conf;
861 modemask = max1363_mode_table[d1m0to3m2].modemask;
862 }
863 numelements = bitmap_weight(modemask, MAX1363_MAX_CHANNELS);
864 len = 3 * numelements + 3;
865 tx_buf = kmalloc(len, GFP_KERNEL);
866 if (!tx_buf) {
867 ret = -ENOMEM;
868 goto error_ret;
869 }
870 tx_buf[0] = st->configbyte;
871 tx_buf[1] = st->setupbyte;
872 tx_buf[2] = (st->monitor_speed << 1);
873
874 /*
875 * So we need to do yet another bit of nefarious scan mode
876 * setup to match what we need.
877 */
878 for (j = 0; j < 8; j++)
879 if (test_bit(j, modemask)) {
880 /* Establish the mode is in the scan */
881 if (st->mask_low & (1 << j)) {
882 tx_buf[i] = (st->thresh_low[j] >> 4) & 0xFF;
883 tx_buf[i + 1] = (st->thresh_low[j] << 4) & 0xF0;
884 } else if (j < 4) {
885 tx_buf[i] = 0;
886 tx_buf[i + 1] = 0;
887 } else {
888 tx_buf[i] = 0x80;
889 tx_buf[i + 1] = 0;
890 }
891 if (st->mask_high & (1 << j)) {
892 tx_buf[i + 1] |=
893 (st->thresh_high[j] >> 8) & 0x0F;
894 tx_buf[i + 2] = st->thresh_high[j] & 0xFF;
895 } else if (j < 4) {
896 tx_buf[i + 1] |= 0x0F;
897 tx_buf[i + 2] = 0xFF;
898 } else {
899 tx_buf[i + 1] |= 0x07;
900 tx_buf[i + 2] = 0xFF;
901 }
902 i += 3;
903 }
904
905
906 ret = st->send(st->client, tx_buf, len);
907 if (ret < 0)
908 goto error_ret;
909 if (ret != len) {
910 ret = -EIO;
911 goto error_ret;
912 }
913
914 /*
915 * Now that we hopefully have sensible thresholds in place it is
916 * time to turn the interrupts on.
917 * It is unclear from the data sheet if this should be necessary
918 * (i.e. whether monitor mode setup is atomic) but it appears to
919 * be in practice.
920 */
921 tx_buf[0] = st->setupbyte;
922 tx_buf[1] = MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0;
923 ret = st->send(st->client, tx_buf, 2);
924 if (ret < 0)
925 goto error_ret;
926 if (ret != 2) {
927 ret = -EIO;
928 goto error_ret;
929 }
930 ret = 0;
931 st->monitor_on = true;
932error_ret:
933
934 kfree(tx_buf);
935
936 return ret;
937}
938
939/*
940 * To keep this manageable we always use one of 3 scan modes.
941 * Scan 0...3, 0-1,2-3 and 1-0,3-2
942 */
943
944static inline int __max1363_check_event_mask(int thismask, int checkmask)
945{
946 int ret = 0;
947 /* Is it unipolar */
948 if (thismask < 4) {
949 if (checkmask & ~0x0F) {
950 ret = -EBUSY;
951 goto error_ret;
952 }
953 } else if (thismask < 6) {
954 if (checkmask & ~0x30) {
955 ret = -EBUSY;
956 goto error_ret;
957 }
958 } else if (checkmask & ~0xC0)
959 ret = -EBUSY;
960error_ret:
961 return ret;
962}
963
964static int max1363_write_event_config(struct iio_dev *indio_dev,
965 const struct iio_chan_spec *chan, enum iio_event_type type,
966 enum iio_event_direction dir, int state)
967{
968 int ret = 0;
969 struct max1363_state *st = iio_priv(indio_dev);
970 u16 unifiedmask;
971 int number = chan->channel;
972
973 ret = iio_device_claim_direct_mode(indio_dev);
974 if (ret)
975 return ret;
976 mutex_lock(&st->lock);
977
978 unifiedmask = st->mask_low | st->mask_high;
979 if (dir == IIO_EV_DIR_FALLING) {
980
981 if (state == 0)
982 st->mask_low &= ~(1 << number);
983 else {
984 ret = __max1363_check_event_mask((1 << number),
985 unifiedmask);
986 if (ret)
987 goto error_ret;
988 st->mask_low |= (1 << number);
989 }
990 } else {
991 if (state == 0)
992 st->mask_high &= ~(1 << number);
993 else {
994 ret = __max1363_check_event_mask((1 << number),
995 unifiedmask);
996 if (ret)
997 goto error_ret;
998 st->mask_high |= (1 << number);
999 }
1000 }
1001
1002 max1363_monitor_mode_update(st, !!(st->mask_high | st->mask_low));
1003error_ret:
1004 mutex_unlock(&st->lock);
1005 iio_device_release_direct_mode(indio_dev);
1006
1007 return ret;
1008}
1009
1010/*
1011 * As with scan_elements, only certain sets of these can
1012 * be combined.
1013 */
1014static struct attribute *max1363_event_attributes[] = {
1015 &iio_dev_attr_sampling_frequency.dev_attr.attr,
1016 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
1017 NULL,
1018};
1019
1020static const struct attribute_group max1363_event_attribute_group = {
1021 .attrs = max1363_event_attributes,
1022};
1023
1024static int max1363_update_scan_mode(struct iio_dev *indio_dev,
1025 const unsigned long *scan_mask)
1026{
1027 struct max1363_state *st = iio_priv(indio_dev);
1028
1029 /*
1030 * Need to figure out the current mode based upon the requested
1031 * scan mask in iio_dev
1032 */
1033 st->current_mode = max1363_match_mode(scan_mask, st->chip_info);
1034 if (!st->current_mode)
1035 return -EINVAL;
1036 max1363_set_scan_mode(st);
1037 return 0;
1038}
1039
1040static const struct iio_info max1238_info = {
1041 .read_raw = &max1363_read_raw,
1042 .update_scan_mode = &max1363_update_scan_mode,
1043};
1044
1045static const struct iio_info max1363_info = {
1046 .read_event_value = &max1363_read_thresh,
1047 .write_event_value = &max1363_write_thresh,
1048 .read_event_config = &max1363_read_event_config,
1049 .write_event_config = &max1363_write_event_config,
1050 .read_raw = &max1363_read_raw,
1051 .update_scan_mode = &max1363_update_scan_mode,
1052 .event_attrs = &max1363_event_attribute_group,
1053};
1054
1055/* max1363 and max1368 tested - rest from data sheet */
1056static const struct max1363_chip_info max1363_chip_info_tbl[] = {
1057 [max1361] = {
1058 .bits = 10,
1059 .int_vref_mv = 2048,
1060 .mode_list = max1363_mode_list,
1061 .num_modes = ARRAY_SIZE(max1363_mode_list),
1062 .default_mode = s0to3,
1063 .channels = max1361_channels,
1064 .num_channels = ARRAY_SIZE(max1361_channels),
1065 .info = &max1363_info,
1066 },
1067 [max1362] = {
1068 .bits = 10,
1069 .int_vref_mv = 4096,
1070 .mode_list = max1363_mode_list,
1071 .num_modes = ARRAY_SIZE(max1363_mode_list),
1072 .default_mode = s0to3,
1073 .channels = max1361_channels,
1074 .num_channels = ARRAY_SIZE(max1361_channels),
1075 .info = &max1363_info,
1076 },
1077 [max1363] = {
1078 .bits = 12,
1079 .int_vref_mv = 2048,
1080 .mode_list = max1363_mode_list,
1081 .num_modes = ARRAY_SIZE(max1363_mode_list),
1082 .default_mode = s0to3,
1083 .channels = max1363_channels,
1084 .num_channels = ARRAY_SIZE(max1363_channels),
1085 .info = &max1363_info,
1086 },
1087 [max1364] = {
1088 .bits = 12,
1089 .int_vref_mv = 4096,
1090 .mode_list = max1363_mode_list,
1091 .num_modes = ARRAY_SIZE(max1363_mode_list),
1092 .default_mode = s0to3,
1093 .channels = max1363_channels,
1094 .num_channels = ARRAY_SIZE(max1363_channels),
1095 .info = &max1363_info,
1096 },
1097 [max1036] = {
1098 .bits = 8,
1099 .int_vref_mv = 4096,
1100 .mode_list = max1236_mode_list,
1101 .num_modes = ARRAY_SIZE(max1236_mode_list),
1102 .default_mode = s0to3,
1103 .info = &max1238_info,
1104 .channels = max1036_channels,
1105 .num_channels = ARRAY_SIZE(max1036_channels),
1106 },
1107 [max1037] = {
1108 .bits = 8,
1109 .int_vref_mv = 2048,
1110 .mode_list = max1236_mode_list,
1111 .num_modes = ARRAY_SIZE(max1236_mode_list),
1112 .default_mode = s0to3,
1113 .info = &max1238_info,
1114 .channels = max1036_channels,
1115 .num_channels = ARRAY_SIZE(max1036_channels),
1116 },
1117 [max1038] = {
1118 .bits = 8,
1119 .int_vref_mv = 4096,
1120 .mode_list = max1238_mode_list,
1121 .num_modes = ARRAY_SIZE(max1238_mode_list),
1122 .default_mode = s0to11,
1123 .info = &max1238_info,
1124 .channels = max1038_channels,
1125 .num_channels = ARRAY_SIZE(max1038_channels),
1126 },
1127 [max1039] = {
1128 .bits = 8,
1129 .int_vref_mv = 2048,
1130 .mode_list = max1238_mode_list,
1131 .num_modes = ARRAY_SIZE(max1238_mode_list),
1132 .default_mode = s0to11,
1133 .info = &max1238_info,
1134 .channels = max1038_channels,
1135 .num_channels = ARRAY_SIZE(max1038_channels),
1136 },
1137 [max1136] = {
1138 .bits = 10,
1139 .int_vref_mv = 4096,
1140 .mode_list = max1236_mode_list,
1141 .num_modes = ARRAY_SIZE(max1236_mode_list),
1142 .default_mode = s0to3,
1143 .info = &max1238_info,
1144 .channels = max1136_channels,
1145 .num_channels = ARRAY_SIZE(max1136_channels),
1146 },
1147 [max1137] = {
1148 .bits = 10,
1149 .int_vref_mv = 2048,
1150 .mode_list = max1236_mode_list,
1151 .num_modes = ARRAY_SIZE(max1236_mode_list),
1152 .default_mode = s0to3,
1153 .info = &max1238_info,
1154 .channels = max1136_channels,
1155 .num_channels = ARRAY_SIZE(max1136_channels),
1156 },
1157 [max1138] = {
1158 .bits = 10,
1159 .int_vref_mv = 4096,
1160 .mode_list = max1238_mode_list,
1161 .num_modes = ARRAY_SIZE(max1238_mode_list),
1162 .default_mode = s0to11,
1163 .info = &max1238_info,
1164 .channels = max1138_channels,
1165 .num_channels = ARRAY_SIZE(max1138_channels),
1166 },
1167 [max1139] = {
1168 .bits = 10,
1169 .int_vref_mv = 2048,
1170 .mode_list = max1238_mode_list,
1171 .num_modes = ARRAY_SIZE(max1238_mode_list),
1172 .default_mode = s0to11,
1173 .info = &max1238_info,
1174 .channels = max1138_channels,
1175 .num_channels = ARRAY_SIZE(max1138_channels),
1176 },
1177 [max1236] = {
1178 .bits = 12,
1179 .int_vref_mv = 4096,
1180 .mode_list = max1236_mode_list,
1181 .num_modes = ARRAY_SIZE(max1236_mode_list),
1182 .default_mode = s0to3,
1183 .info = &max1238_info,
1184 .channels = max1236_channels,
1185 .num_channels = ARRAY_SIZE(max1236_channels),
1186 },
1187 [max1237] = {
1188 .bits = 12,
1189 .int_vref_mv = 2048,
1190 .mode_list = max1236_mode_list,
1191 .num_modes = ARRAY_SIZE(max1236_mode_list),
1192 .default_mode = s0to3,
1193 .info = &max1238_info,
1194 .channels = max1236_channels,
1195 .num_channels = ARRAY_SIZE(max1236_channels),
1196 },
1197 [max1238] = {
1198 .bits = 12,
1199 .int_vref_mv = 4096,
1200 .mode_list = max1238_mode_list,
1201 .num_modes = ARRAY_SIZE(max1238_mode_list),
1202 .default_mode = s0to11,
1203 .info = &max1238_info,
1204 .channels = max1238_channels,
1205 .num_channels = ARRAY_SIZE(max1238_channels),
1206 },
1207 [max1239] = {
1208 .bits = 12,
1209 .int_vref_mv = 2048,
1210 .mode_list = max1238_mode_list,
1211 .num_modes = ARRAY_SIZE(max1238_mode_list),
1212 .default_mode = s0to11,
1213 .info = &max1238_info,
1214 .channels = max1238_channels,
1215 .num_channels = ARRAY_SIZE(max1238_channels),
1216 },
1217 [max11600] = {
1218 .bits = 8,
1219 .int_vref_mv = 4096,
1220 .mode_list = max11607_mode_list,
1221 .num_modes = ARRAY_SIZE(max11607_mode_list),
1222 .default_mode = s0to3,
1223 .info = &max1238_info,
1224 .channels = max1036_channels,
1225 .num_channels = ARRAY_SIZE(max1036_channels),
1226 },
1227 [max11601] = {
1228 .bits = 8,
1229 .int_vref_mv = 2048,
1230 .mode_list = max11607_mode_list,
1231 .num_modes = ARRAY_SIZE(max11607_mode_list),
1232 .default_mode = s0to3,
1233 .info = &max1238_info,
1234 .channels = max1036_channels,
1235 .num_channels = ARRAY_SIZE(max1036_channels),
1236 },
1237 [max11602] = {
1238 .bits = 8,
1239 .int_vref_mv = 4096,
1240 .mode_list = max11608_mode_list,
1241 .num_modes = ARRAY_SIZE(max11608_mode_list),
1242 .default_mode = s0to7,
1243 .info = &max1238_info,
1244 .channels = max11602_channels,
1245 .num_channels = ARRAY_SIZE(max11602_channels),
1246 },
1247 [max11603] = {
1248 .bits = 8,
1249 .int_vref_mv = 2048,
1250 .mode_list = max11608_mode_list,
1251 .num_modes = ARRAY_SIZE(max11608_mode_list),
1252 .default_mode = s0to7,
1253 .info = &max1238_info,
1254 .channels = max11602_channels,
1255 .num_channels = ARRAY_SIZE(max11602_channels),
1256 },
1257 [max11604] = {
1258 .bits = 8,
1259 .int_vref_mv = 4096,
1260 .mode_list = max1238_mode_list,
1261 .num_modes = ARRAY_SIZE(max1238_mode_list),
1262 .default_mode = s0to11,
1263 .info = &max1238_info,
1264 .channels = max1038_channels,
1265 .num_channels = ARRAY_SIZE(max1038_channels),
1266 },
1267 [max11605] = {
1268 .bits = 8,
1269 .int_vref_mv = 2048,
1270 .mode_list = max1238_mode_list,
1271 .num_modes = ARRAY_SIZE(max1238_mode_list),
1272 .default_mode = s0to11,
1273 .info = &max1238_info,
1274 .channels = max1038_channels,
1275 .num_channels = ARRAY_SIZE(max1038_channels),
1276 },
1277 [max11606] = {
1278 .bits = 10,
1279 .int_vref_mv = 4096,
1280 .mode_list = max11607_mode_list,
1281 .num_modes = ARRAY_SIZE(max11607_mode_list),
1282 .default_mode = s0to3,
1283 .info = &max1238_info,
1284 .channels = max1136_channels,
1285 .num_channels = ARRAY_SIZE(max1136_channels),
1286 },
1287 [max11607] = {
1288 .bits = 10,
1289 .int_vref_mv = 2048,
1290 .mode_list = max11607_mode_list,
1291 .num_modes = ARRAY_SIZE(max11607_mode_list),
1292 .default_mode = s0to3,
1293 .info = &max1238_info,
1294 .channels = max1136_channels,
1295 .num_channels = ARRAY_SIZE(max1136_channels),
1296 },
1297 [max11608] = {
1298 .bits = 10,
1299 .int_vref_mv = 4096,
1300 .mode_list = max11608_mode_list,
1301 .num_modes = ARRAY_SIZE(max11608_mode_list),
1302 .default_mode = s0to7,
1303 .info = &max1238_info,
1304 .channels = max11608_channels,
1305 .num_channels = ARRAY_SIZE(max11608_channels),
1306 },
1307 [max11609] = {
1308 .bits = 10,
1309 .int_vref_mv = 2048,
1310 .mode_list = max11608_mode_list,
1311 .num_modes = ARRAY_SIZE(max11608_mode_list),
1312 .default_mode = s0to7,
1313 .info = &max1238_info,
1314 .channels = max11608_channels,
1315 .num_channels = ARRAY_SIZE(max11608_channels),
1316 },
1317 [max11610] = {
1318 .bits = 10,
1319 .int_vref_mv = 4096,
1320 .mode_list = max1238_mode_list,
1321 .num_modes = ARRAY_SIZE(max1238_mode_list),
1322 .default_mode = s0to11,
1323 .info = &max1238_info,
1324 .channels = max1138_channels,
1325 .num_channels = ARRAY_SIZE(max1138_channels),
1326 },
1327 [max11611] = {
1328 .bits = 10,
1329 .int_vref_mv = 2048,
1330 .mode_list = max1238_mode_list,
1331 .num_modes = ARRAY_SIZE(max1238_mode_list),
1332 .default_mode = s0to11,
1333 .info = &max1238_info,
1334 .channels = max1138_channels,
1335 .num_channels = ARRAY_SIZE(max1138_channels),
1336 },
1337 [max11612] = {
1338 .bits = 12,
1339 .int_vref_mv = 4096,
1340 .mode_list = max11607_mode_list,
1341 .num_modes = ARRAY_SIZE(max11607_mode_list),
1342 .default_mode = s0to3,
1343 .info = &max1238_info,
1344 .channels = max1363_channels,
1345 .num_channels = ARRAY_SIZE(max1363_channels),
1346 },
1347 [max11613] = {
1348 .bits = 12,
1349 .int_vref_mv = 2048,
1350 .mode_list = max11607_mode_list,
1351 .num_modes = ARRAY_SIZE(max11607_mode_list),
1352 .default_mode = s0to3,
1353 .info = &max1238_info,
1354 .channels = max1363_channels,
1355 .num_channels = ARRAY_SIZE(max1363_channels),
1356 },
1357 [max11614] = {
1358 .bits = 12,
1359 .int_vref_mv = 4096,
1360 .mode_list = max11608_mode_list,
1361 .num_modes = ARRAY_SIZE(max11608_mode_list),
1362 .default_mode = s0to7,
1363 .info = &max1238_info,
1364 .channels = max11614_channels,
1365 .num_channels = ARRAY_SIZE(max11614_channels),
1366 },
1367 [max11615] = {
1368 .bits = 12,
1369 .int_vref_mv = 2048,
1370 .mode_list = max11608_mode_list,
1371 .num_modes = ARRAY_SIZE(max11608_mode_list),
1372 .default_mode = s0to7,
1373 .info = &max1238_info,
1374 .channels = max11614_channels,
1375 .num_channels = ARRAY_SIZE(max11614_channels),
1376 },
1377 [max11616] = {
1378 .bits = 12,
1379 .int_vref_mv = 4096,
1380 .mode_list = max1238_mode_list,
1381 .num_modes = ARRAY_SIZE(max1238_mode_list),
1382 .default_mode = s0to11,
1383 .info = &max1238_info,
1384 .channels = max1238_channels,
1385 .num_channels = ARRAY_SIZE(max1238_channels),
1386 },
1387 [max11617] = {
1388 .bits = 12,
1389 .int_vref_mv = 2048,
1390 .mode_list = max1238_mode_list,
1391 .num_modes = ARRAY_SIZE(max1238_mode_list),
1392 .default_mode = s0to11,
1393 .info = &max1238_info,
1394 .channels = max1238_channels,
1395 .num_channels = ARRAY_SIZE(max1238_channels),
1396 },
1397 [max11644] = {
1398 .bits = 12,
1399 .int_vref_mv = 4096,
1400 .mode_list = max11644_mode_list,
1401 .num_modes = ARRAY_SIZE(max11644_mode_list),
1402 .default_mode = s0to1,
1403 .info = &max1238_info,
1404 .channels = max11644_channels,
1405 .num_channels = ARRAY_SIZE(max11644_channels),
1406 },
1407 [max11645] = {
1408 .bits = 12,
1409 .int_vref_mv = 2048,
1410 .mode_list = max11644_mode_list,
1411 .num_modes = ARRAY_SIZE(max11644_mode_list),
1412 .default_mode = s0to1,
1413 .info = &max1238_info,
1414 .channels = max11644_channels,
1415 .num_channels = ARRAY_SIZE(max11644_channels),
1416 },
1417 [max11646] = {
1418 .bits = 10,
1419 .int_vref_mv = 4096,
1420 .mode_list = max11644_mode_list,
1421 .num_modes = ARRAY_SIZE(max11644_mode_list),
1422 .default_mode = s0to1,
1423 .info = &max1238_info,
1424 .channels = max11646_channels,
1425 .num_channels = ARRAY_SIZE(max11646_channels),
1426 },
1427 [max11647] = {
1428 .bits = 10,
1429 .int_vref_mv = 2048,
1430 .mode_list = max11644_mode_list,
1431 .num_modes = ARRAY_SIZE(max11644_mode_list),
1432 .default_mode = s0to1,
1433 .info = &max1238_info,
1434 .channels = max11646_channels,
1435 .num_channels = ARRAY_SIZE(max11646_channels),
1436 },
1437};
1438
1439static int max1363_initial_setup(struct max1363_state *st)
1440{
1441 st->setupbyte = MAX1363_SETUP_INT_CLOCK
1442 | MAX1363_SETUP_UNIPOLAR
1443 | MAX1363_SETUP_NORESET;
1444
1445 if (st->vref)
1446 st->setupbyte |= MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF;
1447 else
1448 st->setupbyte |= MAX1363_SETUP_POWER_UP_INT_REF
1449 | MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT;
1450
1451 /* Set scan mode writes the config anyway so wait until then */
1452 st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
1453 st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
1454 st->configbyte = MAX1363_CONFIG_BYTE(st->configbyte);
1455
1456 return max1363_set_scan_mode(st);
1457}
1458
1459static int max1363_alloc_scan_masks(struct iio_dev *indio_dev)
1460{
1461 struct max1363_state *st = iio_priv(indio_dev);
1462 unsigned long *masks;
1463 int i;
1464
1465 masks = devm_kzalloc(&indio_dev->dev,
1466 array3_size(BITS_TO_LONGS(MAX1363_MAX_CHANNELS),
1467 sizeof(long),
1468 st->chip_info->num_modes + 1),
1469 GFP_KERNEL);
1470 if (!masks)
1471 return -ENOMEM;
1472
1473 for (i = 0; i < st->chip_info->num_modes; i++)
1474 bitmap_copy(masks + BITS_TO_LONGS(MAX1363_MAX_CHANNELS)*i,
1475 max1363_mode_table[st->chip_info->mode_list[i]]
1476 .modemask, MAX1363_MAX_CHANNELS);
1477
1478 indio_dev->available_scan_masks = masks;
1479
1480 return 0;
1481}
1482
1483static irqreturn_t max1363_trigger_handler(int irq, void *p)
1484{
1485 struct iio_poll_func *pf = p;
1486 struct iio_dev *indio_dev = pf->indio_dev;
1487 struct max1363_state *st = iio_priv(indio_dev);
1488 __u8 *rxbuf;
1489 int b_sent;
1490 size_t d_size;
1491 unsigned long numvals = bitmap_weight(st->current_mode->modemask,
1492 MAX1363_MAX_CHANNELS);
1493
1494 /* Ensure the timestamp is 8 byte aligned */
1495 if (st->chip_info->bits != 8)
1496 d_size = numvals*2;
1497 else
1498 d_size = numvals;
1499 if (indio_dev->scan_timestamp) {
1500 d_size += sizeof(s64);
1501 if (d_size % sizeof(s64))
1502 d_size += sizeof(s64) - (d_size % sizeof(s64));
1503 }
1504 /* Monitor mode prevents reading. Whilst not currently implemented
1505 * might as well have this test in here in the meantime as it does
1506 * no harm.
1507 */
1508 if (numvals == 0)
1509 goto done;
1510
1511 rxbuf = kmalloc(d_size, GFP_KERNEL);
1512 if (rxbuf == NULL)
1513 goto done;
1514 if (st->chip_info->bits != 8)
1515 b_sent = st->recv(st->client, rxbuf, numvals * 2);
1516 else
1517 b_sent = st->recv(st->client, rxbuf, numvals);
1518 if (b_sent < 0)
1519 goto done_free;
1520
1521 iio_push_to_buffers_with_timestamp(indio_dev, rxbuf,
1522 iio_get_time_ns(indio_dev));
1523
1524done_free:
1525 kfree(rxbuf);
1526done:
1527 iio_trigger_notify_done(indio_dev->trig);
1528
1529 return IRQ_HANDLED;
1530}
1531
1532#define MAX1363_COMPATIBLE(of_compatible, cfg) { \
1533 .compatible = of_compatible, \
1534 .data = &max1363_chip_info_tbl[cfg], \
1535}
1536
1537static const struct of_device_id max1363_of_match[] = {
1538 MAX1363_COMPATIBLE("maxim,max1361", max1361),
1539 MAX1363_COMPATIBLE("maxim,max1362", max1362),
1540 MAX1363_COMPATIBLE("maxim,max1363", max1363),
1541 MAX1363_COMPATIBLE("maxim,max1364", max1364),
1542 MAX1363_COMPATIBLE("maxim,max1036", max1036),
1543 MAX1363_COMPATIBLE("maxim,max1037", max1037),
1544 MAX1363_COMPATIBLE("maxim,max1038", max1038),
1545 MAX1363_COMPATIBLE("maxim,max1039", max1039),
1546 MAX1363_COMPATIBLE("maxim,max1136", max1136),
1547 MAX1363_COMPATIBLE("maxim,max1137", max1137),
1548 MAX1363_COMPATIBLE("maxim,max1138", max1138),
1549 MAX1363_COMPATIBLE("maxim,max1139", max1139),
1550 MAX1363_COMPATIBLE("maxim,max1236", max1236),
1551 MAX1363_COMPATIBLE("maxim,max1237", max1237),
1552 MAX1363_COMPATIBLE("maxim,max1238", max1238),
1553 MAX1363_COMPATIBLE("maxim,max1239", max1239),
1554 MAX1363_COMPATIBLE("maxim,max11600", max11600),
1555 MAX1363_COMPATIBLE("maxim,max11601", max11601),
1556 MAX1363_COMPATIBLE("maxim,max11602", max11602),
1557 MAX1363_COMPATIBLE("maxim,max11603", max11603),
1558 MAX1363_COMPATIBLE("maxim,max11604", max11604),
1559 MAX1363_COMPATIBLE("maxim,max11605", max11605),
1560 MAX1363_COMPATIBLE("maxim,max11606", max11606),
1561 MAX1363_COMPATIBLE("maxim,max11607", max11607),
1562 MAX1363_COMPATIBLE("maxim,max11608", max11608),
1563 MAX1363_COMPATIBLE("maxim,max11609", max11609),
1564 MAX1363_COMPATIBLE("maxim,max11610", max11610),
1565 MAX1363_COMPATIBLE("maxim,max11611", max11611),
1566 MAX1363_COMPATIBLE("maxim,max11612", max11612),
1567 MAX1363_COMPATIBLE("maxim,max11613", max11613),
1568 MAX1363_COMPATIBLE("maxim,max11614", max11614),
1569 MAX1363_COMPATIBLE("maxim,max11615", max11615),
1570 MAX1363_COMPATIBLE("maxim,max11616", max11616),
1571 MAX1363_COMPATIBLE("maxim,max11617", max11617),
1572 MAX1363_COMPATIBLE("maxim,max11644", max11644),
1573 MAX1363_COMPATIBLE("maxim,max11645", max11645),
1574 MAX1363_COMPATIBLE("maxim,max11646", max11646),
1575 MAX1363_COMPATIBLE("maxim,max11647", max11647),
1576 { /* sentinel */ }
1577};
1578MODULE_DEVICE_TABLE(of, max1363_of_match);
1579
1580static int max1363_probe(struct i2c_client *client,
1581 const struct i2c_device_id *id)
1582{
1583 int ret;
1584 struct max1363_state *st;
1585 struct iio_dev *indio_dev;
1586 struct regulator *vref;
1587
1588 indio_dev = devm_iio_device_alloc(&client->dev,
1589 sizeof(struct max1363_state));
1590 if (!indio_dev)
1591 return -ENOMEM;
1592
1593 ret = iio_map_array_register(indio_dev, client->dev.platform_data);
1594 if (ret < 0)
1595 return ret;
1596
1597 st = iio_priv(indio_dev);
1598
1599 mutex_init(&st->lock);
1600 st->reg = devm_regulator_get(&client->dev, "vcc");
1601 if (IS_ERR(st->reg)) {
1602 ret = PTR_ERR(st->reg);
1603 goto error_unregister_map;
1604 }
1605
1606 ret = regulator_enable(st->reg);
1607 if (ret)
1608 goto error_unregister_map;
1609
1610 /* this is only used for device removal purposes */
1611 i2c_set_clientdata(client, indio_dev);
1612
1613 st->chip_info = device_get_match_data(&client->dev);
1614 if (!st->chip_info)
1615 st->chip_info = &max1363_chip_info_tbl[id->driver_data];
1616 st->client = client;
1617
1618 st->vref_uv = st->chip_info->int_vref_mv * 1000;
1619 vref = devm_regulator_get_optional(&client->dev, "vref");
1620 if (!IS_ERR(vref)) {
1621 int vref_uv;
1622
1623 ret = regulator_enable(vref);
1624 if (ret)
1625 goto error_disable_reg;
1626 st->vref = vref;
1627 vref_uv = regulator_get_voltage(vref);
1628 if (vref_uv <= 0) {
1629 ret = -EINVAL;
1630 goto error_disable_reg;
1631 }
1632 st->vref_uv = vref_uv;
1633 }
1634
1635 if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1636 st->send = i2c_master_send;
1637 st->recv = i2c_master_recv;
1638 } else if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE)
1639 && st->chip_info->bits == 8) {
1640 st->send = max1363_smbus_send;
1641 st->recv = max1363_smbus_recv;
1642 } else {
1643 ret = -EOPNOTSUPP;
1644 goto error_disable_reg;
1645 }
1646
1647 ret = max1363_alloc_scan_masks(indio_dev);
1648 if (ret)
1649 goto error_disable_reg;
1650
1651 indio_dev->name = id->name;
1652 indio_dev->channels = st->chip_info->channels;
1653 indio_dev->num_channels = st->chip_info->num_channels;
1654 indio_dev->info = st->chip_info->info;
1655 indio_dev->modes = INDIO_DIRECT_MODE;
1656 ret = max1363_initial_setup(st);
1657 if (ret < 0)
1658 goto error_disable_reg;
1659
1660 ret = iio_triggered_buffer_setup(indio_dev, NULL,
1661 &max1363_trigger_handler, NULL);
1662 if (ret)
1663 goto error_disable_reg;
1664
1665 if (client->irq) {
1666 ret = devm_request_threaded_irq(&client->dev, st->client->irq,
1667 NULL,
1668 &max1363_event_handler,
1669 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
1670 "max1363_event",
1671 indio_dev);
1672
1673 if (ret)
1674 goto error_uninit_buffer;
1675 }
1676
1677 ret = iio_device_register(indio_dev);
1678 if (ret < 0)
1679 goto error_uninit_buffer;
1680
1681 return 0;
1682
1683error_uninit_buffer:
1684 iio_triggered_buffer_cleanup(indio_dev);
1685error_disable_reg:
1686 if (st->vref)
1687 regulator_disable(st->vref);
1688 regulator_disable(st->reg);
1689error_unregister_map:
1690 iio_map_array_unregister(indio_dev);
1691 return ret;
1692}
1693
1694static int max1363_remove(struct i2c_client *client)
1695{
1696 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1697 struct max1363_state *st = iio_priv(indio_dev);
1698
1699 iio_device_unregister(indio_dev);
1700 iio_triggered_buffer_cleanup(indio_dev);
1701 if (st->vref)
1702 regulator_disable(st->vref);
1703 regulator_disable(st->reg);
1704 iio_map_array_unregister(indio_dev);
1705
1706 return 0;
1707}
1708
1709static const struct i2c_device_id max1363_id[] = {
1710 { "max1361", max1361 },
1711 { "max1362", max1362 },
1712 { "max1363", max1363 },
1713 { "max1364", max1364 },
1714 { "max1036", max1036 },
1715 { "max1037", max1037 },
1716 { "max1038", max1038 },
1717 { "max1039", max1039 },
1718 { "max1136", max1136 },
1719 { "max1137", max1137 },
1720 { "max1138", max1138 },
1721 { "max1139", max1139 },
1722 { "max1236", max1236 },
1723 { "max1237", max1237 },
1724 { "max1238", max1238 },
1725 { "max1239", max1239 },
1726 { "max11600", max11600 },
1727 { "max11601", max11601 },
1728 { "max11602", max11602 },
1729 { "max11603", max11603 },
1730 { "max11604", max11604 },
1731 { "max11605", max11605 },
1732 { "max11606", max11606 },
1733 { "max11607", max11607 },
1734 { "max11608", max11608 },
1735 { "max11609", max11609 },
1736 { "max11610", max11610 },
1737 { "max11611", max11611 },
1738 { "max11612", max11612 },
1739 { "max11613", max11613 },
1740 { "max11614", max11614 },
1741 { "max11615", max11615 },
1742 { "max11616", max11616 },
1743 { "max11617", max11617 },
1744 { "max11644", max11644 },
1745 { "max11645", max11645 },
1746 { "max11646", max11646 },
1747 { "max11647", max11647 },
1748 {}
1749};
1750
1751MODULE_DEVICE_TABLE(i2c, max1363_id);
1752
1753static struct i2c_driver max1363_driver = {
1754 .driver = {
1755 .name = "max1363",
1756 .of_match_table = max1363_of_match,
1757 },
1758 .probe = max1363_probe,
1759 .remove = max1363_remove,
1760 .id_table = max1363_id,
1761};
1762module_i2c_driver(max1363_driver);
1763
1764MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
1765MODULE_DESCRIPTION("Maxim 1363 ADC");
1766MODULE_LICENSE("GPL v2");