stm32-adc.c 54 KB

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