1// SPDX-License-Identifier: GPL-2.0
2/*
3 * This file is the ADC part of the STM32 DFSDM driver
4 *
5 * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
6 * Author: Arnaud Pouliquen <arnaud.pouliquen@st.com>.
7 */
8
9#include <linux/dmaengine.h>
10#include <linux/dma-mapping.h>
11#include <linux/iio/adc/stm32-dfsdm-adc.h>
12#include <linux/iio/buffer.h>
13#include <linux/iio/hw-consumer.h>
14#include <linux/iio/sysfs.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/module.h>
22#include <linux/of.h>
23#include <linux/of_platform.h>
24#include <linux/platform_device.h>
25#include <linux/regmap.h>
26#include <linux/slab.h>
27
28#include "stm32-dfsdm.h"
29
30#define DFSDM_DMA_BUFFER_SIZE (4 * PAGE_SIZE)
31
32/* Conversion timeout */
33#define DFSDM_TIMEOUT_US 100000
34#define DFSDM_TIMEOUT (msecs_to_jiffies(DFSDM_TIMEOUT_US / 1000))
35
36/* Oversampling attribute default */
37#define DFSDM_DEFAULT_OVERSAMPLING  100
38
39/* Oversampling max values */
40#define DFSDM_MAX_INT_OVERSAMPLING 256
41#define DFSDM_MAX_FL_OVERSAMPLING 1024
42
43/* Limit filter output resolution to 31 bits. (i.e. sample range is +/-2^30) */
44#define DFSDM_DATA_MAX BIT(30)
45/*
46 * Data are output as two's complement data in a 24 bit field.
47 * Data from filters are in the range +/-2^(n-1)
48 * 2^(n-1) maximum positive value cannot be coded in 2's complement n bits
49 * An extra bit is required to avoid wrap-around of the binary code for 2^(n-1)
50 * So, the resolution of samples from filter is actually limited to 23 bits
51 */
52#define DFSDM_DATA_RES 24
53
54/* Filter configuration */
55#define DFSDM_CR1_CFG_MASK (DFSDM_CR1_RCH_MASK | DFSDM_CR1_RCONT_MASK | \
56			    DFSDM_CR1_RSYNC_MASK | DFSDM_CR1_JSYNC_MASK | \
57			    DFSDM_CR1_JSCAN_MASK)
58
59enum sd_converter_type {
60	DFSDM_AUDIO,
61	DFSDM_IIO,
62};
63
64struct stm32_dfsdm_dev_data {
65	int type;
66	int (*init)(struct device *dev, struct iio_dev *indio_dev);
67	unsigned int num_channels;
68	const struct regmap_config *regmap_cfg;
69};
70
71struct stm32_dfsdm_adc {
72	struct stm32_dfsdm *dfsdm;
73	const struct stm32_dfsdm_dev_data *dev_data;
74	unsigned int fl_id;
75	unsigned int nconv;
76	unsigned long smask;
77
78	/* ADC specific */
79	unsigned int oversamp;
80	struct iio_hw_consumer *hwc;
81	struct completion completion;
82	u32 *buffer;
83
84	/* Audio specific */
85	unsigned int spi_freq;  /* SPI bus clock frequency */
86	unsigned int sample_freq; /* Sample frequency after filter decimation */
87	int (*cb)(const void *data, size_t size, void *cb_priv);
88	void *cb_priv;
89
90	/* DMA */
91	u8 *rx_buf;
92	unsigned int bufi; /* Buffer current position */
93	unsigned int buf_sz; /* Buffer size */
94	struct dma_chan	*dma_chan;
95	dma_addr_t dma_buf;
96};
97
98struct stm32_dfsdm_str2field {
99	const char	*name;
100	unsigned int	val;
101};
102
103/* DFSDM channel serial interface type */
104static const struct stm32_dfsdm_str2field stm32_dfsdm_chan_type[] = {
105	{ "SPI_R", 0 }, /* SPI with data on rising edge */
106	{ "SPI_F", 1 }, /* SPI with data on falling edge */
107	{ "MANCH_R", 2 }, /* Manchester codec, rising edge = logic 0 */
108	{ "MANCH_F", 3 }, /* Manchester codec, falling edge = logic 1 */
109	{},
110};
111
112/* DFSDM channel clock source */
113static const struct stm32_dfsdm_str2field stm32_dfsdm_chan_src[] = {
114	/* External SPI clock (CLKIN x) */
115	{ "CLKIN", DFSDM_CHANNEL_SPI_CLOCK_EXTERNAL },
116	/* Internal SPI clock (CLKOUT) */
117	{ "CLKOUT", DFSDM_CHANNEL_SPI_CLOCK_INTERNAL },
118	/* Internal SPI clock divided by 2 (falling edge) */
119	{ "CLKOUT_F", DFSDM_CHANNEL_SPI_CLOCK_INTERNAL_DIV2_FALLING },
120	/* Internal SPI clock divided by 2 (falling edge) */
121	{ "CLKOUT_R", DFSDM_CHANNEL_SPI_CLOCK_INTERNAL_DIV2_RISING },
122	{},
123};
124
125static int stm32_dfsdm_str2val(const char *str,
126			       const struct stm32_dfsdm_str2field *list)
127{
128	const struct stm32_dfsdm_str2field *p = list;
129
130	for (p = list; p && p->name; p++)
131		if (!strcmp(p->name, str))
132			return p->val;
133
134	return -EINVAL;
135}
136
137/**
138 * struct stm32_dfsdm_trig_info - DFSDM trigger info
139 * @name:		name of the trigger, corresponding to its source
140 * @jextsel:		trigger signal selection
141 */
142struct stm32_dfsdm_trig_info {
143	const char *name;
144	unsigned int jextsel;
145};
146
147/* hardware injected trigger enable, edge selection */
148enum stm32_dfsdm_jexten {
149	STM32_DFSDM_JEXTEN_DISABLED,
150	STM32_DFSDM_JEXTEN_RISING_EDGE,
151	STM32_DFSDM_JEXTEN_FALLING_EDGE,
152	STM32_DFSDM_EXTEN_BOTH_EDGES,
153};
154
155static const struct stm32_dfsdm_trig_info stm32_dfsdm_trigs[] = {
156	{ TIM1_TRGO, 0 },
157	{ TIM1_TRGO2, 1 },
158	{ TIM8_TRGO, 2 },
159	{ TIM8_TRGO2, 3 },
160	{ TIM3_TRGO, 4 },
161	{ TIM4_TRGO, 5 },
162	{ TIM16_OC1, 6 },
163	{ TIM6_TRGO, 7 },
164	{ TIM7_TRGO, 8 },
165	{ LPTIM1_OUT, 26 },
166	{ LPTIM2_OUT, 27 },
167	{ LPTIM3_OUT, 28 },
168	{},
169};
170
171static int stm32_dfsdm_get_jextsel(struct iio_dev *indio_dev,
172				   struct iio_trigger *trig)
173{
174	int i;
175
176	/* lookup triggers registered by stm32 timer trigger driver */
177	for (i = 0; stm32_dfsdm_trigs[i].name; i++) {
178		/**
179		 * Checking both stm32 timer trigger type and trig name
180		 * should be safe against arbitrary trigger names.
181		 */
182		if ((is_stm32_timer_trigger(trig) ||
183		     is_stm32_lptim_trigger(trig)) &&
184		    !strcmp(stm32_dfsdm_trigs[i].name, trig->name)) {
185			return stm32_dfsdm_trigs[i].jextsel;
186		}
187	}
188
189	return -EINVAL;
190}
191
192static int stm32_dfsdm_compute_osrs(struct stm32_dfsdm_filter *fl,
193				    unsigned int fast, unsigned int oversamp)
194{
195	unsigned int i, d, fosr, iosr;
196	u64 res, max;
197	int bits, shift;
198	unsigned int m = 1;	/* multiplication factor */
199	unsigned int p = fl->ford;	/* filter order (ford) */
200	struct stm32_dfsdm_filter_osr *flo = &fl->flo[fast];
201
202	pr_debug("Requested oversampling: %d\n", oversamp);
203	/*
204	 * This function tries to compute filter oversampling and integrator
205	 * oversampling, base on oversampling ratio requested by user.
206	 *
207	 * Decimation d depends on the filter order and the oversampling ratios.
208	 * ford: filter order
209	 * fosr: filter over sampling ratio
210	 * iosr: integrator over sampling ratio
211	 */
212	if (fl->ford == DFSDM_FASTSINC_ORDER) {
213		m = 2;
214		p = 2;
215	}
216
217	/*
218	 * Look for filter and integrator oversampling ratios which allows
219	 * to maximize data output resolution.
220	 */
221	for (fosr = 1; fosr <= DFSDM_MAX_FL_OVERSAMPLING; fosr++) {
222		for (iosr = 1; iosr <= DFSDM_MAX_INT_OVERSAMPLING; iosr++) {
223			if (fast)
224				d = fosr * iosr;
225			else if (fl->ford == DFSDM_FASTSINC_ORDER)
226				d = fosr * (iosr + 3) + 2;
227			else
228				d = fosr * (iosr - 1 + p) + p;
229
230			if (d > oversamp)
231				break;
232			else if (d != oversamp)
233				continue;
234			/*
235			 * Check resolution (limited to signed 32 bits)
236			 *   res <= 2^31
237			 * Sincx filters:
238			 *   res = m * fosr^p x iosr (with m=1, p=ford)
239			 * FastSinc filter
240			 *   res = m * fosr^p x iosr (with m=2, p=2)
241			 */
242			res = fosr;
243			for (i = p - 1; i > 0; i--) {
244				res = res * (u64)fosr;
245				if (res > DFSDM_DATA_MAX)
246					break;
247			}
248			if (res > DFSDM_DATA_MAX)
249				continue;
250
251			res = res * (u64)m * (u64)iosr;
252			if (res > DFSDM_DATA_MAX)
253				continue;
254
255			if (res >= flo->res) {
256				flo->res = res;
257				flo->fosr = fosr;
258				flo->iosr = iosr;
259
260				bits = fls(flo->res);
261				/* 8 LBSs in data register contain chan info */
262				max = flo->res << 8;
263
264				/* if resolution is not a power of two */
265				if (flo->res > BIT(bits - 1))
266					bits++;
267				else
268					max--;
269
270				shift = DFSDM_DATA_RES - bits;
271				/*
272				 * Compute right/left shift
273				 * Right shift is performed by hardware
274				 * when transferring samples to data register.
275				 * Left shift is done by software on buffer
276				 */
277				if (shift > 0) {
278					/* Resolution is lower than 24 bits */
279					flo->rshift = 0;
280					flo->lshift = shift;
281				} else {
282					/*
283					 * If resolution is 24 bits or more,
284					 * max positive value may be ambiguous
285					 * (equal to max negative value as sign
286					 * bit is dropped).
287					 * Reduce resolution to 23 bits (rshift)
288					 * to keep the sign on bit 23 and treat
289					 * saturation before rescaling on 24
290					 * bits (lshift).
291					 */
292					flo->rshift = 1 - shift;
293					flo->lshift = 1;
294					max >>= flo->rshift;
295				}
296				flo->max = (s32)max;
297				flo->bits = bits;
298
299				pr_debug("fast %d, fosr %d, iosr %d, res 0x%llx/%d bits, rshift %d, lshift %d\n",
300					 fast, flo->fosr, flo->iosr,
301					 flo->res, bits, flo->rshift,
302					 flo->lshift);
303			}
304		}
305	}
306
307	if (!flo->res)
308		return -EINVAL;
309
310	return 0;
311}
312
313static int stm32_dfsdm_compute_all_osrs(struct iio_dev *indio_dev,
314					unsigned int oversamp)
315{
316	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
317	struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[adc->fl_id];
318	int ret0, ret1;
319
320	memset(&fl->flo[0], 0, sizeof(fl->flo[0]));
321	memset(&fl->flo[1], 0, sizeof(fl->flo[1]));
322
323	ret0 = stm32_dfsdm_compute_osrs(fl, 0, oversamp);
324	ret1 = stm32_dfsdm_compute_osrs(fl, 1, oversamp);
325	if (ret0 < 0 && ret1 < 0) {
326		dev_err(&indio_dev->dev,
327			"Filter parameters not found: errors %d/%d\n",
328			ret0, ret1);
329		return -EINVAL;
330	}
331
332	return 0;
333}
334
335static int stm32_dfsdm_start_channel(struct iio_dev *indio_dev)
336{
337	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
338	struct regmap *regmap = adc->dfsdm->regmap;
339	const struct iio_chan_spec *chan;
340	unsigned int bit;
341	int ret;
342
343	for_each_set_bit(bit, &adc->smask, sizeof(adc->smask) * BITS_PER_BYTE) {
344		chan = indio_dev->channels + bit;
345		ret = regmap_update_bits(regmap, DFSDM_CHCFGR1(chan->channel),
346					 DFSDM_CHCFGR1_CHEN_MASK,
347					 DFSDM_CHCFGR1_CHEN(1));
348		if (ret < 0)
349			return ret;
350	}
351
352	return 0;
353}
354
355static void stm32_dfsdm_stop_channel(struct iio_dev *indio_dev)
356{
357	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
358	struct regmap *regmap = adc->dfsdm->regmap;
359	const struct iio_chan_spec *chan;
360	unsigned int bit;
361
362	for_each_set_bit(bit, &adc->smask, sizeof(adc->smask) * BITS_PER_BYTE) {
363		chan = indio_dev->channels + bit;
364		regmap_update_bits(regmap, DFSDM_CHCFGR1(chan->channel),
365				   DFSDM_CHCFGR1_CHEN_MASK,
366				   DFSDM_CHCFGR1_CHEN(0));
367	}
368}
369
370static int stm32_dfsdm_chan_configure(struct stm32_dfsdm *dfsdm,
371				      struct stm32_dfsdm_channel *ch)
372{
373	unsigned int id = ch->id;
374	struct regmap *regmap = dfsdm->regmap;
375	int ret;
376
377	ret = regmap_update_bits(regmap, DFSDM_CHCFGR1(id),
378				 DFSDM_CHCFGR1_SITP_MASK,
379				 DFSDM_CHCFGR1_SITP(ch->type));
380	if (ret < 0)
381		return ret;
382	ret = regmap_update_bits(regmap, DFSDM_CHCFGR1(id),
383				 DFSDM_CHCFGR1_SPICKSEL_MASK,
384				 DFSDM_CHCFGR1_SPICKSEL(ch->src));
385	if (ret < 0)
386		return ret;
387	return regmap_update_bits(regmap, DFSDM_CHCFGR1(id),
388				  DFSDM_CHCFGR1_CHINSEL_MASK,
389				  DFSDM_CHCFGR1_CHINSEL(ch->alt_si));
390}
391
392static int stm32_dfsdm_start_filter(struct stm32_dfsdm_adc *adc,
393				    unsigned int fl_id,
394				    struct iio_trigger *trig)
395{
396	struct stm32_dfsdm *dfsdm = adc->dfsdm;
397	int ret;
398
399	/* Enable filter */
400	ret = regmap_update_bits(dfsdm->regmap, DFSDM_CR1(fl_id),
401				 DFSDM_CR1_DFEN_MASK, DFSDM_CR1_DFEN(1));
402	if (ret < 0)
403		return ret;
404
405	/* Nothing more to do for injected (scan mode/triggered) conversions */
406	if (adc->nconv > 1 || trig)
407		return 0;
408
409	/* Software start (single or continuous) regular conversion */
410	return regmap_update_bits(dfsdm->regmap, DFSDM_CR1(fl_id),
411				  DFSDM_CR1_RSWSTART_MASK,
412				  DFSDM_CR1_RSWSTART(1));
413}
414
415static void stm32_dfsdm_stop_filter(struct stm32_dfsdm *dfsdm,
416				    unsigned int fl_id)
417{
418	/* Disable conversion */
419	regmap_update_bits(dfsdm->regmap, DFSDM_CR1(fl_id),
420			   DFSDM_CR1_DFEN_MASK, DFSDM_CR1_DFEN(0));
421}
422
423static int stm32_dfsdm_filter_set_trig(struct iio_dev *indio_dev,
424				       unsigned int fl_id,
425				       struct iio_trigger *trig)
426{
427	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
428	struct regmap *regmap = adc->dfsdm->regmap;
429	u32 jextsel = 0, jexten = STM32_DFSDM_JEXTEN_DISABLED;
430	int ret;
431
432	if (trig) {
433		ret = stm32_dfsdm_get_jextsel(indio_dev, trig);
434		if (ret < 0)
435			return ret;
436
437		/* set trigger source and polarity (default to rising edge) */
438		jextsel = ret;
439		jexten = STM32_DFSDM_JEXTEN_RISING_EDGE;
440	}
441
442	ret = regmap_update_bits(regmap, DFSDM_CR1(fl_id),
443				 DFSDM_CR1_JEXTSEL_MASK | DFSDM_CR1_JEXTEN_MASK,
444				 DFSDM_CR1_JEXTSEL(jextsel) |
445				 DFSDM_CR1_JEXTEN(jexten));
446	if (ret < 0)
447		return ret;
448
449	return 0;
450}
451
452static int stm32_dfsdm_channels_configure(struct iio_dev *indio_dev,
453					  unsigned int fl_id,
454					  struct iio_trigger *trig)
455{
456	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
457	struct regmap *regmap = adc->dfsdm->regmap;
458	struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[fl_id];
459	struct stm32_dfsdm_filter_osr *flo = &fl->flo[0];
460	const struct iio_chan_spec *chan;
461	unsigned int bit;
462	int ret;
463
464	fl->fast = 0;
465
466	/*
467	 * In continuous mode, use fast mode configuration,
468	 * if it provides a better resolution.
469	 */
470	if (adc->nconv == 1 && !trig && iio_buffer_enabled(indio_dev)) {
471		if (fl->flo[1].res >= fl->flo[0].res) {
472			fl->fast = 1;
473			flo = &fl->flo[1];
474		}
475	}
476
477	if (!flo->res)
478		return -EINVAL;
479
480	dev_dbg(&indio_dev->dev, "Samples actual resolution: %d bits",
481		min(flo->bits, (u32)DFSDM_DATA_RES - 1));
482
483	for_each_set_bit(bit, &adc->smask,
484			 sizeof(adc->smask) * BITS_PER_BYTE) {
485		chan = indio_dev->channels + bit;
486
487		ret = regmap_update_bits(regmap,
488					 DFSDM_CHCFGR2(chan->channel),
489					 DFSDM_CHCFGR2_DTRBS_MASK,
490					 DFSDM_CHCFGR2_DTRBS(flo->rshift));
491		if (ret)
492			return ret;
493	}
494
495	return 0;
496}
497
498static int stm32_dfsdm_filter_configure(struct iio_dev *indio_dev,
499					unsigned int fl_id,
500					struct iio_trigger *trig)
501{
502	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
503	struct regmap *regmap = adc->dfsdm->regmap;
504	struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[fl_id];
505	struct stm32_dfsdm_filter_osr *flo = &fl->flo[fl->fast];
506	u32 cr1;
507	const struct iio_chan_spec *chan;
508	unsigned int bit, jchg = 0;
509	int ret;
510
511	/* Average integrator oversampling */
512	ret = regmap_update_bits(regmap, DFSDM_FCR(fl_id), DFSDM_FCR_IOSR_MASK,
513				 DFSDM_FCR_IOSR(flo->iosr - 1));
514	if (ret)
515		return ret;
516
517	/* Filter order and Oversampling */
518	ret = regmap_update_bits(regmap, DFSDM_FCR(fl_id), DFSDM_FCR_FOSR_MASK,
519				 DFSDM_FCR_FOSR(flo->fosr - 1));
520	if (ret)
521		return ret;
522
523	ret = regmap_update_bits(regmap, DFSDM_FCR(fl_id), DFSDM_FCR_FORD_MASK,
524				 DFSDM_FCR_FORD(fl->ford));
525	if (ret)
526		return ret;
527
528	ret = stm32_dfsdm_filter_set_trig(indio_dev, fl_id, trig);
529	if (ret)
530		return ret;
531
532	ret = regmap_update_bits(regmap, DFSDM_CR1(fl_id),
533				 DFSDM_CR1_FAST_MASK,
534				 DFSDM_CR1_FAST(fl->fast));
535	if (ret)
536		return ret;
537
538	/*
539	 * DFSDM modes configuration W.R.T audio/iio type modes
540	 * ----------------------------------------------------------------
541	 * Modes         | regular |  regular     | injected | injected   |
542	 *               |         |  continuous  |          | + scan     |
543	 * --------------|---------|--------------|----------|------------|
544	 * single conv   |    x    |              |          |            |
545	 * (1 chan)      |         |              |          |            |
546	 * --------------|---------|--------------|----------|------------|
547	 * 1 Audio chan	 |         | sample freq  |          |            |
548	 *               |         | or sync_mode |          |            |
549	 * --------------|---------|--------------|----------|------------|
550	 * 1 IIO chan	 |         | sample freq  | trigger  |            |
551	 *               |         | or sync_mode |          |            |
552	 * --------------|---------|--------------|----------|------------|
553	 * 2+ IIO chans  |         |              |          | trigger or |
554	 *               |         |              |          | sync_mode  |
555	 * ----------------------------------------------------------------
556	 */
557	if (adc->nconv == 1 && !trig) {
558		bit = __ffs(adc->smask);
559		chan = indio_dev->channels + bit;
560
561		/* Use regular conversion for single channel without trigger */
562		cr1 = DFSDM_CR1_RCH(chan->channel);
563
564		/* Continuous conversions triggered by SPI clk in buffer mode */
565		if (iio_buffer_enabled(indio_dev))
566			cr1 |= DFSDM_CR1_RCONT(1);
567
568		cr1 |= DFSDM_CR1_RSYNC(fl->sync_mode);
569	} else {
570		/* Use injected conversion for multiple channels */
571		for_each_set_bit(bit, &adc->smask,
572				 sizeof(adc->smask) * BITS_PER_BYTE) {
573			chan = indio_dev->channels + bit;
574			jchg |= BIT(chan->channel);
575		}
576		ret = regmap_write(regmap, DFSDM_JCHGR(fl_id), jchg);
577		if (ret < 0)
578			return ret;
579
580		/* Use scan mode for multiple channels */
581		cr1 = DFSDM_CR1_JSCAN((adc->nconv > 1) ? 1 : 0);
582
583		/*
584		 * Continuous conversions not supported in injected mode,
585		 * either use:
586		 * - conversions in sync with filter 0
587		 * - triggered conversions
588		 */
589		if (!fl->sync_mode && !trig)
590			return -EINVAL;
591		cr1 |= DFSDM_CR1_JSYNC(fl->sync_mode);
592	}
593
594	return regmap_update_bits(regmap, DFSDM_CR1(fl_id), DFSDM_CR1_CFG_MASK,
595				  cr1);
596}
597
598static int stm32_dfsdm_channel_parse_of(struct stm32_dfsdm *dfsdm,
599					struct iio_dev *indio_dev,
600					struct iio_chan_spec *ch)
601{
602	struct stm32_dfsdm_channel *df_ch;
603	const char *of_str;
604	int chan_idx = ch->scan_index;
605	int ret, val;
606
607	ret = of_property_read_u32_index(indio_dev->dev.of_node,
608					 "st,adc-channels", chan_idx,
609					 &ch->channel);
610	if (ret < 0) {
611		dev_err(&indio_dev->dev,
612			" Error parsing 'st,adc-channels' for idx %d\n",
613			chan_idx);
614		return ret;
615	}
616	if (ch->channel >= dfsdm->num_chs) {
617		dev_err(&indio_dev->dev,
618			" Error bad channel number %d (max = %d)\n",
619			ch->channel, dfsdm->num_chs);
620		return -EINVAL;
621	}
622
623	ret = of_property_read_string_index(indio_dev->dev.of_node,
624					    "st,adc-channel-names", chan_idx,
625					    &ch->datasheet_name);
626	if (ret < 0) {
627		dev_err(&indio_dev->dev,
628			" Error parsing 'st,adc-channel-names' for idx %d\n",
629			chan_idx);
630		return ret;
631	}
632
633	df_ch =  &dfsdm->ch_list[ch->channel];
634	df_ch->id = ch->channel;
635
636	ret = of_property_read_string_index(indio_dev->dev.of_node,
637					    "st,adc-channel-types", chan_idx,
638					    &of_str);
639	if (!ret) {
640		val = stm32_dfsdm_str2val(of_str, stm32_dfsdm_chan_type);
641		if (val < 0)
642			return val;
643	} else {
644		val = 0;
645	}
646	df_ch->type = val;
647
648	ret = of_property_read_string_index(indio_dev->dev.of_node,
649					    "st,adc-channel-clk-src", chan_idx,
650					    &of_str);
651	if (!ret) {
652		val = stm32_dfsdm_str2val(of_str, stm32_dfsdm_chan_src);
653		if (val < 0)
654			return val;
655	} else {
656		val = 0;
657	}
658	df_ch->src = val;
659
660	ret = of_property_read_u32_index(indio_dev->dev.of_node,
661					 "st,adc-alt-channel", chan_idx,
662					 &df_ch->alt_si);
663	if (ret < 0)
664		df_ch->alt_si = 0;
665
666	return 0;
667}
668
669static ssize_t dfsdm_adc_audio_get_spiclk(struct iio_dev *indio_dev,
670					  uintptr_t priv,
671					  const struct iio_chan_spec *chan,
672					  char *buf)
673{
674	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
675
676	return snprintf(buf, PAGE_SIZE, "%d\n", adc->spi_freq);
677}
678
679static int dfsdm_adc_set_samp_freq(struct iio_dev *indio_dev,
680				   unsigned int sample_freq,
681				   unsigned int spi_freq)
682{
683	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
684	unsigned int oversamp;
685	int ret;
686
687	oversamp = DIV_ROUND_CLOSEST(spi_freq, sample_freq);
688	if (spi_freq % sample_freq)
689		dev_dbg(&indio_dev->dev,
690			"Rate not accurate. requested (%u), actual (%u)\n",
691			sample_freq, spi_freq / oversamp);
692
693	ret = stm32_dfsdm_compute_all_osrs(indio_dev, oversamp);
694	if (ret < 0)
695		return ret;
696
697	adc->sample_freq = spi_freq / oversamp;
698	adc->oversamp = oversamp;
699
700	return 0;
701}
702
703static ssize_t dfsdm_adc_audio_set_spiclk(struct iio_dev *indio_dev,
704					  uintptr_t priv,
705					  const struct iio_chan_spec *chan,
706					  const char *buf, size_t len)
707{
708	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
709	struct stm32_dfsdm_channel *ch = &adc->dfsdm->ch_list[chan->channel];
710	unsigned int sample_freq = adc->sample_freq;
711	unsigned int spi_freq;
712	int ret;
713
714	dev_err(&indio_dev->dev, "enter %s\n", __func__);
715	/* If DFSDM is master on SPI, SPI freq can not be updated */
716	if (ch->src != DFSDM_CHANNEL_SPI_CLOCK_EXTERNAL)
717		return -EPERM;
718
719	ret = kstrtoint(buf, 0, &spi_freq);
720	if (ret)
721		return ret;
722
723	if (!spi_freq)
724		return -EINVAL;
725
726	if (sample_freq) {
727		ret = dfsdm_adc_set_samp_freq(indio_dev, sample_freq, spi_freq);
728		if (ret < 0)
729			return ret;
730	}
731	adc->spi_freq = spi_freq;
732
733	return len;
734}
735
736static int stm32_dfsdm_start_conv(struct iio_dev *indio_dev,
737				  struct iio_trigger *trig)
738{
739	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
740	struct regmap *regmap = adc->dfsdm->regmap;
741	int ret;
742
743	ret = stm32_dfsdm_channels_configure(indio_dev, adc->fl_id, trig);
744	if (ret < 0)
745		return ret;
746
747	ret = stm32_dfsdm_start_channel(indio_dev);
748	if (ret < 0)
749		return ret;
750
751	ret = stm32_dfsdm_filter_configure(indio_dev, adc->fl_id, trig);
752	if (ret < 0)
753		goto stop_channels;
754
755	ret = stm32_dfsdm_start_filter(adc, adc->fl_id, trig);
756	if (ret < 0)
757		goto filter_unconfigure;
758
759	return 0;
760
761filter_unconfigure:
762	regmap_update_bits(regmap, DFSDM_CR1(adc->fl_id),
763			   DFSDM_CR1_CFG_MASK, 0);
764stop_channels:
765	stm32_dfsdm_stop_channel(indio_dev);
766
767	return ret;
768}
769
770static void stm32_dfsdm_stop_conv(struct iio_dev *indio_dev)
771{
772	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
773	struct regmap *regmap = adc->dfsdm->regmap;
774
775	stm32_dfsdm_stop_filter(adc->dfsdm, adc->fl_id);
776
777	regmap_update_bits(regmap, DFSDM_CR1(adc->fl_id),
778			   DFSDM_CR1_CFG_MASK, 0);
779
780	stm32_dfsdm_stop_channel(indio_dev);
781}
782
783static int stm32_dfsdm_set_watermark(struct iio_dev *indio_dev,
784				     unsigned int val)
785{
786	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
787	unsigned int watermark = DFSDM_DMA_BUFFER_SIZE / 2;
788	unsigned int rx_buf_sz = DFSDM_DMA_BUFFER_SIZE;
789
790	/*
791	 * DMA cyclic transfers are used, buffer is split into two periods.
792	 * There should be :
793	 * - always one buffer (period) DMA is working on
794	 * - one buffer (period) driver pushed to ASoC side.
795	 */
796	watermark = min(watermark, val * (unsigned int)(sizeof(u32)));
797	adc->buf_sz = min(rx_buf_sz, watermark * 2 * adc->nconv);
798
799	return 0;
800}
801
802static unsigned int stm32_dfsdm_adc_dma_residue(struct stm32_dfsdm_adc *adc)
803{
804	struct dma_tx_state state;
805	enum dma_status status;
806
807	status = dmaengine_tx_status(adc->dma_chan,
808				     adc->dma_chan->cookie,
809				     &state);
810	if (status == DMA_IN_PROGRESS) {
811		/* Residue is size in bytes from end of buffer */
812		unsigned int i = adc->buf_sz - state.residue;
813		unsigned int size;
814
815		/* Return available bytes */
816		if (i >= adc->bufi)
817			size = i - adc->bufi;
818		else
819			size = adc->buf_sz + i - adc->bufi;
820
821		return size;
822	}
823
824	return 0;
825}
826
827static inline void stm32_dfsdm_process_data(struct stm32_dfsdm_adc *adc,
828					    s32 *buffer)
829{
830	struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[adc->fl_id];
831	struct stm32_dfsdm_filter_osr *flo = &fl->flo[fl->fast];
832	unsigned int i = adc->nconv;
833	s32 *ptr = buffer;
834
835	while (i--) {
836		/* Mask 8 LSB that contains the channel ID */
837		*ptr &= 0xFFFFFF00;
838		/* Convert 2^(n-1) sample to 2^(n-1)-1 to avoid wrap-around */
839		if (*ptr > flo->max)
840			*ptr -= 1;
841		/*
842		 * Samples from filter are retrieved with 23 bits resolution
843		 * or less. Shift left to align MSB on 24 bits.
844		 */
845		*ptr <<= flo->lshift;
846
847		ptr++;
848	}
849}
850
851static void stm32_dfsdm_dma_buffer_done(void *data)
852{
853	struct iio_dev *indio_dev = data;
854	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
855	int available = stm32_dfsdm_adc_dma_residue(adc);
856	size_t old_pos;
857
858	/*
859	 * FIXME: In Kernel interface does not support cyclic DMA buffer,and
860	 * offers only an interface to push data samples per samples.
861	 * For this reason IIO buffer interface is not used and interface is
862	 * bypassed using a private callback registered by ASoC.
863	 * This should be a temporary solution waiting a cyclic DMA engine
864	 * support in IIO.
865	 */
866
867	dev_dbg(&indio_dev->dev, "pos = %d, available = %d\n",
868		adc->bufi, available);
869	old_pos = adc->bufi;
870
871	while (available >= indio_dev->scan_bytes) {
872		s32 *buffer = (s32 *)&adc->rx_buf[adc->bufi];
873
874		stm32_dfsdm_process_data(adc, buffer);
875
876		available -= indio_dev->scan_bytes;
877		adc->bufi += indio_dev->scan_bytes;
878		if (adc->bufi >= adc->buf_sz) {
879			if (adc->cb)
880				adc->cb(&adc->rx_buf[old_pos],
881					 adc->buf_sz - old_pos, adc->cb_priv);
882			adc->bufi = 0;
883			old_pos = 0;
884		}
885		/*
886		 * In DMA mode the trigger services of IIO are not used
887		 * (e.g. no call to iio_trigger_poll).
888		 * Calling irq handler associated to the hardware trigger is not
889		 * relevant as the conversions have already been done. Data
890		 * transfers are performed directly in DMA callback instead.
891		 * This implementation avoids to call trigger irq handler that
892		 * may sleep, in an atomic context (DMA irq handler context).
893		 */
894		if (adc->dev_data->type == DFSDM_IIO)
895			iio_push_to_buffers(indio_dev, buffer);
896	}
897	if (adc->cb)
898		adc->cb(&adc->rx_buf[old_pos], adc->bufi - old_pos,
899			adc->cb_priv);
900}
901
902static int stm32_dfsdm_adc_dma_start(struct iio_dev *indio_dev)
903{
904	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
905	/*
906	 * The DFSDM supports half-word transfers. However, for 16 bits record,
907	 * 4 bytes buswidth is kept, to avoid losing samples LSBs when left
908	 * shift is required.
909	 */
910	struct dma_slave_config config = {
911		.src_addr = (dma_addr_t)adc->dfsdm->phys_base,
912		.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES,
913	};
914	struct dma_async_tx_descriptor *desc;
915	dma_cookie_t cookie;
916	int ret;
917
918	if (!adc->dma_chan)
919		return -EINVAL;
920
921	dev_dbg(&indio_dev->dev, "size=%d watermark=%d\n",
922		adc->buf_sz, adc->buf_sz / 2);
923
924	if (adc->nconv == 1 && !indio_dev->trig)
925		config.src_addr += DFSDM_RDATAR(adc->fl_id);
926	else
927		config.src_addr += DFSDM_JDATAR(adc->fl_id);
928	ret = dmaengine_slave_config(adc->dma_chan, &config);
929	if (ret)
930		return ret;
931
932	/* Prepare a DMA cyclic transaction */
933	desc = dmaengine_prep_dma_cyclic(adc->dma_chan,
934					 adc->dma_buf,
935					 adc->buf_sz, adc->buf_sz / 2,
936					 DMA_DEV_TO_MEM,
937					 DMA_PREP_INTERRUPT);
938	if (!desc)
939		return -EBUSY;
940
941	desc->callback = stm32_dfsdm_dma_buffer_done;
942	desc->callback_param = indio_dev;
943
944	cookie = dmaengine_submit(desc);
945	ret = dma_submit_error(cookie);
946	if (ret)
947		goto err_stop_dma;
948
949	/* Issue pending DMA requests */
950	dma_async_issue_pending(adc->dma_chan);
951
952	if (adc->nconv == 1 && !indio_dev->trig) {
953		/* Enable regular DMA transfer*/
954		ret = regmap_update_bits(adc->dfsdm->regmap,
955					 DFSDM_CR1(adc->fl_id),
956					 DFSDM_CR1_RDMAEN_MASK,
957					 DFSDM_CR1_RDMAEN_MASK);
958	} else {
959		/* Enable injected DMA transfer*/
960		ret = regmap_update_bits(adc->dfsdm->regmap,
961					 DFSDM_CR1(adc->fl_id),
962					 DFSDM_CR1_JDMAEN_MASK,
963					 DFSDM_CR1_JDMAEN_MASK);
964	}
965
966	if (ret < 0)
967		goto err_stop_dma;
968
969	return 0;
970
971err_stop_dma:
972	dmaengine_terminate_all(adc->dma_chan);
973
974	return ret;
975}
976
977static void stm32_dfsdm_adc_dma_stop(struct iio_dev *indio_dev)
978{
979	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
980
981	if (!adc->dma_chan)
982		return;
983
984	regmap_update_bits(adc->dfsdm->regmap, DFSDM_CR1(adc->fl_id),
985			   DFSDM_CR1_RDMAEN_MASK | DFSDM_CR1_JDMAEN_MASK, 0);
986	dmaengine_terminate_all(adc->dma_chan);
987}
988
989static int stm32_dfsdm_update_scan_mode(struct iio_dev *indio_dev,
990					const unsigned long *scan_mask)
991{
992	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
993
994	adc->nconv = bitmap_weight(scan_mask, indio_dev->masklength);
995	adc->smask = *scan_mask;
996
997	dev_dbg(&indio_dev->dev, "nconv=%d mask=%lx\n", adc->nconv, *scan_mask);
998
999	return 0;
1000}
1001
1002static int stm32_dfsdm_postenable(struct iio_dev *indio_dev)
1003{
1004	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1005	int ret;
1006
1007	/* Reset adc buffer index */
1008	adc->bufi = 0;
1009
1010	if (adc->hwc) {
1011		ret = iio_hw_consumer_enable(adc->hwc);
1012		if (ret < 0)
1013			return ret;
1014	}
1015
1016	ret = stm32_dfsdm_start_dfsdm(adc->dfsdm);
1017	if (ret < 0)
1018		goto err_stop_hwc;
1019
1020	ret = stm32_dfsdm_adc_dma_start(indio_dev);
1021	if (ret) {
1022		dev_err(&indio_dev->dev, "Can't start DMA\n");
1023		goto stop_dfsdm;
1024	}
1025
1026	ret = stm32_dfsdm_start_conv(indio_dev, indio_dev->trig);
1027	if (ret) {
1028		dev_err(&indio_dev->dev, "Can't start conversion\n");
1029		goto err_stop_dma;
1030	}
1031
1032	return 0;
1033
1034err_stop_dma:
1035	stm32_dfsdm_adc_dma_stop(indio_dev);
1036stop_dfsdm:
1037	stm32_dfsdm_stop_dfsdm(adc->dfsdm);
1038err_stop_hwc:
1039	if (adc->hwc)
1040		iio_hw_consumer_disable(adc->hwc);
1041
1042	return ret;
1043}
1044
1045static int stm32_dfsdm_predisable(struct iio_dev *indio_dev)
1046{
1047	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1048
1049	stm32_dfsdm_stop_conv(indio_dev);
1050
1051	stm32_dfsdm_adc_dma_stop(indio_dev);
1052
1053	stm32_dfsdm_stop_dfsdm(adc->dfsdm);
1054
1055	if (adc->hwc)
1056		iio_hw_consumer_disable(adc->hwc);
1057
1058	return 0;
1059}
1060
1061static const struct iio_buffer_setup_ops stm32_dfsdm_buffer_setup_ops = {
1062	.postenable = &stm32_dfsdm_postenable,
1063	.predisable = &stm32_dfsdm_predisable,
1064};
1065
1066/**
1067 * stm32_dfsdm_get_buff_cb() - register a callback that will be called when
1068 *                             DMA transfer period is achieved.
1069 *
1070 * @iio_dev: Handle to IIO device.
1071 * @cb: Pointer to callback function:
1072 *      - data: pointer to data buffer
1073 *      - size: size in byte of the data buffer
1074 *      - private: pointer to consumer private structure.
1075 * @private: Pointer to consumer private structure.
1076 */
1077int stm32_dfsdm_get_buff_cb(struct iio_dev *iio_dev,
1078			    int (*cb)(const void *data, size_t size,
1079				      void *private),
1080			    void *private)
1081{
1082	struct stm32_dfsdm_adc *adc;
1083
1084	if (!iio_dev)
1085		return -EINVAL;
1086	adc = iio_priv(iio_dev);
1087
1088	adc->cb = cb;
1089	adc->cb_priv = private;
1090
1091	return 0;
1092}
1093EXPORT_SYMBOL_GPL(stm32_dfsdm_get_buff_cb);
1094
1095/**
1096 * stm32_dfsdm_release_buff_cb - unregister buffer callback
1097 *
1098 * @iio_dev: Handle to IIO device.
1099 */
1100int stm32_dfsdm_release_buff_cb(struct iio_dev *iio_dev)
1101{
1102	struct stm32_dfsdm_adc *adc;
1103
1104	if (!iio_dev)
1105		return -EINVAL;
1106	adc = iio_priv(iio_dev);
1107
1108	adc->cb = NULL;
1109	adc->cb_priv = NULL;
1110
1111	return 0;
1112}
1113EXPORT_SYMBOL_GPL(stm32_dfsdm_release_buff_cb);
1114
1115static int stm32_dfsdm_single_conv(struct iio_dev *indio_dev,
1116				   const struct iio_chan_spec *chan, int *res)
1117{
1118	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1119	long timeout;
1120	int ret;
1121
1122	reinit_completion(&adc->completion);
1123
1124	adc->buffer = res;
1125
1126	ret = stm32_dfsdm_start_dfsdm(adc->dfsdm);
1127	if (ret < 0)
1128		return ret;
1129
1130	ret = regmap_update_bits(adc->dfsdm->regmap, DFSDM_CR2(adc->fl_id),
1131				 DFSDM_CR2_REOCIE_MASK, DFSDM_CR2_REOCIE(1));
1132	if (ret < 0)
1133		goto stop_dfsdm;
1134
1135	adc->nconv = 1;
1136	adc->smask = BIT(chan->scan_index);
1137	ret = stm32_dfsdm_start_conv(indio_dev, NULL);
1138	if (ret < 0) {
1139		regmap_update_bits(adc->dfsdm->regmap, DFSDM_CR2(adc->fl_id),
1140				   DFSDM_CR2_REOCIE_MASK, DFSDM_CR2_REOCIE(0));
1141		goto stop_dfsdm;
1142	}
1143
1144	timeout = wait_for_completion_interruptible_timeout(&adc->completion,
1145							    DFSDM_TIMEOUT);
1146
1147	/* Mask IRQ for regular conversion achievement*/
1148	regmap_update_bits(adc->dfsdm->regmap, DFSDM_CR2(adc->fl_id),
1149			   DFSDM_CR2_REOCIE_MASK, DFSDM_CR2_REOCIE(0));
1150
1151	if (timeout == 0)
1152		ret = -ETIMEDOUT;
1153	else if (timeout < 0)
1154		ret = timeout;
1155	else
1156		ret = IIO_VAL_INT;
1157
1158	stm32_dfsdm_stop_conv(indio_dev);
1159
1160	stm32_dfsdm_process_data(adc, res);
1161
1162stop_dfsdm:
1163	stm32_dfsdm_stop_dfsdm(adc->dfsdm);
1164
1165	return ret;
1166}
1167
1168static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
1169				 struct iio_chan_spec const *chan,
1170				 int val, int val2, long mask)
1171{
1172	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1173	struct stm32_dfsdm_channel *ch = &adc->dfsdm->ch_list[chan->channel];
1174	unsigned int spi_freq;
1175	int ret = -EINVAL;
1176
1177	switch (ch->src) {
1178	case DFSDM_CHANNEL_SPI_CLOCK_INTERNAL:
1179		spi_freq = adc->dfsdm->spi_master_freq;
1180		break;
1181	case DFSDM_CHANNEL_SPI_CLOCK_INTERNAL_DIV2_FALLING:
1182	case DFSDM_CHANNEL_SPI_CLOCK_INTERNAL_DIV2_RISING:
1183		spi_freq = adc->dfsdm->spi_master_freq / 2;
1184		break;
1185	default:
1186		spi_freq = adc->spi_freq;
1187	}
1188
1189	switch (mask) {
1190	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
1191		ret = iio_device_claim_direct_mode(indio_dev);
1192		if (ret)
1193			return ret;
1194
1195		ret = stm32_dfsdm_compute_all_osrs(indio_dev, val);
1196		if (!ret) {
1197			dev_dbg(&indio_dev->dev,
1198				"Sampling rate changed from (%u) to (%u)\n",
1199				adc->sample_freq, spi_freq / val);
1200			adc->oversamp = val;
1201			adc->sample_freq = spi_freq / val;
1202		}
1203		iio_device_release_direct_mode(indio_dev);
1204		return ret;
1205
1206	case IIO_CHAN_INFO_SAMP_FREQ:
1207		if (!val)
1208			return -EINVAL;
1209
1210		ret = iio_device_claim_direct_mode(indio_dev);
1211		if (ret)
1212			return ret;
1213
1214		ret = dfsdm_adc_set_samp_freq(indio_dev, val, spi_freq);
1215		iio_device_release_direct_mode(indio_dev);
1216		return ret;
1217	}
1218
1219	return -EINVAL;
1220}
1221
1222static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
1223				struct iio_chan_spec const *chan, int *val,
1224				int *val2, long mask)
1225{
1226	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1227	int ret;
1228
1229	switch (mask) {
1230	case IIO_CHAN_INFO_RAW:
1231		ret = iio_device_claim_direct_mode(indio_dev);
1232		if (ret)
1233			return ret;
1234		ret = iio_hw_consumer_enable(adc->hwc);
1235		if (ret < 0) {
1236			dev_err(&indio_dev->dev,
1237				"%s: IIO enable failed (channel %d)\n",
1238				__func__, chan->channel);
1239			iio_device_release_direct_mode(indio_dev);
1240			return ret;
1241		}
1242		ret = stm32_dfsdm_single_conv(indio_dev, chan, val);
1243		iio_hw_consumer_disable(adc->hwc);
1244		if (ret < 0) {
1245			dev_err(&indio_dev->dev,
1246				"%s: Conversion failed (channel %d)\n",
1247				__func__, chan->channel);
1248			iio_device_release_direct_mode(indio_dev);
1249			return ret;
1250		}
1251		iio_device_release_direct_mode(indio_dev);
1252		return IIO_VAL_INT;
1253
1254	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
1255		*val = adc->oversamp;
1256
1257		return IIO_VAL_INT;
1258
1259	case IIO_CHAN_INFO_SAMP_FREQ:
1260		*val = adc->sample_freq;
1261
1262		return IIO_VAL_INT;
1263	}
1264
1265	return -EINVAL;
1266}
1267
1268static int stm32_dfsdm_validate_trigger(struct iio_dev *indio_dev,
1269					struct iio_trigger *trig)
1270{
1271	return stm32_dfsdm_get_jextsel(indio_dev, trig) < 0 ? -EINVAL : 0;
1272}
1273
1274static const struct iio_info stm32_dfsdm_info_audio = {
1275	.hwfifo_set_watermark = stm32_dfsdm_set_watermark,
1276	.read_raw = stm32_dfsdm_read_raw,
1277	.write_raw = stm32_dfsdm_write_raw,
1278	.update_scan_mode = stm32_dfsdm_update_scan_mode,
1279};
1280
1281static const struct iio_info stm32_dfsdm_info_adc = {
1282	.hwfifo_set_watermark = stm32_dfsdm_set_watermark,
1283	.read_raw = stm32_dfsdm_read_raw,
1284	.write_raw = stm32_dfsdm_write_raw,
1285	.update_scan_mode = stm32_dfsdm_update_scan_mode,
1286	.validate_trigger = stm32_dfsdm_validate_trigger,
1287};
1288
1289static irqreturn_t stm32_dfsdm_irq(int irq, void *arg)
1290{
1291	struct iio_dev *indio_dev = arg;
1292	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1293	struct regmap *regmap = adc->dfsdm->regmap;
1294	unsigned int status, int_en;
1295
1296	regmap_read(regmap, DFSDM_ISR(adc->fl_id), &status);
1297	regmap_read(regmap, DFSDM_CR2(adc->fl_id), &int_en);
1298
1299	if (status & DFSDM_ISR_REOCF_MASK) {
1300		/* Read the data register clean the IRQ status */
1301		regmap_read(regmap, DFSDM_RDATAR(adc->fl_id), adc->buffer);
1302		complete(&adc->completion);
1303	}
1304
1305	if (status & DFSDM_ISR_ROVRF_MASK) {
1306		if (int_en & DFSDM_CR2_ROVRIE_MASK)
1307			dev_warn(&indio_dev->dev, "Overrun detected\n");
1308		regmap_update_bits(regmap, DFSDM_ICR(adc->fl_id),
1309				   DFSDM_ICR_CLRROVRF_MASK,
1310				   DFSDM_ICR_CLRROVRF_MASK);
1311	}
1312
1313	return IRQ_HANDLED;
1314}
1315
1316/*
1317 * Define external info for SPI Frequency and audio sampling rate that can be
1318 * configured by ASoC driver through consumer.h API
1319 */
1320static const struct iio_chan_spec_ext_info dfsdm_adc_audio_ext_info[] = {
1321	/* spi_clk_freq : clock freq on SPI/manchester bus used by channel */
1322	{
1323		.name = "spi_clk_freq",
1324		.shared = IIO_SHARED_BY_TYPE,
1325		.read = dfsdm_adc_audio_get_spiclk,
1326		.write = dfsdm_adc_audio_set_spiclk,
1327	},
1328	{},
1329};
1330
1331static void stm32_dfsdm_dma_release(struct iio_dev *indio_dev)
1332{
1333	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1334
1335	if (adc->dma_chan) {
1336		dma_free_coherent(adc->dma_chan->device->dev,
1337				  DFSDM_DMA_BUFFER_SIZE,
1338				  adc->rx_buf, adc->dma_buf);
1339		dma_release_channel(adc->dma_chan);
1340	}
1341}
1342
1343static int stm32_dfsdm_dma_request(struct device *dev,
1344				   struct iio_dev *indio_dev)
1345{
1346	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1347
1348	adc->dma_chan = dma_request_chan(dev, "rx");
1349	if (IS_ERR(adc->dma_chan)) {
1350		int ret = PTR_ERR(adc->dma_chan);
1351
1352		adc->dma_chan = NULL;
1353		return ret;
1354	}
1355
1356	adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
1357					 DFSDM_DMA_BUFFER_SIZE,
1358					 &adc->dma_buf, GFP_KERNEL);
1359	if (!adc->rx_buf) {
1360		dma_release_channel(adc->dma_chan);
1361		return -ENOMEM;
1362	}
1363
1364	indio_dev->modes |= INDIO_BUFFER_SOFTWARE;
1365	indio_dev->setup_ops = &stm32_dfsdm_buffer_setup_ops;
1366
1367	return 0;
1368}
1369
1370static int stm32_dfsdm_adc_chan_init_one(struct iio_dev *indio_dev,
1371					 struct iio_chan_spec *ch)
1372{
1373	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1374	int ret;
1375
1376	ret = stm32_dfsdm_channel_parse_of(adc->dfsdm, indio_dev, ch);
1377	if (ret < 0)
1378		return ret;
1379
1380	ch->type = IIO_VOLTAGE;
1381	ch->indexed = 1;
1382
1383	/*
1384	 * IIO_CHAN_INFO_RAW: used to compute regular conversion
1385	 * IIO_CHAN_INFO_OVERSAMPLING_RATIO: used to set oversampling
1386	 */
1387	ch->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
1388	ch->info_mask_shared_by_all = BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO) |
1389					BIT(IIO_CHAN_INFO_SAMP_FREQ);
1390
1391	if (adc->dev_data->type == DFSDM_AUDIO) {
1392		ch->ext_info = dfsdm_adc_audio_ext_info;
1393	} else {
1394		ch->scan_type.shift = 8;
1395	}
1396	ch->scan_type.sign = 's';
1397	ch->scan_type.realbits = 24;
1398	ch->scan_type.storagebits = 32;
1399
1400	return stm32_dfsdm_chan_configure(adc->dfsdm,
1401					  &adc->dfsdm->ch_list[ch->channel]);
1402}
1403
1404static int stm32_dfsdm_audio_init(struct device *dev, struct iio_dev *indio_dev)
1405{
1406	struct iio_chan_spec *ch;
1407	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1408	struct stm32_dfsdm_channel *d_ch;
1409	int ret;
1410
1411	ch = devm_kzalloc(&indio_dev->dev, sizeof(*ch), GFP_KERNEL);
1412	if (!ch)
1413		return -ENOMEM;
1414
1415	ch->scan_index = 0;
1416
1417	ret = stm32_dfsdm_adc_chan_init_one(indio_dev, ch);
1418	if (ret < 0) {
1419		dev_err(&indio_dev->dev, "Channels init failed\n");
1420		return ret;
1421	}
1422	ch->info_mask_separate = BIT(IIO_CHAN_INFO_SAMP_FREQ);
1423
1424	d_ch = &adc->dfsdm->ch_list[ch->channel];
1425	if (d_ch->src != DFSDM_CHANNEL_SPI_CLOCK_EXTERNAL)
1426		adc->spi_freq = adc->dfsdm->spi_master_freq;
1427
1428	indio_dev->num_channels = 1;
1429	indio_dev->channels = ch;
1430
1431	return stm32_dfsdm_dma_request(dev, indio_dev);
1432}
1433
1434static int stm32_dfsdm_adc_init(struct device *dev, struct iio_dev *indio_dev)
1435{
1436	struct iio_chan_spec *ch;
1437	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1438	int num_ch;
1439	int ret, chan_idx;
1440
1441	adc->oversamp = DFSDM_DEFAULT_OVERSAMPLING;
1442	ret = stm32_dfsdm_compute_all_osrs(indio_dev, adc->oversamp);
1443	if (ret < 0)
1444		return ret;
1445
1446	num_ch = of_property_count_u32_elems(indio_dev->dev.of_node,
1447					     "st,adc-channels");
1448	if (num_ch < 0 || num_ch > adc->dfsdm->num_chs) {
1449		dev_err(&indio_dev->dev, "Bad st,adc-channels\n");
1450		return num_ch < 0 ? num_ch : -EINVAL;
1451	}
1452
1453	/* Bind to SD modulator IIO device */
1454	adc->hwc = devm_iio_hw_consumer_alloc(&indio_dev->dev);
1455	if (IS_ERR(adc->hwc))
1456		return -EPROBE_DEFER;
1457
1458	ch = devm_kcalloc(&indio_dev->dev, num_ch, sizeof(*ch),
1459			  GFP_KERNEL);
1460	if (!ch)
1461		return -ENOMEM;
1462
1463	for (chan_idx = 0; chan_idx < num_ch; chan_idx++) {
1464		ch[chan_idx].scan_index = chan_idx;
1465		ret = stm32_dfsdm_adc_chan_init_one(indio_dev, &ch[chan_idx]);
1466		if (ret < 0) {
1467			dev_err(&indio_dev->dev, "Channels init failed\n");
1468			return ret;
1469		}
1470	}
1471
1472	indio_dev->num_channels = num_ch;
1473	indio_dev->channels = ch;
1474
1475	init_completion(&adc->completion);
1476
1477	/* Optionally request DMA */
1478	ret = stm32_dfsdm_dma_request(dev, indio_dev);
1479	if (ret) {
1480		if (ret != -ENODEV)
1481			return dev_err_probe(dev, ret,
1482					     "DMA channel request failed with\n");
1483
1484		dev_dbg(dev, "No DMA support\n");
1485		return 0;
1486	}
1487
1488	ret = iio_triggered_buffer_setup(indio_dev,
1489					 &iio_pollfunc_store_time, NULL,
1490					 &stm32_dfsdm_buffer_setup_ops);
1491	if (ret) {
1492		stm32_dfsdm_dma_release(indio_dev);
1493		dev_err(&indio_dev->dev, "buffer setup failed\n");
1494		return ret;
1495	}
1496
1497	/* lptimer/timer hardware triggers */
1498	indio_dev->modes |= INDIO_HARDWARE_TRIGGERED;
1499
1500	return 0;
1501}
1502
1503static const struct stm32_dfsdm_dev_data stm32h7_dfsdm_adc_data = {
1504	.type = DFSDM_IIO,
1505	.init = stm32_dfsdm_adc_init,
1506};
1507
1508static const struct stm32_dfsdm_dev_data stm32h7_dfsdm_audio_data = {
1509	.type = DFSDM_AUDIO,
1510	.init = stm32_dfsdm_audio_init,
1511};
1512
1513static const struct of_device_id stm32_dfsdm_adc_match[] = {
1514	{
1515		.compatible = "st,stm32-dfsdm-adc",
1516		.data = &stm32h7_dfsdm_adc_data,
1517	},
1518	{
1519		.compatible = "st,stm32-dfsdm-dmic",
1520		.data = &stm32h7_dfsdm_audio_data,
1521	},
1522	{}
1523};
1524MODULE_DEVICE_TABLE(of, stm32_dfsdm_adc_match);
1525
1526static int stm32_dfsdm_adc_probe(struct platform_device *pdev)
1527{
1528	struct device *dev = &pdev->dev;
1529	struct stm32_dfsdm_adc *adc;
1530	struct device_node *np = dev->of_node;
1531	const struct stm32_dfsdm_dev_data *dev_data;
1532	struct iio_dev *iio;
1533	char *name;
1534	int ret, irq, val;
1535
1536	dev_data = of_device_get_match_data(dev);
1537	iio = devm_iio_device_alloc(dev, sizeof(*adc));
1538	if (!iio) {
1539		dev_err(dev, "%s: Failed to allocate IIO\n", __func__);
1540		return -ENOMEM;
1541	}
1542
1543	adc = iio_priv(iio);
1544	adc->dfsdm = dev_get_drvdata(dev->parent);
1545
1546	iio->dev.of_node = np;
1547	iio->modes = INDIO_DIRECT_MODE;
1548
1549	platform_set_drvdata(pdev, iio);
1550
1551	ret = of_property_read_u32(dev->of_node, "reg", &adc->fl_id);
1552	if (ret != 0 || adc->fl_id >= adc->dfsdm->num_fls) {
1553		dev_err(dev, "Missing or bad reg property\n");
1554		return -EINVAL;
1555	}
1556
1557	name = devm_kzalloc(dev, sizeof("dfsdm-adc0"), GFP_KERNEL);
1558	if (!name)
1559		return -ENOMEM;
1560	if (dev_data->type == DFSDM_AUDIO) {
1561		iio->info = &stm32_dfsdm_info_audio;
1562		snprintf(name, sizeof("dfsdm-pdm0"), "dfsdm-pdm%d", adc->fl_id);
1563	} else {
1564		iio->info = &stm32_dfsdm_info_adc;
1565		snprintf(name, sizeof("dfsdm-adc0"), "dfsdm-adc%d", adc->fl_id);
1566	}
1567	iio->name = name;
1568
1569	/*
1570	 * In a first step IRQs generated for channels are not treated.
1571	 * So IRQ associated to filter instance 0 is dedicated to the Filter 0.
1572	 */
1573	irq = platform_get_irq(pdev, 0);
1574	if (irq < 0)
1575		return irq;
1576
1577	ret = devm_request_irq(dev, irq, stm32_dfsdm_irq,
1578			       0, pdev->name, iio);
1579	if (ret < 0) {
1580		dev_err(dev, "Failed to request IRQ\n");
1581		return ret;
1582	}
1583
1584	ret = of_property_read_u32(dev->of_node, "st,filter-order", &val);
1585	if (ret < 0) {
1586		dev_err(dev, "Failed to set filter order\n");
1587		return ret;
1588	}
1589
1590	adc->dfsdm->fl_list[adc->fl_id].ford = val;
1591
1592	ret = of_property_read_u32(dev->of_node, "st,filter0-sync", &val);
1593	if (!ret)
1594		adc->dfsdm->fl_list[adc->fl_id].sync_mode = val;
1595
1596	adc->dev_data = dev_data;
1597	ret = dev_data->init(dev, iio);
1598	if (ret < 0)
1599		return ret;
1600
1601	ret = iio_device_register(iio);
1602	if (ret < 0)
1603		goto err_cleanup;
1604
1605	if (dev_data->type == DFSDM_AUDIO) {
1606		ret = of_platform_populate(np, NULL, NULL, dev);
1607		if (ret < 0) {
1608			dev_err(dev, "Failed to find an audio DAI\n");
1609			goto err_unregister;
1610		}
1611	}
1612
1613	return 0;
1614
1615err_unregister:
1616	iio_device_unregister(iio);
1617err_cleanup:
1618	stm32_dfsdm_dma_release(iio);
1619
1620	return ret;
1621}
1622
1623static void stm32_dfsdm_adc_remove(struct platform_device *pdev)
1624{
1625	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
1626	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1627
1628	if (adc->dev_data->type == DFSDM_AUDIO)
1629		of_platform_depopulate(&pdev->dev);
1630	iio_device_unregister(indio_dev);
1631	stm32_dfsdm_dma_release(indio_dev);
1632}
1633
1634static int stm32_dfsdm_adc_suspend(struct device *dev)
1635{
1636	struct iio_dev *indio_dev = dev_get_drvdata(dev);
1637
1638	if (iio_buffer_enabled(indio_dev))
1639		stm32_dfsdm_predisable(indio_dev);
1640
1641	return 0;
1642}
1643
1644static int stm32_dfsdm_adc_resume(struct device *dev)
1645{
1646	struct iio_dev *indio_dev = dev_get_drvdata(dev);
1647	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1648	const struct iio_chan_spec *chan;
1649	struct stm32_dfsdm_channel *ch;
1650	int i, ret;
1651
1652	/* restore channels configuration */
1653	for (i = 0; i < indio_dev->num_channels; i++) {
1654		chan = indio_dev->channels + i;
1655		ch = &adc->dfsdm->ch_list[chan->channel];
1656		ret = stm32_dfsdm_chan_configure(adc->dfsdm, ch);
1657		if (ret)
1658			return ret;
1659	}
1660
1661	if (iio_buffer_enabled(indio_dev))
1662		stm32_dfsdm_postenable(indio_dev);
1663
1664	return 0;
1665}
1666
1667static DEFINE_SIMPLE_DEV_PM_OPS(stm32_dfsdm_adc_pm_ops,
1668				stm32_dfsdm_adc_suspend,
1669				stm32_dfsdm_adc_resume);
1670
1671static struct platform_driver stm32_dfsdm_adc_driver = {
1672	.driver = {
1673		.name = "stm32-dfsdm-adc",
1674		.of_match_table = stm32_dfsdm_adc_match,
1675		.pm = pm_sleep_ptr(&stm32_dfsdm_adc_pm_ops),
1676	},
1677	.probe = stm32_dfsdm_adc_probe,
1678	.remove_new = stm32_dfsdm_adc_remove,
1679};
1680module_platform_driver(stm32_dfsdm_adc_driver);
1681
1682MODULE_DESCRIPTION("STM32 sigma delta ADC");
1683MODULE_AUTHOR("Arnaud Pouliquen <arnaud.pouliquen@st.com>");
1684MODULE_LICENSE("GPL v2");
1685