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 * - Monitor interrrupt generation.
22 * - Control of internal reference.
25 #include <linux/interrupt.h>
26 #include <linux/gpio.h>
27 #include <linux/workqueue.h>
28 #include <linux/device.h>
29 #include <linux/kernel.h>
30 #include <linux/sysfs.h>
31 #include <linux/list.h>
32 #include <linux/i2c.h>
33 #include <linux/rtc.h>
34 #include <linux/regulator/consumer.h>
35 #include <linux/slab.h>
40 #include "../ring_generic.h"
44 /* Here we claim all are 16 bits. This currently does no harm and saves
45 * us a lot of scan element listings */
47 #define MAX1363_SCAN_EL(number) \
48 IIO_SCAN_EL_C(in##number, number, IIO_UNSIGNED(16), 0, NULL);
49 #define MAX1363_SCAN_EL_D(p, n, number) \
50 IIO_SCAN_NAMED_EL_C(in##p##m##in##n, in##p-in##n, \
51 number, IIO_SIGNED(16), 0 , NULL);
53 static MAX1363_SCAN_EL(0);
54 static MAX1363_SCAN_EL(1);
55 static MAX1363_SCAN_EL(2);
56 static MAX1363_SCAN_EL(3);
57 static MAX1363_SCAN_EL(4);
58 static MAX1363_SCAN_EL(5);
59 static MAX1363_SCAN_EL(6);
60 static MAX1363_SCAN_EL(7);
61 static MAX1363_SCAN_EL(8);
62 static MAX1363_SCAN_EL(9);
63 static MAX1363_SCAN_EL(10);
64 static MAX1363_SCAN_EL(11);
65 static MAX1363_SCAN_EL_D(0, 1, 12);
66 static MAX1363_SCAN_EL_D(2, 3, 13);
67 static MAX1363_SCAN_EL_D(4, 5, 14);
68 static MAX1363_SCAN_EL_D(6, 7, 15);
69 static MAX1363_SCAN_EL_D(8, 9, 16);
70 static MAX1363_SCAN_EL_D(10, 11, 17);
71 static MAX1363_SCAN_EL_D(1, 0, 18);
72 static MAX1363_SCAN_EL_D(3, 2, 19);
73 static MAX1363_SCAN_EL_D(5, 4, 20);
74 static MAX1363_SCAN_EL_D(7, 6, 21);
75 static MAX1363_SCAN_EL_D(9, 8, 22);
76 static MAX1363_SCAN_EL_D(11, 10, 23);
78 static const struct max1363_mode max1363_mode_table[] = {
79 /* All of the single channel options first */
80 MAX1363_MODE_SINGLE(0, 1 << 0),
81 MAX1363_MODE_SINGLE(1, 1 << 1),
82 MAX1363_MODE_SINGLE(2, 1 << 2),
83 MAX1363_MODE_SINGLE(3, 1 << 3),
84 MAX1363_MODE_SINGLE(4, 1 << 4),
85 MAX1363_MODE_SINGLE(5, 1 << 5),
86 MAX1363_MODE_SINGLE(6, 1 << 6),
87 MAX1363_MODE_SINGLE(7, 1 << 7),
88 MAX1363_MODE_SINGLE(8, 1 << 8),
89 MAX1363_MODE_SINGLE(9, 1 << 9),
90 MAX1363_MODE_SINGLE(10, 1 << 10),
91 MAX1363_MODE_SINGLE(11, 1 << 11),
93 MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12),
94 MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13),
95 MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14),
96 MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15),
97 MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16),
98 MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17),
99 MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18),
100 MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19),
101 MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20),
102 MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21),
103 MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22),
104 MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23),
106 /* The multichannel scans next */
107 MAX1363_MODE_SCAN_TO_CHANNEL(1, 0x003),
108 MAX1363_MODE_SCAN_TO_CHANNEL(2, 0x007),
109 MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3, 0x00C),
110 MAX1363_MODE_SCAN_TO_CHANNEL(3, 0x00F),
111 MAX1363_MODE_SCAN_TO_CHANNEL(4, 0x01F),
112 MAX1363_MODE_SCAN_TO_CHANNEL(5, 0x03F),
113 MAX1363_MODE_SCAN_TO_CHANNEL(6, 0x07F),
114 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7, 0x0C0),
115 MAX1363_MODE_SCAN_TO_CHANNEL(7, 0x0FF),
116 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8, 0x1C0),
117 MAX1363_MODE_SCAN_TO_CHANNEL(8, 0x1FF),
118 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9, 0x3C0),
119 MAX1363_MODE_SCAN_TO_CHANNEL(9, 0x3FF),
120 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10, 0x7C0),
121 MAX1363_MODE_SCAN_TO_CHANNEL(10, 0x7FF),
122 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11, 0xFC0),
123 MAX1363_MODE_SCAN_TO_CHANNEL(11, 0xFFF),
125 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(2, 2, 0x003000),
126 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(4, 3, 0x007000),
127 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(6, 4, 0x00F000),
128 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(8, 2, 0x018000),
129 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(8, 5, 0x01F000),
130 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(10, 3, 0x038000),
131 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(10, 6, 0x3F000),
132 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(3, 2, 0x0C0000),
133 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(5, 3, 0x1C0000),
134 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(7, 4, 0x3C0000),
135 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(9, 2, 0x600000),
136 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(9, 5, 0x7C0000),
137 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(11, 3, 0xE00000),
138 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(11, 6, 0xFC0000),
141 const struct max1363_mode
142 *max1363_match_mode(u32 mask, const struct max1363_chip_info *ci)
146 for (i = 0; i < ci->num_modes; i++)
147 if (!((~max1363_mode_table[ci->mode_list[i]].modemask) &
149 return &max1363_mode_table[ci->mode_list[i]];
153 static ssize_t max1363_show_precision(struct device *dev,
154 struct device_attribute *attr,
157 struct iio_dev *dev_info = dev_get_drvdata(dev);
158 struct max1363_state *st = iio_dev_get_devdata(dev_info);
159 return sprintf(buf, "%d\n", st->chip_info->bits);
162 static IIO_DEVICE_ATTR(in_precision, S_IRUGO, max1363_show_precision,
165 static int max1363_write_basic_config(struct i2c_client *client,
170 u8 *tx_buf = kmalloc(2 , GFP_KERNEL);
177 ret = i2c_master_send(client, tx_buf, 2);
180 return (ret > 0) ? 0 : ret;
183 int max1363_set_scan_mode(struct max1363_state *st)
185 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
187 | MAX1363_SE_DE_MASK);
188 st->configbyte |= st->current_mode->conf;
190 return max1363_write_basic_config(st->client,
195 static ssize_t max1363_read_single_channel(struct device *dev,
196 struct device_attribute *attr,
199 struct iio_dev *dev_info = dev_get_drvdata(dev);
200 struct max1363_state *st = iio_dev_get_devdata(dev_info);
201 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
202 struct i2c_client *client = st->client;
203 int ret = 0, len = 0;
208 mutex_lock(&dev_info->mlock);
209 /* If ring buffer capture is occuring, query the buffer */
210 if (iio_ring_enabled(dev_info)) {
211 mask = max1363_mode_table[this_attr->address].modemask;
212 data = max1363_single_channel_from_ring(mask, st);
218 /* Check to see if current scan mode is correct */
219 if (st->current_mode !=
220 &max1363_mode_table[this_attr->address]) {
221 /* Update scan mode if needed */
223 = &max1363_mode_table[this_attr->address];
224 ret = max1363_set_scan_mode(st);
228 if (st->chip_info->bits != 8) {
230 data = i2c_master_recv(client, rxbuf, 2);
236 data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8;
239 data = i2c_master_recv(client, rxbuf, 1);
247 /* Pretty print the result */
248 len = sprintf(buf, "%u\n", data);
251 mutex_unlock(&dev_info->mlock);
252 return ret ? ret : len;
255 /* Direct read attribtues */
256 static IIO_DEV_ATTR_IN_RAW(0, max1363_read_single_channel, _s0);
257 static IIO_DEV_ATTR_IN_RAW(1, max1363_read_single_channel, _s1);
258 static IIO_DEV_ATTR_IN_RAW(2, max1363_read_single_channel, _s2);
259 static IIO_DEV_ATTR_IN_RAW(3, max1363_read_single_channel, _s3);
260 static IIO_DEV_ATTR_IN_RAW(4, max1363_read_single_channel, _s4);
261 static IIO_DEV_ATTR_IN_RAW(5, max1363_read_single_channel, _s5);
262 static IIO_DEV_ATTR_IN_RAW(6, max1363_read_single_channel, _s6);
263 static IIO_DEV_ATTR_IN_RAW(7, max1363_read_single_channel, _s7);
264 static IIO_DEV_ATTR_IN_RAW(8, max1363_read_single_channel, _s8);
265 static IIO_DEV_ATTR_IN_RAW(9, max1363_read_single_channel, _s9);
266 static IIO_DEV_ATTR_IN_RAW(10, max1363_read_single_channel, _s10);
267 static IIO_DEV_ATTR_IN_RAW(11, max1363_read_single_channel, _s11);
269 static IIO_DEV_ATTR_IN_DIFF_RAW(0, 1, max1363_read_single_channel, d0m1);
270 static IIO_DEV_ATTR_IN_DIFF_RAW(2, 3, max1363_read_single_channel, d2m3);
271 static IIO_DEV_ATTR_IN_DIFF_RAW(4, 5, max1363_read_single_channel, d4m5);
272 static IIO_DEV_ATTR_IN_DIFF_RAW(6, 7, max1363_read_single_channel, d6m7);
273 static IIO_DEV_ATTR_IN_DIFF_RAW(8, 9, max1363_read_single_channel, d8m9);
274 static IIO_DEV_ATTR_IN_DIFF_RAW(10, 11, max1363_read_single_channel, d10m11);
275 static IIO_DEV_ATTR_IN_DIFF_RAW(1, 0, max1363_read_single_channel, d1m0);
276 static IIO_DEV_ATTR_IN_DIFF_RAW(3, 2, max1363_read_single_channel, d3m2);
277 static IIO_DEV_ATTR_IN_DIFF_RAW(5, 4, max1363_read_single_channel, d5m4);
278 static IIO_DEV_ATTR_IN_DIFF_RAW(7, 6, max1363_read_single_channel, d7m6);
279 static IIO_DEV_ATTR_IN_DIFF_RAW(9, 8, max1363_read_single_channel, d9m8);
280 static IIO_DEV_ATTR_IN_DIFF_RAW(11, 10, max1363_read_single_channel, d11m10);
283 static ssize_t max1363_show_scale(struct device *dev,
284 struct device_attribute *attr,
287 /* Driver currently only support internal vref */
288 struct iio_dev *dev_info = dev_get_drvdata(dev);
289 struct max1363_state *st = iio_dev_get_devdata(dev_info);
290 /* Corresponds to Vref / 2^(bits) */
292 if ((1 << (st->chip_info->bits + 1))
293 > st->chip_info->int_vref_mv)
294 return sprintf(buf, "0.5\n");
296 return sprintf(buf, "%d\n",
297 st->chip_info->int_vref_mv >> st->chip_info->bits);
300 static IIO_DEVICE_ATTR(in_scale, S_IRUGO, max1363_show_scale, NULL, 0);
302 static ssize_t max1363_show_name(struct device *dev,
303 struct device_attribute *attr,
306 struct iio_dev *dev_info = dev_get_drvdata(dev);
307 struct max1363_state *st = iio_dev_get_devdata(dev_info);
308 return sprintf(buf, "%s\n", st->chip_info->name);
311 static IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0);
313 /* Applies to max1363 */
314 static const enum max1363_modes max1363_mode_list[] = {
317 d0m1, d2m3, d1m0, d3m2,
318 d0m1to2m3, d1m0to3m2,
321 static struct attribute *max1363_device_attrs[] = {
322 &iio_dev_attr_in0_raw.dev_attr.attr,
323 &iio_dev_attr_in1_raw.dev_attr.attr,
324 &iio_dev_attr_in2_raw.dev_attr.attr,
325 &iio_dev_attr_in3_raw.dev_attr.attr,
326 &iio_dev_attr_in0min1_raw.dev_attr.attr,
327 &iio_dev_attr_in2min3_raw.dev_attr.attr,
328 &iio_dev_attr_in1min0_raw.dev_attr.attr,
329 &iio_dev_attr_in3min2_raw.dev_attr.attr,
330 &iio_dev_attr_name.dev_attr.attr,
331 &iio_dev_attr_in_scale.dev_attr.attr,
335 static struct attribute_group max1363_dev_attr_group = {
336 .attrs = max1363_device_attrs,
339 static struct attribute *max1363_scan_el_attrs[] = {
340 &iio_scan_el_in0.dev_attr.attr,
341 &iio_scan_el_in1.dev_attr.attr,
342 &iio_scan_el_in2.dev_attr.attr,
343 &iio_scan_el_in3.dev_attr.attr,
344 &iio_scan_el_in0min1.dev_attr.attr,
345 &iio_scan_el_in2min3.dev_attr.attr,
346 &iio_scan_el_in1min0.dev_attr.attr,
347 &iio_scan_el_in3min2.dev_attr.attr,
348 &iio_dev_attr_in_precision.dev_attr.attr,
352 static struct attribute_group max1363_scan_el_group = {
353 .name = "scan_elements",
354 .attrs = max1363_scan_el_attrs,
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 static struct attribute *max1238_device_attrs[] = {
380 &iio_dev_attr_in0_raw.dev_attr.attr,
381 &iio_dev_attr_in1_raw.dev_attr.attr,
382 &iio_dev_attr_in2_raw.dev_attr.attr,
383 &iio_dev_attr_in3_raw.dev_attr.attr,
384 &iio_dev_attr_in4_raw.dev_attr.attr,
385 &iio_dev_attr_in5_raw.dev_attr.attr,
386 &iio_dev_attr_in6_raw.dev_attr.attr,
387 &iio_dev_attr_in7_raw.dev_attr.attr,
388 &iio_dev_attr_in8_raw.dev_attr.attr,
389 &iio_dev_attr_in9_raw.dev_attr.attr,
390 &iio_dev_attr_in10_raw.dev_attr.attr,
391 &iio_dev_attr_in11_raw.dev_attr.attr,
392 &iio_dev_attr_in0min1_raw.dev_attr.attr,
393 &iio_dev_attr_in2min3_raw.dev_attr.attr,
394 &iio_dev_attr_in4min5_raw.dev_attr.attr,
395 &iio_dev_attr_in6min7_raw.dev_attr.attr,
396 &iio_dev_attr_in8min9_raw.dev_attr.attr,
397 &iio_dev_attr_in10min11_raw.dev_attr.attr,
398 &iio_dev_attr_in1min0_raw.dev_attr.attr,
399 &iio_dev_attr_in3min2_raw.dev_attr.attr,
400 &iio_dev_attr_in5min4_raw.dev_attr.attr,
401 &iio_dev_attr_in7min6_raw.dev_attr.attr,
402 &iio_dev_attr_in9min8_raw.dev_attr.attr,
403 &iio_dev_attr_in11min10_raw.dev_attr.attr,
404 &iio_dev_attr_name.dev_attr.attr,
405 &iio_dev_attr_in_scale.dev_attr.attr,
409 static struct attribute_group max1238_dev_attr_group = {
410 .attrs = max1238_device_attrs,
413 static struct attribute *max1238_scan_el_attrs[] = {
414 &iio_scan_el_in0.dev_attr.attr,
415 &iio_scan_el_in1.dev_attr.attr,
416 &iio_scan_el_in2.dev_attr.attr,
417 &iio_scan_el_in3.dev_attr.attr,
418 &iio_scan_el_in4.dev_attr.attr,
419 &iio_scan_el_in5.dev_attr.attr,
420 &iio_scan_el_in6.dev_attr.attr,
421 &iio_scan_el_in7.dev_attr.attr,
422 &iio_scan_el_in8.dev_attr.attr,
423 &iio_scan_el_in9.dev_attr.attr,
424 &iio_scan_el_in10.dev_attr.attr,
425 &iio_scan_el_in11.dev_attr.attr,
426 &iio_scan_el_in0min1.dev_attr.attr,
427 &iio_scan_el_in2min3.dev_attr.attr,
428 &iio_scan_el_in4min5.dev_attr.attr,
429 &iio_scan_el_in6min7.dev_attr.attr,
430 &iio_scan_el_in8min9.dev_attr.attr,
431 &iio_scan_el_in10min11.dev_attr.attr,
432 &iio_scan_el_in1min0.dev_attr.attr,
433 &iio_scan_el_in3min2.dev_attr.attr,
434 &iio_scan_el_in5min4.dev_attr.attr,
435 &iio_scan_el_in7min6.dev_attr.attr,
436 &iio_scan_el_in9min8.dev_attr.attr,
437 &iio_scan_el_in11min10.dev_attr.attr,
438 &iio_dev_attr_in_precision.dev_attr.attr,
442 static struct attribute_group max1238_scan_el_group = {
443 .name = "scan_elements",
444 .attrs = max1238_scan_el_attrs,
448 static const enum max1363_modes max11607_mode_list[] = {
452 d0m1, d2m3, d1m0, d3m2,
453 d0m1to2m3, d1m0to3m2,
456 static const enum max1363_modes max11608_mode_list[] = {
457 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7,
458 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7,
460 d0m1, d2m3, d4m5, d6m7,
461 d1m0, d3m2, d5m4, d7m6,
462 d0m1to2m3, d0m1to4m5, d0m1to6m7,
463 d1m0to3m2, d1m0to5m4, d1m0to7m6,
466 static struct attribute *max11608_device_attrs[] = {
467 &iio_dev_attr_in0_raw.dev_attr.attr,
468 &iio_dev_attr_in1_raw.dev_attr.attr,
469 &iio_dev_attr_in2_raw.dev_attr.attr,
470 &iio_dev_attr_in3_raw.dev_attr.attr,
471 &iio_dev_attr_in4_raw.dev_attr.attr,
472 &iio_dev_attr_in5_raw.dev_attr.attr,
473 &iio_dev_attr_in6_raw.dev_attr.attr,
474 &iio_dev_attr_in7_raw.dev_attr.attr,
475 &iio_dev_attr_in0min1_raw.dev_attr.attr,
476 &iio_dev_attr_in2min3_raw.dev_attr.attr,
477 &iio_dev_attr_in4min5_raw.dev_attr.attr,
478 &iio_dev_attr_in6min7_raw.dev_attr.attr,
479 &iio_dev_attr_in1min0_raw.dev_attr.attr,
480 &iio_dev_attr_in3min2_raw.dev_attr.attr,
481 &iio_dev_attr_in5min4_raw.dev_attr.attr,
482 &iio_dev_attr_in7min6_raw.dev_attr.attr,
483 &iio_dev_attr_name.dev_attr.attr,
484 &iio_dev_attr_in_scale.dev_attr.attr,
488 static struct attribute_group max11608_dev_attr_group = {
489 .attrs = max11608_device_attrs,
492 static struct attribute *max11608_scan_el_attrs[] = {
493 &iio_scan_el_in0.dev_attr.attr,
494 &iio_scan_el_in1.dev_attr.attr,
495 &iio_scan_el_in2.dev_attr.attr,
496 &iio_scan_el_in3.dev_attr.attr,
497 &iio_scan_el_in4.dev_attr.attr,
498 &iio_scan_el_in5.dev_attr.attr,
499 &iio_scan_el_in6.dev_attr.attr,
500 &iio_scan_el_in7.dev_attr.attr,
501 &iio_scan_el_in0min1.dev_attr.attr,
502 &iio_scan_el_in2min3.dev_attr.attr,
503 &iio_scan_el_in4min5.dev_attr.attr,
504 &iio_scan_el_in6min7.dev_attr.attr,
505 &iio_scan_el_in1min0.dev_attr.attr,
506 &iio_scan_el_in3min2.dev_attr.attr,
507 &iio_scan_el_in5min4.dev_attr.attr,
508 &iio_scan_el_in7min6.dev_attr.attr,
509 &iio_dev_attr_in_precision.dev_attr.attr,
512 static struct attribute_group max11608_scan_el_group = {
513 .name = "scan_elements",
514 .attrs = max11608_scan_el_attrs,
553 /* max1363 and max1368 tested - rest from data sheet */
554 static const struct max1363_chip_info max1363_chip_info_tbl[] = {
561 .mode_list = max1363_mode_list,
562 .num_modes = ARRAY_SIZE(max1363_mode_list),
563 .default_mode = s0to3,
564 .dev_attrs = &max1363_dev_attr_group,
565 .scan_attrs = &max1363_scan_el_group,
572 .mode_list = max1363_mode_list,
573 .num_modes = ARRAY_SIZE(max1363_mode_list),
574 .default_mode = s0to3,
575 .dev_attrs = &max1363_dev_attr_group,
576 .scan_attrs = &max1363_scan_el_group,
583 .mode_list = max1363_mode_list,
584 .num_modes = ARRAY_SIZE(max1363_mode_list),
585 .default_mode = s0to3,
586 .dev_attrs = &max1363_dev_attr_group,
587 .scan_attrs = &max1363_scan_el_group,
594 .mode_list = max1363_mode_list,
595 .num_modes = ARRAY_SIZE(max1363_mode_list),
596 .default_mode = s0to3,
597 .dev_attrs = &max1363_dev_attr_group,
598 .scan_attrs = &max1363_scan_el_group,
604 .mode_list = max1236_mode_list,
605 .num_modes = ARRAY_SIZE(max1236_mode_list),
606 .default_mode = s0to3,
607 .dev_attrs = &max1363_dev_attr_group,
608 .scan_attrs = &max1363_scan_el_group,
614 .mode_list = max1236_mode_list,
615 .num_modes = ARRAY_SIZE(max1236_mode_list),
616 .default_mode = s0to3,
617 .dev_attrs = &max1363_dev_attr_group,
618 .scan_attrs = &max1363_scan_el_group,
624 .mode_list = max1238_mode_list,
625 .num_modes = ARRAY_SIZE(max1238_mode_list),
626 .default_mode = s0to11,
627 .dev_attrs = &max1238_dev_attr_group,
628 .scan_attrs = &max1238_scan_el_group,
634 .mode_list = max1238_mode_list,
635 .num_modes = ARRAY_SIZE(max1238_mode_list),
636 .default_mode = s0to11,
637 .dev_attrs = &max1238_dev_attr_group,
638 .scan_attrs = &max1238_scan_el_group,
644 .mode_list = max1236_mode_list,
645 .num_modes = ARRAY_SIZE(max1236_mode_list),
646 .default_mode = s0to3,
647 .dev_attrs = &max1363_dev_attr_group,
648 .scan_attrs = &max1363_scan_el_group,
654 .mode_list = max1236_mode_list,
655 .num_modes = ARRAY_SIZE(max1236_mode_list),
656 .default_mode = s0to3,
657 .dev_attrs = &max1363_dev_attr_group,
658 .scan_attrs = &max1363_scan_el_group,
664 .mode_list = max1238_mode_list,
665 .num_modes = ARRAY_SIZE(max1238_mode_list),
666 .default_mode = s0to11,
667 .dev_attrs = &max1238_dev_attr_group,
668 .scan_attrs = &max1238_scan_el_group,
674 .mode_list = max1238_mode_list,
675 .num_modes = ARRAY_SIZE(max1238_mode_list),
676 .default_mode = s0to11,
677 .dev_attrs = &max1238_dev_attr_group,
678 .scan_attrs = &max1238_scan_el_group,
684 .mode_list = max1236_mode_list,
685 .num_modes = ARRAY_SIZE(max1236_mode_list),
686 .default_mode = s0to3,
687 .dev_attrs = &max1363_dev_attr_group,
688 .scan_attrs = &max1363_scan_el_group,
694 .mode_list = max1236_mode_list,
695 .num_modes = ARRAY_SIZE(max1236_mode_list),
696 .default_mode = s0to3,
697 .dev_attrs = &max1363_dev_attr_group,
698 .scan_attrs = &max1363_scan_el_group,
704 .mode_list = max1238_mode_list,
705 .num_modes = ARRAY_SIZE(max1238_mode_list),
706 .default_mode = s0to11,
707 .dev_attrs = &max1238_dev_attr_group,
708 .scan_attrs = &max1238_scan_el_group,
714 .mode_list = max1238_mode_list,
715 .num_modes = ARRAY_SIZE(max1238_mode_list),
716 .default_mode = s0to11,
717 .dev_attrs = &max1238_dev_attr_group,
718 .scan_attrs = &max1238_scan_el_group,
724 .mode_list = max11607_mode_list,
725 .num_modes = ARRAY_SIZE(max11607_mode_list),
726 .default_mode = s0to3,
727 .dev_attrs = &max1363_dev_attr_group,
728 .scan_attrs = &max1363_scan_el_group,
734 .mode_list = max11607_mode_list,
735 .num_modes = ARRAY_SIZE(max11607_mode_list),
736 .default_mode = s0to3,
737 .dev_attrs = &max1363_dev_attr_group,
738 .scan_attrs = &max1363_scan_el_group,
744 .mode_list = max11608_mode_list,
745 .num_modes = ARRAY_SIZE(max11608_mode_list),
746 .default_mode = s0to7,
747 .dev_attrs = &max11608_dev_attr_group,
748 .scan_attrs = &max11608_scan_el_group,
754 .mode_list = max11608_mode_list,
755 .num_modes = ARRAY_SIZE(max11608_mode_list),
756 .default_mode = s0to7,
757 .dev_attrs = &max11608_dev_attr_group,
758 .scan_attrs = &max11608_scan_el_group,
764 .mode_list = max1238_mode_list,
765 .num_modes = ARRAY_SIZE(max1238_mode_list),
766 .default_mode = s0to11,
767 .dev_attrs = &max1238_dev_attr_group,
768 .scan_attrs = &max1238_scan_el_group,
774 .mode_list = max1238_mode_list,
775 .num_modes = ARRAY_SIZE(max1238_mode_list),
776 .default_mode = s0to11,
777 .dev_attrs = &max1238_dev_attr_group,
778 .scan_attrs = &max1238_scan_el_group,
784 .mode_list = max11607_mode_list,
785 .num_modes = ARRAY_SIZE(max11607_mode_list),
786 .default_mode = s0to3,
787 .dev_attrs = &max1363_dev_attr_group,
788 .scan_attrs = &max1363_scan_el_group,
794 .mode_list = max11607_mode_list,
795 .num_modes = ARRAY_SIZE(max11607_mode_list),
796 .default_mode = s0to3,
797 .dev_attrs = &max1363_dev_attr_group,
798 .scan_attrs = &max1363_scan_el_group,
804 .mode_list = max11608_mode_list,
805 .num_modes = ARRAY_SIZE(max11608_mode_list),
806 .default_mode = s0to7,
807 .dev_attrs = &max11608_dev_attr_group,
808 .scan_attrs = &max11608_scan_el_group,
814 .mode_list = max11608_mode_list,
815 .num_modes = ARRAY_SIZE(max11608_mode_list),
816 .default_mode = s0to7,
817 .dev_attrs = &max11608_dev_attr_group,
818 .scan_attrs = &max11608_scan_el_group,
824 .mode_list = max1238_mode_list,
825 .num_modes = ARRAY_SIZE(max1238_mode_list),
826 .default_mode = s0to11,
827 .dev_attrs = &max1238_dev_attr_group,
828 .scan_attrs = &max1238_scan_el_group,
834 .mode_list = max1238_mode_list,
835 .num_modes = ARRAY_SIZE(max1238_mode_list),
836 .default_mode = s0to11,
837 .dev_attrs = &max1238_dev_attr_group,
838 .scan_attrs = &max1238_scan_el_group,
844 .mode_list = max11607_mode_list,
845 .num_modes = ARRAY_SIZE(max11607_mode_list),
846 .default_mode = s0to3,
847 .dev_attrs = &max1363_dev_attr_group,
848 .scan_attrs = &max1363_scan_el_group,
854 .mode_list = max11607_mode_list,
855 .num_modes = ARRAY_SIZE(max11607_mode_list),
856 .default_mode = s0to3,
857 .dev_attrs = &max1363_dev_attr_group,
858 .scan_attrs = &max1363_scan_el_group,
864 .mode_list = max11608_mode_list,
865 .num_modes = ARRAY_SIZE(max11608_mode_list),
866 .default_mode = s0to7,
867 .dev_attrs = &max11608_dev_attr_group,
868 .scan_attrs = &max11608_scan_el_group,
874 .mode_list = max11608_mode_list,
875 .num_modes = ARRAY_SIZE(max11608_mode_list),
876 .default_mode = s0to7,
877 .dev_attrs = &max11608_dev_attr_group,
878 .scan_attrs = &max11608_scan_el_group,
884 .mode_list = max1238_mode_list,
885 .num_modes = ARRAY_SIZE(max1238_mode_list),
886 .default_mode = s0to11,
887 .dev_attrs = &max1238_dev_attr_group,
888 .scan_attrs = &max1238_scan_el_group,
894 .mode_list = max1238_mode_list,
895 .num_modes = ARRAY_SIZE(max1238_mode_list),
896 .default_mode = s0to11,
897 .dev_attrs = &max1238_dev_attr_group,
898 .scan_attrs = &max1238_scan_el_group,
902 static int max1363_initial_setup(struct max1363_state *st)
904 st->setupbyte = MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD
905 | MAX1363_SETUP_POWER_UP_INT_REF
906 | MAX1363_SETUP_INT_CLOCK
907 | MAX1363_SETUP_UNIPOLAR
908 | MAX1363_SETUP_NORESET;
910 /* Set scan mode writes the config anyway so wait until then*/
911 st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
912 st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
913 st->configbyte = MAX1363_CONFIG_BYTE(st->configbyte);
915 return max1363_set_scan_mode(st);
918 static int __devinit max1363_probe(struct i2c_client *client,
919 const struct i2c_device_id *id)
921 int ret, i, regdone = 0;
922 struct max1363_state *st = kzalloc(sizeof(*st), GFP_KERNEL);
928 /* this is only used for device removal purposes */
929 i2c_set_clientdata(client, st);
931 atomic_set(&st->protect_ring, 0);
933 /* Find the chip model specific data */
934 for (i = 0; i < ARRAY_SIZE(max1363_chip_info_tbl); i++)
935 if (!strcmp(max1363_chip_info_tbl[i].name, id->name)) {
936 st->chip_info = &max1363_chip_info_tbl[i];
939 /* Unsupported chip */
940 if (!st->chip_info) {
941 dev_err(&client->dev, "%s is not supported\n", id->name);
946 st->reg = regulator_get(&client->dev, "vcc");
947 if (!IS_ERR(st->reg)) {
948 ret = regulator_enable(st->reg);
954 st->indio_dev = iio_allocate_device();
955 if (st->indio_dev == NULL) {
957 goto error_disable_reg;
960 st->indio_dev->available_scan_masks
961 = kzalloc(sizeof(*st->indio_dev->available_scan_masks)*
962 (st->chip_info->num_modes + 1), GFP_KERNEL);
963 if (!st->indio_dev->available_scan_masks) {
965 goto error_free_device;
968 for (i = 0; i < st->chip_info->num_modes; i++)
969 st->indio_dev->available_scan_masks[i] =
970 max1363_mode_table[st->chip_info->mode_list[i]]
972 /* Estabilish that the iio_dev is a child of the i2c device */
973 st->indio_dev->dev.parent = &client->dev;
974 st->indio_dev->attrs = st->chip_info->dev_attrs;
976 /* Todo: this shouldn't be here. */
977 st->indio_dev->scan_el_attrs = st->chip_info->scan_attrs;
978 st->indio_dev->dev_data = (void *)(st);
979 st->indio_dev->driver_module = THIS_MODULE;
980 st->indio_dev->modes = INDIO_DIRECT_MODE;
982 ret = max1363_initial_setup(st);
984 goto error_free_available_scan_masks;
986 ret = max1363_register_ring_funcs_and_init(st->indio_dev);
988 goto error_free_available_scan_masks;
990 ret = iio_device_register(st->indio_dev);
992 goto error_cleanup_ring;
994 ret = max1363_initialize_ring(st->indio_dev->ring);
996 goto error_cleanup_ring;
999 max1363_ring_cleanup(st->indio_dev);
1000 error_free_available_scan_masks:
1001 kfree(st->indio_dev->available_scan_masks);
1004 iio_free_device(st->indio_dev);
1006 iio_device_unregister(st->indio_dev);
1008 if (!IS_ERR(st->reg))
1009 regulator_disable(st->reg);
1011 if (!IS_ERR(st->reg))
1012 regulator_put(st->reg);
1014 i2c_set_clientdata(client, NULL);
1021 static int max1363_remove(struct i2c_client *client)
1023 struct max1363_state *st = i2c_get_clientdata(client);
1024 struct iio_dev *indio_dev = st->indio_dev;
1025 max1363_uninitialize_ring(indio_dev->ring);
1026 max1363_ring_cleanup(indio_dev);
1027 kfree(st->indio_dev->available_scan_masks);
1028 iio_device_unregister(indio_dev);
1029 if (!IS_ERR(st->reg)) {
1030 regulator_disable(st->reg);
1031 regulator_put(st->reg);
1033 i2c_set_clientdata(client, NULL);
1039 static const struct i2c_device_id max1363_id[] = {
1040 { "max1361", max1361 },
1041 { "max1362", max1362 },
1042 { "max1363", max1363 },
1043 { "max1364", max1364 },
1044 { "max1036", max1036 },
1045 { "max1037", max1037 },
1046 { "max1038", max1038 },
1047 { "max1039", max1039 },
1048 { "max1136", max1136 },
1049 { "max1137", max1137 },
1050 { "max1138", max1138 },
1051 { "max1139", max1139 },
1052 { "max1236", max1236 },
1053 { "max1237", max1237 },
1054 { "max1238", max1238 },
1055 { "max1239", max1239 },
1056 { "max11600", max11600 },
1057 { "max11601", max11601 },
1058 { "max11602", max11602 },
1059 { "max11603", max11603 },
1060 { "max11604", max11604 },
1061 { "max11605", max11605 },
1062 { "max11606", max11606 },
1063 { "max11607", max11607 },
1064 { "max11608", max11608 },
1065 { "max11609", max11609 },
1066 { "max11610", max11610 },
1067 { "max11611", max11611 },
1068 { "max11612", max11612 },
1069 { "max11613", max11613 },
1070 { "max11614", max11614 },
1071 { "max11615", max11615 },
1072 { "max11616", max11616 },
1073 { "max11617", max11617 },
1077 MODULE_DEVICE_TABLE(i2c, max1363_id);
1079 static struct i2c_driver max1363_driver = {
1083 .probe = max1363_probe,
1084 .remove = max1363_remove,
1085 .id_table = max1363_id,
1088 static __init int max1363_init(void)
1090 return i2c_add_driver(&max1363_driver);
1093 static __exit void max1363_exit(void)
1095 i2c_del_driver(&max1363_driver);
1098 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
1099 MODULE_DESCRIPTION("Maxim 1363 ADC");
1100 MODULE_LICENSE("GPL v2");
1102 module_init(max1363_init);
1103 module_exit(max1363_exit);