stm32-adc.c 78 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800
  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/array_size.h>
  9. #include <linux/clk.h>
  10. #include <linux/debugfs.h>
  11. #include <linux/delay.h>
  12. #include <linux/dma-mapping.h>
  13. #include <linux/dmaengine.h>
  14. #include <linux/iio/iio.h>
  15. #include <linux/iio/buffer.h>
  16. #include <linux/iio/timer/stm32-lptim-trigger.h>
  17. #include <linux/iio/timer/stm32-timer-trigger.h>
  18. #include <linux/iio/trigger.h>
  19. #include <linux/iio/trigger_consumer.h>
  20. #include <linux/iio/triggered_buffer.h>
  21. #include <linux/interrupt.h>
  22. #include <linux/io.h>
  23. #include <linux/iopoll.h>
  24. #include <linux/module.h>
  25. #include <linux/mod_devicetable.h>
  26. #include <linux/nvmem-consumer.h>
  27. #include <linux/platform_device.h>
  28. #include <linux/pm_runtime.h>
  29. #include <linux/property.h>
  30. #include "stm32-adc-core.h"
  31. /* Number of linear calibration shadow registers / LINCALRDYW control bits */
  32. #define STM32H7_LINCALFACT_NUM 6
  33. /* BOOST bit must be set on STM32H7 when ADC clock is above 20MHz */
  34. #define STM32H7_BOOST_CLKRATE 20000000UL
  35. #define STM32_ADC_CH_MAX 20 /* max number of channels */
  36. #define STM32_ADC_CH_SZ 16 /* max channel name size */
  37. #define STM32_ADC_MAX_SQ 16 /* SQ1..SQ16 */
  38. #define STM32_ADC_MAX_SMP 7 /* SMPx range is [0..7] */
  39. #define STM32_ADC_TIMEOUT_US 100000
  40. #define STM32_ADC_TIMEOUT (msecs_to_jiffies(STM32_ADC_TIMEOUT_US / 1000))
  41. #define STM32_ADC_HW_STOP_DELAY_MS 100
  42. #define STM32_ADC_VREFINT_VOLTAGE 3300
  43. #define STM32_DMA_BUFFER_SIZE PAGE_SIZE
  44. /* External trigger enable */
  45. enum stm32_adc_exten {
  46. STM32_EXTEN_SWTRIG,
  47. STM32_EXTEN_HWTRIG_RISING_EDGE,
  48. STM32_EXTEN_HWTRIG_FALLING_EDGE,
  49. STM32_EXTEN_HWTRIG_BOTH_EDGES,
  50. };
  51. /* extsel - trigger mux selection value */
  52. enum stm32_adc_extsel {
  53. STM32_EXT0,
  54. STM32_EXT1,
  55. STM32_EXT2,
  56. STM32_EXT3,
  57. STM32_EXT4,
  58. STM32_EXT5,
  59. STM32_EXT6,
  60. STM32_EXT7,
  61. STM32_EXT8,
  62. STM32_EXT9,
  63. STM32_EXT10,
  64. STM32_EXT11,
  65. STM32_EXT12,
  66. STM32_EXT13,
  67. STM32_EXT14,
  68. STM32_EXT15,
  69. STM32_EXT16,
  70. STM32_EXT17,
  71. STM32_EXT18,
  72. STM32_EXT19,
  73. STM32_EXT20,
  74. };
  75. enum stm32_adc_int_ch {
  76. STM32_ADC_INT_CH_NONE = -1,
  77. STM32_ADC_INT_CH_VDDCORE,
  78. STM32_ADC_INT_CH_VDDCPU,
  79. STM32_ADC_INT_CH_VDDQ_DDR,
  80. STM32_ADC_INT_CH_VREFINT,
  81. STM32_ADC_INT_CH_VBAT,
  82. STM32_ADC_INT_CH_NB,
  83. };
  84. /**
  85. * struct stm32_adc_ic - ADC internal channels
  86. * @name: name of the internal channel
  87. * @idx: internal channel enum index
  88. */
  89. struct stm32_adc_ic {
  90. const char *name;
  91. u32 idx;
  92. };
  93. static const struct stm32_adc_ic stm32_adc_ic[STM32_ADC_INT_CH_NB] = {
  94. { "vddcore", STM32_ADC_INT_CH_VDDCORE },
  95. { "vddcpu", STM32_ADC_INT_CH_VDDCPU },
  96. { "vddq_ddr", STM32_ADC_INT_CH_VDDQ_DDR },
  97. { "vrefint", STM32_ADC_INT_CH_VREFINT },
  98. { "vbat", STM32_ADC_INT_CH_VBAT },
  99. };
  100. /**
  101. * struct stm32_adc_trig_info - ADC trigger info
  102. * @name: name of the trigger, corresponding to its source
  103. * @extsel: trigger selection
  104. */
  105. struct stm32_adc_trig_info {
  106. const char *name;
  107. enum stm32_adc_extsel extsel;
  108. };
  109. /**
  110. * struct stm32_adc_calib - optional adc calibration data
  111. * @lincalfact: Linearity calibration factor
  112. * @lincal_saved: Indicates that linear calibration factors are saved
  113. */
  114. struct stm32_adc_calib {
  115. u32 lincalfact[STM32H7_LINCALFACT_NUM];
  116. bool lincal_saved;
  117. };
  118. /**
  119. * struct stm32_adc_regs - stm32 ADC misc registers & bitfield desc
  120. * @reg: register offset
  121. * @mask: bitfield mask
  122. * @shift: left shift
  123. */
  124. struct stm32_adc_regs {
  125. int reg;
  126. int mask;
  127. int shift;
  128. };
  129. /**
  130. * struct stm32_adc_vrefint - stm32 ADC internal reference voltage data
  131. * @vrefint_cal: vrefint calibration value from nvmem
  132. * @vrefint_data: vrefint actual value
  133. */
  134. struct stm32_adc_vrefint {
  135. u32 vrefint_cal;
  136. u32 vrefint_data;
  137. };
  138. /**
  139. * struct stm32_adc_regspec - stm32 registers definition
  140. * @dr: data register offset
  141. * @ier_eoc: interrupt enable register & eocie bitfield
  142. * @ier_ovr: interrupt enable register & overrun bitfield
  143. * @isr_eoc: interrupt status register & eoc bitfield
  144. * @isr_ovr: interrupt status register & overrun bitfield
  145. * @sqr: reference to sequence registers array
  146. * @exten: trigger control register & bitfield
  147. * @extsel: trigger selection register & bitfield
  148. * @res: resolution selection register & bitfield
  149. * @difsel: differential mode selection register & bitfield
  150. * @smpr: smpr1 & smpr2 registers offset array
  151. * @smp_bits: smpr1 & smpr2 index and bitfields
  152. * @or_vddcore: option register & vddcore bitfield
  153. * @or_vddcpu: option register & vddcpu bitfield
  154. * @or_vddq_ddr: option register & vddq_ddr bitfield
  155. * @ccr_vbat: common register & vbat bitfield
  156. * @ccr_vref: common register & vrefint bitfield
  157. */
  158. struct stm32_adc_regspec {
  159. const u32 dr;
  160. const struct stm32_adc_regs ier_eoc;
  161. const struct stm32_adc_regs ier_ovr;
  162. const struct stm32_adc_regs isr_eoc;
  163. const struct stm32_adc_regs isr_ovr;
  164. const struct stm32_adc_regs *sqr;
  165. const struct stm32_adc_regs exten;
  166. const struct stm32_adc_regs extsel;
  167. const struct stm32_adc_regs res;
  168. const struct stm32_adc_regs difsel;
  169. const u32 smpr[2];
  170. const struct stm32_adc_regs *smp_bits;
  171. const struct stm32_adc_regs or_vddcore;
  172. const struct stm32_adc_regs or_vddcpu;
  173. const struct stm32_adc_regs or_vddq_ddr;
  174. const struct stm32_adc_regs ccr_vbat;
  175. const struct stm32_adc_regs ccr_vref;
  176. };
  177. struct stm32_adc;
  178. /**
  179. * struct stm32_adc_cfg - stm32 compatible configuration data
  180. * @regs: registers descriptions
  181. * @adc_info: per instance input channels definitions
  182. * @trigs: external trigger sources
  183. * @clk_required: clock is required
  184. * @has_vregready: vregready status flag presence
  185. * @has_boostmode: boost mode support flag
  186. * @has_linearcal: linear calibration support flag
  187. * @has_presel: channel preselection support flag
  188. * @has_oversampling: oversampling support flag
  189. * @prepare: optional prepare routine (power-up, enable)
  190. * @start_conv: routine to start conversions
  191. * @stop_conv: routine to stop conversions
  192. * @unprepare: optional unprepare routine (disable, power-down)
  193. * @irq_clear: routine to clear irqs
  194. * @set_ovs: routine to set oversampling configuration
  195. * @smp_cycles: programmable sampling time (ADC clock cycles)
  196. * @ts_int_ch: pointer to array of internal channels minimum sampling time in ns
  197. */
  198. struct stm32_adc_cfg {
  199. const struct stm32_adc_regspec *regs;
  200. const struct stm32_adc_info *adc_info;
  201. const struct stm32_adc_trig_info *trigs;
  202. bool clk_required;
  203. bool has_vregready;
  204. bool has_boostmode;
  205. bool has_linearcal;
  206. bool has_presel;
  207. bool has_oversampling;
  208. int (*prepare)(struct iio_dev *);
  209. void (*start_conv)(struct iio_dev *, bool dma);
  210. void (*stop_conv)(struct iio_dev *);
  211. void (*unprepare)(struct iio_dev *);
  212. void (*irq_clear)(struct iio_dev *indio_dev, u32 msk);
  213. void (*set_ovs)(struct iio_dev *indio_dev, u32 ovs_idx);
  214. const unsigned int *smp_cycles;
  215. const unsigned int *ts_int_ch;
  216. };
  217. /**
  218. * struct stm32_adc - private data of each ADC IIO instance
  219. * @common: reference to ADC block common data
  220. * @offset: ADC instance register offset in ADC block
  221. * @cfg: compatible configuration data
  222. * @completion: end of single conversion completion
  223. * @buffer: data buffer + 8 bytes for timestamp if enabled
  224. * @clk: clock for this adc instance
  225. * @irq: interrupt for this adc instance
  226. * @lock: spinlock
  227. * @bufi: data buffer index
  228. * @num_conv: expected number of scan conversions
  229. * @res: data resolution (e.g. RES bitfield value)
  230. * @trigger_polarity: external trigger polarity (e.g. exten)
  231. * @dma_chan: dma channel
  232. * @rx_buf: dma rx buffer cpu address
  233. * @rx_dma_buf: dma rx buffer bus address
  234. * @rx_buf_sz: dma rx buffer size
  235. * @difsel: bitmask to set single-ended/differential channel
  236. * @pcsel: bitmask to preselect channels on some devices
  237. * @smpr_val: sampling time settings (e.g. smpr1 / smpr2)
  238. * @cal: optional calibration data on some devices
  239. * @vrefint: internal reference voltage data
  240. * @chan_name: channel name array
  241. * @num_diff: number of differential channels
  242. * @int_ch: internal channel indexes array
  243. * @nsmps: number of channels with optional sample time
  244. * @ovs_idx: current oversampling ratio index (in oversampling array)
  245. */
  246. struct stm32_adc {
  247. struct stm32_adc_common *common;
  248. u32 offset;
  249. const struct stm32_adc_cfg *cfg;
  250. struct completion completion;
  251. u16 buffer[STM32_ADC_MAX_SQ + 4] __aligned(8);
  252. struct clk *clk;
  253. int irq;
  254. spinlock_t lock; /* interrupt lock */
  255. unsigned int bufi;
  256. unsigned int num_conv;
  257. u32 res;
  258. u32 trigger_polarity;
  259. struct dma_chan *dma_chan;
  260. u8 *rx_buf;
  261. dma_addr_t rx_dma_buf;
  262. unsigned int rx_buf_sz;
  263. u32 difsel;
  264. u32 pcsel;
  265. u32 smpr_val[2];
  266. struct stm32_adc_calib cal;
  267. struct stm32_adc_vrefint vrefint;
  268. char chan_name[STM32_ADC_CH_MAX][STM32_ADC_CH_SZ];
  269. u32 num_diff;
  270. int int_ch[STM32_ADC_INT_CH_NB];
  271. int nsmps;
  272. int ovs_idx;
  273. };
  274. struct stm32_adc_diff_channel {
  275. u32 vinp;
  276. u32 vinn;
  277. };
  278. /**
  279. * struct stm32_adc_info - stm32 ADC, per instance config data
  280. * @max_channels: Number of channels
  281. * @resolutions: available resolutions
  282. * @oversampling: available oversampling ratios
  283. * @num_res: number of available resolutions
  284. * @num_ovs: number of available oversampling ratios
  285. */
  286. struct stm32_adc_info {
  287. int max_channels;
  288. const unsigned int *resolutions;
  289. const unsigned int *oversampling;
  290. const unsigned int num_res;
  291. const unsigned int num_ovs;
  292. };
  293. static const unsigned int stm32h7_adc_oversampling_avail[] = {
  294. 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024,
  295. };
  296. static const unsigned int stm32mp13_adc_oversampling_avail[] = {
  297. 1, 2, 4, 8, 16, 32, 64, 128, 256,
  298. };
  299. static const unsigned int stm32f4_adc_resolutions[] = {
  300. /* sorted values so the index matches RES[1:0] in STM32F4_ADC_CR1 */
  301. 12, 10, 8, 6,
  302. };
  303. /* stm32f4 can have up to 16 channels */
  304. static const struct stm32_adc_info stm32f4_adc_info = {
  305. .max_channels = 16,
  306. .resolutions = stm32f4_adc_resolutions,
  307. .num_res = ARRAY_SIZE(stm32f4_adc_resolutions),
  308. };
  309. static const unsigned int stm32h7_adc_resolutions[] = {
  310. /* sorted values so the index matches RES[2:0] in STM32H7_ADC_CFGR */
  311. 16, 14, 12, 10, 8,
  312. };
  313. /* stm32h7 can have up to 20 channels */
  314. static const struct stm32_adc_info stm32h7_adc_info = {
  315. .max_channels = STM32_ADC_CH_MAX,
  316. .resolutions = stm32h7_adc_resolutions,
  317. .oversampling = stm32h7_adc_oversampling_avail,
  318. .num_res = ARRAY_SIZE(stm32h7_adc_resolutions),
  319. .num_ovs = ARRAY_SIZE(stm32h7_adc_oversampling_avail),
  320. };
  321. /* stm32mp13 can have up to 19 channels */
  322. static const struct stm32_adc_info stm32mp13_adc_info = {
  323. .max_channels = 19,
  324. .resolutions = stm32f4_adc_resolutions,
  325. .oversampling = stm32mp13_adc_oversampling_avail,
  326. .num_res = ARRAY_SIZE(stm32f4_adc_resolutions),
  327. .num_ovs = ARRAY_SIZE(stm32mp13_adc_oversampling_avail),
  328. };
  329. /*
  330. * stm32f4_sq - describe regular sequence registers
  331. * - L: sequence len (register & bit field)
  332. * - SQ1..SQ16: sequence entries (register & bit field)
  333. */
  334. static const struct stm32_adc_regs stm32f4_sq[STM32_ADC_MAX_SQ + 1] = {
  335. /* L: len bit field description to be kept as first element */
  336. { STM32F4_ADC_SQR1, GENMASK(23, 20), 20 },
  337. /* SQ1..SQ16 registers & bit fields (reg, mask, shift) */
  338. { STM32F4_ADC_SQR3, GENMASK(4, 0), 0 },
  339. { STM32F4_ADC_SQR3, GENMASK(9, 5), 5 },
  340. { STM32F4_ADC_SQR3, GENMASK(14, 10), 10 },
  341. { STM32F4_ADC_SQR3, GENMASK(19, 15), 15 },
  342. { STM32F4_ADC_SQR3, GENMASK(24, 20), 20 },
  343. { STM32F4_ADC_SQR3, GENMASK(29, 25), 25 },
  344. { STM32F4_ADC_SQR2, GENMASK(4, 0), 0 },
  345. { STM32F4_ADC_SQR2, GENMASK(9, 5), 5 },
  346. { STM32F4_ADC_SQR2, GENMASK(14, 10), 10 },
  347. { STM32F4_ADC_SQR2, GENMASK(19, 15), 15 },
  348. { STM32F4_ADC_SQR2, GENMASK(24, 20), 20 },
  349. { STM32F4_ADC_SQR2, GENMASK(29, 25), 25 },
  350. { STM32F4_ADC_SQR1, GENMASK(4, 0), 0 },
  351. { STM32F4_ADC_SQR1, GENMASK(9, 5), 5 },
  352. { STM32F4_ADC_SQR1, GENMASK(14, 10), 10 },
  353. { STM32F4_ADC_SQR1, GENMASK(19, 15), 15 },
  354. };
  355. /* STM32F4 external trigger sources for all instances */
  356. static const struct stm32_adc_trig_info stm32f4_adc_trigs[] = {
  357. { TIM1_CH1, STM32_EXT0 },
  358. { TIM1_CH2, STM32_EXT1 },
  359. { TIM1_CH3, STM32_EXT2 },
  360. { TIM2_CH2, STM32_EXT3 },
  361. { TIM2_CH3, STM32_EXT4 },
  362. { TIM2_CH4, STM32_EXT5 },
  363. { TIM2_TRGO, STM32_EXT6 },
  364. { TIM3_CH1, STM32_EXT7 },
  365. { TIM3_TRGO, STM32_EXT8 },
  366. { TIM4_CH4, STM32_EXT9 },
  367. { TIM5_CH1, STM32_EXT10 },
  368. { TIM5_CH2, STM32_EXT11 },
  369. { TIM5_CH3, STM32_EXT12 },
  370. { TIM8_CH1, STM32_EXT13 },
  371. { TIM8_TRGO, STM32_EXT14 },
  372. {}, /* sentinel */
  373. };
  374. /*
  375. * stm32f4_smp_bits[] - describe sampling time register index & bit fields
  376. * Sorted so it can be indexed by channel number.
  377. */
  378. static const struct stm32_adc_regs stm32f4_smp_bits[] = {
  379. /* STM32F4_ADC_SMPR2: smpr[] index, mask, shift for SMP0 to SMP9 */
  380. { 1, GENMASK(2, 0), 0 },
  381. { 1, GENMASK(5, 3), 3 },
  382. { 1, GENMASK(8, 6), 6 },
  383. { 1, GENMASK(11, 9), 9 },
  384. { 1, GENMASK(14, 12), 12 },
  385. { 1, GENMASK(17, 15), 15 },
  386. { 1, GENMASK(20, 18), 18 },
  387. { 1, GENMASK(23, 21), 21 },
  388. { 1, GENMASK(26, 24), 24 },
  389. { 1, GENMASK(29, 27), 27 },
  390. /* STM32F4_ADC_SMPR1, smpr[] index, mask, shift for SMP10 to SMP18 */
  391. { 0, GENMASK(2, 0), 0 },
  392. { 0, GENMASK(5, 3), 3 },
  393. { 0, GENMASK(8, 6), 6 },
  394. { 0, GENMASK(11, 9), 9 },
  395. { 0, GENMASK(14, 12), 12 },
  396. { 0, GENMASK(17, 15), 15 },
  397. { 0, GENMASK(20, 18), 18 },
  398. { 0, GENMASK(23, 21), 21 },
  399. { 0, GENMASK(26, 24), 24 },
  400. };
  401. /* STM32F4 programmable sampling time (ADC clock cycles) */
  402. static const unsigned int stm32f4_adc_smp_cycles[STM32_ADC_MAX_SMP + 1] = {
  403. 3, 15, 28, 56, 84, 112, 144, 480,
  404. };
  405. static const struct stm32_adc_regspec stm32f4_adc_regspec = {
  406. .dr = STM32F4_ADC_DR,
  407. .ier_eoc = { STM32F4_ADC_CR1, STM32F4_EOCIE },
  408. .ier_ovr = { STM32F4_ADC_CR1, STM32F4_OVRIE },
  409. .isr_eoc = { STM32F4_ADC_SR, STM32F4_EOC },
  410. .isr_ovr = { STM32F4_ADC_SR, STM32F4_OVR },
  411. .sqr = stm32f4_sq,
  412. .exten = { STM32F4_ADC_CR2, STM32F4_EXTEN_MASK, STM32F4_EXTEN_SHIFT },
  413. .extsel = { STM32F4_ADC_CR2, STM32F4_EXTSEL_MASK,
  414. STM32F4_EXTSEL_SHIFT },
  415. .res = { STM32F4_ADC_CR1, STM32F4_RES_MASK, STM32F4_RES_SHIFT },
  416. .smpr = { STM32F4_ADC_SMPR1, STM32F4_ADC_SMPR2 },
  417. .smp_bits = stm32f4_smp_bits,
  418. };
  419. static const struct stm32_adc_regs stm32h7_sq[STM32_ADC_MAX_SQ + 1] = {
  420. /* L: len bit field description to be kept as first element */
  421. { STM32H7_ADC_SQR1, GENMASK(3, 0), 0 },
  422. /* SQ1..SQ16 registers & bit fields (reg, mask, shift) */
  423. { STM32H7_ADC_SQR1, GENMASK(10, 6), 6 },
  424. { STM32H7_ADC_SQR1, GENMASK(16, 12), 12 },
  425. { STM32H7_ADC_SQR1, GENMASK(22, 18), 18 },
  426. { STM32H7_ADC_SQR1, GENMASK(28, 24), 24 },
  427. { STM32H7_ADC_SQR2, GENMASK(4, 0), 0 },
  428. { STM32H7_ADC_SQR2, GENMASK(10, 6), 6 },
  429. { STM32H7_ADC_SQR2, GENMASK(16, 12), 12 },
  430. { STM32H7_ADC_SQR2, GENMASK(22, 18), 18 },
  431. { STM32H7_ADC_SQR2, GENMASK(28, 24), 24 },
  432. { STM32H7_ADC_SQR3, GENMASK(4, 0), 0 },
  433. { STM32H7_ADC_SQR3, GENMASK(10, 6), 6 },
  434. { STM32H7_ADC_SQR3, GENMASK(16, 12), 12 },
  435. { STM32H7_ADC_SQR3, GENMASK(22, 18), 18 },
  436. { STM32H7_ADC_SQR3, GENMASK(28, 24), 24 },
  437. { STM32H7_ADC_SQR4, GENMASK(4, 0), 0 },
  438. { STM32H7_ADC_SQR4, GENMASK(10, 6), 6 },
  439. };
  440. /* STM32H7 external trigger sources for all instances */
  441. static const struct stm32_adc_trig_info stm32h7_adc_trigs[] = {
  442. { TIM1_CH1, STM32_EXT0 },
  443. { TIM1_CH2, STM32_EXT1 },
  444. { TIM1_CH3, STM32_EXT2 },
  445. { TIM2_CH2, STM32_EXT3 },
  446. { TIM3_TRGO, STM32_EXT4 },
  447. { TIM4_CH4, STM32_EXT5 },
  448. { TIM8_TRGO, STM32_EXT7 },
  449. { TIM8_TRGO2, STM32_EXT8 },
  450. { TIM1_TRGO, STM32_EXT9 },
  451. { TIM1_TRGO2, STM32_EXT10 },
  452. { TIM2_TRGO, STM32_EXT11 },
  453. { TIM4_TRGO, STM32_EXT12 },
  454. { TIM6_TRGO, STM32_EXT13 },
  455. { TIM15_TRGO, STM32_EXT14 },
  456. { TIM3_CH4, STM32_EXT15 },
  457. { LPTIM1_OUT, STM32_EXT18 },
  458. { LPTIM2_OUT, STM32_EXT19 },
  459. { LPTIM3_OUT, STM32_EXT20 },
  460. { }
  461. };
  462. /*
  463. * stm32h7_smp_bits - describe sampling time register index & bit fields
  464. * Sorted so it can be indexed by channel number.
  465. */
  466. static const struct stm32_adc_regs stm32h7_smp_bits[] = {
  467. /* STM32H7_ADC_SMPR1, smpr[] index, mask, shift for SMP0 to SMP9 */
  468. { 0, GENMASK(2, 0), 0 },
  469. { 0, GENMASK(5, 3), 3 },
  470. { 0, GENMASK(8, 6), 6 },
  471. { 0, GENMASK(11, 9), 9 },
  472. { 0, GENMASK(14, 12), 12 },
  473. { 0, GENMASK(17, 15), 15 },
  474. { 0, GENMASK(20, 18), 18 },
  475. { 0, GENMASK(23, 21), 21 },
  476. { 0, GENMASK(26, 24), 24 },
  477. { 0, GENMASK(29, 27), 27 },
  478. /* STM32H7_ADC_SMPR2, smpr[] index, mask, shift for SMP10 to SMP19 */
  479. { 1, GENMASK(2, 0), 0 },
  480. { 1, GENMASK(5, 3), 3 },
  481. { 1, GENMASK(8, 6), 6 },
  482. { 1, GENMASK(11, 9), 9 },
  483. { 1, GENMASK(14, 12), 12 },
  484. { 1, GENMASK(17, 15), 15 },
  485. { 1, GENMASK(20, 18), 18 },
  486. { 1, GENMASK(23, 21), 21 },
  487. { 1, GENMASK(26, 24), 24 },
  488. { 1, GENMASK(29, 27), 27 },
  489. };
  490. /* STM32H7 programmable sampling time (ADC clock cycles, rounded down) */
  491. static const unsigned int stm32h7_adc_smp_cycles[STM32_ADC_MAX_SMP + 1] = {
  492. 1, 2, 8, 16, 32, 64, 387, 810,
  493. };
  494. static const struct stm32_adc_regspec stm32h7_adc_regspec = {
  495. .dr = STM32H7_ADC_DR,
  496. .ier_eoc = { STM32H7_ADC_IER, STM32H7_EOCIE },
  497. .ier_ovr = { STM32H7_ADC_IER, STM32H7_OVRIE },
  498. .isr_eoc = { STM32H7_ADC_ISR, STM32H7_EOC },
  499. .isr_ovr = { STM32H7_ADC_ISR, STM32H7_OVR },
  500. .sqr = stm32h7_sq,
  501. .exten = { STM32H7_ADC_CFGR, STM32H7_EXTEN_MASK, STM32H7_EXTEN_SHIFT },
  502. .extsel = { STM32H7_ADC_CFGR, STM32H7_EXTSEL_MASK,
  503. STM32H7_EXTSEL_SHIFT },
  504. .res = { STM32H7_ADC_CFGR, STM32H7_RES_MASK, STM32H7_RES_SHIFT },
  505. .difsel = { STM32H7_ADC_DIFSEL, STM32H7_DIFSEL_MASK},
  506. .smpr = { STM32H7_ADC_SMPR1, STM32H7_ADC_SMPR2 },
  507. .smp_bits = stm32h7_smp_bits,
  508. };
  509. /* STM32MP13 programmable sampling time (ADC clock cycles, rounded down) */
  510. static const unsigned int stm32mp13_adc_smp_cycles[STM32_ADC_MAX_SMP + 1] = {
  511. 2, 6, 12, 24, 47, 92, 247, 640,
  512. };
  513. static const struct stm32_adc_regspec stm32mp13_adc_regspec = {
  514. .dr = STM32H7_ADC_DR,
  515. .ier_eoc = { STM32H7_ADC_IER, STM32H7_EOCIE },
  516. .ier_ovr = { STM32H7_ADC_IER, STM32H7_OVRIE },
  517. .isr_eoc = { STM32H7_ADC_ISR, STM32H7_EOC },
  518. .isr_ovr = { STM32H7_ADC_ISR, STM32H7_OVR },
  519. .sqr = stm32h7_sq,
  520. .exten = { STM32H7_ADC_CFGR, STM32H7_EXTEN_MASK, STM32H7_EXTEN_SHIFT },
  521. .extsel = { STM32H7_ADC_CFGR, STM32H7_EXTSEL_MASK,
  522. STM32H7_EXTSEL_SHIFT },
  523. .res = { STM32H7_ADC_CFGR, STM32MP13_RES_MASK, STM32MP13_RES_SHIFT },
  524. .difsel = { STM32MP13_ADC_DIFSEL, STM32MP13_DIFSEL_MASK},
  525. .smpr = { STM32H7_ADC_SMPR1, STM32H7_ADC_SMPR2 },
  526. .smp_bits = stm32h7_smp_bits,
  527. .or_vddcore = { STM32MP13_ADC2_OR, STM32MP13_OP0 },
  528. .or_vddcpu = { STM32MP13_ADC2_OR, STM32MP13_OP1 },
  529. .or_vddq_ddr = { STM32MP13_ADC2_OR, STM32MP13_OP2 },
  530. .ccr_vbat = { STM32H7_ADC_CCR, STM32H7_VBATEN },
  531. .ccr_vref = { STM32H7_ADC_CCR, STM32H7_VREFEN },
  532. };
  533. static const struct stm32_adc_regspec stm32mp1_adc_regspec = {
  534. .dr = STM32H7_ADC_DR,
  535. .ier_eoc = { STM32H7_ADC_IER, STM32H7_EOCIE },
  536. .ier_ovr = { STM32H7_ADC_IER, STM32H7_OVRIE },
  537. .isr_eoc = { STM32H7_ADC_ISR, STM32H7_EOC },
  538. .isr_ovr = { STM32H7_ADC_ISR, STM32H7_OVR },
  539. .sqr = stm32h7_sq,
  540. .exten = { STM32H7_ADC_CFGR, STM32H7_EXTEN_MASK, STM32H7_EXTEN_SHIFT },
  541. .extsel = { STM32H7_ADC_CFGR, STM32H7_EXTSEL_MASK,
  542. STM32H7_EXTSEL_SHIFT },
  543. .res = { STM32H7_ADC_CFGR, STM32H7_RES_MASK, STM32H7_RES_SHIFT },
  544. .difsel = { STM32H7_ADC_DIFSEL, STM32H7_DIFSEL_MASK},
  545. .smpr = { STM32H7_ADC_SMPR1, STM32H7_ADC_SMPR2 },
  546. .smp_bits = stm32h7_smp_bits,
  547. .or_vddcore = { STM32MP1_ADC2_OR, STM32MP1_VDDCOREEN },
  548. .ccr_vbat = { STM32H7_ADC_CCR, STM32H7_VBATEN },
  549. .ccr_vref = { STM32H7_ADC_CCR, STM32H7_VREFEN },
  550. };
  551. /*
  552. * STM32 ADC registers access routines
  553. * @adc: stm32 adc instance
  554. * @reg: reg offset in adc instance
  555. *
  556. * Note: All instances share same base, with 0x0, 0x100 or 0x200 offset resp.
  557. * for adc1, adc2 and adc3.
  558. */
  559. static u32 stm32_adc_readl(struct stm32_adc *adc, u32 reg)
  560. {
  561. return readl_relaxed(adc->common->base + adc->offset + reg);
  562. }
  563. #define stm32_adc_readl_addr(addr) stm32_adc_readl(adc, addr)
  564. #define stm32_adc_readl_poll_timeout(reg, val, cond, sleep_us, timeout_us) \
  565. readx_poll_timeout(stm32_adc_readl_addr, reg, val, \
  566. cond, sleep_us, timeout_us)
  567. static u16 stm32_adc_readw(struct stm32_adc *adc, u32 reg)
  568. {
  569. return readw_relaxed(adc->common->base + adc->offset + reg);
  570. }
  571. static void stm32_adc_writel(struct stm32_adc *adc, u32 reg, u32 val)
  572. {
  573. writel_relaxed(val, adc->common->base + adc->offset + reg);
  574. }
  575. static void stm32_adc_set_bits(struct stm32_adc *adc, u32 reg, u32 bits)
  576. {
  577. unsigned long flags;
  578. spin_lock_irqsave(&adc->lock, flags);
  579. stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) | bits);
  580. spin_unlock_irqrestore(&adc->lock, flags);
  581. }
  582. static void stm32_adc_set_bits_common(struct stm32_adc *adc, u32 reg, u32 bits)
  583. {
  584. spin_lock(&adc->common->lock);
  585. writel_relaxed(readl_relaxed(adc->common->base + reg) | bits,
  586. adc->common->base + reg);
  587. spin_unlock(&adc->common->lock);
  588. }
  589. static void stm32_adc_clr_bits(struct stm32_adc *adc, u32 reg, u32 bits)
  590. {
  591. unsigned long flags;
  592. spin_lock_irqsave(&adc->lock, flags);
  593. stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) & ~bits);
  594. spin_unlock_irqrestore(&adc->lock, flags);
  595. }
  596. static void stm32_adc_clr_bits_common(struct stm32_adc *adc, u32 reg, u32 bits)
  597. {
  598. spin_lock(&adc->common->lock);
  599. writel_relaxed(readl_relaxed(adc->common->base + reg) & ~bits,
  600. adc->common->base + reg);
  601. spin_unlock(&adc->common->lock);
  602. }
  603. /**
  604. * stm32_adc_conv_irq_enable() - Enable end of conversion interrupt
  605. * @adc: stm32 adc instance
  606. */
  607. static void stm32_adc_conv_irq_enable(struct stm32_adc *adc)
  608. {
  609. stm32_adc_set_bits(adc, adc->cfg->regs->ier_eoc.reg,
  610. adc->cfg->regs->ier_eoc.mask);
  611. };
  612. /**
  613. * stm32_adc_conv_irq_disable() - Disable end of conversion interrupt
  614. * @adc: stm32 adc instance
  615. */
  616. static void stm32_adc_conv_irq_disable(struct stm32_adc *adc)
  617. {
  618. stm32_adc_clr_bits(adc, adc->cfg->regs->ier_eoc.reg,
  619. adc->cfg->regs->ier_eoc.mask);
  620. }
  621. static void stm32_adc_ovr_irq_enable(struct stm32_adc *adc)
  622. {
  623. stm32_adc_set_bits(adc, adc->cfg->regs->ier_ovr.reg,
  624. adc->cfg->regs->ier_ovr.mask);
  625. }
  626. static void stm32_adc_ovr_irq_disable(struct stm32_adc *adc)
  627. {
  628. stm32_adc_clr_bits(adc, adc->cfg->regs->ier_ovr.reg,
  629. adc->cfg->regs->ier_ovr.mask);
  630. }
  631. static void stm32_adc_set_res(struct stm32_adc *adc)
  632. {
  633. const struct stm32_adc_regs *res = &adc->cfg->regs->res;
  634. u32 val;
  635. val = stm32_adc_readl(adc, res->reg);
  636. val = (val & ~res->mask) | (adc->res << res->shift);
  637. stm32_adc_writel(adc, res->reg, val);
  638. }
  639. static int stm32_adc_hw_stop(struct device *dev)
  640. {
  641. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  642. struct stm32_adc *adc = iio_priv(indio_dev);
  643. if (adc->cfg->unprepare)
  644. adc->cfg->unprepare(indio_dev);
  645. clk_disable_unprepare(adc->clk);
  646. return 0;
  647. }
  648. static int stm32_adc_hw_start(struct device *dev)
  649. {
  650. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  651. struct stm32_adc *adc = iio_priv(indio_dev);
  652. int ret;
  653. ret = clk_prepare_enable(adc->clk);
  654. if (ret)
  655. return ret;
  656. stm32_adc_set_res(adc);
  657. if (adc->cfg->prepare) {
  658. ret = adc->cfg->prepare(indio_dev);
  659. if (ret)
  660. goto err_clk_dis;
  661. }
  662. return 0;
  663. err_clk_dis:
  664. clk_disable_unprepare(adc->clk);
  665. return ret;
  666. }
  667. static void stm32_adc_int_ch_enable(struct iio_dev *indio_dev)
  668. {
  669. struct stm32_adc *adc = iio_priv(indio_dev);
  670. u32 i;
  671. for (i = 0; i < STM32_ADC_INT_CH_NB; i++) {
  672. if (adc->int_ch[i] == STM32_ADC_INT_CH_NONE)
  673. continue;
  674. switch (i) {
  675. case STM32_ADC_INT_CH_VDDCORE:
  676. dev_dbg(&indio_dev->dev, "Enable VDDCore\n");
  677. stm32_adc_set_bits(adc, adc->cfg->regs->or_vddcore.reg,
  678. adc->cfg->regs->or_vddcore.mask);
  679. break;
  680. case STM32_ADC_INT_CH_VDDCPU:
  681. dev_dbg(&indio_dev->dev, "Enable VDDCPU\n");
  682. stm32_adc_set_bits(adc, adc->cfg->regs->or_vddcpu.reg,
  683. adc->cfg->regs->or_vddcpu.mask);
  684. break;
  685. case STM32_ADC_INT_CH_VDDQ_DDR:
  686. dev_dbg(&indio_dev->dev, "Enable VDDQ_DDR\n");
  687. stm32_adc_set_bits(adc, adc->cfg->regs->or_vddq_ddr.reg,
  688. adc->cfg->regs->or_vddq_ddr.mask);
  689. break;
  690. case STM32_ADC_INT_CH_VREFINT:
  691. dev_dbg(&indio_dev->dev, "Enable VREFInt\n");
  692. stm32_adc_set_bits_common(adc, adc->cfg->regs->ccr_vref.reg,
  693. adc->cfg->regs->ccr_vref.mask);
  694. break;
  695. case STM32_ADC_INT_CH_VBAT:
  696. dev_dbg(&indio_dev->dev, "Enable VBAT\n");
  697. stm32_adc_set_bits_common(adc, adc->cfg->regs->ccr_vbat.reg,
  698. adc->cfg->regs->ccr_vbat.mask);
  699. break;
  700. }
  701. }
  702. }
  703. static void stm32_adc_int_ch_disable(struct stm32_adc *adc)
  704. {
  705. u32 i;
  706. for (i = 0; i < STM32_ADC_INT_CH_NB; i++) {
  707. if (adc->int_ch[i] == STM32_ADC_INT_CH_NONE)
  708. continue;
  709. switch (i) {
  710. case STM32_ADC_INT_CH_VDDCORE:
  711. stm32_adc_clr_bits(adc, adc->cfg->regs->or_vddcore.reg,
  712. adc->cfg->regs->or_vddcore.mask);
  713. break;
  714. case STM32_ADC_INT_CH_VDDCPU:
  715. stm32_adc_clr_bits(adc, adc->cfg->regs->or_vddcpu.reg,
  716. adc->cfg->regs->or_vddcpu.mask);
  717. break;
  718. case STM32_ADC_INT_CH_VDDQ_DDR:
  719. stm32_adc_clr_bits(adc, adc->cfg->regs->or_vddq_ddr.reg,
  720. adc->cfg->regs->or_vddq_ddr.mask);
  721. break;
  722. case STM32_ADC_INT_CH_VREFINT:
  723. stm32_adc_clr_bits_common(adc, adc->cfg->regs->ccr_vref.reg,
  724. adc->cfg->regs->ccr_vref.mask);
  725. break;
  726. case STM32_ADC_INT_CH_VBAT:
  727. stm32_adc_clr_bits_common(adc, adc->cfg->regs->ccr_vbat.reg,
  728. adc->cfg->regs->ccr_vbat.mask);
  729. break;
  730. }
  731. }
  732. }
  733. /**
  734. * stm32f4_adc_start_conv() - Start conversions for regular channels.
  735. * @indio_dev: IIO device instance
  736. * @dma: use dma to transfer conversion result
  737. *
  738. * Start conversions for regular channels.
  739. * Also take care of normal or DMA mode. Circular DMA may be used for regular
  740. * conversions, in IIO buffer modes. Otherwise, use ADC interrupt with direct
  741. * DR read instead (e.g. read_raw, or triggered buffer mode without DMA).
  742. */
  743. static void stm32f4_adc_start_conv(struct iio_dev *indio_dev, bool dma)
  744. {
  745. struct stm32_adc *adc = iio_priv(indio_dev);
  746. stm32_adc_set_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
  747. if (dma)
  748. stm32_adc_set_bits(adc, STM32F4_ADC_CR2,
  749. STM32F4_DMA | STM32F4_DDS);
  750. stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_EOCS | STM32F4_ADON);
  751. /* Wait for Power-up time (tSTAB from datasheet) */
  752. usleep_range(2, 3);
  753. /* Software start ? (e.g. trigger detection disabled ?) */
  754. if (!(stm32_adc_readl(adc, STM32F4_ADC_CR2) & STM32F4_EXTEN_MASK))
  755. stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_SWSTART);
  756. }
  757. static void stm32f4_adc_stop_conv(struct iio_dev *indio_dev)
  758. {
  759. struct stm32_adc *adc = iio_priv(indio_dev);
  760. stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_EXTEN_MASK);
  761. stm32_adc_clr_bits(adc, STM32F4_ADC_SR, STM32F4_STRT);
  762. stm32_adc_clr_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
  763. stm32_adc_clr_bits(adc, STM32F4_ADC_CR2,
  764. STM32F4_ADON | STM32F4_DMA | STM32F4_DDS);
  765. }
  766. static void stm32f4_adc_irq_clear(struct iio_dev *indio_dev, u32 msk)
  767. {
  768. struct stm32_adc *adc = iio_priv(indio_dev);
  769. stm32_adc_clr_bits(adc, adc->cfg->regs->isr_eoc.reg, msk);
  770. }
  771. static void stm32h7_adc_start_conv(struct iio_dev *indio_dev, bool dma)
  772. {
  773. struct stm32_adc *adc = iio_priv(indio_dev);
  774. enum stm32h7_adc_dmngt dmngt;
  775. unsigned long flags;
  776. u32 val;
  777. if (dma)
  778. dmngt = STM32H7_DMNGT_DMA_CIRC;
  779. else
  780. dmngt = STM32H7_DMNGT_DR_ONLY;
  781. spin_lock_irqsave(&adc->lock, flags);
  782. val = stm32_adc_readl(adc, STM32H7_ADC_CFGR);
  783. val = (val & ~STM32H7_DMNGT_MASK) | (dmngt << STM32H7_DMNGT_SHIFT);
  784. stm32_adc_writel(adc, STM32H7_ADC_CFGR, val);
  785. spin_unlock_irqrestore(&adc->lock, flags);
  786. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADSTART);
  787. }
  788. static void stm32h7_adc_stop_conv(struct iio_dev *indio_dev)
  789. {
  790. struct stm32_adc *adc = iio_priv(indio_dev);
  791. int ret;
  792. u32 val;
  793. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADSTP);
  794. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  795. !(val & (STM32H7_ADSTART)),
  796. 100, STM32_ADC_TIMEOUT_US);
  797. if (ret)
  798. dev_warn(&indio_dev->dev, "stop failed\n");
  799. /* STM32H7_DMNGT_MASK covers STM32MP13_DMAEN & STM32MP13_DMACFG */
  800. stm32_adc_clr_bits(adc, STM32H7_ADC_CFGR, STM32H7_DMNGT_MASK);
  801. }
  802. static void stm32h7_adc_irq_clear(struct iio_dev *indio_dev, u32 msk)
  803. {
  804. struct stm32_adc *adc = iio_priv(indio_dev);
  805. /* On STM32H7 IRQs are cleared by writing 1 into ISR register */
  806. stm32_adc_set_bits(adc, adc->cfg->regs->isr_eoc.reg, msk);
  807. }
  808. static void stm32mp13_adc_start_conv(struct iio_dev *indio_dev, bool dma)
  809. {
  810. struct stm32_adc *adc = iio_priv(indio_dev);
  811. if (dma)
  812. stm32_adc_set_bits(adc, STM32H7_ADC_CFGR,
  813. STM32MP13_DMAEN | STM32MP13_DMACFG);
  814. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADSTART);
  815. }
  816. static void stm32h7_adc_set_ovs(struct iio_dev *indio_dev, u32 ovs_idx)
  817. {
  818. struct stm32_adc *adc = iio_priv(indio_dev);
  819. u32 ovsr_bits, bits, msk;
  820. msk = STM32H7_ROVSE | STM32H7_OVSR_MASK | STM32H7_OVSS_MASK;
  821. stm32_adc_clr_bits(adc, STM32H7_ADC_CFGR2, msk);
  822. if (!ovs_idx)
  823. return;
  824. /*
  825. * Only the oversampling ratios corresponding to 2^ovs_idx are exposed in sysfs.
  826. * Oversampling ratios [2,3,...,1024] are mapped on OVSR register values [1,2,...,1023].
  827. * OVSR = 2^ovs_idx - 1
  828. * These ratio increase the resolution by ovs_idx bits. Apply a right shift to keep initial
  829. * resolution given by "assigned-resolution-bits" property.
  830. * OVSS = ovs_idx
  831. */
  832. ovsr_bits = GENMASK(ovs_idx - 1, 0);
  833. bits = STM32H7_ROVSE | STM32H7_OVSS(ovs_idx) | STM32H7_OVSR(ovsr_bits);
  834. stm32_adc_set_bits(adc, STM32H7_ADC_CFGR2, bits & msk);
  835. }
  836. static void stm32mp13_adc_set_ovs(struct iio_dev *indio_dev, u32 ovs_idx)
  837. {
  838. struct stm32_adc *adc = iio_priv(indio_dev);
  839. u32 bits, msk;
  840. msk = STM32H7_ROVSE | STM32MP13_OVSR_MASK | STM32MP13_OVSS_MASK;
  841. stm32_adc_clr_bits(adc, STM32H7_ADC_CFGR2, msk);
  842. if (!ovs_idx)
  843. return;
  844. /*
  845. * The oversampling ratios [2,4,8,..,256] are mapped on OVSR register values [0,1,...,7].
  846. * OVSR = ovs_idx - 1
  847. * These ratio increase the resolution by ovs_idx bits. Apply a right shift to keep initial
  848. * resolution given by "assigned-resolution-bits" property.
  849. * OVSS = ovs_idx
  850. */
  851. bits = STM32H7_ROVSE | STM32MP13_OVSS(ovs_idx);
  852. if (ovs_idx - 1)
  853. bits |= STM32MP13_OVSR(ovs_idx - 1);
  854. stm32_adc_set_bits(adc, STM32H7_ADC_CFGR2, bits & msk);
  855. }
  856. static int stm32h7_adc_exit_pwr_down(struct iio_dev *indio_dev)
  857. {
  858. struct stm32_adc *adc = iio_priv(indio_dev);
  859. int ret;
  860. u32 val;
  861. /* Exit deep power down, then enable ADC voltage regulator */
  862. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
  863. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADVREGEN);
  864. if (adc->cfg->has_boostmode &&
  865. adc->common->rate > STM32H7_BOOST_CLKRATE)
  866. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_BOOST);
  867. /* Wait for startup time */
  868. if (!adc->cfg->has_vregready) {
  869. usleep_range(10, 20);
  870. return 0;
  871. }
  872. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_ISR, val,
  873. val & STM32MP1_VREGREADY, 100,
  874. STM32_ADC_TIMEOUT_US);
  875. if (ret) {
  876. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
  877. dev_err(&indio_dev->dev, "Failed to exit power down\n");
  878. }
  879. return ret;
  880. }
  881. static void stm32h7_adc_enter_pwr_down(struct stm32_adc *adc)
  882. {
  883. if (adc->cfg->has_boostmode)
  884. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_BOOST);
  885. /* Setting DEEPPWD disables ADC vreg and clears ADVREGEN */
  886. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
  887. }
  888. static int stm32h7_adc_enable(struct iio_dev *indio_dev)
  889. {
  890. struct stm32_adc *adc = iio_priv(indio_dev);
  891. int ret;
  892. u32 val;
  893. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADEN);
  894. /* Poll for ADRDY to be set (after adc startup time) */
  895. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_ISR, val,
  896. val & STM32H7_ADRDY,
  897. 100, STM32_ADC_TIMEOUT_US);
  898. if (ret) {
  899. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADDIS);
  900. dev_err(&indio_dev->dev, "Failed to enable ADC\n");
  901. } else {
  902. /* Clear ADRDY by writing one */
  903. stm32_adc_set_bits(adc, STM32H7_ADC_ISR, STM32H7_ADRDY);
  904. }
  905. return ret;
  906. }
  907. static void stm32h7_adc_disable(struct iio_dev *indio_dev)
  908. {
  909. struct stm32_adc *adc = iio_priv(indio_dev);
  910. int ret;
  911. u32 val;
  912. if (!(stm32_adc_readl(adc, STM32H7_ADC_CR) & STM32H7_ADEN))
  913. return;
  914. /* Disable ADC and wait until it's effectively disabled */
  915. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADDIS);
  916. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  917. !(val & STM32H7_ADEN), 100,
  918. STM32_ADC_TIMEOUT_US);
  919. if (ret)
  920. dev_warn(&indio_dev->dev, "Failed to disable\n");
  921. }
  922. /**
  923. * stm32h7_adc_read_selfcalib() - read calibration shadow regs, save result
  924. * @indio_dev: IIO device instance
  925. * Note: Must be called once ADC is enabled, so LINCALRDYW[1..6] are writable
  926. */
  927. static int stm32h7_adc_read_selfcalib(struct iio_dev *indio_dev)
  928. {
  929. struct stm32_adc *adc = iio_priv(indio_dev);
  930. int i, ret;
  931. u32 lincalrdyw_mask, val;
  932. /* Read linearity calibration */
  933. lincalrdyw_mask = STM32H7_LINCALRDYW6;
  934. for (i = STM32H7_LINCALFACT_NUM - 1; i >= 0; i--) {
  935. /* Clear STM32H7_LINCALRDYW[6..1]: transfer calib to CALFACT2 */
  936. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
  937. /* Poll: wait calib data to be ready in CALFACT2 register */
  938. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  939. !(val & lincalrdyw_mask),
  940. 100, STM32_ADC_TIMEOUT_US);
  941. if (ret) {
  942. dev_err(&indio_dev->dev, "Failed to read calfact\n");
  943. return ret;
  944. }
  945. val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT2);
  946. adc->cal.lincalfact[i] = (val & STM32H7_LINCALFACT_MASK);
  947. adc->cal.lincalfact[i] >>= STM32H7_LINCALFACT_SHIFT;
  948. lincalrdyw_mask >>= 1;
  949. }
  950. adc->cal.lincal_saved = true;
  951. return 0;
  952. }
  953. /**
  954. * stm32h7_adc_restore_selfcalib() - Restore saved self-calibration result
  955. * @indio_dev: IIO device instance
  956. * Note: ADC must be enabled, with no on-going conversions.
  957. */
  958. static int stm32h7_adc_restore_selfcalib(struct iio_dev *indio_dev)
  959. {
  960. struct stm32_adc *adc = iio_priv(indio_dev);
  961. int i, ret;
  962. u32 lincalrdyw_mask, val;
  963. lincalrdyw_mask = STM32H7_LINCALRDYW6;
  964. for (i = STM32H7_LINCALFACT_NUM - 1; i >= 0; i--) {
  965. /*
  966. * Write saved calibration data to shadow registers:
  967. * Write CALFACT2, and set LINCALRDYW[6..1] bit to trigger
  968. * data write. Then poll to wait for complete transfer.
  969. */
  970. val = adc->cal.lincalfact[i] << STM32H7_LINCALFACT_SHIFT;
  971. stm32_adc_writel(adc, STM32H7_ADC_CALFACT2, val);
  972. stm32_adc_set_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
  973. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  974. val & lincalrdyw_mask,
  975. 100, STM32_ADC_TIMEOUT_US);
  976. if (ret) {
  977. dev_err(&indio_dev->dev, "Failed to write calfact\n");
  978. return ret;
  979. }
  980. /*
  981. * Read back calibration data, has two effects:
  982. * - It ensures bits LINCALRDYW[6..1] are kept cleared
  983. * for next time calibration needs to be restored.
  984. * - BTW, bit clear triggers a read, then check data has been
  985. * correctly written.
  986. */
  987. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, lincalrdyw_mask);
  988. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  989. !(val & lincalrdyw_mask),
  990. 100, STM32_ADC_TIMEOUT_US);
  991. if (ret) {
  992. dev_err(&indio_dev->dev, "Failed to read calfact\n");
  993. return ret;
  994. }
  995. val = stm32_adc_readl(adc, STM32H7_ADC_CALFACT2);
  996. if (val != adc->cal.lincalfact[i] << STM32H7_LINCALFACT_SHIFT) {
  997. dev_err(&indio_dev->dev, "calfact not consistent\n");
  998. return -EIO;
  999. }
  1000. lincalrdyw_mask >>= 1;
  1001. }
  1002. return 0;
  1003. }
  1004. /*
  1005. * Fixed timeout value for ADC calibration.
  1006. * worst cases:
  1007. * - low clock frequency
  1008. * - maximum prescalers
  1009. * Calibration requires:
  1010. * - 131,072 ADC clock cycle for the linear calibration
  1011. * - 20 ADC clock cycle for the offset calibration
  1012. *
  1013. * Set to 100ms for now
  1014. */
  1015. #define STM32H7_ADC_CALIB_TIMEOUT_US 100000
  1016. /**
  1017. * stm32h7_adc_selfcalib() - Procedure to calibrate ADC
  1018. * @indio_dev: IIO device instance
  1019. * @do_lincal: linear calibration request flag
  1020. * Note: Must be called once ADC is out of power down.
  1021. *
  1022. * Run offset calibration unconditionally.
  1023. * Run linear calibration if requested & supported.
  1024. */
  1025. static int stm32h7_adc_selfcalib(struct iio_dev *indio_dev, int do_lincal)
  1026. {
  1027. struct stm32_adc *adc = iio_priv(indio_dev);
  1028. int ret;
  1029. u32 msk = STM32H7_ADCALDIF;
  1030. u32 val;
  1031. if (adc->cfg->has_linearcal && do_lincal)
  1032. msk |= STM32H7_ADCALLIN;
  1033. /* ADC must be disabled for calibration */
  1034. stm32h7_adc_disable(indio_dev);
  1035. /*
  1036. * Select calibration mode:
  1037. * - Offset calibration for single ended inputs
  1038. * - No linearity calibration (do it later, before reading it)
  1039. */
  1040. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, msk);
  1041. /* Start calibration, then wait for completion */
  1042. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADCAL);
  1043. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  1044. !(val & STM32H7_ADCAL), 100,
  1045. STM32H7_ADC_CALIB_TIMEOUT_US);
  1046. if (ret) {
  1047. dev_err(&indio_dev->dev, "calibration (single-ended) error %d\n", ret);
  1048. goto out;
  1049. }
  1050. /*
  1051. * Select calibration mode, then start calibration:
  1052. * - Offset calibration for differential input
  1053. * - Linearity calibration (needs to be done only once for single/diff)
  1054. * will run simultaneously with offset calibration.
  1055. */
  1056. stm32_adc_set_bits(adc, STM32H7_ADC_CR, msk);
  1057. stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADCAL);
  1058. ret = stm32_adc_readl_poll_timeout(STM32H7_ADC_CR, val,
  1059. !(val & STM32H7_ADCAL), 100,
  1060. STM32H7_ADC_CALIB_TIMEOUT_US);
  1061. if (ret) {
  1062. dev_err(&indio_dev->dev, "calibration (diff%s) error %d\n",
  1063. (msk & STM32H7_ADCALLIN) ? "+linear" : "", ret);
  1064. goto out;
  1065. }
  1066. out:
  1067. stm32_adc_clr_bits(adc, STM32H7_ADC_CR, msk);
  1068. return ret;
  1069. }
  1070. /**
  1071. * stm32h7_adc_check_selfcalib() - Check linear calibration status
  1072. * @indio_dev: IIO device instance
  1073. *
  1074. * Used to check if linear calibration has been done.
  1075. * Return true if linear calibration factors are already saved in private data
  1076. * or if a linear calibration has been done at boot stage.
  1077. */
  1078. static int stm32h7_adc_check_selfcalib(struct iio_dev *indio_dev)
  1079. {
  1080. struct stm32_adc *adc = iio_priv(indio_dev);
  1081. u32 val;
  1082. if (adc->cal.lincal_saved)
  1083. return true;
  1084. /*
  1085. * Check if linear calibration factors are available in ADC registers,
  1086. * by checking that all LINCALRDYWx bits are set.
  1087. */
  1088. val = stm32_adc_readl(adc, STM32H7_ADC_CR) & STM32H7_LINCALRDYW_MASK;
  1089. if (val == STM32H7_LINCALRDYW_MASK)
  1090. return true;
  1091. return false;
  1092. }
  1093. /**
  1094. * stm32h7_adc_prepare() - Leave power down mode to enable ADC.
  1095. * @indio_dev: IIO device instance
  1096. * Leave power down mode.
  1097. * Configure channels as single ended or differential before enabling ADC.
  1098. * Enable ADC.
  1099. * Restore calibration data.
  1100. * Pre-select channels that may be used in PCSEL (required by input MUX / IO):
  1101. * - Only one input is selected for single ended (e.g. 'vinp')
  1102. * - Two inputs are selected for differential channels (e.g. 'vinp' & 'vinn')
  1103. */
  1104. static int stm32h7_adc_prepare(struct iio_dev *indio_dev)
  1105. {
  1106. struct stm32_adc *adc = iio_priv(indio_dev);
  1107. int lincal_done = false;
  1108. int ret;
  1109. ret = stm32h7_adc_exit_pwr_down(indio_dev);
  1110. if (ret)
  1111. return ret;
  1112. if (adc->cfg->has_linearcal)
  1113. lincal_done = stm32h7_adc_check_selfcalib(indio_dev);
  1114. /* Always run offset calibration. Run linear calibration only once */
  1115. ret = stm32h7_adc_selfcalib(indio_dev, !lincal_done);
  1116. if (ret < 0)
  1117. goto pwr_dwn;
  1118. stm32_adc_int_ch_enable(indio_dev);
  1119. stm32_adc_writel(adc, adc->cfg->regs->difsel.reg, adc->difsel);
  1120. ret = stm32h7_adc_enable(indio_dev);
  1121. if (ret)
  1122. goto ch_disable;
  1123. if (adc->cfg->has_linearcal) {
  1124. if (!adc->cal.lincal_saved)
  1125. ret = stm32h7_adc_read_selfcalib(indio_dev);
  1126. else
  1127. ret = stm32h7_adc_restore_selfcalib(indio_dev);
  1128. if (ret)
  1129. goto disable;
  1130. }
  1131. if (adc->cfg->has_presel)
  1132. stm32_adc_writel(adc, STM32H7_ADC_PCSEL, adc->pcsel);
  1133. return 0;
  1134. disable:
  1135. stm32h7_adc_disable(indio_dev);
  1136. ch_disable:
  1137. stm32_adc_int_ch_disable(adc);
  1138. pwr_dwn:
  1139. stm32h7_adc_enter_pwr_down(adc);
  1140. return ret;
  1141. }
  1142. static void stm32h7_adc_unprepare(struct iio_dev *indio_dev)
  1143. {
  1144. struct stm32_adc *adc = iio_priv(indio_dev);
  1145. if (adc->cfg->has_presel)
  1146. stm32_adc_writel(adc, STM32H7_ADC_PCSEL, 0);
  1147. stm32h7_adc_disable(indio_dev);
  1148. stm32_adc_int_ch_disable(adc);
  1149. stm32h7_adc_enter_pwr_down(adc);
  1150. }
  1151. /**
  1152. * stm32_adc_conf_scan_seq() - Build regular channels scan sequence
  1153. * @indio_dev: IIO device
  1154. * @scan_mask: channels to be converted
  1155. *
  1156. * Conversion sequence :
  1157. * Apply sampling time settings for all channels.
  1158. * Configure ADC scan sequence based on selected channels in scan_mask.
  1159. * Add channels to SQR registers, from scan_mask LSB to MSB, then
  1160. * program sequence len.
  1161. */
  1162. static int stm32_adc_conf_scan_seq(struct iio_dev *indio_dev,
  1163. const unsigned long *scan_mask)
  1164. {
  1165. struct stm32_adc *adc = iio_priv(indio_dev);
  1166. const struct stm32_adc_regs *sqr = adc->cfg->regs->sqr;
  1167. const struct iio_chan_spec *chan;
  1168. u32 val, bit;
  1169. int i = 0;
  1170. /* Apply sampling time settings */
  1171. stm32_adc_writel(adc, adc->cfg->regs->smpr[0], adc->smpr_val[0]);
  1172. stm32_adc_writel(adc, adc->cfg->regs->smpr[1], adc->smpr_val[1]);
  1173. for_each_set_bit(bit, scan_mask, iio_get_masklength(indio_dev)) {
  1174. chan = indio_dev->channels + bit;
  1175. /*
  1176. * Assign one channel per SQ entry in regular
  1177. * sequence, starting with SQ1.
  1178. */
  1179. i++;
  1180. if (i > STM32_ADC_MAX_SQ)
  1181. return -EINVAL;
  1182. dev_dbg(&indio_dev->dev, "%s chan %d to SQ%d\n",
  1183. __func__, chan->channel, i);
  1184. val = stm32_adc_readl(adc, sqr[i].reg);
  1185. val &= ~sqr[i].mask;
  1186. val |= chan->channel << sqr[i].shift;
  1187. stm32_adc_writel(adc, sqr[i].reg, val);
  1188. }
  1189. if (!i)
  1190. return -EINVAL;
  1191. /* Sequence len */
  1192. val = stm32_adc_readl(adc, sqr[0].reg);
  1193. val &= ~sqr[0].mask;
  1194. val |= ((i - 1) << sqr[0].shift);
  1195. stm32_adc_writel(adc, sqr[0].reg, val);
  1196. return 0;
  1197. }
  1198. /**
  1199. * stm32_adc_get_trig_extsel() - Get external trigger selection
  1200. * @indio_dev: IIO device structure
  1201. * @trig: trigger
  1202. *
  1203. * Returns trigger extsel value, if trig matches, -EINVAL otherwise.
  1204. */
  1205. static int stm32_adc_get_trig_extsel(struct iio_dev *indio_dev,
  1206. struct iio_trigger *trig)
  1207. {
  1208. struct stm32_adc *adc = iio_priv(indio_dev);
  1209. int i;
  1210. /* lookup triggers registered by stm32 timer trigger driver */
  1211. for (i = 0; adc->cfg->trigs[i].name; i++) {
  1212. /**
  1213. * Checking both stm32 timer trigger type and trig name
  1214. * should be safe against arbitrary trigger names.
  1215. */
  1216. if ((is_stm32_timer_trigger(trig) ||
  1217. is_stm32_lptim_trigger(trig)) &&
  1218. !strcmp(adc->cfg->trigs[i].name, trig->name)) {
  1219. return adc->cfg->trigs[i].extsel;
  1220. }
  1221. }
  1222. return -EINVAL;
  1223. }
  1224. /**
  1225. * stm32_adc_set_trig() - Set a regular trigger
  1226. * @indio_dev: IIO device
  1227. * @trig: IIO trigger
  1228. *
  1229. * Set trigger source/polarity (e.g. SW, or HW with polarity) :
  1230. * - if HW trigger disabled (e.g. trig == NULL, conversion launched by sw)
  1231. * - if HW trigger enabled, set source & polarity
  1232. */
  1233. static int stm32_adc_set_trig(struct iio_dev *indio_dev,
  1234. struct iio_trigger *trig)
  1235. {
  1236. struct stm32_adc *adc = iio_priv(indio_dev);
  1237. u32 val, extsel = 0, exten = STM32_EXTEN_SWTRIG;
  1238. unsigned long flags;
  1239. int ret;
  1240. if (trig) {
  1241. ret = stm32_adc_get_trig_extsel(indio_dev, trig);
  1242. if (ret < 0)
  1243. return ret;
  1244. /* set trigger source and polarity (default to rising edge) */
  1245. extsel = ret;
  1246. exten = adc->trigger_polarity + STM32_EXTEN_HWTRIG_RISING_EDGE;
  1247. }
  1248. spin_lock_irqsave(&adc->lock, flags);
  1249. val = stm32_adc_readl(adc, adc->cfg->regs->exten.reg);
  1250. val &= ~(adc->cfg->regs->exten.mask | adc->cfg->regs->extsel.mask);
  1251. val |= exten << adc->cfg->regs->exten.shift;
  1252. val |= extsel << adc->cfg->regs->extsel.shift;
  1253. stm32_adc_writel(adc, adc->cfg->regs->exten.reg, val);
  1254. spin_unlock_irqrestore(&adc->lock, flags);
  1255. return 0;
  1256. }
  1257. static int stm32_adc_set_trig_pol(struct iio_dev *indio_dev,
  1258. const struct iio_chan_spec *chan,
  1259. unsigned int type)
  1260. {
  1261. struct stm32_adc *adc = iio_priv(indio_dev);
  1262. adc->trigger_polarity = type;
  1263. return 0;
  1264. }
  1265. static int stm32_adc_get_trig_pol(struct iio_dev *indio_dev,
  1266. const struct iio_chan_spec *chan)
  1267. {
  1268. struct stm32_adc *adc = iio_priv(indio_dev);
  1269. return adc->trigger_polarity;
  1270. }
  1271. static const char * const stm32_trig_pol_items[] = {
  1272. "rising-edge", "falling-edge", "both-edges",
  1273. };
  1274. static const struct iio_enum stm32_adc_trig_pol = {
  1275. .items = stm32_trig_pol_items,
  1276. .num_items = ARRAY_SIZE(stm32_trig_pol_items),
  1277. .get = stm32_adc_get_trig_pol,
  1278. .set = stm32_adc_set_trig_pol,
  1279. };
  1280. /**
  1281. * stm32_adc_single_conv() - Performs a single conversion
  1282. * @indio_dev: IIO device
  1283. * @chan: IIO channel
  1284. * @res: conversion result
  1285. *
  1286. * The function performs a single conversion on a given channel:
  1287. * - Apply sampling time settings
  1288. * - Program sequencer with one channel (e.g. in SQ1 with len = 1)
  1289. * - Use SW trigger
  1290. * - Start conversion, then wait for interrupt completion.
  1291. */
  1292. static int stm32_adc_single_conv(struct iio_dev *indio_dev,
  1293. const struct iio_chan_spec *chan,
  1294. int *res)
  1295. {
  1296. struct stm32_adc *adc = iio_priv(indio_dev);
  1297. struct device *dev = indio_dev->dev.parent;
  1298. const struct stm32_adc_regspec *regs = adc->cfg->regs;
  1299. long time_left;
  1300. u32 val;
  1301. int ret;
  1302. reinit_completion(&adc->completion);
  1303. adc->bufi = 0;
  1304. ret = pm_runtime_resume_and_get(dev);
  1305. if (ret < 0)
  1306. return ret;
  1307. /* Apply sampling time settings */
  1308. stm32_adc_writel(adc, regs->smpr[0], adc->smpr_val[0]);
  1309. stm32_adc_writel(adc, regs->smpr[1], adc->smpr_val[1]);
  1310. /* Program chan number in regular sequence (SQ1) */
  1311. val = stm32_adc_readl(adc, regs->sqr[1].reg);
  1312. val &= ~regs->sqr[1].mask;
  1313. val |= chan->channel << regs->sqr[1].shift;
  1314. stm32_adc_writel(adc, regs->sqr[1].reg, val);
  1315. /* Set regular sequence len (0 for 1 conversion) */
  1316. stm32_adc_clr_bits(adc, regs->sqr[0].reg, regs->sqr[0].mask);
  1317. /* Trigger detection disabled (conversion can be launched in SW) */
  1318. stm32_adc_clr_bits(adc, regs->exten.reg, regs->exten.mask);
  1319. stm32_adc_conv_irq_enable(adc);
  1320. adc->cfg->start_conv(indio_dev, false);
  1321. time_left = wait_for_completion_interruptible_timeout(
  1322. &adc->completion, STM32_ADC_TIMEOUT);
  1323. if (time_left == 0) {
  1324. ret = -ETIMEDOUT;
  1325. } else if (time_left < 0) {
  1326. ret = time_left;
  1327. } else {
  1328. *res = adc->buffer[0];
  1329. ret = IIO_VAL_INT;
  1330. }
  1331. adc->cfg->stop_conv(indio_dev);
  1332. stm32_adc_conv_irq_disable(adc);
  1333. pm_runtime_put_autosuspend(dev);
  1334. return ret;
  1335. }
  1336. static int stm32_adc_write_raw(struct iio_dev *indio_dev,
  1337. struct iio_chan_spec const *chan,
  1338. int val, int val2, long mask)
  1339. {
  1340. struct stm32_adc *adc = iio_priv(indio_dev);
  1341. struct device *dev = indio_dev->dev.parent;
  1342. int nb = adc->cfg->adc_info->num_ovs;
  1343. unsigned int idx;
  1344. int ret;
  1345. switch (mask) {
  1346. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  1347. if (val2)
  1348. return -EINVAL;
  1349. for (idx = 0; idx < nb; idx++)
  1350. if (adc->cfg->adc_info->oversampling[idx] == val)
  1351. break;
  1352. if (idx >= nb)
  1353. return -EINVAL;
  1354. if (!iio_device_claim_direct(indio_dev))
  1355. return -EBUSY;
  1356. ret = pm_runtime_resume_and_get(dev);
  1357. if (ret < 0)
  1358. goto err;
  1359. adc->cfg->set_ovs(indio_dev, idx);
  1360. pm_runtime_put_autosuspend(dev);
  1361. adc->ovs_idx = idx;
  1362. err:
  1363. iio_device_release_direct(indio_dev);
  1364. return ret;
  1365. default:
  1366. return -EINVAL;
  1367. }
  1368. }
  1369. static int stm32_adc_read_avail(struct iio_dev *indio_dev,
  1370. struct iio_chan_spec const *chan,
  1371. const int **vals, int *type, int *length, long m)
  1372. {
  1373. struct stm32_adc *adc = iio_priv(indio_dev);
  1374. switch (m) {
  1375. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  1376. *type = IIO_VAL_INT;
  1377. *length = adc->cfg->adc_info->num_ovs;
  1378. *vals = adc->cfg->adc_info->oversampling;
  1379. return IIO_AVAIL_LIST;
  1380. default:
  1381. return -EINVAL;
  1382. }
  1383. }
  1384. static int stm32_adc_read_raw(struct iio_dev *indio_dev,
  1385. struct iio_chan_spec const *chan,
  1386. int *val, int *val2, long mask)
  1387. {
  1388. struct stm32_adc *adc = iio_priv(indio_dev);
  1389. int ret;
  1390. switch (mask) {
  1391. case IIO_CHAN_INFO_RAW:
  1392. case IIO_CHAN_INFO_PROCESSED:
  1393. if (!iio_device_claim_direct(indio_dev))
  1394. return -EBUSY;
  1395. if (chan->type == IIO_VOLTAGE)
  1396. ret = stm32_adc_single_conv(indio_dev, chan, val);
  1397. else
  1398. ret = -EINVAL;
  1399. if (mask == IIO_CHAN_INFO_PROCESSED)
  1400. *val = STM32_ADC_VREFINT_VOLTAGE * adc->vrefint.vrefint_cal / *val;
  1401. iio_device_release_direct(indio_dev);
  1402. return ret;
  1403. case IIO_CHAN_INFO_SCALE:
  1404. if (chan->differential) {
  1405. *val = adc->common->vref_mv * 2;
  1406. *val2 = chan->scan_type.realbits;
  1407. } else {
  1408. *val = adc->common->vref_mv;
  1409. *val2 = chan->scan_type.realbits;
  1410. }
  1411. return IIO_VAL_FRACTIONAL_LOG2;
  1412. case IIO_CHAN_INFO_OFFSET:
  1413. if (chan->differential)
  1414. /* ADC_full_scale / 2 */
  1415. *val = -((1 << chan->scan_type.realbits) / 2);
  1416. else
  1417. *val = 0;
  1418. return IIO_VAL_INT;
  1419. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  1420. *val = adc->cfg->adc_info->oversampling[adc->ovs_idx];
  1421. return IIO_VAL_INT;
  1422. default:
  1423. return -EINVAL;
  1424. }
  1425. }
  1426. static void stm32_adc_irq_clear(struct iio_dev *indio_dev, u32 msk)
  1427. {
  1428. struct stm32_adc *adc = iio_priv(indio_dev);
  1429. adc->cfg->irq_clear(indio_dev, msk);
  1430. }
  1431. static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)
  1432. {
  1433. struct iio_dev *indio_dev = data;
  1434. struct stm32_adc *adc = iio_priv(indio_dev);
  1435. const struct stm32_adc_regspec *regs = adc->cfg->regs;
  1436. u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
  1437. /* Check ovr status right now, as ovr mask should be already disabled */
  1438. if (status & regs->isr_ovr.mask) {
  1439. /*
  1440. * Clear ovr bit to avoid subsequent calls to IRQ handler.
  1441. * This requires to stop ADC first. OVR bit state in ISR,
  1442. * is propaged to CSR register by hardware.
  1443. */
  1444. adc->cfg->stop_conv(indio_dev);
  1445. stm32_adc_irq_clear(indio_dev, regs->isr_ovr.mask);
  1446. dev_err(&indio_dev->dev, "Overrun, stopping: restart needed\n");
  1447. return IRQ_HANDLED;
  1448. }
  1449. return IRQ_NONE;
  1450. }
  1451. static irqreturn_t stm32_adc_isr(int irq, void *data)
  1452. {
  1453. struct iio_dev *indio_dev = data;
  1454. struct stm32_adc *adc = iio_priv(indio_dev);
  1455. const struct stm32_adc_regspec *regs = adc->cfg->regs;
  1456. u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
  1457. if (status & regs->isr_ovr.mask) {
  1458. /*
  1459. * Overrun occurred on regular conversions: data for wrong
  1460. * channel may be read. Unconditionally disable interrupts
  1461. * to stop processing data and print error message.
  1462. * Restarting the capture can be done by disabling, then
  1463. * re-enabling it (e.g. write 0, then 1 to buffer/enable).
  1464. */
  1465. stm32_adc_ovr_irq_disable(adc);
  1466. stm32_adc_conv_irq_disable(adc);
  1467. return IRQ_WAKE_THREAD;
  1468. }
  1469. if (status & regs->isr_eoc.mask) {
  1470. /* Reading DR also clears EOC status flag */
  1471. adc->buffer[adc->bufi] = stm32_adc_readw(adc, regs->dr);
  1472. if (iio_buffer_enabled(indio_dev)) {
  1473. adc->bufi++;
  1474. if (adc->bufi >= adc->num_conv) {
  1475. stm32_adc_conv_irq_disable(adc);
  1476. iio_trigger_poll(indio_dev->trig);
  1477. }
  1478. } else {
  1479. complete(&adc->completion);
  1480. }
  1481. return IRQ_HANDLED;
  1482. }
  1483. return IRQ_NONE;
  1484. }
  1485. /**
  1486. * stm32_adc_validate_trigger() - validate trigger for stm32 adc
  1487. * @indio_dev: IIO device
  1488. * @trig: new trigger
  1489. *
  1490. * Returns: 0 if trig matches one of the triggers registered by stm32 adc
  1491. * driver, -EINVAL otherwise.
  1492. */
  1493. static int stm32_adc_validate_trigger(struct iio_dev *indio_dev,
  1494. struct iio_trigger *trig)
  1495. {
  1496. return stm32_adc_get_trig_extsel(indio_dev, trig) < 0 ? -EINVAL : 0;
  1497. }
  1498. static int stm32_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
  1499. {
  1500. struct stm32_adc *adc = iio_priv(indio_dev);
  1501. unsigned int watermark = STM32_DMA_BUFFER_SIZE / 2;
  1502. unsigned int rx_buf_sz = STM32_DMA_BUFFER_SIZE;
  1503. /*
  1504. * dma cyclic transfers are used, buffer is split into two periods.
  1505. * There should be :
  1506. * - always one buffer (period) dma is working on
  1507. * - one buffer (period) driver can push data.
  1508. */
  1509. watermark = min(watermark, val * (unsigned)(sizeof(u16)));
  1510. adc->rx_buf_sz = min(rx_buf_sz, watermark * 2 * adc->num_conv);
  1511. return 0;
  1512. }
  1513. static int stm32_adc_update_scan_mode(struct iio_dev *indio_dev,
  1514. const unsigned long *scan_mask)
  1515. {
  1516. struct stm32_adc *adc = iio_priv(indio_dev);
  1517. struct device *dev = indio_dev->dev.parent;
  1518. int ret;
  1519. ret = pm_runtime_resume_and_get(dev);
  1520. if (ret < 0)
  1521. return ret;
  1522. adc->num_conv = bitmap_weight(scan_mask, iio_get_masklength(indio_dev));
  1523. ret = stm32_adc_conf_scan_seq(indio_dev, scan_mask);
  1524. pm_runtime_put_autosuspend(dev);
  1525. return ret;
  1526. }
  1527. static int stm32_adc_fwnode_xlate(struct iio_dev *indio_dev,
  1528. const struct fwnode_reference_args *iiospec)
  1529. {
  1530. int i;
  1531. for (i = 0; i < indio_dev->num_channels; i++)
  1532. if (indio_dev->channels[i].channel == iiospec->args[0])
  1533. return i;
  1534. return -EINVAL;
  1535. }
  1536. /**
  1537. * stm32_adc_debugfs_reg_access - read or write register value
  1538. * @indio_dev: IIO device structure
  1539. * @reg: register offset
  1540. * @writeval: value to write
  1541. * @readval: value to read
  1542. *
  1543. * To read a value from an ADC register:
  1544. * echo [ADC reg offset] > direct_reg_access
  1545. * cat direct_reg_access
  1546. *
  1547. * To write a value in a ADC register:
  1548. * echo [ADC_reg_offset] [value] > direct_reg_access
  1549. */
  1550. static int stm32_adc_debugfs_reg_access(struct iio_dev *indio_dev,
  1551. unsigned reg, unsigned writeval,
  1552. unsigned *readval)
  1553. {
  1554. struct stm32_adc *adc = iio_priv(indio_dev);
  1555. struct device *dev = indio_dev->dev.parent;
  1556. int ret;
  1557. ret = pm_runtime_resume_and_get(dev);
  1558. if (ret < 0)
  1559. return ret;
  1560. if (!readval)
  1561. stm32_adc_writel(adc, reg, writeval);
  1562. else
  1563. *readval = stm32_adc_readl(adc, reg);
  1564. pm_runtime_put_autosuspend(dev);
  1565. return 0;
  1566. }
  1567. static const struct iio_info stm32_adc_iio_info = {
  1568. .read_raw = stm32_adc_read_raw,
  1569. .write_raw = stm32_adc_write_raw,
  1570. .read_avail = stm32_adc_read_avail,
  1571. .validate_trigger = stm32_adc_validate_trigger,
  1572. .hwfifo_set_watermark = stm32_adc_set_watermark,
  1573. .update_scan_mode = stm32_adc_update_scan_mode,
  1574. .debugfs_reg_access = stm32_adc_debugfs_reg_access,
  1575. .fwnode_xlate = stm32_adc_fwnode_xlate,
  1576. };
  1577. static unsigned int stm32_adc_dma_residue(struct stm32_adc *adc)
  1578. {
  1579. struct dma_tx_state state;
  1580. enum dma_status status;
  1581. status = dmaengine_tx_status(adc->dma_chan,
  1582. adc->dma_chan->cookie,
  1583. &state);
  1584. if (status == DMA_IN_PROGRESS) {
  1585. /* Residue is size in bytes from end of buffer */
  1586. unsigned int i = adc->rx_buf_sz - state.residue;
  1587. unsigned int size;
  1588. /* Return available bytes */
  1589. if (i >= adc->bufi)
  1590. size = i - adc->bufi;
  1591. else
  1592. size = adc->rx_buf_sz + i - adc->bufi;
  1593. return size;
  1594. }
  1595. return 0;
  1596. }
  1597. static void stm32_adc_dma_buffer_done(void *data)
  1598. {
  1599. struct iio_dev *indio_dev = data;
  1600. struct stm32_adc *adc = iio_priv(indio_dev);
  1601. int residue = stm32_adc_dma_residue(adc);
  1602. /*
  1603. * In DMA mode the trigger services of IIO are not used
  1604. * (e.g. no call to iio_trigger_poll).
  1605. * Calling irq handler associated to the hardware trigger is not
  1606. * relevant as the conversions have already been done. Data
  1607. * transfers are performed directly in DMA callback instead.
  1608. * This implementation avoids to call trigger irq handler that
  1609. * may sleep, in an atomic context (DMA irq handler context).
  1610. */
  1611. dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi);
  1612. while (residue >= indio_dev->scan_bytes) {
  1613. u16 *buffer = (u16 *)&adc->rx_buf[adc->bufi];
  1614. iio_push_to_buffers(indio_dev, buffer);
  1615. residue -= indio_dev->scan_bytes;
  1616. adc->bufi += indio_dev->scan_bytes;
  1617. if (adc->bufi >= adc->rx_buf_sz)
  1618. adc->bufi = 0;
  1619. }
  1620. }
  1621. static int stm32_adc_dma_start(struct iio_dev *indio_dev)
  1622. {
  1623. struct stm32_adc *adc = iio_priv(indio_dev);
  1624. struct dma_async_tx_descriptor *desc;
  1625. dma_cookie_t cookie;
  1626. int ret;
  1627. if (!adc->dma_chan)
  1628. return 0;
  1629. dev_dbg(&indio_dev->dev, "%s size=%d watermark=%d\n", __func__,
  1630. adc->rx_buf_sz, adc->rx_buf_sz / 2);
  1631. /* Prepare a DMA cyclic transaction */
  1632. desc = dmaengine_prep_dma_cyclic(adc->dma_chan,
  1633. adc->rx_dma_buf,
  1634. adc->rx_buf_sz, adc->rx_buf_sz / 2,
  1635. DMA_DEV_TO_MEM,
  1636. DMA_PREP_INTERRUPT);
  1637. if (!desc)
  1638. return -EBUSY;
  1639. desc->callback = stm32_adc_dma_buffer_done;
  1640. desc->callback_param = indio_dev;
  1641. cookie = dmaengine_submit(desc);
  1642. ret = dma_submit_error(cookie);
  1643. if (ret) {
  1644. dmaengine_terminate_sync(adc->dma_chan);
  1645. return ret;
  1646. }
  1647. /* Issue pending DMA requests */
  1648. dma_async_issue_pending(adc->dma_chan);
  1649. return 0;
  1650. }
  1651. static int stm32_adc_buffer_postenable(struct iio_dev *indio_dev)
  1652. {
  1653. struct stm32_adc *adc = iio_priv(indio_dev);
  1654. struct device *dev = indio_dev->dev.parent;
  1655. int ret;
  1656. ret = pm_runtime_resume_and_get(dev);
  1657. if (ret < 0)
  1658. return ret;
  1659. ret = stm32_adc_set_trig(indio_dev, indio_dev->trig);
  1660. if (ret) {
  1661. dev_err(&indio_dev->dev, "Can't set trigger\n");
  1662. goto err_pm_put;
  1663. }
  1664. ret = stm32_adc_dma_start(indio_dev);
  1665. if (ret) {
  1666. dev_err(&indio_dev->dev, "Can't start dma\n");
  1667. goto err_clr_trig;
  1668. }
  1669. /* Reset adc buffer index */
  1670. adc->bufi = 0;
  1671. stm32_adc_ovr_irq_enable(adc);
  1672. if (!adc->dma_chan)
  1673. stm32_adc_conv_irq_enable(adc);
  1674. adc->cfg->start_conv(indio_dev, !!adc->dma_chan);
  1675. return 0;
  1676. err_clr_trig:
  1677. stm32_adc_set_trig(indio_dev, NULL);
  1678. err_pm_put:
  1679. pm_runtime_put_autosuspend(dev);
  1680. return ret;
  1681. }
  1682. static int stm32_adc_buffer_predisable(struct iio_dev *indio_dev)
  1683. {
  1684. struct stm32_adc *adc = iio_priv(indio_dev);
  1685. struct device *dev = indio_dev->dev.parent;
  1686. adc->cfg->stop_conv(indio_dev);
  1687. if (!adc->dma_chan)
  1688. stm32_adc_conv_irq_disable(adc);
  1689. stm32_adc_ovr_irq_disable(adc);
  1690. if (adc->dma_chan)
  1691. dmaengine_terminate_sync(adc->dma_chan);
  1692. if (stm32_adc_set_trig(indio_dev, NULL))
  1693. dev_err(&indio_dev->dev, "Can't clear trigger\n");
  1694. pm_runtime_put_autosuspend(dev);
  1695. return 0;
  1696. }
  1697. static const struct iio_buffer_setup_ops stm32_adc_buffer_setup_ops = {
  1698. .postenable = &stm32_adc_buffer_postenable,
  1699. .predisable = &stm32_adc_buffer_predisable,
  1700. };
  1701. static irqreturn_t stm32_adc_trigger_handler(int irq, void *p)
  1702. {
  1703. struct iio_poll_func *pf = p;
  1704. struct iio_dev *indio_dev = pf->indio_dev;
  1705. struct stm32_adc *adc = iio_priv(indio_dev);
  1706. dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi);
  1707. /* reset buffer index */
  1708. adc->bufi = 0;
  1709. iio_push_to_buffers_with_ts(indio_dev, adc->buffer, sizeof(adc->buffer),
  1710. pf->timestamp);
  1711. iio_trigger_notify_done(indio_dev->trig);
  1712. /* re-enable eoc irq */
  1713. stm32_adc_conv_irq_enable(adc);
  1714. return IRQ_HANDLED;
  1715. }
  1716. static const struct iio_chan_spec_ext_info stm32_adc_ext_info[] = {
  1717. IIO_ENUM("trigger_polarity", IIO_SHARED_BY_ALL, &stm32_adc_trig_pol),
  1718. {
  1719. .name = "trigger_polarity_available",
  1720. .shared = IIO_SHARED_BY_ALL,
  1721. .read = iio_enum_available_read,
  1722. .private = (uintptr_t)&stm32_adc_trig_pol,
  1723. },
  1724. { }
  1725. };
  1726. static void stm32_adc_debugfs_init(struct iio_dev *indio_dev)
  1727. {
  1728. struct stm32_adc *adc = iio_priv(indio_dev);
  1729. struct dentry *d = iio_get_debugfs_dentry(indio_dev);
  1730. struct stm32_adc_calib *cal = &adc->cal;
  1731. char buf[16];
  1732. unsigned int i;
  1733. if (!adc->cfg->has_linearcal)
  1734. return;
  1735. for (i = 0; i < STM32H7_LINCALFACT_NUM; i++) {
  1736. snprintf(buf, sizeof(buf), "lincalfact%d", i + 1);
  1737. debugfs_create_u32(buf, 0444, d, &cal->lincalfact[i]);
  1738. }
  1739. }
  1740. static int stm32_adc_fw_get_resolution(struct iio_dev *indio_dev)
  1741. {
  1742. struct device *dev = &indio_dev->dev;
  1743. struct stm32_adc *adc = iio_priv(indio_dev);
  1744. unsigned int i;
  1745. u32 res;
  1746. if (device_property_read_u32(dev, "assigned-resolution-bits", &res))
  1747. res = adc->cfg->adc_info->resolutions[0];
  1748. for (i = 0; i < adc->cfg->adc_info->num_res; i++)
  1749. if (res == adc->cfg->adc_info->resolutions[i])
  1750. break;
  1751. if (i >= adc->cfg->adc_info->num_res) {
  1752. dev_err(&indio_dev->dev, "Bad resolution: %u bits\n", res);
  1753. return -EINVAL;
  1754. }
  1755. dev_dbg(&indio_dev->dev, "Using %u bits resolution\n", res);
  1756. adc->res = i;
  1757. return 0;
  1758. }
  1759. static void stm32_adc_smpr_init(struct stm32_adc *adc, int channel, u32 smp_ns)
  1760. {
  1761. const struct stm32_adc_regs *smpr = &adc->cfg->regs->smp_bits[channel];
  1762. u32 period_ns, shift = smpr->shift, mask = smpr->mask;
  1763. unsigned int i, smp, r = smpr->reg;
  1764. /*
  1765. * For internal channels, ensure that the sampling time cannot
  1766. * be lower than the one specified in the datasheet
  1767. */
  1768. for (i = 0; i < STM32_ADC_INT_CH_NB; i++)
  1769. if (channel == adc->int_ch[i] && adc->int_ch[i] != STM32_ADC_INT_CH_NONE)
  1770. smp_ns = max(smp_ns, adc->cfg->ts_int_ch[i]);
  1771. /* Determine sampling time (ADC clock cycles) */
  1772. period_ns = NSEC_PER_SEC / adc->common->rate;
  1773. for (smp = 0; smp <= STM32_ADC_MAX_SMP; smp++)
  1774. if ((period_ns * adc->cfg->smp_cycles[smp]) >= smp_ns)
  1775. break;
  1776. if (smp > STM32_ADC_MAX_SMP)
  1777. smp = STM32_ADC_MAX_SMP;
  1778. /* pre-build sampling time registers (e.g. smpr1, smpr2) */
  1779. adc->smpr_val[r] = (adc->smpr_val[r] & ~mask) | (smp << shift);
  1780. }
  1781. static void stm32_adc_chan_init_one(struct iio_dev *indio_dev,
  1782. struct iio_chan_spec *chan, u32 vinp,
  1783. u32 vinn, int scan_index, bool differential)
  1784. {
  1785. struct stm32_adc *adc = iio_priv(indio_dev);
  1786. char *name = adc->chan_name[vinp];
  1787. chan->type = IIO_VOLTAGE;
  1788. chan->channel = vinp;
  1789. if (differential) {
  1790. chan->differential = 1;
  1791. chan->channel2 = vinn;
  1792. snprintf(name, STM32_ADC_CH_SZ, "in%d-in%d", vinp, vinn);
  1793. } else {
  1794. snprintf(name, STM32_ADC_CH_SZ, "in%d", vinp);
  1795. }
  1796. chan->datasheet_name = name;
  1797. chan->scan_index = scan_index;
  1798. chan->indexed = 1;
  1799. if (chan->channel == adc->int_ch[STM32_ADC_INT_CH_VREFINT])
  1800. chan->info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED);
  1801. else
  1802. chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
  1803. chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) |
  1804. BIT(IIO_CHAN_INFO_OFFSET);
  1805. if (adc->cfg->has_oversampling) {
  1806. chan->info_mask_shared_by_all |= BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO);
  1807. chan->info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO);
  1808. }
  1809. chan->scan_type.sign = 'u';
  1810. chan->scan_type.realbits = adc->cfg->adc_info->resolutions[adc->res];
  1811. chan->scan_type.storagebits = 16;
  1812. chan->ext_info = stm32_adc_ext_info;
  1813. /* pre-build selected channels mask */
  1814. adc->pcsel |= BIT(chan->channel);
  1815. if (differential) {
  1816. /* pre-build diff channels mask */
  1817. adc->difsel |= BIT(chan->channel) & adc->cfg->regs->difsel.mask;
  1818. /* Also add negative input to pre-selected channels */
  1819. adc->pcsel |= BIT(chan->channel2);
  1820. }
  1821. }
  1822. static int stm32_adc_get_legacy_chan_count(struct iio_dev *indio_dev, struct stm32_adc *adc)
  1823. {
  1824. struct device *dev = &indio_dev->dev;
  1825. const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
  1826. int num_channels = 0, ret;
  1827. dev_dbg(&indio_dev->dev, "using legacy channel config\n");
  1828. ret = device_property_count_u32(dev, "st,adc-channels");
  1829. if (ret > adc_info->max_channels) {
  1830. dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");
  1831. return -EINVAL;
  1832. } else if (ret > 0) {
  1833. num_channels += ret;
  1834. }
  1835. /*
  1836. * each st,adc-diff-channels is a group of 2 u32 so we divide @ret
  1837. * to get the *real* number of channels.
  1838. */
  1839. ret = device_property_count_u32(dev, "st,adc-diff-channels");
  1840. if (ret > 0) {
  1841. ret /= (int)(sizeof(struct stm32_adc_diff_channel) / sizeof(u32));
  1842. if (ret > adc_info->max_channels) {
  1843. dev_err(&indio_dev->dev, "Bad st,adc-diff-channels?\n");
  1844. return -EINVAL;
  1845. } else if (ret > 0) {
  1846. adc->num_diff = ret;
  1847. num_channels += ret;
  1848. }
  1849. }
  1850. /* Optional sample time is provided either for each, or all channels */
  1851. adc->nsmps = device_property_count_u32(dev, "st,min-sample-time-nsecs");
  1852. if (adc->nsmps > 1 && adc->nsmps != num_channels) {
  1853. dev_err(&indio_dev->dev, "Invalid st,min-sample-time-nsecs\n");
  1854. return -EINVAL;
  1855. }
  1856. return num_channels;
  1857. }
  1858. static int stm32_adc_legacy_chan_init(struct iio_dev *indio_dev,
  1859. struct stm32_adc *adc,
  1860. struct iio_chan_spec *channels,
  1861. int nchans)
  1862. {
  1863. const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
  1864. struct stm32_adc_diff_channel diff[STM32_ADC_CH_MAX];
  1865. struct device *dev = &indio_dev->dev;
  1866. u32 num_diff = adc->num_diff;
  1867. int num_se = nchans - num_diff;
  1868. int size = num_diff * sizeof(*diff) / sizeof(u32);
  1869. int scan_index = 0, ret, i, c;
  1870. u32 smp = 0, smps[STM32_ADC_CH_MAX], chans[STM32_ADC_CH_MAX];
  1871. if (num_diff) {
  1872. ret = device_property_read_u32_array(dev, "st,adc-diff-channels",
  1873. (u32 *)diff, size);
  1874. if (ret) {
  1875. dev_err(&indio_dev->dev, "Failed to get diff channels %d\n", ret);
  1876. return ret;
  1877. }
  1878. for (i = 0; i < num_diff; i++) {
  1879. if (diff[i].vinp >= adc_info->max_channels ||
  1880. diff[i].vinn >= adc_info->max_channels) {
  1881. dev_err(&indio_dev->dev, "Invalid channel in%d-in%d\n",
  1882. diff[i].vinp, diff[i].vinn);
  1883. return -EINVAL;
  1884. }
  1885. stm32_adc_chan_init_one(indio_dev, &channels[scan_index],
  1886. diff[i].vinp, diff[i].vinn,
  1887. scan_index, true);
  1888. scan_index++;
  1889. }
  1890. }
  1891. if (num_se > 0) {
  1892. ret = device_property_read_u32_array(dev, "st,adc-channels", chans, num_se);
  1893. if (ret) {
  1894. dev_err(&indio_dev->dev, "Failed to get st,adc-channels %d\n", ret);
  1895. return ret;
  1896. }
  1897. for (c = 0; c < num_se; c++) {
  1898. if (chans[c] >= adc_info->max_channels) {
  1899. dev_err(&indio_dev->dev, "Invalid channel %d\n",
  1900. chans[c]);
  1901. return -EINVAL;
  1902. }
  1903. /* Channel can't be configured both as single-ended & diff */
  1904. for (i = 0; i < num_diff; i++) {
  1905. if (chans[c] == diff[i].vinp) {
  1906. dev_err(&indio_dev->dev, "channel %d misconfigured\n",
  1907. chans[c]);
  1908. return -EINVAL;
  1909. }
  1910. }
  1911. stm32_adc_chan_init_one(indio_dev, &channels[scan_index],
  1912. chans[c], 0, scan_index, false);
  1913. scan_index++;
  1914. }
  1915. }
  1916. if (adc->nsmps > 0) {
  1917. ret = device_property_read_u32_array(dev, "st,min-sample-time-nsecs",
  1918. smps, adc->nsmps);
  1919. if (ret)
  1920. return ret;
  1921. }
  1922. for (i = 0; i < scan_index; i++) {
  1923. /*
  1924. * This check is used with the above logic so that smp value
  1925. * will only be modified if valid u32 value can be decoded. This
  1926. * allows to get either no value, 1 shared value for all indexes,
  1927. * or one value per channel. The point is to have the same
  1928. * behavior as 'of_property_read_u32_index()'.
  1929. */
  1930. if (i < adc->nsmps)
  1931. smp = smps[i];
  1932. /* Prepare sampling time settings */
  1933. stm32_adc_smpr_init(adc, channels[i].channel, smp);
  1934. }
  1935. return scan_index;
  1936. }
  1937. static int stm32_adc_populate_int_ch(struct iio_dev *indio_dev, const char *ch_name,
  1938. int chan)
  1939. {
  1940. struct stm32_adc *adc = iio_priv(indio_dev);
  1941. u16 vrefint;
  1942. int i, ret;
  1943. for (i = 0; i < STM32_ADC_INT_CH_NB; i++) {
  1944. if (!strncmp(stm32_adc_ic[i].name, ch_name, STM32_ADC_CH_SZ)) {
  1945. /* Check internal channel availability */
  1946. switch (i) {
  1947. case STM32_ADC_INT_CH_VDDCORE:
  1948. if (!adc->cfg->regs->or_vddcore.reg)
  1949. dev_warn(&indio_dev->dev,
  1950. "%s channel not available\n", ch_name);
  1951. break;
  1952. case STM32_ADC_INT_CH_VDDCPU:
  1953. if (!adc->cfg->regs->or_vddcpu.reg)
  1954. dev_warn(&indio_dev->dev,
  1955. "%s channel not available\n", ch_name);
  1956. break;
  1957. case STM32_ADC_INT_CH_VDDQ_DDR:
  1958. if (!adc->cfg->regs->or_vddq_ddr.reg)
  1959. dev_warn(&indio_dev->dev,
  1960. "%s channel not available\n", ch_name);
  1961. break;
  1962. case STM32_ADC_INT_CH_VREFINT:
  1963. if (!adc->cfg->regs->ccr_vref.reg)
  1964. dev_warn(&indio_dev->dev,
  1965. "%s channel not available\n", ch_name);
  1966. break;
  1967. case STM32_ADC_INT_CH_VBAT:
  1968. if (!adc->cfg->regs->ccr_vbat.reg)
  1969. dev_warn(&indio_dev->dev,
  1970. "%s channel not available\n", ch_name);
  1971. break;
  1972. }
  1973. if (stm32_adc_ic[i].idx != STM32_ADC_INT_CH_VREFINT) {
  1974. adc->int_ch[i] = chan;
  1975. break;
  1976. }
  1977. /* Get calibration data for vrefint channel */
  1978. ret = nvmem_cell_read_u16(&indio_dev->dev, "vrefint", &vrefint);
  1979. if (ret && ret != -ENOENT) {
  1980. return dev_err_probe(indio_dev->dev.parent, ret,
  1981. "nvmem access error\n");
  1982. }
  1983. if (ret == -ENOENT) {
  1984. dev_dbg(&indio_dev->dev, "vrefint calibration not found. Skip vrefint channel\n");
  1985. return ret;
  1986. } else if (!vrefint) {
  1987. dev_dbg(&indio_dev->dev, "Null vrefint calibration value. Skip vrefint channel\n");
  1988. return -ENOENT;
  1989. }
  1990. adc->int_ch[i] = chan;
  1991. adc->vrefint.vrefint_cal = vrefint;
  1992. }
  1993. }
  1994. return 0;
  1995. }
  1996. static int stm32_adc_generic_chan_init(struct iio_dev *indio_dev,
  1997. struct stm32_adc *adc,
  1998. struct iio_chan_spec *channels)
  1999. {
  2000. const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
  2001. struct device *dev = &indio_dev->dev;
  2002. const char *name;
  2003. int val, scan_index = 0, ret;
  2004. bool differential;
  2005. u32 vin[2];
  2006. device_for_each_child_node_scoped(dev, child) {
  2007. ret = fwnode_property_read_u32(child, "reg", &val);
  2008. if (ret)
  2009. return dev_err_probe(dev, ret,
  2010. "Missing channel index\n");
  2011. ret = fwnode_property_read_string(child, "label", &name);
  2012. /* label is optional */
  2013. if (!ret) {
  2014. if (strlen(name) >= STM32_ADC_CH_SZ)
  2015. return dev_err_probe(dev, -EINVAL,
  2016. "Label %s exceeds %d characters\n",
  2017. name, STM32_ADC_CH_SZ);
  2018. strscpy(adc->chan_name[val], name, STM32_ADC_CH_SZ);
  2019. ret = stm32_adc_populate_int_ch(indio_dev, name, val);
  2020. if (ret == -ENOENT)
  2021. continue;
  2022. else if (ret)
  2023. return ret;
  2024. } else if (ret != -EINVAL) {
  2025. return dev_err_probe(dev, ret, "Invalid label\n");
  2026. }
  2027. if (val >= adc_info->max_channels)
  2028. return dev_err_probe(dev, -EINVAL,
  2029. "Invalid channel %d\n", val);
  2030. differential = false;
  2031. ret = fwnode_property_read_u32_array(child, "diff-channels", vin, 2);
  2032. /* diff-channels is optional */
  2033. if (!ret) {
  2034. differential = true;
  2035. if (vin[0] != val || vin[1] >= adc_info->max_channels)
  2036. return dev_err_probe(dev, -EINVAL,
  2037. "Invalid channel in%d-in%d\n",
  2038. vin[0], vin[1]);
  2039. } else if (ret != -EINVAL) {
  2040. return dev_err_probe(dev, ret,
  2041. "Invalid diff-channels property\n");
  2042. }
  2043. stm32_adc_chan_init_one(indio_dev, &channels[scan_index], val,
  2044. vin[1], scan_index, differential);
  2045. val = 0;
  2046. ret = fwnode_property_read_u32(child, "st,min-sample-time-ns", &val);
  2047. /* st,min-sample-time-ns is optional */
  2048. if (ret && ret != -EINVAL)
  2049. return dev_err_probe(dev, ret,
  2050. "Invalid st,min-sample-time-ns property\n");
  2051. stm32_adc_smpr_init(adc, channels[scan_index].channel, val);
  2052. if (differential)
  2053. stm32_adc_smpr_init(adc, vin[1], val);
  2054. scan_index++;
  2055. }
  2056. return scan_index;
  2057. }
  2058. static int stm32_adc_chan_fw_init(struct iio_dev *indio_dev, bool timestamping)
  2059. {
  2060. struct stm32_adc *adc = iio_priv(indio_dev);
  2061. const struct stm32_adc_info *adc_info = adc->cfg->adc_info;
  2062. struct iio_chan_spec *channels;
  2063. int scan_index = 0, num_channels = 0, ret, i;
  2064. bool legacy = false;
  2065. for (i = 0; i < STM32_ADC_INT_CH_NB; i++)
  2066. adc->int_ch[i] = STM32_ADC_INT_CH_NONE;
  2067. num_channels = device_get_child_node_count(&indio_dev->dev);
  2068. /* If no channels have been found, fallback to channels legacy properties. */
  2069. if (!num_channels) {
  2070. legacy = true;
  2071. ret = stm32_adc_get_legacy_chan_count(indio_dev, adc);
  2072. if (!ret) {
  2073. dev_err(indio_dev->dev.parent, "No channel found\n");
  2074. return -ENODATA;
  2075. } else if (ret < 0) {
  2076. return ret;
  2077. }
  2078. num_channels = ret;
  2079. }
  2080. if (num_channels > adc_info->max_channels) {
  2081. dev_err(&indio_dev->dev, "Channel number [%d] exceeds %d\n",
  2082. num_channels, adc_info->max_channels);
  2083. return -EINVAL;
  2084. }
  2085. if (timestamping)
  2086. num_channels++;
  2087. channels = devm_kcalloc(&indio_dev->dev, num_channels,
  2088. sizeof(struct iio_chan_spec), GFP_KERNEL);
  2089. if (!channels)
  2090. return -ENOMEM;
  2091. if (legacy)
  2092. ret = stm32_adc_legacy_chan_init(indio_dev, adc, channels,
  2093. timestamping ? num_channels - 1 : num_channels);
  2094. else
  2095. ret = stm32_adc_generic_chan_init(indio_dev, adc, channels);
  2096. if (ret < 0)
  2097. return ret;
  2098. scan_index = ret;
  2099. if (timestamping) {
  2100. struct iio_chan_spec *timestamp = &channels[scan_index];
  2101. timestamp->type = IIO_TIMESTAMP;
  2102. timestamp->channel = -1;
  2103. timestamp->scan_index = scan_index;
  2104. timestamp->scan_type.sign = 's';
  2105. timestamp->scan_type.realbits = 64;
  2106. timestamp->scan_type.storagebits = 64;
  2107. scan_index++;
  2108. }
  2109. indio_dev->num_channels = scan_index;
  2110. indio_dev->channels = channels;
  2111. return 0;
  2112. }
  2113. static int stm32_adc_dma_request(struct device *dev, struct iio_dev *indio_dev)
  2114. {
  2115. struct stm32_adc *adc = iio_priv(indio_dev);
  2116. struct dma_slave_config config = { };
  2117. int ret;
  2118. adc->dma_chan = dma_request_chan(dev, "rx");
  2119. if (IS_ERR(adc->dma_chan)) {
  2120. ret = PTR_ERR(adc->dma_chan);
  2121. if (ret != -ENODEV)
  2122. return dev_err_probe(dev, ret,
  2123. "DMA channel request failed with\n");
  2124. /* DMA is optional: fall back to IRQ mode */
  2125. adc->dma_chan = NULL;
  2126. return 0;
  2127. }
  2128. adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
  2129. STM32_DMA_BUFFER_SIZE,
  2130. &adc->rx_dma_buf, GFP_KERNEL);
  2131. if (!adc->rx_buf) {
  2132. ret = -ENOMEM;
  2133. goto err_release;
  2134. }
  2135. /* Configure DMA channel to read data register */
  2136. config.src_addr = (dma_addr_t)adc->common->phys_base;
  2137. config.src_addr += adc->offset + adc->cfg->regs->dr;
  2138. config.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
  2139. ret = dmaengine_slave_config(adc->dma_chan, &config);
  2140. if (ret)
  2141. goto err_free;
  2142. return 0;
  2143. err_free:
  2144. dma_free_coherent(adc->dma_chan->device->dev, STM32_DMA_BUFFER_SIZE,
  2145. adc->rx_buf, adc->rx_dma_buf);
  2146. err_release:
  2147. dma_release_channel(adc->dma_chan);
  2148. return ret;
  2149. }
  2150. static int stm32_adc_probe(struct platform_device *pdev)
  2151. {
  2152. struct iio_dev *indio_dev;
  2153. struct device *dev = &pdev->dev;
  2154. irqreturn_t (*handler)(int irq, void *p) = NULL;
  2155. struct stm32_adc *adc;
  2156. bool timestamping = false;
  2157. int ret;
  2158. indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc));
  2159. if (!indio_dev)
  2160. return -ENOMEM;
  2161. adc = iio_priv(indio_dev);
  2162. adc->common = dev_get_drvdata(pdev->dev.parent);
  2163. spin_lock_init(&adc->lock);
  2164. init_completion(&adc->completion);
  2165. adc->cfg = device_get_match_data(dev);
  2166. indio_dev->name = dev_name(&pdev->dev);
  2167. device_set_node(&indio_dev->dev, dev_fwnode(&pdev->dev));
  2168. indio_dev->info = &stm32_adc_iio_info;
  2169. indio_dev->modes = INDIO_DIRECT_MODE | INDIO_HARDWARE_TRIGGERED;
  2170. platform_set_drvdata(pdev, indio_dev);
  2171. ret = device_property_read_u32(dev, "reg", &adc->offset);
  2172. if (ret != 0) {
  2173. dev_err(&pdev->dev, "missing reg property\n");
  2174. return -EINVAL;
  2175. }
  2176. adc->irq = platform_get_irq(pdev, 0);
  2177. if (adc->irq < 0)
  2178. return adc->irq;
  2179. ret = devm_request_threaded_irq(&pdev->dev, adc->irq, stm32_adc_isr,
  2180. stm32_adc_threaded_isr,
  2181. 0, pdev->name, indio_dev);
  2182. if (ret) {
  2183. dev_err(&pdev->dev, "failed to request IRQ\n");
  2184. return ret;
  2185. }
  2186. adc->clk = devm_clk_get(&pdev->dev, NULL);
  2187. if (IS_ERR(adc->clk)) {
  2188. ret = PTR_ERR(adc->clk);
  2189. if (ret == -ENOENT && !adc->cfg->clk_required) {
  2190. adc->clk = NULL;
  2191. } else {
  2192. dev_err(&pdev->dev, "Can't get clock\n");
  2193. return ret;
  2194. }
  2195. }
  2196. ret = stm32_adc_fw_get_resolution(indio_dev);
  2197. if (ret < 0)
  2198. return ret;
  2199. ret = stm32_adc_dma_request(dev, indio_dev);
  2200. if (ret < 0)
  2201. return ret;
  2202. if (!adc->dma_chan) {
  2203. /* For PIO mode only, iio_pollfunc_store_time stores a timestamp
  2204. * in the primary trigger IRQ handler and stm32_adc_trigger_handler
  2205. * runs in the IRQ thread to push out buffer along with timestamp.
  2206. */
  2207. handler = &stm32_adc_trigger_handler;
  2208. timestamping = true;
  2209. }
  2210. ret = stm32_adc_chan_fw_init(indio_dev, timestamping);
  2211. if (ret < 0)
  2212. goto err_dma_disable;
  2213. ret = iio_triggered_buffer_setup(indio_dev,
  2214. &iio_pollfunc_store_time, handler,
  2215. &stm32_adc_buffer_setup_ops);
  2216. if (ret) {
  2217. dev_err(&pdev->dev, "buffer setup failed\n");
  2218. goto err_dma_disable;
  2219. }
  2220. /* Get stm32-adc-core PM online */
  2221. pm_runtime_get_noresume(dev);
  2222. pm_runtime_set_active(dev);
  2223. pm_runtime_set_autosuspend_delay(dev, STM32_ADC_HW_STOP_DELAY_MS);
  2224. pm_runtime_use_autosuspend(dev);
  2225. pm_runtime_enable(dev);
  2226. ret = stm32_adc_hw_start(dev);
  2227. if (ret)
  2228. goto err_buffer_cleanup;
  2229. ret = iio_device_register(indio_dev);
  2230. if (ret) {
  2231. dev_err(&pdev->dev, "iio dev register failed\n");
  2232. goto err_hw_stop;
  2233. }
  2234. pm_runtime_put_autosuspend(dev);
  2235. if (IS_ENABLED(CONFIG_DEBUG_FS))
  2236. stm32_adc_debugfs_init(indio_dev);
  2237. return 0;
  2238. err_hw_stop:
  2239. stm32_adc_hw_stop(dev);
  2240. err_buffer_cleanup:
  2241. pm_runtime_disable(dev);
  2242. pm_runtime_set_suspended(dev);
  2243. pm_runtime_put_noidle(dev);
  2244. iio_triggered_buffer_cleanup(indio_dev);
  2245. err_dma_disable:
  2246. if (adc->dma_chan) {
  2247. dma_free_coherent(adc->dma_chan->device->dev,
  2248. STM32_DMA_BUFFER_SIZE,
  2249. adc->rx_buf, adc->rx_dma_buf);
  2250. dma_release_channel(adc->dma_chan);
  2251. }
  2252. return ret;
  2253. }
  2254. static void stm32_adc_remove(struct platform_device *pdev)
  2255. {
  2256. struct iio_dev *indio_dev = platform_get_drvdata(pdev);
  2257. struct stm32_adc *adc = iio_priv(indio_dev);
  2258. pm_runtime_get_sync(&pdev->dev);
  2259. /* iio_device_unregister() also removes debugfs entries */
  2260. iio_device_unregister(indio_dev);
  2261. stm32_adc_hw_stop(&pdev->dev);
  2262. pm_runtime_disable(&pdev->dev);
  2263. pm_runtime_set_suspended(&pdev->dev);
  2264. pm_runtime_put_noidle(&pdev->dev);
  2265. iio_triggered_buffer_cleanup(indio_dev);
  2266. if (adc->dma_chan) {
  2267. dma_free_coherent(adc->dma_chan->device->dev,
  2268. STM32_DMA_BUFFER_SIZE,
  2269. adc->rx_buf, adc->rx_dma_buf);
  2270. dma_release_channel(adc->dma_chan);
  2271. }
  2272. }
  2273. static int stm32_adc_suspend(struct device *dev)
  2274. {
  2275. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  2276. if (iio_buffer_enabled(indio_dev))
  2277. stm32_adc_buffer_predisable(indio_dev);
  2278. return pm_runtime_force_suspend(dev);
  2279. }
  2280. static int stm32_adc_resume(struct device *dev)
  2281. {
  2282. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  2283. int ret;
  2284. ret = pm_runtime_force_resume(dev);
  2285. if (ret < 0)
  2286. return ret;
  2287. if (!iio_buffer_enabled(indio_dev))
  2288. return 0;
  2289. ret = stm32_adc_update_scan_mode(indio_dev,
  2290. indio_dev->active_scan_mask);
  2291. if (ret < 0)
  2292. return ret;
  2293. return stm32_adc_buffer_postenable(indio_dev);
  2294. }
  2295. static int stm32_adc_runtime_suspend(struct device *dev)
  2296. {
  2297. return stm32_adc_hw_stop(dev);
  2298. }
  2299. static int stm32_adc_runtime_resume(struct device *dev)
  2300. {
  2301. return stm32_adc_hw_start(dev);
  2302. }
  2303. static const struct dev_pm_ops stm32_adc_pm_ops = {
  2304. SYSTEM_SLEEP_PM_OPS(stm32_adc_suspend, stm32_adc_resume)
  2305. RUNTIME_PM_OPS(stm32_adc_runtime_suspend, stm32_adc_runtime_resume,
  2306. NULL)
  2307. };
  2308. static const struct stm32_adc_cfg stm32f4_adc_cfg = {
  2309. .regs = &stm32f4_adc_regspec,
  2310. .adc_info = &stm32f4_adc_info,
  2311. .trigs = stm32f4_adc_trigs,
  2312. .clk_required = true,
  2313. .start_conv = stm32f4_adc_start_conv,
  2314. .stop_conv = stm32f4_adc_stop_conv,
  2315. .smp_cycles = stm32f4_adc_smp_cycles,
  2316. .irq_clear = stm32f4_adc_irq_clear,
  2317. };
  2318. static const unsigned int stm32_adc_min_ts_h7[] = { 0, 0, 0, 4300, 9000 };
  2319. static_assert(ARRAY_SIZE(stm32_adc_min_ts_h7) == STM32_ADC_INT_CH_NB);
  2320. static const struct stm32_adc_cfg stm32h7_adc_cfg = {
  2321. .regs = &stm32h7_adc_regspec,
  2322. .adc_info = &stm32h7_adc_info,
  2323. .trigs = stm32h7_adc_trigs,
  2324. .has_boostmode = true,
  2325. .has_linearcal = true,
  2326. .has_presel = true,
  2327. .has_oversampling = true,
  2328. .start_conv = stm32h7_adc_start_conv,
  2329. .stop_conv = stm32h7_adc_stop_conv,
  2330. .prepare = stm32h7_adc_prepare,
  2331. .unprepare = stm32h7_adc_unprepare,
  2332. .smp_cycles = stm32h7_adc_smp_cycles,
  2333. .irq_clear = stm32h7_adc_irq_clear,
  2334. .ts_int_ch = stm32_adc_min_ts_h7,
  2335. .set_ovs = stm32h7_adc_set_ovs,
  2336. };
  2337. static const unsigned int stm32_adc_min_ts_mp1[] = { 100, 100, 100, 4300, 9800 };
  2338. static_assert(ARRAY_SIZE(stm32_adc_min_ts_mp1) == STM32_ADC_INT_CH_NB);
  2339. static const struct stm32_adc_cfg stm32mp1_adc_cfg = {
  2340. .regs = &stm32mp1_adc_regspec,
  2341. .adc_info = &stm32h7_adc_info,
  2342. .trigs = stm32h7_adc_trigs,
  2343. .has_vregready = true,
  2344. .has_boostmode = true,
  2345. .has_linearcal = true,
  2346. .has_presel = true,
  2347. .has_oversampling = true,
  2348. .start_conv = stm32h7_adc_start_conv,
  2349. .stop_conv = stm32h7_adc_stop_conv,
  2350. .prepare = stm32h7_adc_prepare,
  2351. .unprepare = stm32h7_adc_unprepare,
  2352. .smp_cycles = stm32h7_adc_smp_cycles,
  2353. .irq_clear = stm32h7_adc_irq_clear,
  2354. .ts_int_ch = stm32_adc_min_ts_mp1,
  2355. .set_ovs = stm32h7_adc_set_ovs,
  2356. };
  2357. static const unsigned int stm32_adc_min_ts_mp13[] = { 100, 0, 0, 4300, 9800 };
  2358. static_assert(ARRAY_SIZE(stm32_adc_min_ts_mp13) == STM32_ADC_INT_CH_NB);
  2359. static const struct stm32_adc_cfg stm32mp13_adc_cfg = {
  2360. .regs = &stm32mp13_adc_regspec,
  2361. .adc_info = &stm32mp13_adc_info,
  2362. .trigs = stm32h7_adc_trigs,
  2363. .has_oversampling = true,
  2364. .start_conv = stm32mp13_adc_start_conv,
  2365. .stop_conv = stm32h7_adc_stop_conv,
  2366. .prepare = stm32h7_adc_prepare,
  2367. .unprepare = stm32h7_adc_unprepare,
  2368. .smp_cycles = stm32mp13_adc_smp_cycles,
  2369. .irq_clear = stm32h7_adc_irq_clear,
  2370. .ts_int_ch = stm32_adc_min_ts_mp13,
  2371. .set_ovs = stm32mp13_adc_set_ovs,
  2372. };
  2373. static const struct of_device_id stm32_adc_of_match[] = {
  2374. { .compatible = "st,stm32f4-adc", .data = (void *)&stm32f4_adc_cfg },
  2375. { .compatible = "st,stm32h7-adc", .data = (void *)&stm32h7_adc_cfg },
  2376. { .compatible = "st,stm32mp1-adc", .data = (void *)&stm32mp1_adc_cfg },
  2377. { .compatible = "st,stm32mp13-adc", .data = (void *)&stm32mp13_adc_cfg },
  2378. { }
  2379. };
  2380. MODULE_DEVICE_TABLE(of, stm32_adc_of_match);
  2381. static struct platform_driver stm32_adc_driver = {
  2382. .probe = stm32_adc_probe,
  2383. .remove = stm32_adc_remove,
  2384. .driver = {
  2385. .name = "stm32-adc",
  2386. .of_match_table = stm32_adc_of_match,
  2387. .pm = pm_ptr(&stm32_adc_pm_ops),
  2388. },
  2389. };
  2390. module_platform_driver(stm32_adc_driver);
  2391. MODULE_AUTHOR("Fabrice Gasnier <fabrice.gasnier@st.com>");
  2392. MODULE_DESCRIPTION("STMicroelectronics STM32 ADC IIO driver");
  2393. MODULE_LICENSE("GPL v2");
  2394. MODULE_ALIAS("platform:stm32-adc");