Merge staging-next tree into Linus's latest version
[pandora-kernel.git] / drivers / staging / iio / adc / max1363_core.c
1  /*
2   * iio/adc/max1363.c
3   * Copyright (C) 2008-2010 Jonathan Cameron
4   *
5   * based on linux/drivers/i2c/chips/max123x
6   * Copyright (C) 2002-2004 Stefan Eletzhofer
7   *
8   * based on linux/drivers/acron/char/pcf8583.c
9   * Copyright (C) 2000 Russell King
10   *
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.
14   *
15   * max1363.c
16   *
17   * Partial support for max1363 and similar chips.
18   *
19   * Not currently implemented.
20   *
21   * - Monitor interrrupt generation.
22   * - Control of internal reference.
23   */
24
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>
36
37 #include "../iio.h"
38 #include "../sysfs.h"
39
40 #include "../ring_generic.h"
41 #include "adc.h"
42 #include "max1363.h"
43
44 /* Here we claim all are 16 bits. This currently does no harm and saves
45  * us a lot of scan element listings */
46
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);
52
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);
77
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),
92
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),
105
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),
124
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),
139 };
140
141 const struct max1363_mode
142 *max1363_match_mode(u32 mask, const struct max1363_chip_info *ci)
143 {
144         int i;
145         if (mask)
146                 for (i = 0; i < ci->num_modes; i++)
147                         if (!((~max1363_mode_table[ci->mode_list[i]].modemask) &
148                               mask))
149                                 return &max1363_mode_table[ci->mode_list[i]];
150         return NULL;
151 };
152
153 static ssize_t max1363_show_precision(struct device *dev,
154                                 struct device_attribute *attr,
155                                 char *buf)
156 {
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);
160 }
161
162 static IIO_DEVICE_ATTR(in_precision, S_IRUGO, max1363_show_precision,
163                        NULL, 0);
164
165 static int max1363_write_basic_config(struct i2c_client *client,
166                                       unsigned char d1,
167                                       unsigned char d2)
168 {
169         int ret;
170         u8 *tx_buf = kmalloc(2 , GFP_KERNEL);
171
172         if (!tx_buf)
173                 return -ENOMEM;
174         tx_buf[0] = d1;
175         tx_buf[1] = d2;
176
177         ret = i2c_master_send(client, tx_buf, 2);
178         kfree(tx_buf);
179
180         return (ret > 0) ? 0 : ret;
181 }
182
183 int max1363_set_scan_mode(struct max1363_state *st)
184 {
185         st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
186                             | MAX1363_SCAN_MASK
187                             | MAX1363_SE_DE_MASK);
188         st->configbyte |= st->current_mode->conf;
189
190         return max1363_write_basic_config(st->client,
191                                           st->setupbyte,
192                                           st->configbyte);
193 }
194
195 static ssize_t max1363_read_single_channel(struct device *dev,
196                                    struct device_attribute *attr,
197                                    char *buf)
198 {
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;
204         s32 data ;
205         char rxbuf[2];
206         long mask;
207
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);
213                 if (data < 0) {
214                         ret = data;
215                         goto error_ret;
216                 }
217         } else {
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 */
222                         st->current_mode
223                                 = &max1363_mode_table[this_attr->address];
224                         ret = max1363_set_scan_mode(st);
225                         if (ret)
226                                 goto error_ret;
227                 }
228                 if (st->chip_info->bits != 8) {
229                         /* Get reading */
230                         data = i2c_master_recv(client, rxbuf, 2);
231                         if (data < 0) {
232                                 ret = data;
233                                 goto error_ret;
234                         }
235
236                         data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8;
237                 } else {
238                         /* Get reading */
239                         data = i2c_master_recv(client, rxbuf, 1);
240                         if (data < 0) {
241                                 ret = data;
242                                 goto error_ret;
243                         }
244                         data = rxbuf[0];
245                 }
246         }
247         /* Pretty print the result */
248         len = sprintf(buf, "%u\n", data);
249
250 error_ret:
251         mutex_unlock(&dev_info->mlock);
252         return ret ? ret : len;
253 }
254
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);
268
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);
281
282
283 static ssize_t max1363_show_scale(struct device *dev,
284                                 struct device_attribute *attr,
285                                 char *buf)
286 {
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) */
291
292         if ((1 << (st->chip_info->bits + 1))
293             > st->chip_info->int_vref_mv)
294                 return sprintf(buf, "0.5\n");
295         else
296                 return sprintf(buf, "%d\n",
297                         st->chip_info->int_vref_mv >> st->chip_info->bits);
298 }
299
300 static IIO_DEVICE_ATTR(in_scale, S_IRUGO, max1363_show_scale, NULL, 0);
301
302 static ssize_t max1363_show_name(struct device *dev,
303                                  struct device_attribute *attr,
304                                  char *buf)
305 {
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);
309 }
310
311 static IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0);
312
313 /* Applies to max1363 */
314 static const enum max1363_modes max1363_mode_list[] = {
315         _s0, _s1, _s2, _s3,
316         s0to1, s0to2, s0to3,
317         d0m1, d2m3, d1m0, d3m2,
318         d0m1to2m3, d1m0to3m2,
319 };
320
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,
332         NULL
333 };
334
335 static struct attribute_group max1363_dev_attr_group = {
336         .attrs = max1363_device_attrs,
337 };
338
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,
349         NULL,
350 };
351
352 static struct attribute_group max1363_scan_el_group = {
353         .name = "scan_elements",
354         .attrs = max1363_scan_el_attrs,
355 };
356
357 /* Appies to max1236, max1237 */
358 static const enum max1363_modes max1236_mode_list[] = {
359         _s0, _s1, _s2, _s3,
360         s0to1, s0to2, s0to3,
361         d0m1, d2m3, d1m0, d3m2,
362         d0m1to2m3, d1m0to3m2,
363         s2to3,
364 };
365
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,
377 };
378
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,
406         NULL
407 };
408
409 static struct attribute_group max1238_dev_attr_group = {
410         .attrs = max1238_device_attrs,
411 };
412
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,
439         NULL,
440 };
441
442 static struct attribute_group max1238_scan_el_group = {
443         .name = "scan_elements",
444         .attrs = max1238_scan_el_attrs,
445 };
446
447
448 static const enum max1363_modes max11607_mode_list[] = {
449         _s0, _s1, _s2, _s3,
450         s0to1, s0to2, s0to3,
451         s2to3,
452         d0m1, d2m3, d1m0, d3m2,
453         d0m1to2m3, d1m0to3m2,
454 };
455
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,
459         s6to7,
460         d0m1, d2m3, d4m5, d6m7,
461         d1m0, d3m2, d5m4, d7m6,
462         d0m1to2m3, d0m1to4m5, d0m1to6m7,
463         d1m0to3m2, d1m0to5m4, d1m0to7m6,
464 };
465
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,
485         NULL
486 };
487
488 static struct attribute_group max11608_dev_attr_group = {
489         .attrs = max11608_device_attrs,
490 };
491
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,
510 };
511
512 static struct attribute_group max11608_scan_el_group = {
513         .name = "scan_elements",
514         .attrs = max11608_scan_el_attrs,
515 };
516
517 enum { max1361,
518        max1362,
519        max1363,
520        max1364,
521        max1036,
522        max1037,
523        max1038,
524        max1039,
525        max1136,
526        max1137,
527        max1138,
528        max1139,
529        max1236,
530        max1237,
531        max1238,
532        max1239,
533        max11600,
534        max11601,
535        max11602,
536        max11603,
537        max11604,
538        max11605,
539        max11606,
540        max11607,
541        max11608,
542        max11609,
543        max11610,
544        max11611,
545        max11612,
546        max11613,
547        max11614,
548        max11615,
549        max11616,
550        max11617,
551 };
552
553 /* max1363 and max1368 tested - rest from data sheet */
554 static const struct max1363_chip_info max1363_chip_info_tbl[] = {
555         {
556                 .name = "max1361",
557                 .num_inputs = 4,
558                 .bits = 10,
559                 .int_vref_mv = 2048,
560                 .monitor_mode = 1,
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,
566         }, {
567                 .name = "max1362",
568                 .num_inputs = 4,
569                 .bits = 10,
570                 .int_vref_mv = 4096,
571                 .monitor_mode = 1,
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,
577         }, {
578                 .name = "max1363",
579                 .num_inputs = 4,
580                 .bits = 12,
581                 .int_vref_mv = 2048,
582                 .monitor_mode = 1,
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,
588         }, {
589                 .name = "max1364",
590                 .num_inputs = 4,
591                 .bits = 12,
592                 .int_vref_mv = 4096,
593                 .monitor_mode = 1,
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,
599         }, {
600                 .name = "max1036",
601                 .num_inputs = 4,
602                 .bits = 8,
603                 .int_vref_mv = 4096,
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,
609         }, {
610                 .name = "max1037",
611                 .num_inputs = 4,
612                 .bits = 8,
613                 .int_vref_mv = 2048,
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,
619         }, {
620                 .name = "max1038",
621                 .num_inputs = 12,
622                 .bits = 8,
623                 .int_vref_mv = 4096,
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,
629         }, {
630                 .name = "max1039",
631                 .num_inputs = 12,
632                 .bits = 8,
633                 .int_vref_mv = 2048,
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,
639         }, {
640                 .name = "max1136",
641                 .num_inputs = 4,
642                 .bits = 10,
643                 .int_vref_mv = 4096,
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,
649         }, {
650                 .name = "max1137",
651                 .num_inputs = 4,
652                 .bits = 10,
653                 .int_vref_mv = 2048,
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,
659         }, {
660                 .name = "max1138",
661                 .num_inputs = 12,
662                 .bits = 10,
663                 .int_vref_mv = 4096,
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,
669         }, {
670                 .name = "max1139",
671                 .num_inputs = 12,
672                 .bits = 10,
673                 .int_vref_mv = 2048,
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,
679         }, {
680                 .name = "max1236",
681                 .num_inputs = 4,
682                 .bits = 12,
683                 .int_vref_mv = 4096,
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,
689         }, {
690                 .name = "max1237",
691                 .num_inputs = 4,
692                 .bits = 12,
693                 .int_vref_mv = 2048,
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,
699         }, {
700                 .name = "max1238",
701                 .num_inputs = 12,
702                 .bits = 12,
703                 .int_vref_mv = 4096,
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,
709         }, {
710                 .name = "max1239",
711                 .num_inputs = 12,
712                 .bits = 12,
713                 .int_vref_mv = 2048,
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,
719         }, {
720                 .name = "max11600",
721                 .num_inputs = 4,
722                 .bits = 8,
723                 .int_vref_mv = 4096,
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,
729         }, {
730                 .name = "max11601",
731                 .num_inputs = 4,
732                 .bits = 8,
733                 .int_vref_mv = 2048,
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,
739         }, {
740                 .name = "max11602",
741                 .num_inputs = 8,
742                 .bits = 8,
743                 .int_vref_mv = 4096,
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,
749         }, {
750                 .name = "max11603",
751                 .num_inputs = 8,
752                 .bits = 8,
753                 .int_vref_mv = 2048,
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,
759         }, {
760                 .name = "max11604",
761                 .num_inputs = 12,
762                 .bits = 8,
763                 .int_vref_mv = 4098,
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,
769         }, {
770                 .name = "max11605",
771                 .num_inputs = 12,
772                 .bits = 8,
773                 .int_vref_mv = 2048,
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,
779         }, {
780                 .name = "max11606",
781                 .num_inputs = 4,
782                 .bits = 10,
783                 .int_vref_mv = 4096,
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,
789         }, {
790                 .name = "max11607",
791                 .num_inputs = 4,
792                 .bits = 10,
793                 .int_vref_mv = 2048,
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,
799         }, {
800                 .name = "max11608",
801                 .num_inputs = 8,
802                 .bits = 10,
803                 .int_vref_mv = 4096,
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,
809         }, {
810                 .name = "max11609",
811                 .num_inputs = 8,
812                 .bits = 10,
813                 .int_vref_mv = 2048,
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,
819         }, {
820                 .name = "max11610",
821                 .num_inputs = 12,
822                 .bits = 10,
823                 .int_vref_mv = 4098,
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,
829         }, {
830                 .name = "max11611",
831                 .num_inputs = 12,
832                 .bits = 10,
833                 .int_vref_mv = 2048,
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,
839         }, {
840                 .name = "max11612",
841                 .num_inputs = 4,
842                 .bits = 12,
843                 .int_vref_mv = 4096,
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,
849         }, {
850                 .name = "max11613",
851                 .num_inputs = 4,
852                 .bits = 12,
853                 .int_vref_mv = 2048,
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,
859         }, {
860                 .name = "max11614",
861                 .num_inputs = 8,
862                 .bits = 12,
863                 .int_vref_mv = 4096,
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,
869         }, {
870                 .name = "max11615",
871                 .num_inputs = 8,
872                 .bits = 12,
873                 .int_vref_mv = 2048,
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,
879         }, {
880                 .name = "max11616",
881                 .num_inputs = 12,
882                 .bits = 12,
883                 .int_vref_mv = 4098,
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,
889         }, {
890                 .name = "max11617",
891                 .num_inputs = 12,
892                 .bits = 12,
893                 .int_vref_mv = 2048,
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,
899         }
900 };
901
902 static int max1363_initial_setup(struct max1363_state *st)
903 {
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;
909
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);
914
915         return max1363_set_scan_mode(st);
916 }
917
918 static int __devinit max1363_probe(struct i2c_client *client,
919                                    const struct i2c_device_id *id)
920 {
921         int ret, i, regdone = 0;
922         struct max1363_state *st = kzalloc(sizeof(*st), GFP_KERNEL);
923         if (st == NULL) {
924                 ret = -ENOMEM;
925                 goto error_ret;
926         }
927
928         /* this is only used for device removal purposes */
929         i2c_set_clientdata(client, st);
930
931         atomic_set(&st->protect_ring, 0);
932
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];
937                         break;
938                 };
939         /* Unsupported chip */
940         if (!st->chip_info) {
941                 dev_err(&client->dev, "%s is not supported\n", id->name);
942                 ret = -ENODEV;
943                 goto error_free_st;
944         }
945
946         st->reg = regulator_get(&client->dev, "vcc");
947         if (!IS_ERR(st->reg)) {
948                 ret = regulator_enable(st->reg);
949                 if (ret)
950                         goto error_put_reg;
951         }
952         st->client = client;
953
954         st->indio_dev = iio_allocate_device();
955         if (st->indio_dev == NULL) {
956                 ret = -ENOMEM;
957                 goto error_disable_reg;
958         }
959
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) {
964                 ret = -ENOMEM;
965                 goto error_free_device;
966         }
967
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]]
971                         .modemask;
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;
975
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;
981
982         ret = max1363_initial_setup(st);
983         if (ret)
984                 goto error_free_available_scan_masks;
985
986         ret = max1363_register_ring_funcs_and_init(st->indio_dev);
987         if (ret)
988                 goto error_free_available_scan_masks;
989
990         ret = iio_device_register(st->indio_dev);
991         if (ret)
992                 goto error_cleanup_ring;
993         regdone = 1;
994         ret = max1363_initialize_ring(st->indio_dev->ring);
995         if (ret)
996                 goto error_cleanup_ring;
997         return 0;
998 error_cleanup_ring:
999         max1363_ring_cleanup(st->indio_dev);
1000 error_free_available_scan_masks:
1001         kfree(st->indio_dev->available_scan_masks);
1002 error_free_device:
1003         if (!regdone)
1004                 iio_free_device(st->indio_dev);
1005         else
1006                 iio_device_unregister(st->indio_dev);
1007 error_disable_reg:
1008         if (!IS_ERR(st->reg))
1009                 regulator_disable(st->reg);
1010 error_put_reg:
1011         if (!IS_ERR(st->reg))
1012                 regulator_put(st->reg);
1013 error_free_st:
1014         i2c_set_clientdata(client, NULL);
1015         kfree(st);
1016
1017 error_ret:
1018         return ret;
1019 }
1020
1021 static int max1363_remove(struct i2c_client *client)
1022 {
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);
1032         }
1033         i2c_set_clientdata(client, NULL);
1034         kfree(st);
1035
1036         return 0;
1037 }
1038
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 },
1074         {}
1075 };
1076
1077 MODULE_DEVICE_TABLE(i2c, max1363_id);
1078
1079 static struct i2c_driver max1363_driver = {
1080         .driver = {
1081                 .name = "max1363",
1082         },
1083         .probe = max1363_probe,
1084         .remove = max1363_remove,
1085         .id_table = max1363_id,
1086 };
1087
1088 static __init int max1363_init(void)
1089 {
1090         return i2c_add_driver(&max1363_driver);
1091 }
1092
1093 static __exit void max1363_exit(void)
1094 {
1095         i2c_del_driver(&max1363_driver);
1096 }
1097
1098 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
1099 MODULE_DESCRIPTION("Maxim 1363 ADC");
1100 MODULE_LICENSE("GPL v2");
1101
1102 module_init(max1363_init);
1103 module_exit(max1363_exit);