ad4695.c 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * SPI ADC driver for Analog Devices Inc. AD4695 and similar chips
  4. *
  5. * https://www.analog.com/en/products/ad4695.html
  6. * https://www.analog.com/en/products/ad4696.html
  7. * https://www.analog.com/en/products/ad4697.html
  8. * https://www.analog.com/en/products/ad4698.html
  9. *
  10. * Copyright 2024 Analog Devices Inc.
  11. * Copyright 2024 BayLibre, SAS
  12. */
  13. #include <linux/align.h>
  14. #include <linux/bitfield.h>
  15. #include <linux/bits.h>
  16. #include <linux/compiler.h>
  17. #include <linux/delay.h>
  18. #include <linux/device.h>
  19. #include <linux/err.h>
  20. #include <linux/gpio/consumer.h>
  21. #include <linux/iio/buffer-dmaengine.h>
  22. #include <linux/iio/buffer.h>
  23. #include <linux/iio/iio.h>
  24. #include <linux/iio/triggered_buffer.h>
  25. #include <linux/iio/trigger_consumer.h>
  26. #include <linux/minmax.h>
  27. #include <linux/mutex.h>
  28. #include <linux/property.h>
  29. #include <linux/pwm.h>
  30. #include <linux/regmap.h>
  31. #include <linux/regulator/consumer.h>
  32. #include <linux/spi/offload/consumer.h>
  33. #include <linux/spi/offload/provider.h>
  34. #include <linux/spi/spi.h>
  35. #include <linux/units.h>
  36. #include <dt-bindings/iio/adc/adi,ad4695.h>
  37. /* AD4695 registers */
  38. #define AD4695_REG_SPI_CONFIG_A 0x0000
  39. #define AD4695_REG_SPI_CONFIG_A_SW_RST (BIT(7) | BIT(0))
  40. #define AD4695_REG_SPI_CONFIG_A_ADDR_DIR BIT(5)
  41. #define AD4695_REG_SPI_CONFIG_B 0x0001
  42. #define AD4695_REG_SPI_CONFIG_B_INST_MODE BIT(7)
  43. #define AD4695_REG_DEVICE_TYPE 0x0003
  44. #define AD4695_REG_SCRATCH_PAD 0x000A
  45. #define AD4695_REG_VENDOR_L 0x000C
  46. #define AD4695_REG_VENDOR_H 0x000D
  47. #define AD4695_REG_LOOP_MODE 0x000E
  48. #define AD4695_REG_SPI_CONFIG_C 0x0010
  49. #define AD4695_REG_SPI_CONFIG_C_MB_STRICT BIT(7)
  50. #define AD4695_REG_SPI_STATUS 0x0011
  51. #define AD4695_REG_STATUS 0x0014
  52. #define AD4695_REG_ALERT_STATUS1 0x0015
  53. #define AD4695_REG_ALERT_STATUS2 0x0016
  54. #define AD4695_REG_CLAMP_STATUS 0x001A
  55. #define AD4695_REG_SETUP 0x0020
  56. #define AD4695_REG_SETUP_LDO_EN BIT(4)
  57. #define AD4695_REG_SETUP_SPI_MODE BIT(2)
  58. #define AD4695_REG_SETUP_SPI_CYC_CTRL BIT(1)
  59. #define AD4695_REG_REF_CTRL 0x0021
  60. #define AD4695_REG_REF_CTRL_OV_MODE BIT(7)
  61. #define AD4695_REG_REF_CTRL_VREF_SET GENMASK(4, 2)
  62. #define AD4695_REG_REF_CTRL_REFHIZ_EN BIT(1)
  63. #define AD4695_REG_REF_CTRL_REFBUF_EN BIT(0)
  64. #define AD4695_REG_SEQ_CTRL 0x0022
  65. #define AD4695_REG_SEQ_CTRL_STD_SEQ_EN BIT(7)
  66. #define AD4695_REG_SEQ_CTRL_NUM_SLOTS_AS GENMASK(6, 0)
  67. #define AD4695_REG_AC_CTRL 0x0023
  68. #define AD4695_REG_STD_SEQ_CONFIG 0x0024
  69. #define AD4695_REG_GPIO_CTRL 0x0026
  70. #define AD4695_REG_GP_MODE 0x0027
  71. #define AD4695_REG_GP_MODE_BUSY_GP_SEL BIT(5)
  72. #define AD4695_REG_GP_MODE_BUSY_GP_EN BIT(1)
  73. #define AD4695_REG_TEMP_CTRL 0x0029
  74. #define AD4695_REG_TEMP_CTRL_TEMP_EN BIT(0)
  75. #define AD4695_REG_CONFIG_IN(n) (0x0030 | (n))
  76. #define AD4695_REG_CONFIG_IN_MODE BIT(6)
  77. #define AD4695_REG_CONFIG_IN_PAIR GENMASK(5, 4)
  78. #define AD4695_REG_CONFIG_IN_AINHIGHZ_EN BIT(3)
  79. #define AD4695_REG_CONFIG_IN_OSR_SET GENMASK(1, 0)
  80. #define AD4695_REG_UPPER_IN(n) (0x0040 | (2 * (n)))
  81. #define AD4695_REG_LOWER_IN(n) (0x0060 | (2 * (n)))
  82. #define AD4695_REG_HYST_IN(n) (0x0080 | (2 * (n)))
  83. #define AD4695_REG_OFFSET_IN(n) (0x00A0 | (2 * (n)))
  84. #define AD4695_REG_GAIN_IN(n) (0x00C0 | (2 * (n)))
  85. #define AD4695_REG_AS_SLOT(n) (0x0100 | (n))
  86. #define AD4695_REG_AS_SLOT_INX GENMASK(3, 0)
  87. /* Conversion mode commands */
  88. #define AD4695_CMD_EXIT_CNV_MODE 0x0A
  89. #define AD4695_CMD_TEMP_CHAN 0x0F
  90. #define AD4695_CMD_VOLTAGE_CHAN(n) (0x10 | (n))
  91. /* timing specs */
  92. #define AD4695_T_CONVERT_NS 415
  93. #define AD4695_T_WAKEUP_HW_MS 3
  94. #define AD4695_T_WAKEUP_SW_MS 3
  95. #define AD4695_T_REFBUF_MS 100
  96. #define AD4695_T_REGCONFIG_NS 20
  97. #define AD4695_T_SCK_CNV_DELAY_NS 80
  98. #define AD4695_T_CNVL_NS 80
  99. #define AD4695_T_CNVH_NS 10
  100. #define AD4695_REG_ACCESS_SCLK_HZ (10 * MEGA)
  101. /* Max number of voltage input channels. */
  102. #define AD4695_MAX_VIN_CHANNELS 16
  103. enum ad4695_in_pair {
  104. AD4695_IN_PAIR_REFGND,
  105. AD4695_IN_PAIR_COM,
  106. AD4695_IN_PAIR_EVEN_ODD,
  107. };
  108. struct ad4695_chip_info {
  109. const char *name;
  110. int max_sample_rate;
  111. u32 t_acq_ns;
  112. u8 num_voltage_inputs;
  113. };
  114. struct ad4695_channel_config {
  115. unsigned int channel;
  116. bool highz_en;
  117. bool bipolar;
  118. enum ad4695_in_pair pin_pairing;
  119. unsigned int common_mode_mv;
  120. unsigned int oversampling_ratio;
  121. };
  122. struct ad4695_state {
  123. struct spi_device *spi;
  124. struct spi_offload *offload;
  125. struct spi_offload_trigger *offload_trigger;
  126. struct regmap *regmap;
  127. struct regmap *regmap16;
  128. struct gpio_desc *reset_gpio;
  129. /* currently PWM CNV only supported with SPI offload use */
  130. struct pwm_device *cnv_pwm;
  131. /* protects against concurrent use of cnv_pwm */
  132. struct mutex cnv_pwm_lock;
  133. /* offload also requires separate gpio to manually control CNV */
  134. struct gpio_desc *cnv_gpio;
  135. /* voltages channels plus temperature and timestamp */
  136. struct iio_chan_spec iio_chan[AD4695_MAX_VIN_CHANNELS + 2];
  137. struct ad4695_channel_config channels_cfg[AD4695_MAX_VIN_CHANNELS];
  138. const struct ad4695_chip_info *chip_info;
  139. int sample_freq_range[3];
  140. /* Reference voltage. */
  141. unsigned int vref_mv;
  142. /* Common mode input pin voltage. */
  143. unsigned int com_mv;
  144. /*
  145. * 2 per voltage and temperature chan plus 1 xfer to trigger 1st
  146. * CNV. Excluding the trigger xfer, every 2nd xfer only serves
  147. * to control CS and add a delay between the last SCLK and next
  148. * CNV rising edges.
  149. */
  150. struct spi_transfer buf_read_xfer[AD4695_MAX_VIN_CHANNELS * 2 + 3];
  151. struct spi_message buf_read_msg;
  152. /* Raw conversion data received. */
  153. IIO_DECLARE_DMA_BUFFER_WITH_TS(u16, buf, AD4695_MAX_VIN_CHANNELS + 1);
  154. u16 raw_data;
  155. /* Commands to send for single conversion. */
  156. u16 cnv_cmd;
  157. u8 cnv_cmd2;
  158. /* Buffer for storing data from regmap bus reads/writes */
  159. u8 regmap_bus_data[4];
  160. };
  161. static const struct regmap_range ad4695_regmap_rd_ranges[] = {
  162. regmap_reg_range(AD4695_REG_SPI_CONFIG_A, AD4695_REG_SPI_CONFIG_B),
  163. regmap_reg_range(AD4695_REG_DEVICE_TYPE, AD4695_REG_DEVICE_TYPE),
  164. regmap_reg_range(AD4695_REG_SCRATCH_PAD, AD4695_REG_SCRATCH_PAD),
  165. regmap_reg_range(AD4695_REG_VENDOR_L, AD4695_REG_LOOP_MODE),
  166. regmap_reg_range(AD4695_REG_SPI_CONFIG_C, AD4695_REG_SPI_STATUS),
  167. regmap_reg_range(AD4695_REG_STATUS, AD4695_REG_ALERT_STATUS2),
  168. regmap_reg_range(AD4695_REG_CLAMP_STATUS, AD4695_REG_CLAMP_STATUS),
  169. regmap_reg_range(AD4695_REG_SETUP, AD4695_REG_AC_CTRL),
  170. regmap_reg_range(AD4695_REG_GPIO_CTRL, AD4695_REG_TEMP_CTRL),
  171. regmap_reg_range(AD4695_REG_CONFIG_IN(0), AD4695_REG_CONFIG_IN(15)),
  172. regmap_reg_range(AD4695_REG_AS_SLOT(0), AD4695_REG_AS_SLOT(127)),
  173. };
  174. static const struct regmap_access_table ad4695_regmap_rd_table = {
  175. .yes_ranges = ad4695_regmap_rd_ranges,
  176. .n_yes_ranges = ARRAY_SIZE(ad4695_regmap_rd_ranges),
  177. };
  178. static const struct regmap_range ad4695_regmap_wr_ranges[] = {
  179. regmap_reg_range(AD4695_REG_SPI_CONFIG_A, AD4695_REG_SPI_CONFIG_B),
  180. regmap_reg_range(AD4695_REG_SCRATCH_PAD, AD4695_REG_SCRATCH_PAD),
  181. regmap_reg_range(AD4695_REG_LOOP_MODE, AD4695_REG_LOOP_MODE),
  182. regmap_reg_range(AD4695_REG_SPI_CONFIG_C, AD4695_REG_SPI_STATUS),
  183. regmap_reg_range(AD4695_REG_SETUP, AD4695_REG_AC_CTRL),
  184. regmap_reg_range(AD4695_REG_GPIO_CTRL, AD4695_REG_TEMP_CTRL),
  185. regmap_reg_range(AD4695_REG_CONFIG_IN(0), AD4695_REG_CONFIG_IN(15)),
  186. regmap_reg_range(AD4695_REG_AS_SLOT(0), AD4695_REG_AS_SLOT(127)),
  187. };
  188. static const struct regmap_access_table ad4695_regmap_wr_table = {
  189. .yes_ranges = ad4695_regmap_wr_ranges,
  190. .n_yes_ranges = ARRAY_SIZE(ad4695_regmap_wr_ranges),
  191. };
  192. static const struct regmap_config ad4695_regmap_config = {
  193. .name = "ad4695-8",
  194. .reg_bits = 16,
  195. .val_bits = 8,
  196. .max_register = AD4695_REG_AS_SLOT(127),
  197. .rd_table = &ad4695_regmap_rd_table,
  198. .wr_table = &ad4695_regmap_wr_table,
  199. };
  200. static const struct regmap_range ad4695_regmap16_rd_ranges[] = {
  201. regmap_reg_range(AD4695_REG_STD_SEQ_CONFIG, AD4695_REG_STD_SEQ_CONFIG),
  202. regmap_reg_range(AD4695_REG_UPPER_IN(0), AD4695_REG_GAIN_IN(15)),
  203. };
  204. static const struct regmap_access_table ad4695_regmap16_rd_table = {
  205. .yes_ranges = ad4695_regmap16_rd_ranges,
  206. .n_yes_ranges = ARRAY_SIZE(ad4695_regmap16_rd_ranges),
  207. };
  208. static const struct regmap_range ad4695_regmap16_wr_ranges[] = {
  209. regmap_reg_range(AD4695_REG_STD_SEQ_CONFIG, AD4695_REG_STD_SEQ_CONFIG),
  210. regmap_reg_range(AD4695_REG_UPPER_IN(0), AD4695_REG_GAIN_IN(15)),
  211. };
  212. static const struct regmap_access_table ad4695_regmap16_wr_table = {
  213. .yes_ranges = ad4695_regmap16_wr_ranges,
  214. .n_yes_ranges = ARRAY_SIZE(ad4695_regmap16_wr_ranges),
  215. };
  216. static const struct regmap_config ad4695_regmap16_config = {
  217. .name = "ad4695-16",
  218. .reg_bits = 16,
  219. .reg_stride = 2,
  220. .val_bits = 16,
  221. .val_format_endian = REGMAP_ENDIAN_LITTLE,
  222. .max_register = AD4695_REG_GAIN_IN(15),
  223. .rd_table = &ad4695_regmap16_rd_table,
  224. .wr_table = &ad4695_regmap16_wr_table,
  225. };
  226. static int ad4695_regmap_bus_reg_write(void *context, const void *data,
  227. size_t count)
  228. {
  229. struct ad4695_state *st = context;
  230. struct spi_transfer xfer = {
  231. .speed_hz = AD4695_REG_ACCESS_SCLK_HZ,
  232. .len = count,
  233. .tx_buf = st->regmap_bus_data,
  234. };
  235. if (count > ARRAY_SIZE(st->regmap_bus_data))
  236. return -EINVAL;
  237. memcpy(st->regmap_bus_data, data, count);
  238. return spi_sync_transfer(st->spi, &xfer, 1);
  239. }
  240. static int ad4695_regmap_bus_reg_read(void *context, const void *reg,
  241. size_t reg_size, void *val,
  242. size_t val_size)
  243. {
  244. struct ad4695_state *st = context;
  245. struct spi_transfer xfers[] = {
  246. {
  247. .speed_hz = AD4695_REG_ACCESS_SCLK_HZ,
  248. .len = reg_size,
  249. .tx_buf = &st->regmap_bus_data[0],
  250. }, {
  251. .speed_hz = AD4695_REG_ACCESS_SCLK_HZ,
  252. .len = val_size,
  253. .rx_buf = &st->regmap_bus_data[2],
  254. },
  255. };
  256. int ret;
  257. if (reg_size > 2)
  258. return -EINVAL;
  259. if (val_size > 2)
  260. return -EINVAL;
  261. memcpy(&st->regmap_bus_data[0], reg, reg_size);
  262. ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
  263. if (ret)
  264. return ret;
  265. memcpy(val, &st->regmap_bus_data[2], val_size);
  266. return 0;
  267. }
  268. static const struct regmap_bus ad4695_regmap_bus = {
  269. .write = ad4695_regmap_bus_reg_write,
  270. .read = ad4695_regmap_bus_reg_read,
  271. .read_flag_mask = 0x80,
  272. .reg_format_endian_default = REGMAP_ENDIAN_BIG,
  273. .val_format_endian_default = REGMAP_ENDIAN_BIG,
  274. };
  275. enum {
  276. AD4695_SCAN_TYPE_OSR_1,
  277. AD4695_SCAN_TYPE_OSR_4,
  278. AD4695_SCAN_TYPE_OSR_16,
  279. AD4695_SCAN_TYPE_OSR_64,
  280. };
  281. static const struct iio_scan_type ad4695_scan_type_offload_u[] = {
  282. [AD4695_SCAN_TYPE_OSR_1] = {
  283. .sign = 'u',
  284. .realbits = 16,
  285. .shift = 3,
  286. .storagebits = 32,
  287. },
  288. [AD4695_SCAN_TYPE_OSR_4] = {
  289. .sign = 'u',
  290. .realbits = 17,
  291. .shift = 2,
  292. .storagebits = 32,
  293. },
  294. [AD4695_SCAN_TYPE_OSR_16] = {
  295. .sign = 'u',
  296. .realbits = 18,
  297. .shift = 1,
  298. .storagebits = 32,
  299. },
  300. [AD4695_SCAN_TYPE_OSR_64] = {
  301. .sign = 'u',
  302. .realbits = 19,
  303. .storagebits = 32,
  304. },
  305. };
  306. static const struct iio_scan_type ad4695_scan_type_offload_s[] = {
  307. [AD4695_SCAN_TYPE_OSR_1] = {
  308. .sign = 's',
  309. .realbits = 16,
  310. .shift = 3,
  311. .storagebits = 32,
  312. },
  313. [AD4695_SCAN_TYPE_OSR_4] = {
  314. .sign = 's',
  315. .realbits = 17,
  316. .shift = 2,
  317. .storagebits = 32,
  318. },
  319. [AD4695_SCAN_TYPE_OSR_16] = {
  320. .sign = 's',
  321. .realbits = 18,
  322. .shift = 1,
  323. .storagebits = 32,
  324. },
  325. [AD4695_SCAN_TYPE_OSR_64] = {
  326. .sign = 's',
  327. .realbits = 19,
  328. .storagebits = 32,
  329. },
  330. };
  331. static const struct iio_chan_spec ad4695_channel_template = {
  332. .type = IIO_VOLTAGE,
  333. .indexed = 1,
  334. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  335. BIT(IIO_CHAN_INFO_SCALE) |
  336. BIT(IIO_CHAN_INFO_OFFSET) |
  337. BIT(IIO_CHAN_INFO_CALIBSCALE) |
  338. BIT(IIO_CHAN_INFO_CALIBBIAS),
  339. .info_mask_separate_available = BIT(IIO_CHAN_INFO_CALIBSCALE) |
  340. BIT(IIO_CHAN_INFO_CALIBBIAS),
  341. .scan_type = {
  342. .sign = 'u',
  343. .realbits = 16,
  344. .storagebits = 16,
  345. },
  346. };
  347. static const struct iio_chan_spec ad4695_temp_channel_template = {
  348. .address = AD4695_CMD_TEMP_CHAN,
  349. .type = IIO_TEMP,
  350. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  351. BIT(IIO_CHAN_INFO_SCALE) |
  352. BIT(IIO_CHAN_INFO_OFFSET),
  353. .scan_type = {
  354. .sign = 's',
  355. .realbits = 16,
  356. .storagebits = 16,
  357. },
  358. };
  359. static const struct iio_chan_spec ad4695_soft_timestamp_channel_template =
  360. IIO_CHAN_SOFT_TIMESTAMP(0);
  361. static const char * const ad4695_power_supplies[] = {
  362. "avdd", "vio"
  363. };
  364. static const int ad4695_oversampling_ratios[] = {
  365. 1, 4, 16, 64,
  366. };
  367. static const struct ad4695_chip_info ad4695_chip_info = {
  368. .name = "ad4695",
  369. .max_sample_rate = 500 * KILO,
  370. .t_acq_ns = 1715,
  371. .num_voltage_inputs = 16,
  372. };
  373. static const struct ad4695_chip_info ad4696_chip_info = {
  374. .name = "ad4696",
  375. .max_sample_rate = 1 * MEGA,
  376. .t_acq_ns = 715,
  377. .num_voltage_inputs = 16,
  378. };
  379. static const struct ad4695_chip_info ad4697_chip_info = {
  380. .name = "ad4697",
  381. .max_sample_rate = 500 * KILO,
  382. .t_acq_ns = 1715,
  383. .num_voltage_inputs = 8,
  384. };
  385. static const struct ad4695_chip_info ad4698_chip_info = {
  386. .name = "ad4698",
  387. .max_sample_rate = 1 * MEGA,
  388. .t_acq_ns = 715,
  389. .num_voltage_inputs = 8,
  390. };
  391. static void ad4695_cnv_manual_trigger(struct ad4695_state *st)
  392. {
  393. gpiod_set_value_cansleep(st->cnv_gpio, 1);
  394. ndelay(10);
  395. gpiod_set_value_cansleep(st->cnv_gpio, 0);
  396. }
  397. /**
  398. * ad4695_set_single_cycle_mode - Set the device in single cycle mode
  399. * @st: The AD4695 state
  400. * @channel: The first channel to read
  401. *
  402. * As per the datasheet, to enable single cycle mode, we need to set
  403. * STD_SEQ_EN=0, NUM_SLOTS_AS=0 and CYC_CTRL=1 (Table 15). Setting SPI_MODE=1
  404. * triggers the first conversion using the channel in AS_SLOT0.
  405. *
  406. * Context: can sleep, must be called with iio_device_claim_direct held
  407. * Return: 0 on success, a negative error code on failure
  408. */
  409. static int ad4695_set_single_cycle_mode(struct ad4695_state *st,
  410. unsigned int channel)
  411. {
  412. int ret;
  413. ret = regmap_clear_bits(st->regmap, AD4695_REG_SEQ_CTRL,
  414. AD4695_REG_SEQ_CTRL_STD_SEQ_EN |
  415. AD4695_REG_SEQ_CTRL_NUM_SLOTS_AS);
  416. if (ret)
  417. return ret;
  418. ret = regmap_write(st->regmap, AD4695_REG_AS_SLOT(0),
  419. FIELD_PREP(AD4695_REG_AS_SLOT_INX, channel));
  420. if (ret)
  421. return ret;
  422. return regmap_set_bits(st->regmap, AD4695_REG_SETUP,
  423. AD4695_REG_SETUP_SPI_MODE |
  424. AD4695_REG_SETUP_SPI_CYC_CTRL);
  425. }
  426. /**
  427. * ad4695_enter_advanced_sequencer_mode - Put the ADC in advanced sequencer mode
  428. * @st: The driver state
  429. * @n: The number of slots to use - must be >= 2, <= 128
  430. *
  431. * As per the datasheet, to enable advanced sequencer, we need to set
  432. * STD_SEQ_EN=0, NUM_SLOTS_AS=n-1 and CYC_CTRL=0 (Table 15). Setting SPI_MODE=1
  433. * triggers the first conversion using the channel in AS_SLOT0.
  434. *
  435. * Return: 0 on success, a negative error code on failure
  436. */
  437. static int ad4695_enter_advanced_sequencer_mode(struct ad4695_state *st, u32 n)
  438. {
  439. int ret;
  440. ret = regmap_update_bits(st->regmap, AD4695_REG_SEQ_CTRL,
  441. AD4695_REG_SEQ_CTRL_STD_SEQ_EN |
  442. AD4695_REG_SEQ_CTRL_NUM_SLOTS_AS,
  443. FIELD_PREP(AD4695_REG_SEQ_CTRL_STD_SEQ_EN, 0) |
  444. FIELD_PREP(AD4695_REG_SEQ_CTRL_NUM_SLOTS_AS, n - 1));
  445. if (ret)
  446. return ret;
  447. return regmap_update_bits(st->regmap, AD4695_REG_SETUP,
  448. AD4695_REG_SETUP_SPI_MODE | AD4695_REG_SETUP_SPI_CYC_CTRL,
  449. FIELD_PREP(AD4695_REG_SETUP_SPI_MODE, 1) |
  450. FIELD_PREP(AD4695_REG_SETUP_SPI_CYC_CTRL, 0));
  451. }
  452. /**
  453. * ad4695_exit_conversion_mode - Exit conversion mode
  454. * @st: The AD4695 state
  455. *
  456. * Sends SPI command to exit conversion mode.
  457. *
  458. * Return: 0 on success, a negative error code on failure
  459. */
  460. static int ad4695_exit_conversion_mode(struct ad4695_state *st)
  461. {
  462. /*
  463. * An extra transfer is needed to trigger a conversion here so
  464. * that we can be 100% sure the command will be processed by the
  465. * ADC, rather than relying on it to be in the correct state
  466. * when this function is called (this chip has a quirk where the
  467. * command only works when reading a conversion, and if the
  468. * previous conversion was already read then it won't work). The
  469. * actual conversion command is then run at the slower
  470. * AD4695_REG_ACCESS_SCLK_HZ speed to guarantee this works.
  471. */
  472. struct spi_transfer xfers[] = {
  473. {
  474. .delay.value = AD4695_T_CNVL_NS,
  475. .delay.unit = SPI_DELAY_UNIT_NSECS,
  476. .cs_change = 1,
  477. .cs_change_delay.value = AD4695_T_CNVH_NS,
  478. .cs_change_delay.unit = SPI_DELAY_UNIT_NSECS,
  479. },
  480. {
  481. .speed_hz = AD4695_REG_ACCESS_SCLK_HZ,
  482. .tx_buf = &st->cnv_cmd2,
  483. .len = 1,
  484. .delay.value = AD4695_T_REGCONFIG_NS,
  485. .delay.unit = SPI_DELAY_UNIT_NSECS,
  486. },
  487. };
  488. /*
  489. * Technically, could do a 5-bit transfer, but shifting to start of
  490. * 8 bits instead for better SPI controller support.
  491. */
  492. st->cnv_cmd2 = AD4695_CMD_EXIT_CNV_MODE << 3;
  493. if (st->cnv_gpio) {
  494. ad4695_cnv_manual_trigger(st);
  495. /*
  496. * In this case, CNV is not connected to CS, so we don't need
  497. * the extra CS toggle to trigger the conversion and toggling
  498. * CS would have no effect.
  499. */
  500. return spi_sync_transfer(st->spi, &xfers[1], 1);
  501. }
  502. return spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
  503. }
  504. static int ad4695_set_ref_voltage(struct ad4695_state *st, int vref_mv)
  505. {
  506. u8 val;
  507. if (vref_mv >= 2400 && vref_mv <= 2750)
  508. val = 0;
  509. else if (vref_mv > 2750 && vref_mv <= 3250)
  510. val = 1;
  511. else if (vref_mv > 3250 && vref_mv <= 3750)
  512. val = 2;
  513. else if (vref_mv > 3750 && vref_mv <= 4500)
  514. val = 3;
  515. else if (vref_mv > 4500 && vref_mv <= 5100)
  516. val = 4;
  517. else
  518. return -EINVAL;
  519. return regmap_update_bits(st->regmap, AD4695_REG_REF_CTRL,
  520. AD4695_REG_REF_CTRL_VREF_SET,
  521. FIELD_PREP(AD4695_REG_REF_CTRL_VREF_SET, val));
  522. }
  523. /**
  524. * ad4695_osr_to_regval - convert ratio to OSR register value
  525. * @ratio: ratio to check
  526. *
  527. * Check if ratio is present in the list of available ratios and return
  528. * the corresponding value that needs to be written to the register to
  529. * select that ratio.
  530. *
  531. * Returns: register value (0 to 3) or -EINVAL if there is not an exact
  532. * match
  533. */
  534. static int ad4695_osr_to_regval(int ratio)
  535. {
  536. int i;
  537. for (i = 0; i < ARRAY_SIZE(ad4695_oversampling_ratios); i++) {
  538. if (ratio == ad4695_oversampling_ratios[i])
  539. return i;
  540. }
  541. return -EINVAL;
  542. }
  543. static int ad4695_write_chn_cfg(struct ad4695_state *st,
  544. struct ad4695_channel_config *cfg)
  545. {
  546. u32 mask, val;
  547. mask = AD4695_REG_CONFIG_IN_MODE;
  548. val = FIELD_PREP(AD4695_REG_CONFIG_IN_MODE, cfg->bipolar ? 1 : 0);
  549. mask |= AD4695_REG_CONFIG_IN_PAIR;
  550. val |= FIELD_PREP(AD4695_REG_CONFIG_IN_PAIR, cfg->pin_pairing);
  551. mask |= AD4695_REG_CONFIG_IN_AINHIGHZ_EN;
  552. val |= FIELD_PREP(AD4695_REG_CONFIG_IN_AINHIGHZ_EN,
  553. cfg->highz_en ? 1 : 0);
  554. return regmap_update_bits(st->regmap,
  555. AD4695_REG_CONFIG_IN(cfg->channel),
  556. mask, val);
  557. }
  558. static int ad4695_buffer_preenable(struct iio_dev *indio_dev)
  559. {
  560. struct ad4695_state *st = iio_priv(indio_dev);
  561. struct spi_transfer *xfer;
  562. u8 temp_chan_bit = st->chip_info->num_voltage_inputs;
  563. u32 bit, num_xfer, num_slots;
  564. u32 temp_en = 0;
  565. int ret, rx_buf_offset = 0;
  566. /*
  567. * We are using the advanced sequencer since it is the only way to read
  568. * multiple channels that allows individual configuration of each
  569. * voltage input channel. Slot 0 in the advanced sequencer is used to
  570. * account for the gap between trigger polls - we don't read data from
  571. * this slot. Each enabled voltage channel is assigned a slot starting
  572. * with slot 1.
  573. */
  574. num_slots = 1;
  575. memset(st->buf_read_xfer, 0, sizeof(st->buf_read_xfer));
  576. /* First xfer is only to trigger conversion of slot 1, so no rx. */
  577. xfer = &st->buf_read_xfer[0];
  578. xfer->cs_change = 1;
  579. xfer->delay.value = st->chip_info->t_acq_ns;
  580. xfer->delay.unit = SPI_DELAY_UNIT_NSECS;
  581. xfer->cs_change_delay.value = AD4695_T_CONVERT_NS;
  582. xfer->cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
  583. num_xfer = 1;
  584. iio_for_each_active_channel(indio_dev, bit) {
  585. xfer = &st->buf_read_xfer[num_xfer];
  586. xfer->bits_per_word = 16;
  587. xfer->rx_buf = &st->buf[rx_buf_offset++];
  588. xfer->len = 2;
  589. if (bit == temp_chan_bit) {
  590. temp_en = 1;
  591. } else {
  592. ret = regmap_write(st->regmap,
  593. AD4695_REG_AS_SLOT(num_slots),
  594. FIELD_PREP(AD4695_REG_AS_SLOT_INX, bit));
  595. if (ret)
  596. return ret;
  597. num_slots++;
  598. }
  599. num_xfer++;
  600. /*
  601. * We need to add a blank xfer in data reads, to meet the timing
  602. * requirement of a minimum delay between the last SCLK rising
  603. * edge and the CS deassert.
  604. */
  605. xfer = &st->buf_read_xfer[num_xfer];
  606. xfer->delay.value = AD4695_T_SCK_CNV_DELAY_NS;
  607. xfer->delay.unit = SPI_DELAY_UNIT_NSECS;
  608. xfer->cs_change = 1;
  609. xfer->cs_change_delay.value = AD4695_T_CONVERT_NS;
  610. xfer->cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
  611. num_xfer++;
  612. }
  613. /*
  614. * The advanced sequencer requires that at least 2 slots are enabled.
  615. * Since slot 0 is always used for other purposes, we need only 1
  616. * enabled voltage channel to meet this requirement. If the temperature
  617. * channel is the only enabled channel, we need to add one more slot in
  618. * the sequence but not read from it. This is because the temperature
  619. * sensor is sampled at the end of the channel sequence in advanced
  620. * sequencer mode (see datasheet page 38).
  621. *
  622. * From the iio_for_each_active_channel() block above, we now have an
  623. * xfer with data followed by a blank xfer to allow us to meet the
  624. * timing spec, so move both of those up before adding an extra to
  625. * handle the temperature-only case.
  626. */
  627. if (num_slots < 2) {
  628. /* Move last two xfers */
  629. st->buf_read_xfer[num_xfer] = st->buf_read_xfer[num_xfer - 1];
  630. st->buf_read_xfer[num_xfer - 1] = st->buf_read_xfer[num_xfer - 2];
  631. num_xfer++;
  632. /* Modify inserted xfer for extra slot. */
  633. xfer = &st->buf_read_xfer[num_xfer - 3];
  634. memset(xfer, 0, sizeof(*xfer));
  635. xfer->cs_change = 1;
  636. xfer->delay.value = st->chip_info->t_acq_ns;
  637. xfer->delay.unit = SPI_DELAY_UNIT_NSECS;
  638. xfer->cs_change_delay.value = AD4695_T_CONVERT_NS;
  639. xfer->cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
  640. xfer++;
  641. /* and add the extra slot in the sequencer */
  642. ret = regmap_write(st->regmap,
  643. AD4695_REG_AS_SLOT(num_slots),
  644. FIELD_PREP(AD4695_REG_AS_SLOT_INX, 0));
  645. if (ret)
  646. return ret;
  647. num_slots++;
  648. /*
  649. * We still want to point at the last xfer when finished, so
  650. * update the pointer.
  651. */
  652. xfer = &st->buf_read_xfer[num_xfer - 1];
  653. }
  654. /*
  655. * Don't keep CS asserted after last xfer. Also triggers conversion of
  656. * slot 0.
  657. */
  658. xfer->cs_change = 0;
  659. /*
  660. * Temperature channel isn't included in the sequence, but rather
  661. * controlled by setting a bit in the TEMP_CTRL register.
  662. */
  663. ret = regmap_update_bits(st->regmap, AD4695_REG_TEMP_CTRL,
  664. AD4695_REG_TEMP_CTRL_TEMP_EN,
  665. FIELD_PREP(AD4695_REG_TEMP_CTRL_TEMP_EN, temp_en));
  666. if (ret)
  667. return ret;
  668. spi_message_init_with_transfers(&st->buf_read_msg, st->buf_read_xfer,
  669. num_xfer);
  670. ret = spi_optimize_message(st->spi, &st->buf_read_msg);
  671. if (ret)
  672. return ret;
  673. /* This triggers conversion of slot 0. */
  674. ret = ad4695_enter_advanced_sequencer_mode(st, num_slots);
  675. if (ret)
  676. spi_unoptimize_message(&st->buf_read_msg);
  677. return ret;
  678. }
  679. static int ad4695_buffer_postdisable(struct iio_dev *indio_dev)
  680. {
  681. struct ad4695_state *st = iio_priv(indio_dev);
  682. int ret;
  683. ret = ad4695_exit_conversion_mode(st);
  684. if (ret)
  685. return ret;
  686. spi_unoptimize_message(&st->buf_read_msg);
  687. return 0;
  688. }
  689. static const struct iio_buffer_setup_ops ad4695_buffer_setup_ops = {
  690. .preenable = ad4695_buffer_preenable,
  691. .postdisable = ad4695_buffer_postdisable,
  692. };
  693. static irqreturn_t ad4695_trigger_handler(int irq, void *p)
  694. {
  695. struct iio_poll_func *pf = p;
  696. struct iio_dev *indio_dev = pf->indio_dev;
  697. struct ad4695_state *st = iio_priv(indio_dev);
  698. int ret;
  699. ret = spi_sync(st->spi, &st->buf_read_msg);
  700. if (ret)
  701. goto out;
  702. iio_push_to_buffers_with_ts(indio_dev, st->buf, sizeof(st->buf),
  703. pf->timestamp);
  704. out:
  705. iio_trigger_notify_done(indio_dev->trig);
  706. return IRQ_HANDLED;
  707. }
  708. static int ad4695_offload_buffer_postenable(struct iio_dev *indio_dev)
  709. {
  710. struct ad4695_state *st = iio_priv(indio_dev);
  711. struct spi_offload_trigger_config config = {
  712. .type = SPI_OFFLOAD_TRIGGER_DATA_READY,
  713. };
  714. struct spi_transfer *xfer = &st->buf_read_xfer[0];
  715. struct pwm_state state;
  716. u8 temp_chan_bit = st->chip_info->num_voltage_inputs;
  717. u8 num_slots = 0;
  718. u8 temp_en = 0;
  719. unsigned int bit;
  720. int ret;
  721. iio_for_each_active_channel(indio_dev, bit) {
  722. if (bit == temp_chan_bit) {
  723. temp_en = 1;
  724. continue;
  725. }
  726. ret = regmap_write(st->regmap, AD4695_REG_AS_SLOT(num_slots),
  727. FIELD_PREP(AD4695_REG_AS_SLOT_INX, bit));
  728. if (ret)
  729. return ret;
  730. num_slots++;
  731. }
  732. /*
  733. * For non-offload, we could discard data to work around this
  734. * restriction, but with offload, that is not possible.
  735. */
  736. if (num_slots < 2) {
  737. dev_err(&st->spi->dev,
  738. "At least two voltage channels must be enabled.\n");
  739. return -EINVAL;
  740. }
  741. ret = regmap_update_bits(st->regmap, AD4695_REG_TEMP_CTRL,
  742. AD4695_REG_TEMP_CTRL_TEMP_EN,
  743. FIELD_PREP(AD4695_REG_TEMP_CTRL_TEMP_EN,
  744. temp_en));
  745. if (ret)
  746. return ret;
  747. /* Each BUSY event means just one sample for one channel is ready. */
  748. memset(xfer, 0, sizeof(*xfer));
  749. xfer->offload_flags = SPI_OFFLOAD_XFER_RX_STREAM;
  750. /* Using 19 bits per word to allow for possible oversampling */
  751. xfer->bits_per_word = 19;
  752. xfer->len = 4;
  753. spi_message_init_with_transfers(&st->buf_read_msg, xfer, 1);
  754. st->buf_read_msg.offload = st->offload;
  755. ret = spi_optimize_message(st->spi, &st->buf_read_msg);
  756. if (ret)
  757. return ret;
  758. /*
  759. * NB: technically, this is part the SPI offload trigger enable, but it
  760. * doesn't work to call it from the offload trigger enable callback
  761. * because it requires accessing the SPI bus. Calling it from the
  762. * trigger enable callback could cause a deadlock.
  763. */
  764. ret = regmap_set_bits(st->regmap, AD4695_REG_GP_MODE,
  765. AD4695_REG_GP_MODE_BUSY_GP_EN);
  766. if (ret)
  767. goto err_unoptimize_message;
  768. ret = spi_offload_trigger_enable(st->offload, st->offload_trigger,
  769. &config);
  770. if (ret)
  771. goto err_disable_busy_output;
  772. ret = ad4695_enter_advanced_sequencer_mode(st, num_slots);
  773. if (ret)
  774. goto err_offload_trigger_disable;
  775. mutex_lock(&st->cnv_pwm_lock);
  776. pwm_get_state(st->cnv_pwm, &state);
  777. /*
  778. * PWM subsystem generally rounds down, so requesting 2x minimum high
  779. * time ensures that we meet the minimum high time in any case.
  780. */
  781. state.duty_cycle = AD4695_T_CNVH_NS * 2;
  782. ret = pwm_apply_might_sleep(st->cnv_pwm, &state);
  783. mutex_unlock(&st->cnv_pwm_lock);
  784. if (ret)
  785. goto err_offload_exit_conversion_mode;
  786. return 0;
  787. err_offload_exit_conversion_mode:
  788. /*
  789. * We have to unwind in a different order to avoid triggering offload.
  790. * ad4695_exit_conversion_mode() triggers a conversion, so it has to be
  791. * done after spi_offload_trigger_disable().
  792. */
  793. spi_offload_trigger_disable(st->offload, st->offload_trigger);
  794. ad4695_exit_conversion_mode(st);
  795. goto err_disable_busy_output;
  796. err_offload_trigger_disable:
  797. spi_offload_trigger_disable(st->offload, st->offload_trigger);
  798. err_disable_busy_output:
  799. regmap_clear_bits(st->regmap, AD4695_REG_GP_MODE,
  800. AD4695_REG_GP_MODE_BUSY_GP_EN);
  801. err_unoptimize_message:
  802. spi_unoptimize_message(&st->buf_read_msg);
  803. return ret;
  804. }
  805. static int ad4695_offload_buffer_predisable(struct iio_dev *indio_dev)
  806. {
  807. struct ad4695_state *st = iio_priv(indio_dev);
  808. struct pwm_state state;
  809. int ret;
  810. scoped_guard(mutex, &st->cnv_pwm_lock) {
  811. pwm_get_state(st->cnv_pwm, &state);
  812. state.duty_cycle = 0;
  813. ret = pwm_apply_might_sleep(st->cnv_pwm, &state);
  814. if (ret)
  815. return ret;
  816. }
  817. spi_offload_trigger_disable(st->offload, st->offload_trigger);
  818. /*
  819. * ad4695_exit_conversion_mode() triggers a conversion, so it has to be
  820. * done after spi_offload_trigger_disable().
  821. */
  822. ret = ad4695_exit_conversion_mode(st);
  823. if (ret)
  824. return ret;
  825. ret = regmap_clear_bits(st->regmap, AD4695_REG_GP_MODE,
  826. AD4695_REG_GP_MODE_BUSY_GP_EN);
  827. if (ret)
  828. return ret;
  829. spi_unoptimize_message(&st->buf_read_msg);
  830. return 0;
  831. }
  832. static const struct iio_buffer_setup_ops ad4695_offload_buffer_setup_ops = {
  833. .postenable = ad4695_offload_buffer_postenable,
  834. .predisable = ad4695_offload_buffer_predisable,
  835. };
  836. /**
  837. * ad4695_read_one_sample - Read a single sample using single-cycle mode
  838. * @st: The AD4695 state
  839. * @address: The address of the channel to read
  840. *
  841. * Upon successful return, the sample will be stored in `st->raw_data`.
  842. *
  843. * Context: can sleep, must be called with iio_device_claim_direct held
  844. * Return: 0 on success, a negative error code on failure
  845. */
  846. static int ad4695_read_one_sample(struct ad4695_state *st, unsigned int address)
  847. {
  848. struct spi_transfer xfers[2] = {
  849. {
  850. .speed_hz = AD4695_REG_ACCESS_SCLK_HZ,
  851. .bits_per_word = 16,
  852. .tx_buf = &st->cnv_cmd,
  853. .len = 2,
  854. },
  855. {
  856. /* Required delay between last SCLK and CNV/CS */
  857. .delay.value = AD4695_T_SCK_CNV_DELAY_NS,
  858. .delay.unit = SPI_DELAY_UNIT_NSECS,
  859. }
  860. };
  861. int ret;
  862. ret = ad4695_set_single_cycle_mode(st, address);
  863. if (ret)
  864. return ret;
  865. /*
  866. * If CNV is connected to CS, the previous function will have triggered
  867. * the conversion, otherwise, we do it manually.
  868. */
  869. if (st->cnv_gpio)
  870. ad4695_cnv_manual_trigger(st);
  871. /*
  872. * Setting the first channel to the temperature channel isn't supported
  873. * in single-cycle mode, so we have to do an extra conversion to read
  874. * the temperature.
  875. */
  876. if (address == AD4695_CMD_TEMP_CHAN) {
  877. st->cnv_cmd = AD4695_CMD_TEMP_CHAN << 11;
  878. ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
  879. if (ret)
  880. return ret;
  881. /*
  882. * If CNV is connected to CS, the previous function will have
  883. * triggered the conversion, otherwise, we do it manually.
  884. */
  885. if (st->cnv_gpio)
  886. ad4695_cnv_manual_trigger(st);
  887. }
  888. /* Then read the result and exit conversion mode. */
  889. st->cnv_cmd = AD4695_CMD_EXIT_CNV_MODE << 11;
  890. xfers[0].rx_buf = &st->raw_data;
  891. return spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
  892. }
  893. static int __ad4695_read_info_raw(struct ad4695_state *st,
  894. struct iio_chan_spec const *chan,
  895. int *val)
  896. {
  897. u8 realbits = chan->scan_type.realbits;
  898. int ret;
  899. ret = ad4695_read_one_sample(st, chan->address);
  900. if (ret)
  901. return ret;
  902. if (chan->scan_type.sign == 's')
  903. *val = sign_extend32(st->raw_data, realbits - 1);
  904. else
  905. *val = st->raw_data;
  906. return IIO_VAL_INT;
  907. }
  908. static int ad4695_read_raw(struct iio_dev *indio_dev,
  909. struct iio_chan_spec const *chan,
  910. int *val, int *val2, long mask)
  911. {
  912. struct ad4695_state *st = iio_priv(indio_dev);
  913. const struct iio_scan_type *scan_type;
  914. struct ad4695_channel_config *cfg;
  915. unsigned int reg_val;
  916. int ret, tmp;
  917. u8 realbits;
  918. if (chan->type == IIO_VOLTAGE)
  919. cfg = &st->channels_cfg[chan->scan_index];
  920. scan_type = iio_get_current_scan_type(indio_dev, chan);
  921. if (IS_ERR(scan_type))
  922. return PTR_ERR(scan_type);
  923. realbits = scan_type->realbits;
  924. switch (mask) {
  925. case IIO_CHAN_INFO_RAW:
  926. if (!iio_device_claim_direct(indio_dev))
  927. return -EBUSY;
  928. ret = __ad4695_read_info_raw(st, chan, val);
  929. iio_device_release_direct(indio_dev);
  930. return ret;
  931. case IIO_CHAN_INFO_SCALE:
  932. switch (chan->type) {
  933. case IIO_VOLTAGE:
  934. *val = st->vref_mv;
  935. *val2 = realbits;
  936. return IIO_VAL_FRACTIONAL_LOG2;
  937. case IIO_TEMP:
  938. /* T_scale (°C) = raw * V_REF (mV) / (-1.8 mV/°C * 2^16) */
  939. *val = st->vref_mv * -556;
  940. *val2 = 16;
  941. return IIO_VAL_FRACTIONAL_LOG2;
  942. default:
  943. return -EINVAL;
  944. }
  945. case IIO_CHAN_INFO_OFFSET:
  946. switch (chan->type) {
  947. case IIO_VOLTAGE:
  948. if (cfg->pin_pairing == AD4695_IN_PAIR_COM)
  949. *val = st->com_mv * (1 << realbits) / st->vref_mv;
  950. else if (cfg->pin_pairing == AD4695_IN_PAIR_EVEN_ODD)
  951. *val = cfg->common_mode_mv * (1 << realbits) / st->vref_mv;
  952. else
  953. *val = 0;
  954. return IIO_VAL_INT;
  955. case IIO_TEMP:
  956. /* T_offset (°C) = -725 mV / (-1.8 mV/°C) */
  957. /* T_offset (raw) = T_offset (°C) * (-1.8 mV/°C) * 2^16 / V_REF (mV) */
  958. *val = -47513600;
  959. *val2 = st->vref_mv;
  960. return IIO_VAL_FRACTIONAL;
  961. default:
  962. return -EINVAL;
  963. }
  964. case IIO_CHAN_INFO_CALIBSCALE:
  965. switch (chan->type) {
  966. case IIO_VOLTAGE:
  967. if (!iio_device_claim_direct(indio_dev))
  968. return -EBUSY;
  969. ret = regmap_read(st->regmap16,
  970. AD4695_REG_GAIN_IN(chan->scan_index),
  971. &reg_val);
  972. iio_device_release_direct(indio_dev);
  973. if (ret)
  974. return ret;
  975. *val = reg_val;
  976. *val2 = 15;
  977. return IIO_VAL_FRACTIONAL_LOG2;
  978. default:
  979. return -EINVAL;
  980. }
  981. case IIO_CHAN_INFO_CALIBBIAS:
  982. switch (chan->type)
  983. case IIO_VOLTAGE: {
  984. if (!iio_device_claim_direct(indio_dev))
  985. return -EBUSY;
  986. ret = regmap_read(st->regmap16,
  987. AD4695_REG_OFFSET_IN(chan->scan_index),
  988. &reg_val);
  989. iio_device_release_direct(indio_dev);
  990. if (ret)
  991. return ret;
  992. tmp = sign_extend32(reg_val, 15);
  993. switch (cfg->oversampling_ratio) {
  994. case 1:
  995. *val = tmp / 4;
  996. *val2 = abs(tmp) % 4 * MICRO / 4;
  997. break;
  998. case 4:
  999. *val = tmp / 2;
  1000. *val2 = abs(tmp) % 2 * MICRO / 2;
  1001. break;
  1002. case 16:
  1003. *val = tmp;
  1004. *val2 = 0;
  1005. break;
  1006. case 64:
  1007. *val = tmp * 2;
  1008. *val2 = 0;
  1009. break;
  1010. default:
  1011. return -EINVAL;
  1012. }
  1013. if (tmp < 0 && *val2) {
  1014. *val *= -1;
  1015. *val2 *= -1;
  1016. }
  1017. return IIO_VAL_INT_PLUS_MICRO;
  1018. default:
  1019. return -EINVAL;
  1020. }
  1021. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  1022. switch (chan->type) {
  1023. case IIO_VOLTAGE:
  1024. *val = cfg->oversampling_ratio;
  1025. return IIO_VAL_INT;
  1026. default:
  1027. return -EINVAL;
  1028. }
  1029. case IIO_CHAN_INFO_SAMP_FREQ: {
  1030. struct pwm_state state;
  1031. unsigned int osr = 1;
  1032. if (chan->type == IIO_VOLTAGE)
  1033. osr = cfg->oversampling_ratio;
  1034. ret = pwm_get_state_hw(st->cnv_pwm, &state);
  1035. if (ret)
  1036. return ret;
  1037. /*
  1038. * The effective sampling frequency for a channel is the input
  1039. * frequency divided by the channel's OSR value.
  1040. */
  1041. *val = DIV_ROUND_UP_ULL(NSEC_PER_SEC, state.period * osr);
  1042. return IIO_VAL_INT;
  1043. }
  1044. default:
  1045. return -EINVAL;
  1046. }
  1047. }
  1048. static int ad4695_write_raw_get_fmt(struct iio_dev *indio_dev,
  1049. struct iio_chan_spec const *chan,
  1050. long mask)
  1051. {
  1052. switch (mask) {
  1053. case IIO_CHAN_INFO_SAMP_FREQ:
  1054. return IIO_VAL_INT;
  1055. default:
  1056. return IIO_VAL_INT_PLUS_MICRO;
  1057. }
  1058. }
  1059. static int ad4695_set_osr_val(struct ad4695_state *st,
  1060. struct iio_chan_spec const *chan,
  1061. int val)
  1062. {
  1063. int osr = ad4695_osr_to_regval(val);
  1064. if (osr < 0)
  1065. return osr;
  1066. switch (chan->type) {
  1067. case IIO_VOLTAGE:
  1068. st->channels_cfg[chan->scan_index].oversampling_ratio = val;
  1069. return regmap_update_bits(st->regmap,
  1070. AD4695_REG_CONFIG_IN(chan->scan_index),
  1071. AD4695_REG_CONFIG_IN_OSR_SET,
  1072. FIELD_PREP(AD4695_REG_CONFIG_IN_OSR_SET, osr));
  1073. default:
  1074. return -EINVAL;
  1075. }
  1076. }
  1077. static unsigned int ad4695_get_calibbias(int val, int val2, int osr)
  1078. {
  1079. int val_calc, scale;
  1080. switch (osr) {
  1081. case 4:
  1082. scale = 4;
  1083. break;
  1084. case 16:
  1085. scale = 2;
  1086. break;
  1087. case 64:
  1088. scale = 1;
  1089. break;
  1090. default:
  1091. scale = 8;
  1092. break;
  1093. }
  1094. val = clamp_t(int, val, S32_MIN / 8, S32_MAX / 8);
  1095. /* val2 range is (-MICRO, MICRO) if val == 0, otherwise [0, MICRO) */
  1096. if (val < 0)
  1097. val_calc = val * scale - val2 * scale / MICRO;
  1098. else if (val2 < 0)
  1099. /* if val2 < 0 then val == 0 */
  1100. val_calc = val2 * scale / (int)MICRO;
  1101. else
  1102. val_calc = val * scale + val2 * scale / MICRO;
  1103. val_calc /= 2;
  1104. return clamp_t(int, val_calc, S16_MIN, S16_MAX);
  1105. }
  1106. static int __ad4695_write_raw(struct iio_dev *indio_dev,
  1107. struct iio_chan_spec const *chan,
  1108. int val, int val2, long mask)
  1109. {
  1110. struct ad4695_state *st = iio_priv(indio_dev);
  1111. unsigned int reg_val;
  1112. unsigned int osr = 1;
  1113. if (chan->type == IIO_VOLTAGE)
  1114. osr = st->channels_cfg[chan->scan_index].oversampling_ratio;
  1115. switch (mask) {
  1116. case IIO_CHAN_INFO_CALIBSCALE:
  1117. switch (chan->type) {
  1118. case IIO_VOLTAGE:
  1119. if (val < 0 || val2 < 0)
  1120. reg_val = 0;
  1121. else if (val > 1)
  1122. reg_val = U16_MAX;
  1123. else
  1124. reg_val = (val * (1 << 16) +
  1125. mul_u64_u32_div(val2, 1 << 16,
  1126. MICRO)) / 2;
  1127. return regmap_write(st->regmap16,
  1128. AD4695_REG_GAIN_IN(chan->scan_index),
  1129. reg_val);
  1130. default:
  1131. return -EINVAL;
  1132. }
  1133. case IIO_CHAN_INFO_CALIBBIAS:
  1134. switch (chan->type) {
  1135. case IIO_VOLTAGE:
  1136. reg_val = ad4695_get_calibbias(val, val2, osr);
  1137. return regmap_write(st->regmap16,
  1138. AD4695_REG_OFFSET_IN(chan->scan_index),
  1139. reg_val);
  1140. default:
  1141. return -EINVAL;
  1142. }
  1143. case IIO_CHAN_INFO_SAMP_FREQ: {
  1144. struct pwm_state state;
  1145. /*
  1146. * Limit the maximum acceptable sample rate according to
  1147. * the channel's oversampling ratio.
  1148. */
  1149. u64 max_osr_rate = DIV_ROUND_UP_ULL(st->chip_info->max_sample_rate,
  1150. osr);
  1151. if (val <= 0 || val > max_osr_rate)
  1152. return -EINVAL;
  1153. guard(mutex)(&st->cnv_pwm_lock);
  1154. pwm_get_state(st->cnv_pwm, &state);
  1155. /*
  1156. * The required sample frequency for a given OSR is the
  1157. * input frequency multiplied by it.
  1158. */
  1159. state.period = DIV_ROUND_UP_ULL(NSEC_PER_SEC, val * osr);
  1160. return pwm_apply_might_sleep(st->cnv_pwm, &state);
  1161. }
  1162. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  1163. return ad4695_set_osr_val(st, chan, val);
  1164. default:
  1165. return -EINVAL;
  1166. }
  1167. }
  1168. static int ad4695_write_raw(struct iio_dev *indio_dev,
  1169. struct iio_chan_spec const *chan,
  1170. int val, int val2, long mask)
  1171. {
  1172. int ret;
  1173. if (!iio_device_claim_direct(indio_dev))
  1174. return -EBUSY;
  1175. ret = __ad4695_write_raw(indio_dev, chan, val, val2, mask);
  1176. iio_device_release_direct(indio_dev);
  1177. return ret;
  1178. }
  1179. static int ad4695_read_avail(struct iio_dev *indio_dev,
  1180. struct iio_chan_spec const *chan,
  1181. const int **vals, int *type, int *length,
  1182. long mask)
  1183. {
  1184. int ret;
  1185. static const int ad4695_calibscale_available[6] = {
  1186. /* Range of 0 (inclusive) to 2 (exclusive) */
  1187. 0, 15, 1, 15, U16_MAX, 15
  1188. };
  1189. static const int ad4695_calibbias_available[4][6] = {
  1190. /*
  1191. * Datasheet says FSR/8 which translates to signed/4. The step
  1192. * depends on oversampling ratio, so we need four different
  1193. * ranges to select from.
  1194. */
  1195. {
  1196. S16_MIN / 4, 0,
  1197. 0, MICRO / 4,
  1198. S16_MAX / 4, S16_MAX % 4 * MICRO / 4
  1199. },
  1200. {
  1201. S16_MIN / 2, 0,
  1202. 0, MICRO / 2,
  1203. S16_MAX / 2, S16_MAX % 2 * MICRO / 2,
  1204. },
  1205. {
  1206. S16_MIN, 0,
  1207. 1, 0,
  1208. S16_MAX, 0,
  1209. },
  1210. {
  1211. S16_MIN * 2, 0,
  1212. 2, 0,
  1213. S16_MAX * 2, 0,
  1214. },
  1215. };
  1216. struct ad4695_state *st = iio_priv(indio_dev);
  1217. unsigned int osr = 1;
  1218. if (chan->type == IIO_VOLTAGE)
  1219. osr = st->channels_cfg[chan->scan_index].oversampling_ratio;
  1220. switch (mask) {
  1221. case IIO_CHAN_INFO_CALIBSCALE:
  1222. switch (chan->type) {
  1223. case IIO_VOLTAGE:
  1224. *vals = ad4695_calibscale_available;
  1225. *type = IIO_VAL_FRACTIONAL_LOG2;
  1226. return IIO_AVAIL_RANGE;
  1227. default:
  1228. return -EINVAL;
  1229. }
  1230. case IIO_CHAN_INFO_CALIBBIAS:
  1231. switch (chan->type) {
  1232. case IIO_VOLTAGE:
  1233. ret = ad4695_osr_to_regval(osr);
  1234. if (ret < 0)
  1235. return ret;
  1236. /*
  1237. * Select the appropriate calibbias array based on the
  1238. * OSR value in the register.
  1239. */
  1240. *vals = ad4695_calibbias_available[ret];
  1241. *type = IIO_VAL_INT_PLUS_MICRO;
  1242. return IIO_AVAIL_RANGE;
  1243. default:
  1244. return -EINVAL;
  1245. }
  1246. case IIO_CHAN_INFO_SAMP_FREQ:
  1247. /* Max sample rate for the channel depends on OSR */
  1248. st->sample_freq_range[2] =
  1249. DIV_ROUND_UP_ULL(st->chip_info->max_sample_rate, osr);
  1250. *vals = st->sample_freq_range;
  1251. *type = IIO_VAL_INT;
  1252. return IIO_AVAIL_RANGE;
  1253. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  1254. switch (chan->type) {
  1255. case IIO_VOLTAGE:
  1256. *vals = ad4695_oversampling_ratios;
  1257. *length = ARRAY_SIZE(ad4695_oversampling_ratios);
  1258. *type = IIO_VAL_INT;
  1259. return IIO_AVAIL_LIST;
  1260. default:
  1261. return -EINVAL;
  1262. }
  1263. default:
  1264. return -EINVAL;
  1265. }
  1266. }
  1267. static int ad4695_debugfs_reg_access(struct iio_dev *indio_dev,
  1268. unsigned int reg,
  1269. unsigned int writeval,
  1270. unsigned int *readval)
  1271. {
  1272. struct ad4695_state *st = iio_priv(indio_dev);
  1273. int ret = -EINVAL;
  1274. if (!iio_device_claim_direct(indio_dev))
  1275. return -EBUSY;
  1276. if (readval) {
  1277. if (regmap_check_range_table(st->regmap, reg,
  1278. &ad4695_regmap_rd_table))
  1279. ret = regmap_read(st->regmap, reg, readval);
  1280. if (regmap_check_range_table(st->regmap16, reg,
  1281. &ad4695_regmap16_rd_table))
  1282. ret = regmap_read(st->regmap16, reg, readval);
  1283. } else {
  1284. if (regmap_check_range_table(st->regmap, reg,
  1285. &ad4695_regmap_wr_table))
  1286. ret = regmap_write(st->regmap, reg, writeval);
  1287. if (regmap_check_range_table(st->regmap16, reg,
  1288. &ad4695_regmap16_wr_table))
  1289. ret = regmap_write(st->regmap16, reg, writeval);
  1290. }
  1291. iio_device_release_direct(indio_dev);
  1292. return ret;
  1293. }
  1294. static int ad4695_get_current_scan_type(const struct iio_dev *indio_dev,
  1295. const struct iio_chan_spec *chan)
  1296. {
  1297. struct ad4695_state *st = iio_priv(indio_dev);
  1298. unsigned int osr = st->channels_cfg[chan->scan_index].oversampling_ratio;
  1299. switch (osr) {
  1300. case 1:
  1301. return AD4695_SCAN_TYPE_OSR_1;
  1302. case 4:
  1303. return AD4695_SCAN_TYPE_OSR_4;
  1304. case 16:
  1305. return AD4695_SCAN_TYPE_OSR_16;
  1306. case 64:
  1307. return AD4695_SCAN_TYPE_OSR_64;
  1308. default:
  1309. return -EINVAL;
  1310. }
  1311. }
  1312. static const struct iio_info ad4695_info = {
  1313. .read_raw = &ad4695_read_raw,
  1314. .write_raw_get_fmt = &ad4695_write_raw_get_fmt,
  1315. .write_raw = &ad4695_write_raw,
  1316. .read_avail = &ad4695_read_avail,
  1317. .debugfs_reg_access = &ad4695_debugfs_reg_access,
  1318. };
  1319. static const struct iio_info ad4695_offload_info = {
  1320. .read_raw = &ad4695_read_raw,
  1321. .write_raw_get_fmt = &ad4695_write_raw_get_fmt,
  1322. .write_raw = &ad4695_write_raw,
  1323. .get_current_scan_type = &ad4695_get_current_scan_type,
  1324. .read_avail = &ad4695_read_avail,
  1325. .debugfs_reg_access = &ad4695_debugfs_reg_access,
  1326. };
  1327. static int ad4695_parse_channel_cfg(struct ad4695_state *st)
  1328. {
  1329. struct device *dev = &st->spi->dev;
  1330. struct ad4695_channel_config *chan_cfg;
  1331. struct iio_chan_spec *iio_chan;
  1332. int ret, i;
  1333. /* populate defaults */
  1334. for (i = 0; i < st->chip_info->num_voltage_inputs; i++) {
  1335. chan_cfg = &st->channels_cfg[i];
  1336. iio_chan = &st->iio_chan[i];
  1337. chan_cfg->highz_en = true;
  1338. chan_cfg->channel = i;
  1339. /* This is the default OSR after reset */
  1340. chan_cfg->oversampling_ratio = 1;
  1341. *iio_chan = ad4695_channel_template;
  1342. iio_chan->channel = i;
  1343. iio_chan->scan_index = i;
  1344. iio_chan->address = AD4695_CMD_VOLTAGE_CHAN(i);
  1345. }
  1346. /* modify based on firmware description */
  1347. device_for_each_child_node_scoped(dev, child) {
  1348. u32 reg, val;
  1349. ret = fwnode_property_read_u32(child, "reg", &reg);
  1350. if (ret)
  1351. return dev_err_probe(dev, ret,
  1352. "failed to read reg property (%s)\n",
  1353. fwnode_get_name(child));
  1354. if (reg >= st->chip_info->num_voltage_inputs)
  1355. return dev_err_probe(dev, -EINVAL,
  1356. "reg out of range (%s)\n",
  1357. fwnode_get_name(child));
  1358. iio_chan = &st->iio_chan[reg];
  1359. chan_cfg = &st->channels_cfg[reg];
  1360. chan_cfg->highz_en =
  1361. !fwnode_property_read_bool(child, "adi,no-high-z");
  1362. chan_cfg->bipolar = fwnode_property_read_bool(child, "bipolar");
  1363. ret = fwnode_property_read_u32(child, "common-mode-channel",
  1364. &val);
  1365. if (ret && ret != -EINVAL)
  1366. return dev_err_probe(dev, ret,
  1367. "failed to read common-mode-channel (%s)\n",
  1368. fwnode_get_name(child));
  1369. if (ret == -EINVAL || val == AD4695_COMMON_MODE_REFGND)
  1370. chan_cfg->pin_pairing = AD4695_IN_PAIR_REFGND;
  1371. else if (val == AD4695_COMMON_MODE_COM)
  1372. chan_cfg->pin_pairing = AD4695_IN_PAIR_COM;
  1373. else
  1374. chan_cfg->pin_pairing = AD4695_IN_PAIR_EVEN_ODD;
  1375. if (chan_cfg->pin_pairing == AD4695_IN_PAIR_EVEN_ODD &&
  1376. val % 2 == 0)
  1377. return dev_err_probe(dev, -EINVAL,
  1378. "common-mode-channel must be odd number (%s)\n",
  1379. fwnode_get_name(child));
  1380. if (chan_cfg->pin_pairing == AD4695_IN_PAIR_EVEN_ODD &&
  1381. val != reg + 1)
  1382. return dev_err_probe(dev, -EINVAL,
  1383. "common-mode-channel must be next consecutive channel (%s)\n",
  1384. fwnode_get_name(child));
  1385. if (chan_cfg->pin_pairing == AD4695_IN_PAIR_EVEN_ODD) {
  1386. char name[5];
  1387. snprintf(name, sizeof(name), "in%d", reg + 1);
  1388. ret = devm_regulator_get_enable_read_voltage(dev, name);
  1389. if (ret < 0)
  1390. return dev_err_probe(dev, ret,
  1391. "failed to get %s voltage (%s)\n",
  1392. name, fwnode_get_name(child));
  1393. chan_cfg->common_mode_mv = ret / 1000;
  1394. }
  1395. if (chan_cfg->bipolar &&
  1396. chan_cfg->pin_pairing == AD4695_IN_PAIR_REFGND)
  1397. return dev_err_probe(dev, -EINVAL,
  1398. "bipolar mode is not available for inputs paired with REFGND (%s).\n",
  1399. fwnode_get_name(child));
  1400. if (chan_cfg->bipolar)
  1401. iio_chan->scan_type.sign = 's';
  1402. ret = ad4695_write_chn_cfg(st, chan_cfg);
  1403. if (ret)
  1404. return ret;
  1405. }
  1406. /* Temperature channel must be next scan index after voltage channels. */
  1407. st->iio_chan[i] = ad4695_temp_channel_template;
  1408. st->iio_chan[i].scan_index = i;
  1409. i++;
  1410. st->iio_chan[i] = ad4695_soft_timestamp_channel_template;
  1411. st->iio_chan[i].scan_index = i;
  1412. return 0;
  1413. }
  1414. static bool ad4695_offload_trigger_match(struct spi_offload_trigger *trigger,
  1415. enum spi_offload_trigger_type type,
  1416. u64 *args, u32 nargs)
  1417. {
  1418. if (type != SPI_OFFLOAD_TRIGGER_DATA_READY)
  1419. return false;
  1420. /*
  1421. * Requires 2 args:
  1422. * args[0] is the trigger event.
  1423. * args[1] is the GPIO pin number.
  1424. */
  1425. if (nargs != 2 || args[0] != AD4695_TRIGGER_EVENT_BUSY)
  1426. return false;
  1427. return true;
  1428. }
  1429. static int ad4695_offload_trigger_request(struct spi_offload_trigger *trigger,
  1430. enum spi_offload_trigger_type type,
  1431. u64 *args, u32 nargs)
  1432. {
  1433. struct ad4695_state *st = spi_offload_trigger_get_priv(trigger);
  1434. /* Should already be validated by match, but just in case. */
  1435. if (nargs != 2)
  1436. return -EINVAL;
  1437. /* DT tells us if BUSY event uses GP0 or GP3. */
  1438. if (args[1] == AD4695_TRIGGER_PIN_GP3)
  1439. return regmap_set_bits(st->regmap, AD4695_REG_GP_MODE,
  1440. AD4695_REG_GP_MODE_BUSY_GP_SEL);
  1441. return regmap_clear_bits(st->regmap, AD4695_REG_GP_MODE,
  1442. AD4695_REG_GP_MODE_BUSY_GP_SEL);
  1443. }
  1444. static int
  1445. ad4695_offload_trigger_validate(struct spi_offload_trigger *trigger,
  1446. struct spi_offload_trigger_config *config)
  1447. {
  1448. if (config->type != SPI_OFFLOAD_TRIGGER_DATA_READY)
  1449. return -EINVAL;
  1450. return 0;
  1451. }
  1452. /*
  1453. * NB: There are no enable/disable callbacks here due to requiring a SPI
  1454. * message to enable or disable the BUSY output on the ADC.
  1455. */
  1456. static const struct spi_offload_trigger_ops ad4695_offload_trigger_ops = {
  1457. .match = ad4695_offload_trigger_match,
  1458. .request = ad4695_offload_trigger_request,
  1459. .validate = ad4695_offload_trigger_validate,
  1460. };
  1461. static void ad4695_pwm_disable(void *pwm)
  1462. {
  1463. pwm_disable(pwm);
  1464. }
  1465. static int ad4695_probe_spi_offload(struct iio_dev *indio_dev,
  1466. struct ad4695_state *st)
  1467. {
  1468. struct device *dev = &st->spi->dev;
  1469. struct spi_offload_trigger_info trigger_info = {
  1470. .fwnode = dev_fwnode(dev),
  1471. .ops = &ad4695_offload_trigger_ops,
  1472. .priv = st,
  1473. };
  1474. struct pwm_state pwm_state;
  1475. struct dma_chan *rx_dma;
  1476. int ret, i;
  1477. indio_dev->info = &ad4695_offload_info;
  1478. indio_dev->num_channels = st->chip_info->num_voltage_inputs + 1;
  1479. indio_dev->setup_ops = &ad4695_offload_buffer_setup_ops;
  1480. if (!st->cnv_gpio)
  1481. return dev_err_probe(dev, -ENODEV,
  1482. "CNV GPIO is required for SPI offload\n");
  1483. ret = devm_spi_offload_trigger_register(dev, &trigger_info);
  1484. if (ret)
  1485. return dev_err_probe(dev, ret,
  1486. "failed to register offload trigger\n");
  1487. st->offload_trigger = devm_spi_offload_trigger_get(dev, st->offload,
  1488. SPI_OFFLOAD_TRIGGER_DATA_READY);
  1489. if (IS_ERR(st->offload_trigger))
  1490. return dev_err_probe(dev, PTR_ERR(st->offload_trigger),
  1491. "failed to get offload trigger\n");
  1492. ret = devm_mutex_init(dev, &st->cnv_pwm_lock);
  1493. if (ret)
  1494. return ret;
  1495. st->cnv_pwm = devm_pwm_get(dev, NULL);
  1496. if (IS_ERR(st->cnv_pwm))
  1497. return dev_err_probe(dev, PTR_ERR(st->cnv_pwm),
  1498. "failed to get CNV PWM\n");
  1499. pwm_init_state(st->cnv_pwm, &pwm_state);
  1500. /* If firmware didn't provide default rate, use 10kHz (arbitrary). */
  1501. if (pwm_state.period == 0)
  1502. pwm_state.period = 100 * MILLI;
  1503. pwm_state.enabled = true;
  1504. ret = pwm_apply_might_sleep(st->cnv_pwm, &pwm_state);
  1505. if (ret)
  1506. return dev_err_probe(dev, ret, "failed to apply CNV PWM\n");
  1507. ret = devm_add_action_or_reset(dev, ad4695_pwm_disable, st->cnv_pwm);
  1508. if (ret)
  1509. return ret;
  1510. rx_dma = devm_spi_offload_rx_stream_request_dma_chan(dev, st->offload);
  1511. if (IS_ERR(rx_dma))
  1512. return dev_err_probe(dev, PTR_ERR(rx_dma),
  1513. "failed to get offload RX DMA\n");
  1514. for (i = 0; i < indio_dev->num_channels; i++) {
  1515. struct iio_chan_spec *chan = &st->iio_chan[i];
  1516. struct ad4695_channel_config *cfg;
  1517. /*
  1518. * NB: When using offload support, all channels need to have the
  1519. * same bits_per_word because they all use the same SPI message
  1520. * for reading one sample. In order to prevent breaking
  1521. * userspace in the future when oversampling support is added,
  1522. * all channels are set read 19 bits with a shift of 3 to mask
  1523. * out the extra bits even though we currently only support 16
  1524. * bit samples (oversampling ratio == 1).
  1525. */
  1526. chan->scan_type.shift = 3;
  1527. chan->scan_type.storagebits = 32;
  1528. /* add sample frequency for PWM CNV trigger */
  1529. chan->info_mask_separate |= BIT(IIO_CHAN_INFO_SAMP_FREQ);
  1530. chan->info_mask_separate_available |= BIT(IIO_CHAN_INFO_SAMP_FREQ);
  1531. /* Add the oversampling properties only for voltage channels */
  1532. if (chan->type != IIO_VOLTAGE)
  1533. continue;
  1534. cfg = &st->channels_cfg[i];
  1535. chan->info_mask_separate |= BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO);
  1536. chan->info_mask_separate_available |=
  1537. BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO);
  1538. chan->has_ext_scan_type = 1;
  1539. if (cfg->bipolar) {
  1540. chan->ext_scan_type = ad4695_scan_type_offload_s;
  1541. chan->num_ext_scan_type =
  1542. ARRAY_SIZE(ad4695_scan_type_offload_s);
  1543. } else {
  1544. chan->ext_scan_type = ad4695_scan_type_offload_u;
  1545. chan->num_ext_scan_type =
  1546. ARRAY_SIZE(ad4695_scan_type_offload_u);
  1547. }
  1548. }
  1549. return devm_iio_dmaengine_buffer_setup_with_handle(dev, indio_dev,
  1550. rx_dma, IIO_BUFFER_DIRECTION_IN);
  1551. }
  1552. static const struct spi_offload_config ad4695_spi_offload_config = {
  1553. .capability_flags = SPI_OFFLOAD_CAP_TRIGGER |
  1554. SPI_OFFLOAD_CAP_RX_STREAM_DMA,
  1555. };
  1556. static int ad4695_probe(struct spi_device *spi)
  1557. {
  1558. struct device *dev = &spi->dev;
  1559. struct ad4695_state *st;
  1560. struct iio_dev *indio_dev;
  1561. bool use_internal_ldo_supply;
  1562. bool use_internal_ref_buffer;
  1563. int ret;
  1564. indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
  1565. if (!indio_dev)
  1566. return -ENOMEM;
  1567. st = iio_priv(indio_dev);
  1568. st->spi = spi;
  1569. st->chip_info = spi_get_device_match_data(spi);
  1570. if (!st->chip_info)
  1571. return -EINVAL;
  1572. st->sample_freq_range[0] = 1; /* min */
  1573. st->sample_freq_range[1] = 1; /* step */
  1574. st->sample_freq_range[2] = st->chip_info->max_sample_rate; /* max */
  1575. st->regmap = devm_regmap_init(dev, &ad4695_regmap_bus, st,
  1576. &ad4695_regmap_config);
  1577. if (IS_ERR(st->regmap))
  1578. return dev_err_probe(dev, PTR_ERR(st->regmap),
  1579. "Failed to initialize regmap\n");
  1580. st->regmap16 = devm_regmap_init(dev, &ad4695_regmap_bus, st,
  1581. &ad4695_regmap16_config);
  1582. if (IS_ERR(st->regmap16))
  1583. return dev_err_probe(dev, PTR_ERR(st->regmap16),
  1584. "Failed to initialize regmap16\n");
  1585. st->cnv_gpio = devm_gpiod_get_optional(dev, "cnv", GPIOD_OUT_LOW);
  1586. if (IS_ERR(st->cnv_gpio))
  1587. return dev_err_probe(dev, PTR_ERR(st->cnv_gpio),
  1588. "Failed to get CNV GPIO\n");
  1589. ret = devm_regulator_bulk_get_enable(dev,
  1590. ARRAY_SIZE(ad4695_power_supplies),
  1591. ad4695_power_supplies);
  1592. if (ret)
  1593. return dev_err_probe(dev, ret,
  1594. "Failed to enable power supplies\n");
  1595. /* If LDO_IN supply is present, then we are using internal LDO. */
  1596. ret = devm_regulator_get_enable_optional(dev, "ldo-in");
  1597. if (ret < 0 && ret != -ENODEV)
  1598. return dev_err_probe(dev, ret,
  1599. "Failed to enable LDO_IN supply\n");
  1600. use_internal_ldo_supply = ret == 0;
  1601. if (!use_internal_ldo_supply) {
  1602. /* Otherwise we need an external VDD supply. */
  1603. ret = devm_regulator_get_enable(dev, "vdd");
  1604. if (ret < 0)
  1605. return dev_err_probe(dev, ret,
  1606. "Failed to enable VDD supply\n");
  1607. }
  1608. /* If REFIN supply is given, then we are using internal buffer */
  1609. ret = devm_regulator_get_enable_read_voltage(dev, "refin");
  1610. if (ret < 0 && ret != -ENODEV)
  1611. return dev_err_probe(dev, ret, "Failed to get REFIN voltage\n");
  1612. if (ret != -ENODEV) {
  1613. st->vref_mv = ret / 1000;
  1614. use_internal_ref_buffer = true;
  1615. } else {
  1616. /* Otherwise, we need an external reference. */
  1617. ret = devm_regulator_get_enable_read_voltage(dev, "ref");
  1618. if (ret < 0)
  1619. return dev_err_probe(dev, ret,
  1620. "Failed to get REF voltage\n");
  1621. st->vref_mv = ret / 1000;
  1622. use_internal_ref_buffer = false;
  1623. }
  1624. ret = devm_regulator_get_enable_read_voltage(dev, "com");
  1625. if (ret < 0 && ret != -ENODEV)
  1626. return dev_err_probe(dev, ret, "Failed to get COM voltage\n");
  1627. st->com_mv = ret == -ENODEV ? 0 : ret / 1000;
  1628. /*
  1629. * Reset the device using hardware reset if available or fall back to
  1630. * software reset.
  1631. */
  1632. st->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
  1633. if (IS_ERR(st->reset_gpio))
  1634. return PTR_ERR(st->reset_gpio);
  1635. if (st->reset_gpio) {
  1636. gpiod_set_value(st->reset_gpio, 0);
  1637. msleep(AD4695_T_WAKEUP_HW_MS);
  1638. } else {
  1639. ret = regmap_write(st->regmap, AD4695_REG_SPI_CONFIG_A,
  1640. AD4695_REG_SPI_CONFIG_A_SW_RST);
  1641. if (ret)
  1642. return ret;
  1643. msleep(AD4695_T_WAKEUP_SW_MS);
  1644. }
  1645. /* Needed for regmap16 to be able to work correctly. */
  1646. ret = regmap_set_bits(st->regmap, AD4695_REG_SPI_CONFIG_A,
  1647. AD4695_REG_SPI_CONFIG_A_ADDR_DIR);
  1648. if (ret)
  1649. return ret;
  1650. /* Disable internal LDO if it isn't needed. */
  1651. ret = regmap_update_bits(st->regmap, AD4695_REG_SETUP,
  1652. AD4695_REG_SETUP_LDO_EN,
  1653. FIELD_PREP(AD4695_REG_SETUP_LDO_EN,
  1654. use_internal_ldo_supply ? 1 : 0));
  1655. if (ret)
  1656. return ret;
  1657. /* configure reference supply */
  1658. if (device_property_present(dev, "adi,no-ref-current-limit")) {
  1659. ret = regmap_set_bits(st->regmap, AD4695_REG_REF_CTRL,
  1660. AD4695_REG_REF_CTRL_OV_MODE);
  1661. if (ret)
  1662. return ret;
  1663. }
  1664. if (device_property_present(dev, "adi,no-ref-high-z")) {
  1665. if (use_internal_ref_buffer)
  1666. return dev_err_probe(dev, -EINVAL,
  1667. "Cannot disable high-Z mode for internal reference buffer\n");
  1668. ret = regmap_clear_bits(st->regmap, AD4695_REG_REF_CTRL,
  1669. AD4695_REG_REF_CTRL_REFHIZ_EN);
  1670. if (ret)
  1671. return ret;
  1672. }
  1673. ret = ad4695_set_ref_voltage(st, st->vref_mv);
  1674. if (ret)
  1675. return ret;
  1676. if (use_internal_ref_buffer) {
  1677. ret = regmap_set_bits(st->regmap, AD4695_REG_REF_CTRL,
  1678. AD4695_REG_REF_CTRL_REFBUF_EN);
  1679. if (ret)
  1680. return ret;
  1681. /* Give the capacitor some time to charge up. */
  1682. msleep(AD4695_T_REFBUF_MS);
  1683. }
  1684. ret = ad4695_parse_channel_cfg(st);
  1685. if (ret)
  1686. return ret;
  1687. indio_dev->name = st->chip_info->name;
  1688. indio_dev->info = &ad4695_info;
  1689. indio_dev->modes = INDIO_DIRECT_MODE;
  1690. indio_dev->channels = st->iio_chan;
  1691. indio_dev->num_channels = st->chip_info->num_voltage_inputs + 2;
  1692. st->offload = devm_spi_offload_get(dev, spi, &ad4695_spi_offload_config);
  1693. ret = PTR_ERR_OR_ZERO(st->offload);
  1694. if (ret && ret != -ENODEV)
  1695. return dev_err_probe(dev, ret, "failed to get SPI offload\n");
  1696. /* If no SPI offload, fall back to low speed usage. */
  1697. if (ret == -ENODEV) {
  1698. /* Driver currently requires CNV pin to be connected to SPI CS */
  1699. if (st->cnv_gpio)
  1700. return dev_err_probe(dev, -EINVAL,
  1701. "CNV GPIO is not supported\n");
  1702. indio_dev->num_channels = st->chip_info->num_voltage_inputs + 2;
  1703. ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
  1704. iio_pollfunc_store_time,
  1705. ad4695_trigger_handler,
  1706. &ad4695_buffer_setup_ops);
  1707. if (ret)
  1708. return ret;
  1709. } else {
  1710. ret = ad4695_probe_spi_offload(indio_dev, st);
  1711. if (ret)
  1712. return ret;
  1713. }
  1714. return devm_iio_device_register(dev, indio_dev);
  1715. }
  1716. static const struct spi_device_id ad4695_spi_id_table[] = {
  1717. { .name = "ad4695", .driver_data = (kernel_ulong_t)&ad4695_chip_info },
  1718. { .name = "ad4696", .driver_data = (kernel_ulong_t)&ad4696_chip_info },
  1719. { .name = "ad4697", .driver_data = (kernel_ulong_t)&ad4697_chip_info },
  1720. { .name = "ad4698", .driver_data = (kernel_ulong_t)&ad4698_chip_info },
  1721. { }
  1722. };
  1723. MODULE_DEVICE_TABLE(spi, ad4695_spi_id_table);
  1724. static const struct of_device_id ad4695_of_match_table[] = {
  1725. { .compatible = "adi,ad4695", .data = &ad4695_chip_info, },
  1726. { .compatible = "adi,ad4696", .data = &ad4696_chip_info, },
  1727. { .compatible = "adi,ad4697", .data = &ad4697_chip_info, },
  1728. { .compatible = "adi,ad4698", .data = &ad4698_chip_info, },
  1729. { }
  1730. };
  1731. MODULE_DEVICE_TABLE(of, ad4695_of_match_table);
  1732. static struct spi_driver ad4695_driver = {
  1733. .driver = {
  1734. .name = "ad4695",
  1735. .of_match_table = ad4695_of_match_table,
  1736. },
  1737. .probe = ad4695_probe,
  1738. .id_table = ad4695_spi_id_table,
  1739. };
  1740. module_spi_driver(ad4695_driver);
  1741. MODULE_AUTHOR("Ramona Gradinariu <ramona.gradinariu@analog.com>");
  1742. MODULE_AUTHOR("David Lechner <dlechner@baylibre.com>");
  1743. MODULE_DESCRIPTION("Analog Devices AD4695 ADC driver");
  1744. MODULE_LICENSE("GPL");
  1745. MODULE_IMPORT_NS("IIO_DMAENGINE_BUFFER");