max11410.c 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * MAX11410 SPI ADC driver
  4. *
  5. * Copyright 2022 Analog Devices Inc.
  6. */
  7. #include <linux/bitfield.h>
  8. #include <linux/delay.h>
  9. #include <linux/device.h>
  10. #include <linux/err.h>
  11. #include <linux/interrupt.h>
  12. #include <linux/kernel.h>
  13. #include <linux/module.h>
  14. #include <linux/regmap.h>
  15. #include <linux/regulator/consumer.h>
  16. #include <linux/spi/spi.h>
  17. #include <linux/unaligned.h>
  18. #include <linux/iio/buffer.h>
  19. #include <linux/iio/sysfs.h>
  20. #include <linux/iio/trigger.h>
  21. #include <linux/iio/trigger_consumer.h>
  22. #include <linux/iio/triggered_buffer.h>
  23. #define MAX11410_REG_CONV_START 0x01
  24. #define MAX11410_CONV_TYPE_SINGLE 0x00
  25. #define MAX11410_CONV_TYPE_CONTINUOUS 0x01
  26. #define MAX11410_REG_CAL_START 0x03
  27. #define MAX11410_CAL_START_SELF 0x00
  28. #define MAX11410_CAL_START_PGA 0x01
  29. #define MAX11410_REG_GPIO_CTRL(ch) ((ch) ? 0x05 : 0x04)
  30. #define MAX11410_GPIO_INTRB 0xC1
  31. #define MAX11410_REG_FILTER 0x08
  32. #define MAX11410_FILTER_RATE_MASK GENMASK(3, 0)
  33. #define MAX11410_FILTER_RATE_MAX 0x0F
  34. #define MAX11410_FILTER_LINEF_MASK GENMASK(5, 4)
  35. #define MAX11410_FILTER_50HZ BIT(5)
  36. #define MAX11410_FILTER_60HZ BIT(4)
  37. #define MAX11410_REG_CTRL 0x09
  38. #define MAX11410_CTRL_REFSEL_MASK GENMASK(2, 0)
  39. #define MAX11410_CTRL_VREFN_BUF_BIT BIT(3)
  40. #define MAX11410_CTRL_VREFP_BUF_BIT BIT(4)
  41. #define MAX11410_CTRL_FORMAT_BIT BIT(5)
  42. #define MAX11410_CTRL_UNIPOLAR_BIT BIT(6)
  43. #define MAX11410_REG_MUX_CTRL0 0x0B
  44. #define MAX11410_REG_PGA 0x0E
  45. #define MAX11410_PGA_GAIN_MASK GENMASK(2, 0)
  46. #define MAX11410_PGA_SIG_PATH_MASK GENMASK(5, 4)
  47. #define MAX11410_PGA_SIG_PATH_BUFFERED 0x00
  48. #define MAX11410_PGA_SIG_PATH_BYPASS 0x01
  49. #define MAX11410_PGA_SIG_PATH_PGA 0x02
  50. #define MAX11410_REG_DATA0 0x30
  51. #define MAX11410_REG_STATUS 0x38
  52. #define MAX11410_STATUS_CONV_READY_BIT BIT(0)
  53. #define MAX11410_STATUS_CAL_READY_BIT BIT(2)
  54. #define MAX11410_REFSEL_AVDD_AGND 0x03
  55. #define MAX11410_REFSEL_MAX 0x06
  56. #define MAX11410_SIG_PATH_MAX 0x02
  57. #define MAX11410_CHANNEL_INDEX_MAX 0x0A
  58. #define MAX11410_AINP_AVDD 0x0A
  59. #define MAX11410_AINN_GND 0x0A
  60. #define MAX11410_CONVERSION_TIMEOUT_MS 2000
  61. #define MAX11410_CALIB_TIMEOUT_MS 2000
  62. #define MAX11410_SCALE_AVAIL_SIZE 8
  63. enum max11410_filter {
  64. MAX11410_FILTER_FIR5060,
  65. MAX11410_FILTER_FIR50,
  66. MAX11410_FILTER_FIR60,
  67. MAX11410_FILTER_SINC4,
  68. };
  69. static const u8 max11410_sampling_len[] = {
  70. [MAX11410_FILTER_FIR5060] = 5,
  71. [MAX11410_FILTER_FIR50] = 6,
  72. [MAX11410_FILTER_FIR60] = 6,
  73. [MAX11410_FILTER_SINC4] = 10,
  74. };
  75. static const int max11410_sampling_rates[4][10][2] = {
  76. [MAX11410_FILTER_FIR5060] = {
  77. { 1, 100000 },
  78. { 2, 100000 },
  79. { 4, 200000 },
  80. { 8, 400000 },
  81. { 16, 800000 }
  82. },
  83. [MAX11410_FILTER_FIR50] = {
  84. { 1, 300000 },
  85. { 2, 700000 },
  86. { 5, 300000 },
  87. { 10, 700000 },
  88. { 21, 300000 },
  89. { 40 }
  90. },
  91. [MAX11410_FILTER_FIR60] = {
  92. { 1, 300000 },
  93. { 2, 700000 },
  94. { 5, 300000 },
  95. { 10, 700000 },
  96. { 21, 300000 },
  97. { 40 }
  98. },
  99. [MAX11410_FILTER_SINC4] = {
  100. { 4 },
  101. { 10 },
  102. { 20 },
  103. { 40 },
  104. { 60 },
  105. { 120 },
  106. { 240 },
  107. { 480 },
  108. { 960 },
  109. { 1920 }
  110. }
  111. };
  112. struct max11410_channel_config {
  113. u32 settling_time_us;
  114. u32 *scale_avail;
  115. u8 refsel;
  116. u8 sig_path;
  117. u8 gain;
  118. bool bipolar;
  119. bool buffered_vrefp;
  120. bool buffered_vrefn;
  121. };
  122. struct max11410_state {
  123. struct spi_device *spi_dev;
  124. struct iio_trigger *trig;
  125. struct completion completion;
  126. struct mutex lock; /* Prevent changing channel config during sampling */
  127. struct regmap *regmap;
  128. struct regulator *avdd;
  129. struct regulator *vrefp[3];
  130. struct regulator *vrefn[3];
  131. struct max11410_channel_config *channels;
  132. int irq;
  133. struct {
  134. u32 data __aligned(IIO_DMA_MINALIGN);
  135. aligned_s64 ts;
  136. } scan;
  137. };
  138. static const struct iio_chan_spec chanspec_template = {
  139. .type = IIO_VOLTAGE,
  140. .indexed = 1,
  141. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  142. BIT(IIO_CHAN_INFO_SCALE) |
  143. BIT(IIO_CHAN_INFO_OFFSET),
  144. .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
  145. .info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_SAMP_FREQ),
  146. .scan_type = {
  147. .sign = 's',
  148. .realbits = 24,
  149. .storagebits = 32,
  150. .endianness = IIO_LE,
  151. },
  152. };
  153. static unsigned int max11410_reg_size(unsigned int reg)
  154. {
  155. /* Registers from 0x00 to 0x10 are 1 byte, the rest are 3 bytes long. */
  156. return reg <= 0x10 ? 1 : 3;
  157. }
  158. static int max11410_write_reg(struct max11410_state *st, unsigned int reg,
  159. unsigned int val)
  160. {
  161. /* This driver only needs to write 8-bit registers */
  162. if (max11410_reg_size(reg) != 1)
  163. return -EINVAL;
  164. return regmap_write(st->regmap, reg, val);
  165. }
  166. static int max11410_read_reg(struct max11410_state *st, unsigned int reg,
  167. int *val)
  168. {
  169. int ret;
  170. if (max11410_reg_size(reg) == 3) {
  171. ret = regmap_bulk_read(st->regmap, reg, &st->scan.data, 3);
  172. if (ret)
  173. return ret;
  174. *val = get_unaligned_be24(&st->scan.data);
  175. return 0;
  176. }
  177. return regmap_read(st->regmap, reg, val);
  178. }
  179. static struct regulator *max11410_get_vrefp(struct max11410_state *st,
  180. u8 refsel)
  181. {
  182. refsel = refsel % 4;
  183. if (refsel == 3)
  184. return st->avdd;
  185. return st->vrefp[refsel];
  186. }
  187. static struct regulator *max11410_get_vrefn(struct max11410_state *st,
  188. u8 refsel)
  189. {
  190. if (refsel > 2)
  191. return NULL;
  192. return st->vrefn[refsel];
  193. }
  194. static const struct regmap_config regmap_config = {
  195. .reg_bits = 8,
  196. .val_bits = 8,
  197. .max_register = 0x39,
  198. };
  199. static ssize_t max11410_notch_en_show(struct device *dev,
  200. struct device_attribute *devattr,
  201. char *buf)
  202. {
  203. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  204. struct max11410_state *state = iio_priv(indio_dev);
  205. struct iio_dev_attr *iio_attr = to_iio_dev_attr(devattr);
  206. unsigned int val;
  207. int ret;
  208. ret = max11410_read_reg(state, MAX11410_REG_FILTER, &val);
  209. if (ret)
  210. return ret;
  211. switch (iio_attr->address) {
  212. case 0:
  213. val = !FIELD_GET(MAX11410_FILTER_50HZ, val);
  214. break;
  215. case 1:
  216. val = !FIELD_GET(MAX11410_FILTER_60HZ, val);
  217. break;
  218. case 2:
  219. val = FIELD_GET(MAX11410_FILTER_LINEF_MASK, val) == 3;
  220. break;
  221. default:
  222. return -EINVAL;
  223. }
  224. return sysfs_emit(buf, "%d\n", val);
  225. }
  226. static ssize_t max11410_notch_en_store(struct device *dev,
  227. struct device_attribute *devattr,
  228. const char *buf, size_t count)
  229. {
  230. struct iio_dev_attr *iio_attr = to_iio_dev_attr(devattr);
  231. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  232. struct max11410_state *state = iio_priv(indio_dev);
  233. unsigned int filter_bits;
  234. bool enable;
  235. int ret;
  236. ret = kstrtobool(buf, &enable);
  237. if (ret)
  238. return ret;
  239. switch (iio_attr->address) {
  240. case 0:
  241. filter_bits = MAX11410_FILTER_50HZ;
  242. break;
  243. case 1:
  244. filter_bits = MAX11410_FILTER_60HZ;
  245. break;
  246. case 2:
  247. default:
  248. filter_bits = MAX11410_FILTER_50HZ | MAX11410_FILTER_60HZ;
  249. enable = !enable;
  250. break;
  251. }
  252. if (enable)
  253. ret = regmap_clear_bits(state->regmap, MAX11410_REG_FILTER,
  254. filter_bits);
  255. else
  256. ret = regmap_set_bits(state->regmap, MAX11410_REG_FILTER,
  257. filter_bits);
  258. if (ret)
  259. return ret;
  260. return count;
  261. }
  262. static ssize_t in_voltage_filter2_notch_center_show(struct device *dev,
  263. struct device_attribute *devattr,
  264. char *buf)
  265. {
  266. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  267. struct max11410_state *state = iio_priv(indio_dev);
  268. int ret, reg, rate, filter;
  269. ret = regmap_read(state->regmap, MAX11410_REG_FILTER, &reg);
  270. if (ret)
  271. return ret;
  272. rate = FIELD_GET(MAX11410_FILTER_RATE_MASK, reg);
  273. rate = clamp_val(rate, 0,
  274. max11410_sampling_len[MAX11410_FILTER_SINC4] - 1);
  275. filter = max11410_sampling_rates[MAX11410_FILTER_SINC4][rate][0];
  276. return sysfs_emit(buf, "%d\n", filter);
  277. }
  278. static IIO_CONST_ATTR(in_voltage_filter0_notch_center, "50");
  279. static IIO_CONST_ATTR(in_voltage_filter1_notch_center, "60");
  280. static IIO_DEVICE_ATTR_RO(in_voltage_filter2_notch_center, 2);
  281. static IIO_DEVICE_ATTR(in_voltage_filter0_notch_en, 0644,
  282. max11410_notch_en_show, max11410_notch_en_store, 0);
  283. static IIO_DEVICE_ATTR(in_voltage_filter1_notch_en, 0644,
  284. max11410_notch_en_show, max11410_notch_en_store, 1);
  285. static IIO_DEVICE_ATTR(in_voltage_filter2_notch_en, 0644,
  286. max11410_notch_en_show, max11410_notch_en_store, 2);
  287. static struct attribute *max11410_attributes[] = {
  288. &iio_const_attr_in_voltage_filter0_notch_center.dev_attr.attr,
  289. &iio_const_attr_in_voltage_filter1_notch_center.dev_attr.attr,
  290. &iio_dev_attr_in_voltage_filter2_notch_center.dev_attr.attr,
  291. &iio_dev_attr_in_voltage_filter0_notch_en.dev_attr.attr,
  292. &iio_dev_attr_in_voltage_filter1_notch_en.dev_attr.attr,
  293. &iio_dev_attr_in_voltage_filter2_notch_en.dev_attr.attr,
  294. NULL
  295. };
  296. static const struct attribute_group max11410_attribute_group = {
  297. .attrs = max11410_attributes,
  298. };
  299. static int max11410_set_input_mux(struct max11410_state *st, u8 ainp, u8 ainn)
  300. {
  301. if (ainp > MAX11410_CHANNEL_INDEX_MAX ||
  302. ainn > MAX11410_CHANNEL_INDEX_MAX)
  303. return -EINVAL;
  304. return max11410_write_reg(st, MAX11410_REG_MUX_CTRL0,
  305. (ainp << 4) | ainn);
  306. }
  307. static int max11410_configure_channel(struct max11410_state *st,
  308. struct iio_chan_spec const *chan)
  309. {
  310. struct max11410_channel_config cfg = st->channels[chan->address];
  311. unsigned int regval;
  312. int ret;
  313. if (chan->differential)
  314. ret = max11410_set_input_mux(st, chan->channel, chan->channel2);
  315. else
  316. ret = max11410_set_input_mux(st, chan->channel,
  317. MAX11410_AINN_GND);
  318. if (ret)
  319. return ret;
  320. regval = FIELD_PREP(MAX11410_CTRL_VREFP_BUF_BIT, cfg.buffered_vrefp) |
  321. FIELD_PREP(MAX11410_CTRL_VREFN_BUF_BIT, cfg.buffered_vrefn) |
  322. FIELD_PREP(MAX11410_CTRL_REFSEL_MASK, cfg.refsel) |
  323. FIELD_PREP(MAX11410_CTRL_UNIPOLAR_BIT, cfg.bipolar ? 0 : 1);
  324. ret = regmap_update_bits(st->regmap, MAX11410_REG_CTRL,
  325. MAX11410_CTRL_REFSEL_MASK |
  326. MAX11410_CTRL_VREFP_BUF_BIT |
  327. MAX11410_CTRL_VREFN_BUF_BIT |
  328. MAX11410_CTRL_UNIPOLAR_BIT, regval);
  329. if (ret)
  330. return ret;
  331. regval = FIELD_PREP(MAX11410_PGA_SIG_PATH_MASK, cfg.sig_path) |
  332. FIELD_PREP(MAX11410_PGA_GAIN_MASK, cfg.gain);
  333. ret = regmap_write(st->regmap, MAX11410_REG_PGA, regval);
  334. if (ret)
  335. return ret;
  336. if (cfg.settling_time_us)
  337. fsleep(cfg.settling_time_us);
  338. return 0;
  339. }
  340. static int max11410_sample(struct max11410_state *st, int *sample_raw,
  341. struct iio_chan_spec const *chan)
  342. {
  343. int val, ret;
  344. ret = max11410_configure_channel(st, chan);
  345. if (ret)
  346. return ret;
  347. if (st->irq > 0)
  348. reinit_completion(&st->completion);
  349. /* Start Conversion */
  350. ret = max11410_write_reg(st, MAX11410_REG_CONV_START,
  351. MAX11410_CONV_TYPE_SINGLE);
  352. if (ret)
  353. return ret;
  354. if (st->irq > 0) {
  355. /* Wait for an interrupt. */
  356. ret = wait_for_completion_timeout(&st->completion,
  357. msecs_to_jiffies(MAX11410_CONVERSION_TIMEOUT_MS));
  358. if (!ret)
  359. return -ETIMEDOUT;
  360. } else {
  361. int ret2;
  362. /* Wait for status register Conversion Ready flag */
  363. ret = read_poll_timeout(max11410_read_reg, ret2,
  364. ret2 || (val & MAX11410_STATUS_CONV_READY_BIT),
  365. 5000, MAX11410_CONVERSION_TIMEOUT_MS * 1000,
  366. true, st, MAX11410_REG_STATUS, &val);
  367. if (ret)
  368. return ret;
  369. if (ret2)
  370. return ret2;
  371. }
  372. /* Read ADC Data */
  373. return max11410_read_reg(st, MAX11410_REG_DATA0, sample_raw);
  374. }
  375. static int max11410_get_scale(struct max11410_state *state,
  376. struct max11410_channel_config cfg)
  377. {
  378. struct regulator *vrefp, *vrefn;
  379. int scale;
  380. vrefp = max11410_get_vrefp(state, cfg.refsel);
  381. scale = regulator_get_voltage(vrefp) / 1000;
  382. vrefn = max11410_get_vrefn(state, cfg.refsel);
  383. if (vrefn)
  384. scale -= regulator_get_voltage(vrefn) / 1000;
  385. if (cfg.bipolar)
  386. scale *= 2;
  387. return scale >> cfg.gain;
  388. }
  389. static int max11410_read_raw(struct iio_dev *indio_dev,
  390. struct iio_chan_spec const *chan,
  391. int *val, int *val2, long info)
  392. {
  393. struct max11410_state *state = iio_priv(indio_dev);
  394. struct max11410_channel_config cfg = state->channels[chan->address];
  395. int ret, reg_val, filter, rate;
  396. switch (info) {
  397. case IIO_CHAN_INFO_SCALE:
  398. *val = max11410_get_scale(state, cfg);
  399. *val2 = chan->scan_type.realbits;
  400. return IIO_VAL_FRACTIONAL_LOG2;
  401. case IIO_CHAN_INFO_OFFSET:
  402. if (cfg.bipolar)
  403. *val = -BIT(chan->scan_type.realbits - 1);
  404. else
  405. *val = 0;
  406. return IIO_VAL_INT;
  407. case IIO_CHAN_INFO_RAW:
  408. if (!iio_device_claim_direct(indio_dev))
  409. return -EBUSY;
  410. mutex_lock(&state->lock);
  411. ret = max11410_sample(state, &reg_val, chan);
  412. mutex_unlock(&state->lock);
  413. iio_device_release_direct(indio_dev);
  414. if (ret)
  415. return ret;
  416. *val = reg_val;
  417. return IIO_VAL_INT;
  418. case IIO_CHAN_INFO_SAMP_FREQ:
  419. ret = regmap_read(state->regmap, MAX11410_REG_FILTER, &reg_val);
  420. if (ret)
  421. return ret;
  422. filter = FIELD_GET(MAX11410_FILTER_LINEF_MASK, reg_val);
  423. rate = reg_val & MAX11410_FILTER_RATE_MASK;
  424. if (rate >= max11410_sampling_len[filter])
  425. rate = max11410_sampling_len[filter] - 1;
  426. *val = max11410_sampling_rates[filter][rate][0];
  427. *val2 = max11410_sampling_rates[filter][rate][1];
  428. return IIO_VAL_INT_PLUS_MICRO;
  429. }
  430. return -EINVAL;
  431. }
  432. static int __max11410_write_samp_freq(struct max11410_state *st,
  433. int val, int val2)
  434. {
  435. int ret, i, reg_val, filter;
  436. guard(mutex)(&st->lock);
  437. ret = regmap_read(st->regmap, MAX11410_REG_FILTER, &reg_val);
  438. if (ret)
  439. return ret;
  440. filter = FIELD_GET(MAX11410_FILTER_LINEF_MASK, reg_val);
  441. for (i = 0; i < max11410_sampling_len[filter]; ++i) {
  442. if (val == max11410_sampling_rates[filter][i][0] &&
  443. val2 == max11410_sampling_rates[filter][i][1])
  444. break;
  445. }
  446. if (i == max11410_sampling_len[filter])
  447. return -EINVAL;
  448. return regmap_write_bits(st->regmap, MAX11410_REG_FILTER,
  449. MAX11410_FILTER_RATE_MASK, i);
  450. }
  451. static int max11410_write_raw(struct iio_dev *indio_dev,
  452. struct iio_chan_spec const *chan,
  453. int val, int val2, long mask)
  454. {
  455. struct max11410_state *st = iio_priv(indio_dev);
  456. int ret, gain;
  457. u32 *scale_avail;
  458. switch (mask) {
  459. case IIO_CHAN_INFO_SCALE:
  460. scale_avail = st->channels[chan->address].scale_avail;
  461. if (!scale_avail)
  462. return -EOPNOTSUPP;
  463. /* Accept values in range 0.000001 <= scale < 1.000000 */
  464. if (val != 0 || val2 == 0)
  465. return -EINVAL;
  466. if (!iio_device_claim_direct(indio_dev))
  467. return -EBUSY;
  468. /* Convert from INT_PLUS_MICRO to FRACTIONAL_LOG2 */
  469. val2 = val2 * DIV_ROUND_CLOSEST(BIT(24), 1000000);
  470. val2 = DIV_ROUND_CLOSEST(scale_avail[0], val2);
  471. gain = order_base_2(val2);
  472. st->channels[chan->address].gain = clamp_val(gain, 0, 7);
  473. iio_device_release_direct(indio_dev);
  474. return 0;
  475. case IIO_CHAN_INFO_SAMP_FREQ:
  476. if (!iio_device_claim_direct(indio_dev))
  477. return -EBUSY;
  478. ret = __max11410_write_samp_freq(st, val, val2);
  479. iio_device_release_direct(indio_dev);
  480. return ret;
  481. default:
  482. return -EINVAL;
  483. }
  484. }
  485. static int max11410_read_avail(struct iio_dev *indio_dev,
  486. struct iio_chan_spec const *chan,
  487. const int **vals, int *type, int *length,
  488. long info)
  489. {
  490. struct max11410_state *st = iio_priv(indio_dev);
  491. struct max11410_channel_config cfg;
  492. int ret, reg_val, filter;
  493. switch (info) {
  494. case IIO_CHAN_INFO_SAMP_FREQ:
  495. ret = regmap_read(st->regmap, MAX11410_REG_FILTER, &reg_val);
  496. if (ret)
  497. return ret;
  498. filter = FIELD_GET(MAX11410_FILTER_LINEF_MASK, reg_val);
  499. *vals = (const int *)max11410_sampling_rates[filter];
  500. *length = max11410_sampling_len[filter] * 2;
  501. *type = IIO_VAL_INT_PLUS_MICRO;
  502. return IIO_AVAIL_LIST;
  503. case IIO_CHAN_INFO_SCALE:
  504. cfg = st->channels[chan->address];
  505. if (!cfg.scale_avail)
  506. return -EINVAL;
  507. *vals = cfg.scale_avail;
  508. *length = MAX11410_SCALE_AVAIL_SIZE * 2;
  509. *type = IIO_VAL_FRACTIONAL_LOG2;
  510. return IIO_AVAIL_LIST;
  511. }
  512. return -EINVAL;
  513. }
  514. static const struct iio_info max11410_info = {
  515. .read_raw = max11410_read_raw,
  516. .write_raw = max11410_write_raw,
  517. .read_avail = max11410_read_avail,
  518. .attrs = &max11410_attribute_group,
  519. };
  520. static irqreturn_t max11410_trigger_handler(int irq, void *p)
  521. {
  522. struct iio_poll_func *pf = p;
  523. struct iio_dev *indio_dev = pf->indio_dev;
  524. struct max11410_state *st = iio_priv(indio_dev);
  525. int ret;
  526. ret = max11410_read_reg(st, MAX11410_REG_DATA0, &st->scan.data);
  527. if (ret) {
  528. dev_err(&indio_dev->dev, "cannot read data\n");
  529. goto out;
  530. }
  531. iio_push_to_buffers_with_ts(indio_dev, &st->scan, sizeof(st->scan),
  532. iio_get_time_ns(indio_dev));
  533. out:
  534. iio_trigger_notify_done(indio_dev->trig);
  535. return IRQ_HANDLED;
  536. }
  537. static int max11410_buffer_postenable(struct iio_dev *indio_dev)
  538. {
  539. struct max11410_state *st = iio_priv(indio_dev);
  540. int scan_ch, ret;
  541. scan_ch = ffs(*indio_dev->active_scan_mask) - 1;
  542. ret = max11410_configure_channel(st, &indio_dev->channels[scan_ch]);
  543. if (ret)
  544. return ret;
  545. /* Start continuous conversion. */
  546. return max11410_write_reg(st, MAX11410_REG_CONV_START,
  547. MAX11410_CONV_TYPE_CONTINUOUS);
  548. }
  549. static int max11410_buffer_predisable(struct iio_dev *indio_dev)
  550. {
  551. struct max11410_state *st = iio_priv(indio_dev);
  552. /* Stop continuous conversion. */
  553. return max11410_write_reg(st, MAX11410_REG_CONV_START,
  554. MAX11410_CONV_TYPE_SINGLE);
  555. }
  556. static const struct iio_buffer_setup_ops max11410_buffer_ops = {
  557. .postenable = &max11410_buffer_postenable,
  558. .predisable = &max11410_buffer_predisable,
  559. .validate_scan_mask = &iio_validate_scan_mask_onehot,
  560. };
  561. static const struct iio_trigger_ops max11410_trigger_ops = {
  562. .validate_device = iio_trigger_validate_own_device,
  563. };
  564. static irqreturn_t max11410_interrupt(int irq, void *dev_id)
  565. {
  566. struct iio_dev *indio_dev = dev_id;
  567. struct max11410_state *st = iio_priv(indio_dev);
  568. if (iio_buffer_enabled(indio_dev))
  569. iio_trigger_poll_nested(st->trig);
  570. else
  571. complete(&st->completion);
  572. return IRQ_HANDLED;
  573. };
  574. static int max11410_parse_channels(struct max11410_state *st,
  575. struct iio_dev *indio_dev)
  576. {
  577. struct iio_chan_spec chanspec = chanspec_template;
  578. struct device *dev = &st->spi_dev->dev;
  579. struct max11410_channel_config *cfg;
  580. struct iio_chan_spec *channels;
  581. u32 reference, sig_path;
  582. const char *node_name;
  583. u32 inputs[2], scale;
  584. unsigned int num_ch;
  585. int chan_idx = 0;
  586. int ret, i;
  587. num_ch = device_get_child_node_count(dev);
  588. if (num_ch == 0)
  589. return dev_err_probe(&indio_dev->dev, -ENODEV,
  590. "FW has no channels defined\n");
  591. /* Reserve space for soft timestamp channel */
  592. num_ch++;
  593. channels = devm_kcalloc(dev, num_ch, sizeof(*channels), GFP_KERNEL);
  594. if (!channels)
  595. return -ENOMEM;
  596. st->channels = devm_kcalloc(dev, num_ch, sizeof(*st->channels),
  597. GFP_KERNEL);
  598. if (!st->channels)
  599. return -ENOMEM;
  600. device_for_each_child_node_scoped(dev, child) {
  601. node_name = fwnode_get_name(child);
  602. if (fwnode_property_present(child, "diff-channels")) {
  603. ret = fwnode_property_read_u32_array(child,
  604. "diff-channels",
  605. inputs,
  606. ARRAY_SIZE(inputs));
  607. chanspec.differential = 1;
  608. } else {
  609. ret = fwnode_property_read_u32(child, "reg", &inputs[0]);
  610. inputs[1] = 0;
  611. chanspec.differential = 0;
  612. }
  613. if (ret)
  614. return ret;
  615. if (inputs[0] > MAX11410_CHANNEL_INDEX_MAX ||
  616. inputs[1] > MAX11410_CHANNEL_INDEX_MAX)
  617. return dev_err_probe(&indio_dev->dev, -EINVAL,
  618. "Invalid channel index for %s, should be less than %d\n",
  619. node_name,
  620. MAX11410_CHANNEL_INDEX_MAX + 1);
  621. cfg = &st->channels[chan_idx];
  622. reference = MAX11410_REFSEL_AVDD_AGND;
  623. fwnode_property_read_u32(child, "adi,reference", &reference);
  624. if (reference > MAX11410_REFSEL_MAX)
  625. return dev_err_probe(&indio_dev->dev, -EINVAL,
  626. "Invalid adi,reference value for %s, should be less than %d.\n",
  627. node_name, MAX11410_REFSEL_MAX + 1);
  628. if (!max11410_get_vrefp(st, reference) ||
  629. (!max11410_get_vrefn(st, reference) && reference <= 2))
  630. return dev_err_probe(&indio_dev->dev, -EINVAL,
  631. "Invalid VREF configuration for %s, either specify corresponding VREF regulators or change adi,reference property.\n",
  632. node_name);
  633. sig_path = MAX11410_PGA_SIG_PATH_BUFFERED;
  634. fwnode_property_read_u32(child, "adi,input-mode", &sig_path);
  635. if (sig_path > MAX11410_SIG_PATH_MAX)
  636. return dev_err_probe(&indio_dev->dev, -EINVAL,
  637. "Invalid adi,input-mode value for %s, should be less than %d.\n",
  638. node_name, MAX11410_SIG_PATH_MAX + 1);
  639. fwnode_property_read_u32(child, "settling-time-us",
  640. &cfg->settling_time_us);
  641. cfg->bipolar = fwnode_property_read_bool(child, "bipolar");
  642. cfg->buffered_vrefp = fwnode_property_read_bool(child, "adi,buffered-vrefp");
  643. cfg->buffered_vrefn = fwnode_property_read_bool(child, "adi,buffered-vrefn");
  644. cfg->refsel = reference;
  645. cfg->sig_path = sig_path;
  646. cfg->gain = 0;
  647. /* Enable scale_available property if input mode is PGA */
  648. if (sig_path == MAX11410_PGA_SIG_PATH_PGA) {
  649. __set_bit(IIO_CHAN_INFO_SCALE,
  650. &chanspec.info_mask_separate_available);
  651. cfg->scale_avail = devm_kcalloc(dev, MAX11410_SCALE_AVAIL_SIZE * 2,
  652. sizeof(*cfg->scale_avail),
  653. GFP_KERNEL);
  654. if (!cfg->scale_avail)
  655. return -ENOMEM;
  656. scale = max11410_get_scale(st, *cfg);
  657. for (i = 0; i < MAX11410_SCALE_AVAIL_SIZE; i++) {
  658. cfg->scale_avail[2 * i] = scale >> i;
  659. cfg->scale_avail[2 * i + 1] = chanspec.scan_type.realbits;
  660. }
  661. } else {
  662. __clear_bit(IIO_CHAN_INFO_SCALE,
  663. &chanspec.info_mask_separate_available);
  664. }
  665. chanspec.address = chan_idx;
  666. chanspec.scan_index = chan_idx;
  667. chanspec.channel = inputs[0];
  668. chanspec.channel2 = inputs[1];
  669. channels[chan_idx] = chanspec;
  670. chan_idx++;
  671. }
  672. channels[chan_idx] = (struct iio_chan_spec)IIO_CHAN_SOFT_TIMESTAMP(chan_idx);
  673. indio_dev->num_channels = chan_idx + 1;
  674. indio_dev->channels = channels;
  675. return 0;
  676. }
  677. static void max11410_disable_reg(void *reg)
  678. {
  679. regulator_disable(reg);
  680. }
  681. static int max11410_init_vref(struct device *dev,
  682. struct regulator **vref,
  683. const char *id)
  684. {
  685. struct regulator *reg;
  686. int ret;
  687. reg = devm_regulator_get_optional(dev, id);
  688. if (PTR_ERR(reg) == -ENODEV) {
  689. *vref = NULL;
  690. return 0;
  691. } else if (IS_ERR(reg)) {
  692. return PTR_ERR(reg);
  693. }
  694. ret = regulator_enable(reg);
  695. if (ret)
  696. return dev_err_probe(dev, ret,
  697. "Failed to enable regulator %s\n", id);
  698. *vref = reg;
  699. return devm_add_action_or_reset(dev, max11410_disable_reg, reg);
  700. }
  701. static int max11410_calibrate(struct max11410_state *st, u32 cal_type)
  702. {
  703. int ret, ret2, val;
  704. ret = max11410_write_reg(st, MAX11410_REG_CAL_START, cal_type);
  705. if (ret)
  706. return ret;
  707. /* Wait for status register Calibration Ready flag */
  708. ret = read_poll_timeout(max11410_read_reg, ret2,
  709. ret2 || (val & MAX11410_STATUS_CAL_READY_BIT),
  710. 50000, MAX11410_CALIB_TIMEOUT_MS * 1000, true,
  711. st, MAX11410_REG_STATUS, &val);
  712. if (ret)
  713. return ret;
  714. return ret2;
  715. }
  716. static int max11410_self_calibrate(struct max11410_state *st)
  717. {
  718. int ret, i;
  719. ret = regmap_write_bits(st->regmap, MAX11410_REG_FILTER,
  720. MAX11410_FILTER_RATE_MASK,
  721. FIELD_PREP(MAX11410_FILTER_RATE_MASK,
  722. MAX11410_FILTER_RATE_MAX));
  723. if (ret)
  724. return ret;
  725. ret = max11410_calibrate(st, MAX11410_CAL_START_SELF);
  726. if (ret)
  727. return ret;
  728. ret = regmap_write_bits(st->regmap, MAX11410_REG_PGA,
  729. MAX11410_PGA_SIG_PATH_MASK,
  730. FIELD_PREP(MAX11410_PGA_SIG_PATH_MASK,
  731. MAX11410_PGA_SIG_PATH_PGA));
  732. if (ret)
  733. return ret;
  734. /* PGA calibrations */
  735. for (i = 1; i < 8; ++i) {
  736. ret = regmap_write_bits(st->regmap, MAX11410_REG_PGA,
  737. MAX11410_PGA_GAIN_MASK, i);
  738. if (ret)
  739. return ret;
  740. ret = max11410_calibrate(st, MAX11410_CAL_START_PGA);
  741. if (ret)
  742. return ret;
  743. }
  744. /* Cleanup */
  745. ret = regmap_write_bits(st->regmap, MAX11410_REG_PGA,
  746. MAX11410_PGA_GAIN_MASK, 0);
  747. if (ret)
  748. return ret;
  749. ret = regmap_write_bits(st->regmap, MAX11410_REG_FILTER,
  750. MAX11410_FILTER_RATE_MASK, 0);
  751. if (ret)
  752. return ret;
  753. return regmap_write_bits(st->regmap, MAX11410_REG_PGA,
  754. MAX11410_PGA_SIG_PATH_MASK,
  755. FIELD_PREP(MAX11410_PGA_SIG_PATH_MASK,
  756. MAX11410_PGA_SIG_PATH_BUFFERED));
  757. }
  758. static int max11410_probe(struct spi_device *spi)
  759. {
  760. const char *vrefp_regs[] = { "vref0p", "vref1p", "vref2p" };
  761. const char *vrefn_regs[] = { "vref0n", "vref1n", "vref2n" };
  762. struct device *dev = &spi->dev;
  763. struct max11410_state *st;
  764. struct iio_dev *indio_dev;
  765. int ret, irqs[2];
  766. int i;
  767. indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
  768. if (!indio_dev)
  769. return -ENOMEM;
  770. st = iio_priv(indio_dev);
  771. st->spi_dev = spi;
  772. init_completion(&st->completion);
  773. mutex_init(&st->lock);
  774. indio_dev->name = "max11410";
  775. indio_dev->modes = INDIO_DIRECT_MODE;
  776. indio_dev->info = &max11410_info;
  777. st->regmap = devm_regmap_init_spi(spi, &regmap_config);
  778. if (IS_ERR(st->regmap))
  779. return dev_err_probe(dev, PTR_ERR(st->regmap),
  780. "regmap initialization failed\n");
  781. ret = max11410_init_vref(dev, &st->avdd, "avdd");
  782. if (ret)
  783. return ret;
  784. for (i = 0; i < ARRAY_SIZE(vrefp_regs); i++) {
  785. ret = max11410_init_vref(dev, &st->vrefp[i], vrefp_regs[i]);
  786. if (ret)
  787. return ret;
  788. ret = max11410_init_vref(dev, &st->vrefn[i], vrefn_regs[i]);
  789. if (ret)
  790. return ret;
  791. }
  792. /*
  793. * Regulators must be configured before parsing channels for
  794. * validating "adi,reference" property of each channel.
  795. */
  796. ret = max11410_parse_channels(st, indio_dev);
  797. if (ret)
  798. return ret;
  799. irqs[0] = fwnode_irq_get_byname(dev_fwnode(dev), "gpio0");
  800. irqs[1] = fwnode_irq_get_byname(dev_fwnode(dev), "gpio1");
  801. if (irqs[0] > 0) {
  802. st->irq = irqs[0];
  803. ret = regmap_write(st->regmap, MAX11410_REG_GPIO_CTRL(0),
  804. MAX11410_GPIO_INTRB);
  805. } else if (irqs[1] > 0) {
  806. st->irq = irqs[1];
  807. ret = regmap_write(st->regmap, MAX11410_REG_GPIO_CTRL(1),
  808. MAX11410_GPIO_INTRB);
  809. } else if (spi->irq > 0) {
  810. return dev_err_probe(dev, -ENODEV,
  811. "no interrupt name specified");
  812. }
  813. if (ret)
  814. return ret;
  815. ret = regmap_set_bits(st->regmap, MAX11410_REG_CTRL,
  816. MAX11410_CTRL_FORMAT_BIT);
  817. if (ret)
  818. return ret;
  819. ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
  820. &max11410_trigger_handler,
  821. &max11410_buffer_ops);
  822. if (ret)
  823. return ret;
  824. if (st->irq > 0) {
  825. st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
  826. indio_dev->name,
  827. iio_device_id(indio_dev));
  828. if (!st->trig)
  829. return -ENOMEM;
  830. st->trig->ops = &max11410_trigger_ops;
  831. ret = devm_iio_trigger_register(dev, st->trig);
  832. if (ret)
  833. return ret;
  834. ret = devm_request_threaded_irq(dev, st->irq, NULL,
  835. &max11410_interrupt,
  836. IRQF_ONESHOT, "max11410",
  837. indio_dev);
  838. if (ret)
  839. return ret;
  840. }
  841. ret = max11410_self_calibrate(st);
  842. if (ret)
  843. return dev_err_probe(dev, ret,
  844. "cannot perform device self calibration\n");
  845. return devm_iio_device_register(dev, indio_dev);
  846. }
  847. static const struct of_device_id max11410_spi_of_id[] = {
  848. { .compatible = "adi,max11410" },
  849. { }
  850. };
  851. MODULE_DEVICE_TABLE(of, max11410_spi_of_id);
  852. static const struct spi_device_id max11410_id[] = {
  853. { "max11410" },
  854. { }
  855. };
  856. MODULE_DEVICE_TABLE(spi, max11410_id);
  857. static struct spi_driver max11410_driver = {
  858. .driver = {
  859. .name = "max11410",
  860. .of_match_table = max11410_spi_of_id,
  861. },
  862. .probe = max11410_probe,
  863. .id_table = max11410_id,
  864. };
  865. module_spi_driver(max11410_driver);
  866. MODULE_AUTHOR("David Jung <David.Jung@analog.com>");
  867. MODULE_AUTHOR("Ibrahim Tilki <Ibrahim.Tilki@analog.com>");
  868. MODULE_DESCRIPTION("Analog Devices MAX11410 ADC");
  869. MODULE_LICENSE("GPL");