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
);