blob: 1e382b6c142443edb2b84d711a9414fb77f57dab [file] [log] [blame]
Fabrice Gasnier0f883b22016-11-15 16:30:58 +01001/*
2 * This file is part of STM32 ADC driver
3 *
4 * Copyright (C) 2016, STMicroelectronics - All Rights Reserved
5 * Author: Fabrice Gasnier <fabrice.gasnier@st.com>.
6 *
7 * License type: GPLv2
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License version 2 as published by
11 * the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 * or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along with
19 * this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#include <linux/clk.h>
23#include <linux/delay.h>
24#include <linux/iio/iio.h>
Fabrice Gasnierda9b9482017-01-26 15:28:29 +010025#include <linux/iio/buffer.h>
26#include <linux/iio/trigger.h>
27#include <linux/iio/trigger_consumer.h>
28#include <linux/iio/triggered_buffer.h>
Fabrice Gasnier0f883b22016-11-15 16:30:58 +010029#include <linux/interrupt.h>
30#include <linux/io.h>
31#include <linux/module.h>
32#include <linux/platform_device.h>
33#include <linux/of.h>
34
35#include "stm32-adc-core.h"
36
37/* STM32F4 - Registers for each ADC instance */
38#define STM32F4_ADC_SR 0x00
39#define STM32F4_ADC_CR1 0x04
40#define STM32F4_ADC_CR2 0x08
41#define STM32F4_ADC_SMPR1 0x0C
42#define STM32F4_ADC_SMPR2 0x10
43#define STM32F4_ADC_HTR 0x24
44#define STM32F4_ADC_LTR 0x28
45#define STM32F4_ADC_SQR1 0x2C
46#define STM32F4_ADC_SQR2 0x30
47#define STM32F4_ADC_SQR3 0x34
48#define STM32F4_ADC_JSQR 0x38
49#define STM32F4_ADC_JDR1 0x3C
50#define STM32F4_ADC_JDR2 0x40
51#define STM32F4_ADC_JDR3 0x44
52#define STM32F4_ADC_JDR4 0x48
53#define STM32F4_ADC_DR 0x4C
54
55/* STM32F4_ADC_SR - bit fields */
56#define STM32F4_STRT BIT(4)
57#define STM32F4_EOC BIT(1)
58
59/* STM32F4_ADC_CR1 - bit fields */
60#define STM32F4_SCAN BIT(8)
61#define STM32F4_EOCIE BIT(5)
62
63/* STM32F4_ADC_CR2 - bit fields */
64#define STM32F4_SWSTART BIT(30)
Fabrice Gasnierda9b9482017-01-26 15:28:29 +010065#define STM32F4_EXTEN_SHIFT 28
Fabrice Gasnier0f883b22016-11-15 16:30:58 +010066#define STM32F4_EXTEN_MASK GENMASK(29, 28)
Fabrice Gasnierda9b9482017-01-26 15:28:29 +010067#define STM32F4_EXTSEL_SHIFT 24
68#define STM32F4_EXTSEL_MASK GENMASK(27, 24)
Fabrice Gasnier0f883b22016-11-15 16:30:58 +010069#define STM32F4_EOCS BIT(10)
70#define STM32F4_ADON BIT(0)
71
Fabrice Gasnierda9b9482017-01-26 15:28:29 +010072#define STM32_ADC_MAX_SQ 16 /* SQ1..SQ16 */
Fabrice Gasnier0f883b22016-11-15 16:30:58 +010073#define STM32_ADC_TIMEOUT_US 100000
74#define STM32_ADC_TIMEOUT (msecs_to_jiffies(STM32_ADC_TIMEOUT_US / 1000))
75
Fabrice Gasnierda9b9482017-01-26 15:28:29 +010076/* External trigger enable */
77enum stm32_adc_exten {
78 STM32_EXTEN_SWTRIG,
79 STM32_EXTEN_HWTRIG_RISING_EDGE,
80 STM32_EXTEN_HWTRIG_FALLING_EDGE,
81 STM32_EXTEN_HWTRIG_BOTH_EDGES,
82};
83
84/**
85 * stm32_adc_regs - stm32 ADC misc registers & bitfield desc
86 * @reg: register offset
87 * @mask: bitfield mask
88 * @shift: left shift
89 */
90struct stm32_adc_regs {
91 int reg;
92 int mask;
93 int shift;
94};
95
Fabrice Gasnier0f883b22016-11-15 16:30:58 +010096/**
97 * struct stm32_adc - private data of each ADC IIO instance
98 * @common: reference to ADC block common data
99 * @offset: ADC instance register offset in ADC block
100 * @completion: end of single conversion completion
101 * @buffer: data buffer
102 * @clk: clock for this adc instance
103 * @irq: interrupt for this adc instance
104 * @lock: spinlock
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100105 * @bufi: data buffer index
106 * @num_conv: expected number of scan conversions
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100107 */
108struct stm32_adc {
109 struct stm32_adc_common *common;
110 u32 offset;
111 struct completion completion;
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100112 u16 buffer[STM32_ADC_MAX_SQ];
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100113 struct clk *clk;
114 int irq;
115 spinlock_t lock; /* interrupt lock */
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100116 unsigned int bufi;
117 unsigned int num_conv;
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100118};
119
120/**
121 * struct stm32_adc_chan_spec - specification of stm32 adc channel
122 * @type: IIO channel type
123 * @channel: channel number (single ended)
124 * @name: channel name (single ended)
125 */
126struct stm32_adc_chan_spec {
127 enum iio_chan_type type;
128 int channel;
129 const char *name;
130};
131
132/* Input definitions common for all STM32F4 instances */
133static const struct stm32_adc_chan_spec stm32f4_adc123_channels[] = {
134 { IIO_VOLTAGE, 0, "in0" },
135 { IIO_VOLTAGE, 1, "in1" },
136 { IIO_VOLTAGE, 2, "in2" },
137 { IIO_VOLTAGE, 3, "in3" },
138 { IIO_VOLTAGE, 4, "in4" },
139 { IIO_VOLTAGE, 5, "in5" },
140 { IIO_VOLTAGE, 6, "in6" },
141 { IIO_VOLTAGE, 7, "in7" },
142 { IIO_VOLTAGE, 8, "in8" },
143 { IIO_VOLTAGE, 9, "in9" },
144 { IIO_VOLTAGE, 10, "in10" },
145 { IIO_VOLTAGE, 11, "in11" },
146 { IIO_VOLTAGE, 12, "in12" },
147 { IIO_VOLTAGE, 13, "in13" },
148 { IIO_VOLTAGE, 14, "in14" },
149 { IIO_VOLTAGE, 15, "in15" },
150};
151
152/**
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100153 * stm32f4_sq - describe regular sequence registers
154 * - L: sequence len (register & bit field)
155 * - SQ1..SQ16: sequence entries (register & bit field)
156 */
157static const struct stm32_adc_regs stm32f4_sq[STM32_ADC_MAX_SQ + 1] = {
158 /* L: len bit field description to be kept as first element */
159 { STM32F4_ADC_SQR1, GENMASK(23, 20), 20 },
160 /* SQ1..SQ16 registers & bit fields (reg, mask, shift) */
161 { STM32F4_ADC_SQR3, GENMASK(4, 0), 0 },
162 { STM32F4_ADC_SQR3, GENMASK(9, 5), 5 },
163 { STM32F4_ADC_SQR3, GENMASK(14, 10), 10 },
164 { STM32F4_ADC_SQR3, GENMASK(19, 15), 15 },
165 { STM32F4_ADC_SQR3, GENMASK(24, 20), 20 },
166 { STM32F4_ADC_SQR3, GENMASK(29, 25), 25 },
167 { STM32F4_ADC_SQR2, GENMASK(4, 0), 0 },
168 { STM32F4_ADC_SQR2, GENMASK(9, 5), 5 },
169 { STM32F4_ADC_SQR2, GENMASK(14, 10), 10 },
170 { STM32F4_ADC_SQR2, GENMASK(19, 15), 15 },
171 { STM32F4_ADC_SQR2, GENMASK(24, 20), 20 },
172 { STM32F4_ADC_SQR2, GENMASK(29, 25), 25 },
173 { STM32F4_ADC_SQR1, GENMASK(4, 0), 0 },
174 { STM32F4_ADC_SQR1, GENMASK(9, 5), 5 },
175 { STM32F4_ADC_SQR1, GENMASK(14, 10), 10 },
176 { STM32F4_ADC_SQR1, GENMASK(19, 15), 15 },
177};
178
179/**
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100180 * STM32 ADC registers access routines
181 * @adc: stm32 adc instance
182 * @reg: reg offset in adc instance
183 *
184 * Note: All instances share same base, with 0x0, 0x100 or 0x200 offset resp.
185 * for adc1, adc2 and adc3.
186 */
187static u32 stm32_adc_readl(struct stm32_adc *adc, u32 reg)
188{
189 return readl_relaxed(adc->common->base + adc->offset + reg);
190}
191
192static u16 stm32_adc_readw(struct stm32_adc *adc, u32 reg)
193{
194 return readw_relaxed(adc->common->base + adc->offset + reg);
195}
196
197static void stm32_adc_writel(struct stm32_adc *adc, u32 reg, u32 val)
198{
199 writel_relaxed(val, adc->common->base + adc->offset + reg);
200}
201
202static void stm32_adc_set_bits(struct stm32_adc *adc, u32 reg, u32 bits)
203{
204 unsigned long flags;
205
206 spin_lock_irqsave(&adc->lock, flags);
207 stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) | bits);
208 spin_unlock_irqrestore(&adc->lock, flags);
209}
210
211static void stm32_adc_clr_bits(struct stm32_adc *adc, u32 reg, u32 bits)
212{
213 unsigned long flags;
214
215 spin_lock_irqsave(&adc->lock, flags);
216 stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) & ~bits);
217 spin_unlock_irqrestore(&adc->lock, flags);
218}
219
220/**
221 * stm32_adc_conv_irq_enable() - Enable end of conversion interrupt
222 * @adc: stm32 adc instance
223 */
224static void stm32_adc_conv_irq_enable(struct stm32_adc *adc)
225{
226 stm32_adc_set_bits(adc, STM32F4_ADC_CR1, STM32F4_EOCIE);
227};
228
229/**
230 * stm32_adc_conv_irq_disable() - Disable end of conversion interrupt
231 * @adc: stm32 adc instance
232 */
233static void stm32_adc_conv_irq_disable(struct stm32_adc *adc)
234{
235 stm32_adc_clr_bits(adc, STM32F4_ADC_CR1, STM32F4_EOCIE);
236}
237
238/**
239 * stm32_adc_start_conv() - Start conversions for regular channels.
240 * @adc: stm32 adc instance
241 */
242static void stm32_adc_start_conv(struct stm32_adc *adc)
243{
244 stm32_adc_set_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
245 stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_EOCS | STM32F4_ADON);
246
247 /* Wait for Power-up time (tSTAB from datasheet) */
248 usleep_range(2, 3);
249
250 /* Software start ? (e.g. trigger detection disabled ?) */
251 if (!(stm32_adc_readl(adc, STM32F4_ADC_CR2) & STM32F4_EXTEN_MASK))
252 stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_SWSTART);
253}
254
255static void stm32_adc_stop_conv(struct stm32_adc *adc)
256{
257 stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_EXTEN_MASK);
258 stm32_adc_clr_bits(adc, STM32F4_ADC_SR, STM32F4_STRT);
259
260 stm32_adc_clr_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
261 stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_ADON);
262}
263
264/**
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100265 * stm32_adc_conf_scan_seq() - Build regular channels scan sequence
266 * @indio_dev: IIO device
267 * @scan_mask: channels to be converted
268 *
269 * Conversion sequence :
270 * Configure ADC scan sequence based on selected channels in scan_mask.
271 * Add channels to SQR registers, from scan_mask LSB to MSB, then
272 * program sequence len.
273 */
274static int stm32_adc_conf_scan_seq(struct iio_dev *indio_dev,
275 const unsigned long *scan_mask)
276{
277 struct stm32_adc *adc = iio_priv(indio_dev);
278 const struct iio_chan_spec *chan;
279 u32 val, bit;
280 int i = 0;
281
282 for_each_set_bit(bit, scan_mask, indio_dev->masklength) {
283 chan = indio_dev->channels + bit;
284 /*
285 * Assign one channel per SQ entry in regular
286 * sequence, starting with SQ1.
287 */
288 i++;
289 if (i > STM32_ADC_MAX_SQ)
290 return -EINVAL;
291
292 dev_dbg(&indio_dev->dev, "%s chan %d to SQ%d\n",
293 __func__, chan->channel, i);
294
295 val = stm32_adc_readl(adc, stm32f4_sq[i].reg);
296 val &= ~stm32f4_sq[i].mask;
297 val |= chan->channel << stm32f4_sq[i].shift;
298 stm32_adc_writel(adc, stm32f4_sq[i].reg, val);
299 }
300
301 if (!i)
302 return -EINVAL;
303
304 /* Sequence len */
305 val = stm32_adc_readl(adc, stm32f4_sq[0].reg);
306 val &= ~stm32f4_sq[0].mask;
307 val |= ((i - 1) << stm32f4_sq[0].shift);
308 stm32_adc_writel(adc, stm32f4_sq[0].reg, val);
309
310 return 0;
311}
312
313/**
314 * stm32_adc_get_trig_extsel() - Get external trigger selection
315 * @trig: trigger
316 *
317 * Returns trigger extsel value, if trig matches, -EINVAL otherwise.
318 */
319static int stm32_adc_get_trig_extsel(struct iio_trigger *trig)
320{
321 return -EINVAL;
322}
323
324/**
325 * stm32_adc_set_trig() - Set a regular trigger
326 * @indio_dev: IIO device
327 * @trig: IIO trigger
328 *
329 * Set trigger source/polarity (e.g. SW, or HW with polarity) :
330 * - if HW trigger disabled (e.g. trig == NULL, conversion launched by sw)
331 * - if HW trigger enabled, set source & polarity
332 */
333static int stm32_adc_set_trig(struct iio_dev *indio_dev,
334 struct iio_trigger *trig)
335{
336 struct stm32_adc *adc = iio_priv(indio_dev);
337 u32 val, extsel = 0, exten = STM32_EXTEN_SWTRIG;
338 unsigned long flags;
339 int ret;
340
341 if (trig) {
342 ret = stm32_adc_get_trig_extsel(trig);
343 if (ret < 0)
344 return ret;
345
346 /* set trigger source and polarity (default to rising edge) */
347 extsel = ret;
348 exten = STM32_EXTEN_HWTRIG_RISING_EDGE;
349 }
350
351 spin_lock_irqsave(&adc->lock, flags);
352 val = stm32_adc_readl(adc, STM32F4_ADC_CR2);
353 val &= ~(STM32F4_EXTEN_MASK | STM32F4_EXTSEL_MASK);
354 val |= exten << STM32F4_EXTEN_SHIFT;
355 val |= extsel << STM32F4_EXTSEL_SHIFT;
356 stm32_adc_writel(adc, STM32F4_ADC_CR2, val);
357 spin_unlock_irqrestore(&adc->lock, flags);
358
359 return 0;
360}
361
362/**
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100363 * stm32_adc_single_conv() - Performs a single conversion
364 * @indio_dev: IIO device
365 * @chan: IIO channel
366 * @res: conversion result
367 *
368 * The function performs a single conversion on a given channel:
369 * - Program sequencer with one channel (e.g. in SQ1 with len = 1)
370 * - Use SW trigger
371 * - Start conversion, then wait for interrupt completion.
372 */
373static int stm32_adc_single_conv(struct iio_dev *indio_dev,
374 const struct iio_chan_spec *chan,
375 int *res)
376{
377 struct stm32_adc *adc = iio_priv(indio_dev);
378 long timeout;
379 u32 val;
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100380 int ret;
381
382 reinit_completion(&adc->completion);
383
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100384 adc->bufi = 0;
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100385
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100386 /* Program chan number in regular sequence (SQ1) */
387 val = stm32_adc_readl(adc, stm32f4_sq[1].reg);
388 val &= ~stm32f4_sq[1].mask;
389 val |= chan->channel << stm32f4_sq[1].shift;
390 stm32_adc_writel(adc, stm32f4_sq[1].reg, val);
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100391
392 /* Set regular sequence len (0 for 1 conversion) */
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100393 stm32_adc_clr_bits(adc, stm32f4_sq[0].reg, stm32f4_sq[0].mask);
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100394
395 /* Trigger detection disabled (conversion can be launched in SW) */
396 stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_EXTEN_MASK);
397
398 stm32_adc_conv_irq_enable(adc);
399
400 stm32_adc_start_conv(adc);
401
402 timeout = wait_for_completion_interruptible_timeout(
403 &adc->completion, STM32_ADC_TIMEOUT);
404 if (timeout == 0) {
405 ret = -ETIMEDOUT;
406 } else if (timeout < 0) {
407 ret = timeout;
408 } else {
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100409 *res = adc->buffer[0];
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100410 ret = IIO_VAL_INT;
411 }
412
413 stm32_adc_stop_conv(adc);
414
415 stm32_adc_conv_irq_disable(adc);
416
417 return ret;
418}
419
420static int stm32_adc_read_raw(struct iio_dev *indio_dev,
421 struct iio_chan_spec const *chan,
422 int *val, int *val2, long mask)
423{
424 struct stm32_adc *adc = iio_priv(indio_dev);
425 int ret;
426
427 switch (mask) {
428 case IIO_CHAN_INFO_RAW:
429 ret = iio_device_claim_direct_mode(indio_dev);
430 if (ret)
431 return ret;
432 if (chan->type == IIO_VOLTAGE)
433 ret = stm32_adc_single_conv(indio_dev, chan, val);
434 else
435 ret = -EINVAL;
436 iio_device_release_direct_mode(indio_dev);
437 return ret;
438
439 case IIO_CHAN_INFO_SCALE:
440 *val = adc->common->vref_mv;
441 *val2 = chan->scan_type.realbits;
442 return IIO_VAL_FRACTIONAL_LOG2;
443
444 default:
445 return -EINVAL;
446 }
447}
448
449static irqreturn_t stm32_adc_isr(int irq, void *data)
450{
451 struct stm32_adc *adc = data;
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100452 struct iio_dev *indio_dev = iio_priv_to_dev(adc);
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100453 u32 status = stm32_adc_readl(adc, STM32F4_ADC_SR);
454
455 if (status & STM32F4_EOC) {
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100456 /* Reading DR also clears EOC status flag */
457 adc->buffer[adc->bufi] = stm32_adc_readw(adc, STM32F4_ADC_DR);
458 if (iio_buffer_enabled(indio_dev)) {
459 adc->bufi++;
460 if (adc->bufi >= adc->num_conv) {
461 stm32_adc_conv_irq_disable(adc);
462 iio_trigger_poll(indio_dev->trig);
463 }
464 } else {
465 complete(&adc->completion);
466 }
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100467 return IRQ_HANDLED;
468 }
469
470 return IRQ_NONE;
471}
472
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100473/**
474 * stm32_adc_validate_trigger() - validate trigger for stm32 adc
475 * @indio_dev: IIO device
476 * @trig: new trigger
477 *
478 * Returns: 0 if trig matches one of the triggers registered by stm32 adc
479 * driver, -EINVAL otherwise.
480 */
481static int stm32_adc_validate_trigger(struct iio_dev *indio_dev,
482 struct iio_trigger *trig)
483{
484 return stm32_adc_get_trig_extsel(trig) < 0 ? -EINVAL : 0;
485}
486
487static int stm32_adc_update_scan_mode(struct iio_dev *indio_dev,
488 const unsigned long *scan_mask)
489{
490 struct stm32_adc *adc = iio_priv(indio_dev);
491 int ret;
492
493 adc->num_conv = bitmap_weight(scan_mask, indio_dev->masklength);
494
495 ret = stm32_adc_conf_scan_seq(indio_dev, scan_mask);
496 if (ret)
497 return ret;
498
499 return 0;
500}
501
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100502static int stm32_adc_of_xlate(struct iio_dev *indio_dev,
503 const struct of_phandle_args *iiospec)
504{
505 int i;
506
507 for (i = 0; i < indio_dev->num_channels; i++)
508 if (indio_dev->channels[i].channel == iiospec->args[0])
509 return i;
510
511 return -EINVAL;
512}
513
514/**
515 * stm32_adc_debugfs_reg_access - read or write register value
516 *
517 * To read a value from an ADC register:
518 * echo [ADC reg offset] > direct_reg_access
519 * cat direct_reg_access
520 *
521 * To write a value in a ADC register:
522 * echo [ADC_reg_offset] [value] > direct_reg_access
523 */
524static int stm32_adc_debugfs_reg_access(struct iio_dev *indio_dev,
525 unsigned reg, unsigned writeval,
526 unsigned *readval)
527{
528 struct stm32_adc *adc = iio_priv(indio_dev);
529
530 if (!readval)
531 stm32_adc_writel(adc, reg, writeval);
532 else
533 *readval = stm32_adc_readl(adc, reg);
534
535 return 0;
536}
537
538static const struct iio_info stm32_adc_iio_info = {
539 .read_raw = stm32_adc_read_raw,
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100540 .validate_trigger = stm32_adc_validate_trigger,
541 .update_scan_mode = stm32_adc_update_scan_mode,
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100542 .debugfs_reg_access = stm32_adc_debugfs_reg_access,
543 .of_xlate = stm32_adc_of_xlate,
544 .driver_module = THIS_MODULE,
545};
546
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100547static int stm32_adc_buffer_postenable(struct iio_dev *indio_dev)
548{
549 struct stm32_adc *adc = iio_priv(indio_dev);
550 int ret;
551
552 ret = stm32_adc_set_trig(indio_dev, indio_dev->trig);
553 if (ret) {
554 dev_err(&indio_dev->dev, "Can't set trigger\n");
555 return ret;
556 }
557
558 ret = iio_triggered_buffer_postenable(indio_dev);
559 if (ret < 0)
560 goto err_clr_trig;
561
562 /* Reset adc buffer index */
563 adc->bufi = 0;
564
565 stm32_adc_conv_irq_enable(adc);
566 stm32_adc_start_conv(adc);
567
568 return 0;
569
570err_clr_trig:
571 stm32_adc_set_trig(indio_dev, NULL);
572
573 return ret;
574}
575
576static int stm32_adc_buffer_predisable(struct iio_dev *indio_dev)
577{
578 struct stm32_adc *adc = iio_priv(indio_dev);
579 int ret;
580
581 stm32_adc_stop_conv(adc);
582 stm32_adc_conv_irq_disable(adc);
583
584 ret = iio_triggered_buffer_predisable(indio_dev);
585 if (ret < 0)
586 dev_err(&indio_dev->dev, "predisable failed\n");
587
588 if (stm32_adc_set_trig(indio_dev, NULL))
589 dev_err(&indio_dev->dev, "Can't clear trigger\n");
590
591 return ret;
592}
593
594static const struct iio_buffer_setup_ops stm32_adc_buffer_setup_ops = {
595 .postenable = &stm32_adc_buffer_postenable,
596 .predisable = &stm32_adc_buffer_predisable,
597};
598
599static irqreturn_t stm32_adc_trigger_handler(int irq, void *p)
600{
601 struct iio_poll_func *pf = p;
602 struct iio_dev *indio_dev = pf->indio_dev;
603 struct stm32_adc *adc = iio_priv(indio_dev);
604
605 dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi);
606
607 /* reset buffer index */
608 adc->bufi = 0;
609 iio_push_to_buffers_with_timestamp(indio_dev, adc->buffer,
610 pf->timestamp);
611
612 iio_trigger_notify_done(indio_dev->trig);
613
614 /* re-enable eoc irq */
615 stm32_adc_conv_irq_enable(adc);
616
617 return IRQ_HANDLED;
618}
619
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100620static void stm32_adc_chan_init_one(struct iio_dev *indio_dev,
621 struct iio_chan_spec *chan,
622 const struct stm32_adc_chan_spec *channel,
623 int scan_index)
624{
625 chan->type = channel->type;
626 chan->channel = channel->channel;
627 chan->datasheet_name = channel->name;
628 chan->scan_index = scan_index;
629 chan->indexed = 1;
630 chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
631 chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
632 chan->scan_type.sign = 'u';
633 chan->scan_type.realbits = 12;
634 chan->scan_type.storagebits = 16;
635}
636
637static int stm32_adc_chan_of_init(struct iio_dev *indio_dev)
638{
639 struct device_node *node = indio_dev->dev.of_node;
640 struct property *prop;
641 const __be32 *cur;
642 struct iio_chan_spec *channels;
643 int scan_index = 0, num_channels;
644 u32 val;
645
646 num_channels = of_property_count_u32_elems(node, "st,adc-channels");
647 if (num_channels < 0 ||
648 num_channels >= ARRAY_SIZE(stm32f4_adc123_channels)) {
649 dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");
650 return num_channels < 0 ? num_channels : -EINVAL;
651 }
652
653 channels = devm_kcalloc(&indio_dev->dev, num_channels,
654 sizeof(struct iio_chan_spec), GFP_KERNEL);
655 if (!channels)
656 return -ENOMEM;
657
658 of_property_for_each_u32(node, "st,adc-channels", prop, cur, val) {
659 if (val >= ARRAY_SIZE(stm32f4_adc123_channels)) {
660 dev_err(&indio_dev->dev, "Invalid channel %d\n", val);
661 return -EINVAL;
662 }
663 stm32_adc_chan_init_one(indio_dev, &channels[scan_index],
664 &stm32f4_adc123_channels[val],
665 scan_index);
666 scan_index++;
667 }
668
669 indio_dev->num_channels = scan_index;
670 indio_dev->channels = channels;
671
672 return 0;
673}
674
675static int stm32_adc_probe(struct platform_device *pdev)
676{
677 struct iio_dev *indio_dev;
678 struct stm32_adc *adc;
679 int ret;
680
681 if (!pdev->dev.of_node)
682 return -ENODEV;
683
684 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc));
685 if (!indio_dev)
686 return -ENOMEM;
687
688 adc = iio_priv(indio_dev);
689 adc->common = dev_get_drvdata(pdev->dev.parent);
690 spin_lock_init(&adc->lock);
691 init_completion(&adc->completion);
692
693 indio_dev->name = dev_name(&pdev->dev);
694 indio_dev->dev.parent = &pdev->dev;
695 indio_dev->dev.of_node = pdev->dev.of_node;
696 indio_dev->info = &stm32_adc_iio_info;
697 indio_dev->modes = INDIO_DIRECT_MODE;
698
699 platform_set_drvdata(pdev, adc);
700
701 ret = of_property_read_u32(pdev->dev.of_node, "reg", &adc->offset);
702 if (ret != 0) {
703 dev_err(&pdev->dev, "missing reg property\n");
704 return -EINVAL;
705 }
706
707 adc->irq = platform_get_irq(pdev, 0);
708 if (adc->irq < 0) {
709 dev_err(&pdev->dev, "failed to get irq\n");
710 return adc->irq;
711 }
712
713 ret = devm_request_irq(&pdev->dev, adc->irq, stm32_adc_isr,
714 0, pdev->name, adc);
715 if (ret) {
716 dev_err(&pdev->dev, "failed to request IRQ\n");
717 return ret;
718 }
719
720 adc->clk = devm_clk_get(&pdev->dev, NULL);
721 if (IS_ERR(adc->clk)) {
722 dev_err(&pdev->dev, "Can't get clock\n");
723 return PTR_ERR(adc->clk);
724 }
725
726 ret = clk_prepare_enable(adc->clk);
727 if (ret < 0) {
728 dev_err(&pdev->dev, "clk enable failed\n");
729 return ret;
730 }
731
732 ret = stm32_adc_chan_of_init(indio_dev);
733 if (ret < 0)
734 goto err_clk_disable;
735
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100736 ret = iio_triggered_buffer_setup(indio_dev,
737 &iio_pollfunc_store_time,
738 &stm32_adc_trigger_handler,
739 &stm32_adc_buffer_setup_ops);
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100740 if (ret) {
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100741 dev_err(&pdev->dev, "buffer setup failed\n");
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100742 goto err_clk_disable;
743 }
744
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100745 ret = iio_device_register(indio_dev);
746 if (ret) {
747 dev_err(&pdev->dev, "iio dev register failed\n");
748 goto err_buffer_cleanup;
749 }
750
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100751 return 0;
752
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100753err_buffer_cleanup:
754 iio_triggered_buffer_cleanup(indio_dev);
755
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100756err_clk_disable:
757 clk_disable_unprepare(adc->clk);
758
759 return ret;
760}
761
762static int stm32_adc_remove(struct platform_device *pdev)
763{
764 struct stm32_adc *adc = platform_get_drvdata(pdev);
765 struct iio_dev *indio_dev = iio_priv_to_dev(adc);
766
767 iio_device_unregister(indio_dev);
Fabrice Gasnierda9b9482017-01-26 15:28:29 +0100768 iio_triggered_buffer_cleanup(indio_dev);
Fabrice Gasnier0f883b22016-11-15 16:30:58 +0100769 clk_disable_unprepare(adc->clk);
770
771 return 0;
772}
773
774static const struct of_device_id stm32_adc_of_match[] = {
775 { .compatible = "st,stm32f4-adc" },
776 {},
777};
778MODULE_DEVICE_TABLE(of, stm32_adc_of_match);
779
780static struct platform_driver stm32_adc_driver = {
781 .probe = stm32_adc_probe,
782 .remove = stm32_adc_remove,
783 .driver = {
784 .name = "stm32-adc",
785 .of_match_table = stm32_adc_of_match,
786 },
787};
788module_platform_driver(stm32_adc_driver);
789
790MODULE_AUTHOR("Fabrice Gasnier <fabrice.gasnier@st.com>");
791MODULE_DESCRIPTION("STMicroelectronics STM32 ADC IIO driver");
792MODULE_LICENSE("GPL v2");
793MODULE_ALIAS("platform:stm32-adc");