GNU Linux-libre 4.14.262-gnu1
[releases.git] / drivers / iio / adc / ti-adc108s102.c
1 /*
2  * TI ADC108S102 SPI ADC driver
3  *
4  * Copyright (c) 2013-2015 Intel Corporation.
5  * Copyright (c) 2017 Siemens AG
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms and conditions of the GNU General Public License,
9  * version 2, as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  *
16  * This IIO device driver is designed to work with the following
17  * analog to digital converters from Texas Instruments:
18  *  ADC108S102
19  *  ADC128S102
20  * The communication with ADC chip is via the SPI bus (mode 3).
21  */
22
23 #include <linux/acpi.h>
24 #include <linux/iio/iio.h>
25 #include <linux/iio/buffer.h>
26 #include <linux/iio/types.h>
27 #include <linux/iio/triggered_buffer.h>
28 #include <linux/iio/trigger_consumer.h>
29 #include <linux/interrupt.h>
30 #include <linux/module.h>
31 #include <linux/property.h>
32 #include <linux/regulator/consumer.h>
33 #include <linux/spi/spi.h>
34
35 /*
36  * In case of ACPI, we use the hard-wired 5000 mV of the Galileo and IOT2000
37  * boards as default for the reference pin VA. Device tree users encode that
38  * via the vref-supply regulator.
39  */
40 #define ADC108S102_VA_MV_ACPI_DEFAULT   5000
41
42 /*
43  * Defining the ADC resolution being 12 bits, we can use the same driver for
44  * both ADC108S102 (10 bits resolution) and ADC128S102 (12 bits resolution)
45  * chips. The ADC108S102 effectively returns a 12-bit result with the 2
46  * least-significant bits unset.
47  */
48 #define ADC108S102_BITS         12
49 #define ADC108S102_MAX_CHANNELS 8
50
51 /*
52  * 16-bit SPI command format:
53  *   [15:14] Ignored
54  *   [13:11] 3-bit channel address
55  *   [10:0]  Ignored
56  */
57 #define ADC108S102_CMD(ch)              ((u16)(ch) << 11)
58
59 /*
60  * 16-bit SPI response format:
61  *   [15:12] Zeros
62  *   [11:0]  12-bit ADC sample (for ADC108S102, [1:0] will always be 0).
63  */
64 #define ADC108S102_RES_DATA(res)        ((u16)res & GENMASK(11, 0))
65
66 struct adc108s102_state {
67         struct spi_device               *spi;
68         struct regulator                *reg;
69         u32                             va_millivolt;
70         /* SPI transfer used by triggered buffer handler*/
71         struct spi_transfer             ring_xfer;
72         /* SPI transfer used by direct scan */
73         struct spi_transfer             scan_single_xfer;
74         /* SPI message used by ring_xfer SPI transfer */
75         struct spi_message              ring_msg;
76         /* SPI message used by scan_single_xfer SPI transfer */
77         struct spi_message              scan_single_msg;
78
79         /*
80          * SPI message buffers:
81          *  tx_buf: |C0|C1|C2|C3|C4|C5|C6|C7|XX|
82          *  rx_buf: |XX|R0|R1|R2|R3|R4|R5|R6|R7|tt|tt|tt|tt|
83          *
84          *  tx_buf: 8 channel read commands, plus 1 dummy command
85          *  rx_buf: 1 dummy response, 8 channel responses, plus 64-bit timestamp
86          */
87         __be16                          rx_buf[13] ____cacheline_aligned;
88         __be16                          tx_buf[9] ____cacheline_aligned;
89 };
90
91 #define ADC108S102_V_CHAN(index)                                        \
92         {                                                               \
93                 .type = IIO_VOLTAGE,                                    \
94                 .indexed = 1,                                           \
95                 .channel = index,                                       \
96                 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |          \
97                         BIT(IIO_CHAN_INFO_SCALE),                       \
98                 .address = index,                                       \
99                 .scan_index = index,                                    \
100                 .scan_type = {                                          \
101                         .sign = 'u',                                    \
102                         .realbits = ADC108S102_BITS,                    \
103                         .storagebits = 16,                              \
104                         .endianness = IIO_BE,                           \
105                 },                                                      \
106         }
107
108 static const struct iio_chan_spec adc108s102_channels[] = {
109         ADC108S102_V_CHAN(0),
110         ADC108S102_V_CHAN(1),
111         ADC108S102_V_CHAN(2),
112         ADC108S102_V_CHAN(3),
113         ADC108S102_V_CHAN(4),
114         ADC108S102_V_CHAN(5),
115         ADC108S102_V_CHAN(6),
116         ADC108S102_V_CHAN(7),
117         IIO_CHAN_SOFT_TIMESTAMP(8),
118 };
119
120 static int adc108s102_update_scan_mode(struct iio_dev *indio_dev,
121                 unsigned long const *active_scan_mask)
122 {
123         struct adc108s102_state *st = iio_priv(indio_dev);
124         unsigned int bit, cmds;
125
126         /*
127          * Fill in the first x shorts of tx_buf with the number of channels
128          * enabled for sampling by the triggered buffer.
129          */
130         cmds = 0;
131         for_each_set_bit(bit, active_scan_mask, ADC108S102_MAX_CHANNELS)
132                 st->tx_buf[cmds++] = cpu_to_be16(ADC108S102_CMD(bit));
133
134         /* One dummy command added, to clock in the last response */
135         st->tx_buf[cmds++] = 0x00;
136
137         /* build SPI ring message */
138         st->ring_xfer.tx_buf = &st->tx_buf[0];
139         st->ring_xfer.rx_buf = &st->rx_buf[0];
140         st->ring_xfer.len = cmds * sizeof(st->tx_buf[0]);
141
142         spi_message_init_with_transfers(&st->ring_msg, &st->ring_xfer, 1);
143
144         return 0;
145 }
146
147 static irqreturn_t adc108s102_trigger_handler(int irq, void *p)
148 {
149         struct iio_poll_func *pf = p;
150         struct iio_dev *indio_dev = pf->indio_dev;
151         struct adc108s102_state *st = iio_priv(indio_dev);
152         int ret;
153
154         ret = spi_sync(st->spi, &st->ring_msg);
155         if (ret < 0)
156                 goto out_notify;
157
158         /* Skip the dummy response in the first slot */
159         iio_push_to_buffers_with_timestamp(indio_dev,
160                                            (u8 *)&st->rx_buf[1],
161                                            iio_get_time_ns(indio_dev));
162
163 out_notify:
164         iio_trigger_notify_done(indio_dev->trig);
165
166         return IRQ_HANDLED;
167 }
168
169 static int adc108s102_scan_direct(struct adc108s102_state *st, unsigned int ch)
170 {
171         int ret;
172
173         st->tx_buf[0] = cpu_to_be16(ADC108S102_CMD(ch));
174         ret = spi_sync(st->spi, &st->scan_single_msg);
175         if (ret)
176                 return ret;
177
178         /* Skip the dummy response in the first slot */
179         return be16_to_cpu(st->rx_buf[1]);
180 }
181
182 static int adc108s102_read_raw(struct iio_dev *indio_dev,
183                                struct iio_chan_spec const *chan,
184                                int *val, int *val2, long m)
185 {
186         struct adc108s102_state *st = iio_priv(indio_dev);
187         int ret;
188
189         switch (m) {
190         case IIO_CHAN_INFO_RAW:
191                 ret = iio_device_claim_direct_mode(indio_dev);
192                 if (ret)
193                         return ret;
194
195                 ret = adc108s102_scan_direct(st, chan->address);
196
197                 iio_device_release_direct_mode(indio_dev);
198
199                 if (ret < 0)
200                         return ret;
201
202                 *val = ADC108S102_RES_DATA(ret);
203
204                 return IIO_VAL_INT;
205         case IIO_CHAN_INFO_SCALE:
206                 if (chan->type != IIO_VOLTAGE)
207                         break;
208
209                 *val = st->va_millivolt;
210                 *val2 = chan->scan_type.realbits;
211
212                 return IIO_VAL_FRACTIONAL_LOG2;
213         default:
214                 break;
215         }
216
217         return -EINVAL;
218 }
219
220 static const struct iio_info adc108s102_info = {
221         .read_raw               = &adc108s102_read_raw,
222         .update_scan_mode       = &adc108s102_update_scan_mode,
223         .driver_module          = THIS_MODULE,
224 };
225
226 static int adc108s102_probe(struct spi_device *spi)
227 {
228         struct adc108s102_state *st;
229         struct iio_dev *indio_dev;
230         int ret;
231
232         indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
233         if (!indio_dev)
234                 return -ENOMEM;
235
236         st = iio_priv(indio_dev);
237
238         if (ACPI_COMPANION(&spi->dev)) {
239                 st->va_millivolt = ADC108S102_VA_MV_ACPI_DEFAULT;
240         } else {
241                 st->reg = devm_regulator_get(&spi->dev, "vref");
242                 if (IS_ERR(st->reg))
243                         return PTR_ERR(st->reg);
244
245                 ret = regulator_enable(st->reg);
246                 if (ret < 0) {
247                         dev_err(&spi->dev, "Cannot enable vref regulator\n");
248                         return ret;
249                 }
250
251                 ret = regulator_get_voltage(st->reg);
252                 if (ret < 0) {
253                         dev_err(&spi->dev, "vref get voltage failed\n");
254                         return ret;
255                 }
256
257                 st->va_millivolt = ret / 1000;
258         }
259
260         spi_set_drvdata(spi, indio_dev);
261         st->spi = spi;
262
263         indio_dev->name = spi->modalias;
264         indio_dev->dev.parent = &spi->dev;
265         indio_dev->modes = INDIO_DIRECT_MODE;
266         indio_dev->channels = adc108s102_channels;
267         indio_dev->num_channels = ARRAY_SIZE(adc108s102_channels);
268         indio_dev->info = &adc108s102_info;
269
270         /* Setup default message */
271         st->scan_single_xfer.tx_buf = st->tx_buf;
272         st->scan_single_xfer.rx_buf = st->rx_buf;
273         st->scan_single_xfer.len = 2 * sizeof(st->tx_buf[0]);
274
275         spi_message_init_with_transfers(&st->scan_single_msg,
276                                         &st->scan_single_xfer, 1);
277
278         ret = iio_triggered_buffer_setup(indio_dev, NULL,
279                                          &adc108s102_trigger_handler, NULL);
280         if (ret)
281                 goto error_disable_reg;
282
283         ret = iio_device_register(indio_dev);
284         if (ret) {
285                 dev_err(&spi->dev, "Failed to register IIO device\n");
286                 goto error_cleanup_triggered_buffer;
287         }
288         return 0;
289
290 error_cleanup_triggered_buffer:
291         iio_triggered_buffer_cleanup(indio_dev);
292
293 error_disable_reg:
294         regulator_disable(st->reg);
295
296         return ret;
297 }
298
299 static int adc108s102_remove(struct spi_device *spi)
300 {
301         struct iio_dev *indio_dev = spi_get_drvdata(spi);
302         struct adc108s102_state *st = iio_priv(indio_dev);
303
304         iio_device_unregister(indio_dev);
305         iio_triggered_buffer_cleanup(indio_dev);
306
307         regulator_disable(st->reg);
308
309         return 0;
310 }
311
312 #ifdef CONFIG_OF
313 static const struct of_device_id adc108s102_of_match[] = {
314         { .compatible = "ti,adc108s102" },
315         { }
316 };
317 MODULE_DEVICE_TABLE(of, adc108s102_of_match);
318 #endif
319
320 #ifdef CONFIG_ACPI
321 static const struct acpi_device_id adc108s102_acpi_ids[] = {
322         { "INT3495", 0 },
323         { }
324 };
325 MODULE_DEVICE_TABLE(acpi, adc108s102_acpi_ids);
326 #endif
327
328 static const struct spi_device_id adc108s102_id[] = {
329         { "adc108s102", 0 },
330         { }
331 };
332 MODULE_DEVICE_TABLE(spi, adc108s102_id);
333
334 static struct spi_driver adc108s102_driver = {
335         .driver = {
336                 .name   = "adc108s102",
337                 .of_match_table = of_match_ptr(adc108s102_of_match),
338                 .acpi_match_table = ACPI_PTR(adc108s102_acpi_ids),
339         },
340         .probe          = adc108s102_probe,
341         .remove         = adc108s102_remove,
342         .id_table       = adc108s102_id,
343 };
344 module_spi_driver(adc108s102_driver);
345
346 MODULE_AUTHOR("Bogdan Pricop <bogdan.pricop@emutex.com>");
347 MODULE_DESCRIPTION("Texas Instruments ADC108S102 and ADC128S102 driver");
348 MODULE_LICENSE("GPL v2");