xref: /openbmc/linux/drivers/iio/adc/stm32-adc.c (revision 85250a24)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * This file is part of STM32 ADC driver
4  *
5  * Copyright (C) 2016, STMicroelectronics - All Rights Reserved
6  * Author: Fabrice Gasnier <fabrice.gasnier@st.com>.
7  */
8 
9 #include <linux/clk.h>
10 #include <linux/delay.h>
11 #include <linux/dma-mapping.h>
12 #include <linux/dmaengine.h>
13 #include <linux/iio/iio.h>
14 #include <linux/iio/buffer.h>
15 #include <linux/iio/timer/stm32-lptim-trigger.h>
16 #include <linux/iio/timer/stm32-timer-trigger.h>
17 #include <linux/iio/trigger.h>
18 #include <linux/iio/trigger_consumer.h>
19 #include <linux/iio/triggered_buffer.h>
20 #include <linux/interrupt.h>
21 #include <linux/io.h>
22 #include <linux/iopoll.h>
23 #include <linux/module.h>
24 #include <linux/mod_devicetable.h>
25 #include <linux/nvmem-consumer.h>
26 #include <linux/platform_device.h>
27 #include <linux/pm_runtime.h>
28 #include <linux/property.h>
29 
30 #include "stm32-adc-core.h"
31 
32 /* Number of linear calibration shadow registers / LINCALRDYW control bits */
33 #define STM32H7_LINCALFACT_NUM		6
34 
35 /* BOOST bit must be set on STM32H7 when ADC clock is above 20MHz */
36 #define STM32H7_BOOST_CLKRATE		20000000UL
37 
38 #define STM32_ADC_CH_MAX		20	/* max number of channels */
39 #define STM32_ADC_CH_SZ			16	/* max channel name size */
40 #define STM32_ADC_MAX_SQ		16	/* SQ1..SQ16 */
41 #define STM32_ADC_MAX_SMP		7	/* SMPx range is [0..7] */
42 #define STM32_ADC_TIMEOUT_US		100000
43 #define STM32_ADC_TIMEOUT	(msecs_to_jiffies(STM32_ADC_TIMEOUT_US / 1000))
44 #define STM32_ADC_HW_STOP_DELAY_MS	100
45 #define STM32_ADC_VREFINT_VOLTAGE	3300
46 
47 #define STM32_DMA_BUFFER_SIZE		PAGE_SIZE
48 
49 /* External trigger enable */
50 enum stm32_adc_exten {
51 	STM32_EXTEN_SWTRIG,
52 	STM32_EXTEN_HWTRIG_RISING_EDGE,
53 	STM32_EXTEN_HWTRIG_FALLING_EDGE,
54 	STM32_EXTEN_HWTRIG_BOTH_EDGES,
55 };
56 
57 /* extsel - trigger mux selection value */
58 enum stm32_adc_extsel {
59 	STM32_EXT0,
60 	STM32_EXT1,
61 	STM32_EXT2,
62 	STM32_EXT3,
63 	STM32_EXT4,
64 	STM32_EXT5,
65 	STM32_EXT6,
66 	STM32_EXT7,
67 	STM32_EXT8,
68 	STM32_EXT9,
69 	STM32_EXT10,
70 	STM32_EXT11,
71 	STM32_EXT12,
72 	STM32_EXT13,
73 	STM32_EXT14,
74 	STM32_EXT15,
75 	STM32_EXT16,
76 	STM32_EXT17,
77 	STM32_EXT18,
78 	STM32_EXT19,
79 	STM32_EXT20,
80 };
81 
82 enum stm32_adc_int_ch {
83 	STM32_ADC_INT_CH_NONE = -1,
84 	STM32_ADC_INT_CH_VDDCORE,
85 	STM32_ADC_INT_CH_VREFINT,
86 	STM32_ADC_INT_CH_VBAT,
87 	STM32_ADC_INT_CH_NB,
88 };
89 
90 /**
91  * struct stm32_adc_ic - ADC internal channels
92  * @name:	name of the internal channel
93  * @idx:	internal channel enum index
94  */
95 struct stm32_adc_ic {
96 	const char *name;
97 	u32 idx;
98 };
99 
100 static const struct stm32_adc_ic stm32_adc_ic[STM32_ADC_INT_CH_NB] = {
101 	{ "vddcore", STM32_ADC_INT_CH_VDDCORE },
102 	{ "vrefint", STM32_ADC_INT_CH_VREFINT },
103 	{ "vbat", STM32_ADC_INT_CH_VBAT },
104 };
105 
106 /**
107  * struct stm32_adc_trig_info - ADC trigger info
108  * @name:		name of the trigger, corresponding to its source
109  * @extsel:		trigger selection
110  */
111 struct stm32_adc_trig_info {
112 	const char *name;
113 	enum stm32_adc_extsel extsel;
114 };
115 
116 /**
117  * struct stm32_adc_calib - optional adc calibration data
118  * @calfact_s: Calibration offset for single ended channels
119  * @calfact_d: Calibration offset in differential
120  * @lincalfact: Linearity calibration factor
121  * @calibrated: Indicates calibration status
122  */
123 struct stm32_adc_calib {
124 	u32			calfact_s;
125 	u32			calfact_d;
126 	u32			lincalfact[STM32H7_LINCALFACT_NUM];
127 	bool			calibrated;
128 };
129 
130 /**
131  * struct stm32_adc_regs - stm32 ADC misc registers & bitfield desc
132  * @reg:		register offset
133  * @mask:		bitfield mask
134  * @shift:		left shift
135  */
136 struct stm32_adc_regs {
137 	int reg;
138 	int mask;
139 	int shift;
140 };
141 
142 /**
143  * struct stm32_adc_vrefint - stm32 ADC internal reference voltage data
144  * @vrefint_cal:	vrefint calibration value from nvmem
145  * @vrefint_data:	vrefint actual value
146  */
147 struct stm32_adc_vrefint {
148 	u32 vrefint_cal;
149 	u32 vrefint_data;
150 };
151 
152 /**
153  * struct stm32_adc_regspec - stm32 registers definition
154  * @dr:			data register offset
155  * @ier_eoc:		interrupt enable register & eocie bitfield
156  * @ier_ovr:		interrupt enable register & overrun bitfield
157  * @isr_eoc:		interrupt status register & eoc bitfield
158  * @isr_ovr:		interrupt status register & overrun bitfield
159  * @sqr:		reference to sequence registers array
160  * @exten:		trigger control register & bitfield
161  * @extsel:		trigger selection register & bitfield
162  * @res:		resolution selection register & bitfield
163  * @smpr:		smpr1 & smpr2 registers offset array
164  * @smp_bits:		smpr1 & smpr2 index and bitfields
165  * @or_vdd:		option register & vddcore bitfield
166  * @ccr_vbat:		common register & vbat bitfield
167  * @ccr_vref:		common register & vrefint bitfield
168  */
169 struct stm32_adc_regspec {
170 	const u32 dr;
171 	const struct stm32_adc_regs ier_eoc;
172 	const struct stm32_adc_regs ier_ovr;
173 	const struct stm32_adc_regs isr_eoc;
174 	const struct stm32_adc_regs isr_ovr;
175 	const struct stm32_adc_regs *sqr;
176 	const struct stm32_adc_regs exten;
177 	const struct stm32_adc_regs extsel;
178 	const struct stm32_adc_regs res;
179 	const u32 smpr[2];
180 	const struct stm32_adc_regs *smp_bits;
181 	const struct stm32_adc_regs or_vdd;
182 	const struct stm32_adc_regs ccr_vbat;
183 	const struct stm32_adc_regs ccr_vref;
184 };
185 
186 struct stm32_adc;
187 
188 /**
189  * struct stm32_adc_cfg - stm32 compatible configuration data
190  * @regs:		registers descriptions
191  * @adc_info:		per instance input channels definitions
192  * @trigs:		external trigger sources
193  * @clk_required:	clock is required
194  * @has_vregready:	vregready status flag presence
195  * @prepare:		optional prepare routine (power-up, enable)
196  * @start_conv:		routine to start conversions
197  * @stop_conv:		routine to stop conversions
198  * @unprepare:		optional unprepare routine (disable, power-down)
199  * @irq_clear:		routine to clear irqs
200  * @smp_cycles:		programmable sampling time (ADC clock cycles)
201  * @ts_vrefint_ns:	vrefint minimum sampling time in ns
202  */
203 struct stm32_adc_cfg {
204 	const struct stm32_adc_regspec	*regs;
205 	const struct stm32_adc_info	*adc_info;
206 	struct stm32_adc_trig_info	*trigs;
207 	bool clk_required;
208 	bool has_vregready;
209 	int (*prepare)(struct iio_dev *);
210 	void (*start_conv)(struct iio_dev *, bool dma);
211 	void (*stop_conv)(struct iio_dev *);
212 	void (*unprepare)(struct iio_dev *);
213 	void (*irq_clear)(struct iio_dev *indio_dev, u32 msk);
214 	const unsigned int *smp_cycles;
215 	const unsigned int ts_vrefint_ns;
216 };
217 
218 /**
219  * struct stm32_adc - private data of each ADC IIO instance
220  * @common:		reference to ADC block common data
221  * @offset:		ADC instance register offset in ADC block
222  * @cfg:		compatible configuration data
223  * @completion:		end of single conversion completion
224  * @buffer:		data buffer + 8 bytes for timestamp if enabled
225  * @clk:		clock for this adc instance
226  * @irq:		interrupt for this adc instance
227  * @lock:		spinlock
228  * @bufi:		data buffer index
229  * @num_conv:		expected number of scan conversions
230  * @res:		data resolution (e.g. RES bitfield value)
231  * @trigger_polarity:	external trigger polarity (e.g. exten)
232  * @dma_chan:		dma channel
233  * @rx_buf:		dma rx buffer cpu address
234  * @rx_dma_buf:		dma rx buffer bus address
235  * @rx_buf_sz:		dma rx buffer size
236  * @difsel:		bitmask to set single-ended/differential channel
237  * @pcsel:		bitmask to preselect channels on some devices
238  * @smpr_val:		sampling time settings (e.g. smpr1 / smpr2)
239  * @cal:		optional calibration data on some devices
240  * @vrefint:		internal reference voltage data
241  * @chan_name:		channel name array
242  * @num_diff:		number of differential channels
243  * @int_ch:		internal channel indexes array
244  * @nsmps:		number of channels with optional sample time
245  */
246 struct stm32_adc {
247 	struct stm32_adc_common	*common;
248 	u32			offset;
249 	const struct stm32_adc_cfg	*cfg;
250 	struct completion	completion;
251 	u16			buffer[STM32_ADC_MAX_SQ + 4] __aligned(8);
252 	struct clk		*clk;
253 	int			irq;
254 	spinlock_t		lock;		/* interrupt lock */
255 	unsigned int		bufi;
256 	unsigned int		num_conv;
257 	u32			res;
258 	u32			trigger_polarity;
259 	struct dma_chan		*dma_chan;
260 	u8			*rx_buf;
261 	dma_addr_t		rx_dma_buf;
262 	unsigned int		rx_buf_sz;
263 	u32			difsel;
264 	u32			pcsel;
265 	u32			smpr_val[2];
266 	struct stm32_adc_calib	cal;
267 	struct stm32_adc_vrefint vrefint;
268 	char			chan_name[STM32_ADC_CH_MAX][STM32_ADC_CH_SZ];
269 	u32			num_diff;
270 	int			int_ch[STM32_ADC_INT_CH_NB];
271 	int			nsmps;
272 };
273 
274 struct stm32_adc_diff_channel {
275 	u32 vinp;
276 	u32 vinn;
277 };
278 
279 /**
280  * struct stm32_adc_info - stm32 ADC, per instance config data
281  * @max_channels:	Number of channels
282  * @resolutions:	available resolutions
283  * @num_res:		number of available resolutions
284  */
285 struct stm32_adc_info {
286 	int max_channels;
287 	const unsigned int *resolutions;
288 	const unsigned int num_res;
289 };
290 
291 static const unsigned int stm32f4_adc_resolutions[] = {
292 	/* sorted values so the index matches RES[1:0] in STM32F4_ADC_CR1 */
293 	12, 10, 8, 6,
294 };
295 
296 /* stm32f4 can have up to 16 channels */
297 static const struct stm32_adc_info stm32f4_adc_info = {
298 	.max_channels = 16,
299 	.resolutions = stm32f4_adc_resolutions,
300 	.num_res = ARRAY_SIZE(stm32f4_adc_resolutions),
301 };
302 
303 static const unsigned int stm32h7_adc_resolutions[] = {
304 	/* sorted values so the index matches RES[2:0] in STM32H7_ADC_CFGR */
305 	16, 14, 12, 10, 8,
306 };
307 
308 /* stm32h7 can have up to 20 channels */
309 static const struct stm32_adc_info stm32h7_adc_info = {
310 	.max_channels = STM32_ADC_CH_MAX,
311 	.resolutions = stm32h7_adc_resolutions,
312 	.num_res = ARRAY_SIZE(stm32h7_adc_resolutions),
313 };
314 
315 /*
316  * stm32f4_sq - describe regular sequence registers
317  * - L: sequence len (register & bit field)
318  * - SQ1..SQ16: sequence entries (register & bit field)
319  */
320 static const struct stm32_adc_regs stm32f4_sq[STM32_ADC_MAX_SQ + 1] = {
321 	/* L: len bit field description to be kept as first element */
322 	{ STM32F4_ADC_SQR1, GENMASK(23, 20), 20 },
323 	/* SQ1..SQ16 registers & bit fields (reg, mask, shift) */
324 	{ STM32F4_ADC_SQR3, GENMASK(4, 0), 0 },
325 	{ STM32F4_ADC_SQR3, GENMASK(9, 5), 5 },
326 	{ STM32F4_ADC_SQR3, GENMASK(14, 10), 10 },
327 	{ STM32F4_ADC_SQR3, GENMASK(19, 15), 15 },
328 	{ STM32F4_ADC_SQR3, GENMASK(24, 20), 20 },
329 	{ STM32F4_ADC_SQR3, GENMASK(29, 25), 25 },
330 	{ STM32F4_ADC_SQR2, GENMASK(4, 0), 0 },
331 	{ STM32F4_ADC_SQR2, GENMASK(9, 5), 5 },
332 	{ STM32F4_ADC_SQR2, GENMASK(14, 10), 10 },
333 	{ STM32F4_ADC_SQR2, GENMASK(19, 15), 15 },
334 	{ STM32F4_ADC_SQR2, GENMASK(24, 20), 20 },
335 	{ STM32F4_ADC_SQR2, GENMASK(29, 25), 25 },
336 	{ STM32F4_ADC_SQR1, GENMASK(4, 0), 0 },
337 	{ STM32F4_ADC_SQR1, GENMASK(9, 5), 5 },
338 	{ STM32F4_ADC_SQR1, GENMASK(14, 10), 10 },
339 	{ STM32F4_ADC_SQR1, GENMASK(19, 15), 15 },
340 };
341 
342 /* STM32F4 external trigger sources for all instances */
343 static struct stm32_adc_trig_info stm32f4_adc_trigs[] = {
344 	{ TIM1_CH1, STM32_EXT0 },
345 	{ TIM1_CH2, STM32_EXT1 },
346 	{ TIM1_CH3, STM32_EXT2 },
347 	{ TIM2_CH2, STM32_EXT3 },
348 	{ TIM2_CH3, STM32_EXT4 },
349 	{ TIM2_CH4, STM32_EXT5 },
350 	{ TIM2_TRGO, STM32_EXT6 },
351 	{ TIM3_CH1, STM32_EXT7 },
352 	{ TIM3_TRGO, STM32_EXT8 },
353 	{ TIM4_CH4, STM32_EXT9 },
354 	{ TIM5_CH1, STM32_EXT10 },
355 	{ TIM5_CH2, STM32_EXT11 },
356 	{ TIM5_CH3, STM32_EXT12 },
357 	{ TIM8_CH1, STM32_EXT13 },
358 	{ TIM8_TRGO, STM32_EXT14 },
359 	{}, /* sentinel */
360 };
361 
362 /*
363  * stm32f4_smp_bits[] - describe sampling time register index & bit fields
364  * Sorted so it can be indexed by channel number.
365  */
366 static const struct stm32_adc_regs stm32f4_smp_bits[] = {
367 	/* STM32F4_ADC_SMPR2: smpr[] index, mask, shift for SMP0 to SMP9 */
368 	{ 1, GENMASK(2, 0), 0 },
369 	{ 1, GENMASK(5, 3), 3 },
370 	{ 1, GENMASK(8, 6), 6 },
371 	{ 1, GENMASK(11, 9), 9 },
372 	{ 1, GENMASK(14, 12), 12 },
373 	{ 1, GENMASK(17, 15), 15 },
374 	{ 1, GENMASK(20, 18), 18 },
375 	{ 1, GENMASK(23, 21), 21 },
376 	{ 1, GENMASK(26, 24), 24 },
377 	{ 1, GENMASK(29, 27), 27 },
378 	/* STM32F4_ADC_SMPR1, smpr[] index, mask, shift for SMP10 to SMP18 */
379 	{ 0, GENMASK(2, 0), 0 },
380 	{ 0, GENMASK(5, 3), 3 },
381 	{ 0, GENMASK(8, 6), 6 },
382 	{ 0, GENMASK(11, 9), 9 },
383 	{ 0, GENMASK(14, 12), 12 },
384 	{ 0, GENMASK(17, 15), 15 },
385 	{ 0, GENMASK(20, 18), 18 },
386 	{ 0, GENMASK(23, 21), 21 },
387 	{ 0, GENMASK(26, 24), 24 },
388 };
389 
390 /* STM32F4 programmable sampling time (ADC clock cycles) */
391 static const unsigned int stm32f4_adc_smp_cycles[STM32_ADC_MAX_SMP + 1] = {
392 	3, 15, 28, 56, 84, 112, 144, 480,
393 };
394 
395 static const struct stm32_adc_regspec stm32f4_adc_regspec = {
396 	.dr = STM32F4_ADC_DR,
397 	.ier_eoc = { STM32F4_ADC_CR1, STM32F4_EOCIE },
398 	.ier_ovr = { STM32F4_ADC_CR1, STM32F4_OVRIE },
399 	.isr_eoc = { STM32F4_ADC_SR, STM32F4_EOC },
400 	.isr_ovr = { STM32F4_ADC_SR, STM32F4_OVR },
401 	.sqr = stm32f4_sq,
402 	.exten = { STM32F4_ADC_CR2, STM32F4_EXTEN_MASK, STM32F4_EXTEN_SHIFT },
403 	.extsel = { STM32F4_ADC_CR2, STM32F4_EXTSEL_MASK,
404 		    STM32F4_EXTSEL_SHIFT },
405 	.res = { STM32F4_ADC_CR1, STM32F4_RES_MASK, STM32F4_RES_SHIFT },
406 	.smpr = { STM32F4_ADC_SMPR1, STM32F4_ADC_SMPR2 },
407 	.smp_bits = stm32f4_smp_bits,
408 };
409 
410 static const struct stm32_adc_regs stm32h7_sq[STM32_ADC_MAX_SQ + 1] = {
411 	/* L: len bit field description to be kept as first element */
412 	{ STM32H7_ADC_SQR1, GENMASK(3, 0), 0 },
413 	/* SQ1..SQ16 registers & bit fields (reg, mask, shift) */
414 	{ STM32H7_ADC_SQR1, GENMASK(10, 6), 6 },
415 	{ STM32H7_ADC_SQR1, GENMASK(16, 12), 12 },
416 	{ STM32H7_ADC_SQR1, GENMASK(22, 18), 18 },
417 	{ STM32H7_ADC_SQR1, GENMASK(28, 24), 24 },
418 	{ STM32H7_ADC_SQR2, GENMASK(4, 0), 0 },
419 	{ STM32H7_ADC_SQR2, GENMASK(10, 6), 6 },
420 	{ STM32H7_ADC_SQR2, GENMASK(16, 12), 12 },
421 	{ STM32H7_ADC_SQR2, GENMASK(22, 18), 18 },
422 	{ STM32H7_ADC_SQR2, GENMASK(28, 24), 24 },
423 	{ STM32H7_ADC_SQR3, GENMASK(4, 0), 0 },
424 	{ STM32H7_ADC_SQR3, GENMASK(10, 6), 6 },
425 	{ STM32H7_ADC_SQR3, GENMASK(16, 12), 12 },
426 	{ STM32H7_ADC_SQR3, GENMASK(22, 18), 18 },
427 	{ STM32H7_ADC_SQR3, GENMASK(28, 24), 24 },
428 	{ STM32H7_ADC_SQR4, GENMASK(4, 0), 0 },
429 	{ STM32H7_ADC_SQR4, GENMASK(10, 6), 6 },
430 };
431 
432 /* STM32H7 external trigger sources for all instances */
433 static struct stm32_adc_trig_info stm32h7_adc_trigs[] = {
434 	{ TIM1_CH1, STM32_EXT0 },
435 	{ TIM1_CH2, STM32_EXT1 },
436 	{ TIM1_CH3, STM32_EXT2 },
437 	{ TIM2_CH2, STM32_EXT3 },
438 	{ TIM3_TRGO, STM32_EXT4 },
439 	{ TIM4_CH4, STM32_EXT5 },
440 	{ TIM8_TRGO, STM32_EXT7 },
441 	{ TIM8_TRGO2, STM32_EXT8 },
442 	{ TIM1_TRGO, STM32_EXT9 },
443 	{ TIM1_TRGO2, STM32_EXT10 },
444 	{ TIM2_TRGO, STM32_EXT11 },
445 	{ TIM4_TRGO, STM32_EXT12 },
446 	{ TIM6_TRGO, STM32_EXT13 },
447 	{ TIM15_TRGO, STM32_EXT14 },
448 	{ TIM3_CH4, STM32_EXT15 },
449 	{ LPTIM1_OUT, STM32_EXT18 },
450 	{ LPTIM2_OUT, STM32_EXT19 },
451 	{ LPTIM3_OUT, STM32_EXT20 },
452 	{},
453 };
454 
455 /*
456  * stm32h7_smp_bits - describe sampling time register index & bit fields
457  * Sorted so it can be indexed by channel number.
458  */
459 static const struct stm32_adc_regs stm32h7_smp_bits[] = {
460 	/* STM32H7_ADC_SMPR1, smpr[] index, mask, shift for SMP0 to SMP9 */
461 	{ 0, GENMASK(2, 0), 0 },
462 	{ 0, GENMASK(5, 3), 3 },
463 	{ 0, GENMASK(8, 6), 6 },
464 	{ 0, GENMASK(11, 9), 9 },
465 	{ 0, GENMASK(14, 12), 12 },
466 	{ 0, GENMASK(17, 15), 15 },
467 	{ 0, GENMASK(20, 18), 18 },
468 	{ 0, GENMASK(23, 21), 21 },
469 	{ 0, GENMASK(26, 24), 24 },
470 	{ 0, GENMASK(29, 27), 27 },
471 	/* STM32H7_ADC_SMPR2, smpr[] index, mask, shift for SMP10 to SMP19 */
472 	{ 1, GENMASK(2, 0), 0 },
473 	{ 1, GENMASK(5, 3), 3 },
474 	{ 1, GENMASK(8, 6), 6 },
475 	{ 1, GENMASK(11, 9), 9 },
476 	{ 1, GENMASK(14, 12), 12 },
477 	{ 1, GENMASK(17, 15), 15 },
478 	{ 1, GENMASK(20, 18), 18 },
479 	{ 1, GENMASK(23, 21), 21 },
480 	{ 1, GENMASK(26, 24), 24 },
481 	{ 1, GENMASK(29, 27), 27 },
482 };
483 
484 /* STM32H7 programmable sampling time (ADC clock cycles, rounded down) */
485 static const unsigned int stm32h7_adc_smp_cycles[STM32_ADC_MAX_SMP + 1] = {
486 	1, 2, 8, 16, 32, 64, 387, 810,
487 };
488 
489 static const struct stm32_adc_regspec stm32h7_adc_regspec = {
490 	.dr = STM32H7_ADC_DR,
491 	.ier_eoc = { STM32H7_ADC_IER, STM32H7_EOCIE },
492 	.ier_ovr = { STM32H7_ADC_IER, STM32H7_OVRIE },
493 	.isr_eoc = { STM32H7_ADC_ISR, STM32H7_EOC },
494 	.isr_ovr = { STM32H7_ADC_ISR, STM32H7_OVR },
495 	.sqr = stm32h7_sq,
496 	.exten = { STM32H7_ADC_CFGR, STM32H7_EXTEN_MASK, STM32H7_EXTEN_SHIFT },
497 	.extsel = { STM32H7_ADC_CFGR, STM32H7_EXTSEL_MASK,
498 		    STM32H7_EXTSEL_SHIFT },
499 	.res = { STM32H7_ADC_CFGR, STM32H7_RES_MASK, STM32H7_RES_SHIFT },
500 	.smpr = { STM32H7_ADC_SMPR1, STM32H7_ADC_SMPR2 },
501 	.smp_bits = stm32h7_smp_bits,
502 };
503 
504 static const struct stm32_adc_regspec stm32mp1_adc_regspec = {
505 	.dr = STM32H7_ADC_DR,
506 	.ier_eoc = { STM32H7_ADC_IER, STM32H7_EOCIE },
507 	.ier_ovr = { STM32H7_ADC_IER, STM32H7_OVRIE },
508 	.isr_eoc = { STM32H7_ADC_ISR, STM32H7_EOC },
509 	.isr_ovr = { STM32H7_ADC_ISR, STM32H7_OVR },
510 	.sqr = stm32h7_sq,
511 	.exten = { STM32H7_ADC_CFGR, STM32H7_EXTEN_MASK, STM32H7_EXTEN_SHIFT },
512 	.extsel = { STM32H7_ADC_CFGR, STM32H7_EXTSEL_MASK,
513 		    STM32H7_EXTSEL_SHIFT },
514 	.res = { STM32H7_ADC_CFGR, STM32H7_RES_MASK, STM32H7_RES_SHIFT },
515 	.smpr = { STM32H7_ADC_SMPR1, STM32H7_ADC_SMPR2 },
516 	.smp_bits = stm32h7_smp_bits,
517 	.or_vdd = { STM32MP1_ADC2_OR, STM32MP1_VDDCOREEN },
518 	.ccr_vbat = { STM32H7_ADC_CCR, STM32H7_VBATEN },
519 	.ccr_vref = { STM32H7_ADC_CCR, STM32H7_VREFEN },
520 };
521 
522 /*
523  * STM32 ADC registers access routines
524  * @adc: stm32 adc instance
525  * @reg: reg offset in adc instance
526  *
527  * Note: All instances share same base, with 0x0, 0x100 or 0x200 offset resp.
528  * for adc1, adc2 and adc3.
529  */
530 static u32 stm32_adc_readl(struct stm32_adc *adc, u32 reg)
531 {
532 	return readl_relaxed(adc->common->base + adc->offset + reg);
533 }
534 
535 #define stm32_adc_readl_addr(addr)	stm32_adc_readl(adc, addr)
536 
537 #define stm32_adc_readl_poll_timeout(reg, val, cond, sleep_us, timeout_us) \
538 	readx_poll_timeout(stm32_adc_readl_addr, reg, val, \
539 			   cond, sleep_us, timeout_us)
540 
541 static u16 stm32_adc_readw(struct stm32_adc *adc, u32 reg)
542 {
543 	return readw_relaxed(adc->common->base + adc->offset + reg);
544 }
545 
546 static void stm32_adc_writel(struct stm32_adc *adc, u32 reg, u32 val)
547 {
548 	writel_relaxed(val, adc->common->base + adc->offset + reg);
549 }
550 
551 static void stm32_adc_set_bits(struct stm32_adc *adc, u32 reg, u32 bits)
552 {
553 	unsigned long flags;
554 
555 	spin_lock_irqsave(&adc->lock, flags);
556 	stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) | bits);
557 	spin_unlock_irqrestore(&adc->lock, flags);
558 }
559 
560 static void stm32_adc_set_bits_common(struct stm32_adc *adc, u32 reg, u32 bits)
561 {
562 	spin_lock(&adc->common->lock);
563 	writel_relaxed(readl_relaxed(adc->common->base + reg) | bits,
564 		       adc->common->base + reg);
565 	spin_unlock(&adc->common->lock);
566 }
567 
568 static void stm32_adc_clr_bits(struct stm32_adc *adc, u32 reg, u32 bits)
569 {
570 	unsigned long flags;
571 
572 	spin_lock_irqsave(&adc->lock, flags);
573 	stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) & ~bits);
574 	spin_unlock_irqrestore(&adc->lock, flags);
575 }
576 
577 static void stm32_adc_clr_bits_common(struct stm32_adc *adc, u32 reg, u32 bits)
578 {
579 	spin_lock(&adc->common->lock);
580 	writel_relaxed(readl_relaxed(adc->common->base + reg) & ~bits,
581 		       adc->common->base + reg);
582 	spin_unlock(&adc->common->lock);
583 }
584 
585 /**
586  * stm32_adc_conv_irq_enable() - Enable end of conversion interrupt
587  * @adc: stm32 adc instance
588  */
589 static void stm32_adc_conv_irq_enable(struct stm32_adc *adc)
590 {
591 	stm32_adc_set_bits(adc, adc->cfg->regs->ier_eoc.reg,
592 			   adc->cfg->regs->ier_eoc.mask);
593 };
594 
595 /**
596  * stm32_adc_conv_irq_disable() - Disable end of conversion interrupt
597  * @adc: stm32 adc instance
598  */
599 static void stm32_adc_conv_irq_disable(struct stm32_adc *adc)
600 {
601 	stm32_adc_clr_bits(adc, adc->cfg->regs->ier_eoc.reg,
602 			   adc->cfg->regs->ier_eoc.mask);
603 }
604 
605 static void stm32_adc_ovr_irq_enable(struct stm32_adc *adc)
606 {
607 	stm32_adc_set_bits(adc, adc->cfg->regs->ier_ovr.reg,
608 			   adc->cfg->regs->ier_ovr.mask);
609 }
610 
611 static void stm32_adc_ovr_irq_disable(struct stm32_adc *adc)
612 {
613 	stm32_adc_clr_bits(adc, adc->cfg->regs->ier_ovr.reg,
614 			   adc->cfg->regs->ier_ovr.mask);
615 }
616 
617 static void stm32_adc_set_res(struct stm32_adc *adc)
618 {
619 	const struct stm32_adc_regs *res = &adc->cfg->regs->res;
620 	u32 val;
621 
622 	val = stm32_adc_readl(adc, res->reg);
623 	val = (val & ~res->mask) | (adc->res << res->shift);
624 	stm32_adc_writel(adc, res->reg, val);
625 }
626 
627 static int stm32_adc_hw_stop(struct device *dev)
628 {
629 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
630 	struct stm32_adc *adc = iio_priv(indio_dev);
631 
632 	if (adc->cfg->unprepare)
633 		adc->cfg->unprepare(indio_dev);
634 
635 	clk_disable_unprepare(adc->clk);
636 
637 	return 0;
638 }
639 
640 static int stm32_adc_hw_start(struct device *dev)
641 {
642 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
643 	struct stm32_adc *adc = iio_priv(indio_dev);
644 	int ret;
645 
646 	ret = clk_prepare_enable(adc->clk);
647 	if (ret)
648 		return ret;
649 
650 	stm32_adc_set_res(adc);
651 
652 	if (adc->cfg->prepare) {
653 		ret = adc->cfg->prepare(indio_dev);
654 		if (ret)
655 			goto err_clk_dis;
656 	}
657 
658 	return 0;
659 
660 err_clk_dis:
661 	clk_disable_unprepare(adc->clk);
662 
663 	return ret;
664 }
665 
666 static void stm32_adc_int_ch_enable(struct iio_dev *indio_dev)
667 {
668 	struct stm32_adc *adc = iio_priv(indio_dev);
669 	u32 i;
670 
671 	for (i = 0; i < STM32_ADC_INT_CH_NB; i++) {
672 		if (adc->int_ch[i] == STM32_ADC_INT_CH_NONE)
673 			continue;
674 
675 		switch (i) {
676 		case STM32_ADC_INT_CH_VDDCORE:
677 			dev_dbg(&indio_dev->dev, "Enable VDDCore\n");
678 			stm32_adc_set_bits(adc, adc->cfg->regs->or_vdd.reg,
679 					   adc->cfg->regs->or_vdd.mask);
680 			break;
681 		case STM32_ADC_INT_CH_VREFINT:
682 			dev_dbg(&indio_dev->dev, "Enable VREFInt\n");
683 			stm32_adc_set_bits_common(adc, adc->cfg->regs->ccr_vref.reg,
684 						  adc->cfg->regs->ccr_vref.mask);
685 			break;
686 		case STM32_ADC_INT_CH_VBAT:
687 			dev_dbg(&indio_dev->dev, "Enable VBAT\n");
688 			stm32_adc_set_bits_common(adc, adc->cfg->regs->ccr_vbat.reg,
689 						  adc->cfg->regs->ccr_vbat.mask);
690 			break;
691 		}
692 	}
693 }
694 
695 static void stm32_adc_int_ch_disable(struct stm32_adc *adc)
696 {
697 	u32 i;
698 
699 	for (i = 0; i < STM32_ADC_INT_CH_NB; i++) {
700 		if (adc->int_ch[i] == STM32_ADC_INT_CH_NONE)
701 			continue;
702 
703 		switch (i) {
704 		case STM32_ADC_INT_CH_VDDCORE:
705 			stm32_adc_clr_bits(adc, adc->cfg->regs->or_vdd.reg,
706 					   adc->cfg->regs->or_vdd.mask);
707 			break;
708 		case STM32_ADC_INT_CH_VREFINT:
709 			stm32_adc_clr_bits_common(adc, adc->cfg->regs->ccr_vref.reg,
710 						  adc->cfg->regs->ccr_vref.mask);
711 			break;
712 		case STM32_ADC_INT_CH_VBAT:
713 			stm32_adc_clr_bits_common(adc, adc->cfg->regs->ccr_vbat.reg,
714 						  adc->cfg->regs->ccr_vbat.mask);
715 			break;
716 		}
717 	}
718 }
719 
720 /**
721  * stm32f4_adc_start_conv() - Start conversions for regular channels.
722  * @indio_dev: IIO device instance
723  * @dma: use dma to transfer conversion result
724  *
725  * Start conversions for regular channels.
726  * Also take care of normal or DMA mode. Circular DMA may be used for regular
727  * conversions, in IIO buffer modes. Otherwise, use ADC interrupt with direct
728  * DR read instead (e.g. read_raw, or triggered buffer mode without DMA).
729  */
730 static void stm32f4_adc_start_conv(struct iio_dev *indio_dev, bool dma)
731 {
732 	struct stm32_adc *adc = iio_priv(indio_dev);
733 
734 	stm32_adc_set_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
735 
736 	if (dma)
737 		stm32_adc_set_bits(adc, STM32F4_ADC_CR2,
738 				   STM32F4_DMA | STM32F4_DDS);
739 
740 	stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_EOCS | STM32F4_ADON);
741 
742 	/* Wait for Power-up time (tSTAB from datasheet) */
743 	usleep_range(2, 3);
744 
745 	/* Software start ? (e.g. trigger detection disabled ?) */
746 	if (!(stm32_adc_readl(adc, STM32F4_ADC_CR2) & STM32F4_EXTEN_MASK))
747 		stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_SWSTART);
748 }
749 
750 static void stm32f4_adc_stop_conv(struct iio_dev *indio_dev)
751 {
752 	struct stm32_adc *adc = iio_priv(indio_dev);
753 
754 	stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_EXTEN_MASK);
755 	stm32_adc_clr_bits(adc, STM32F4_ADC_SR, STM32F4_STRT);
756 
757 	stm32_adc_clr_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
758 	stm32_adc_clr_bits(adc, STM32F4_ADC_CR2,
759 			   STM32F4_ADON | STM32F4_DMA | STM32F4_DDS);
760 }
761 
762 static void stm32f4_adc_irq_clear(struct iio_dev *indio_dev, u32 msk)
763 {
764 	struct stm32_adc *adc = iio_priv(indio_dev);
765 
766 	stm32_adc_clr_bits(adc, adc->cfg->regs->isr_eoc.reg, msk);
767 }
768 
769 static void stm32h7_adc_start_conv(struct iio_dev *indio_dev, bool dma)
770 {
771 	struct stm32_adc *adc = iio_priv(indio_dev);
772 	enum stm32h7_adc_dmngt dmngt;
773 	unsigned long flags;
774 	u32 val;
775 
776 	if (dma)
777 		dmngt = STM32H7_DMNGT_DMA_CIRC;
778 	else
779 		dmngt = STM32H7_DMNGT_DR_ONLY;
780 
781 	spin_lock_irqsave(&adc->lock, flags);
782 	val = stm32_adc_readl(adc, STM32H7_ADC_CFGR);
783 	val = (val & ~STM32H7_DMNGT_MASK) | (dmngt << STM32H7_DMNGT_SHIFT);
784 	stm32_adc_writel(adc, STM32H7_ADC_CFGR, val);
785 	spin_unlock_irqrestore(&adc->lock, flags);
786 
787 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADSTART);
788 }
789 
790 static void stm32h7_adc_stop_conv(struct iio_dev *indio_dev)
791 {
792 	struct stm32_adc *adc = iio_priv(indio_dev);
793 	int ret;
794 	u32 val;
795 
796 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADSTP);
797 
798 	ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
799 					   !(val & (STM32H7_ADSTART)),
800 					   100, STM32_ADC_TIMEOUT_US);
801 	if (ret)
802 		dev_warn(&indio_dev->dev, "stop failed\n");
803 
804 	stm32_adc_clr_bits(adc, STM32H7_ADC_CFGR, STM32H7_DMNGT_MASK);
805 }
806 
807 static void stm32h7_adc_irq_clear(struct iio_dev *indio_dev, u32 msk)
808 {
809 	struct stm32_adc *adc = iio_priv(indio_dev);
810 	/* On STM32H7 IRQs are cleared by writing 1 into ISR register */
811 	stm32_adc_set_bits(adc, adc->cfg->regs->isr_eoc.reg, msk);
812 }
813 
814 static int stm32h7_adc_exit_pwr_down(struct iio_dev *indio_dev)
815 {
816 	struct stm32_adc *adc = iio_priv(indio_dev);
817 	int ret;
818 	u32 val;
819 
820 	/* Exit deep power down, then enable ADC voltage regulator */
821 	stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
822 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADVREGEN);
823 
824 	if (adc->common->rate > STM32H7_BOOST_CLKRATE)
825 		stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_BOOST);
826 
827 	/* Wait for startup time */
828 	if (!adc->cfg->has_vregready) {
829 		usleep_range(10, 20);
830 		return 0;
831 	}
832 
833 	ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_ISR, val,
834 					   val & STM32MP1_VREGREADY, 100,
835 					   STM32_ADC_TIMEOUT_US);
836 	if (ret) {
837 		stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
838 		dev_err(&indio_dev->dev, "Failed to exit power down\n");
839 	}
840 
841 	return ret;
842 }
843 
844 static void stm32h7_adc_enter_pwr_down(struct stm32_adc *adc)
845 {
846 	stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_BOOST);
847 
848 	/* Setting DEEPPWD disables ADC vreg and clears ADVREGEN */
849 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
850 }
851 
852 static int stm32h7_adc_enable(struct iio_dev *indio_dev)
853 {
854 	struct stm32_adc *adc = iio_priv(indio_dev);
855 	int ret;
856 	u32 val;
857 
858 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADEN);
859 
860 	/* Poll for ADRDY to be set (after adc startup time) */
861 	ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_ISR, val,
862 					   val & STM32H7_ADRDY,
863 					   100, STM32_ADC_TIMEOUT_US);
864 	if (ret) {
865 		stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADDIS);
866 		dev_err(&indio_dev->dev, "Failed to enable ADC\n");
867 	} else {
868 		/* Clear ADRDY by writing one */
869 		stm32_adc_set_bits(adc, STM32H7_ADC_ISR, STM32H7_ADRDY);
870 	}
871 
872 	return ret;
873 }
874 
875 static void stm32h7_adc_disable(struct iio_dev *indio_dev)
876 {
877 	struct stm32_adc *adc = iio_priv(indio_dev);
878 	int ret;
879 	u32 val;
880 
881 	if (!(stm32_adc_readl(adc, STM32H7_ADC_CR) & STM32H7_ADEN))
882 		return;
883 
884 	/* Disable ADC and wait until it's effectively disabled */
885 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADDIS);
886 	ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
887 					   !(val & STM32H7_ADEN), 100,
888 					   STM32_ADC_TIMEOUT_US);
889 	if (ret)
890 		dev_warn(&indio_dev->dev, "Failed to disable\n");
891 }
892 
893 /**
894  * stm32h7_adc_read_selfcalib() - read calibration shadow regs, save result
895  * @indio_dev: IIO device instance
896  * Note: Must be called once ADC is enabled, so LINCALRDYW[1..6] are writable
897  */
898 static int stm32h7_adc_read_selfcalib(struct iio_dev *indio_dev)
899 {
900 	struct stm32_adc *adc = iio_priv(indio_dev);
901 	int i, ret;
902 	u32 lincalrdyw_mask, val;
903 
904 	/* Read linearity calibration */
905 	lincalrdyw_mask = STM32H7_LINCALRDYW6;
906 	for (i = STM32H7_LINCALFACT_NUM - 1; i >= 0; i--) {
907 		/* Clear STM32H7_LINCALRDYW[6..1]: transfer calib to CALFACT2 */
908 		stm32_adc_clr_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
909 
910 		/* Poll: wait calib data to be ready in CALFACT2 register */
911 		ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
912 						   !(val & lincalrdyw_mask),
913 						   100, STM32_ADC_TIMEOUT_US);
914 		if (ret) {
915 			dev_err(&indio_dev->dev, "Failed to read calfact\n");
916 			return ret;
917 		}
918 
919 		val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT2);
920 		adc->cal.lincalfact[i] = (val & STM32H7_LINCALFACT_MASK);
921 		adc->cal.lincalfact[i] >>= STM32H7_LINCALFACT_SHIFT;
922 
923 		lincalrdyw_mask >>= 1;
924 	}
925 
926 	/* Read offset calibration */
927 	val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT);
928 	adc->cal.calfact_s = (val & STM32H7_CALFACT_S_MASK);
929 	adc->cal.calfact_s >>= STM32H7_CALFACT_S_SHIFT;
930 	adc->cal.calfact_d = (val & STM32H7_CALFACT_D_MASK);
931 	adc->cal.calfact_d >>= STM32H7_CALFACT_D_SHIFT;
932 	adc->cal.calibrated = true;
933 
934 	return 0;
935 }
936 
937 /**
938  * stm32h7_adc_restore_selfcalib() - Restore saved self-calibration result
939  * @indio_dev: IIO device instance
940  * Note: ADC must be enabled, with no on-going conversions.
941  */
942 static int stm32h7_adc_restore_selfcalib(struct iio_dev *indio_dev)
943 {
944 	struct stm32_adc *adc = iio_priv(indio_dev);
945 	int i, ret;
946 	u32 lincalrdyw_mask, val;
947 
948 	val = (adc->cal.calfact_s << STM32H7_CALFACT_S_SHIFT) |
949 		(adc->cal.calfact_d << STM32H7_CALFACT_D_SHIFT);
950 	stm32_adc_writel(adc, STM32H7_ADC_CALFACT, val);
951 
952 	lincalrdyw_mask = STM32H7_LINCALRDYW6;
953 	for (i = STM32H7_LINCALFACT_NUM - 1; i >= 0; i--) {
954 		/*
955 		 * Write saved calibration data to shadow registers:
956 		 * Write CALFACT2, and set LINCALRDYW[6..1] bit to trigger
957 		 * data write. Then poll to wait for complete transfer.
958 		 */
959 		val = adc->cal.lincalfact[i] << STM32H7_LINCALFACT_SHIFT;
960 		stm32_adc_writel(adc, STM32H7_ADC_CALFACT2, val);
961 		stm32_adc_set_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
962 		ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
963 						   val & lincalrdyw_mask,
964 						   100, STM32_ADC_TIMEOUT_US);
965 		if (ret) {
966 			dev_err(&indio_dev->dev, "Failed to write calfact\n");
967 			return ret;
968 		}
969 
970 		/*
971 		 * Read back calibration data, has two effects:
972 		 * - It ensures bits LINCALRDYW[6..1] are kept cleared
973 		 *   for next time calibration needs to be restored.
974 		 * - BTW, bit clear triggers a read, then check data has been
975 		 *   correctly written.
976 		 */
977 		stm32_adc_clr_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
978 		ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
979 						   !(val & lincalrdyw_mask),
980 						   100, STM32_ADC_TIMEOUT_US);
981 		if (ret) {
982 			dev_err(&indio_dev->dev, "Failed to read calfact\n");
983 			return ret;
984 		}
985 		val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT2);
986 		if (val != adc->cal.lincalfact[i] << STM32H7_LINCALFACT_SHIFT) {
987 			dev_err(&indio_dev->dev, "calfact not consistent\n");
988 			return -EIO;
989 		}
990 
991 		lincalrdyw_mask >>= 1;
992 	}
993 
994 	return 0;
995 }
996 
997 /*
998  * Fixed timeout value for ADC calibration.
999  * worst cases:
1000  * - low clock frequency
1001  * - maximum prescalers
1002  * Calibration requires:
1003  * - 131,072 ADC clock cycle for the linear calibration
1004  * - 20 ADC clock cycle for the offset calibration
1005  *
1006  * Set to 100ms for now
1007  */
1008 #define STM32H7_ADC_CALIB_TIMEOUT_US		100000
1009 
1010 /**
1011  * stm32h7_adc_selfcalib() - Procedure to calibrate ADC
1012  * @indio_dev: IIO device instance
1013  * Note: Must be called once ADC is out of power down.
1014  */
1015 static int stm32h7_adc_selfcalib(struct iio_dev *indio_dev)
1016 {
1017 	struct stm32_adc *adc = iio_priv(indio_dev);
1018 	int ret;
1019 	u32 val;
1020 
1021 	if (adc->cal.calibrated)
1022 		return true;
1023 
1024 	/* ADC must be disabled for calibration */
1025 	stm32h7_adc_disable(indio_dev);
1026 
1027 	/*
1028 	 * Select calibration mode:
1029 	 * - Offset calibration for single ended inputs
1030 	 * - No linearity calibration (do it later, before reading it)
1031 	 */
1032 	stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_ADCALDIF);
1033 	stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_ADCALLIN);
1034 
1035 	/* Start calibration, then wait for completion */
1036 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADCAL);
1037 	ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
1038 					   !(val & STM32H7_ADCAL), 100,
1039 					   STM32H7_ADC_CALIB_TIMEOUT_US);
1040 	if (ret) {
1041 		dev_err(&indio_dev->dev, "calibration failed\n");
1042 		goto out;
1043 	}
1044 
1045 	/*
1046 	 * Select calibration mode, then start calibration:
1047 	 * - Offset calibration for differential input
1048 	 * - Linearity calibration (needs to be done only once for single/diff)
1049 	 *   will run simultaneously with offset calibration.
1050 	 */
1051 	stm32_adc_set_bits(adc, STM32H7_ADC_CR,
1052 			   STM32H7_ADCALDIF | STM32H7_ADCALLIN);
1053 	stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADCAL);
1054 	ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
1055 					   !(val & STM32H7_ADCAL), 100,
1056 					   STM32H7_ADC_CALIB_TIMEOUT_US);
1057 	if (ret) {
1058 		dev_err(&indio_dev->dev, "calibration failed\n");
1059 		goto out;
1060 	}
1061 
1062 out:
1063 	stm32_adc_clr_bits(adc, STM32H7_ADC_CR,
1064 			   STM32H7_ADCALDIF | STM32H7_ADCALLIN);
1065 
1066 	return ret;
1067 }
1068 
1069 /**
1070  * stm32h7_adc_prepare() - Leave power down mode to enable ADC.
1071  * @indio_dev: IIO device instance
1072  * Leave power down mode.
1073  * Configure channels as single ended or differential before enabling ADC.
1074  * Enable ADC.
1075  * Restore calibration data.
1076  * Pre-select channels that may be used in PCSEL (required by input MUX / IO):
1077  * - Only one input is selected for single ended (e.g. 'vinp')
1078  * - Two inputs are selected for differential channels (e.g. 'vinp' & 'vinn')
1079  */
1080 static int stm32h7_adc_prepare(struct iio_dev *indio_dev)
1081 {
1082 	struct stm32_adc *adc = iio_priv(indio_dev);
1083 	int calib, ret;
1084 
1085 	ret = stm32h7_adc_exit_pwr_down(indio_dev);
1086 	if (ret)
1087 		return ret;
1088 
1089 	ret = stm32h7_adc_selfcalib(indio_dev);
1090 	if (ret < 0)
1091 		goto pwr_dwn;
1092 	calib = ret;
1093 
1094 	stm32_adc_int_ch_enable(indio_dev);
1095 
1096 	stm32_adc_writel(adc, STM32H7_ADC_DIFSEL, adc->difsel);
1097 
1098 	ret = stm32h7_adc_enable(indio_dev);
1099 	if (ret)
1100 		goto ch_disable;
1101 
1102 	/* Either restore or read calibration result for future reference */
1103 	if (calib)
1104 		ret = stm32h7_adc_restore_selfcalib(indio_dev);
1105 	else
1106 		ret = stm32h7_adc_read_selfcalib(indio_dev);
1107 	if (ret)
1108 		goto disable;
1109 
1110 	stm32_adc_writel(adc, STM32H7_ADC_PCSEL, adc->pcsel);
1111 
1112 	return 0;
1113 
1114 disable:
1115 	stm32h7_adc_disable(indio_dev);
1116 ch_disable:
1117 	stm32_adc_int_ch_disable(adc);
1118 pwr_dwn:
1119 	stm32h7_adc_enter_pwr_down(adc);
1120 
1121 	return ret;
1122 }
1123 
1124 static void stm32h7_adc_unprepare(struct iio_dev *indio_dev)
1125 {
1126 	struct stm32_adc *adc = iio_priv(indio_dev);
1127 
1128 	stm32_adc_writel(adc, STM32H7_ADC_PCSEL, 0);
1129 	stm32h7_adc_disable(indio_dev);
1130 	stm32_adc_int_ch_disable(adc);
1131 	stm32h7_adc_enter_pwr_down(adc);
1132 }
1133 
1134 /**
1135  * stm32_adc_conf_scan_seq() - Build regular channels scan sequence
1136  * @indio_dev: IIO device
1137  * @scan_mask: channels to be converted
1138  *
1139  * Conversion sequence :
1140  * Apply sampling time settings for all channels.
1141  * Configure ADC scan sequence based on selected channels in scan_mask.
1142  * Add channels to SQR registers, from scan_mask LSB to MSB, then
1143  * program sequence len.
1144  */
1145 static int stm32_adc_conf_scan_seq(struct iio_dev *indio_dev,
1146 				   const unsigned long *scan_mask)
1147 {
1148 	struct stm32_adc *adc = iio_priv(indio_dev);
1149 	const struct stm32_adc_regs *sqr = adc->cfg->regs->sqr;
1150 	const struct iio_chan_spec *chan;
1151 	u32 val, bit;
1152 	int i = 0;
1153 
1154 	/* Apply sampling time settings */
1155 	stm32_adc_writel(adc, adc->cfg->regs->smpr[0], adc->smpr_val[0]);
1156 	stm32_adc_writel(adc, adc->cfg->regs->smpr[1], adc->smpr_val[1]);
1157 
1158 	for_each_set_bit(bit, scan_mask, indio_dev->masklength) {
1159 		chan = indio_dev->channels + bit;
1160 		/*
1161 		 * Assign one channel per SQ entry in regular
1162 		 * sequence, starting with SQ1.
1163 		 */
1164 		i++;
1165 		if (i > STM32_ADC_MAX_SQ)
1166 			return -EINVAL;
1167 
1168 		dev_dbg(&indio_dev->dev, "%s chan %d to SQ%d\n",
1169 			__func__, chan->channel, i);
1170 
1171 		val = stm32_adc_readl(adc, sqr[i].reg);
1172 		val &= ~sqr[i].mask;
1173 		val |= chan->channel << sqr[i].shift;
1174 		stm32_adc_writel(adc, sqr[i].reg, val);
1175 	}
1176 
1177 	if (!i)
1178 		return -EINVAL;
1179 
1180 	/* Sequence len */
1181 	val = stm32_adc_readl(adc, sqr[0].reg);
1182 	val &= ~sqr[0].mask;
1183 	val |= ((i - 1) << sqr[0].shift);
1184 	stm32_adc_writel(adc, sqr[0].reg, val);
1185 
1186 	return 0;
1187 }
1188 
1189 /**
1190  * stm32_adc_get_trig_extsel() - Get external trigger selection
1191  * @indio_dev: IIO device structure
1192  * @trig: trigger
1193  *
1194  * Returns trigger extsel value, if trig matches, -EINVAL otherwise.
1195  */
1196 static int stm32_adc_get_trig_extsel(struct iio_dev *indio_dev,
1197 				     struct iio_trigger *trig)
1198 {
1199 	struct stm32_adc *adc = iio_priv(indio_dev);
1200 	int i;
1201 
1202 	/* lookup triggers registered by stm32 timer trigger driver */
1203 	for (i = 0; adc->cfg->trigs[i].name; i++) {
1204 		/**
1205 		 * Checking both stm32 timer trigger type and trig name
1206 		 * should be safe against arbitrary trigger names.
1207 		 */
1208 		if ((is_stm32_timer_trigger(trig) ||
1209 		     is_stm32_lptim_trigger(trig)) &&
1210 		    !strcmp(adc->cfg->trigs[i].name, trig->name)) {
1211 			return adc->cfg->trigs[i].extsel;
1212 		}
1213 	}
1214 
1215 	return -EINVAL;
1216 }
1217 
1218 /**
1219  * stm32_adc_set_trig() - Set a regular trigger
1220  * @indio_dev: IIO device
1221  * @trig: IIO trigger
1222  *
1223  * Set trigger source/polarity (e.g. SW, or HW with polarity) :
1224  * - if HW trigger disabled (e.g. trig == NULL, conversion launched by sw)
1225  * - if HW trigger enabled, set source & polarity
1226  */
1227 static int stm32_adc_set_trig(struct iio_dev *indio_dev,
1228 			      struct iio_trigger *trig)
1229 {
1230 	struct stm32_adc *adc = iio_priv(indio_dev);
1231 	u32 val, extsel = 0, exten = STM32_EXTEN_SWTRIG;
1232 	unsigned long flags;
1233 	int ret;
1234 
1235 	if (trig) {
1236 		ret = stm32_adc_get_trig_extsel(indio_dev, trig);
1237 		if (ret < 0)
1238 			return ret;
1239 
1240 		/* set trigger source and polarity (default to rising edge) */
1241 		extsel = ret;
1242 		exten = adc->trigger_polarity + STM32_EXTEN_HWTRIG_RISING_EDGE;
1243 	}
1244 
1245 	spin_lock_irqsave(&adc->lock, flags);
1246 	val = stm32_adc_readl(adc, adc->cfg->regs->exten.reg);
1247 	val &= ~(adc->cfg->regs->exten.mask | adc->cfg->regs->extsel.mask);
1248 	val |= exten << adc->cfg->regs->exten.shift;
1249 	val |= extsel << adc->cfg->regs->extsel.shift;
1250 	stm32_adc_writel(adc,  adc->cfg->regs->exten.reg, val);
1251 	spin_unlock_irqrestore(&adc->lock, flags);
1252 
1253 	return 0;
1254 }
1255 
1256 static int stm32_adc_set_trig_pol(struct iio_dev *indio_dev,
1257 				  const struct iio_chan_spec *chan,
1258 				  unsigned int type)
1259 {
1260 	struct stm32_adc *adc = iio_priv(indio_dev);
1261 
1262 	adc->trigger_polarity = type;
1263 
1264 	return 0;
1265 }
1266 
1267 static int stm32_adc_get_trig_pol(struct iio_dev *indio_dev,
1268 				  const struct iio_chan_spec *chan)
1269 {
1270 	struct stm32_adc *adc = iio_priv(indio_dev);
1271 
1272 	return adc->trigger_polarity;
1273 }
1274 
1275 static const char * const stm32_trig_pol_items[] = {
1276 	"rising-edge", "falling-edge", "both-edges",
1277 };
1278 
1279 static const struct iio_enum stm32_adc_trig_pol = {
1280 	.items = stm32_trig_pol_items,
1281 	.num_items = ARRAY_SIZE(stm32_trig_pol_items),
1282 	.get = stm32_adc_get_trig_pol,
1283 	.set = stm32_adc_set_trig_pol,
1284 };
1285 
1286 /**
1287  * stm32_adc_single_conv() - Performs a single conversion
1288  * @indio_dev: IIO device
1289  * @chan: IIO channel
1290  * @res: conversion result
1291  *
1292  * The function performs a single conversion on a given channel:
1293  * - Apply sampling time settings
1294  * - Program sequencer with one channel (e.g. in SQ1 with len = 1)
1295  * - Use SW trigger
1296  * - Start conversion, then wait for interrupt completion.
1297  */
1298 static int stm32_adc_single_conv(struct iio_dev *indio_dev,
1299 				 const struct iio_chan_spec *chan,
1300 				 int *res)
1301 {
1302 	struct stm32_adc *adc = iio_priv(indio_dev);
1303 	struct device *dev = indio_dev->dev.parent;
1304 	const struct stm32_adc_regspec *regs = adc->cfg->regs;
1305 	long timeout;
1306 	u32 val;
1307 	int ret;
1308 
1309 	reinit_completion(&adc->completion);
1310 
1311 	adc->bufi = 0;
1312 
1313 	ret = pm_runtime_resume_and_get(dev);
1314 	if (ret < 0)
1315 		return ret;
1316 
1317 	/* Apply sampling time settings */
1318 	stm32_adc_writel(adc, regs->smpr[0], adc->smpr_val[0]);
1319 	stm32_adc_writel(adc, regs->smpr[1], adc->smpr_val[1]);
1320 
1321 	/* Program chan number in regular sequence (SQ1) */
1322 	val = stm32_adc_readl(adc, regs->sqr[1].reg);
1323 	val &= ~regs->sqr[1].mask;
1324 	val |= chan->channel << regs->sqr[1].shift;
1325 	stm32_adc_writel(adc, regs->sqr[1].reg, val);
1326 
1327 	/* Set regular sequence len (0 for 1 conversion) */
1328 	stm32_adc_clr_bits(adc, regs->sqr[0].reg, regs->sqr[0].mask);
1329 
1330 	/* Trigger detection disabled (conversion can be launched in SW) */
1331 	stm32_adc_clr_bits(adc, regs->exten.reg, regs->exten.mask);
1332 
1333 	stm32_adc_conv_irq_enable(adc);
1334 
1335 	adc->cfg->start_conv(indio_dev, false);
1336 
1337 	timeout = wait_for_completion_interruptible_timeout(
1338 					&adc->completion, STM32_ADC_TIMEOUT);
1339 	if (timeout == 0) {
1340 		ret = -ETIMEDOUT;
1341 	} else if (timeout < 0) {
1342 		ret = timeout;
1343 	} else {
1344 		*res = adc->buffer[0];
1345 		ret = IIO_VAL_INT;
1346 	}
1347 
1348 	adc->cfg->stop_conv(indio_dev);
1349 
1350 	stm32_adc_conv_irq_disable(adc);
1351 
1352 	pm_runtime_mark_last_busy(dev);
1353 	pm_runtime_put_autosuspend(dev);
1354 
1355 	return ret;
1356 }
1357 
1358 static int stm32_adc_read_raw(struct iio_dev *indio_dev,
1359 			      struct iio_chan_spec const *chan,
1360 			      int *val, int *val2, long mask)
1361 {
1362 	struct stm32_adc *adc = iio_priv(indio_dev);
1363 	int ret;
1364 
1365 	switch (mask) {
1366 	case IIO_CHAN_INFO_RAW:
1367 	case IIO_CHAN_INFO_PROCESSED:
1368 		ret = iio_device_claim_direct_mode(indio_dev);
1369 		if (ret)
1370 			return ret;
1371 		if (chan->type == IIO_VOLTAGE)
1372 			ret = stm32_adc_single_conv(indio_dev, chan, val);
1373 		else
1374 			ret = -EINVAL;
1375 
1376 		if (mask == IIO_CHAN_INFO_PROCESSED)
1377 			*val = STM32_ADC_VREFINT_VOLTAGE * adc->vrefint.vrefint_cal / *val;
1378 
1379 		iio_device_release_direct_mode(indio_dev);
1380 		return ret;
1381 
1382 	case IIO_CHAN_INFO_SCALE:
1383 		if (chan->differential) {
1384 			*val = adc->common->vref_mv * 2;
1385 			*val2 = chan->scan_type.realbits;
1386 		} else {
1387 			*val = adc->common->vref_mv;
1388 			*val2 = chan->scan_type.realbits;
1389 		}
1390 		return IIO_VAL_FRACTIONAL_LOG2;
1391 
1392 	case IIO_CHAN_INFO_OFFSET:
1393 		if (chan->differential)
1394 			/* ADC_full_scale / 2 */
1395 			*val = -((1 << chan->scan_type.realbits) / 2);
1396 		else
1397 			*val = 0;
1398 		return IIO_VAL_INT;
1399 
1400 	default:
1401 		return -EINVAL;
1402 	}
1403 }
1404 
1405 static void stm32_adc_irq_clear(struct iio_dev *indio_dev, u32 msk)
1406 {
1407 	struct stm32_adc *adc = iio_priv(indio_dev);
1408 
1409 	adc->cfg->irq_clear(indio_dev, msk);
1410 }
1411 
1412 static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)
1413 {
1414 	struct iio_dev *indio_dev = data;
1415 	struct stm32_adc *adc = iio_priv(indio_dev);
1416 	const struct stm32_adc_regspec *regs = adc->cfg->regs;
1417 	u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
1418 
1419 	/* Check ovr status right now, as ovr mask should be already disabled */
1420 	if (status & regs->isr_ovr.mask) {
1421 		/*
1422 		 * Clear ovr bit to avoid subsequent calls to IRQ handler.
1423 		 * This requires to stop ADC first. OVR bit state in ISR,
1424 		 * is propaged to CSR register by hardware.
1425 		 */
1426 		adc->cfg->stop_conv(indio_dev);
1427 		stm32_adc_irq_clear(indio_dev, regs->isr_ovr.mask);
1428 		dev_err(&indio_dev->dev, "Overrun, stopping: restart needed\n");
1429 		return IRQ_HANDLED;
1430 	}
1431 
1432 	return IRQ_NONE;
1433 }
1434 
1435 static irqreturn_t stm32_adc_isr(int irq, void *data)
1436 {
1437 	struct iio_dev *indio_dev = data;
1438 	struct stm32_adc *adc = iio_priv(indio_dev);
1439 	const struct stm32_adc_regspec *regs = adc->cfg->regs;
1440 	u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
1441 
1442 	if (status & regs->isr_ovr.mask) {
1443 		/*
1444 		 * Overrun occurred on regular conversions: data for wrong
1445 		 * channel may be read. Unconditionally disable interrupts
1446 		 * to stop processing data and print error message.
1447 		 * Restarting the capture can be done by disabling, then
1448 		 * re-enabling it (e.g. write 0, then 1 to buffer/enable).
1449 		 */
1450 		stm32_adc_ovr_irq_disable(adc);
1451 		stm32_adc_conv_irq_disable(adc);
1452 		return IRQ_WAKE_THREAD;
1453 	}
1454 
1455 	if (status & regs->isr_eoc.mask) {
1456 		/* Reading DR also clears EOC status flag */
1457 		adc->buffer[adc->bufi] = stm32_adc_readw(adc, regs->dr);
1458 		if (iio_buffer_enabled(indio_dev)) {
1459 			adc->bufi++;
1460 			if (adc->bufi >= adc->num_conv) {
1461 				stm32_adc_conv_irq_disable(adc);
1462 				iio_trigger_poll(indio_dev->trig);
1463 			}
1464 		} else {
1465 			complete(&adc->completion);
1466 		}
1467 		return IRQ_HANDLED;
1468 	}
1469 
1470 	return IRQ_NONE;
1471 }
1472 
1473 /**
1474  * stm32_adc_validate_trigger() - validate trigger for stm32 adc
1475  * @indio_dev: IIO device
1476  * @trig: new trigger
1477  *
1478  * Returns: 0 if trig matches one of the triggers registered by stm32 adc
1479  * driver, -EINVAL otherwise.
1480  */
1481 static int stm32_adc_validate_trigger(struct iio_dev *indio_dev,
1482 				      struct iio_trigger *trig)
1483 {
1484 	return stm32_adc_get_trig_extsel(indio_dev, trig) < 0 ? -EINVAL : 0;
1485 }
1486 
1487 static int stm32_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
1488 {
1489 	struct stm32_adc *adc = iio_priv(indio_dev);
1490 	unsigned int watermark = STM32_DMA_BUFFER_SIZE / 2;
1491 	unsigned int rx_buf_sz = STM32_DMA_BUFFER_SIZE;
1492 
1493 	/*
1494 	 * dma cyclic transfers are used, buffer is split into two periods.
1495 	 * There should be :
1496 	 * - always one buffer (period) dma is working on
1497 	 * - one buffer (period) driver can push data.
1498 	 */
1499 	watermark = min(watermark, val * (unsigned)(sizeof(u16)));
1500 	adc->rx_buf_sz = min(rx_buf_sz, watermark * 2 * adc->num_conv);
1501 
1502 	return 0;
1503 }
1504 
1505 static int stm32_adc_update_scan_mode(struct iio_dev *indio_dev,
1506 				      const unsigned long *scan_mask)
1507 {
1508 	struct stm32_adc *adc = iio_priv(indio_dev);
1509 	struct device *dev = indio_dev->dev.parent;
1510 	int ret;
1511 
1512 	ret = pm_runtime_resume_and_get(dev);
1513 	if (ret < 0)
1514 		return ret;
1515 
1516 	adc->num_conv = bitmap_weight(scan_mask, indio_dev->masklength);
1517 
1518 	ret = stm32_adc_conf_scan_seq(indio_dev, scan_mask);
1519 	pm_runtime_mark_last_busy(dev);
1520 	pm_runtime_put_autosuspend(dev);
1521 
1522 	return ret;
1523 }
1524 
1525 static int stm32_adc_fwnode_xlate(struct iio_dev *indio_dev,
1526 				  const struct fwnode_reference_args *iiospec)
1527 {
1528 	int i;
1529 
1530 	for (i = 0; i < indio_dev->num_channels; i++)
1531 		if (indio_dev->channels[i].channel == iiospec->args[0])
1532 			return i;
1533 
1534 	return -EINVAL;
1535 }
1536 
1537 /**
1538  * stm32_adc_debugfs_reg_access - read or write register value
1539  * @indio_dev: IIO device structure
1540  * @reg: register offset
1541  * @writeval: value to write
1542  * @readval: value to read
1543  *
1544  * To read a value from an ADC register:
1545  *   echo [ADC reg offset] > direct_reg_access
1546  *   cat direct_reg_access
1547  *
1548  * To write a value in a ADC register:
1549  *   echo [ADC_reg_offset] [value] > direct_reg_access
1550  */
1551 static int stm32_adc_debugfs_reg_access(struct iio_dev *indio_dev,
1552 					unsigned reg, unsigned writeval,
1553 					unsigned *readval)
1554 {
1555 	struct stm32_adc *adc = iio_priv(indio_dev);
1556 	struct device *dev = indio_dev->dev.parent;
1557 	int ret;
1558 
1559 	ret = pm_runtime_resume_and_get(dev);
1560 	if (ret < 0)
1561 		return ret;
1562 
1563 	if (!readval)
1564 		stm32_adc_writel(adc, reg, writeval);
1565 	else
1566 		*readval = stm32_adc_readl(adc, reg);
1567 
1568 	pm_runtime_mark_last_busy(dev);
1569 	pm_runtime_put_autosuspend(dev);
1570 
1571 	return 0;
1572 }
1573 
1574 static const struct iio_info stm32_adc_iio_info = {
1575 	.read_raw = stm32_adc_read_raw,
1576 	.validate_trigger = stm32_adc_validate_trigger,
1577 	.hwfifo_set_watermark = stm32_adc_set_watermark,
1578 	.update_scan_mode = stm32_adc_update_scan_mode,
1579 	.debugfs_reg_access = stm32_adc_debugfs_reg_access,
1580 	.fwnode_xlate = stm32_adc_fwnode_xlate,
1581 };
1582 
1583 static unsigned int stm32_adc_dma_residue(struct stm32_adc *adc)
1584 {
1585 	struct dma_tx_state state;
1586 	enum dma_status status;
1587 
1588 	status = dmaengine_tx_status(adc->dma_chan,
1589 				     adc->dma_chan->cookie,
1590 				     &state);
1591 	if (status == DMA_IN_PROGRESS) {
1592 		/* Residue is size in bytes from end of buffer */
1593 		unsigned int i = adc->rx_buf_sz - state.residue;
1594 		unsigned int size;
1595 
1596 		/* Return available bytes */
1597 		if (i >= adc->bufi)
1598 			size = i - adc->bufi;
1599 		else
1600 			size = adc->rx_buf_sz + i - adc->bufi;
1601 
1602 		return size;
1603 	}
1604 
1605 	return 0;
1606 }
1607 
1608 static void stm32_adc_dma_buffer_done(void *data)
1609 {
1610 	struct iio_dev *indio_dev = data;
1611 	struct stm32_adc *adc = iio_priv(indio_dev);
1612 	int residue = stm32_adc_dma_residue(adc);
1613 
1614 	/*
1615 	 * In DMA mode the trigger services of IIO are not used
1616 	 * (e.g. no call to iio_trigger_poll).
1617 	 * Calling irq handler associated to the hardware trigger is not
1618 	 * relevant as the conversions have already been done. Data
1619 	 * transfers are performed directly in DMA callback instead.
1620 	 * This implementation avoids to call trigger irq handler that
1621 	 * may sleep, in an atomic context (DMA irq handler context).
1622 	 */
1623 	dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi);
1624 
1625 	while (residue >= indio_dev->scan_bytes) {
1626 		u16 *buffer = (u16 *)&adc->rx_buf[adc->bufi];
1627 
1628 		iio_push_to_buffers(indio_dev, buffer);
1629 
1630 		residue -= indio_dev->scan_bytes;
1631 		adc->bufi += indio_dev->scan_bytes;
1632 		if (adc->bufi >= adc->rx_buf_sz)
1633 			adc->bufi = 0;
1634 	}
1635 }
1636 
1637 static int stm32_adc_dma_start(struct iio_dev *indio_dev)
1638 {
1639 	struct stm32_adc *adc = iio_priv(indio_dev);
1640 	struct dma_async_tx_descriptor *desc;
1641 	dma_cookie_t cookie;
1642 	int ret;
1643 
1644 	if (!adc->dma_chan)
1645 		return 0;
1646 
1647 	dev_dbg(&indio_dev->dev, "%s size=%d watermark=%d\n", __func__,
1648 		adc->rx_buf_sz, adc->rx_buf_sz / 2);
1649 
1650 	/* Prepare a DMA cyclic transaction */
1651 	desc = dmaengine_prep_dma_cyclic(adc->dma_chan,
1652 					 adc->rx_dma_buf,
1653 					 adc->rx_buf_sz, adc->rx_buf_sz / 2,
1654 					 DMA_DEV_TO_MEM,
1655 					 DMA_PREP_INTERRUPT);
1656 	if (!desc)
1657 		return -EBUSY;
1658 
1659 	desc->callback = stm32_adc_dma_buffer_done;
1660 	desc->callback_param = indio_dev;
1661 
1662 	cookie = dmaengine_submit(desc);
1663 	ret = dma_submit_error(cookie);
1664 	if (ret) {
1665 		dmaengine_terminate_sync(adc->dma_chan);
1666 		return ret;
1667 	}
1668 
1669 	/* Issue pending DMA requests */
1670 	dma_async_issue_pending(adc->dma_chan);
1671 
1672 	return 0;
1673 }
1674 
1675 static int stm32_adc_buffer_postenable(struct iio_dev *indio_dev)
1676 {
1677 	struct stm32_adc *adc = iio_priv(indio_dev);
1678 	struct device *dev = indio_dev->dev.parent;
1679 	int ret;
1680 
1681 	ret = pm_runtime_resume_and_get(dev);
1682 	if (ret < 0)
1683 		return ret;
1684 
1685 	ret = stm32_adc_set_trig(indio_dev, indio_dev->trig);
1686 	if (ret) {
1687 		dev_err(&indio_dev->dev, "Can't set trigger\n");
1688 		goto err_pm_put;
1689 	}
1690 
1691 	ret = stm32_adc_dma_start(indio_dev);
1692 	if (ret) {
1693 		dev_err(&indio_dev->dev, "Can't start dma\n");
1694 		goto err_clr_trig;
1695 	}
1696 
1697 	/* Reset adc buffer index */
1698 	adc->bufi = 0;
1699 
1700 	stm32_adc_ovr_irq_enable(adc);
1701 
1702 	if (!adc->dma_chan)
1703 		stm32_adc_conv_irq_enable(adc);
1704 
1705 	adc->cfg->start_conv(indio_dev, !!adc->dma_chan);
1706 
1707 	return 0;
1708 
1709 err_clr_trig:
1710 	stm32_adc_set_trig(indio_dev, NULL);
1711 err_pm_put:
1712 	pm_runtime_mark_last_busy(dev);
1713 	pm_runtime_put_autosuspend(dev);
1714 
1715 	return ret;
1716 }
1717 
1718 static int stm32_adc_buffer_predisable(struct iio_dev *indio_dev)
1719 {
1720 	struct stm32_adc *adc = iio_priv(indio_dev);
1721 	struct device *dev = indio_dev->dev.parent;
1722 
1723 	adc->cfg->stop_conv(indio_dev);
1724 	if (!adc->dma_chan)
1725 		stm32_adc_conv_irq_disable(adc);
1726 
1727 	stm32_adc_ovr_irq_disable(adc);
1728 
1729 	if (adc->dma_chan)
1730 		dmaengine_terminate_sync(adc->dma_chan);
1731 
1732 	if (stm32_adc_set_trig(indio_dev, NULL))
1733 		dev_err(&indio_dev->dev, "Can't clear trigger\n");
1734 
1735 	pm_runtime_mark_last_busy(dev);
1736 	pm_runtime_put_autosuspend(dev);
1737 
1738 	return 0;
1739 }
1740 
1741 static const struct iio_buffer_setup_ops stm32_adc_buffer_setup_ops = {
1742 	.postenable = &stm32_adc_buffer_postenable,
1743 	.predisable = &stm32_adc_buffer_predisable,
1744 };
1745 
1746 static irqreturn_t stm32_adc_trigger_handler(int irq, void *p)
1747 {
1748 	struct iio_poll_func *pf = p;
1749 	struct iio_dev *indio_dev = pf->indio_dev;
1750 	struct stm32_adc *adc = iio_priv(indio_dev);
1751 
1752 	dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi);
1753 
1754 	/* reset buffer index */
1755 	adc->bufi = 0;
1756 	iio_push_to_buffers_with_timestamp(indio_dev, adc->buffer,
1757 					   pf->timestamp);
1758 	iio_trigger_notify_done(indio_dev->trig);
1759 
1760 	/* re-enable eoc irq */
1761 	stm32_adc_conv_irq_enable(adc);
1762 
1763 	return IRQ_HANDLED;
1764 }
1765 
1766 static const struct iio_chan_spec_ext_info stm32_adc_ext_info[] = {
1767 	IIO_ENUM("trigger_polarity", IIO_SHARED_BY_ALL, &stm32_adc_trig_pol),
1768 	{
1769 		.name = "trigger_polarity_available",
1770 		.shared = IIO_SHARED_BY_ALL,
1771 		.read = iio_enum_available_read,
1772 		.private = (uintptr_t)&stm32_adc_trig_pol,
1773 	},
1774 	{},
1775 };
1776 
1777 static int stm32_adc_fw_get_resolution(struct iio_dev *indio_dev)
1778 {
1779 	struct device *dev = &indio_dev->dev;
1780 	struct stm32_adc *adc = iio_priv(indio_dev);
1781 	unsigned int i;
1782 	u32 res;
1783 
1784 	if (device_property_read_u32(dev, "assigned-resolution-bits", &res))
1785 		res = adc->cfg->adc_info->resolutions[0];
1786 
1787 	for (i = 0; i < adc->cfg->adc_info->num_res; i++)
1788 		if (res == adc->cfg->adc_info->resolutions[i])
1789 			break;
1790 	if (i >= adc->cfg->adc_info->num_res) {
1791 		dev_err(&indio_dev->dev, "Bad resolution: %u bits\n", res);
1792 		return -EINVAL;
1793 	}
1794 
1795 	dev_dbg(&indio_dev->dev, "Using %u bits resolution\n", res);
1796 	adc->res = i;
1797 
1798 	return 0;
1799 }
1800 
1801 static void stm32_adc_smpr_init(struct stm32_adc *adc, int channel, u32 smp_ns)
1802 {
1803 	const struct stm32_adc_regs *smpr = &adc->cfg->regs->smp_bits[channel];
1804 	u32 period_ns, shift = smpr->shift, mask = smpr->mask;
1805 	unsigned int smp, r = smpr->reg;
1806 
1807 	/*
1808 	 * For vrefint channel, ensure that the sampling time cannot
1809 	 * be lower than the one specified in the datasheet
1810 	 */
1811 	if (channel == adc->int_ch[STM32_ADC_INT_CH_VREFINT])
1812 		smp_ns = max(smp_ns, adc->cfg->ts_vrefint_ns);
1813 
1814 	/* Determine sampling time (ADC clock cycles) */
1815 	period_ns = NSEC_PER_SEC / adc->common->rate;
1816 	for (smp = 0; smp <= STM32_ADC_MAX_SMP; smp++)
1817 		if ((period_ns * adc->cfg->smp_cycles[smp]) >= smp_ns)
1818 			break;
1819 	if (smp > STM32_ADC_MAX_SMP)
1820 		smp = STM32_ADC_MAX_SMP;
1821 
1822 	/* pre-build sampling time registers (e.g. smpr1, smpr2) */
1823 	adc->smpr_val[r] = (adc->smpr_val[r] & ~mask) | (smp << shift);
1824 }
1825 
1826 static void stm32_adc_chan_init_one(struct iio_dev *indio_dev,
1827 				    struct iio_chan_spec *chan, u32 vinp,
1828 				    u32 vinn, int scan_index, bool differential)
1829 {
1830 	struct stm32_adc *adc = iio_priv(indio_dev);
1831 	char *name = adc->chan_name[vinp];
1832 
1833 	chan->type = IIO_VOLTAGE;
1834 	chan->channel = vinp;
1835 	if (differential) {
1836 		chan->differential = 1;
1837 		chan->channel2 = vinn;
1838 		snprintf(name, STM32_ADC_CH_SZ, "in%d-in%d", vinp, vinn);
1839 	} else {
1840 		snprintf(name, STM32_ADC_CH_SZ, "in%d", vinp);
1841 	}
1842 	chan->datasheet_name = name;
1843 	chan->scan_index = scan_index;
1844 	chan->indexed = 1;
1845 	if (chan->channel == adc->int_ch[STM32_ADC_INT_CH_VREFINT])
1846 		chan->info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED);
1847 	else
1848 		chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
1849 	chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) |
1850 					 BIT(IIO_CHAN_INFO_OFFSET);
1851 	chan->scan_type.sign = 'u';
1852 	chan->scan_type.realbits = adc->cfg->adc_info->resolutions[adc->res];
1853 	chan->scan_type.storagebits = 16;
1854 	chan->ext_info = stm32_adc_ext_info;
1855 
1856 	/* pre-build selected channels mask */
1857 	adc->pcsel |= BIT(chan->channel);
1858 	if (differential) {
1859 		/* pre-build diff channels mask */
1860 		adc->difsel |= BIT(chan->channel);
1861 		/* Also add negative input to pre-selected channels */
1862 		adc->pcsel |= BIT(chan->channel2);
1863 	}
1864 }
1865 
1866 static int stm32_adc_get_legacy_chan_count(struct iio_dev *indio_dev, struct stm32_adc *adc)
1867 {
1868 	struct device *dev = &indio_dev->dev;
1869 	const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
1870 	int num_channels = 0, ret;
1871 
1872 	ret = device_property_count_u32(dev, "st,adc-channels");
1873 	if (ret > adc_info->max_channels) {
1874 		dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");
1875 		return -EINVAL;
1876 	} else if (ret > 0) {
1877 		num_channels += ret;
1878 	}
1879 
1880 	/*
1881 	 * each st,adc-diff-channels is a group of 2 u32 so we divide @ret
1882 	 * to get the *real* number of channels.
1883 	 */
1884 	ret = device_property_count_u32(dev, "st,adc-diff-channels");
1885 	if (ret < 0)
1886 		return ret;
1887 
1888 	ret /= (int)(sizeof(struct stm32_adc_diff_channel) / sizeof(u32));
1889 	if (ret > adc_info->max_channels) {
1890 		dev_err(&indio_dev->dev, "Bad st,adc-diff-channels?\n");
1891 		return -EINVAL;
1892 	} else if (ret > 0) {
1893 		adc->num_diff = ret;
1894 		num_channels += ret;
1895 	}
1896 
1897 	/* Optional sample time is provided either for each, or all channels */
1898 	adc->nsmps = device_property_count_u32(dev, "st,min-sample-time-nsecs");
1899 	if (adc->nsmps > 1 && adc->nsmps != num_channels) {
1900 		dev_err(&indio_dev->dev, "Invalid st,min-sample-time-nsecs\n");
1901 		return -EINVAL;
1902 	}
1903 
1904 	return num_channels;
1905 }
1906 
1907 static int stm32_adc_legacy_chan_init(struct iio_dev *indio_dev,
1908 				      struct stm32_adc *adc,
1909 				      struct iio_chan_spec *channels,
1910 				      int nchans)
1911 {
1912 	const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
1913 	struct stm32_adc_diff_channel diff[STM32_ADC_CH_MAX];
1914 	struct device *dev = &indio_dev->dev;
1915 	u32 num_diff = adc->num_diff;
1916 	int size = num_diff * sizeof(*diff) / sizeof(u32);
1917 	int scan_index = 0, ret, i, c;
1918 	u32 smp = 0, smps[STM32_ADC_CH_MAX], chans[STM32_ADC_CH_MAX];
1919 
1920 	if (num_diff) {
1921 		ret = device_property_read_u32_array(dev, "st,adc-diff-channels",
1922 						     (u32 *)diff, size);
1923 		if (ret) {
1924 			dev_err(&indio_dev->dev, "Failed to get diff channels %d\n", ret);
1925 			return ret;
1926 		}
1927 
1928 		for (i = 0; i < num_diff; i++) {
1929 			if (diff[i].vinp >= adc_info->max_channels ||
1930 			    diff[i].vinn >= adc_info->max_channels) {
1931 				dev_err(&indio_dev->dev, "Invalid channel in%d-in%d\n",
1932 					diff[i].vinp, diff[i].vinn);
1933 				return -EINVAL;
1934 			}
1935 
1936 			stm32_adc_chan_init_one(indio_dev, &channels[scan_index],
1937 						diff[i].vinp, diff[i].vinn,
1938 						scan_index, true);
1939 			scan_index++;
1940 		}
1941 	}
1942 
1943 	ret = device_property_read_u32_array(dev, "st,adc-channels", chans,
1944 					     nchans);
1945 	if (ret)
1946 		return ret;
1947 
1948 	for (c = 0; c < nchans; c++) {
1949 		if (chans[c] >= adc_info->max_channels) {
1950 			dev_err(&indio_dev->dev, "Invalid channel %d\n",
1951 				chans[c]);
1952 			return -EINVAL;
1953 		}
1954 
1955 		/* Channel can't be configured both as single-ended & diff */
1956 		for (i = 0; i < num_diff; i++) {
1957 			if (chans[c] == diff[i].vinp) {
1958 				dev_err(&indio_dev->dev, "channel %d misconfigured\n",	chans[c]);
1959 				return -EINVAL;
1960 			}
1961 		}
1962 		stm32_adc_chan_init_one(indio_dev, &channels[scan_index],
1963 					chans[c], 0, scan_index, false);
1964 		scan_index++;
1965 	}
1966 
1967 	if (adc->nsmps > 0) {
1968 		ret = device_property_read_u32_array(dev, "st,min-sample-time-nsecs",
1969 						     smps, adc->nsmps);
1970 		if (ret)
1971 			return ret;
1972 	}
1973 
1974 	for (i = 0; i < scan_index; i++) {
1975 		/*
1976 		 * This check is used with the above logic so that smp value
1977 		 * will only be modified if valid u32 value can be decoded. This
1978 		 * allows to get either no value, 1 shared value for all indexes,
1979 		 * or one value per channel. The point is to have the same
1980 		 * behavior as 'of_property_read_u32_index()'.
1981 		 */
1982 		if (i < adc->nsmps)
1983 			smp = smps[i];
1984 
1985 		/* Prepare sampling time settings */
1986 		stm32_adc_smpr_init(adc, channels[i].channel, smp);
1987 	}
1988 
1989 	return scan_index;
1990 }
1991 
1992 static int stm32_adc_populate_int_ch(struct iio_dev *indio_dev, const char *ch_name,
1993 				     int chan)
1994 {
1995 	struct stm32_adc *adc = iio_priv(indio_dev);
1996 	u16 vrefint;
1997 	int i, ret;
1998 
1999 	for (i = 0; i < STM32_ADC_INT_CH_NB; i++) {
2000 		if (!strncmp(stm32_adc_ic[i].name, ch_name, STM32_ADC_CH_SZ)) {
2001 			if (stm32_adc_ic[i].idx != STM32_ADC_INT_CH_VREFINT) {
2002 				adc->int_ch[i] = chan;
2003 				break;
2004 			}
2005 
2006 			/* Get calibration data for vrefint channel */
2007 			ret = nvmem_cell_read_u16(&indio_dev->dev, "vrefint", &vrefint);
2008 			if (ret && ret != -ENOENT) {
2009 				return dev_err_probe(indio_dev->dev.parent, ret,
2010 						     "nvmem access error\n");
2011 			}
2012 			if (ret == -ENOENT) {
2013 				dev_dbg(&indio_dev->dev, "vrefint calibration not found. Skip vrefint channel\n");
2014 				return ret;
2015 			} else if (!vrefint) {
2016 				dev_dbg(&indio_dev->dev, "Null vrefint calibration value. Skip vrefint channel\n");
2017 				return -ENOENT;
2018 			}
2019 			adc->int_ch[i] = chan;
2020 			adc->vrefint.vrefint_cal = vrefint;
2021 		}
2022 	}
2023 
2024 	return 0;
2025 }
2026 
2027 static int stm32_adc_generic_chan_init(struct iio_dev *indio_dev,
2028 				       struct stm32_adc *adc,
2029 				       struct iio_chan_spec *channels)
2030 {
2031 	const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
2032 	struct fwnode_handle *child;
2033 	const char *name;
2034 	int val, scan_index = 0, ret;
2035 	bool differential;
2036 	u32 vin[2];
2037 
2038 	device_for_each_child_node(&indio_dev->dev, child) {
2039 		ret = fwnode_property_read_u32(child, "reg", &val);
2040 		if (ret) {
2041 			dev_err(&indio_dev->dev, "Missing channel index %d\n", ret);
2042 			goto err;
2043 		}
2044 
2045 		ret = fwnode_property_read_string(child, "label", &name);
2046 		/* label is optional */
2047 		if (!ret) {
2048 			if (strlen(name) >= STM32_ADC_CH_SZ) {
2049 				dev_err(&indio_dev->dev, "Label %s exceeds %d characters\n",
2050 					name, STM32_ADC_CH_SZ);
2051 				ret = -EINVAL;
2052 				goto err;
2053 			}
2054 			strncpy(adc->chan_name[val], name, STM32_ADC_CH_SZ);
2055 			ret = stm32_adc_populate_int_ch(indio_dev, name, val);
2056 			if (ret == -ENOENT)
2057 				continue;
2058 			else if (ret)
2059 				goto err;
2060 		} else if (ret != -EINVAL) {
2061 			dev_err(&indio_dev->dev, "Invalid label %d\n", ret);
2062 			goto err;
2063 		}
2064 
2065 		if (val >= adc_info->max_channels) {
2066 			dev_err(&indio_dev->dev, "Invalid channel %d\n", val);
2067 			ret = -EINVAL;
2068 			goto err;
2069 		}
2070 
2071 		differential = false;
2072 		ret = fwnode_property_read_u32_array(child, "diff-channels", vin, 2);
2073 		/* diff-channels is optional */
2074 		if (!ret) {
2075 			differential = true;
2076 			if (vin[0] != val || vin[1] >= adc_info->max_channels) {
2077 				dev_err(&indio_dev->dev, "Invalid channel in%d-in%d\n",
2078 					vin[0], vin[1]);
2079 				goto err;
2080 			}
2081 		} else if (ret != -EINVAL) {
2082 			dev_err(&indio_dev->dev, "Invalid diff-channels property %d\n", ret);
2083 			goto err;
2084 		}
2085 
2086 		stm32_adc_chan_init_one(indio_dev, &channels[scan_index], val,
2087 					vin[1], scan_index, differential);
2088 
2089 		val = 0;
2090 		ret = fwnode_property_read_u32(child, "st,min-sample-time-ns", &val);
2091 		/* st,min-sample-time-ns is optional */
2092 		if (ret && ret != -EINVAL) {
2093 			dev_err(&indio_dev->dev, "Invalid st,min-sample-time-ns property %d\n",
2094 				ret);
2095 			goto err;
2096 		}
2097 
2098 		stm32_adc_smpr_init(adc, channels[scan_index].channel, val);
2099 		if (differential)
2100 			stm32_adc_smpr_init(adc, vin[1], val);
2101 
2102 		scan_index++;
2103 	}
2104 
2105 	return scan_index;
2106 
2107 err:
2108 	fwnode_handle_put(child);
2109 
2110 	return ret;
2111 }
2112 
2113 static int stm32_adc_chan_fw_init(struct iio_dev *indio_dev, bool timestamping)
2114 {
2115 	struct stm32_adc *adc = iio_priv(indio_dev);
2116 	const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
2117 	struct iio_chan_spec *channels;
2118 	int scan_index = 0, num_channels = 0, ret, i;
2119 	bool legacy = false;
2120 
2121 	for (i = 0; i < STM32_ADC_INT_CH_NB; i++)
2122 		adc->int_ch[i] = STM32_ADC_INT_CH_NONE;
2123 
2124 	num_channels = device_get_child_node_count(&indio_dev->dev);
2125 	/* If no channels have been found, fallback to channels legacy properties. */
2126 	if (!num_channels) {
2127 		legacy = true;
2128 
2129 		ret = stm32_adc_get_legacy_chan_count(indio_dev, adc);
2130 		if (!ret) {
2131 			dev_err(indio_dev->dev.parent, "No channel found\n");
2132 			return -ENODATA;
2133 		} else if (ret < 0) {
2134 			return ret;
2135 		}
2136 
2137 		num_channels = ret;
2138 	}
2139 
2140 	if (num_channels > adc_info->max_channels) {
2141 		dev_err(&indio_dev->dev, "Channel number [%d] exceeds %d\n",
2142 			num_channels, adc_info->max_channels);
2143 		return -EINVAL;
2144 	}
2145 
2146 	if (timestamping)
2147 		num_channels++;
2148 
2149 	channels = devm_kcalloc(&indio_dev->dev, num_channels,
2150 				sizeof(struct iio_chan_spec), GFP_KERNEL);
2151 	if (!channels)
2152 		return -ENOMEM;
2153 
2154 	if (legacy)
2155 		ret = stm32_adc_legacy_chan_init(indio_dev, adc, channels,
2156 						 num_channels);
2157 	else
2158 		ret = stm32_adc_generic_chan_init(indio_dev, adc, channels);
2159 	if (ret < 0)
2160 		return ret;
2161 	scan_index = ret;
2162 
2163 	if (timestamping) {
2164 		struct iio_chan_spec *timestamp = &channels[scan_index];
2165 
2166 		timestamp->type = IIO_TIMESTAMP;
2167 		timestamp->channel = -1;
2168 		timestamp->scan_index = scan_index;
2169 		timestamp->scan_type.sign = 's';
2170 		timestamp->scan_type.realbits = 64;
2171 		timestamp->scan_type.storagebits = 64;
2172 
2173 		scan_index++;
2174 	}
2175 
2176 	indio_dev->num_channels = scan_index;
2177 	indio_dev->channels = channels;
2178 
2179 	return 0;
2180 }
2181 
2182 static int stm32_adc_dma_request(struct device *dev, struct iio_dev *indio_dev)
2183 {
2184 	struct stm32_adc *adc = iio_priv(indio_dev);
2185 	struct dma_slave_config config;
2186 	int ret;
2187 
2188 	adc->dma_chan = dma_request_chan(dev, "rx");
2189 	if (IS_ERR(adc->dma_chan)) {
2190 		ret = PTR_ERR(adc->dma_chan);
2191 		if (ret != -ENODEV)
2192 			return dev_err_probe(dev, ret,
2193 					     "DMA channel request failed with\n");
2194 
2195 		/* DMA is optional: fall back to IRQ mode */
2196 		adc->dma_chan = NULL;
2197 		return 0;
2198 	}
2199 
2200 	adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
2201 					 STM32_DMA_BUFFER_SIZE,
2202 					 &adc->rx_dma_buf, GFP_KERNEL);
2203 	if (!adc->rx_buf) {
2204 		ret = -ENOMEM;
2205 		goto err_release;
2206 	}
2207 
2208 	/* Configure DMA channel to read data register */
2209 	memset(&config, 0, sizeof(config));
2210 	config.src_addr = (dma_addr_t)adc->common->phys_base;
2211 	config.src_addr += adc->offset + adc->cfg->regs->dr;
2212 	config.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
2213 
2214 	ret = dmaengine_slave_config(adc->dma_chan, &config);
2215 	if (ret)
2216 		goto err_free;
2217 
2218 	return 0;
2219 
2220 err_free:
2221 	dma_free_coherent(adc->dma_chan->device->dev, STM32_DMA_BUFFER_SIZE,
2222 			  adc->rx_buf, adc->rx_dma_buf);
2223 err_release:
2224 	dma_release_channel(adc->dma_chan);
2225 
2226 	return ret;
2227 }
2228 
2229 static int stm32_adc_probe(struct platform_device *pdev)
2230 {
2231 	struct iio_dev *indio_dev;
2232 	struct device *dev = &pdev->dev;
2233 	irqreturn_t (*handler)(int irq, void *p) = NULL;
2234 	struct stm32_adc *adc;
2235 	bool timestamping = false;
2236 	int ret;
2237 
2238 	indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc));
2239 	if (!indio_dev)
2240 		return -ENOMEM;
2241 
2242 	adc = iio_priv(indio_dev);
2243 	adc->common = dev_get_drvdata(pdev->dev.parent);
2244 	spin_lock_init(&adc->lock);
2245 	init_completion(&adc->completion);
2246 	adc->cfg = device_get_match_data(dev);
2247 
2248 	indio_dev->name = dev_name(&pdev->dev);
2249 	device_set_node(&indio_dev->dev, dev_fwnode(&pdev->dev));
2250 	indio_dev->info = &stm32_adc_iio_info;
2251 	indio_dev->modes = INDIO_DIRECT_MODE | INDIO_HARDWARE_TRIGGERED;
2252 
2253 	platform_set_drvdata(pdev, indio_dev);
2254 
2255 	ret = device_property_read_u32(dev, "reg", &adc->offset);
2256 	if (ret != 0) {
2257 		dev_err(&pdev->dev, "missing reg property\n");
2258 		return -EINVAL;
2259 	}
2260 
2261 	adc->irq = platform_get_irq(pdev, 0);
2262 	if (adc->irq < 0)
2263 		return adc->irq;
2264 
2265 	ret = devm_request_threaded_irq(&pdev->dev, adc->irq, stm32_adc_isr,
2266 					stm32_adc_threaded_isr,
2267 					0, pdev->name, indio_dev);
2268 	if (ret) {
2269 		dev_err(&pdev->dev, "failed to request IRQ\n");
2270 		return ret;
2271 	}
2272 
2273 	adc->clk = devm_clk_get(&pdev->dev, NULL);
2274 	if (IS_ERR(adc->clk)) {
2275 		ret = PTR_ERR(adc->clk);
2276 		if (ret == -ENOENT && !adc->cfg->clk_required) {
2277 			adc->clk = NULL;
2278 		} else {
2279 			dev_err(&pdev->dev, "Can't get clock\n");
2280 			return ret;
2281 		}
2282 	}
2283 
2284 	ret = stm32_adc_fw_get_resolution(indio_dev);
2285 	if (ret < 0)
2286 		return ret;
2287 
2288 	ret = stm32_adc_dma_request(dev, indio_dev);
2289 	if (ret < 0)
2290 		return ret;
2291 
2292 	if (!adc->dma_chan) {
2293 		/* For PIO mode only, iio_pollfunc_store_time stores a timestamp
2294 		 * in the primary trigger IRQ handler and stm32_adc_trigger_handler
2295 		 * runs in the IRQ thread to push out buffer along with timestamp.
2296 		 */
2297 		handler = &stm32_adc_trigger_handler;
2298 		timestamping = true;
2299 	}
2300 
2301 	ret = stm32_adc_chan_fw_init(indio_dev, timestamping);
2302 	if (ret < 0)
2303 		goto err_dma_disable;
2304 
2305 	ret = iio_triggered_buffer_setup(indio_dev,
2306 					 &iio_pollfunc_store_time, handler,
2307 					 &stm32_adc_buffer_setup_ops);
2308 	if (ret) {
2309 		dev_err(&pdev->dev, "buffer setup failed\n");
2310 		goto err_dma_disable;
2311 	}
2312 
2313 	/* Get stm32-adc-core PM online */
2314 	pm_runtime_get_noresume(dev);
2315 	pm_runtime_set_active(dev);
2316 	pm_runtime_set_autosuspend_delay(dev, STM32_ADC_HW_STOP_DELAY_MS);
2317 	pm_runtime_use_autosuspend(dev);
2318 	pm_runtime_enable(dev);
2319 
2320 	ret = stm32_adc_hw_start(dev);
2321 	if (ret)
2322 		goto err_buffer_cleanup;
2323 
2324 	ret = iio_device_register(indio_dev);
2325 	if (ret) {
2326 		dev_err(&pdev->dev, "iio dev register failed\n");
2327 		goto err_hw_stop;
2328 	}
2329 
2330 	pm_runtime_mark_last_busy(dev);
2331 	pm_runtime_put_autosuspend(dev);
2332 
2333 	return 0;
2334 
2335 err_hw_stop:
2336 	stm32_adc_hw_stop(dev);
2337 
2338 err_buffer_cleanup:
2339 	pm_runtime_disable(dev);
2340 	pm_runtime_set_suspended(dev);
2341 	pm_runtime_put_noidle(dev);
2342 	iio_triggered_buffer_cleanup(indio_dev);
2343 
2344 err_dma_disable:
2345 	if (adc->dma_chan) {
2346 		dma_free_coherent(adc->dma_chan->device->dev,
2347 				  STM32_DMA_BUFFER_SIZE,
2348 				  adc->rx_buf, adc->rx_dma_buf);
2349 		dma_release_channel(adc->dma_chan);
2350 	}
2351 
2352 	return ret;
2353 }
2354 
2355 static int stm32_adc_remove(struct platform_device *pdev)
2356 {
2357 	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
2358 	struct stm32_adc *adc = iio_priv(indio_dev);
2359 
2360 	pm_runtime_get_sync(&pdev->dev);
2361 	iio_device_unregister(indio_dev);
2362 	stm32_adc_hw_stop(&pdev->dev);
2363 	pm_runtime_disable(&pdev->dev);
2364 	pm_runtime_set_suspended(&pdev->dev);
2365 	pm_runtime_put_noidle(&pdev->dev);
2366 	iio_triggered_buffer_cleanup(indio_dev);
2367 	if (adc->dma_chan) {
2368 		dma_free_coherent(adc->dma_chan->device->dev,
2369 				  STM32_DMA_BUFFER_SIZE,
2370 				  adc->rx_buf, adc->rx_dma_buf);
2371 		dma_release_channel(adc->dma_chan);
2372 	}
2373 
2374 	return 0;
2375 }
2376 
2377 static int stm32_adc_suspend(struct device *dev)
2378 {
2379 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
2380 
2381 	if (iio_buffer_enabled(indio_dev))
2382 		stm32_adc_buffer_predisable(indio_dev);
2383 
2384 	return pm_runtime_force_suspend(dev);
2385 }
2386 
2387 static int stm32_adc_resume(struct device *dev)
2388 {
2389 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
2390 	int ret;
2391 
2392 	ret = pm_runtime_force_resume(dev);
2393 	if (ret < 0)
2394 		return ret;
2395 
2396 	if (!iio_buffer_enabled(indio_dev))
2397 		return 0;
2398 
2399 	ret = stm32_adc_update_scan_mode(indio_dev,
2400 					 indio_dev->active_scan_mask);
2401 	if (ret < 0)
2402 		return ret;
2403 
2404 	return stm32_adc_buffer_postenable(indio_dev);
2405 }
2406 
2407 static int stm32_adc_runtime_suspend(struct device *dev)
2408 {
2409 	return stm32_adc_hw_stop(dev);
2410 }
2411 
2412 static int stm32_adc_runtime_resume(struct device *dev)
2413 {
2414 	return stm32_adc_hw_start(dev);
2415 }
2416 
2417 static const struct dev_pm_ops stm32_adc_pm_ops = {
2418 	SYSTEM_SLEEP_PM_OPS(stm32_adc_suspend, stm32_adc_resume)
2419 	RUNTIME_PM_OPS(stm32_adc_runtime_suspend, stm32_adc_runtime_resume,
2420 		       NULL)
2421 };
2422 
2423 static const struct stm32_adc_cfg stm32f4_adc_cfg = {
2424 	.regs = &stm32f4_adc_regspec,
2425 	.adc_info = &stm32f4_adc_info,
2426 	.trigs = stm32f4_adc_trigs,
2427 	.clk_required = true,
2428 	.start_conv = stm32f4_adc_start_conv,
2429 	.stop_conv = stm32f4_adc_stop_conv,
2430 	.smp_cycles = stm32f4_adc_smp_cycles,
2431 	.irq_clear = stm32f4_adc_irq_clear,
2432 };
2433 
2434 static const struct stm32_adc_cfg stm32h7_adc_cfg = {
2435 	.regs = &stm32h7_adc_regspec,
2436 	.adc_info = &stm32h7_adc_info,
2437 	.trigs = stm32h7_adc_trigs,
2438 	.start_conv = stm32h7_adc_start_conv,
2439 	.stop_conv = stm32h7_adc_stop_conv,
2440 	.prepare = stm32h7_adc_prepare,
2441 	.unprepare = stm32h7_adc_unprepare,
2442 	.smp_cycles = stm32h7_adc_smp_cycles,
2443 	.irq_clear = stm32h7_adc_irq_clear,
2444 };
2445 
2446 static const struct stm32_adc_cfg stm32mp1_adc_cfg = {
2447 	.regs = &stm32mp1_adc_regspec,
2448 	.adc_info = &stm32h7_adc_info,
2449 	.trigs = stm32h7_adc_trigs,
2450 	.has_vregready = true,
2451 	.start_conv = stm32h7_adc_start_conv,
2452 	.stop_conv = stm32h7_adc_stop_conv,
2453 	.prepare = stm32h7_adc_prepare,
2454 	.unprepare = stm32h7_adc_unprepare,
2455 	.smp_cycles = stm32h7_adc_smp_cycles,
2456 	.irq_clear = stm32h7_adc_irq_clear,
2457 	.ts_vrefint_ns = 4300,
2458 };
2459 
2460 static const struct of_device_id stm32_adc_of_match[] = {
2461 	{ .compatible = "st,stm32f4-adc", .data = (void *)&stm32f4_adc_cfg },
2462 	{ .compatible = "st,stm32h7-adc", .data = (void *)&stm32h7_adc_cfg },
2463 	{ .compatible = "st,stm32mp1-adc", .data = (void *)&stm32mp1_adc_cfg },
2464 	{},
2465 };
2466 MODULE_DEVICE_TABLE(of, stm32_adc_of_match);
2467 
2468 static struct platform_driver stm32_adc_driver = {
2469 	.probe = stm32_adc_probe,
2470 	.remove = stm32_adc_remove,
2471 	.driver = {
2472 		.name = "stm32-adc",
2473 		.of_match_table = stm32_adc_of_match,
2474 		.pm = pm_ptr(&stm32_adc_pm_ops),
2475 	},
2476 };
2477 module_platform_driver(stm32_adc_driver);
2478 
2479 MODULE_AUTHOR("Fabrice Gasnier <fabrice.gasnier@st.com>");
2480 MODULE_DESCRIPTION("STMicroelectronics STM32 ADC IIO driver");
2481 MODULE_LICENSE("GPL v2");
2482 MODULE_ALIAS("platform:stm32-adc");
2483