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
) {
145 for (i
= 0; i
< ci
->num_modes
; i
++)
146 if (!((~max1363_mode_table
[ci
->mode_list
[i
]]
149 return &max1363_mode_table
[ci
154 static ssize_t
max1363_show_precision(struct device
*dev
,
155 struct device_attribute
*attr
,
158 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
159 struct max1363_state
*st
= iio_dev_get_devdata(dev_info
);
160 return sprintf(buf
, "%d\n", st
->chip_info
->bits
);
163 static IIO_DEVICE_ATTR(in_precision
, S_IRUGO
, max1363_show_precision
,
166 static int max1363_write_basic_config(struct i2c_client
*client
,
171 u8
*tx_buf
= kmalloc(2 , GFP_KERNEL
);
178 ret
= i2c_master_send(client
, tx_buf
, 2);
181 return (ret
> 0) ? 0 : ret
;
184 int max1363_set_scan_mode(struct max1363_state
*st
)
186 st
->configbyte
&= ~(MAX1363_CHANNEL_SEL_MASK
188 | MAX1363_SE_DE_MASK
);
189 st
->configbyte
|= st
->current_mode
->conf
;
191 return max1363_write_basic_config(st
->client
,
196 static ssize_t
max1363_read_single_channel(struct device
*dev
,
197 struct device_attribute
*attr
,
200 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
201 struct max1363_state
*st
= iio_dev_get_devdata(dev_info
);
202 struct iio_dev_attr
*this_attr
= to_iio_dev_attr(attr
);
203 struct i2c_client
*client
= st
->client
;
204 int ret
= 0, len
= 0;
209 mutex_lock(&dev_info
->mlock
);
210 /* If ring buffer capture is occuring, query the buffer */
211 if (iio_ring_enabled(dev_info
)) {
212 mask
= max1363_mode_table
[this_attr
->address
].modemask
;
213 data
= max1363_single_channel_from_ring(mask
, st
);
219 /* Check to see if current scan mode is correct */
220 if (st
->current_mode
!=
221 &max1363_mode_table
[this_attr
->address
]) {
222 /* Update scan mode if needed */
224 = &max1363_mode_table
[this_attr
->address
];
225 ret
= max1363_set_scan_mode(st
);
229 if (st
->chip_info
->bits
!= 8) {
231 data
= i2c_master_recv(client
, rxbuf
, 2);
237 data
= (s32
)(rxbuf
[1]) | ((s32
)(rxbuf
[0] & 0x0F)) << 8;
240 data
= i2c_master_recv(client
, rxbuf
, 1);
248 /* Pretty print the result */
249 len
= sprintf(buf
, "%u\n", data
);
252 mutex_unlock(&dev_info
->mlock
);
253 return ret
? ret
: len
;
256 /* Direct read attribtues */
257 static IIO_DEV_ATTR_IN_RAW(0, max1363_read_single_channel
, _s0
);
258 static IIO_DEV_ATTR_IN_RAW(1, max1363_read_single_channel
, _s1
);
259 static IIO_DEV_ATTR_IN_RAW(2, max1363_read_single_channel
, _s2
);
260 static IIO_DEV_ATTR_IN_RAW(3, max1363_read_single_channel
, _s3
);
261 static IIO_DEV_ATTR_IN_RAW(4, max1363_read_single_channel
, _s4
);
262 static IIO_DEV_ATTR_IN_RAW(5, max1363_read_single_channel
, _s5
);
263 static IIO_DEV_ATTR_IN_RAW(6, max1363_read_single_channel
, _s6
);
264 static IIO_DEV_ATTR_IN_RAW(7, max1363_read_single_channel
, _s7
);
265 static IIO_DEV_ATTR_IN_RAW(8, max1363_read_single_channel
, _s8
);
266 static IIO_DEV_ATTR_IN_RAW(9, max1363_read_single_channel
, _s9
);
267 static IIO_DEV_ATTR_IN_RAW(10, max1363_read_single_channel
, _s10
);
268 static IIO_DEV_ATTR_IN_RAW(11, max1363_read_single_channel
, _s11
);
270 static IIO_DEV_ATTR_IN_DIFF_RAW(0, 1, max1363_read_single_channel
, d0m1
);
271 static IIO_DEV_ATTR_IN_DIFF_RAW(2, 3, max1363_read_single_channel
, d2m3
);
272 static IIO_DEV_ATTR_IN_DIFF_RAW(4, 5, max1363_read_single_channel
, d4m5
);
273 static IIO_DEV_ATTR_IN_DIFF_RAW(6, 7, max1363_read_single_channel
, d6m7
);
274 static IIO_DEV_ATTR_IN_DIFF_RAW(8, 9, max1363_read_single_channel
, d8m9
);
275 static IIO_DEV_ATTR_IN_DIFF_RAW(10, 11, max1363_read_single_channel
, d10m11
);
276 static IIO_DEV_ATTR_IN_DIFF_RAW(1, 0, max1363_read_single_channel
, d1m0
);
277 static IIO_DEV_ATTR_IN_DIFF_RAW(3, 2, max1363_read_single_channel
, d3m2
);
278 static IIO_DEV_ATTR_IN_DIFF_RAW(5, 4, max1363_read_single_channel
, d5m4
);
279 static IIO_DEV_ATTR_IN_DIFF_RAW(7, 6, max1363_read_single_channel
, d7m6
);
280 static IIO_DEV_ATTR_IN_DIFF_RAW(9, 8, max1363_read_single_channel
, d9m8
);
281 static IIO_DEV_ATTR_IN_DIFF_RAW(11, 10, max1363_read_single_channel
, d11m10
);
284 static ssize_t
max1363_show_scale(struct device
*dev
,
285 struct device_attribute
*attr
,
288 /* Driver currently only support internal vref */
289 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
290 struct max1363_state
*st
= iio_dev_get_devdata(dev_info
);
291 /* Corresponds to Vref / 2^(bits) */
293 if ((1 << (st
->chip_info
->bits
+ 1))
294 > st
->chip_info
->int_vref_mv
)
295 return sprintf(buf
, "0.5\n");
297 return sprintf(buf
, "%d\n",
298 st
->chip_info
->int_vref_mv
>> st
->chip_info
->bits
);
301 IIO_DEVICE_ATTR(in_scale
, S_IRUGO
, max1363_show_scale
, NULL
, 0);
303 static ssize_t
max1363_show_name(struct device
*dev
,
304 struct device_attribute
*attr
,
307 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
308 struct max1363_state
*st
= iio_dev_get_devdata(dev_info
);
309 return sprintf(buf
, "%s\n", st
->chip_info
->name
);
312 IIO_DEVICE_ATTR(name
, S_IRUGO
, max1363_show_name
, NULL
, 0);
314 /* Applies to max1363 */
315 static const enum max1363_modes max1363_mode_list
[] = {
318 d0m1
, d2m3
, d1m0
, d3m2
,
319 d0m1to2m3
, d1m0to3m2
,
322 static struct attribute
*max1363_device_attrs
[] = {
323 &iio_dev_attr_in0_raw
.dev_attr
.attr
,
324 &iio_dev_attr_in1_raw
.dev_attr
.attr
,
325 &iio_dev_attr_in2_raw
.dev_attr
.attr
,
326 &iio_dev_attr_in3_raw
.dev_attr
.attr
,
327 &iio_dev_attr_in0min1_raw
.dev_attr
.attr
,
328 &iio_dev_attr_in2min3_raw
.dev_attr
.attr
,
329 &iio_dev_attr_in1min0_raw
.dev_attr
.attr
,
330 &iio_dev_attr_in3min2_raw
.dev_attr
.attr
,
331 &iio_dev_attr_name
.dev_attr
.attr
,
332 &iio_dev_attr_in_scale
.dev_attr
.attr
,
336 static struct attribute_group max1363_dev_attr_group
= {
337 .attrs
= max1363_device_attrs
,
340 static struct attribute
*max1363_scan_el_attrs
[] = {
341 &iio_scan_el_in0
.dev_attr
.attr
,
342 &iio_scan_el_in1
.dev_attr
.attr
,
343 &iio_scan_el_in2
.dev_attr
.attr
,
344 &iio_scan_el_in3
.dev_attr
.attr
,
345 &iio_scan_el_in0min1
.dev_attr
.attr
,
346 &iio_scan_el_in2min3
.dev_attr
.attr
,
347 &iio_scan_el_in1min0
.dev_attr
.attr
,
348 &iio_scan_el_in3min2
.dev_attr
.attr
,
349 &iio_dev_attr_in_precision
.dev_attr
.attr
,
353 static struct attribute_group max1363_scan_el_group
= {
354 .name
= "scan_elements",
355 .attrs
= max1363_scan_el_attrs
,
358 /* Appies to max1236, max1237 */
359 static const enum max1363_modes max1236_mode_list
[] = {
362 d0m1
, d2m3
, d1m0
, d3m2
,
363 d0m1to2m3
, d1m0to3m2
,
367 /* Applies to max1238, max1239 */
368 static const enum max1363_modes max1238_mode_list
[] = {
369 _s0
, _s1
, _s2
, _s3
, _s4
, _s5
, _s6
, _s7
, _s8
, _s9
, _s10
, _s11
,
370 s0to1
, s0to2
, s0to3
, s0to4
, s0to5
, s0to6
,
371 s0to7
, s0to8
, s0to9
, s0to10
, s0to11
,
372 d0m1
, d2m3
, d4m5
, d6m7
, d8m9
, d10m11
,
373 d1m0
, d3m2
, d5m4
, d7m6
, d9m8
, d11m10
,
374 d0m1to2m3
, d0m1to4m5
, d0m1to6m7
, d0m1to8m9
, d0m1to10m11
,
375 d1m0to3m2
, d1m0to5m4
, d1m0to7m6
, d1m0to9m8
, d1m0to11m10
,
376 s6to7
, s6to8
, s6to9
, s6to10
, s6to11
,
377 d6m7to8m9
, d6m7to10m11
, d7m6to9m8
, d7m6to11m10
,
380 static struct attribute
*max1238_device_attrs
[] = {
381 &iio_dev_attr_in0_raw
.dev_attr
.attr
,
382 &iio_dev_attr_in1_raw
.dev_attr
.attr
,
383 &iio_dev_attr_in2_raw
.dev_attr
.attr
,
384 &iio_dev_attr_in3_raw
.dev_attr
.attr
,
385 &iio_dev_attr_in4_raw
.dev_attr
.attr
,
386 &iio_dev_attr_in5_raw
.dev_attr
.attr
,
387 &iio_dev_attr_in6_raw
.dev_attr
.attr
,
388 &iio_dev_attr_in7_raw
.dev_attr
.attr
,
389 &iio_dev_attr_in8_raw
.dev_attr
.attr
,
390 &iio_dev_attr_in9_raw
.dev_attr
.attr
,
391 &iio_dev_attr_in10_raw
.dev_attr
.attr
,
392 &iio_dev_attr_in11_raw
.dev_attr
.attr
,
393 &iio_dev_attr_in0min1_raw
.dev_attr
.attr
,
394 &iio_dev_attr_in2min3_raw
.dev_attr
.attr
,
395 &iio_dev_attr_in4min5_raw
.dev_attr
.attr
,
396 &iio_dev_attr_in6min7_raw
.dev_attr
.attr
,
397 &iio_dev_attr_in8min9_raw
.dev_attr
.attr
,
398 &iio_dev_attr_in10min11_raw
.dev_attr
.attr
,
399 &iio_dev_attr_in1min0_raw
.dev_attr
.attr
,
400 &iio_dev_attr_in3min2_raw
.dev_attr
.attr
,
401 &iio_dev_attr_in5min4_raw
.dev_attr
.attr
,
402 &iio_dev_attr_in7min6_raw
.dev_attr
.attr
,
403 &iio_dev_attr_in9min8_raw
.dev_attr
.attr
,
404 &iio_dev_attr_in11min10_raw
.dev_attr
.attr
,
405 &iio_dev_attr_name
.dev_attr
.attr
,
406 &iio_dev_attr_in_scale
.dev_attr
.attr
,
410 static struct attribute_group max1238_dev_attr_group
= {
411 .attrs
= max1238_device_attrs
,
414 static struct attribute
*max1238_scan_el_attrs
[] = {
415 &iio_scan_el_in0
.dev_attr
.attr
,
416 &iio_scan_el_in1
.dev_attr
.attr
,
417 &iio_scan_el_in2
.dev_attr
.attr
,
418 &iio_scan_el_in3
.dev_attr
.attr
,
419 &iio_scan_el_in4
.dev_attr
.attr
,
420 &iio_scan_el_in5
.dev_attr
.attr
,
421 &iio_scan_el_in6
.dev_attr
.attr
,
422 &iio_scan_el_in7
.dev_attr
.attr
,
423 &iio_scan_el_in8
.dev_attr
.attr
,
424 &iio_scan_el_in9
.dev_attr
.attr
,
425 &iio_scan_el_in10
.dev_attr
.attr
,
426 &iio_scan_el_in11
.dev_attr
.attr
,
427 &iio_scan_el_in0min1
.dev_attr
.attr
,
428 &iio_scan_el_in2min3
.dev_attr
.attr
,
429 &iio_scan_el_in4min5
.dev_attr
.attr
,
430 &iio_scan_el_in6min7
.dev_attr
.attr
,
431 &iio_scan_el_in8min9
.dev_attr
.attr
,
432 &iio_scan_el_in10min11
.dev_attr
.attr
,
433 &iio_scan_el_in1min0
.dev_attr
.attr
,
434 &iio_scan_el_in3min2
.dev_attr
.attr
,
435 &iio_scan_el_in5min4
.dev_attr
.attr
,
436 &iio_scan_el_in7min6
.dev_attr
.attr
,
437 &iio_scan_el_in9min8
.dev_attr
.attr
,
438 &iio_scan_el_in11min10
.dev_attr
.attr
,
439 &iio_dev_attr_in_precision
.dev_attr
.attr
,
443 static struct attribute_group max1238_scan_el_group
= {
444 .name
= "scan_elements",
445 .attrs
= max1238_scan_el_attrs
,
449 static const enum max1363_modes max11607_mode_list
[] = {
453 d0m1
, d2m3
, d1m0
, d3m2
,
454 d0m1to2m3
, d1m0to3m2
,
457 static const enum max1363_modes max11608_mode_list
[] = {
458 _s0
, _s1
, _s2
, _s3
, _s4
, _s5
, _s6
, _s7
,
459 s0to1
, s0to2
, s0to3
, s0to4
, s0to5
, s0to6
, s0to7
,
461 d0m1
, d2m3
, d4m5
, d6m7
,
462 d1m0
, d3m2
, d5m4
, d7m6
,
463 d0m1to2m3
, d0m1to4m5
, d0m1to6m7
,
464 d1m0to3m2
, d1m0to5m4
, d1m0to7m6
,
467 static struct attribute
*max11608_device_attrs
[] = {
468 &iio_dev_attr_in0_raw
.dev_attr
.attr
,
469 &iio_dev_attr_in1_raw
.dev_attr
.attr
,
470 &iio_dev_attr_in2_raw
.dev_attr
.attr
,
471 &iio_dev_attr_in3_raw
.dev_attr
.attr
,
472 &iio_dev_attr_in4_raw
.dev_attr
.attr
,
473 &iio_dev_attr_in5_raw
.dev_attr
.attr
,
474 &iio_dev_attr_in6_raw
.dev_attr
.attr
,
475 &iio_dev_attr_in7_raw
.dev_attr
.attr
,
476 &iio_dev_attr_in0min1_raw
.dev_attr
.attr
,
477 &iio_dev_attr_in2min3_raw
.dev_attr
.attr
,
478 &iio_dev_attr_in4min5_raw
.dev_attr
.attr
,
479 &iio_dev_attr_in6min7_raw
.dev_attr
.attr
,
480 &iio_dev_attr_in1min0_raw
.dev_attr
.attr
,
481 &iio_dev_attr_in3min2_raw
.dev_attr
.attr
,
482 &iio_dev_attr_in5min4_raw
.dev_attr
.attr
,
483 &iio_dev_attr_in7min6_raw
.dev_attr
.attr
,
484 &iio_dev_attr_name
.dev_attr
.attr
,
485 &iio_dev_attr_in_scale
.dev_attr
.attr
,
489 static struct attribute_group max11608_dev_attr_group
= {
490 .attrs
= max11608_device_attrs
,
493 static struct attribute
*max11608_scan_el_attrs
[] = {
494 &iio_scan_el_in0
.dev_attr
.attr
,
495 &iio_scan_el_in1
.dev_attr
.attr
,
496 &iio_scan_el_in2
.dev_attr
.attr
,
497 &iio_scan_el_in3
.dev_attr
.attr
,
498 &iio_scan_el_in4
.dev_attr
.attr
,
499 &iio_scan_el_in5
.dev_attr
.attr
,
500 &iio_scan_el_in6
.dev_attr
.attr
,
501 &iio_scan_el_in7
.dev_attr
.attr
,
502 &iio_scan_el_in0min1
.dev_attr
.attr
,
503 &iio_scan_el_in2min3
.dev_attr
.attr
,
504 &iio_scan_el_in4min5
.dev_attr
.attr
,
505 &iio_scan_el_in6min7
.dev_attr
.attr
,
506 &iio_scan_el_in1min0
.dev_attr
.attr
,
507 &iio_scan_el_in3min2
.dev_attr
.attr
,
508 &iio_scan_el_in5min4
.dev_attr
.attr
,
509 &iio_scan_el_in7min6
.dev_attr
.attr
,
510 &iio_dev_attr_in_precision
.dev_attr
.attr
,
513 static struct attribute_group max11608_scan_el_group
= {
514 .name
= "scan_elements",
515 .attrs
= max11608_scan_el_attrs
,
554 /* max1363 and max1368 tested - rest from data sheet */
555 static const struct max1363_chip_info max1363_chip_info_tbl
[] = {
562 .mode_list
= max1363_mode_list
,
563 .num_modes
= ARRAY_SIZE(max1363_mode_list
),
564 .default_mode
= s0to3
,
565 .dev_attrs
= &max1363_dev_attr_group
,
566 .scan_attrs
= &max1363_scan_el_group
,
573 .mode_list
= max1363_mode_list
,
574 .num_modes
= ARRAY_SIZE(max1363_mode_list
),
575 .default_mode
= s0to3
,
576 .dev_attrs
= &max1363_dev_attr_group
,
577 .scan_attrs
= &max1363_scan_el_group
,
584 .mode_list
= max1363_mode_list
,
585 .num_modes
= ARRAY_SIZE(max1363_mode_list
),
586 .default_mode
= s0to3
,
587 .dev_attrs
= &max1363_dev_attr_group
,
588 .scan_attrs
= &max1363_scan_el_group
,
595 .mode_list
= max1363_mode_list
,
596 .num_modes
= ARRAY_SIZE(max1363_mode_list
),
597 .default_mode
= s0to3
,
598 .dev_attrs
= &max1363_dev_attr_group
,
599 .scan_attrs
= &max1363_scan_el_group
,
605 .mode_list
= max1236_mode_list
,
606 .num_modes
= ARRAY_SIZE(max1236_mode_list
),
607 .default_mode
= s0to3
,
608 .dev_attrs
= &max1363_dev_attr_group
,
609 .scan_attrs
= &max1363_scan_el_group
,
615 .mode_list
= max1236_mode_list
,
616 .num_modes
= ARRAY_SIZE(max1236_mode_list
),
617 .default_mode
= s0to3
,
618 .dev_attrs
= &max1363_dev_attr_group
,
619 .scan_attrs
= &max1363_scan_el_group
,
625 .mode_list
= max1238_mode_list
,
626 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
627 .default_mode
= s0to11
,
628 .dev_attrs
= &max1238_dev_attr_group
,
629 .scan_attrs
= &max1238_scan_el_group
,
635 .mode_list
= max1238_mode_list
,
636 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
637 .default_mode
= s0to11
,
638 .dev_attrs
= &max1238_dev_attr_group
,
639 .scan_attrs
= &max1238_scan_el_group
,
645 .mode_list
= max1236_mode_list
,
646 .num_modes
= ARRAY_SIZE(max1236_mode_list
),
647 .default_mode
= s0to3
,
648 .dev_attrs
= &max1363_dev_attr_group
,
649 .scan_attrs
= &max1363_scan_el_group
,
655 .mode_list
= max1236_mode_list
,
656 .num_modes
= ARRAY_SIZE(max1236_mode_list
),
657 .default_mode
= s0to3
,
658 .dev_attrs
= &max1363_dev_attr_group
,
659 .scan_attrs
= &max1363_scan_el_group
,
665 .mode_list
= max1238_mode_list
,
666 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
667 .default_mode
= s0to11
,
668 .dev_attrs
= &max1238_dev_attr_group
,
669 .scan_attrs
= &max1238_scan_el_group
,
675 .mode_list
= max1238_mode_list
,
676 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
677 .default_mode
= s0to11
,
678 .dev_attrs
= &max1238_dev_attr_group
,
679 .scan_attrs
= &max1238_scan_el_group
,
685 .mode_list
= max1236_mode_list
,
686 .num_modes
= ARRAY_SIZE(max1236_mode_list
),
687 .default_mode
= s0to3
,
688 .dev_attrs
= &max1363_dev_attr_group
,
689 .scan_attrs
= &max1363_scan_el_group
,
695 .mode_list
= max1236_mode_list
,
696 .num_modes
= ARRAY_SIZE(max1236_mode_list
),
697 .default_mode
= s0to3
,
698 .dev_attrs
= &max1363_dev_attr_group
,
699 .scan_attrs
= &max1363_scan_el_group
,
705 .mode_list
= max1238_mode_list
,
706 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
707 .default_mode
= s0to11
,
708 .dev_attrs
= &max1238_dev_attr_group
,
709 .scan_attrs
= &max1238_scan_el_group
,
715 .mode_list
= max1238_mode_list
,
716 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
717 .default_mode
= s0to11
,
718 .dev_attrs
= &max1238_dev_attr_group
,
719 .scan_attrs
= &max1238_scan_el_group
,
725 .mode_list
= max11607_mode_list
,
726 .num_modes
= ARRAY_SIZE(max11607_mode_list
),
727 .default_mode
= s0to3
,
728 .dev_attrs
= &max1363_dev_attr_group
,
729 .scan_attrs
= &max1363_scan_el_group
,
735 .mode_list
= max11607_mode_list
,
736 .num_modes
= ARRAY_SIZE(max11607_mode_list
),
737 .default_mode
= s0to3
,
738 .dev_attrs
= &max1363_dev_attr_group
,
739 .scan_attrs
= &max1363_scan_el_group
,
745 .mode_list
= max11608_mode_list
,
746 .num_modes
= ARRAY_SIZE(max11608_mode_list
),
747 .default_mode
= s0to7
,
748 .dev_attrs
= &max11608_dev_attr_group
,
749 .scan_attrs
= &max11608_scan_el_group
,
755 .mode_list
= max11608_mode_list
,
756 .num_modes
= ARRAY_SIZE(max11608_mode_list
),
757 .default_mode
= s0to7
,
758 .dev_attrs
= &max11608_dev_attr_group
,
759 .scan_attrs
= &max11608_scan_el_group
,
765 .mode_list
= max1238_mode_list
,
766 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
767 .default_mode
= s0to11
,
768 .dev_attrs
= &max1238_dev_attr_group
,
769 .scan_attrs
= &max1238_scan_el_group
,
775 .mode_list
= max1238_mode_list
,
776 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
777 .default_mode
= s0to11
,
778 .dev_attrs
= &max1238_dev_attr_group
,
779 .scan_attrs
= &max1238_scan_el_group
,
785 .mode_list
= max11607_mode_list
,
786 .num_modes
= ARRAY_SIZE(max11607_mode_list
),
787 .default_mode
= s0to3
,
788 .dev_attrs
= &max1363_dev_attr_group
,
789 .scan_attrs
= &max1363_scan_el_group
,
795 .mode_list
= max11607_mode_list
,
796 .num_modes
= ARRAY_SIZE(max11607_mode_list
),
797 .default_mode
= s0to3
,
798 .dev_attrs
= &max1363_dev_attr_group
,
799 .scan_attrs
= &max1363_scan_el_group
,
805 .mode_list
= max11608_mode_list
,
806 .num_modes
= ARRAY_SIZE(max11608_mode_list
),
807 .default_mode
= s0to7
,
808 .dev_attrs
= &max11608_dev_attr_group
,
809 .scan_attrs
= &max11608_scan_el_group
,
815 .mode_list
= max11608_mode_list
,
816 .num_modes
= ARRAY_SIZE(max11608_mode_list
),
817 .default_mode
= s0to7
,
818 .dev_attrs
= &max11608_dev_attr_group
,
819 .scan_attrs
= &max11608_scan_el_group
,
825 .mode_list
= max1238_mode_list
,
826 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
827 .default_mode
= s0to11
,
828 .dev_attrs
= &max1238_dev_attr_group
,
829 .scan_attrs
= &max1238_scan_el_group
,
835 .mode_list
= max1238_mode_list
,
836 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
837 .default_mode
= s0to11
,
838 .dev_attrs
= &max1238_dev_attr_group
,
839 .scan_attrs
= &max1238_scan_el_group
,
845 .mode_list
= max11607_mode_list
,
846 .num_modes
= ARRAY_SIZE(max11607_mode_list
),
847 .default_mode
= s0to3
,
848 .dev_attrs
= &max1363_dev_attr_group
,
849 .scan_attrs
= &max1363_scan_el_group
,
855 .mode_list
= max11607_mode_list
,
856 .num_modes
= ARRAY_SIZE(max11607_mode_list
),
857 .default_mode
= s0to3
,
858 .dev_attrs
= &max1363_dev_attr_group
,
859 .scan_attrs
= &max1363_scan_el_group
,
865 .mode_list
= max11608_mode_list
,
866 .num_modes
= ARRAY_SIZE(max11608_mode_list
),
867 .default_mode
= s0to7
,
868 .dev_attrs
= &max11608_dev_attr_group
,
869 .scan_attrs
= &max11608_scan_el_group
,
875 .mode_list
= max11608_mode_list
,
876 .num_modes
= ARRAY_SIZE(max11608_mode_list
),
877 .default_mode
= s0to7
,
878 .dev_attrs
= &max11608_dev_attr_group
,
879 .scan_attrs
= &max11608_scan_el_group
,
885 .mode_list
= max1238_mode_list
,
886 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
887 .default_mode
= s0to11
,
888 .dev_attrs
= &max1238_dev_attr_group
,
889 .scan_attrs
= &max1238_scan_el_group
,
895 .mode_list
= max1238_mode_list
,
896 .num_modes
= ARRAY_SIZE(max1238_mode_list
),
897 .default_mode
= s0to11
,
898 .dev_attrs
= &max1238_dev_attr_group
,
899 .scan_attrs
= &max1238_scan_el_group
,
903 static int max1363_initial_setup(struct max1363_state
*st
)
905 st
->setupbyte
= MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD
906 | MAX1363_SETUP_POWER_UP_INT_REF
907 | MAX1363_SETUP_INT_CLOCK
908 | MAX1363_SETUP_UNIPOLAR
909 | MAX1363_SETUP_NORESET
;
911 /* Set scan mode writes the config anyway so wait until then*/
912 st
->setupbyte
= MAX1363_SETUP_BYTE(st
->setupbyte
);
913 st
->current_mode
= &max1363_mode_table
[st
->chip_info
->default_mode
];
914 st
->configbyte
= MAX1363_CONFIG_BYTE(st
->configbyte
);
916 return max1363_set_scan_mode(st
);
919 static int __devinit
max1363_probe(struct i2c_client
*client
,
920 const struct i2c_device_id
*id
)
922 int ret
, i
, regdone
= 0;
923 struct max1363_state
*st
= kzalloc(sizeof(*st
), GFP_KERNEL
);
929 /* this is only used for device removal purposes */
930 i2c_set_clientdata(client
, st
);
932 atomic_set(&st
->protect_ring
, 0);
934 /* Find the chip model specific data */
935 for (i
= 0; i
< ARRAY_SIZE(max1363_chip_info_tbl
); i
++)
936 if (!strcmp(max1363_chip_info_tbl
[i
].name
, id
->name
)) {
937 st
->chip_info
= &max1363_chip_info_tbl
[i
];
940 /* Unsupported chip */
941 if (!st
->chip_info
) {
942 dev_err(&client
->dev
, "%s is not supported\n", id
->name
);
947 st
->reg
= regulator_get(&client
->dev
, "vcc");
948 if (!IS_ERR(st
->reg
)) {
949 ret
= regulator_enable(st
->reg
);
955 st
->indio_dev
= iio_allocate_device();
956 if (st
->indio_dev
== NULL
) {
958 goto error_disable_reg
;
961 st
->indio_dev
->available_scan_masks
962 = kzalloc(GFP_KERNEL
,
963 sizeof(*st
->indio_dev
->available_scan_masks
)*
964 (st
->chip_info
->num_modes
+ 1));
965 if (!st
->indio_dev
->available_scan_masks
) {
967 goto error_free_device
;
970 for (i
= 0; i
< st
->chip_info
->num_modes
; i
++)
971 st
->indio_dev
->available_scan_masks
[i
] =
972 max1363_mode_table
[st
->chip_info
->mode_list
[i
]]
974 /* Estabilish that the iio_dev is a child of the i2c device */
975 st
->indio_dev
->dev
.parent
= &client
->dev
;
976 st
->indio_dev
->attrs
= st
->chip_info
->dev_attrs
;
978 /* Todo: this shouldn't be here. */
979 st
->indio_dev
->scan_el_attrs
= st
->chip_info
->scan_attrs
;
980 st
->indio_dev
->dev_data
= (void *)(st
);
981 st
->indio_dev
->driver_module
= THIS_MODULE
;
982 st
->indio_dev
->modes
= INDIO_DIRECT_MODE
;
984 ret
= max1363_initial_setup(st
);
986 goto error_free_available_scan_masks
;
988 ret
= max1363_register_ring_funcs_and_init(st
->indio_dev
);
990 goto error_free_available_scan_masks
;
992 ret
= iio_device_register(st
->indio_dev
);
994 goto error_cleanup_ring
;
996 ret
= max1363_initialize_ring(st
->indio_dev
->ring
);
998 goto error_cleanup_ring
;
1001 max1363_ring_cleanup(st
->indio_dev
);
1002 error_free_available_scan_masks
:
1003 kfree(st
->indio_dev
->available_scan_masks
);
1006 iio_free_device(st
->indio_dev
);
1008 iio_device_unregister(st
->indio_dev
);
1010 if (!IS_ERR(st
->reg
))
1011 regulator_disable(st
->reg
);
1013 if (!IS_ERR(st
->reg
))
1014 regulator_put(st
->reg
);
1022 static int max1363_remove(struct i2c_client
*client
)
1024 struct max1363_state
*st
= i2c_get_clientdata(client
);
1025 struct iio_dev
*indio_dev
= st
->indio_dev
;
1026 max1363_uninitialize_ring(indio_dev
->ring
);
1027 max1363_ring_cleanup(indio_dev
);
1028 kfree(st
->indio_dev
->available_scan_masks
);
1029 iio_device_unregister(indio_dev
);
1030 if (!IS_ERR(st
->reg
)) {
1031 regulator_disable(st
->reg
);
1032 regulator_put(st
->reg
);
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
);