stm32-adc.c 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * This file is part of STM32 ADC driver
  4. *
  5. * Copyright (C) 2016, STMicroelectronics - All Rights Reserved
  6. * Author: Fabrice Gasnier <fabrice.gasnier@st.com>.
  7. */
  8. #include <linux/clk.h>
  9. #include <linux/delay.h>
  10. #include <linux/dma-mapping.h>
  11. #include <linux/dmaengine.h>
  12. #include <linux/iio/iio.h>
  13. #include <linux/iio/buffer.h>
  14. #include <linux/iio/timer/stm32-lptim-trigger.h>
  15. #include <linux/iio/timer/stm32-timer-trigger.h>
  16. #include <linux/iio/trigger.h>
  17. #include <linux/iio/trigger_consumer.h>
  18. #include <linux/iio/triggered_buffer.h>
  19. #include <linux/interrupt.h>
  20. #include <linux/io.h>
  21. #include <linux/iopoll.h>
  22. #include <linux/module.h>
  23. #include <linux/platform_device.h>
  24. #include <linux/of.h>
  25. #include <linux/of_device.h>
  26. #include "stm32-adc-core.h"
  27. /* Number of linear calibration shadow registers / LINCALRDYW control bits */
  28. #define STM32H7_LINCALFACT_NUM 6
  29. /* BOOST bit must be set on STM32H7 when ADC clock is above 20MHz */
  30. #define STM32H7_BOOST_CLKRATE 20000000UL
  31. #define STM32_ADC_CH_MAX 20 /* max number of channels */
  32. #define STM32_ADC_CH_SZ 10 /* max channel name size */
  33. #define STM32_ADC_MAX_SQ 16 /* SQ1..SQ16 */
  34. #define STM32_ADC_MAX_SMP 7 /* SMPx range is [0..7] */
  35. #define STM32_ADC_TIMEOUT_US 100000
  36. #define STM32_ADC_TIMEOUT (msecs_to_jiffies(STM32_ADC_TIMEOUT_US / 1000))
  37. #define STM32_DMA_BUFFER_SIZE PAGE_SIZE
  38. /* External trigger enable */
  39. enum stm32_adc_exten {
  40. STM32_EXTEN_SWTRIG,
  41. STM32_EXTEN_HWTRIG_RISING_EDGE,
  42. STM32_EXTEN_HWTRIG_FALLING_EDGE,
  43. STM32_EXTEN_HWTRIG_BOTH_EDGES,
  44. };
  45. /* extsel - trigger mux selection value */
  46. enum stm32_adc_extsel {
  47. STM32_EXT0,
  48. STM32_EXT1,
  49. STM32_EXT2,
  50. STM32_EXT3,
  51. STM32_EXT4,
  52. STM32_EXT5,
  53. STM32_EXT6,
  54. STM32_EXT7,
  55. STM32_EXT8,
  56. STM32_EXT9,
  57. STM32_EXT10,
  58. STM32_EXT11,
  59. STM32_EXT12,
  60. STM32_EXT13,
  61. STM32_EXT14,
  62. STM32_EXT15,
  63. STM32_EXT16,
  64. STM32_EXT17,
  65. STM32_EXT18,
  66. STM32_EXT19,
  67. STM32_EXT20,
  68. };
  69. /**
  70. * struct stm32_adc_trig_info - ADC trigger info
  71. * @name: name of the trigger, corresponding to its source
  72. * @extsel: trigger selection
  73. */
  74. struct stm32_adc_trig_info {
  75. const char *name;
  76. enum stm32_adc_extsel extsel;
  77. };
  78. /**
  79. * struct stm32_adc_calib - optional adc calibration data
  80. * @calfact_s: Calibration offset for single ended channels
  81. * @calfact_d: Calibration offset in differential
  82. * @lincalfact: Linearity calibration factor
  83. */
  84. struct stm32_adc_calib {
  85. u32 calfact_s;
  86. u32 calfact_d;
  87. u32 lincalfact[STM32H7_LINCALFACT_NUM];
  88. };
  89. /**
  90. * stm32_adc_regs - stm32 ADC misc registers & bitfield desc
  91. * @reg: register offset
  92. * @mask: bitfield mask
  93. * @shift: left shift
  94. */
  95. struct stm32_adc_regs {
  96. int reg;
  97. int mask;
  98. int shift;
  99. };
  100. /**
  101. * stm32_adc_regspec - stm32 registers definition, compatible dependent data
  102. * @dr: data register offset
  103. * @ier_eoc: interrupt enable register & eocie bitfield
  104. * @isr_eoc: interrupt status register & eoc bitfield
  105. * @sqr: reference to sequence registers array
  106. * @exten: trigger control register & bitfield
  107. * @extsel: trigger selection register & bitfield
  108. * @res: resolution selection register & bitfield
  109. * @smpr: smpr1 & smpr2 registers offset array
  110. * @smp_bits: smpr1 & smpr2 index and bitfields
  111. */
  112. struct stm32_adc_regspec {
  113. const u32 dr;
  114. const struct stm32_adc_regs ier_eoc;
  115. const struct stm32_adc_regs isr_eoc;
  116. const struct stm32_adc_regs *sqr;
  117. const struct stm32_adc_regs exten;
  118. const struct stm32_adc_regs extsel;
  119. const struct stm32_adc_regs res;
  120. const u32 smpr[2];
  121. const struct stm32_adc_regs *smp_bits;
  122. };
  123. struct stm32_adc;
  124. /**
  125. * stm32_adc_cfg - stm32 compatible configuration data
  126. * @regs: registers descriptions
  127. * @adc_info: per instance input channels definitions
  128. * @trigs: external trigger sources
  129. * @clk_required: clock is required
  130. * @has_vregready: vregready status flag presence
  131. * @selfcalib: optional routine for self-calibration
  132. * @prepare: optional prepare routine (power-up, enable)
  133. * @start_conv: routine to start conversions
  134. * @stop_conv: routine to stop conversions
  135. * @unprepare: optional unprepare routine (disable, power-down)
  136. * @smp_cycles: programmable sampling time (ADC clock cycles)
  137. */
  138. struct stm32_adc_cfg {
  139. const struct stm32_adc_regspec *regs;
  140. const struct stm32_adc_info *adc_info;
  141. struct stm32_adc_trig_info *trigs;
  142. bool clk_required;
  143. bool has_vregready;
  144. int (*selfcalib)(struct stm32_adc *);
  145. int (*prepare)(struct stm32_adc *);
  146. void (*start_conv)(struct stm32_adc *, bool dma);
  147. void (*stop_conv)(struct stm32_adc *);
  148. void (*unprepare)(struct stm32_adc *);
  149. const unsigned int *smp_cycles;
  150. };
  151. /**
  152. * struct stm32_adc - private data of each ADC IIO instance
  153. * @common: reference to ADC block common data
  154. * @offset: ADC instance register offset in ADC block
  155. * @cfg: compatible configuration data
  156. * @completion: end of single conversion completion
  157. * @buffer: data buffer
  158. * @clk: clock for this adc instance
  159. * @irq: interrupt for this adc instance
  160. * @lock: spinlock
  161. * @bufi: data buffer index
  162. * @num_conv: expected number of scan conversions
  163. * @res: data resolution (e.g. RES bitfield value)
  164. * @trigger_polarity: external trigger polarity (e.g. exten)
  165. * @dma_chan: dma channel
  166. * @rx_buf: dma rx buffer cpu address
  167. * @rx_dma_buf: dma rx buffer bus address
  168. * @rx_buf_sz: dma rx buffer size
  169. * @difsel bitmask to set single-ended/differential channel
  170. * @pcsel bitmask to preselect channels on some devices
  171. * @smpr_val: sampling time settings (e.g. smpr1 / smpr2)
  172. * @cal: optional calibration data on some devices
  173. * @chan_name: channel name array
  174. */
  175. struct stm32_adc {
  176. struct stm32_adc_common *common;
  177. u32 offset;
  178. const struct stm32_adc_cfg *cfg;
  179. struct completion completion;
  180. u16 buffer[STM32_ADC_MAX_SQ];
  181. struct clk *clk;
  182. int irq;
  183. spinlock_t lock; /* interrupt lock */
  184. unsigned int bufi;
  185. unsigned int num_conv;
  186. u32 res;
  187. u32 trigger_polarity;
  188. struct dma_chan *dma_chan;
  189. u8 *rx_buf;
  190. dma_addr_t rx_dma_buf;
  191. unsigned int rx_buf_sz;
  192. u32 difsel;
  193. u32 pcsel;
  194. u32 smpr_val[2];
  195. struct stm32_adc_calib cal;
  196. char chan_name[STM32_ADC_CH_MAX][STM32_ADC_CH_SZ];
  197. };
  198. struct stm32_adc_diff_channel {
  199. u32 vinp;
  200. u32 vinn;
  201. };
  202. /**
  203. * struct stm32_adc_info - stm32 ADC, per instance config data
  204. * @max_channels: Number of channels
  205. * @resolutions: available resolutions
  206. * @num_res: number of available resolutions
  207. */
  208. struct stm32_adc_info {
  209. int max_channels;
  210. const unsigned int *resolutions;
  211. const unsigned int num_res;
  212. };
  213. static const unsigned int stm32f4_adc_resolutions[] = {
  214. /* sorted values so the index matches RES[1:0] in STM32F4_ADC_CR1 */
  215. 12, 10, 8, 6,
  216. };
  217. /* stm32f4 can have up to 16 channels */
  218. static const struct stm32_adc_info stm32f4_adc_info = {
  219. .max_channels = 16,
  220. .resolutions = stm32f4_adc_resolutions,
  221. .num_res = ARRAY_SIZE(stm32f4_adc_resolutions),
  222. };
  223. static const unsigned int stm32h7_adc_resolutions[] = {
  224. /* sorted values so the index matches RES[2:0] in STM32H7_ADC_CFGR */
  225. 16, 14, 12, 10, 8,
  226. };
  227. /* stm32h7 can have up to 20 channels */
  228. static const struct stm32_adc_info stm32h7_adc_info = {
  229. .max_channels = STM32_ADC_CH_MAX,
  230. .resolutions = stm32h7_adc_resolutions,
  231. .num_res = ARRAY_SIZE(stm32h7_adc_resolutions),
  232. };
  233. /**
  234. * stm32f4_sq - describe regular sequence registers
  235. * - L: sequence len (register & bit field)
  236. * - SQ1..SQ16: sequence entries (register & bit field)
  237. */
  238. static const struct stm32_adc_regs stm32f4_sq[STM32_ADC_MAX_SQ + 1] = {
  239. /* L: len bit field description to be kept as first element */
  240. { STM32F4_ADC_SQR1, GENMASK(23, 20), 20 },
  241. /* SQ1..SQ16 registers & bit fields (reg, mask, shift) */
  242. { STM32F4_ADC_SQR3, GENMASK(4, 0), 0 },
  243. { STM32F4_ADC_SQR3, GENMASK(9, 5), 5 },
  244. { STM32F4_ADC_SQR3, GENMASK(14, 10), 10 },
  245. { STM32F4_ADC_SQR3, GENMASK(19, 15), 15 },
  246. { STM32F4_ADC_SQR3, GENMASK(24, 20), 20 },
  247. { STM32F4_ADC_SQR3, GENMASK(29, 25), 25 },
  248. { STM32F4_ADC_SQR2, GENMASK(4, 0), 0 },
  249. { STM32F4_ADC_SQR2, GENMASK(9, 5), 5 },
  250. { STM32F4_ADC_SQR2, GENMASK(14, 10), 10 },
  251. { STM32F4_ADC_SQR2, GENMASK(19, 15), 15 },
  252. { STM32F4_ADC_SQR2, GENMASK(24, 20), 20 },
  253. { STM32F4_ADC_SQR2, GENMASK(29, 25), 25 },
  254. { STM32F4_ADC_SQR1, GENMASK(4, 0), 0 },
  255. { STM32F4_ADC_SQR1, GENMASK(9, 5), 5 },
  256. { STM32F4_ADC_SQR1, GENMASK(14, 10), 10 },
  257. { STM32F4_ADC_SQR1, GENMASK(19, 15), 15 },
  258. };
  259. /* STM32F4 external trigger sources for all instances */
  260. static struct stm32_adc_trig_info stm32f4_adc_trigs[] = {
  261. { TIM1_CH1, STM32_EXT0 },
  262. { TIM1_CH2, STM32_EXT1 },
  263. { TIM1_CH3, STM32_EXT2 },
  264. { TIM2_CH2, STM32_EXT3 },
  265. { TIM2_CH3, STM32_EXT4 },
  266. { TIM2_CH4, STM32_EXT5 },
  267. { TIM2_TRGO, STM32_EXT6 },
  268. { TIM3_CH1, STM32_EXT7 },
  269. { TIM3_TRGO, STM32_EXT8 },
  270. { TIM4_CH4, STM32_EXT9 },
  271. { TIM5_CH1, STM32_EXT10 },
  272. { TIM5_CH2, STM32_EXT11 },
  273. { TIM5_CH3, STM32_EXT12 },
  274. { TIM8_CH1, STM32_EXT13 },
  275. { TIM8_TRGO, STM32_EXT14 },
  276. {}, /* sentinel */
  277. };
  278. /**
  279. * stm32f4_smp_bits[] - describe sampling time register index & bit fields
  280. * Sorted so it can be indexed by channel number.
  281. */
  282. static const struct stm32_adc_regs stm32f4_smp_bits[] = {
  283. /* STM32F4_ADC_SMPR2: smpr[] index, mask, shift for SMP0 to SMP9 */
  284. { 1, GENMASK(2, 0), 0 },
  285. { 1, GENMASK(5, 3), 3 },
  286. { 1, GENMASK(8, 6), 6 },
  287. { 1, GENMASK(11, 9), 9 },
  288. { 1, GENMASK(14, 12), 12 },
  289. { 1, GENMASK(17, 15), 15 },
  290. { 1, GENMASK(20, 18), 18 },
  291. { 1, GENMASK(23, 21), 21 },
  292. { 1, GENMASK(26, 24), 24 },
  293. { 1, GENMASK(29, 27), 27 },
  294. /* STM32F4_ADC_SMPR1, smpr[] index, mask, shift for SMP10 to SMP18 */
  295. { 0, GENMASK(2, 0), 0 },
  296. { 0, GENMASK(5, 3), 3 },
  297. { 0, GENMASK(8, 6), 6 },
  298. { 0, GENMASK(11, 9), 9 },
  299. { 0, GENMASK(14, 12), 12 },
  300. { 0, GENMASK(17, 15), 15 },
  301. { 0, GENMASK(20, 18), 18 },
  302. { 0, GENMASK(23, 21), 21 },
  303. { 0, GENMASK(26, 24), 24 },
  304. };
  305. /* STM32F4 programmable sampling time (ADC clock cycles) */
  306. static const unsigned int stm32f4_adc_smp_cycles[STM32_ADC_MAX_SMP + 1] = {
  307. 3, 15, 28, 56, 84, 112, 144, 480,
  308. };
  309. static const struct stm32_adc_regspec stm32f4_adc_regspec = {
  310. .dr = STM32F4_ADC_DR,
  311. .ier_eoc = { STM32F4_ADC_CR1, STM32F4_EOCIE },
  312. .isr_eoc = { STM32F4_ADC_SR, STM32F4_EOC },
  313. .sqr = stm32f4_sq,
  314. .exten = { STM32F4_ADC_CR2, STM32F4_EXTEN_MASK, STM32F4_EXTEN_SHIFT },
  315. .extsel = { STM32F4_ADC_CR2, STM32F4_EXTSEL_MASK,
  316. STM32F4_EXTSEL_SHIFT },
  317. .res = { STM32F4_ADC_CR1, STM32F4_RES_MASK, STM32F4_RES_SHIFT },
  318. .smpr = { STM32F4_ADC_SMPR1, STM32F4_ADC_SMPR2 },
  319. .smp_bits = stm32f4_smp_bits,
  320. };
  321. static const struct stm32_adc_regs stm32h7_sq[STM32_ADC_MAX_SQ + 1] = {
  322. /* L: len bit field description to be kept as first element */
  323. { STM32H7_ADC_SQR1, GENMASK(3, 0), 0 },
  324. /* SQ1..SQ16 registers & bit fields (reg, mask, shift) */
  325. { STM32H7_ADC_SQR1, GENMASK(10, 6), 6 },
  326. { STM32H7_ADC_SQR1, GENMASK(16, 12), 12 },
  327. { STM32H7_ADC_SQR1, GENMASK(22, 18), 18 },
  328. { STM32H7_ADC_SQR1, GENMASK(28, 24), 24 },
  329. { STM32H7_ADC_SQR2, GENMASK(4, 0), 0 },
  330. { STM32H7_ADC_SQR2, GENMASK(10, 6), 6 },
  331. { STM32H7_ADC_SQR2, GENMASK(16, 12), 12 },
  332. { STM32H7_ADC_SQR2, GENMASK(22, 18), 18 },
  333. { STM32H7_ADC_SQR2, GENMASK(28, 24), 24 },
  334. { STM32H7_ADC_SQR3, GENMASK(4, 0), 0 },
  335. { STM32H7_ADC_SQR3, GENMASK(10, 6), 6 },
  336. { STM32H7_ADC_SQR3, GENMASK(16, 12), 12 },
  337. { STM32H7_ADC_SQR3, GENMASK(22, 18), 18 },
  338. { STM32H7_ADC_SQR3, GENMASK(28, 24), 24 },
  339. { STM32H7_ADC_SQR4, GENMASK(4, 0), 0 },
  340. { STM32H7_ADC_SQR4, GENMASK(10, 6), 6 },
  341. };
  342. /* STM32H7 external trigger sources for all instances */
  343. static struct stm32_adc_trig_info stm32h7_adc_trigs[] = {
  344. { TIM1_CH1, STM32_EXT0 },
  345. { TIM1_CH2, STM32_EXT1 },
  346. { TIM1_CH3, STM32_EXT2 },
  347. { TIM2_CH2, STM32_EXT3 },
  348. { TIM3_TRGO, STM32_EXT4 },
  349. { TIM4_CH4, STM32_EXT5 },
  350. { TIM8_TRGO, STM32_EXT7 },
  351. { TIM8_TRGO2, STM32_EXT8 },
  352. { TIM1_TRGO, STM32_EXT9 },
  353. { TIM1_TRGO2, STM32_EXT10 },
  354. { TIM2_TRGO, STM32_EXT11 },
  355. { TIM4_TRGO, STM32_EXT12 },
  356. { TIM6_TRGO, STM32_EXT13 },
  357. { TIM15_TRGO, STM32_EXT14 },
  358. { TIM3_CH4, STM32_EXT15 },
  359. { LPTIM1_OUT, STM32_EXT18 },
  360. { LPTIM2_OUT, STM32_EXT19 },
  361. { LPTIM3_OUT, STM32_EXT20 },
  362. {},
  363. };
  364. /**
  365. * stm32h7_smp_bits - describe sampling time register index & bit fields
  366. * Sorted so it can be indexed by channel number.
  367. */
  368. static const struct stm32_adc_regs stm32h7_smp_bits[] = {
  369. /* STM32H7_ADC_SMPR1, smpr[] index, mask, shift for SMP0 to SMP9 */
  370. { 0, GENMASK(2, 0), 0 },
  371. { 0, GENMASK(5, 3), 3 },
  372. { 0, GENMASK(8, 6), 6 },
  373. { 0, GENMASK(11, 9), 9 },
  374. { 0, GENMASK(14, 12), 12 },
  375. { 0, GENMASK(17, 15), 15 },
  376. { 0, GENMASK(20, 18), 18 },
  377. { 0, GENMASK(23, 21), 21 },
  378. { 0, GENMASK(26, 24), 24 },
  379. { 0, GENMASK(29, 27), 27 },
  380. /* STM32H7_ADC_SMPR2, smpr[] index, mask, shift for SMP10 to SMP19 */
  381. { 1, GENMASK(2, 0), 0 },
  382. { 1, GENMASK(5, 3), 3 },
  383. { 1, GENMASK(8, 6), 6 },
  384. { 1, GENMASK(11, 9), 9 },
  385. { 1, GENMASK(14, 12), 12 },
  386. { 1, GENMASK(17, 15), 15 },
  387. { 1, GENMASK(20, 18), 18 },
  388. { 1, GENMASK(23, 21), 21 },
  389. { 1, GENMASK(26, 24), 24 },
  390. { 1, GENMASK(29, 27), 27 },
  391. };
  392. /* STM32H7 programmable sampling time (ADC clock cycles, rounded down) */
  393. static const unsigned int stm32h7_adc_smp_cycles[STM32_ADC_MAX_SMP + 1] = {
  394. 1, 2, 8, 16, 32, 64, 387, 810,
  395. };
  396. static const struct stm32_adc_regspec stm32h7_adc_regspec = {
  397. .dr = STM32H7_ADC_DR,
  398. .ier_eoc = { STM32H7_ADC_IER, STM32H7_EOCIE },
  399. .isr_eoc = { STM32H7_ADC_ISR, STM32H7_EOC },
  400. .sqr = stm32h7_sq,
  401. .exten = { STM32H7_ADC_CFGR, STM32H7_EXTEN_MASK, STM32H7_EXTEN_SHIFT },
  402. .extsel = { STM32H7_ADC_CFGR, STM32H7_EXTSEL_MASK,
  403. STM32H7_EXTSEL_SHIFT },
  404. .res = { STM32H7_ADC_CFGR, STM32H7_RES_MASK, STM32H7_RES_SHIFT },
  405. .smpr = { STM32H7_ADC_SMPR1, STM32H7_ADC_SMPR2 },
  406. .smp_bits = stm32h7_smp_bits,
  407. };
  408. /**
  409. * STM32 ADC registers access routines
  410. * @adc: stm32 adc instance
  411. * @reg: reg offset in adc instance
  412. *
  413. * Note: All instances share same base, with 0x0, 0x100 or 0x200 offset resp.
  414. * for adc1, adc2 and adc3.
  415. */
  416. static u32 stm32_adc_readl(struct stm32_adc *adc, u32 reg)
  417. {
  418. return readl_relaxed(adc->common->base + adc->offset + reg);
  419. }
  420. #define stm32_adc_readl_addr(addr) stm32_adc_readl(adc, addr)
  421. #define stm32_adc_readl_poll_timeout(reg, val, cond, sleep_us, timeout_us) \
  422. readx_poll_timeout(stm32_adc_readl_addr, reg, val, \
  423. cond, sleep_us, timeout_us)
  424. static u16 stm32_adc_readw(struct stm32_adc *adc, u32 reg)
  425. {
  426. return readw_relaxed(adc->common->base + adc->offset + reg);
  427. }
  428. static void stm32_adc_writel(struct stm32_adc *adc, u32 reg, u32 val)
  429. {
  430. writel_relaxed(val, adc->common->base + adc->offset + reg);
  431. }
  432. static void stm32_adc_set_bits(struct stm32_adc *adc, u32 reg, u32 bits)
  433. {
  434. unsigned long flags;
  435. spin_lock_irqsave(&adc->lock, flags);
  436. stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) | bits);
  437. spin_unlock_irqrestore(&adc->lock, flags);
  438. }
  439. static void stm32_adc_clr_bits(struct stm32_adc *adc, u32 reg, u32 bits)
  440. {
  441. unsigned long flags;
  442. spin_lock_irqsave(&adc->lock, flags);
  443. stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) & ~bits);
  444. spin_unlock_irqrestore(&adc->lock, flags);
  445. }
  446. /**
  447. * stm32_adc_conv_irq_enable() - Enable end of conversion interrupt
  448. * @adc: stm32 adc instance
  449. */
  450. static void stm32_adc_conv_irq_enable(struct stm32_adc *adc)
  451. {
  452. stm32_adc_set_bits(adc, adc->cfg->regs->ier_eoc.reg,
  453. adc->cfg->regs->ier_eoc.mask);
  454. };
  455. /**
  456. * stm32_adc_conv_irq_disable() - Disable end of conversion interrupt
  457. * @adc: stm32 adc instance
  458. */
  459. static void stm32_adc_conv_irq_disable(struct stm32_adc *adc)
  460. {
  461. stm32_adc_clr_bits(adc, adc->cfg->regs->ier_eoc.reg,
  462. adc->cfg->regs->ier_eoc.mask);
  463. }
  464. static void stm32_adc_set_res(struct stm32_adc *adc)
  465. {
  466. const struct stm32_adc_regs *res = &adc->cfg->regs->res;
  467. u32 val;
  468. val = stm32_adc_readl(adc, res->reg);
  469. val = (val & ~res->mask) | (adc->res << res->shift);
  470. stm32_adc_writel(adc, res->reg, val);
  471. }
  472. /**
  473. * stm32f4_adc_start_conv() - Start conversions for regular channels.
  474. * @adc: stm32 adc instance
  475. * @dma: use dma to transfer conversion result
  476. *
  477. * Start conversions for regular channels.
  478. * Also take care of normal or DMA mode. Circular DMA may be used for regular
  479. * conversions, in IIO buffer modes. Otherwise, use ADC interrupt with direct
  480. * DR read instead (e.g. read_raw, or triggered buffer mode without DMA).
  481. */
  482. static void stm32f4_adc_start_conv(struct stm32_adc *adc, bool dma)
  483. {
  484. stm32_adc_set_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
  485. if (dma)
  486. stm32_adc_set_bits(adc, STM32F4_ADC_CR2,
  487. STM32F4_DMA | STM32F4_DDS);
  488. stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_EOCS | STM32F4_ADON);
  489. /* Wait for Power-up time (tSTAB from datasheet) */
  490. usleep_range(2, 3);
  491. /* Software start ? (e.g. trigger detection disabled ?) */
  492. if (!(stm32_adc_readl(adc, STM32F4_ADC_CR2) & STM32F4_EXTEN_MASK))
  493. stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_SWSTART);
  494. }
  495. static void stm32f4_adc_stop_conv(struct stm32_adc *adc)
  496. {
  497. stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_EXTEN_MASK);
  498. stm32_adc_clr_bits(adc, STM32F4_ADC_SR, STM32F4_STRT);
  499. stm32_adc_clr_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
  500. stm32_adc_clr_bits(adc, STM32F4_ADC_CR2,
  501. STM32F4_ADON | STM32F4_DMA | STM32F4_DDS);
  502. }
  503. static void stm32h7_adc_start_conv(struct stm32_adc *adc, bool dma)
  504. {
  505. enum stm32h7_adc_dmngt dmngt;
  506. unsigned long flags;
  507. u32 val;
  508. if (dma)
  509. dmngt = STM32H7_DMNGT_DMA_CIRC;
  510. else
  511. dmngt = STM32H7_DMNGT_DR_ONLY;
  512. spin_lock_irqsave(&adc->lock, flags);
  513. val = stm32_adc_readl(adc, STM32H7_ADC_CFGR);
  514. val = (val & ~STM32H7_DMNGT_MASK) | (dmngt << STM32H7_DMNGT_SHIFT);
  515. stm32_adc_writel(adc, STM32H7_ADC_CFGR, val);
  516. spin_unlock_irqrestore(&adc->lock, flags);
  517. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADSTART);
  518. }
  519. static void stm32h7_adc_stop_conv(struct stm32_adc *adc)
  520. {
  521. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  522. int ret;
  523. u32 val;
  524. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADSTP);
  525. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  526. !(val & (STM32H7_ADSTART)),
  527. 100, STM32_ADC_TIMEOUT_US);
  528. if (ret)
  529. dev_warn(&indio_dev->dev, "stop failed\n");
  530. stm32_adc_clr_bits(adc, STM32H7_ADC_CFGR, STM32H7_DMNGT_MASK);
  531. }
  532. static int stm32h7_adc_exit_pwr_down(struct stm32_adc *adc)
  533. {
  534. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  535. int ret;
  536. u32 val;
  537. /* Exit deep power down, then enable ADC voltage regulator */
  538. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
  539. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADVREGEN);
  540. if (adc->common->rate > STM32H7_BOOST_CLKRATE)
  541. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_BOOST);
  542. /* Wait for startup time */
  543. if (!adc->cfg->has_vregready) {
  544. usleep_range(10, 20);
  545. return 0;
  546. }
  547. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_ISR, val,
  548. val & STM32MP1_VREGREADY, 100,
  549. STM32_ADC_TIMEOUT_US);
  550. if (ret) {
  551. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
  552. dev_err(&indio_dev->dev, "Failed to exit power down\n");
  553. }
  554. return ret;
  555. }
  556. static void stm32h7_adc_enter_pwr_down(struct stm32_adc *adc)
  557. {
  558. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_BOOST);
  559. /* Setting DEEPPWD disables ADC vreg and clears ADVREGEN */
  560. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
  561. }
  562. static int stm32h7_adc_enable(struct stm32_adc *adc)
  563. {
  564. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  565. int ret;
  566. u32 val;
  567. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADEN);
  568. /* Poll for ADRDY to be set (after adc startup time) */
  569. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_ISR, val,
  570. val & STM32H7_ADRDY,
  571. 100, STM32_ADC_TIMEOUT_US);
  572. if (ret) {
  573. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADDIS);
  574. dev_err(&indio_dev->dev, "Failed to enable ADC\n");
  575. } else {
  576. /* Clear ADRDY by writing one */
  577. stm32_adc_set_bits(adc, STM32H7_ADC_ISR, STM32H7_ADRDY);
  578. }
  579. return ret;
  580. }
  581. static void stm32h7_adc_disable(struct stm32_adc *adc)
  582. {
  583. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  584. int ret;
  585. u32 val;
  586. /* Disable ADC and wait until it's effectively disabled */
  587. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADDIS);
  588. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  589. !(val & STM32H7_ADEN), 100,
  590. STM32_ADC_TIMEOUT_US);
  591. if (ret)
  592. dev_warn(&indio_dev->dev, "Failed to disable\n");
  593. }
  594. /**
  595. * stm32h7_adc_read_selfcalib() - read calibration shadow regs, save result
  596. * @adc: stm32 adc instance
  597. */
  598. static int stm32h7_adc_read_selfcalib(struct stm32_adc *adc)
  599. {
  600. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  601. int i, ret;
  602. u32 lincalrdyw_mask, val;
  603. /* Enable adc so LINCALRDYW1..6 bits are writable */
  604. ret = stm32h7_adc_enable(adc);
  605. if (ret)
  606. return ret;
  607. /* Read linearity calibration */
  608. lincalrdyw_mask = STM32H7_LINCALRDYW6;
  609. for (i = STM32H7_LINCALFACT_NUM - 1; i >= 0; i--) {
  610. /* Clear STM32H7_LINCALRDYW[6..1]: transfer calib to CALFACT2 */
  611. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
  612. /* Poll: wait calib data to be ready in CALFACT2 register */
  613. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  614. !(val & lincalrdyw_mask),
  615. 100, STM32_ADC_TIMEOUT_US);
  616. if (ret) {
  617. dev_err(&indio_dev->dev, "Failed to read calfact\n");
  618. goto disable;
  619. }
  620. val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT2);
  621. adc->cal.lincalfact[i] = (val & STM32H7_LINCALFACT_MASK);
  622. adc->cal.lincalfact[i] >>= STM32H7_LINCALFACT_SHIFT;
  623. lincalrdyw_mask >>= 1;
  624. }
  625. /* Read offset calibration */
  626. val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT);
  627. adc->cal.calfact_s = (val & STM32H7_CALFACT_S_MASK);
  628. adc->cal.calfact_s >>= STM32H7_CALFACT_S_SHIFT;
  629. adc->cal.calfact_d = (val & STM32H7_CALFACT_D_MASK);
  630. adc->cal.calfact_d >>= STM32H7_CALFACT_D_SHIFT;
  631. disable:
  632. stm32h7_adc_disable(adc);
  633. return ret;
  634. }
  635. /**
  636. * stm32h7_adc_restore_selfcalib() - Restore saved self-calibration result
  637. * @adc: stm32 adc instance
  638. * Note: ADC must be enabled, with no on-going conversions.
  639. */
  640. static int stm32h7_adc_restore_selfcalib(struct stm32_adc *adc)
  641. {
  642. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  643. int i, ret;
  644. u32 lincalrdyw_mask, val;
  645. val = (adc->cal.calfact_s << STM32H7_CALFACT_S_SHIFT) |
  646. (adc->cal.calfact_d << STM32H7_CALFACT_D_SHIFT);
  647. stm32_adc_writel(adc, STM32H7_ADC_CALFACT, val);
  648. lincalrdyw_mask = STM32H7_LINCALRDYW6;
  649. for (i = STM32H7_LINCALFACT_NUM - 1; i >= 0; i--) {
  650. /*
  651. * Write saved calibration data to shadow registers:
  652. * Write CALFACT2, and set LINCALRDYW[6..1] bit to trigger
  653. * data write. Then poll to wait for complete transfer.
  654. */
  655. val = adc->cal.lincalfact[i] << STM32H7_LINCALFACT_SHIFT;
  656. stm32_adc_writel(adc, STM32H7_ADC_CALFACT2, val);
  657. stm32_adc_set_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
  658. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  659. val & lincalrdyw_mask,
  660. 100, STM32_ADC_TIMEOUT_US);
  661. if (ret) {
  662. dev_err(&indio_dev->dev, "Failed to write calfact\n");
  663. return ret;
  664. }
  665. /*
  666. * Read back calibration data, has two effects:
  667. * - It ensures bits LINCALRDYW[6..1] are kept cleared
  668. * for next time calibration needs to be restored.
  669. * - BTW, bit clear triggers a read, then check data has been
  670. * correctly written.
  671. */
  672. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
  673. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  674. !(val & lincalrdyw_mask),
  675. 100, STM32_ADC_TIMEOUT_US);
  676. if (ret) {
  677. dev_err(&indio_dev->dev, "Failed to read calfact\n");
  678. return ret;
  679. }
  680. val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT2);
  681. if (val != adc->cal.lincalfact[i] << STM32H7_LINCALFACT_SHIFT) {
  682. dev_err(&indio_dev->dev, "calfact not consistent\n");
  683. return -EIO;
  684. }
  685. lincalrdyw_mask >>= 1;
  686. }
  687. return 0;
  688. }
  689. /**
  690. * Fixed timeout value for ADC calibration.
  691. * worst cases:
  692. * - low clock frequency
  693. * - maximum prescalers
  694. * Calibration requires:
  695. * - 131,072 ADC clock cycle for the linear calibration
  696. * - 20 ADC clock cycle for the offset calibration
  697. *
  698. * Set to 100ms for now
  699. */
  700. #define STM32H7_ADC_CALIB_TIMEOUT_US 100000
  701. /**
  702. * stm32h7_adc_selfcalib() - Procedure to calibrate ADC (from power down)
  703. * @adc: stm32 adc instance
  704. * Exit from power down, calibrate ADC, then return to power down.
  705. */
  706. static int stm32h7_adc_selfcalib(struct stm32_adc *adc)
  707. {
  708. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  709. int ret;
  710. u32 val;
  711. ret = stm32h7_adc_exit_pwr_down(adc);
  712. if (ret)
  713. return ret;
  714. /*
  715. * Select calibration mode:
  716. * - Offset calibration for single ended inputs
  717. * - No linearity calibration (do it later, before reading it)
  718. */
  719. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_ADCALDIF);
  720. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_ADCALLIN);
  721. /* Start calibration, then wait for completion */
  722. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADCAL);
  723. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  724. !(val & STM32H7_ADCAL), 100,
  725. STM32H7_ADC_CALIB_TIMEOUT_US);
  726. if (ret) {
  727. dev_err(&indio_dev->dev, "calibration failed\n");
  728. goto pwr_dwn;
  729. }
  730. /*
  731. * Select calibration mode, then start calibration:
  732. * - Offset calibration for differential input
  733. * - Linearity calibration (needs to be done only once for single/diff)
  734. * will run simultaneously with offset calibration.
  735. */
  736. stm32_adc_set_bits(adc, STM32H7_ADC_CR,
  737. STM32H7_ADCALDIF | STM32H7_ADCALLIN);
  738. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADCAL);
  739. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  740. !(val & STM32H7_ADCAL), 100,
  741. STM32H7_ADC_CALIB_TIMEOUT_US);
  742. if (ret) {
  743. dev_err(&indio_dev->dev, "calibration failed\n");
  744. goto pwr_dwn;
  745. }
  746. stm32_adc_clr_bits(adc, STM32H7_ADC_CR,
  747. STM32H7_ADCALDIF | STM32H7_ADCALLIN);
  748. /* Read calibration result for future reference */
  749. ret = stm32h7_adc_read_selfcalib(adc);
  750. pwr_dwn:
  751. stm32h7_adc_enter_pwr_down(adc);
  752. return ret;
  753. }
  754. /**
  755. * stm32h7_adc_prepare() - Leave power down mode to enable ADC.
  756. * @adc: stm32 adc instance
  757. * Leave power down mode.
  758. * Configure channels as single ended or differential before enabling ADC.
  759. * Enable ADC.
  760. * Restore calibration data.
  761. * Pre-select channels that may be used in PCSEL (required by input MUX / IO):
  762. * - Only one input is selected for single ended (e.g. 'vinp')
  763. * - Two inputs are selected for differential channels (e.g. 'vinp' & 'vinn')
  764. */
  765. static int stm32h7_adc_prepare(struct stm32_adc *adc)
  766. {
  767. int ret;
  768. ret = stm32h7_adc_exit_pwr_down(adc);
  769. if (ret)
  770. return ret;
  771. stm32_adc_writel(adc, STM32H7_ADC_DIFSEL, adc->difsel);
  772. ret = stm32h7_adc_enable(adc);
  773. if (ret)
  774. goto pwr_dwn;
  775. ret = stm32h7_adc_restore_selfcalib(adc);
  776. if (ret)
  777. goto disable;
  778. stm32_adc_writel(adc, STM32H7_ADC_PCSEL, adc->pcsel);
  779. return 0;
  780. disable:
  781. stm32h7_adc_disable(adc);
  782. pwr_dwn:
  783. stm32h7_adc_enter_pwr_down(adc);
  784. return ret;
  785. }
  786. static void stm32h7_adc_unprepare(struct stm32_adc *adc)
  787. {
  788. stm32h7_adc_disable(adc);
  789. stm32h7_adc_enter_pwr_down(adc);
  790. }
  791. /**
  792. * stm32_adc_conf_scan_seq() - Build regular channels scan sequence
  793. * @indio_dev: IIO device
  794. * @scan_mask: channels to be converted
  795. *
  796. * Conversion sequence :
  797. * Apply sampling time settings for all channels.
  798. * Configure ADC scan sequence based on selected channels in scan_mask.
  799. * Add channels to SQR registers, from scan_mask LSB to MSB, then
  800. * program sequence len.
  801. */
  802. static int stm32_adc_conf_scan_seq(struct iio_dev *indio_dev,
  803. const unsigned long *scan_mask)
  804. {
  805. struct stm32_adc *adc = iio_priv(indio_dev);
  806. const struct stm32_adc_regs *sqr = adc->cfg->regs->sqr;
  807. const struct iio_chan_spec *chan;
  808. u32 val, bit;
  809. int i = 0;
  810. /* Apply sampling time settings */
  811. stm32_adc_writel(adc, adc->cfg->regs->smpr[0], adc->smpr_val[0]);
  812. stm32_adc_writel(adc, adc->cfg->regs->smpr[1], adc->smpr_val[1]);
  813. for_each_set_bit(bit, scan_mask, indio_dev->masklength) {
  814. chan = indio_dev->channels + bit;
  815. /*
  816. * Assign one channel per SQ entry in regular
  817. * sequence, starting with SQ1.
  818. */
  819. i++;
  820. if (i > STM32_ADC_MAX_SQ)
  821. return -EINVAL;
  822. dev_dbg(&indio_dev->dev, "%s chan %d to SQ%d\n",
  823. __func__, chan->channel, i);
  824. val = stm32_adc_readl(adc, sqr[i].reg);
  825. val &= ~sqr[i].mask;
  826. val |= chan->channel << sqr[i].shift;
  827. stm32_adc_writel(adc, sqr[i].reg, val);
  828. }
  829. if (!i)
  830. return -EINVAL;
  831. /* Sequence len */
  832. val = stm32_adc_readl(adc, sqr[0].reg);
  833. val &= ~sqr[0].mask;
  834. val |= ((i - 1) << sqr[0].shift);
  835. stm32_adc_writel(adc, sqr[0].reg, val);
  836. return 0;
  837. }
  838. /**
  839. * stm32_adc_get_trig_extsel() - Get external trigger selection
  840. * @trig: trigger
  841. *
  842. * Returns trigger extsel value, if trig matches, -EINVAL otherwise.
  843. */
  844. static int stm32_adc_get_trig_extsel(struct iio_dev *indio_dev,
  845. struct iio_trigger *trig)
  846. {
  847. struct stm32_adc *adc = iio_priv(indio_dev);
  848. int i;
  849. /* lookup triggers registered by stm32 timer trigger driver */
  850. for (i = 0; adc->cfg->trigs[i].name; i++) {
  851. /**
  852. * Checking both stm32 timer trigger type and trig name
  853. * should be safe against arbitrary trigger names.
  854. */
  855. if ((is_stm32_timer_trigger(trig) ||
  856. is_stm32_lptim_trigger(trig)) &&
  857. !strcmp(adc->cfg->trigs[i].name, trig->name)) {
  858. return adc->cfg->trigs[i].extsel;
  859. }
  860. }
  861. return -EINVAL;
  862. }
  863. /**
  864. * stm32_adc_set_trig() - Set a regular trigger
  865. * @indio_dev: IIO device
  866. * @trig: IIO trigger
  867. *
  868. * Set trigger source/polarity (e.g. SW, or HW with polarity) :
  869. * - if HW trigger disabled (e.g. trig == NULL, conversion launched by sw)
  870. * - if HW trigger enabled, set source & polarity
  871. */
  872. static int stm32_adc_set_trig(struct iio_dev *indio_dev,
  873. struct iio_trigger *trig)
  874. {
  875. struct stm32_adc *adc = iio_priv(indio_dev);
  876. u32 val, extsel = 0, exten = STM32_EXTEN_SWTRIG;
  877. unsigned long flags;
  878. int ret;
  879. if (trig) {
  880. ret = stm32_adc_get_trig_extsel(indio_dev, trig);
  881. if (ret < 0)
  882. return ret;
  883. /* set trigger source and polarity (default to rising edge) */
  884. extsel = ret;
  885. exten = adc->trigger_polarity + STM32_EXTEN_HWTRIG_RISING_EDGE;
  886. }
  887. spin_lock_irqsave(&adc->lock, flags);
  888. val = stm32_adc_readl(adc, adc->cfg->regs->exten.reg);
  889. val &= ~(adc->cfg->regs->exten.mask | adc->cfg->regs->extsel.mask);
  890. val |= exten << adc->cfg->regs->exten.shift;
  891. val |= extsel << adc->cfg->regs->extsel.shift;
  892. stm32_adc_writel(adc, adc->cfg->regs->exten.reg, val);
  893. spin_unlock_irqrestore(&adc->lock, flags);
  894. return 0;
  895. }
  896. static int stm32_adc_set_trig_pol(struct iio_dev *indio_dev,
  897. const struct iio_chan_spec *chan,
  898. unsigned int type)
  899. {
  900. struct stm32_adc *adc = iio_priv(indio_dev);
  901. adc->trigger_polarity = type;
  902. return 0;
  903. }
  904. static int stm32_adc_get_trig_pol(struct iio_dev *indio_dev,
  905. const struct iio_chan_spec *chan)
  906. {
  907. struct stm32_adc *adc = iio_priv(indio_dev);
  908. return adc->trigger_polarity;
  909. }
  910. static const char * const stm32_trig_pol_items[] = {
  911. "rising-edge", "falling-edge", "both-edges",
  912. };
  913. static const struct iio_enum stm32_adc_trig_pol = {
  914. .items = stm32_trig_pol_items,
  915. .num_items = ARRAY_SIZE(stm32_trig_pol_items),
  916. .get = stm32_adc_get_trig_pol,
  917. .set = stm32_adc_set_trig_pol,
  918. };
  919. /**
  920. * stm32_adc_single_conv() - Performs a single conversion
  921. * @indio_dev: IIO device
  922. * @chan: IIO channel
  923. * @res: conversion result
  924. *
  925. * The function performs a single conversion on a given channel:
  926. * - Apply sampling time settings
  927. * - Program sequencer with one channel (e.g. in SQ1 with len = 1)
  928. * - Use SW trigger
  929. * - Start conversion, then wait for interrupt completion.
  930. */
  931. static int stm32_adc_single_conv(struct iio_dev *indio_dev,
  932. const struct iio_chan_spec *chan,
  933. int *res)
  934. {
  935. struct stm32_adc *adc = iio_priv(indio_dev);
  936. const struct stm32_adc_regspec *regs = adc->cfg->regs;
  937. long timeout;
  938. u32 val;
  939. int ret;
  940. reinit_completion(&adc->completion);
  941. adc->bufi = 0;
  942. if (adc->cfg->prepare) {
  943. ret = adc->cfg->prepare(adc);
  944. if (ret)
  945. return ret;
  946. }
  947. /* Apply sampling time settings */
  948. stm32_adc_writel(adc, regs->smpr[0], adc->smpr_val[0]);
  949. stm32_adc_writel(adc, regs->smpr[1], adc->smpr_val[1]);
  950. /* Program chan number in regular sequence (SQ1) */
  951. val = stm32_adc_readl(adc, regs->sqr[1].reg);
  952. val &= ~regs->sqr[1].mask;
  953. val |= chan->channel << regs->sqr[1].shift;
  954. stm32_adc_writel(adc, regs->sqr[1].reg, val);
  955. /* Set regular sequence len (0 for 1 conversion) */
  956. stm32_adc_clr_bits(adc, regs->sqr[0].reg, regs->sqr[0].mask);
  957. /* Trigger detection disabled (conversion can be launched in SW) */
  958. stm32_adc_clr_bits(adc, regs->exten.reg, regs->exten.mask);
  959. stm32_adc_conv_irq_enable(adc);
  960. adc->cfg->start_conv(adc, false);
  961. timeout = wait_for_completion_interruptible_timeout(
  962. &adc->completion, STM32_ADC_TIMEOUT);
  963. if (timeout == 0) {
  964. ret = -ETIMEDOUT;
  965. } else if (timeout < 0) {
  966. ret = timeout;
  967. } else {
  968. *res = adc->buffer[0];
  969. ret = IIO_VAL_INT;
  970. }
  971. adc->cfg->stop_conv(adc);
  972. stm32_adc_conv_irq_disable(adc);
  973. if (adc->cfg->unprepare)
  974. adc->cfg->unprepare(adc);
  975. return ret;
  976. }
  977. static int stm32_adc_read_raw(struct iio_dev *indio_dev,
  978. struct iio_chan_spec const *chan,
  979. int *val, int *val2, long mask)
  980. {
  981. struct stm32_adc *adc = iio_priv(indio_dev);
  982. int ret;
  983. switch (mask) {
  984. case IIO_CHAN_INFO_RAW:
  985. ret = iio_device_claim_direct_mode(indio_dev);
  986. if (ret)
  987. return ret;
  988. if (chan->type == IIO_VOLTAGE)
  989. ret = stm32_adc_single_conv(indio_dev, chan, val);
  990. else
  991. ret = -EINVAL;
  992. iio_device_release_direct_mode(indio_dev);
  993. return ret;
  994. case IIO_CHAN_INFO_SCALE:
  995. if (chan->differential) {
  996. *val = adc->common->vref_mv * 2;
  997. *val2 = chan->scan_type.realbits;
  998. } else {
  999. *val = adc->common->vref_mv;
  1000. *val2 = chan->scan_type.realbits;
  1001. }
  1002. return IIO_VAL_FRACTIONAL_LOG2;
  1003. case IIO_CHAN_INFO_OFFSET:
  1004. if (chan->differential)
  1005. /* ADC_full_scale / 2 */
  1006. *val = -((1 << chan->scan_type.realbits) / 2);
  1007. else
  1008. *val = 0;
  1009. return IIO_VAL_INT;
  1010. default:
  1011. return -EINVAL;
  1012. }
  1013. }
  1014. static irqreturn_t stm32_adc_isr(int irq, void *data)
  1015. {
  1016. struct stm32_adc *adc = data;
  1017. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  1018. const struct stm32_adc_regspec *regs = adc->cfg->regs;
  1019. u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
  1020. if (status & regs->isr_eoc.mask) {
  1021. /* Reading DR also clears EOC status flag */
  1022. adc->buffer[adc->bufi] = stm32_adc_readw(adc, regs->dr);
  1023. if (iio_buffer_enabled(indio_dev)) {
  1024. adc->bufi++;
  1025. if (adc->bufi >= adc->num_conv) {
  1026. stm32_adc_conv_irq_disable(adc);
  1027. iio_trigger_poll(indio_dev->trig);
  1028. }
  1029. } else {
  1030. complete(&adc->completion);
  1031. }
  1032. return IRQ_HANDLED;
  1033. }
  1034. return IRQ_NONE;
  1035. }
  1036. /**
  1037. * stm32_adc_validate_trigger() - validate trigger for stm32 adc
  1038. * @indio_dev: IIO device
  1039. * @trig: new trigger
  1040. *
  1041. * Returns: 0 if trig matches one of the triggers registered by stm32 adc
  1042. * driver, -EINVAL otherwise.
  1043. */
  1044. static int stm32_adc_validate_trigger(struct iio_dev *indio_dev,
  1045. struct iio_trigger *trig)
  1046. {
  1047. return stm32_adc_get_trig_extsel(indio_dev, trig) < 0 ? -EINVAL : 0;
  1048. }
  1049. static int stm32_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
  1050. {
  1051. struct stm32_adc *adc = iio_priv(indio_dev);
  1052. unsigned int watermark = STM32_DMA_BUFFER_SIZE / 2;
  1053. unsigned int rx_buf_sz = STM32_DMA_BUFFER_SIZE;
  1054. /*
  1055. * dma cyclic transfers are used, buffer is split into two periods.
  1056. * There should be :
  1057. * - always one buffer (period) dma is working on
  1058. * - one buffer (period) driver can push with iio_trigger_poll().
  1059. */
  1060. watermark = min(watermark, val * (unsigned)(sizeof(u16)));
  1061. adc->rx_buf_sz = min(rx_buf_sz, watermark * 2 * adc->num_conv);
  1062. return 0;
  1063. }
  1064. static int stm32_adc_update_scan_mode(struct iio_dev *indio_dev,
  1065. const unsigned long *scan_mask)
  1066. {
  1067. struct stm32_adc *adc = iio_priv(indio_dev);
  1068. int ret;
  1069. adc->num_conv = bitmap_weight(scan_mask, indio_dev->masklength);
  1070. ret = stm32_adc_conf_scan_seq(indio_dev, scan_mask);
  1071. if (ret)
  1072. return ret;
  1073. return 0;
  1074. }
  1075. static int stm32_adc_of_xlate(struct iio_dev *indio_dev,
  1076. const struct of_phandle_args *iiospec)
  1077. {
  1078. int i;
  1079. for (i = 0; i < indio_dev->num_channels; i++)
  1080. if (indio_dev->channels[i].channel == iiospec->args[0])
  1081. return i;
  1082. return -EINVAL;
  1083. }
  1084. /**
  1085. * stm32_adc_debugfs_reg_access - read or write register value
  1086. *
  1087. * To read a value from an ADC register:
  1088. * echo [ADC reg offset] > direct_reg_access
  1089. * cat direct_reg_access
  1090. *
  1091. * To write a value in a ADC register:
  1092. * echo [ADC_reg_offset] [value] > direct_reg_access
  1093. */
  1094. static int stm32_adc_debugfs_reg_access(struct iio_dev *indio_dev,
  1095. unsigned reg, unsigned writeval,
  1096. unsigned *readval)
  1097. {
  1098. struct stm32_adc *adc = iio_priv(indio_dev);
  1099. if (!readval)
  1100. stm32_adc_writel(adc, reg, writeval);
  1101. else
  1102. *readval = stm32_adc_readl(adc, reg);
  1103. return 0;
  1104. }
  1105. static const struct iio_info stm32_adc_iio_info = {
  1106. .read_raw = stm32_adc_read_raw,
  1107. .validate_trigger = stm32_adc_validate_trigger,
  1108. .hwfifo_set_watermark = stm32_adc_set_watermark,
  1109. .update_scan_mode = stm32_adc_update_scan_mode,
  1110. .debugfs_reg_access = stm32_adc_debugfs_reg_access,
  1111. .of_xlate = stm32_adc_of_xlate,
  1112. };
  1113. static unsigned int stm32_adc_dma_residue(struct stm32_adc *adc)
  1114. {
  1115. struct dma_tx_state state;
  1116. enum dma_status status;
  1117. status = dmaengine_tx_status(adc->dma_chan,
  1118. adc->dma_chan->cookie,
  1119. &state);
  1120. if (status == DMA_IN_PROGRESS) {
  1121. /* Residue is size in bytes from end of buffer */
  1122. unsigned int i = adc->rx_buf_sz - state.residue;
  1123. unsigned int size;
  1124. /* Return available bytes */
  1125. if (i >= adc->bufi)
  1126. size = i - adc->bufi;
  1127. else
  1128. size = adc->rx_buf_sz + i - adc->bufi;
  1129. return size;
  1130. }
  1131. return 0;
  1132. }
  1133. static void stm32_adc_dma_buffer_done(void *data)
  1134. {
  1135. struct iio_dev *indio_dev = data;
  1136. iio_trigger_poll_chained(indio_dev->trig);
  1137. }
  1138. static int stm32_adc_dma_start(struct iio_dev *indio_dev)
  1139. {
  1140. struct stm32_adc *adc = iio_priv(indio_dev);
  1141. struct dma_async_tx_descriptor *desc;
  1142. dma_cookie_t cookie;
  1143. int ret;
  1144. if (!adc->dma_chan)
  1145. return 0;
  1146. dev_dbg(&indio_dev->dev, "%s size=%d watermark=%d\n", __func__,
  1147. adc->rx_buf_sz, adc->rx_buf_sz / 2);
  1148. /* Prepare a DMA cyclic transaction */
  1149. desc = dmaengine_prep_dma_cyclic(adc->dma_chan,
  1150. adc->rx_dma_buf,
  1151. adc->rx_buf_sz, adc->rx_buf_sz / 2,
  1152. DMA_DEV_TO_MEM,
  1153. DMA_PREP_INTERRUPT);
  1154. if (!desc)
  1155. return -EBUSY;
  1156. desc->callback = stm32_adc_dma_buffer_done;
  1157. desc->callback_param = indio_dev;
  1158. cookie = dmaengine_submit(desc);
  1159. ret = dma_submit_error(cookie);
  1160. if (ret) {
  1161. dmaengine_terminate_sync(adc->dma_chan);
  1162. return ret;
  1163. }
  1164. /* Issue pending DMA requests */
  1165. dma_async_issue_pending(adc->dma_chan);
  1166. return 0;
  1167. }
  1168. static int stm32_adc_buffer_postenable(struct iio_dev *indio_dev)
  1169. {
  1170. struct stm32_adc *adc = iio_priv(indio_dev);
  1171. int ret;
  1172. if (adc->cfg->prepare) {
  1173. ret = adc->cfg->prepare(adc);
  1174. if (ret)
  1175. return ret;
  1176. }
  1177. ret = stm32_adc_set_trig(indio_dev, indio_dev->trig);
  1178. if (ret) {
  1179. dev_err(&indio_dev->dev, "Can't set trigger\n");
  1180. goto err_unprepare;
  1181. }
  1182. ret = stm32_adc_dma_start(indio_dev);
  1183. if (ret) {
  1184. dev_err(&indio_dev->dev, "Can't start dma\n");
  1185. goto err_clr_trig;
  1186. }
  1187. ret = iio_triggered_buffer_postenable(indio_dev);
  1188. if (ret < 0)
  1189. goto err_stop_dma;
  1190. /* Reset adc buffer index */
  1191. adc->bufi = 0;
  1192. if (!adc->dma_chan)
  1193. stm32_adc_conv_irq_enable(adc);
  1194. adc->cfg->start_conv(adc, !!adc->dma_chan);
  1195. return 0;
  1196. err_stop_dma:
  1197. if (adc->dma_chan)
  1198. dmaengine_terminate_all(adc->dma_chan);
  1199. err_clr_trig:
  1200. stm32_adc_set_trig(indio_dev, NULL);
  1201. err_unprepare:
  1202. if (adc->cfg->unprepare)
  1203. adc->cfg->unprepare(adc);
  1204. return ret;
  1205. }
  1206. static int stm32_adc_buffer_predisable(struct iio_dev *indio_dev)
  1207. {
  1208. struct stm32_adc *adc = iio_priv(indio_dev);
  1209. int ret;
  1210. adc->cfg->stop_conv(adc);
  1211. if (!adc->dma_chan)
  1212. stm32_adc_conv_irq_disable(adc);
  1213. ret = iio_triggered_buffer_predisable(indio_dev);
  1214. if (ret < 0)
  1215. dev_err(&indio_dev->dev, "predisable failed\n");
  1216. if (adc->dma_chan)
  1217. dmaengine_terminate_sync(adc->dma_chan);
  1218. if (stm32_adc_set_trig(indio_dev, NULL))
  1219. dev_err(&indio_dev->dev, "Can't clear trigger\n");
  1220. if (adc->cfg->unprepare)
  1221. adc->cfg->unprepare(adc);
  1222. return ret;
  1223. }
  1224. static const struct iio_buffer_setup_ops stm32_adc_buffer_setup_ops = {
  1225. .postenable = &stm32_adc_buffer_postenable,
  1226. .predisable = &stm32_adc_buffer_predisable,
  1227. };
  1228. static irqreturn_t stm32_adc_trigger_handler(int irq, void *p)
  1229. {
  1230. struct iio_poll_func *pf = p;
  1231. struct iio_dev *indio_dev = pf->indio_dev;
  1232. struct stm32_adc *adc = iio_priv(indio_dev);
  1233. dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi);
  1234. if (!adc->dma_chan) {
  1235. /* reset buffer index */
  1236. adc->bufi = 0;
  1237. iio_push_to_buffers_with_timestamp(indio_dev, adc->buffer,
  1238. pf->timestamp);
  1239. } else {
  1240. int residue = stm32_adc_dma_residue(adc);
  1241. while (residue >= indio_dev->scan_bytes) {
  1242. u16 *buffer = (u16 *)&adc->rx_buf[adc->bufi];
  1243. iio_push_to_buffers_with_timestamp(indio_dev, buffer,
  1244. pf->timestamp);
  1245. residue -= indio_dev->scan_bytes;
  1246. adc->bufi += indio_dev->scan_bytes;
  1247. if (adc->bufi >= adc->rx_buf_sz)
  1248. adc->bufi = 0;
  1249. }
  1250. }
  1251. iio_trigger_notify_done(indio_dev->trig);
  1252. /* re-enable eoc irq */
  1253. if (!adc->dma_chan)
  1254. stm32_adc_conv_irq_enable(adc);
  1255. return IRQ_HANDLED;
  1256. }
  1257. static const struct iio_chan_spec_ext_info stm32_adc_ext_info[] = {
  1258. IIO_ENUM("trigger_polarity", IIO_SHARED_BY_ALL, &stm32_adc_trig_pol),
  1259. {
  1260. .name = "trigger_polarity_available",
  1261. .shared = IIO_SHARED_BY_ALL,
  1262. .read = iio_enum_available_read,
  1263. .private = (uintptr_t)&stm32_adc_trig_pol,
  1264. },
  1265. {},
  1266. };
  1267. static int stm32_adc_of_get_resolution(struct iio_dev *indio_dev)
  1268. {
  1269. struct device_node *node = indio_dev->dev.of_node;
  1270. struct stm32_adc *adc = iio_priv(indio_dev);
  1271. unsigned int i;
  1272. u32 res;
  1273. if (of_property_read_u32(node, "assigned-resolution-bits", &res))
  1274. res = adc->cfg->adc_info->resolutions[0];
  1275. for (i = 0; i < adc->cfg->adc_info->num_res; i++)
  1276. if (res == adc->cfg->adc_info->resolutions[i])
  1277. break;
  1278. if (i >= adc->cfg->adc_info->num_res) {
  1279. dev_err(&indio_dev->dev, "Bad resolution: %u bits\n", res);
  1280. return -EINVAL;
  1281. }
  1282. dev_dbg(&indio_dev->dev, "Using %u bits resolution\n", res);
  1283. adc->res = i;
  1284. return 0;
  1285. }
  1286. static void stm32_adc_smpr_init(struct stm32_adc *adc, int channel, u32 smp_ns)
  1287. {
  1288. const struct stm32_adc_regs *smpr = &adc->cfg->regs->smp_bits[channel];
  1289. u32 period_ns, shift = smpr->shift, mask = smpr->mask;
  1290. unsigned int smp, r = smpr->reg;
  1291. /* Determine sampling time (ADC clock cycles) */
  1292. period_ns = NSEC_PER_SEC / adc->common->rate;
  1293. for (smp = 0; smp <= STM32_ADC_MAX_SMP; smp++)
  1294. if ((period_ns * adc->cfg->smp_cycles[smp]) >= smp_ns)
  1295. break;
  1296. if (smp > STM32_ADC_MAX_SMP)
  1297. smp = STM32_ADC_MAX_SMP;
  1298. /* pre-build sampling time registers (e.g. smpr1, smpr2) */
  1299. adc->smpr_val[r] = (adc->smpr_val[r] & ~mask) | (smp << shift);
  1300. }
  1301. static void stm32_adc_chan_init_one(struct iio_dev *indio_dev,
  1302. struct iio_chan_spec *chan, u32 vinp,
  1303. u32 vinn, int scan_index, bool differential)
  1304. {
  1305. struct stm32_adc *adc = iio_priv(indio_dev);
  1306. char *name = adc->chan_name[vinp];
  1307. chan->type = IIO_VOLTAGE;
  1308. chan->channel = vinp;
  1309. if (differential) {
  1310. chan->differential = 1;
  1311. chan->channel2 = vinn;
  1312. snprintf(name, STM32_ADC_CH_SZ, "in%d-in%d", vinp, vinn);
  1313. } else {
  1314. snprintf(name, STM32_ADC_CH_SZ, "in%d", vinp);
  1315. }
  1316. chan->datasheet_name = name;
  1317. chan->scan_index = scan_index;
  1318. chan->indexed = 1;
  1319. chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
  1320. chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) |
  1321. BIT(IIO_CHAN_INFO_OFFSET);
  1322. chan->scan_type.sign = 'u';
  1323. chan->scan_type.realbits = adc->cfg->adc_info->resolutions[adc->res];
  1324. chan->scan_type.storagebits = 16;
  1325. chan->ext_info = stm32_adc_ext_info;
  1326. /* pre-build selected channels mask */
  1327. adc->pcsel |= BIT(chan->channel);
  1328. if (differential) {
  1329. /* pre-build diff channels mask */
  1330. adc->difsel |= BIT(chan->channel);
  1331. /* Also add negative input to pre-selected channels */
  1332. adc->pcsel |= BIT(chan->channel2);
  1333. }
  1334. }
  1335. static int stm32_adc_chan_of_init(struct iio_dev *indio_dev)
  1336. {
  1337. struct device_node *node = indio_dev->dev.of_node;
  1338. struct stm32_adc *adc = iio_priv(indio_dev);
  1339. const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
  1340. struct stm32_adc_diff_channel diff[STM32_ADC_CH_MAX];
  1341. struct property *prop;
  1342. const __be32 *cur;
  1343. struct iio_chan_spec *channels;
  1344. int scan_index = 0, num_channels = 0, num_diff = 0, ret, i;
  1345. u32 val, smp = 0;
  1346. ret = of_property_count_u32_elems(node, "st,adc-channels");
  1347. if (ret > adc_info->max_channels) {
  1348. dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");
  1349. return -EINVAL;
  1350. } else if (ret > 0) {
  1351. num_channels += ret;
  1352. }
  1353. ret = of_property_count_elems_of_size(node, "st,adc-diff-channels",
  1354. sizeof(*diff));
  1355. if (ret > adc_info->max_channels) {
  1356. dev_err(&indio_dev->dev, "Bad st,adc-diff-channels?\n");
  1357. return -EINVAL;
  1358. } else if (ret > 0) {
  1359. int size = ret * sizeof(*diff) / sizeof(u32);
  1360. num_diff = ret;
  1361. num_channels += ret;
  1362. ret = of_property_read_u32_array(node, "st,adc-diff-channels",
  1363. (u32 *)diff, size);
  1364. if (ret)
  1365. return ret;
  1366. }
  1367. if (!num_channels) {
  1368. dev_err(&indio_dev->dev, "No channels configured\n");
  1369. return -ENODATA;
  1370. }
  1371. /* Optional sample time is provided either for each, or all channels */
  1372. ret = of_property_count_u32_elems(node, "st,min-sample-time-nsecs");
  1373. if (ret > 1 && ret != num_channels) {
  1374. dev_err(&indio_dev->dev, "Invalid st,min-sample-time-nsecs\n");
  1375. return -EINVAL;
  1376. }
  1377. channels = devm_kcalloc(&indio_dev->dev, num_channels,
  1378. sizeof(struct iio_chan_spec), GFP_KERNEL);
  1379. if (!channels)
  1380. return -ENOMEM;
  1381. of_property_for_each_u32(node, "st,adc-channels", prop, cur, val) {
  1382. if (val >= adc_info->max_channels) {
  1383. dev_err(&indio_dev->dev, "Invalid channel %d\n", val);
  1384. return -EINVAL;
  1385. }
  1386. /* Channel can't be configured both as single-ended & diff */
  1387. for (i = 0; i < num_diff; i++) {
  1388. if (val == diff[i].vinp) {
  1389. dev_err(&indio_dev->dev,
  1390. "channel %d miss-configured\n", val);
  1391. return -EINVAL;
  1392. }
  1393. }
  1394. stm32_adc_chan_init_one(indio_dev, &channels[scan_index], val,
  1395. 0, scan_index, false);
  1396. scan_index++;
  1397. }
  1398. for (i = 0; i < num_diff; i++) {
  1399. if (diff[i].vinp >= adc_info->max_channels ||
  1400. diff[i].vinn >= adc_info->max_channels) {
  1401. dev_err(&indio_dev->dev, "Invalid channel in%d-in%d\n",
  1402. diff[i].vinp, diff[i].vinn);
  1403. return -EINVAL;
  1404. }
  1405. stm32_adc_chan_init_one(indio_dev, &channels[scan_index],
  1406. diff[i].vinp, diff[i].vinn, scan_index,
  1407. true);
  1408. scan_index++;
  1409. }
  1410. for (i = 0; i < scan_index; i++) {
  1411. /*
  1412. * Using of_property_read_u32_index(), smp value will only be
  1413. * modified if valid u32 value can be decoded. This allows to
  1414. * get either no value, 1 shared value for all indexes, or one
  1415. * value per channel.
  1416. */
  1417. of_property_read_u32_index(node, "st,min-sample-time-nsecs",
  1418. i, &smp);
  1419. /* Prepare sampling time settings */
  1420. stm32_adc_smpr_init(adc, channels[i].channel, smp);
  1421. }
  1422. indio_dev->num_channels = scan_index;
  1423. indio_dev->channels = channels;
  1424. return 0;
  1425. }
  1426. static int stm32_adc_dma_request(struct iio_dev *indio_dev)
  1427. {
  1428. struct stm32_adc *adc = iio_priv(indio_dev);
  1429. struct dma_slave_config config;
  1430. int ret;
  1431. adc->dma_chan = dma_request_slave_channel(&indio_dev->dev, "rx");
  1432. if (!adc->dma_chan)
  1433. return 0;
  1434. adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
  1435. STM32_DMA_BUFFER_SIZE,
  1436. &adc->rx_dma_buf, GFP_KERNEL);
  1437. if (!adc->rx_buf) {
  1438. ret = -ENOMEM;
  1439. goto err_release;
  1440. }
  1441. /* Configure DMA channel to read data register */
  1442. memset(&config, 0, sizeof(config));
  1443. config.src_addr = (dma_addr_t)adc->common->phys_base;
  1444. config.src_addr += adc->offset + adc->cfg->regs->dr;
  1445. config.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
  1446. ret = dmaengine_slave_config(adc->dma_chan, &config);
  1447. if (ret)
  1448. goto err_free;
  1449. return 0;
  1450. err_free:
  1451. dma_free_coherent(adc->dma_chan->device->dev, STM32_DMA_BUFFER_SIZE,
  1452. adc->rx_buf, adc->rx_dma_buf);
  1453. err_release:
  1454. dma_release_channel(adc->dma_chan);
  1455. return ret;
  1456. }
  1457. static int stm32_adc_probe(struct platform_device *pdev)
  1458. {
  1459. struct iio_dev *indio_dev;
  1460. struct device *dev = &pdev->dev;
  1461. struct stm32_adc *adc;
  1462. int ret;
  1463. if (!pdev->dev.of_node)
  1464. return -ENODEV;
  1465. indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc));
  1466. if (!indio_dev)
  1467. return -ENOMEM;
  1468. adc = iio_priv(indio_dev);
  1469. adc->common = dev_get_drvdata(pdev->dev.parent);
  1470. spin_lock_init(&adc->lock);
  1471. init_completion(&adc->completion);
  1472. adc->cfg = (const struct stm32_adc_cfg *)
  1473. of_match_device(dev->driver->of_match_table, dev)->data;
  1474. indio_dev->name = dev_name(&pdev->dev);
  1475. indio_dev->dev.parent = &pdev->dev;
  1476. indio_dev->dev.of_node = pdev->dev.of_node;
  1477. indio_dev->info = &stm32_adc_iio_info;
  1478. indio_dev->modes = INDIO_DIRECT_MODE | INDIO_HARDWARE_TRIGGERED;
  1479. platform_set_drvdata(pdev, adc);
  1480. ret = of_property_read_u32(pdev->dev.of_node, "reg", &adc->offset);
  1481. if (ret != 0) {
  1482. dev_err(&pdev->dev, "missing reg property\n");
  1483. return -EINVAL;
  1484. }
  1485. adc->irq = platform_get_irq(pdev, 0);
  1486. if (adc->irq < 0) {
  1487. dev_err(&pdev->dev, "failed to get irq\n");
  1488. return adc->irq;
  1489. }
  1490. ret = devm_request_irq(&pdev->dev, adc->irq, stm32_adc_isr,
  1491. 0, pdev->name, adc);
  1492. if (ret) {
  1493. dev_err(&pdev->dev, "failed to request IRQ\n");
  1494. return ret;
  1495. }
  1496. adc->clk = devm_clk_get(&pdev->dev, NULL);
  1497. if (IS_ERR(adc->clk)) {
  1498. ret = PTR_ERR(adc->clk);
  1499. if (ret == -ENOENT && !adc->cfg->clk_required) {
  1500. adc->clk = NULL;
  1501. } else {
  1502. dev_err(&pdev->dev, "Can't get clock\n");
  1503. return ret;
  1504. }
  1505. }
  1506. if (adc->clk) {
  1507. ret = clk_prepare_enable(adc->clk);
  1508. if (ret < 0) {
  1509. dev_err(&pdev->dev, "clk enable failed\n");
  1510. return ret;
  1511. }
  1512. }
  1513. ret = stm32_adc_of_get_resolution(indio_dev);
  1514. if (ret < 0)
  1515. goto err_clk_disable;
  1516. stm32_adc_set_res(adc);
  1517. if (adc->cfg->selfcalib) {
  1518. ret = adc->cfg->selfcalib(adc);
  1519. if (ret)
  1520. goto err_clk_disable;
  1521. }
  1522. ret = stm32_adc_chan_of_init(indio_dev);
  1523. if (ret < 0)
  1524. goto err_clk_disable;
  1525. ret = stm32_adc_dma_request(indio_dev);
  1526. if (ret < 0)
  1527. goto err_clk_disable;
  1528. ret = iio_triggered_buffer_setup(indio_dev,
  1529. &iio_pollfunc_store_time,
  1530. &stm32_adc_trigger_handler,
  1531. &stm32_adc_buffer_setup_ops);
  1532. if (ret) {
  1533. dev_err(&pdev->dev, "buffer setup failed\n");
  1534. goto err_dma_disable;
  1535. }
  1536. ret = iio_device_register(indio_dev);
  1537. if (ret) {
  1538. dev_err(&pdev->dev, "iio dev register failed\n");
  1539. goto err_buffer_cleanup;
  1540. }
  1541. return 0;
  1542. err_buffer_cleanup:
  1543. iio_triggered_buffer_cleanup(indio_dev);
  1544. err_dma_disable:
  1545. if (adc->dma_chan) {
  1546. dma_free_coherent(adc->dma_chan->device->dev,
  1547. STM32_DMA_BUFFER_SIZE,
  1548. adc->rx_buf, adc->rx_dma_buf);
  1549. dma_release_channel(adc->dma_chan);
  1550. }
  1551. err_clk_disable:
  1552. if (adc->clk)
  1553. clk_disable_unprepare(adc->clk);
  1554. return ret;
  1555. }
  1556. static int stm32_adc_remove(struct platform_device *pdev)
  1557. {
  1558. struct stm32_adc *adc = platform_get_drvdata(pdev);
  1559. struct iio_dev *indio_dev = iio_priv_to_dev(adc);
  1560. iio_device_unregister(indio_dev);
  1561. iio_triggered_buffer_cleanup(indio_dev);
  1562. if (adc->dma_chan) {
  1563. dma_free_coherent(adc->dma_chan->device->dev,
  1564. STM32_DMA_BUFFER_SIZE,
  1565. adc->rx_buf, adc->rx_dma_buf);
  1566. dma_release_channel(adc->dma_chan);
  1567. }
  1568. if (adc->clk)
  1569. clk_disable_unprepare(adc->clk);
  1570. return 0;
  1571. }
  1572. static const struct stm32_adc_cfg stm32f4_adc_cfg = {
  1573. .regs = &stm32f4_adc_regspec,
  1574. .adc_info = &stm32f4_adc_info,
  1575. .trigs = stm32f4_adc_trigs,
  1576. .clk_required = true,
  1577. .start_conv = stm32f4_adc_start_conv,
  1578. .stop_conv = stm32f4_adc_stop_conv,
  1579. .smp_cycles = stm32f4_adc_smp_cycles,
  1580. };
  1581. static const struct stm32_adc_cfg stm32h7_adc_cfg = {
  1582. .regs = &stm32h7_adc_regspec,
  1583. .adc_info = &stm32h7_adc_info,
  1584. .trigs = stm32h7_adc_trigs,
  1585. .selfcalib = stm32h7_adc_selfcalib,
  1586. .start_conv = stm32h7_adc_start_conv,
  1587. .stop_conv = stm32h7_adc_stop_conv,
  1588. .prepare = stm32h7_adc_prepare,
  1589. .unprepare = stm32h7_adc_unprepare,
  1590. .smp_cycles = stm32h7_adc_smp_cycles,
  1591. };
  1592. static const struct stm32_adc_cfg stm32mp1_adc_cfg = {
  1593. .regs = &stm32h7_adc_regspec,
  1594. .adc_info = &stm32h7_adc_info,
  1595. .trigs = stm32h7_adc_trigs,
  1596. .has_vregready = true,
  1597. .selfcalib = stm32h7_adc_selfcalib,
  1598. .start_conv = stm32h7_adc_start_conv,
  1599. .stop_conv = stm32h7_adc_stop_conv,
  1600. .prepare = stm32h7_adc_prepare,
  1601. .unprepare = stm32h7_adc_unprepare,
  1602. .smp_cycles = stm32h7_adc_smp_cycles,
  1603. };
  1604. static const struct of_device_id stm32_adc_of_match[] = {
  1605. { .compatible = "st,stm32f4-adc", .data = (void *)&stm32f4_adc_cfg },
  1606. { .compatible = "st,stm32h7-adc", .data = (void *)&stm32h7_adc_cfg },
  1607. { .compatible = "st,stm32mp1-adc", .data = (void *)&stm32mp1_adc_cfg },
  1608. {},
  1609. };
  1610. MODULE_DEVICE_TABLE(of, stm32_adc_of_match);
  1611. static struct platform_driver stm32_adc_driver = {
  1612. .probe = stm32_adc_probe,
  1613. .remove = stm32_adc_remove,
  1614. .driver = {
  1615. .name = "stm32-adc",
  1616. .of_match_table = stm32_adc_of_match,
  1617. },
  1618. };
  1619. module_platform_driver(stm32_adc_driver);
  1620. MODULE_AUTHOR("Fabrice Gasnier <fabrice.gasnier@st.com>");
  1621. MODULE_DESCRIPTION("STMicroelectronics STM32 ADC IIO driver");
  1622. MODULE_LICENSE("GPL v2");
  1623. MODULE_ALIAS("platform:stm32-adc");