stm32-adc.c 53 KB

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