stm32-dfsdm-adc.c 49 KB

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