xref: /linux/drivers/iio/adc/max1363.c (revision 24bce201d79807b668bf9d9e0aca801c5c0d5f78)
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  */
99 struct 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 */
105 enum 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  */
133 struct 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  */
165 struct 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 
237 static 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 
300 static 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 
315 static 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 
326 static 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 
341 static 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 
348 static 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 
358 static 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 
414 error_ret:
415 	mutex_unlock(&st->lock);
416 	iio_device_release_direct_mode(indio_dev);
417 	return ret;
418 
419 }
420 
421 static 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 */
447 static 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 
454 static 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 
523 static const struct iio_chan_spec max1036_channels[] =
524 	MAX1363_4X_CHANS(8, NULL, 0);
525 static const struct iio_chan_spec max1136_channels[] =
526 	MAX1363_4X_CHANS(10, NULL, 0);
527 static const struct iio_chan_spec max1236_channels[] =
528 	MAX1363_4X_CHANS(12, NULL, 0);
529 static const struct iio_chan_spec max1361_channels[] =
530 	MAX1363_4X_CHANS(10, max1363_events, ARRAY_SIZE(max1363_events));
531 static const struct iio_chan_spec max1363_channels[] =
532 	MAX1363_4X_CHANS(12, max1363_events, ARRAY_SIZE(max1363_events));
533 
534 /* Applies to max1236, max1237 */
535 static 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 */
544 static 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 	}
583 static const struct iio_chan_spec max1038_channels[] = MAX1363_12X_CHANS(8);
584 static const struct iio_chan_spec max1138_channels[] = MAX1363_12X_CHANS(10);
585 static const struct iio_chan_spec max1238_channels[] = MAX1363_12X_CHANS(12);
586 
587 static 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 
595 static 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 }
624 static const struct iio_chan_spec max11602_channels[] = MAX1363_8X_CHANS(8);
625 static const struct iio_chan_spec max11608_channels[] = MAX1363_8X_CHANS(10);
626 static const struct iio_chan_spec max11614_channels[] = MAX1363_8X_CHANS(12);
627 
628 static 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 
640 static const struct iio_chan_spec max11646_channels[] = MAX1363_2X_CHANS(10);
641 static const struct iio_chan_spec max11644_channels[] = MAX1363_2X_CHANS(12);
642 
643 enum { 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 
683 static const int max1363_monitor_speeds[] = { 133000, 665000, 33300, 16600,
684 					      8300, 4200, 2000, 1000 };
685 
686 static 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 
694 static 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 
723 static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
724 			max1363_monitor_show_freq,
725 			max1363_monitor_store_freq);
726 
727 static IIO_CONST_ATTR(sampling_frequency_available,
728 		"133000 665000 33300 16600 8300 4200 2000 1000");
729 
730 static 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 
743 static 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 
775 static 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 
794 static 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 
813 static 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 
831 static 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;
932 error_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 
944 static 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;
960 error_ret:
961 	return ret;
962 }
963 
964 static 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));
1003 error_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  */
1014 static 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 
1020 static const struct attribute_group max1363_event_attribute_group = {
1021 	.attrs = max1363_event_attributes,
1022 };
1023 
1024 static 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 
1040 static const struct iio_info max1238_info = {
1041 	.read_raw = &max1363_read_raw,
1042 	.update_scan_mode = &max1363_update_scan_mode,
1043 };
1044 
1045 static 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 */
1056 static 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 
1439 static 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 
1459 static 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 
1483 static 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 
1524 done_free:
1525 	kfree(rxbuf);
1526 done:
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 
1537 static 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 };
1578 MODULE_DEVICE_TABLE(of, max1363_of_match);
1579 
1580 static void max1363_reg_disable(void *reg)
1581 {
1582 	regulator_disable(reg);
1583 }
1584 
1585 static int max1363_probe(struct i2c_client *client,
1586 			 const struct i2c_device_id *id)
1587 {
1588 	int ret;
1589 	struct max1363_state *st;
1590 	struct iio_dev *indio_dev;
1591 	struct regulator *vref;
1592 
1593 	indio_dev = devm_iio_device_alloc(&client->dev,
1594 					  sizeof(struct max1363_state));
1595 	if (!indio_dev)
1596 		return -ENOMEM;
1597 
1598 	ret = devm_iio_map_array_register(&client->dev, indio_dev,
1599 					  client->dev.platform_data);
1600 	if (ret < 0)
1601 		return ret;
1602 
1603 	st = iio_priv(indio_dev);
1604 
1605 	mutex_init(&st->lock);
1606 	st->reg = devm_regulator_get(&client->dev, "vcc");
1607 	if (IS_ERR(st->reg))
1608 		return PTR_ERR(st->reg);
1609 
1610 	ret = regulator_enable(st->reg);
1611 	if (ret)
1612 		return ret;
1613 
1614 	ret = devm_add_action_or_reset(&client->dev, max1363_reg_disable, st->reg);
1615 	if (ret)
1616 		return ret;
1617 
1618 	st->chip_info = device_get_match_data(&client->dev);
1619 	if (!st->chip_info)
1620 		st->chip_info = &max1363_chip_info_tbl[id->driver_data];
1621 	st->client = client;
1622 
1623 	st->vref_uv = st->chip_info->int_vref_mv * 1000;
1624 	vref = devm_regulator_get_optional(&client->dev, "vref");
1625 	if (!IS_ERR(vref)) {
1626 		int vref_uv;
1627 
1628 		ret = regulator_enable(vref);
1629 		if (ret)
1630 			return ret;
1631 
1632 		ret = devm_add_action_or_reset(&client->dev, max1363_reg_disable, vref);
1633 		if (ret)
1634 			return ret;
1635 
1636 		st->vref = vref;
1637 		vref_uv = regulator_get_voltage(vref);
1638 		if (vref_uv <= 0)
1639 			return -EINVAL;
1640 
1641 		st->vref_uv = vref_uv;
1642 	}
1643 
1644 	if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1645 		st->send = i2c_master_send;
1646 		st->recv = i2c_master_recv;
1647 	} else if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE)
1648 			&& st->chip_info->bits == 8) {
1649 		st->send = max1363_smbus_send;
1650 		st->recv = max1363_smbus_recv;
1651 	} else {
1652 		return -EOPNOTSUPP;
1653 	}
1654 
1655 	ret = max1363_alloc_scan_masks(indio_dev);
1656 	if (ret)
1657 		return ret;
1658 
1659 	indio_dev->name = id->name;
1660 	indio_dev->channels = st->chip_info->channels;
1661 	indio_dev->num_channels = st->chip_info->num_channels;
1662 	indio_dev->info = st->chip_info->info;
1663 	indio_dev->modes = INDIO_DIRECT_MODE;
1664 	ret = max1363_initial_setup(st);
1665 	if (ret < 0)
1666 		return ret;
1667 
1668 	ret = devm_iio_triggered_buffer_setup(&client->dev, indio_dev, NULL,
1669 					      &max1363_trigger_handler, NULL);
1670 	if (ret)
1671 		return ret;
1672 
1673 	if (client->irq) {
1674 		ret = devm_request_threaded_irq(&client->dev, st->client->irq,
1675 					   NULL,
1676 					   &max1363_event_handler,
1677 					   IRQF_TRIGGER_RISING | IRQF_ONESHOT,
1678 					   "max1363_event",
1679 					   indio_dev);
1680 
1681 		if (ret)
1682 			return ret;
1683 	}
1684 
1685 	return devm_iio_device_register(&client->dev, indio_dev);
1686 }
1687 
1688 static const struct i2c_device_id max1363_id[] = {
1689 	{ "max1361", max1361 },
1690 	{ "max1362", max1362 },
1691 	{ "max1363", max1363 },
1692 	{ "max1364", max1364 },
1693 	{ "max1036", max1036 },
1694 	{ "max1037", max1037 },
1695 	{ "max1038", max1038 },
1696 	{ "max1039", max1039 },
1697 	{ "max1136", max1136 },
1698 	{ "max1137", max1137 },
1699 	{ "max1138", max1138 },
1700 	{ "max1139", max1139 },
1701 	{ "max1236", max1236 },
1702 	{ "max1237", max1237 },
1703 	{ "max1238", max1238 },
1704 	{ "max1239", max1239 },
1705 	{ "max11600", max11600 },
1706 	{ "max11601", max11601 },
1707 	{ "max11602", max11602 },
1708 	{ "max11603", max11603 },
1709 	{ "max11604", max11604 },
1710 	{ "max11605", max11605 },
1711 	{ "max11606", max11606 },
1712 	{ "max11607", max11607 },
1713 	{ "max11608", max11608 },
1714 	{ "max11609", max11609 },
1715 	{ "max11610", max11610 },
1716 	{ "max11611", max11611 },
1717 	{ "max11612", max11612 },
1718 	{ "max11613", max11613 },
1719 	{ "max11614", max11614 },
1720 	{ "max11615", max11615 },
1721 	{ "max11616", max11616 },
1722 	{ "max11617", max11617 },
1723 	{ "max11644", max11644 },
1724 	{ "max11645", max11645 },
1725 	{ "max11646", max11646 },
1726 	{ "max11647", max11647 },
1727 	{}
1728 };
1729 
1730 MODULE_DEVICE_TABLE(i2c, max1363_id);
1731 
1732 static struct i2c_driver max1363_driver = {
1733 	.driver = {
1734 		.name = "max1363",
1735 		.of_match_table = max1363_of_match,
1736 	},
1737 	.probe = max1363_probe,
1738 	.id_table = max1363_id,
1739 };
1740 module_i2c_driver(max1363_driver);
1741 
1742 MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
1743 MODULE_DESCRIPTION("Maxim 1363 ADC");
1744 MODULE_LICENSE("GPL v2");
1745