stm32-adc.c 55 KB

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