xilinx-xadc-core.c 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Xilinx XADC driver
  4. *
  5. * Copyright 2013-2014 Analog Devices Inc.
  6. * Author: Lars-Peter Clausen <lars@metafoo.de>
  7. *
  8. * Documentation for the parts can be found at:
  9. * - XADC hardmacro: Xilinx UG480
  10. * - ZYNQ XADC interface: Xilinx UG585
  11. * - AXI XADC interface: Xilinx PG019
  12. */
  13. #include <linux/clk.h>
  14. #include <linux/device.h>
  15. #include <linux/err.h>
  16. #include <linux/interrupt.h>
  17. #include <linux/io.h>
  18. #include <linux/kernel.h>
  19. #include <linux/mod_devicetable.h>
  20. #include <linux/module.h>
  21. #include <linux/overflow.h>
  22. #include <linux/platform_device.h>
  23. #include <linux/property.h>
  24. #include <linux/slab.h>
  25. #include <linux/sysfs.h>
  26. #include <linux/iio/buffer.h>
  27. #include <linux/iio/events.h>
  28. #include <linux/iio/iio.h>
  29. #include <linux/iio/sysfs.h>
  30. #include <linux/iio/trigger.h>
  31. #include <linux/iio/trigger_consumer.h>
  32. #include <linux/iio/triggered_buffer.h>
  33. #include "xilinx-xadc.h"
  34. static const unsigned int XADC_ZYNQ_UNMASK_TIMEOUT = 500;
  35. /* ZYNQ register definitions */
  36. #define XADC_ZYNQ_REG_CFG 0x00
  37. #define XADC_ZYNQ_REG_INTSTS 0x04
  38. #define XADC_ZYNQ_REG_INTMSK 0x08
  39. #define XADC_ZYNQ_REG_STATUS 0x0c
  40. #define XADC_ZYNQ_REG_CFIFO 0x10
  41. #define XADC_ZYNQ_REG_DFIFO 0x14
  42. #define XADC_ZYNQ_REG_CTL 0x18
  43. #define XADC_ZYNQ_CFG_ENABLE BIT(31)
  44. #define XADC_ZYNQ_CFG_CFIFOTH_MASK (0xf << 20)
  45. #define XADC_ZYNQ_CFG_CFIFOTH_OFFSET 20
  46. #define XADC_ZYNQ_CFG_DFIFOTH_MASK (0xf << 16)
  47. #define XADC_ZYNQ_CFG_DFIFOTH_OFFSET 16
  48. #define XADC_ZYNQ_CFG_WEDGE BIT(13)
  49. #define XADC_ZYNQ_CFG_REDGE BIT(12)
  50. #define XADC_ZYNQ_CFG_TCKRATE_MASK (0x3 << 8)
  51. #define XADC_ZYNQ_CFG_TCKRATE_DIV2 (0x0 << 8)
  52. #define XADC_ZYNQ_CFG_TCKRATE_DIV4 (0x1 << 8)
  53. #define XADC_ZYNQ_CFG_TCKRATE_DIV8 (0x2 << 8)
  54. #define XADC_ZYNQ_CFG_TCKRATE_DIV16 (0x3 << 8)
  55. #define XADC_ZYNQ_CFG_IGAP_MASK 0x1f
  56. #define XADC_ZYNQ_CFG_IGAP(x) (x)
  57. #define XADC_ZYNQ_INT_CFIFO_LTH BIT(9)
  58. #define XADC_ZYNQ_INT_DFIFO_GTH BIT(8)
  59. #define XADC_ZYNQ_INT_ALARM_MASK 0xff
  60. #define XADC_ZYNQ_INT_ALARM_OFFSET 0
  61. #define XADC_ZYNQ_STATUS_CFIFO_LVL_MASK (0xf << 16)
  62. #define XADC_ZYNQ_STATUS_CFIFO_LVL_OFFSET 16
  63. #define XADC_ZYNQ_STATUS_DFIFO_LVL_MASK (0xf << 12)
  64. #define XADC_ZYNQ_STATUS_DFIFO_LVL_OFFSET 12
  65. #define XADC_ZYNQ_STATUS_CFIFOF BIT(11)
  66. #define XADC_ZYNQ_STATUS_CFIFOE BIT(10)
  67. #define XADC_ZYNQ_STATUS_DFIFOF BIT(9)
  68. #define XADC_ZYNQ_STATUS_DFIFOE BIT(8)
  69. #define XADC_ZYNQ_STATUS_OT BIT(7)
  70. #define XADC_ZYNQ_STATUS_ALM(x) BIT(x)
  71. #define XADC_ZYNQ_CTL_RESET BIT(4)
  72. #define XADC_ZYNQ_CMD_NOP 0x00
  73. #define XADC_ZYNQ_CMD_READ 0x01
  74. #define XADC_ZYNQ_CMD_WRITE 0x02
  75. #define XADC_ZYNQ_CMD(cmd, addr, data) (((cmd) << 26) | ((addr) << 16) | (data))
  76. /* AXI register definitions */
  77. #define XADC_AXI_REG_RESET 0x00
  78. #define XADC_AXI_REG_STATUS 0x04
  79. #define XADC_AXI_REG_ALARM_STATUS 0x08
  80. #define XADC_AXI_REG_CONVST 0x0c
  81. #define XADC_AXI_REG_XADC_RESET 0x10
  82. #define XADC_AXI_REG_GIER 0x5c
  83. #define XADC_AXI_REG_IPISR 0x60
  84. #define XADC_AXI_REG_IPIER 0x68
  85. /* 7 Series */
  86. #define XADC_7S_AXI_ADC_REG_OFFSET 0x200
  87. /* UltraScale */
  88. #define XADC_US_AXI_ADC_REG_OFFSET 0x400
  89. #define XADC_AXI_RESET_MAGIC 0xa
  90. #define XADC_AXI_GIER_ENABLE BIT(31)
  91. #define XADC_AXI_INT_EOS BIT(4)
  92. #define XADC_AXI_INT_ALARM_MASK 0x3c0f
  93. #define XADC_FLAGS_BUFFERED BIT(0)
  94. #define XADC_FLAGS_IRQ_OPTIONAL BIT(1)
  95. /*
  96. * The XADC hardware supports a samplerate of up to 1MSPS. Unfortunately it does
  97. * not have a hardware FIFO. Which means an interrupt is generated for each
  98. * conversion sequence. At 1MSPS sample rate the CPU in ZYNQ7000 is completely
  99. * overloaded by the interrupts that it soft-lockups. For this reason the driver
  100. * limits the maximum samplerate 150kSPS. At this rate the CPU is fairly busy,
  101. * but still responsive.
  102. */
  103. #define XADC_MAX_SAMPLERATE 150000
  104. static void xadc_write_reg(struct xadc *xadc, unsigned int reg,
  105. uint32_t val)
  106. {
  107. writel(val, xadc->base + reg);
  108. }
  109. static void xadc_read_reg(struct xadc *xadc, unsigned int reg,
  110. uint32_t *val)
  111. {
  112. *val = readl(xadc->base + reg);
  113. }
  114. /*
  115. * The ZYNQ interface uses two asynchronous FIFOs for communication with the
  116. * XADC. Reads and writes to the XADC register are performed by submitting a
  117. * request to the command FIFO (CFIFO), once the request has been completed the
  118. * result can be read from the data FIFO (DFIFO). The method currently used in
  119. * this driver is to submit the request for a read/write operation, then go to
  120. * sleep and wait for an interrupt that signals that a response is available in
  121. * the data FIFO.
  122. */
  123. static void xadc_zynq_write_fifo(struct xadc *xadc, uint32_t *cmd,
  124. unsigned int n)
  125. {
  126. unsigned int i;
  127. for (i = 0; i < n; i++)
  128. xadc_write_reg(xadc, XADC_ZYNQ_REG_CFIFO, cmd[i]);
  129. }
  130. static void xadc_zynq_drain_fifo(struct xadc *xadc)
  131. {
  132. uint32_t status, tmp;
  133. xadc_read_reg(xadc, XADC_ZYNQ_REG_STATUS, &status);
  134. while (!(status & XADC_ZYNQ_STATUS_DFIFOE)) {
  135. xadc_read_reg(xadc, XADC_ZYNQ_REG_DFIFO, &tmp);
  136. xadc_read_reg(xadc, XADC_ZYNQ_REG_STATUS, &status);
  137. }
  138. }
  139. static void xadc_zynq_update_intmsk(struct xadc *xadc, unsigned int mask,
  140. unsigned int val)
  141. {
  142. xadc->zynq_intmask &= ~mask;
  143. xadc->zynq_intmask |= val;
  144. xadc_write_reg(xadc, XADC_ZYNQ_REG_INTMSK,
  145. xadc->zynq_intmask | xadc->zynq_masked_alarm);
  146. }
  147. static int xadc_zynq_write_adc_reg(struct xadc *xadc, unsigned int reg,
  148. uint16_t val)
  149. {
  150. uint32_t cmd[1];
  151. uint32_t tmp;
  152. int ret;
  153. spin_lock_irq(&xadc->lock);
  154. xadc_zynq_update_intmsk(xadc, XADC_ZYNQ_INT_DFIFO_GTH,
  155. XADC_ZYNQ_INT_DFIFO_GTH);
  156. reinit_completion(&xadc->completion);
  157. cmd[0] = XADC_ZYNQ_CMD(XADC_ZYNQ_CMD_WRITE, reg, val);
  158. xadc_zynq_write_fifo(xadc, cmd, ARRAY_SIZE(cmd));
  159. xadc_read_reg(xadc, XADC_ZYNQ_REG_CFG, &tmp);
  160. tmp &= ~XADC_ZYNQ_CFG_DFIFOTH_MASK;
  161. tmp |= 0 << XADC_ZYNQ_CFG_DFIFOTH_OFFSET;
  162. xadc_write_reg(xadc, XADC_ZYNQ_REG_CFG, tmp);
  163. xadc_zynq_update_intmsk(xadc, XADC_ZYNQ_INT_DFIFO_GTH, 0);
  164. spin_unlock_irq(&xadc->lock);
  165. ret = wait_for_completion_interruptible_timeout(&xadc->completion, HZ);
  166. if (ret == 0)
  167. ret = -EIO;
  168. else
  169. ret = 0;
  170. xadc_read_reg(xadc, XADC_ZYNQ_REG_DFIFO, &tmp);
  171. return ret;
  172. }
  173. static int xadc_zynq_read_adc_reg(struct xadc *xadc, unsigned int reg,
  174. uint16_t *val)
  175. {
  176. uint32_t cmd[2];
  177. uint32_t resp, tmp;
  178. int ret;
  179. cmd[0] = XADC_ZYNQ_CMD(XADC_ZYNQ_CMD_READ, reg, 0);
  180. cmd[1] = XADC_ZYNQ_CMD(XADC_ZYNQ_CMD_NOP, 0, 0);
  181. spin_lock_irq(&xadc->lock);
  182. xadc_zynq_update_intmsk(xadc, XADC_ZYNQ_INT_DFIFO_GTH,
  183. XADC_ZYNQ_INT_DFIFO_GTH);
  184. xadc_zynq_drain_fifo(xadc);
  185. reinit_completion(&xadc->completion);
  186. xadc_zynq_write_fifo(xadc, cmd, ARRAY_SIZE(cmd));
  187. xadc_read_reg(xadc, XADC_ZYNQ_REG_CFG, &tmp);
  188. tmp &= ~XADC_ZYNQ_CFG_DFIFOTH_MASK;
  189. tmp |= 1 << XADC_ZYNQ_CFG_DFIFOTH_OFFSET;
  190. xadc_write_reg(xadc, XADC_ZYNQ_REG_CFG, tmp);
  191. xadc_zynq_update_intmsk(xadc, XADC_ZYNQ_INT_DFIFO_GTH, 0);
  192. spin_unlock_irq(&xadc->lock);
  193. ret = wait_for_completion_interruptible_timeout(&xadc->completion, HZ);
  194. if (ret == 0)
  195. ret = -EIO;
  196. if (ret < 0)
  197. return ret;
  198. xadc_read_reg(xadc, XADC_ZYNQ_REG_DFIFO, &resp);
  199. xadc_read_reg(xadc, XADC_ZYNQ_REG_DFIFO, &resp);
  200. *val = resp & 0xffff;
  201. return 0;
  202. }
  203. static unsigned int xadc_zynq_transform_alarm(unsigned int alarm)
  204. {
  205. return ((alarm & 0x80) >> 4) |
  206. ((alarm & 0x78) << 1) |
  207. (alarm & 0x07);
  208. }
  209. /*
  210. * The ZYNQ threshold interrupts are level sensitive. Since we can't make the
  211. * threshold condition go way from within the interrupt handler, this means as
  212. * soon as a threshold condition is present we would enter the interrupt handler
  213. * again and again. To work around this we mask all active thresholds interrupts
  214. * in the interrupt handler and start a timer. In this timer we poll the
  215. * interrupt status and only if the interrupt is inactive we unmask it again.
  216. */
  217. static void xadc_zynq_unmask_worker(struct work_struct *work)
  218. {
  219. struct xadc *xadc = container_of(work, struct xadc, zynq_unmask_work.work);
  220. unsigned int misc_sts, unmask;
  221. xadc_read_reg(xadc, XADC_ZYNQ_REG_STATUS, &misc_sts);
  222. misc_sts &= XADC_ZYNQ_INT_ALARM_MASK;
  223. spin_lock_irq(&xadc->lock);
  224. /* Clear those bits which are not active anymore */
  225. unmask = (xadc->zynq_masked_alarm ^ misc_sts) & xadc->zynq_masked_alarm;
  226. xadc->zynq_masked_alarm &= misc_sts;
  227. /* Also clear those which are masked out anyway */
  228. xadc->zynq_masked_alarm &= ~xadc->zynq_intmask;
  229. /* Clear the interrupts before we unmask them */
  230. xadc_write_reg(xadc, XADC_ZYNQ_REG_INTSTS, unmask);
  231. xadc_zynq_update_intmsk(xadc, 0, 0);
  232. spin_unlock_irq(&xadc->lock);
  233. /* if still pending some alarm re-trigger the timer */
  234. if (xadc->zynq_masked_alarm) {
  235. schedule_delayed_work(&xadc->zynq_unmask_work,
  236. msecs_to_jiffies(XADC_ZYNQ_UNMASK_TIMEOUT));
  237. }
  238. }
  239. static irqreturn_t xadc_zynq_interrupt_handler(int irq, void *devid)
  240. {
  241. struct iio_dev *indio_dev = devid;
  242. struct xadc *xadc = iio_priv(indio_dev);
  243. uint32_t status;
  244. xadc_read_reg(xadc, XADC_ZYNQ_REG_INTSTS, &status);
  245. status &= ~(xadc->zynq_intmask | xadc->zynq_masked_alarm);
  246. if (!status)
  247. return IRQ_NONE;
  248. spin_lock(&xadc->lock);
  249. xadc_write_reg(xadc, XADC_ZYNQ_REG_INTSTS, status);
  250. if (status & XADC_ZYNQ_INT_DFIFO_GTH) {
  251. xadc_zynq_update_intmsk(xadc, XADC_ZYNQ_INT_DFIFO_GTH,
  252. XADC_ZYNQ_INT_DFIFO_GTH);
  253. complete(&xadc->completion);
  254. }
  255. status &= XADC_ZYNQ_INT_ALARM_MASK;
  256. if (status) {
  257. xadc->zynq_masked_alarm |= status;
  258. /*
  259. * mask the current event interrupt,
  260. * unmask it when the interrupt is no more active.
  261. */
  262. xadc_zynq_update_intmsk(xadc, 0, 0);
  263. xadc_handle_events(indio_dev,
  264. xadc_zynq_transform_alarm(status));
  265. /* unmask the required interrupts in timer. */
  266. schedule_delayed_work(&xadc->zynq_unmask_work,
  267. msecs_to_jiffies(XADC_ZYNQ_UNMASK_TIMEOUT));
  268. }
  269. spin_unlock(&xadc->lock);
  270. return IRQ_HANDLED;
  271. }
  272. #define XADC_ZYNQ_TCK_RATE_MAX 50000000
  273. #define XADC_ZYNQ_IGAP_DEFAULT 20
  274. #define XADC_ZYNQ_PCAP_RATE_MAX 200000000
  275. static int xadc_zynq_setup(struct platform_device *pdev,
  276. struct iio_dev *indio_dev, int irq)
  277. {
  278. struct xadc *xadc = iio_priv(indio_dev);
  279. unsigned long pcap_rate;
  280. unsigned int tck_div;
  281. unsigned int div;
  282. unsigned int igap;
  283. unsigned int tck_rate;
  284. int ret;
  285. /* TODO: Figure out how to make igap and tck_rate configurable */
  286. igap = XADC_ZYNQ_IGAP_DEFAULT;
  287. tck_rate = XADC_ZYNQ_TCK_RATE_MAX;
  288. xadc->zynq_intmask = ~0;
  289. pcap_rate = clk_get_rate(xadc->clk);
  290. if (!pcap_rate)
  291. return -EINVAL;
  292. if (pcap_rate > XADC_ZYNQ_PCAP_RATE_MAX) {
  293. ret = clk_set_rate(xadc->clk,
  294. (unsigned long)XADC_ZYNQ_PCAP_RATE_MAX);
  295. if (ret)
  296. return ret;
  297. }
  298. if (tck_rate > pcap_rate / 2) {
  299. div = 2;
  300. } else {
  301. div = pcap_rate / tck_rate;
  302. if (pcap_rate / div > XADC_ZYNQ_TCK_RATE_MAX)
  303. div++;
  304. }
  305. if (div <= 3)
  306. tck_div = XADC_ZYNQ_CFG_TCKRATE_DIV2;
  307. else if (div <= 7)
  308. tck_div = XADC_ZYNQ_CFG_TCKRATE_DIV4;
  309. else if (div <= 15)
  310. tck_div = XADC_ZYNQ_CFG_TCKRATE_DIV8;
  311. else
  312. tck_div = XADC_ZYNQ_CFG_TCKRATE_DIV16;
  313. xadc_write_reg(xadc, XADC_ZYNQ_REG_CTL, XADC_ZYNQ_CTL_RESET);
  314. xadc_write_reg(xadc, XADC_ZYNQ_REG_CTL, 0);
  315. xadc_write_reg(xadc, XADC_ZYNQ_REG_INTSTS, ~0);
  316. xadc_write_reg(xadc, XADC_ZYNQ_REG_INTMSK, xadc->zynq_intmask);
  317. xadc_write_reg(xadc, XADC_ZYNQ_REG_CFG, XADC_ZYNQ_CFG_ENABLE |
  318. XADC_ZYNQ_CFG_REDGE | XADC_ZYNQ_CFG_WEDGE |
  319. tck_div | XADC_ZYNQ_CFG_IGAP(igap));
  320. if (pcap_rate > XADC_ZYNQ_PCAP_RATE_MAX) {
  321. ret = clk_set_rate(xadc->clk, pcap_rate);
  322. if (ret)
  323. return ret;
  324. }
  325. return 0;
  326. }
  327. static unsigned long xadc_zynq_get_dclk_rate(struct xadc *xadc)
  328. {
  329. unsigned int div;
  330. uint32_t val;
  331. xadc_read_reg(xadc, XADC_ZYNQ_REG_CFG, &val);
  332. switch (val & XADC_ZYNQ_CFG_TCKRATE_MASK) {
  333. case XADC_ZYNQ_CFG_TCKRATE_DIV4:
  334. div = 4;
  335. break;
  336. case XADC_ZYNQ_CFG_TCKRATE_DIV8:
  337. div = 8;
  338. break;
  339. case XADC_ZYNQ_CFG_TCKRATE_DIV16:
  340. div = 16;
  341. break;
  342. default:
  343. div = 2;
  344. break;
  345. }
  346. return clk_get_rate(xadc->clk) / div;
  347. }
  348. static void xadc_zynq_update_alarm(struct xadc *xadc, unsigned int alarm)
  349. {
  350. unsigned long flags;
  351. uint32_t status;
  352. /* Move OT to bit 7 */
  353. alarm = ((alarm & 0x08) << 4) | ((alarm & 0xf0) >> 1) | (alarm & 0x07);
  354. spin_lock_irqsave(&xadc->lock, flags);
  355. /* Clear previous interrupts if any. */
  356. xadc_read_reg(xadc, XADC_ZYNQ_REG_INTSTS, &status);
  357. xadc_write_reg(xadc, XADC_ZYNQ_REG_INTSTS, status & alarm);
  358. xadc_zynq_update_intmsk(xadc, XADC_ZYNQ_INT_ALARM_MASK,
  359. ~alarm & XADC_ZYNQ_INT_ALARM_MASK);
  360. spin_unlock_irqrestore(&xadc->lock, flags);
  361. }
  362. static const struct xadc_ops xadc_zynq_ops = {
  363. .read = xadc_zynq_read_adc_reg,
  364. .write = xadc_zynq_write_adc_reg,
  365. .setup = xadc_zynq_setup,
  366. .get_dclk_rate = xadc_zynq_get_dclk_rate,
  367. .interrupt_handler = xadc_zynq_interrupt_handler,
  368. .update_alarm = xadc_zynq_update_alarm,
  369. .type = XADC_TYPE_S7,
  370. /* Temp in C = (val * 503.975) / 2**bits - 273.15 */
  371. .temp_scale = 503975,
  372. .temp_offset = 273150,
  373. };
  374. static const unsigned int xadc_axi_reg_offsets[] = {
  375. [XADC_TYPE_S7] = XADC_7S_AXI_ADC_REG_OFFSET,
  376. [XADC_TYPE_US] = XADC_US_AXI_ADC_REG_OFFSET,
  377. };
  378. static int xadc_axi_read_adc_reg(struct xadc *xadc, unsigned int reg,
  379. uint16_t *val)
  380. {
  381. uint32_t val32;
  382. xadc_read_reg(xadc, xadc_axi_reg_offsets[xadc->ops->type] + reg * 4,
  383. &val32);
  384. *val = val32 & 0xffff;
  385. return 0;
  386. }
  387. static int xadc_axi_write_adc_reg(struct xadc *xadc, unsigned int reg,
  388. uint16_t val)
  389. {
  390. xadc_write_reg(xadc, xadc_axi_reg_offsets[xadc->ops->type] + reg * 4,
  391. val);
  392. return 0;
  393. }
  394. static int xadc_axi_setup(struct platform_device *pdev,
  395. struct iio_dev *indio_dev, int irq)
  396. {
  397. struct xadc *xadc = iio_priv(indio_dev);
  398. xadc_write_reg(xadc, XADC_AXI_REG_RESET, XADC_AXI_RESET_MAGIC);
  399. xadc_write_reg(xadc, XADC_AXI_REG_GIER, XADC_AXI_GIER_ENABLE);
  400. return 0;
  401. }
  402. static irqreturn_t xadc_axi_interrupt_handler(int irq, void *devid)
  403. {
  404. struct iio_dev *indio_dev = devid;
  405. struct xadc *xadc = iio_priv(indio_dev);
  406. uint32_t status, mask;
  407. unsigned int events;
  408. xadc_read_reg(xadc, XADC_AXI_REG_IPISR, &status);
  409. xadc_read_reg(xadc, XADC_AXI_REG_IPIER, &mask);
  410. status &= mask;
  411. if (!status)
  412. return IRQ_NONE;
  413. if ((status & XADC_AXI_INT_EOS) && xadc->trigger)
  414. iio_trigger_poll(xadc->trigger);
  415. if (status & XADC_AXI_INT_ALARM_MASK) {
  416. /*
  417. * The order of the bits in the AXI-XADC status register does
  418. * not match the order of the bits in the XADC alarm enable
  419. * register. xadc_handle_events() expects the events to be in
  420. * the same order as the XADC alarm enable register.
  421. */
  422. events = (status & 0x000e) >> 1;
  423. events |= (status & 0x0001) << 3;
  424. events |= (status & 0x3c00) >> 6;
  425. xadc_handle_events(indio_dev, events);
  426. }
  427. xadc_write_reg(xadc, XADC_AXI_REG_IPISR, status);
  428. return IRQ_HANDLED;
  429. }
  430. static void xadc_axi_update_alarm(struct xadc *xadc, unsigned int alarm)
  431. {
  432. uint32_t val;
  433. unsigned long flags;
  434. /*
  435. * The order of the bits in the AXI-XADC status register does not match
  436. * the order of the bits in the XADC alarm enable register. We get
  437. * passed the alarm mask in the same order as in the XADC alarm enable
  438. * register.
  439. */
  440. alarm = ((alarm & 0x07) << 1) | ((alarm & 0x08) >> 3) |
  441. ((alarm & 0xf0) << 6);
  442. spin_lock_irqsave(&xadc->lock, flags);
  443. xadc_read_reg(xadc, XADC_AXI_REG_IPIER, &val);
  444. val &= ~XADC_AXI_INT_ALARM_MASK;
  445. val |= alarm;
  446. xadc_write_reg(xadc, XADC_AXI_REG_IPIER, val);
  447. spin_unlock_irqrestore(&xadc->lock, flags);
  448. }
  449. static unsigned long xadc_axi_get_dclk(struct xadc *xadc)
  450. {
  451. return clk_get_rate(xadc->clk);
  452. }
  453. static const struct xadc_ops xadc_7s_axi_ops = {
  454. .read = xadc_axi_read_adc_reg,
  455. .write = xadc_axi_write_adc_reg,
  456. .setup = xadc_axi_setup,
  457. .get_dclk_rate = xadc_axi_get_dclk,
  458. .update_alarm = xadc_axi_update_alarm,
  459. .interrupt_handler = xadc_axi_interrupt_handler,
  460. .flags = XADC_FLAGS_BUFFERED | XADC_FLAGS_IRQ_OPTIONAL,
  461. .type = XADC_TYPE_S7,
  462. /* Temp in C = (val * 503.975) / 2**bits - 273.15 */
  463. .temp_scale = 503975,
  464. .temp_offset = 273150,
  465. };
  466. static const struct xadc_ops xadc_us_axi_ops = {
  467. .read = xadc_axi_read_adc_reg,
  468. .write = xadc_axi_write_adc_reg,
  469. .setup = xadc_axi_setup,
  470. .get_dclk_rate = xadc_axi_get_dclk,
  471. .update_alarm = xadc_axi_update_alarm,
  472. .interrupt_handler = xadc_axi_interrupt_handler,
  473. .flags = XADC_FLAGS_BUFFERED | XADC_FLAGS_IRQ_OPTIONAL,
  474. .type = XADC_TYPE_US,
  475. /**
  476. * Values below are for UltraScale+ (SYSMONE4) using internal reference.
  477. * See https://docs.xilinx.com/v/u/en-US/ug580-ultrascale-sysmon
  478. */
  479. .temp_scale = 509314,
  480. .temp_offset = 280231,
  481. };
  482. static int _xadc_update_adc_reg(struct xadc *xadc, unsigned int reg,
  483. uint16_t mask, uint16_t val)
  484. {
  485. uint16_t tmp;
  486. int ret;
  487. ret = _xadc_read_adc_reg(xadc, reg, &tmp);
  488. if (ret)
  489. return ret;
  490. return _xadc_write_adc_reg(xadc, reg, (tmp & ~mask) | val);
  491. }
  492. static int xadc_update_adc_reg(struct xadc *xadc, unsigned int reg,
  493. uint16_t mask, uint16_t val)
  494. {
  495. int ret;
  496. mutex_lock(&xadc->mutex);
  497. ret = _xadc_update_adc_reg(xadc, reg, mask, val);
  498. mutex_unlock(&xadc->mutex);
  499. return ret;
  500. }
  501. static unsigned long xadc_get_dclk_rate(struct xadc *xadc)
  502. {
  503. return xadc->ops->get_dclk_rate(xadc);
  504. }
  505. static int xadc_update_scan_mode(struct iio_dev *indio_dev,
  506. const unsigned long *mask)
  507. {
  508. struct xadc *xadc = iio_priv(indio_dev);
  509. size_t n;
  510. void *data;
  511. n = bitmap_weight(mask, iio_get_masklength(indio_dev));
  512. data = devm_krealloc_array(indio_dev->dev.parent, xadc->data,
  513. n, sizeof(*xadc->data), GFP_KERNEL);
  514. if (!data)
  515. return -ENOMEM;
  516. memset(data, 0, n * sizeof(*xadc->data));
  517. xadc->data = data;
  518. return 0;
  519. }
  520. static unsigned int xadc_scan_index_to_channel(unsigned int scan_index)
  521. {
  522. switch (scan_index) {
  523. case 5:
  524. return XADC_REG_VCCPINT;
  525. case 6:
  526. return XADC_REG_VCCPAUX;
  527. case 7:
  528. return XADC_REG_VCCO_DDR;
  529. case 8:
  530. return XADC_REG_TEMP;
  531. case 9:
  532. return XADC_REG_VCCINT;
  533. case 10:
  534. return XADC_REG_VCCAUX;
  535. case 11:
  536. return XADC_REG_VPVN;
  537. case 12:
  538. return XADC_REG_VREFP;
  539. case 13:
  540. return XADC_REG_VREFN;
  541. case 14:
  542. return XADC_REG_VCCBRAM;
  543. default:
  544. return XADC_REG_VAUX(scan_index - 16);
  545. }
  546. }
  547. static irqreturn_t xadc_trigger_handler(int irq, void *p)
  548. {
  549. struct iio_poll_func *pf = p;
  550. struct iio_dev *indio_dev = pf->indio_dev;
  551. struct xadc *xadc = iio_priv(indio_dev);
  552. unsigned int chan;
  553. int i, j;
  554. if (!xadc->data)
  555. goto out;
  556. j = 0;
  557. iio_for_each_active_channel(indio_dev, i) {
  558. chan = xadc_scan_index_to_channel(i);
  559. xadc_read_adc_reg(xadc, chan, &xadc->data[j]);
  560. j++;
  561. }
  562. iio_push_to_buffers(indio_dev, xadc->data);
  563. out:
  564. iio_trigger_notify_done(indio_dev->trig);
  565. return IRQ_HANDLED;
  566. }
  567. static int xadc_trigger_set_state(struct iio_trigger *trigger, bool state)
  568. {
  569. struct xadc *xadc = iio_trigger_get_drvdata(trigger);
  570. unsigned long flags;
  571. unsigned int convst;
  572. unsigned int val;
  573. int ret = 0;
  574. mutex_lock(&xadc->mutex);
  575. if (state) {
  576. /* Only one of the two triggers can be active at a time. */
  577. if (xadc->trigger != NULL) {
  578. ret = -EBUSY;
  579. goto err_out;
  580. } else {
  581. xadc->trigger = trigger;
  582. if (trigger == xadc->convst_trigger)
  583. convst = XADC_CONF0_EC;
  584. else
  585. convst = 0;
  586. }
  587. ret = _xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF0_EC,
  588. convst);
  589. if (ret)
  590. goto err_out;
  591. } else {
  592. xadc->trigger = NULL;
  593. }
  594. spin_lock_irqsave(&xadc->lock, flags);
  595. xadc_read_reg(xadc, XADC_AXI_REG_IPIER, &val);
  596. xadc_write_reg(xadc, XADC_AXI_REG_IPISR, XADC_AXI_INT_EOS);
  597. if (state)
  598. val |= XADC_AXI_INT_EOS;
  599. else
  600. val &= ~XADC_AXI_INT_EOS;
  601. xadc_write_reg(xadc, XADC_AXI_REG_IPIER, val);
  602. spin_unlock_irqrestore(&xadc->lock, flags);
  603. err_out:
  604. mutex_unlock(&xadc->mutex);
  605. return ret;
  606. }
  607. static const struct iio_trigger_ops xadc_trigger_ops = {
  608. .set_trigger_state = &xadc_trigger_set_state,
  609. };
  610. static struct iio_trigger *xadc_alloc_trigger(struct iio_dev *indio_dev,
  611. const char *name)
  612. {
  613. struct device *dev = indio_dev->dev.parent;
  614. struct iio_trigger *trig;
  615. int ret;
  616. trig = devm_iio_trigger_alloc(dev, "%s%d-%s", indio_dev->name,
  617. iio_device_id(indio_dev), name);
  618. if (trig == NULL)
  619. return ERR_PTR(-ENOMEM);
  620. trig->ops = &xadc_trigger_ops;
  621. iio_trigger_set_drvdata(trig, iio_priv(indio_dev));
  622. ret = devm_iio_trigger_register(dev, trig);
  623. if (ret)
  624. return ERR_PTR(ret);
  625. return trig;
  626. }
  627. static int xadc_power_adc_b(struct xadc *xadc, unsigned int seq_mode)
  628. {
  629. uint16_t val;
  630. /*
  631. * As per datasheet the power-down bits are don't care in the
  632. * UltraScale, but as per reality setting the power-down bit for the
  633. * non-existing ADC-B powers down the main ADC, so just return and don't
  634. * do anything.
  635. */
  636. if (xadc->ops->type == XADC_TYPE_US)
  637. return 0;
  638. /* Powerdown the ADC-B when it is not needed. */
  639. switch (seq_mode) {
  640. case XADC_CONF1_SEQ_SIMULTANEOUS:
  641. case XADC_CONF1_SEQ_INDEPENDENT:
  642. val = 0;
  643. break;
  644. default:
  645. val = XADC_CONF2_PD_ADC_B;
  646. break;
  647. }
  648. return xadc_update_adc_reg(xadc, XADC_REG_CONF2, XADC_CONF2_PD_MASK,
  649. val);
  650. }
  651. static int xadc_get_seq_mode(struct xadc *xadc, unsigned long scan_mode)
  652. {
  653. unsigned int aux_scan_mode = scan_mode >> 16;
  654. /* UltraScale has only one ADC and supports only continuous mode */
  655. if (xadc->ops->type == XADC_TYPE_US)
  656. return XADC_CONF1_SEQ_CONTINUOUS;
  657. if (xadc->external_mux_mode == XADC_EXTERNAL_MUX_DUAL)
  658. return XADC_CONF1_SEQ_SIMULTANEOUS;
  659. if ((aux_scan_mode & 0xff00) == 0 ||
  660. (aux_scan_mode & 0x00ff) == 0)
  661. return XADC_CONF1_SEQ_CONTINUOUS;
  662. return XADC_CONF1_SEQ_SIMULTANEOUS;
  663. }
  664. static int xadc_postdisable(struct iio_dev *indio_dev)
  665. {
  666. struct xadc *xadc = iio_priv(indio_dev);
  667. unsigned long scan_mask;
  668. int ret;
  669. int i;
  670. scan_mask = 1; /* Run calibration as part of the sequence */
  671. for (i = 0; i < indio_dev->num_channels; i++)
  672. scan_mask |= BIT(indio_dev->channels[i].scan_index);
  673. /* Enable all channels and calibration */
  674. ret = xadc_write_adc_reg(xadc, XADC_REG_SEQ(0), scan_mask & 0xffff);
  675. if (ret)
  676. return ret;
  677. ret = xadc_write_adc_reg(xadc, XADC_REG_SEQ(1), scan_mask >> 16);
  678. if (ret)
  679. return ret;
  680. ret = xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_SEQ_MASK,
  681. XADC_CONF1_SEQ_CONTINUOUS);
  682. if (ret)
  683. return ret;
  684. return xadc_power_adc_b(xadc, XADC_CONF1_SEQ_CONTINUOUS);
  685. }
  686. static int xadc_preenable(struct iio_dev *indio_dev)
  687. {
  688. struct xadc *xadc = iio_priv(indio_dev);
  689. unsigned long scan_mask;
  690. int seq_mode;
  691. int ret;
  692. ret = xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_SEQ_MASK,
  693. XADC_CONF1_SEQ_DEFAULT);
  694. if (ret)
  695. goto err;
  696. scan_mask = *indio_dev->active_scan_mask;
  697. seq_mode = xadc_get_seq_mode(xadc, scan_mask);
  698. ret = xadc_write_adc_reg(xadc, XADC_REG_SEQ(0), scan_mask & 0xffff);
  699. if (ret)
  700. goto err;
  701. /*
  702. * In simultaneous mode the upper and lower aux channels are samples at
  703. * the same time. In this mode the upper 8 bits in the sequencer
  704. * register are don't care and the lower 8 bits control two channels
  705. * each. As such we must set the bit if either the channel in the lower
  706. * group or the upper group is enabled.
  707. */
  708. if (seq_mode == XADC_CONF1_SEQ_SIMULTANEOUS)
  709. scan_mask = ((scan_mask >> 8) | scan_mask) & 0xff0000;
  710. ret = xadc_write_adc_reg(xadc, XADC_REG_SEQ(1), scan_mask >> 16);
  711. if (ret)
  712. goto err;
  713. ret = xadc_power_adc_b(xadc, seq_mode);
  714. if (ret)
  715. goto err;
  716. ret = xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_SEQ_MASK,
  717. seq_mode);
  718. if (ret)
  719. goto err;
  720. return 0;
  721. err:
  722. xadc_postdisable(indio_dev);
  723. return ret;
  724. }
  725. static const struct iio_buffer_setup_ops xadc_buffer_ops = {
  726. .preenable = &xadc_preenable,
  727. .postdisable = &xadc_postdisable,
  728. };
  729. static int xadc_read_samplerate(struct xadc *xadc)
  730. {
  731. unsigned int div;
  732. uint16_t val16;
  733. int ret;
  734. ret = xadc_read_adc_reg(xadc, XADC_REG_CONF2, &val16);
  735. if (ret)
  736. return ret;
  737. div = (val16 & XADC_CONF2_DIV_MASK) >> XADC_CONF2_DIV_OFFSET;
  738. if (div < 2)
  739. div = 2;
  740. return xadc_get_dclk_rate(xadc) / div / 26;
  741. }
  742. static int xadc_read_raw(struct iio_dev *indio_dev,
  743. struct iio_chan_spec const *chan, int *val, int *val2, long info)
  744. {
  745. struct xadc *xadc = iio_priv(indio_dev);
  746. unsigned int bits = chan->scan_type.realbits;
  747. uint16_t val16;
  748. int ret;
  749. switch (info) {
  750. case IIO_CHAN_INFO_RAW:
  751. if (iio_buffer_enabled(indio_dev))
  752. return -EBUSY;
  753. ret = xadc_read_adc_reg(xadc, chan->address, &val16);
  754. if (ret < 0)
  755. return ret;
  756. val16 >>= chan->scan_type.shift;
  757. if (chan->scan_type.sign == 'u')
  758. *val = val16;
  759. else
  760. *val = sign_extend32(val16, bits - 1);
  761. return IIO_VAL_INT;
  762. case IIO_CHAN_INFO_SCALE:
  763. switch (chan->type) {
  764. case IIO_VOLTAGE:
  765. /* V = (val * 3.0) / 2**bits */
  766. switch (chan->address) {
  767. case XADC_REG_VCCINT:
  768. case XADC_REG_VCCAUX:
  769. case XADC_REG_VREFP:
  770. case XADC_REG_VREFN:
  771. case XADC_REG_VCCBRAM:
  772. case XADC_REG_VCCPINT:
  773. case XADC_REG_VCCPAUX:
  774. case XADC_REG_VCCO_DDR:
  775. *val = 3000;
  776. break;
  777. default:
  778. *val = 1000;
  779. break;
  780. }
  781. *val2 = bits;
  782. return IIO_VAL_FRACTIONAL_LOG2;
  783. case IIO_TEMP:
  784. *val = xadc->ops->temp_scale;
  785. *val2 = bits;
  786. return IIO_VAL_FRACTIONAL_LOG2;
  787. default:
  788. return -EINVAL;
  789. }
  790. case IIO_CHAN_INFO_OFFSET:
  791. /* Only the temperature channel has an offset */
  792. *val = -((xadc->ops->temp_offset << bits) / xadc->ops->temp_scale);
  793. return IIO_VAL_INT;
  794. case IIO_CHAN_INFO_SAMP_FREQ:
  795. ret = xadc_read_samplerate(xadc);
  796. if (ret < 0)
  797. return ret;
  798. *val = ret;
  799. return IIO_VAL_INT;
  800. default:
  801. return -EINVAL;
  802. }
  803. }
  804. static int xadc_write_samplerate(struct xadc *xadc, int val)
  805. {
  806. unsigned long clk_rate = xadc_get_dclk_rate(xadc);
  807. unsigned int div;
  808. if (!clk_rate)
  809. return -EINVAL;
  810. if (val <= 0)
  811. return -EINVAL;
  812. /* Max. 150 kSPS */
  813. if (val > XADC_MAX_SAMPLERATE)
  814. val = XADC_MAX_SAMPLERATE;
  815. val *= 26;
  816. /* Min 1MHz */
  817. if (val < 1000000)
  818. val = 1000000;
  819. /*
  820. * We want to round down, but only if we do not exceed the 150 kSPS
  821. * limit.
  822. */
  823. div = clk_rate / val;
  824. if (clk_rate / div / 26 > XADC_MAX_SAMPLERATE)
  825. div++;
  826. if (div < 2)
  827. div = 2;
  828. else if (div > 0xff)
  829. div = 0xff;
  830. return xadc_update_adc_reg(xadc, XADC_REG_CONF2, XADC_CONF2_DIV_MASK,
  831. div << XADC_CONF2_DIV_OFFSET);
  832. }
  833. static int xadc_write_raw(struct iio_dev *indio_dev,
  834. struct iio_chan_spec const *chan, int val, int val2, long info)
  835. {
  836. struct xadc *xadc = iio_priv(indio_dev);
  837. if (info != IIO_CHAN_INFO_SAMP_FREQ)
  838. return -EINVAL;
  839. return xadc_write_samplerate(xadc, val);
  840. }
  841. static const struct iio_event_spec xadc_temp_events[] = {
  842. {
  843. .type = IIO_EV_TYPE_THRESH,
  844. .dir = IIO_EV_DIR_RISING,
  845. .mask_separate = BIT(IIO_EV_INFO_ENABLE) |
  846. BIT(IIO_EV_INFO_VALUE) |
  847. BIT(IIO_EV_INFO_HYSTERESIS),
  848. },
  849. };
  850. /* Separate values for upper and lower thresholds, but only a shared enabled */
  851. static const struct iio_event_spec xadc_voltage_events[] = {
  852. {
  853. .type = IIO_EV_TYPE_THRESH,
  854. .dir = IIO_EV_DIR_RISING,
  855. .mask_separate = BIT(IIO_EV_INFO_VALUE),
  856. }, {
  857. .type = IIO_EV_TYPE_THRESH,
  858. .dir = IIO_EV_DIR_FALLING,
  859. .mask_separate = BIT(IIO_EV_INFO_VALUE),
  860. }, {
  861. .type = IIO_EV_TYPE_THRESH,
  862. .dir = IIO_EV_DIR_EITHER,
  863. .mask_separate = BIT(IIO_EV_INFO_ENABLE),
  864. },
  865. };
  866. #define XADC_CHAN_TEMP(_chan, _scan_index, _addr, _bits) { \
  867. .type = IIO_TEMP, \
  868. .indexed = 1, \
  869. .channel = (_chan), \
  870. .address = (_addr), \
  871. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  872. BIT(IIO_CHAN_INFO_SCALE) | \
  873. BIT(IIO_CHAN_INFO_OFFSET), \
  874. .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  875. .event_spec = xadc_temp_events, \
  876. .num_event_specs = ARRAY_SIZE(xadc_temp_events), \
  877. .scan_index = (_scan_index), \
  878. .scan_type = { \
  879. .sign = 'u', \
  880. .realbits = (_bits), \
  881. .storagebits = 16, \
  882. .shift = 16 - (_bits), \
  883. .endianness = IIO_CPU, \
  884. }, \
  885. }
  886. #define XADC_CHAN_VOLTAGE(_chan, _scan_index, _addr, _bits, _ext, _alarm) { \
  887. .type = IIO_VOLTAGE, \
  888. .indexed = 1, \
  889. .channel = (_chan), \
  890. .address = (_addr), \
  891. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  892. BIT(IIO_CHAN_INFO_SCALE), \
  893. .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  894. .event_spec = (_alarm) ? xadc_voltage_events : NULL, \
  895. .num_event_specs = (_alarm) ? ARRAY_SIZE(xadc_voltage_events) : 0, \
  896. .scan_index = (_scan_index), \
  897. .scan_type = { \
  898. .sign = ((_addr) == XADC_REG_VREFN) ? 's' : 'u', \
  899. .realbits = (_bits), \
  900. .storagebits = 16, \
  901. .shift = 16 - (_bits), \
  902. .endianness = IIO_CPU, \
  903. }, \
  904. .extend_name = _ext, \
  905. }
  906. /* 7 Series */
  907. #define XADC_7S_CHAN_TEMP(_chan, _scan_index, _addr) \
  908. XADC_CHAN_TEMP(_chan, _scan_index, _addr, 12)
  909. #define XADC_7S_CHAN_VOLTAGE(_chan, _scan_index, _addr, _ext, _alarm) \
  910. XADC_CHAN_VOLTAGE(_chan, _scan_index, _addr, 12, _ext, _alarm)
  911. static const struct iio_chan_spec xadc_7s_channels[] = {
  912. XADC_7S_CHAN_TEMP(0, 8, XADC_REG_TEMP),
  913. XADC_7S_CHAN_VOLTAGE(0, 9, XADC_REG_VCCINT, "vccint", true),
  914. XADC_7S_CHAN_VOLTAGE(1, 10, XADC_REG_VCCAUX, "vccaux", true),
  915. XADC_7S_CHAN_VOLTAGE(2, 14, XADC_REG_VCCBRAM, "vccbram", true),
  916. XADC_7S_CHAN_VOLTAGE(3, 5, XADC_REG_VCCPINT, "vccpint", true),
  917. XADC_7S_CHAN_VOLTAGE(4, 6, XADC_REG_VCCPAUX, "vccpaux", true),
  918. XADC_7S_CHAN_VOLTAGE(5, 7, XADC_REG_VCCO_DDR, "vccoddr", true),
  919. XADC_7S_CHAN_VOLTAGE(6, 12, XADC_REG_VREFP, "vrefp", false),
  920. XADC_7S_CHAN_VOLTAGE(7, 13, XADC_REG_VREFN, "vrefn", false),
  921. XADC_7S_CHAN_VOLTAGE(8, 11, XADC_REG_VPVN, NULL, false),
  922. XADC_7S_CHAN_VOLTAGE(9, 16, XADC_REG_VAUX(0), NULL, false),
  923. XADC_7S_CHAN_VOLTAGE(10, 17, XADC_REG_VAUX(1), NULL, false),
  924. XADC_7S_CHAN_VOLTAGE(11, 18, XADC_REG_VAUX(2), NULL, false),
  925. XADC_7S_CHAN_VOLTAGE(12, 19, XADC_REG_VAUX(3), NULL, false),
  926. XADC_7S_CHAN_VOLTAGE(13, 20, XADC_REG_VAUX(4), NULL, false),
  927. XADC_7S_CHAN_VOLTAGE(14, 21, XADC_REG_VAUX(5), NULL, false),
  928. XADC_7S_CHAN_VOLTAGE(15, 22, XADC_REG_VAUX(6), NULL, false),
  929. XADC_7S_CHAN_VOLTAGE(16, 23, XADC_REG_VAUX(7), NULL, false),
  930. XADC_7S_CHAN_VOLTAGE(17, 24, XADC_REG_VAUX(8), NULL, false),
  931. XADC_7S_CHAN_VOLTAGE(18, 25, XADC_REG_VAUX(9), NULL, false),
  932. XADC_7S_CHAN_VOLTAGE(19, 26, XADC_REG_VAUX(10), NULL, false),
  933. XADC_7S_CHAN_VOLTAGE(20, 27, XADC_REG_VAUX(11), NULL, false),
  934. XADC_7S_CHAN_VOLTAGE(21, 28, XADC_REG_VAUX(12), NULL, false),
  935. XADC_7S_CHAN_VOLTAGE(22, 29, XADC_REG_VAUX(13), NULL, false),
  936. XADC_7S_CHAN_VOLTAGE(23, 30, XADC_REG_VAUX(14), NULL, false),
  937. XADC_7S_CHAN_VOLTAGE(24, 31, XADC_REG_VAUX(15), NULL, false),
  938. };
  939. /* UltraScale */
  940. #define XADC_US_CHAN_TEMP(_chan, _scan_index, _addr) \
  941. XADC_CHAN_TEMP(_chan, _scan_index, _addr, 10)
  942. #define XADC_US_CHAN_VOLTAGE(_chan, _scan_index, _addr, _ext, _alarm) \
  943. XADC_CHAN_VOLTAGE(_chan, _scan_index, _addr, 10, _ext, _alarm)
  944. static const struct iio_chan_spec xadc_us_channels[] = {
  945. XADC_US_CHAN_TEMP(0, 8, XADC_REG_TEMP),
  946. XADC_US_CHAN_VOLTAGE(0, 9, XADC_REG_VCCINT, "vccint", true),
  947. XADC_US_CHAN_VOLTAGE(1, 10, XADC_REG_VCCAUX, "vccaux", true),
  948. XADC_US_CHAN_VOLTAGE(2, 14, XADC_REG_VCCBRAM, "vccbram", true),
  949. XADC_US_CHAN_VOLTAGE(3, 5, XADC_REG_VCCPINT, "vccpsintlp", true),
  950. XADC_US_CHAN_VOLTAGE(4, 6, XADC_REG_VCCPAUX, "vccpsintfp", true),
  951. XADC_US_CHAN_VOLTAGE(5, 7, XADC_REG_VCCO_DDR, "vccpsaux", true),
  952. XADC_US_CHAN_VOLTAGE(6, 12, XADC_REG_VREFP, "vrefp", false),
  953. XADC_US_CHAN_VOLTAGE(7, 13, XADC_REG_VREFN, "vrefn", false),
  954. XADC_US_CHAN_VOLTAGE(8, 11, XADC_REG_VPVN, NULL, false),
  955. XADC_US_CHAN_VOLTAGE(9, 16, XADC_REG_VAUX(0), NULL, false),
  956. XADC_US_CHAN_VOLTAGE(10, 17, XADC_REG_VAUX(1), NULL, false),
  957. XADC_US_CHAN_VOLTAGE(11, 18, XADC_REG_VAUX(2), NULL, false),
  958. XADC_US_CHAN_VOLTAGE(12, 19, XADC_REG_VAUX(3), NULL, false),
  959. XADC_US_CHAN_VOLTAGE(13, 20, XADC_REG_VAUX(4), NULL, false),
  960. XADC_US_CHAN_VOLTAGE(14, 21, XADC_REG_VAUX(5), NULL, false),
  961. XADC_US_CHAN_VOLTAGE(15, 22, XADC_REG_VAUX(6), NULL, false),
  962. XADC_US_CHAN_VOLTAGE(16, 23, XADC_REG_VAUX(7), NULL, false),
  963. XADC_US_CHAN_VOLTAGE(17, 24, XADC_REG_VAUX(8), NULL, false),
  964. XADC_US_CHAN_VOLTAGE(18, 25, XADC_REG_VAUX(9), NULL, false),
  965. XADC_US_CHAN_VOLTAGE(19, 26, XADC_REG_VAUX(10), NULL, false),
  966. XADC_US_CHAN_VOLTAGE(20, 27, XADC_REG_VAUX(11), NULL, false),
  967. XADC_US_CHAN_VOLTAGE(21, 28, XADC_REG_VAUX(12), NULL, false),
  968. XADC_US_CHAN_VOLTAGE(22, 29, XADC_REG_VAUX(13), NULL, false),
  969. XADC_US_CHAN_VOLTAGE(23, 30, XADC_REG_VAUX(14), NULL, false),
  970. XADC_US_CHAN_VOLTAGE(24, 31, XADC_REG_VAUX(15), NULL, false),
  971. };
  972. static const struct iio_info xadc_info = {
  973. .read_raw = &xadc_read_raw,
  974. .write_raw = &xadc_write_raw,
  975. .read_event_config = &xadc_read_event_config,
  976. .write_event_config = &xadc_write_event_config,
  977. .read_event_value = &xadc_read_event_value,
  978. .write_event_value = &xadc_write_event_value,
  979. .update_scan_mode = &xadc_update_scan_mode,
  980. };
  981. static const struct of_device_id xadc_of_match_table[] = {
  982. {
  983. .compatible = "xlnx,zynq-xadc-1.00.a",
  984. .data = &xadc_zynq_ops
  985. }, {
  986. .compatible = "xlnx,axi-xadc-1.00.a",
  987. .data = &xadc_7s_axi_ops
  988. }, {
  989. .compatible = "xlnx,system-management-wiz-1.3",
  990. .data = &xadc_us_axi_ops
  991. },
  992. { }
  993. };
  994. MODULE_DEVICE_TABLE(of, xadc_of_match_table);
  995. static int xadc_parse_dt(struct iio_dev *indio_dev, unsigned int *conf, int irq)
  996. {
  997. struct device *dev = indio_dev->dev.parent;
  998. struct xadc *xadc = iio_priv(indio_dev);
  999. const struct iio_chan_spec *channel_templates;
  1000. struct iio_chan_spec *channels, *chan;
  1001. struct fwnode_handle *chan_node, *child;
  1002. unsigned int max_channels;
  1003. unsigned int num_channels;
  1004. const char *external_mux;
  1005. u32 ext_mux_chan;
  1006. u32 reg;
  1007. int ret;
  1008. int i;
  1009. *conf = 0;
  1010. ret = device_property_read_string(dev, "xlnx,external-mux", &external_mux);
  1011. if (ret < 0 || strcasecmp(external_mux, "none") == 0)
  1012. xadc->external_mux_mode = XADC_EXTERNAL_MUX_NONE;
  1013. else if (strcasecmp(external_mux, "single") == 0)
  1014. xadc->external_mux_mode = XADC_EXTERNAL_MUX_SINGLE;
  1015. else if (strcasecmp(external_mux, "dual") == 0)
  1016. xadc->external_mux_mode = XADC_EXTERNAL_MUX_DUAL;
  1017. else
  1018. return -EINVAL;
  1019. if (xadc->external_mux_mode != XADC_EXTERNAL_MUX_NONE) {
  1020. ret = device_property_read_u32(dev, "xlnx,external-mux-channel", &ext_mux_chan);
  1021. if (ret < 0)
  1022. return ret;
  1023. if (xadc->external_mux_mode == XADC_EXTERNAL_MUX_SINGLE) {
  1024. if (ext_mux_chan == 0)
  1025. ext_mux_chan = XADC_REG_VPVN;
  1026. else if (ext_mux_chan <= 16)
  1027. ext_mux_chan = XADC_REG_VAUX(ext_mux_chan - 1);
  1028. else
  1029. return -EINVAL;
  1030. } else {
  1031. if (ext_mux_chan > 0 && ext_mux_chan <= 8)
  1032. ext_mux_chan = XADC_REG_VAUX(ext_mux_chan - 1);
  1033. else
  1034. return -EINVAL;
  1035. }
  1036. *conf |= XADC_CONF0_MUX | XADC_CONF0_CHAN(ext_mux_chan);
  1037. }
  1038. if (xadc->ops->type == XADC_TYPE_S7) {
  1039. channel_templates = xadc_7s_channels;
  1040. max_channels = ARRAY_SIZE(xadc_7s_channels);
  1041. } else {
  1042. channel_templates = xadc_us_channels;
  1043. max_channels = ARRAY_SIZE(xadc_us_channels);
  1044. }
  1045. channels = devm_kmemdup_array(dev, channel_templates, max_channels,
  1046. sizeof(*channel_templates), GFP_KERNEL);
  1047. if (!channels)
  1048. return -ENOMEM;
  1049. num_channels = 9;
  1050. chan = &channels[9];
  1051. chan_node = device_get_named_child_node(dev, "xlnx,channels");
  1052. fwnode_for_each_child_node(chan_node, child) {
  1053. if (num_channels >= max_channels) {
  1054. fwnode_handle_put(child);
  1055. break;
  1056. }
  1057. ret = fwnode_property_read_u32(child, "reg", &reg);
  1058. if (ret || reg > 16)
  1059. continue;
  1060. if (fwnode_property_read_bool(child, "xlnx,bipolar"))
  1061. chan->scan_type.sign = 's';
  1062. if (reg == 0) {
  1063. chan->scan_index = 11;
  1064. chan->address = XADC_REG_VPVN;
  1065. } else {
  1066. chan->scan_index = 15 + reg;
  1067. chan->address = XADC_REG_VAUX(reg - 1);
  1068. }
  1069. num_channels++;
  1070. chan++;
  1071. }
  1072. fwnode_handle_put(chan_node);
  1073. /* No IRQ => no events */
  1074. if (irq <= 0) {
  1075. for (i = 0; i < num_channels; i++) {
  1076. channels[i].event_spec = NULL;
  1077. channels[i].num_event_specs = 0;
  1078. }
  1079. }
  1080. indio_dev->num_channels = num_channels;
  1081. indio_dev->channels = devm_krealloc_array(dev, channels,
  1082. num_channels, sizeof(*channels),
  1083. GFP_KERNEL);
  1084. /* If we can't resize the channels array, just use the original */
  1085. if (!indio_dev->channels)
  1086. indio_dev->channels = channels;
  1087. return 0;
  1088. }
  1089. static const char * const xadc_type_names[] = {
  1090. [XADC_TYPE_S7] = "xadc",
  1091. [XADC_TYPE_US] = "xilinx-system-monitor",
  1092. };
  1093. static void xadc_cancel_delayed_work(void *data)
  1094. {
  1095. struct delayed_work *work = data;
  1096. cancel_delayed_work_sync(work);
  1097. }
  1098. static int xadc_probe(struct platform_device *pdev)
  1099. {
  1100. struct device *dev = &pdev->dev;
  1101. const struct xadc_ops *ops;
  1102. struct iio_dev *indio_dev;
  1103. unsigned int bipolar_mask;
  1104. unsigned int conf0;
  1105. struct xadc *xadc;
  1106. int ret;
  1107. int irq;
  1108. int i;
  1109. ops = device_get_match_data(dev);
  1110. if (!ops)
  1111. return -EINVAL;
  1112. irq = platform_get_irq_optional(pdev, 0);
  1113. if (irq < 0 &&
  1114. (irq != -ENXIO || !(ops->flags & XADC_FLAGS_IRQ_OPTIONAL)))
  1115. return irq;
  1116. indio_dev = devm_iio_device_alloc(dev, sizeof(*xadc));
  1117. if (!indio_dev)
  1118. return -ENOMEM;
  1119. xadc = iio_priv(indio_dev);
  1120. xadc->ops = ops;
  1121. init_completion(&xadc->completion);
  1122. mutex_init(&xadc->mutex);
  1123. spin_lock_init(&xadc->lock);
  1124. INIT_DELAYED_WORK(&xadc->zynq_unmask_work, xadc_zynq_unmask_worker);
  1125. xadc->base = devm_platform_ioremap_resource(pdev, 0);
  1126. if (IS_ERR(xadc->base))
  1127. return PTR_ERR(xadc->base);
  1128. indio_dev->name = xadc_type_names[xadc->ops->type];
  1129. indio_dev->modes = INDIO_DIRECT_MODE;
  1130. indio_dev->info = &xadc_info;
  1131. ret = xadc_parse_dt(indio_dev, &conf0, irq);
  1132. if (ret)
  1133. return ret;
  1134. if (xadc->ops->flags & XADC_FLAGS_BUFFERED) {
  1135. ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
  1136. &iio_pollfunc_store_time,
  1137. &xadc_trigger_handler,
  1138. &xadc_buffer_ops);
  1139. if (ret)
  1140. return ret;
  1141. if (irq > 0) {
  1142. xadc->convst_trigger = xadc_alloc_trigger(indio_dev, "convst");
  1143. if (IS_ERR(xadc->convst_trigger))
  1144. return PTR_ERR(xadc->convst_trigger);
  1145. xadc->samplerate_trigger = xadc_alloc_trigger(indio_dev,
  1146. "samplerate");
  1147. if (IS_ERR(xadc->samplerate_trigger))
  1148. return PTR_ERR(xadc->samplerate_trigger);
  1149. }
  1150. }
  1151. xadc->clk = devm_clk_get_enabled(dev, NULL);
  1152. if (IS_ERR(xadc->clk))
  1153. return PTR_ERR(xadc->clk);
  1154. /*
  1155. * Make sure not to exceed the maximum samplerate since otherwise the
  1156. * resulting interrupt storm will soft-lock the system.
  1157. */
  1158. if (xadc->ops->flags & XADC_FLAGS_BUFFERED) {
  1159. ret = xadc_read_samplerate(xadc);
  1160. if (ret < 0)
  1161. return ret;
  1162. if (ret > XADC_MAX_SAMPLERATE) {
  1163. ret = xadc_write_samplerate(xadc, XADC_MAX_SAMPLERATE);
  1164. if (ret < 0)
  1165. return ret;
  1166. }
  1167. }
  1168. if (irq > 0) {
  1169. ret = devm_request_irq(dev, irq, xadc->ops->interrupt_handler,
  1170. 0, dev_name(dev), indio_dev);
  1171. if (ret)
  1172. return ret;
  1173. ret = devm_add_action_or_reset(dev, xadc_cancel_delayed_work,
  1174. &xadc->zynq_unmask_work);
  1175. if (ret)
  1176. return ret;
  1177. }
  1178. ret = xadc->ops->setup(pdev, indio_dev, irq);
  1179. if (ret)
  1180. return ret;
  1181. for (i = 0; i < 16; i++)
  1182. xadc_read_adc_reg(xadc, XADC_REG_THRESHOLD(i),
  1183. &xadc->threshold[i]);
  1184. ret = xadc_write_adc_reg(xadc, XADC_REG_CONF0, conf0);
  1185. if (ret)
  1186. return ret;
  1187. bipolar_mask = 0;
  1188. for (i = 0; i < indio_dev->num_channels; i++) {
  1189. if (indio_dev->channels[i].scan_type.sign == 's')
  1190. bipolar_mask |= BIT(indio_dev->channels[i].scan_index);
  1191. }
  1192. ret = xadc_write_adc_reg(xadc, XADC_REG_INPUT_MODE(0), bipolar_mask);
  1193. if (ret)
  1194. return ret;
  1195. ret = xadc_write_adc_reg(xadc, XADC_REG_INPUT_MODE(1),
  1196. bipolar_mask >> 16);
  1197. if (ret)
  1198. return ret;
  1199. /* Go to non-buffered mode */
  1200. xadc_postdisable(indio_dev);
  1201. return devm_iio_device_register(dev, indio_dev);
  1202. }
  1203. static struct platform_driver xadc_driver = {
  1204. .probe = xadc_probe,
  1205. .driver = {
  1206. .name = "xadc",
  1207. .of_match_table = xadc_of_match_table,
  1208. },
  1209. };
  1210. module_platform_driver(xadc_driver);
  1211. MODULE_LICENSE("GPL v2");
  1212. MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
  1213. MODULE_DESCRIPTION("Xilinx XADC IIO driver");