2 * linux/drivers/industrialio/adc/max1363.c
3 * Copyright (C) 2008 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.
23 * - Sysfs scan interface currently assumes unipolar mode.
26 #include <linux/interrupt.h>
27 #include <linux/gpio.h>
28 #include <linux/workqueue.h>
29 #include <linux/device.h>
30 #include <linux/kernel.h>
31 #include <linux/sysfs.h>
32 #include <linux/list.h>
33 #include <linux/i2c.h>
34 #include <linux/rtc.h>
35 #include <linux/regulator/consumer.h>
36 #include <linux/slab.h>
43 /* Available scan modes.
44 * Awkwardly the associated enum is in the header so it is available to
45 * the ring buffer code.
47 static const struct max1363_mode max1363_mode_table[] = {
48 MAX1363_MODE_SINGLE(0),
49 MAX1363_MODE_SINGLE(1),
50 MAX1363_MODE_SINGLE(2),
51 MAX1363_MODE_SINGLE(3),
52 MAX1363_MODE_SINGLE(4),
53 MAX1363_MODE_SINGLE(5),
54 MAX1363_MODE_SINGLE(6),
55 MAX1363_MODE_SINGLE(7),
56 MAX1363_MODE_SINGLE(8),
57 MAX1363_MODE_SINGLE(9),
58 MAX1363_MODE_SINGLE(10),
59 MAX1363_MODE_SINGLE(11),
61 MAX1363_MODE_SINGLE_TIMES_8(0),
62 MAX1363_MODE_SINGLE_TIMES_8(1),
63 MAX1363_MODE_SINGLE_TIMES_8(2),
64 MAX1363_MODE_SINGLE_TIMES_8(3),
65 MAX1363_MODE_SINGLE_TIMES_8(4),
66 MAX1363_MODE_SINGLE_TIMES_8(5),
67 MAX1363_MODE_SINGLE_TIMES_8(6),
68 MAX1363_MODE_SINGLE_TIMES_8(7),
69 MAX1363_MODE_SINGLE_TIMES_8(8),
70 MAX1363_MODE_SINGLE_TIMES_8(9),
71 MAX1363_MODE_SINGLE_TIMES_8(10),
72 MAX1363_MODE_SINGLE_TIMES_8(11),
74 MAX1363_MODE_SCAN_TO_CHANNEL(1),
75 MAX1363_MODE_SCAN_TO_CHANNEL(2),
76 MAX1363_MODE_SCAN_TO_CHANNEL(3),
77 MAX1363_MODE_SCAN_TO_CHANNEL(4),
78 MAX1363_MODE_SCAN_TO_CHANNEL(5),
79 MAX1363_MODE_SCAN_TO_CHANNEL(6),
80 MAX1363_MODE_SCAN_TO_CHANNEL(7),
81 MAX1363_MODE_SCAN_TO_CHANNEL(8),
82 MAX1363_MODE_SCAN_TO_CHANNEL(9),
83 MAX1363_MODE_SCAN_TO_CHANNEL(10),
84 MAX1363_MODE_SCAN_TO_CHANNEL(11),
86 MAX1363_MODE_DIFF_SINGLE(0, 1),
87 MAX1363_MODE_DIFF_SINGLE(2, 3),
88 MAX1363_MODE_DIFF_SINGLE(4, 5),
89 MAX1363_MODE_DIFF_SINGLE(6, 7),
90 MAX1363_MODE_DIFF_SINGLE(8, 9),
91 MAX1363_MODE_DIFF_SINGLE(10, 11),
92 MAX1363_MODE_DIFF_SINGLE(1, 0),
93 MAX1363_MODE_DIFF_SINGLE(3, 2),
94 MAX1363_MODE_DIFF_SINGLE(5, 4),
95 MAX1363_MODE_DIFF_SINGLE(7, 6),
96 MAX1363_MODE_DIFF_SINGLE(9, 8),
97 MAX1363_MODE_DIFF_SINGLE(11, 10),
99 MAX1363_MODE_DIFF_SINGLE_TIMES_8(0, 1),
100 MAX1363_MODE_DIFF_SINGLE_TIMES_8(2, 3),
101 MAX1363_MODE_DIFF_SINGLE_TIMES_8(4, 5),
102 MAX1363_MODE_DIFF_SINGLE_TIMES_8(6, 7),
103 MAX1363_MODE_DIFF_SINGLE_TIMES_8(8, 9),
104 MAX1363_MODE_DIFF_SINGLE_TIMES_8(10, 11),
105 MAX1363_MODE_DIFF_SINGLE_TIMES_8(1, 0),
106 MAX1363_MODE_DIFF_SINGLE_TIMES_8(3, 2),
107 MAX1363_MODE_DIFF_SINGLE_TIMES_8(5, 4),
108 MAX1363_MODE_DIFF_SINGLE_TIMES_8(7, 6),
109 MAX1363_MODE_DIFF_SINGLE_TIMES_8(9, 8),
110 MAX1363_MODE_DIFF_SINGLE_TIMES_8(11, 10),
112 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...2-3, 2, 2),
113 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...4-5, 4, 3),
114 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...6-7, 6, 4),
115 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...8-9, 8, 5),
116 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...10-11, 10, 6),
117 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...3-2, 3, 2),
118 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...5-4, 5, 3),
119 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...7-6, 7, 4),
120 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...9-8, 9, 5),
121 MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...11-10, 11, 6),
123 MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3),
124 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7),
125 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8),
126 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9),
127 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10),
128 MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11),
130 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(6-7...8-9, 8, 2),
131 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(6-7...10-11, 10, 3),
132 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(7-6...9-8, 9, 2),
133 MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(7-6...11-10, 11, 3),
136 /* Applies to max1363 */
137 static const enum max1363_modes max1363_mode_list[] = {
141 d0m1, d2m3, d1m0, d3m2,
142 de0m1, de2m3, de1m0, de3m2,
143 d0m1to2m3, d1m0to3m2,
146 /* Appies to max1236, max1237 */
147 static const enum max1363_modes max1236_mode_list[] = {
151 d0m1, d2m3, d1m0, d3m2,
152 de0m1, de2m3, de1m0, de3m2,
153 d0m1to2m3, d1m0to3m2,
157 /* Applies to max1238, max1239 */
158 static const enum max1363_modes max1238_mode_list[] = {
159 _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
160 se0, se1, se2, se3, se4, se5, se6, se7, se8, se9, se10, se11,
161 s0to1, s0to2, s0to3, s0to4, s0to5, s0to6,
162 s0to7, s0to8, s0to9, s0to10, s0to11,
163 d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
164 d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
165 de0m1, de2m3, de4m5, de6m7, de8m9, de10m11,
166 de1m0, de3m2, de5m4, de7m6, de9m8, de11m10,
167 d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11,
168 d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10,
169 s6to7, s6to8, s6to9, s6to10, s6to11,
170 s6m7to8m9, s6m7to10m11, s7m6to9m8, s7m6to11m10,
188 /* max1363 and max1368 tested - rest from data sheet */
189 static const struct max1363_chip_info max1363_chip_info_tbl[] = {
194 .mode_list = max1363_mode_list,
195 .num_modes = ARRAY_SIZE(max1363_mode_list),
196 .default_mode = s0to3,
201 .mode_list = max1363_mode_list,
202 .num_modes = ARRAY_SIZE(max1363_mode_list),
203 .default_mode = s0to3,
208 .mode_list = max1363_mode_list,
209 .num_modes = ARRAY_SIZE(max1363_mode_list),
210 .default_mode = s0to3,
215 .mode_list = max1363_mode_list,
216 .num_modes = ARRAY_SIZE(max1363_mode_list),
217 .default_mode = s0to3,
222 .mode_list = max1236_mode_list,
223 .num_modes = ARRAY_SIZE(max1236_mode_list),
224 .default_mode = s0to3,
229 .mode_list = max1236_mode_list,
230 .num_modes = ARRAY_SIZE(max1236_mode_list),
231 .default_mode = s0to3,
236 .mode_list = max1238_mode_list,
237 .num_modes = ARRAY_SIZE(max1238_mode_list),
238 .default_mode = s0to11,
243 .mode_list = max1238_mode_list,
244 .num_modes = ARRAY_SIZE(max1238_mode_list),
245 .default_mode = s0to11,
250 .mode_list = max1236_mode_list,
251 .num_modes = ARRAY_SIZE(max1236_mode_list),
252 .default_mode = s0to3,
257 .mode_list = max1236_mode_list,
258 .num_modes = ARRAY_SIZE(max1236_mode_list),
259 .default_mode = s0to3,
264 .mode_list = max1238_mode_list,
265 .num_modes = ARRAY_SIZE(max1238_mode_list),
266 .default_mode = s0to11,
271 .mode_list = max1238_mode_list,
272 .num_modes = ARRAY_SIZE(max1238_mode_list),
273 .default_mode = s0to11,
277 static int max1363_write_basic_config(struct i2c_client *client,
282 u8 *tx_buf = kmalloc(2 , GFP_KERNEL);
288 ret = i2c_master_send(client, tx_buf, 2);
290 return (ret > 0) ? 0 : ret;
293 static int max1363_set_scan_mode(struct max1363_state *st)
295 st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
297 | MAX1363_SE_DE_MASK);
298 st->configbyte |= st->current_mode->conf;
300 return max1363_write_basic_config(st->client,
305 static int max1363_initial_setup(struct max1363_state *st)
307 st->setupbyte = MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD
308 | MAX1363_SETUP_POWER_UP_INT_REF
309 | MAX1363_SETUP_INT_CLOCK
310 | MAX1363_SETUP_UNIPOLAR
311 | MAX1363_SETUP_NORESET;
313 /* Set scan mode writes the config anyway so wait until then*/
314 st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
315 st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
316 st->configbyte = MAX1363_CONFIG_BYTE(st->configbyte);
318 return max1363_set_scan_mode(st);
321 static ssize_t max1363_show_av_scan_modes(struct device *dev,
322 struct device_attribute *attr,
325 struct iio_dev *dev_info = dev_get_drvdata(dev);
326 struct max1363_state *st = dev_info->dev_data;
329 for (i = 0; i < st->chip_info->num_modes; i++)
330 len += sprintf(buf + len, "%s ",
331 max1363_mode_table[st->chip_info
332 ->mode_list[i]].name);
333 len += sprintf(buf + len, "\n");
339 /* The dev here is the sysfs related one, not the underlying i2c one */
340 static ssize_t max1363_scan_direct(struct device *dev,
341 struct device_attribute *attr,
344 struct iio_dev *dev_info = dev_get_drvdata(dev);
345 struct max1363_state *st = dev_info->dev_data;
347 struct i2c_client *client = st->client;
350 if (st->current_mode->numvals == 0)
352 rxbuf = kmalloc(st->current_mode->numvals*2, GFP_KERNEL);
356 /* Interpretation depends on whether these are signed or not!*/
357 /* Assume not for now */
358 ret = i2c_master_recv(client, rxbuf, st->current_mode->numvals*2);
362 for (i = 0; i < st->current_mode->numvals; i++)
363 len += sprintf(buf+len, "%d ",
364 ((int)(rxbuf[i*2+0]&0x0F) << 8)
365 + ((int)(rxbuf[i*2+1])));
367 len += sprintf(buf + len, "\n");
372 static ssize_t max1363_scan(struct device *dev,
373 struct device_attribute *attr,
376 struct iio_dev *dev_info = dev_get_drvdata(dev);
379 mutex_lock(&dev_info->mlock);
380 if (dev_info->currentmode == INDIO_RING_TRIGGERED)
381 ret = max1363_scan_from_ring(dev, attr, buf);
383 ret = max1363_scan_direct(dev, attr, buf);
384 mutex_unlock(&dev_info->mlock);
389 /* Cannot query the device, so use local copy of state */
390 static ssize_t max1363_show_scan_mode(struct device *dev,
391 struct device_attribute *attr,
394 struct iio_dev *dev_info = dev_get_drvdata(dev);
395 struct max1363_state *st = dev_info->dev_data;
397 return sprintf(buf, "%s\n", st->current_mode->name);
400 static const struct max1363_mode
401 *__max1363_find_mode_in_ci(const struct max1363_chip_info *info,
405 for (i = 0; i < info->num_modes; i++)
406 if (strcmp(max1363_mode_table[info->mode_list[i]].name, buf)
408 return &max1363_mode_table[info->mode_list[i]];
412 static ssize_t max1363_store_scan_mode(struct device *dev,
413 struct device_attribute *attr,
417 struct iio_dev *dev_info = dev_get_drvdata(dev);
418 struct max1363_state *st = dev_info->dev_data;
419 const struct max1363_mode *new_mode;
422 mutex_lock(&dev_info->mlock);
424 /* Avoid state changes if a ring buffer is enabled */
425 if (!iio_ring_enabled(dev_info)) {
427 = __max1363_find_mode_in_ci(st->chip_info, buf);
432 st->current_mode = new_mode;
433 ret = max1363_set_scan_mode(st);
440 mutex_unlock(&dev_info->mlock);
445 mutex_unlock(&dev_info->mlock);
450 IIO_DEV_ATTR_AVAIL_SCAN_MODES(max1363_show_av_scan_modes);
451 IIO_DEV_ATTR_SCAN_MODE(S_IRUGO | S_IWUSR,
452 max1363_show_scan_mode,
453 max1363_store_scan_mode);
455 IIO_DEV_ATTR_SCAN(max1363_scan);
457 static ssize_t max1363_show_name(struct device *dev,
458 struct device_attribute *attr,
461 struct iio_dev *dev_info = dev_get_drvdata(dev);
462 struct max1363_state *st = dev_info->dev_data;
463 return sprintf(buf, "%s\n", st->chip_info->name);
466 IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0);
470 static struct attribute *max1363_attributes[] = {
471 &iio_dev_attr_available_scan_modes.dev_attr.attr,
472 &iio_dev_attr_scan_mode.dev_attr.attr,
473 &iio_dev_attr_scan.dev_attr.attr,
474 &iio_dev_attr_name.dev_attr.attr,
478 static const struct attribute_group max1363_attribute_group = {
479 .attrs = max1363_attributes,
482 static int __devinit max1363_probe(struct i2c_client *client,
483 const struct i2c_device_id *id)
485 int ret, i, regdone = 0;
486 struct max1363_state *st = kzalloc(sizeof(*st), GFP_KERNEL);
492 /* this is only used for device removal purposes */
493 i2c_set_clientdata(client, st);
495 atomic_set(&st->protect_ring, 0);
497 /* Find the chip model specific data */
498 for (i = 0; i < ARRAY_SIZE(max1363_chip_info_tbl); i++)
499 if (!strcmp(max1363_chip_info_tbl[i].name, id->name)) {
500 st->chip_info = &max1363_chip_info_tbl[i];
503 /* Unsupported chip */
504 if (!st->chip_info) {
505 dev_err(&client->dev, "%s is not supported\n", id->name);
509 st->reg = regulator_get(&client->dev, "vcc");
510 if (!IS_ERR(st->reg)) {
511 ret = regulator_enable(st->reg);
517 st->indio_dev = iio_allocate_device();
518 if (st->indio_dev == NULL) {
520 goto error_disable_reg;
523 /* Estabilish that the iio_dev is a child of the i2c device */
524 st->indio_dev->dev.parent = &client->dev;
525 st->indio_dev->attrs = &max1363_attribute_group;
526 st->indio_dev->dev_data = (void *)(st);
527 st->indio_dev->driver_module = THIS_MODULE;
528 st->indio_dev->modes = INDIO_DIRECT_MODE;
530 ret = max1363_initial_setup(st);
532 goto error_free_device;
534 ret = max1363_register_ring_funcs_and_init(st->indio_dev);
536 goto error_free_device;
538 ret = iio_device_register(st->indio_dev);
540 goto error_cleanup_ring;
542 ret = max1363_initialize_ring(st->indio_dev->ring);
544 goto error_cleanup_ring;
547 max1363_ring_cleanup(st->indio_dev);
550 iio_free_device(st->indio_dev);
552 iio_device_unregister(st->indio_dev);
554 if (!IS_ERR(st->reg))
555 regulator_disable(st->reg);
557 if (!IS_ERR(st->reg))
558 regulator_put(st->reg);
566 static int max1363_remove(struct i2c_client *client)
568 struct max1363_state *st = i2c_get_clientdata(client);
569 struct iio_dev *indio_dev = st->indio_dev;
570 max1363_uninitialize_ring(indio_dev->ring);
571 max1363_ring_cleanup(indio_dev);
572 iio_device_unregister(indio_dev);
573 if (!IS_ERR(st->reg)) {
574 regulator_disable(st->reg);
575 regulator_put(st->reg);
582 static const struct i2c_device_id max1363_id[] = {
583 { "max1361", max1361 },
584 { "max1362", max1362 },
585 { "max1363", max1363 },
586 { "max1364", max1364 },
587 { "max1136", max1136 },
588 { "max1137", max1137 },
589 { "max1138", max1138 },
590 { "max1139", max1139 },
591 { "max1236", max1236 },
592 { "max1237", max1237 },
593 { "max1238", max1238 },
594 { "max1239", max1239 },
598 MODULE_DEVICE_TABLE(i2c, max1363_id);
600 static struct i2c_driver max1363_driver = {
604 .probe = max1363_probe,
605 .remove = max1363_remove,
606 .id_table = max1363_id,
609 static __init int max1363_init(void)
611 return i2c_add_driver(&max1363_driver);
614 static __exit void max1363_exit(void)
616 i2c_del_driver(&max1363_driver);
619 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
620 MODULE_DESCRIPTION("Maxim 1363 ADC");
621 MODULE_LICENSE("GPL v2");
623 module_init(max1363_init);
624 module_exit(max1363_exit);