xref: /openbmc/linux/drivers/iio/adc/max1363.c (revision d6e0cbb1)
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  */
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  * @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  */
164 struct 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 
235 static 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 
298 static 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 
313 static 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 
324 static 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 
339 static 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 
346 static 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 
356 static 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;
407 error_ret:
408 	mutex_unlock(&indio_dev->mlock);
409 	return ret;
410 
411 }
412 
413 static 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 */
439 static 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 
446 static 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 
515 static const struct iio_chan_spec max1036_channels[] =
516 	MAX1363_4X_CHANS(8, NULL, 0);
517 static const struct iio_chan_spec max1136_channels[] =
518 	MAX1363_4X_CHANS(10, NULL, 0);
519 static const struct iio_chan_spec max1236_channels[] =
520 	MAX1363_4X_CHANS(12, NULL, 0);
521 static const struct iio_chan_spec max1361_channels[] =
522 	MAX1363_4X_CHANS(10, max1363_events, ARRAY_SIZE(max1363_events));
523 static const struct iio_chan_spec max1363_channels[] =
524 	MAX1363_4X_CHANS(12, max1363_events, ARRAY_SIZE(max1363_events));
525 
526 /* Applies to max1236, max1237 */
527 static 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 */
536 static 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 	}
575 static const struct iio_chan_spec max1038_channels[] = MAX1363_12X_CHANS(8);
576 static const struct iio_chan_spec max1138_channels[] = MAX1363_12X_CHANS(10);
577 static const struct iio_chan_spec max1238_channels[] = MAX1363_12X_CHANS(12);
578 
579 static 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 
587 static 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 }
616 static const struct iio_chan_spec max11602_channels[] = MAX1363_8X_CHANS(8);
617 static const struct iio_chan_spec max11608_channels[] = MAX1363_8X_CHANS(10);
618 static const struct iio_chan_spec max11614_channels[] = MAX1363_8X_CHANS(12);
619 
620 static 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 
632 static const struct iio_chan_spec max11646_channels[] = MAX1363_2X_CHANS(10);
633 static const struct iio_chan_spec max11644_channels[] = MAX1363_2X_CHANS(12);
634 
635 enum { 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 
675 static const int max1363_monitor_speeds[] = { 133000, 665000, 33300, 16600,
676 					      8300, 4200, 2000, 1000 };
677 
678 static 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 
686 static 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 
715 static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
716 			max1363_monitor_show_freq,
717 			max1363_monitor_store_freq);
718 
719 static IIO_CONST_ATTR(sampling_frequency_available,
720 		"133000 665000 33300 16600 8300 4200 2000 1000");
721 
722 static 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 
735 static 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 
767 static 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 
786 static 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 
805 static 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 
823 static 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;
924 error_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 
936 static 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;
952 error_ret:
953 	return ret;
954 }
955 
956 static 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));
991 error_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  */
1001 static 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 
1007 static const struct attribute_group max1363_event_attribute_group = {
1008 	.attrs = max1363_event_attributes,
1009 };
1010 
1011 static 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 
1027 static const struct iio_info max1238_info = {
1028 	.read_raw = &max1363_read_raw,
1029 	.update_scan_mode = &max1363_update_scan_mode,
1030 };
1031 
1032 static 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 */
1043 static 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 
1426 static 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 
1446 static 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 
1470 static 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 
1511 done_free:
1512 	kfree(rxbuf);
1513 done:
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 
1526 static 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 };
1567 MODULE_DEVICE_TABLE(of, max1363_of_match);
1568 #endif
1569 
1570 static 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 
1676 error_uninit_buffer:
1677 	iio_triggered_buffer_cleanup(indio_dev);
1678 error_disable_reg:
1679 	if (st->vref)
1680 		regulator_disable(st->vref);
1681 	regulator_disable(st->reg);
1682 error_unregister_map:
1683 	iio_map_array_unregister(indio_dev);
1684 	return ret;
1685 }
1686 
1687 static 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 
1702 static 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 
1744 MODULE_DEVICE_TABLE(i2c, max1363_id);
1745 
1746 static 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 };
1755 module_i2c_driver(max1363_driver);
1756 
1757 MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
1758 MODULE_DESCRIPTION("Maxim 1363 ADC");
1759 MODULE_LICENSE("GPL v2");
1760