3 * Copyright (C) 2008-2010 Jonathan Cameron
5 * based on linux/drivers/i2c/chips/max123x
6 * Copyright (C) 2002-2004 Stefan Eletzhofer
8 * based on linux/drivers/acron/char/pcf8583.c
9 * Copyright (C) 2000 Russell King
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
17 * Partial support for max1363 and similar chips.
19 * Not currently implemented.
21 * - Control of internal reference.
24 #include <linux/interrupt.h>
25 #include <linux/device.h>
26 #include <linux/kernel.h>
27 #include <linux/sysfs.h>
28 #include <linux/list.h>
29 #include <linux/i2c.h>
30 #include <linux/regulator/consumer.h>
31 #include <linux/slab.h>
32 #include <linux/err.h>
37 #include "../ring_generic.h"
41 #define MAX1363_MODE_SINGLE(_num, _mask) { \
42 .conf = MAX1363_CHANNEL_SEL(_num) \
43 | MAX1363_CONFIG_SCAN_SINGLE_1 \
44 | MAX1363_CONFIG_SE, \
48 #define MAX1363_MODE_SCAN_TO_CHANNEL(_num, _mask) { \
49 .conf = MAX1363_CHANNEL_SEL(_num) \
50 | MAX1363_CONFIG_SCAN_TO_CS \
51 | MAX1363_CONFIG_SE, \
55 /* note not available for max1363 hence naming */
56 #define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num, _mask) { \
57 .conf = MAX1363_CHANNEL_SEL(_num) \
58 | MAX1236_SCAN_MID_TO_CHANNEL \
59 | MAX1363_CONFIG_SE, \
63 #define MAX1363_MODE_DIFF_SINGLE(_nump, _numm, _mask) { \
64 .conf = MAX1363_CHANNEL_SEL(_nump) \
65 | MAX1363_CONFIG_SCAN_SINGLE_1 \
66 | MAX1363_CONFIG_DE, \
70 /* Can't think how to automate naming so specify for now */
71 #define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(_num, _numvals, _mask) { \
72 .conf = MAX1363_CHANNEL_SEL(_num) \
73 | MAX1363_CONFIG_SCAN_TO_CS \
74 | MAX1363_CONFIG_DE, \
78 /* note only available for max1363 hence naming */
79 #define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(_num, _numvals, _mask) { \
80 .conf = MAX1363_CHANNEL_SEL(_num) \
81 | MAX1236_SCAN_MID_TO_CHANNEL \
82 | MAX1363_CONFIG_SE, \
86 static const struct max1363_mode max1363_mode_table[] = {
87 /* All of the single channel options first */
88 MAX1363_MODE_SINGLE(0, 1 << 0),
89 MAX1363_MODE_SINGLE(1, 1 << 1),
90 MAX1363_MODE_SINGLE(2, 1 << 2),
91 MAX1363_MODE_SINGLE(3, 1 << 3),
92 MAX1363_MODE_SINGLE(4, 1 << 4),
93 MAX1363_MODE_SINGLE(5, 1 << 5),
94 MAX1363_MODE_SINGLE(6, 1 << 6),
95 MAX1363_MODE_SINGLE(7, 1 << 7),
96 MAX1363_MODE_SINGLE(8, 1 << 8),
97 MAX1363_MODE_SINGLE(9, 1 << 9),
98 MAX1363_MODE_SINGLE(10, 1 << 10),
99 MAX1363_MODE_SINGLE(11, 1 << 11),
101 MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12),
102 MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13),
103 MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14),
104 MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15),
105 MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16),
106 MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17),
107 MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18),
108 MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19),
109 MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20),
110 MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21),
111 MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22),
112 MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23),
114 /* The multichannel scans next */
115 MAX1363_MODE_SCAN_TO_CHANNEL(1, 0x003),
116 MAX1363_MODE_SCAN_TO_CHANNEL(2, 0x007),
117 MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3, 0x00C),
118 MAX1363_MODE_SCAN_TO_CHANNEL(3, 0x00F),
119 MAX1363_MODE_SCAN_TO_CHANNEL(4, 0x01F),
120 MAX1363_MODE_SCAN_TO_CHANNEL(5, 0x03F),
121 MAX1363_MODE_SCAN_TO_CHANNEL(6, 0x07F),
122 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7, 0x0C0),
123 MAX1363_MODE_SCAN_TO_CHANNEL(7, 0x0FF),
124 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8, 0x1C0),
125 MAX1363_MODE_SCAN_TO_CHANNEL(8, 0x1FF),
126 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9, 0x3C0),
127 MAX1363_MODE_SCAN_TO_CHANNEL(9, 0x3FF),
128 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10, 0x7C0),
129 MAX1363_MODE_SCAN_TO_CHANNEL(10, 0x7FF),
130 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11, 0xFC0),
131 MAX1363_MODE_SCAN_TO_CHANNEL(11, 0xFFF),
133 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(2, 2, 0x003000),
134 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(4, 3, 0x007000),
135 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(6, 4, 0x00F000),
136 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(8, 2, 0x018000),
137 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(8, 5, 0x01F000),
138 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(10, 3, 0x038000),
139 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(10, 6, 0x3F000),
140 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(3, 2, 0x0C0000),
141 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(5, 3, 0x1C0000),
142 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(7, 4, 0x3C0000),
143 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(9, 2, 0x600000),
144 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(9, 5, 0x7C0000),
145 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(11, 3, 0xE00000),
146 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(11, 6, 0xFC0000),
149 const struct max1363_mode
150 *max1363_match_mode(u32 mask, const struct max1363_chip_info *ci)
154 for (i = 0; i < ci->num_modes; i++)
155 if (!((~max1363_mode_table[ci->mode_list[i]].modemask) &
157 return &max1363_mode_table[ci->mode_list[i]];
161 static int max1363_write_basic_config(struct i2c_client *client,
165 u8 tx_buf[2] = {d1, d2};
167 return i2c_master_send(client, tx_buf, 2);
170 int max1363_set_scan_mode(struct max1363_state *st)
172 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
174 | MAX1363_SE_DE_MASK);
175 st->configbyte |= st->current_mode->conf;
177 return max1363_write_basic_config(st->client,
182 static int max1363_read_single_chan(struct iio_dev *indio_dev,
183 struct iio_chan_spec const *chan,
191 struct max1363_state *st = iio_priv(indio_dev);
192 struct i2c_client *client = st->client;
194 mutex_lock(&indio_dev->mlock);
196 * If monitor mode is enabled, the method for reading a single
197 * channel will have to be rather different and has not yet
200 if (st->monitor_on) {
205 /* If ring buffer capture is occurring, query the buffer */
206 if (iio_ring_enabled(indio_dev)) {
207 mask = max1363_mode_table[chan->address].modemask;
208 data = max1363_single_channel_from_ring(mask, st);
214 /* Check to see if current scan mode is correct */
215 if (st->current_mode != &max1363_mode_table[chan->address]) {
216 /* Update scan mode if needed */
217 st->current_mode = &max1363_mode_table[chan->address];
218 ret = max1363_set_scan_mode(st);
222 if (st->chip_info->bits != 8) {
224 data = i2c_master_recv(client, rxbuf, 2);
229 data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8;
232 data = i2c_master_recv(client, rxbuf, 1);
242 mutex_unlock(&indio_dev->mlock);
247 static int max1363_read_raw(struct iio_dev *indio_dev,
248 struct iio_chan_spec const *chan,
253 struct max1363_state *st = iio_priv(indio_dev);
257 ret = max1363_read_single_chan(indio_dev, chan, val, m);
261 case (1 << IIO_CHAN_INFO_SCALE_SHARED):
262 if ((1 << (st->chip_info->bits + 1)) >
263 st->chip_info->int_vref_mv) {
266 return IIO_VAL_INT_PLUS_MICRO;
268 *val = (st->chip_info->int_vref_mv)
269 >> st->chip_info->bits;
278 /* Applies to max1363 */
279 static const enum max1363_modes max1363_mode_list[] = {
282 d0m1, d2m3, d1m0, d3m2,
283 d0m1to2m3, d1m0to3m2,
286 #define MAX1363_EV_M \
287 (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) \
288 | IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING))
289 #define MAX1363_INFO_MASK (1 << IIO_CHAN_INFO_SCALE_SHARED)
291 static struct iio_chan_spec max1363_channels[] = {
292 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 0, 0, MAX1363_INFO_MASK,
293 _s0, 0, IIO_ST('u', 12, 16, 0), MAX1363_EV_M),
294 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 1, 0, MAX1363_INFO_MASK,
295 _s1, 1, IIO_ST('u', 12, 16, 0), MAX1363_EV_M),
296 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 2, 0, MAX1363_INFO_MASK,
297 _s2, 2, IIO_ST('u', 12, 16, 0), MAX1363_EV_M),
298 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 3, 0, MAX1363_INFO_MASK,
299 _s3, 3, IIO_ST('u', 12, 16, 0), MAX1363_EV_M),
300 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 0, 1, MAX1363_INFO_MASK,
301 d0m1, 4, IIO_ST('s', 12, 16, 0), MAX1363_EV_M),
302 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 2, 3, MAX1363_INFO_MASK,
303 d2m3, 5, IIO_ST('s', 12, 16, 0), MAX1363_EV_M),
304 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 1, 0, MAX1363_INFO_MASK,
305 d1m0, 6, IIO_ST('s', 12, 16, 0), MAX1363_EV_M),
306 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 3, 2, MAX1363_INFO_MASK,
307 d3m2, 7, IIO_ST('s', 12, 16, 0), MAX1363_EV_M),
308 IIO_CHAN_SOFT_TIMESTAMP(8)
311 static struct iio_chan_spec max1361_channels[] = {
312 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 0, 0, MAX1363_INFO_MASK,
313 _s0, 0, IIO_ST('u', 10, 16, 0), MAX1363_EV_M),
314 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 1, 0, MAX1363_INFO_MASK,
315 _s1, 1, IIO_ST('u', 10, 16, 0), MAX1363_EV_M),
316 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 2, 0, MAX1363_INFO_MASK,
317 _s2, 2, IIO_ST('u', 10, 16, 0), MAX1363_EV_M),
318 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 3, 0, MAX1363_INFO_MASK,
319 _s3, 3, IIO_ST('u', 10, 16, 0), MAX1363_EV_M),
320 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 0, 1, MAX1363_INFO_MASK,
321 d0m1, 4, IIO_ST('s', 10, 16, 0), MAX1363_EV_M),
322 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 2, 3, MAX1363_INFO_MASK,
323 d2m3, 5, IIO_ST('s', 10, 16, 0), MAX1363_EV_M),
324 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 1, 0, MAX1363_INFO_MASK,
325 d1m0, 6, IIO_ST('s', 10, 16, 0), MAX1363_EV_M),
326 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, 3, 2, MAX1363_INFO_MASK,
327 d3m2, 7, IIO_ST('s', 10, 16, 0), MAX1363_EV_M),
328 IIO_CHAN_SOFT_TIMESTAMP(8)
331 #define MAX1363_CHAN_U(num, address, scan_index, bits) \
332 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, num, 0, MAX1363_INFO_MASK, \
333 address, scan_index, IIO_ST('u', bits, \
334 (bits == 8) ? 8 : 16, 0), 0)
335 /* bipolar channel */
336 #define MAX1363_CHAN_B(num, num2, address, scan_index, bits) \
337 IIO_CHAN(IIO_IN_DIFF, 0, 1, 0, NULL, num, num2, MAX1363_INFO_MASK,\
338 address, scan_index, IIO_ST('s', bits, \
339 (bits == 8) ? 8 : 16, 0), 0)
341 #define MAX1363_4X_CHANS(bits) { \
342 MAX1363_CHAN_U(0, _s0, 0, bits), \
343 MAX1363_CHAN_U(1, _s1, 1, bits), \
344 MAX1363_CHAN_U(2, _s2, 2, bits), \
345 MAX1363_CHAN_U(3, _s3, 3, bits), \
346 MAX1363_CHAN_B(0, 1, d0m1, 4, bits), \
347 MAX1363_CHAN_B(2, 3, d2m3, 5, bits), \
348 MAX1363_CHAN_B(1, 0, d1m0, 6, bits), \
349 MAX1363_CHAN_B(3, 2, d3m2, 7, bits), \
350 IIO_CHAN_SOFT_TIMESTAMP(8) \
353 static struct iio_chan_spec max1036_channels[] = MAX1363_4X_CHANS(8);
354 static struct iio_chan_spec max1136_channels[] = MAX1363_4X_CHANS(10);
355 static struct iio_chan_spec max1236_channels[] = MAX1363_4X_CHANS(12);
357 /* Appies to max1236, max1237 */
358 static const enum max1363_modes max1236_mode_list[] = {
361 d0m1, d2m3, d1m0, d3m2,
362 d0m1to2m3, d1m0to3m2,
366 /* Applies to max1238, max1239 */
367 static const enum max1363_modes max1238_mode_list[] = {
368 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
369 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6,
370 s0to7, s0to8, s0to9, s0to10, s0to11,
371 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
372 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
373 d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11,
374 d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10,
375 s6to7, s6to8, s6to9, s6to10, s6to11,
376 d6m7to8m9, d6m7to10m11, d7m6to9m8, d7m6to11m10,
379 #define MAX1363_12X_CHANS(bits) { \
380 MAX1363_CHAN_U(0, _s0, 0, bits), \
381 MAX1363_CHAN_U(1, _s1, 1, bits), \
382 MAX1363_CHAN_U(2, _s2, 2, bits), \
383 MAX1363_CHAN_U(3, _s3, 3, bits), \
384 MAX1363_CHAN_U(4, _s4, 4, bits), \
385 MAX1363_CHAN_U(5, _s5, 5, bits), \
386 MAX1363_CHAN_U(6, _s6, 6, bits), \
387 MAX1363_CHAN_U(7, _s7, 7, bits), \
388 MAX1363_CHAN_U(8, _s8, 8, bits), \
389 MAX1363_CHAN_U(9, _s9, 9, bits), \
390 MAX1363_CHAN_U(10, _s10, 10, bits), \
391 MAX1363_CHAN_U(11, _s11, 11, bits), \
392 MAX1363_CHAN_B(0, 1, d0m1, 12, bits), \
393 MAX1363_CHAN_B(2, 3, d2m3, 13, bits), \
394 MAX1363_CHAN_B(4, 5, d4m5, 14, bits), \
395 MAX1363_CHAN_B(6, 7, d6m7, 15, bits), \
396 MAX1363_CHAN_B(8, 9, d8m9, 16, bits), \
397 MAX1363_CHAN_B(10, 11, d10m11, 17, bits), \
398 MAX1363_CHAN_B(1, 0, d1m0, 18, bits), \
399 MAX1363_CHAN_B(3, 2, d3m2, 19, bits), \
400 MAX1363_CHAN_B(5, 4, d5m4, 20, bits), \
401 MAX1363_CHAN_B(7, 6, d7m6, 21, bits), \
402 MAX1363_CHAN_B(9, 8, d9m8, 22, bits), \
403 MAX1363_CHAN_B(11, 10, d11m10, 23, bits), \
404 IIO_CHAN_SOFT_TIMESTAMP(24) \
406 static struct iio_chan_spec max1038_channels[] = MAX1363_12X_CHANS(8);
407 static struct iio_chan_spec max1138_channels[] = MAX1363_12X_CHANS(10);
408 static struct iio_chan_spec max1238_channels[] = MAX1363_12X_CHANS(12);
410 static const enum max1363_modes max11607_mode_list[] = {
414 d0m1, d2m3, d1m0, d3m2,
415 d0m1to2m3, d1m0to3m2,
418 static const enum max1363_modes max11608_mode_list[] = {
419 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7,
420 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7,
422 d0m1, d2m3, d4m5, d6m7,
423 d1m0, d3m2, d5m4, d7m6,
424 d0m1to2m3, d0m1to4m5, d0m1to6m7,
425 d1m0to3m2, d1m0to5m4, d1m0to7m6,
428 #define MAX1363_8X_CHANS(bits) { \
429 MAX1363_CHAN_U(0, _s0, 0, bits), \
430 MAX1363_CHAN_U(1, _s1, 1, bits), \
431 MAX1363_CHAN_U(2, _s2, 2, bits), \
432 MAX1363_CHAN_U(3, _s3, 3, bits), \
433 MAX1363_CHAN_U(4, _s4, 4, bits), \
434 MAX1363_CHAN_U(5, _s5, 5, bits), \
435 MAX1363_CHAN_U(6, _s6, 6, bits), \
436 MAX1363_CHAN_U(7, _s7, 7, bits), \
437 MAX1363_CHAN_B(0, 1, d0m1, 8, bits), \
438 MAX1363_CHAN_B(2, 3, d2m3, 9, bits), \
439 MAX1363_CHAN_B(4, 5, d4m5, 10, bits), \
440 MAX1363_CHAN_B(6, 7, d6m7, 11, bits), \
441 MAX1363_CHAN_B(1, 0, d1m0, 12, bits), \
442 MAX1363_CHAN_B(3, 2, d3m2, 13, bits), \
443 MAX1363_CHAN_B(5, 4, d5m4, 14, bits), \
444 MAX1363_CHAN_B(7, 6, d7m6, 15, bits), \
445 IIO_CHAN_SOFT_TIMESTAMP(16) \
447 static struct iio_chan_spec max11602_channels[] = MAX1363_8X_CHANS(8);
448 static struct iio_chan_spec max11608_channels[] = MAX1363_8X_CHANS(10);
449 static struct iio_chan_spec max11614_channels[] = MAX1363_8X_CHANS(12);
451 static const enum max1363_modes max11644_mode_list[] = {
452 _s0, _s1, s0to1, d0m1, d1m0,
455 #define MAX1363_2X_CHANS(bits) { \
456 MAX1363_CHAN_U(0, _s0, 0, bits), \
457 MAX1363_CHAN_U(1, _s1, 1, bits), \
458 MAX1363_CHAN_B(0, 1, d0m1, 2, bits), \
459 MAX1363_CHAN_B(1, 0, d1m0, 3, bits), \
460 IIO_CHAN_SOFT_TIMESTAMP(4) \
463 static struct iio_chan_spec max11646_channels[] = MAX1363_2X_CHANS(10);
464 static struct iio_chan_spec max11644_channels[] = MAX1363_2X_CHANS(12);
506 static const int max1363_monitor_speeds[] = { 133000, 665000, 33300, 16600,
507 8300, 4200, 2000, 1000 };
509 static ssize_t max1363_monitor_show_freq(struct device *dev,
510 struct device_attribute *attr,
513 struct max1363_state *st = iio_priv(dev_get_drvdata(dev));
514 return sprintf(buf, "%d\n", max1363_monitor_speeds[st->monitor_speed]);
517 static ssize_t max1363_monitor_store_freq(struct device *dev,
518 struct device_attribute *attr,
522 struct iio_dev *indio_dev = dev_get_drvdata(dev);
523 struct max1363_state *st = iio_priv(indio_dev);
528 ret = strict_strtoul(buf, 10, &val);
531 for (i = 0; i < ARRAY_SIZE(max1363_monitor_speeds); i++)
532 if (val == max1363_monitor_speeds[i]) {
539 mutex_lock(&indio_dev->mlock);
540 st->monitor_speed = i;
541 mutex_unlock(&indio_dev->mlock);
546 static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
547 max1363_monitor_show_freq,
548 max1363_monitor_store_freq);
550 static IIO_CONST_ATTR(sampling_frequency_available,
551 "133000 665000 33300 16600 8300 4200 2000 1000");
553 static int max1363_read_thresh(struct iio_dev *indio_dev,
557 struct max1363_state *st = iio_priv(indio_dev);
558 if (IIO_EVENT_CODE_EXTRACT_DIR(event_code) == IIO_EV_DIR_FALLING)
559 *val = st->thresh_low[IIO_EVENT_CODE_EXTRACT_NUM(event_code)];
561 *val = st->thresh_high[IIO_EVENT_CODE_EXTRACT_NUM(event_code)];
565 static int max1363_write_thresh(struct iio_dev *indio_dev,
569 struct max1363_state *st = iio_priv(indio_dev);
570 /* make it handle signed correctly as well */
571 switch (st->chip_info->bits) {
582 switch (IIO_EVENT_CODE_EXTRACT_DIR(event_code)) {
583 case IIO_EV_DIR_FALLING:
584 st->thresh_low[IIO_EVENT_CODE_EXTRACT_NUM(event_code)] = val;
586 case IIO_EV_DIR_RISING:
587 st->thresh_high[IIO_EVENT_CODE_EXTRACT_NUM(event_code)] = val;
594 static const int max1363_event_codes[] = {
595 IIO_EVENT_CODE_IN_LOW_THRESH(3), IIO_EVENT_CODE_IN_HIGH_THRESH(3),
596 IIO_EVENT_CODE_IN_LOW_THRESH(2), IIO_EVENT_CODE_IN_HIGH_THRESH(2),
597 IIO_EVENT_CODE_IN_LOW_THRESH(1), IIO_EVENT_CODE_IN_HIGH_THRESH(1),
598 IIO_EVENT_CODE_IN_LOW_THRESH(0), IIO_EVENT_CODE_IN_HIGH_THRESH(0)
601 static irqreturn_t max1363_event_handler(int irq, void *private)
603 struct iio_dev *indio_dev = private;
604 struct max1363_state *st = iio_priv(indio_dev);
605 s64 timestamp = iio_get_time_ns();
606 unsigned long mask, loc;
608 u8 tx[2] = { st->setupbyte,
609 MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0 };
611 i2c_master_recv(st->client, &rx, 1);
613 for_each_set_bit(loc, &mask, 8)
614 iio_push_event(indio_dev, 0, max1363_event_codes[loc],
616 i2c_master_send(st->client, tx, 2);
621 static int max1363_read_event_config(struct iio_dev *indio_dev,
624 struct max1363_state *st = iio_priv(indio_dev);
627 int number = IIO_EVENT_CODE_EXTRACT_NUM(event_code);
628 mutex_lock(&indio_dev->mlock);
629 if (IIO_EVENT_CODE_EXTRACT_DIR(event_code) == IIO_EV_DIR_FALLING)
630 val = (1 << number) & st->mask_low;
632 val = (1 << number) & st->mask_high;
633 mutex_unlock(&indio_dev->mlock);
638 static int max1363_monitor_mode_update(struct max1363_state *st, int enabled)
642 unsigned long numelements;
647 /* transition to ring capture is not currently supported */
648 st->setupbyte &= ~MAX1363_SETUP_MONITOR_SETUP;
649 st->configbyte &= ~MAX1363_SCAN_MASK;
650 st->monitor_on = false;
651 return max1363_write_basic_config(st->client,
656 /* Ensure we are in the relevant mode */
657 st->setupbyte |= MAX1363_SETUP_MONITOR_SETUP;
658 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
660 | MAX1363_SE_DE_MASK);
661 st->configbyte |= MAX1363_CONFIG_SCAN_MONITOR_MODE;
662 if ((st->mask_low | st->mask_high) & 0x0F) {
663 st->configbyte |= max1363_mode_table[s0to3].conf;
664 modemask = max1363_mode_table[s0to3].modemask;
665 } else if ((st->mask_low | st->mask_high) & 0x30) {
666 st->configbyte |= max1363_mode_table[d0m1to2m3].conf;
667 modemask = max1363_mode_table[d0m1to2m3].modemask;
669 st->configbyte |= max1363_mode_table[d1m0to3m2].conf;
670 modemask = max1363_mode_table[d1m0to3m2].modemask;
672 numelements = hweight_long(modemask);
673 len = 3 * numelements + 3;
674 tx_buf = kmalloc(len, GFP_KERNEL);
679 tx_buf[0] = st->configbyte;
680 tx_buf[1] = st->setupbyte;
681 tx_buf[2] = (st->monitor_speed << 1);
684 * So we need to do yet another bit of nefarious scan mode
685 * setup to match what we need.
687 for (j = 0; j < 8; j++)
688 if (modemask & (1 << j)) {
689 /* Establish the mode is in the scan */
690 if (st->mask_low & (1 << j)) {
691 tx_buf[i] = (st->thresh_low[j] >> 4) & 0xFF;
692 tx_buf[i + 1] = (st->thresh_low[j] << 4) & 0xF0;
700 if (st->mask_high & (1 << j)) {
702 (st->thresh_high[j] >> 8) & 0x0F;
703 tx_buf[i + 2] = st->thresh_high[j] & 0xFF;
705 tx_buf[i + 1] |= 0x0F;
706 tx_buf[i + 2] = 0xFF;
708 tx_buf[i + 1] |= 0x07;
709 tx_buf[i + 2] = 0xFF;
715 ret = i2c_master_send(st->client, tx_buf, len);
724 * Now that we hopefully have sensible thresholds in place it is
725 * time to turn the interrupts on.
726 * It is unclear from the data sheet if this should be necessary
727 * (i.e. whether monitor mode setup is atomic) but it appears to
730 tx_buf[0] = st->setupbyte;
731 tx_buf[1] = MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0;
732 ret = i2c_master_send(st->client, tx_buf, 2);
740 st->monitor_on = true;
749 * To keep this manageable we always use one of 3 scan modes.
750 * Scan 0...3, 0-1,2-3 and 1-0,3-2
753 static inline int __max1363_check_event_mask(int thismask, int checkmask)
758 if (checkmask & ~0x0F) {
762 } else if (thismask < 6) {
763 if (checkmask & ~0x30) {
767 } else if (checkmask & ~0xC0)
773 static int max1363_write_event_config(struct iio_dev *indio_dev,
778 struct max1363_state *st = iio_priv(indio_dev);
780 int number = IIO_EVENT_CODE_EXTRACT_NUM(event_code);
782 mutex_lock(&indio_dev->mlock);
783 unifiedmask = st->mask_low | st->mask_high;
784 if (IIO_EVENT_CODE_EXTRACT_DIR(event_code) == IIO_EV_DIR_FALLING) {
787 st->mask_low &= ~(1 << number);
789 ret = __max1363_check_event_mask((1 << number),
793 st->mask_low |= (1 << number);
797 st->mask_high &= ~(1 << number);
799 ret = __max1363_check_event_mask((1 << number),
803 st->mask_high |= (1 << number);
807 max1363_monitor_mode_update(st, !!(st->mask_high | st->mask_low));
809 mutex_unlock(&indio_dev->mlock);
815 * As with scan_elements, only certain sets of these can
818 static struct attribute *max1363_event_attributes[] = {
819 &iio_dev_attr_sampling_frequency.dev_attr.attr,
820 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
824 static struct attribute_group max1363_event_attribute_group = {
825 .attrs = max1363_event_attributes,
828 #define MAX1363_EVENT_FUNCS \
831 static const struct iio_info max1238_info = {
832 .read_raw = &max1363_read_raw,
833 .driver_module = THIS_MODULE,
836 static const struct iio_info max1363_info = {
837 .read_event_value = &max1363_read_thresh,
838 .write_event_value = &max1363_write_thresh,
839 .read_event_config = &max1363_read_event_config,
840 .write_event_config = &max1363_write_event_config,
841 .read_raw = &max1363_read_raw,
842 .driver_module = THIS_MODULE,
843 .num_interrupt_lines = 1,
844 .event_attrs = &max1363_event_attribute_group,
847 /* max1363 and max1368 tested - rest from data sheet */
848 static const struct max1363_chip_info max1363_chip_info_tbl[] = {
852 .mode_list = max1363_mode_list,
853 .num_modes = ARRAY_SIZE(max1363_mode_list),
854 .default_mode = s0to3,
855 .channels = max1361_channels,
856 .num_channels = ARRAY_SIZE(max1361_channels),
857 .info = &max1363_info,
862 .mode_list = max1363_mode_list,
863 .num_modes = ARRAY_SIZE(max1363_mode_list),
864 .default_mode = s0to3,
865 .channels = max1361_channels,
866 .num_channels = ARRAY_SIZE(max1361_channels),
867 .info = &max1363_info,
872 .mode_list = max1363_mode_list,
873 .num_modes = ARRAY_SIZE(max1363_mode_list),
874 .default_mode = s0to3,
875 .channels = max1363_channels,
876 .num_channels = ARRAY_SIZE(max1363_channels),
877 .info = &max1363_info,
882 .mode_list = max1363_mode_list,
883 .num_modes = ARRAY_SIZE(max1363_mode_list),
884 .default_mode = s0to3,
885 .channels = max1363_channels,
886 .num_channels = ARRAY_SIZE(max1363_channels),
887 .info = &max1363_info,
892 .mode_list = max1236_mode_list,
893 .num_modes = ARRAY_SIZE(max1236_mode_list),
894 .default_mode = s0to3,
895 .info = &max1238_info,
896 .channels = max1036_channels,
897 .num_channels = ARRAY_SIZE(max1036_channels),
902 .mode_list = max1236_mode_list,
903 .num_modes = ARRAY_SIZE(max1236_mode_list),
904 .default_mode = s0to3,
905 .info = &max1238_info,
906 .channels = max1036_channels,
907 .num_channels = ARRAY_SIZE(max1036_channels),
912 .mode_list = max1238_mode_list,
913 .num_modes = ARRAY_SIZE(max1238_mode_list),
914 .default_mode = s0to11,
915 .info = &max1238_info,
916 .channels = max1038_channels,
917 .num_channels = ARRAY_SIZE(max1038_channels),
922 .mode_list = max1238_mode_list,
923 .num_modes = ARRAY_SIZE(max1238_mode_list),
924 .default_mode = s0to11,
925 .info = &max1238_info,
926 .channels = max1038_channels,
927 .num_channels = ARRAY_SIZE(max1038_channels),
932 .mode_list = max1236_mode_list,
933 .num_modes = ARRAY_SIZE(max1236_mode_list),
934 .default_mode = s0to3,
935 .info = &max1238_info,
936 .channels = max1136_channels,
937 .num_channels = ARRAY_SIZE(max1136_channels),
942 .mode_list = max1236_mode_list,
943 .num_modes = ARRAY_SIZE(max1236_mode_list),
944 .default_mode = s0to3,
945 .info = &max1238_info,
946 .channels = max1136_channels,
947 .num_channels = ARRAY_SIZE(max1136_channels),
952 .mode_list = max1238_mode_list,
953 .num_modes = ARRAY_SIZE(max1238_mode_list),
954 .default_mode = s0to11,
955 .info = &max1238_info,
956 .channels = max1138_channels,
957 .num_channels = ARRAY_SIZE(max1138_channels),
962 .mode_list = max1238_mode_list,
963 .num_modes = ARRAY_SIZE(max1238_mode_list),
964 .default_mode = s0to11,
965 .info = &max1238_info,
966 .channels = max1138_channels,
967 .num_channels = ARRAY_SIZE(max1138_channels),
972 .mode_list = max1236_mode_list,
973 .num_modes = ARRAY_SIZE(max1236_mode_list),
974 .default_mode = s0to3,
975 .info = &max1238_info,
976 .channels = max1236_channels,
977 .num_channels = ARRAY_SIZE(max1236_channels),
982 .mode_list = max1236_mode_list,
983 .num_modes = ARRAY_SIZE(max1236_mode_list),
984 .default_mode = s0to3,
985 .info = &max1238_info,
986 .channels = max1236_channels,
987 .num_channels = ARRAY_SIZE(max1236_channels),
992 .mode_list = max1238_mode_list,
993 .num_modes = ARRAY_SIZE(max1238_mode_list),
994 .default_mode = s0to11,
995 .info = &max1238_info,
996 .channels = max1238_channels,
997 .num_channels = ARRAY_SIZE(max1238_channels),
1001 .int_vref_mv = 2048,
1002 .mode_list = max1238_mode_list,
1003 .num_modes = ARRAY_SIZE(max1238_mode_list),
1004 .default_mode = s0to11,
1005 .info = &max1238_info,
1006 .channels = max1238_channels,
1007 .num_channels = ARRAY_SIZE(max1238_channels),
1011 .int_vref_mv = 4096,
1012 .mode_list = max11607_mode_list,
1013 .num_modes = ARRAY_SIZE(max11607_mode_list),
1014 .default_mode = s0to3,
1015 .info = &max1238_info,
1016 .channels = max1036_channels,
1017 .num_channels = ARRAY_SIZE(max1036_channels),
1021 .int_vref_mv = 2048,
1022 .mode_list = max11607_mode_list,
1023 .num_modes = ARRAY_SIZE(max11607_mode_list),
1024 .default_mode = s0to3,
1025 .info = &max1238_info,
1026 .channels = max1036_channels,
1027 .num_channels = ARRAY_SIZE(max1036_channels),
1031 .int_vref_mv = 4096,
1032 .mode_list = max11608_mode_list,
1033 .num_modes = ARRAY_SIZE(max11608_mode_list),
1034 .default_mode = s0to7,
1035 .info = &max1238_info,
1036 .channels = max11602_channels,
1037 .num_channels = ARRAY_SIZE(max11602_channels),
1041 .int_vref_mv = 2048,
1042 .mode_list = max11608_mode_list,
1043 .num_modes = ARRAY_SIZE(max11608_mode_list),
1044 .default_mode = s0to7,
1045 .info = &max1238_info,
1046 .channels = max11602_channels,
1047 .num_channels = ARRAY_SIZE(max11602_channels),
1051 .int_vref_mv = 4098,
1052 .mode_list = max1238_mode_list,
1053 .num_modes = ARRAY_SIZE(max1238_mode_list),
1054 .default_mode = s0to11,
1055 .info = &max1238_info,
1056 .channels = max1238_channels,
1057 .num_channels = ARRAY_SIZE(max1238_channels),
1061 .int_vref_mv = 2048,
1062 .mode_list = max1238_mode_list,
1063 .num_modes = ARRAY_SIZE(max1238_mode_list),
1064 .default_mode = s0to11,
1065 .info = &max1238_info,
1066 .channels = max1238_channels,
1067 .num_channels = ARRAY_SIZE(max1238_channels),
1071 .int_vref_mv = 4096,
1072 .mode_list = max11607_mode_list,
1073 .num_modes = ARRAY_SIZE(max11607_mode_list),
1074 .default_mode = s0to3,
1075 .info = &max1238_info,
1076 .channels = max1136_channels,
1077 .num_channels = ARRAY_SIZE(max1136_channels),
1081 .int_vref_mv = 2048,
1082 .mode_list = max11607_mode_list,
1083 .num_modes = ARRAY_SIZE(max11607_mode_list),
1084 .default_mode = s0to3,
1085 .info = &max1238_info,
1086 .channels = max1136_channels,
1087 .num_channels = ARRAY_SIZE(max1136_channels),
1091 .int_vref_mv = 4096,
1092 .mode_list = max11608_mode_list,
1093 .num_modes = ARRAY_SIZE(max11608_mode_list),
1094 .default_mode = s0to7,
1095 .info = &max1238_info,
1096 .channels = max11608_channels,
1097 .num_channels = ARRAY_SIZE(max11608_channels),
1101 .int_vref_mv = 2048,
1102 .mode_list = max11608_mode_list,
1103 .num_modes = ARRAY_SIZE(max11608_mode_list),
1104 .default_mode = s0to7,
1105 .info = &max1238_info,
1106 .channels = max11608_channels,
1107 .num_channels = ARRAY_SIZE(max11608_channels),
1111 .int_vref_mv = 4098,
1112 .mode_list = max1238_mode_list,
1113 .num_modes = ARRAY_SIZE(max1238_mode_list),
1114 .default_mode = s0to11,
1115 .info = &max1238_info,
1116 .channels = max1238_channels,
1117 .num_channels = ARRAY_SIZE(max1238_channels),
1121 .int_vref_mv = 2048,
1122 .mode_list = max1238_mode_list,
1123 .num_modes = ARRAY_SIZE(max1238_mode_list),
1124 .default_mode = s0to11,
1125 .info = &max1238_info,
1126 .channels = max1238_channels,
1127 .num_channels = ARRAY_SIZE(max1238_channels),
1131 .int_vref_mv = 4096,
1132 .mode_list = max11607_mode_list,
1133 .num_modes = ARRAY_SIZE(max11607_mode_list),
1134 .default_mode = s0to3,
1135 .info = &max1238_info,
1136 .channels = max1363_channels,
1137 .num_channels = ARRAY_SIZE(max1363_channels),
1141 .int_vref_mv = 2048,
1142 .mode_list = max11607_mode_list,
1143 .num_modes = ARRAY_SIZE(max11607_mode_list),
1144 .default_mode = s0to3,
1145 .info = &max1238_info,
1146 .channels = max1363_channels,
1147 .num_channels = ARRAY_SIZE(max1363_channels),
1151 .int_vref_mv = 4096,
1152 .mode_list = max11608_mode_list,
1153 .num_modes = ARRAY_SIZE(max11608_mode_list),
1154 .default_mode = s0to7,
1155 .info = &max1238_info,
1156 .channels = max11614_channels,
1157 .num_channels = ARRAY_SIZE(max11614_channels),
1161 .int_vref_mv = 2048,
1162 .mode_list = max11608_mode_list,
1163 .num_modes = ARRAY_SIZE(max11608_mode_list),
1164 .default_mode = s0to7,
1165 .info = &max1238_info,
1166 .channels = max11614_channels,
1167 .num_channels = ARRAY_SIZE(max11614_channels),
1171 .int_vref_mv = 4098,
1172 .mode_list = max1238_mode_list,
1173 .num_modes = ARRAY_SIZE(max1238_mode_list),
1174 .default_mode = s0to11,
1175 .info = &max1238_info,
1176 .channels = max1238_channels,
1177 .num_channels = ARRAY_SIZE(max1238_channels),
1181 .int_vref_mv = 2048,
1182 .mode_list = max1238_mode_list,
1183 .num_modes = ARRAY_SIZE(max1238_mode_list),
1184 .default_mode = s0to11,
1185 .info = &max1238_info,
1186 .channels = max1238_channels,
1187 .num_channels = ARRAY_SIZE(max1238_channels),
1191 .int_vref_mv = 2048,
1192 .mode_list = max11644_mode_list,
1193 .num_modes = ARRAY_SIZE(max11644_mode_list),
1194 .default_mode = s0to1,
1195 .info = &max1238_info,
1196 .channels = max11644_channels,
1197 .num_channels = ARRAY_SIZE(max11644_channels),
1201 .int_vref_mv = 4096,
1202 .mode_list = max11644_mode_list,
1203 .num_modes = ARRAY_SIZE(max11644_mode_list),
1204 .default_mode = s0to1,
1205 .info = &max1238_info,
1206 .channels = max11644_channels,
1207 .num_channels = ARRAY_SIZE(max11644_channels),
1211 .int_vref_mv = 2048,
1212 .mode_list = max11644_mode_list,
1213 .num_modes = ARRAY_SIZE(max11644_mode_list),
1214 .default_mode = s0to1,
1215 .info = &max1238_info,
1216 .channels = max11646_channels,
1217 .num_channels = ARRAY_SIZE(max11646_channels),
1221 .int_vref_mv = 4096,
1222 .mode_list = max11644_mode_list,
1223 .num_modes = ARRAY_SIZE(max11644_mode_list),
1224 .default_mode = s0to1,
1225 .info = &max1238_info,
1226 .channels = max11646_channels,
1227 .num_channels = ARRAY_SIZE(max11646_channels),
1233 static int max1363_initial_setup(struct max1363_state *st)
1235 st->setupbyte = MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD
1236 | MAX1363_SETUP_POWER_UP_INT_REF
1237 | MAX1363_SETUP_INT_CLOCK
1238 | MAX1363_SETUP_UNIPOLAR
1239 | MAX1363_SETUP_NORESET;
1241 /* Set scan mode writes the config anyway so wait until then*/
1242 st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
1243 st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
1244 st->configbyte = MAX1363_CONFIG_BYTE(st->configbyte);
1246 return max1363_set_scan_mode(st);
1249 static int __devinit max1363_probe(struct i2c_client *client,
1250 const struct i2c_device_id *id)
1252 int ret, i, regdone = 0;
1253 struct max1363_state *st;
1254 struct iio_dev *indio_dev;
1255 struct regulator *reg;
1257 reg = regulator_get(&client->dev, "vcc");
1263 ret = regulator_enable(reg);
1267 indio_dev = iio_allocate_device(sizeof(struct max1363_state));
1268 if (indio_dev == NULL) {
1270 goto error_disable_reg;
1272 st = iio_priv(indio_dev);
1274 /* this is only used for device removal purposes */
1275 i2c_set_clientdata(client, indio_dev);
1277 st->chip_info = &max1363_chip_info_tbl[id->driver_data];
1278 st->client = client;
1280 indio_dev->available_scan_masks
1281 = kzalloc(sizeof(*indio_dev->available_scan_masks)*
1282 (st->chip_info->num_modes + 1), GFP_KERNEL);
1283 if (!indio_dev->available_scan_masks) {
1285 goto error_free_device;
1288 for (i = 0; i < st->chip_info->num_modes; i++)
1289 indio_dev->available_scan_masks[i] =
1290 max1363_mode_table[st->chip_info->mode_list[i]]
1292 /* Estabilish that the iio_dev is a child of the i2c device */
1293 indio_dev->dev.parent = &client->dev;
1294 indio_dev->name = id->name;
1296 indio_dev->info = st->chip_info->info;
1297 indio_dev->modes = INDIO_DIRECT_MODE;
1298 ret = max1363_initial_setup(st);
1300 goto error_free_available_scan_masks;
1302 ret = max1363_register_ring_funcs_and_init(indio_dev);
1304 goto error_free_available_scan_masks;
1306 ret = iio_device_register(indio_dev);
1308 goto error_cleanup_ring;
1310 ret = iio_ring_buffer_register_ex(indio_dev->ring, 0,
1311 st->chip_info->channels,
1312 st->chip_info->num_channels);
1314 goto error_cleanup_ring;
1317 ret = request_threaded_irq(st->client->irq,
1319 &max1363_event_handler,
1320 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
1325 goto error_uninit_ring;
1331 iio_ring_buffer_unregister(indio_dev->ring);
1333 max1363_ring_cleanup(indio_dev);
1334 error_free_available_scan_masks:
1335 kfree(indio_dev->available_scan_masks);
1338 iio_free_device(indio_dev);
1340 iio_device_unregister(indio_dev);
1342 regulator_disable(reg);
1349 static int max1363_remove(struct i2c_client *client)
1351 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1352 struct max1363_state *st = iio_priv(indio_dev);
1353 struct regulator *reg = st->reg;
1356 free_irq(st->client->irq, indio_dev);
1357 iio_ring_buffer_unregister(indio_dev->ring);
1358 max1363_ring_cleanup(indio_dev);
1359 kfree(indio_dev->available_scan_masks);
1361 regulator_disable(reg);
1364 iio_device_unregister(indio_dev);
1369 static const struct i2c_device_id max1363_id[] = {
1370 { "max1361", max1361 },
1371 { "max1362", max1362 },
1372 { "max1363", max1363 },
1373 { "max1364", max1364 },
1374 { "max1036", max1036 },
1375 { "max1037", max1037 },
1376 { "max1038", max1038 },
1377 { "max1039", max1039 },
1378 { "max1136", max1136 },
1379 { "max1137", max1137 },
1380 { "max1138", max1138 },
1381 { "max1139", max1139 },
1382 { "max1236", max1236 },
1383 { "max1237", max1237 },
1384 { "max1238", max1238 },
1385 { "max1239", max1239 },
1386 { "max11600", max11600 },
1387 { "max11601", max11601 },
1388 { "max11602", max11602 },
1389 { "max11603", max11603 },
1390 { "max11604", max11604 },
1391 { "max11605", max11605 },
1392 { "max11606", max11606 },
1393 { "max11607", max11607 },
1394 { "max11608", max11608 },
1395 { "max11609", max11609 },
1396 { "max11610", max11610 },
1397 { "max11611", max11611 },
1398 { "max11612", max11612 },
1399 { "max11613", max11613 },
1400 { "max11614", max11614 },
1401 { "max11615", max11615 },
1402 { "max11616", max11616 },
1403 { "max11617", max11617 },
1407 MODULE_DEVICE_TABLE(i2c, max1363_id);
1409 static struct i2c_driver max1363_driver = {
1413 .probe = max1363_probe,
1414 .remove = max1363_remove,
1415 .id_table = max1363_id,
1418 static __init int max1363_init(void)
1420 return i2c_add_driver(&max1363_driver);
1423 static __exit void max1363_exit(void)
1425 i2c_del_driver(&max1363_driver);
1428 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
1429 MODULE_DESCRIPTION("Maxim 1363 ADC");
1430 MODULE_LICENSE("GPL v2");
1432 module_init(max1363_init);
1433 module_exit(max1363_exit);