ad3530r.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * AD3530R/AD3530 8-channel, 16-bit Voltage Output DAC Driver
  4. * AD3531R/AD3531 4-channel, 16-bit Voltage Output DAC Driver
  5. *
  6. * Copyright 2025 Analog Devices Inc.
  7. */
  8. #include <linux/array_size.h>
  9. #include <linux/bitfield.h>
  10. #include <linux/bits.h>
  11. #include <linux/cleanup.h>
  12. #include <linux/delay.h>
  13. #include <linux/dev_printk.h>
  14. #include <linux/err.h>
  15. #include <linux/gpio/consumer.h>
  16. #include <linux/iio/iio.h>
  17. #include <linux/kstrtox.h>
  18. #include <linux/mod_devicetable.h>
  19. #include <linux/module.h>
  20. #include <linux/mutex.h>
  21. #include <linux/property.h>
  22. #include <linux/regmap.h>
  23. #include <linux/regulator/consumer.h>
  24. #include <linux/spi/spi.h>
  25. #include <linux/sysfs.h>
  26. #include <linux/types.h>
  27. #include <linux/units.h>
  28. #define AD3530R_INTERFACE_CONFIG_A 0x00
  29. #define AD3530R_OUTPUT_OPERATING_MODE_0 0x20
  30. #define AD3530R_OUTPUT_OPERATING_MODE_1 0x21
  31. #define AD3530R_OUTPUT_CONTROL_0 0x2A
  32. #define AD3530R_REFERENCE_CONTROL_0 0x3C
  33. #define AD3530R_SW_LDAC_TRIG_A 0xE5
  34. #define AD3530R_INPUT_CH 0xEB
  35. #define AD3530R_MAX_REG_ADDR 0xF9
  36. #define AD3531R_SW_LDAC_TRIG_A 0xDD
  37. #define AD3531R_INPUT_CH 0xE3
  38. #define AD3530R_SLD_TRIG_A BIT(7)
  39. #define AD3530R_OUTPUT_CONTROL_RANGE BIT(2)
  40. #define AD3530R_REFERENCE_CONTROL_SEL BIT(0)
  41. #define AD3530R_REG_VAL_MASK GENMASK(15, 0)
  42. #define AD3530R_OP_MODE_CHAN_MSK(chan) (GENMASK(1, 0) << 2 * (chan))
  43. #define AD3530R_SW_RESET (BIT(7) | BIT(0))
  44. #define AD3530R_INTERNAL_VREF_mV 2500
  45. #define AD3530R_LDAC_PULSE_US 100
  46. #define AD3530R_DAC_MAX_VAL GENMASK(15, 0)
  47. #define AD3530R_MAX_CHANNELS 8
  48. #define AD3531R_MAX_CHANNELS 4
  49. enum ad3530r_mode {
  50. AD3530R_NORMAL_OP,
  51. AD3530R_POWERDOWN_1K,
  52. AD3530R_POWERDOWN_7K7,
  53. AD3530R_POWERDOWN_32K,
  54. };
  55. struct ad3530r_chan {
  56. enum ad3530r_mode powerdown_mode;
  57. bool powerdown;
  58. };
  59. struct ad3530r_chip_info {
  60. const char *name;
  61. const struct iio_chan_spec *channels;
  62. int (*input_ch_reg)(unsigned int channel);
  63. unsigned int num_channels;
  64. unsigned int sw_ldac_trig_reg;
  65. bool internal_ref_support;
  66. };
  67. struct ad3530r_state {
  68. struct regmap *regmap;
  69. /* lock to protect against multiple access to the device and shared data */
  70. struct mutex lock;
  71. struct ad3530r_chan chan[AD3530R_MAX_CHANNELS];
  72. const struct ad3530r_chip_info *chip_info;
  73. struct gpio_desc *ldac_gpio;
  74. int vref_mV;
  75. /*
  76. * DMA (thus cache coherency maintenance) may require the transfer
  77. * buffers to live in their own cache lines.
  78. */
  79. __be16 buf __aligned(IIO_DMA_MINALIGN);
  80. };
  81. static int ad3530r_input_ch_reg(unsigned int channel)
  82. {
  83. return 2 * channel + AD3530R_INPUT_CH;
  84. }
  85. static int ad3531r_input_ch_reg(unsigned int channel)
  86. {
  87. return 2 * channel + AD3531R_INPUT_CH;
  88. }
  89. static const char * const ad3530r_powerdown_modes[] = {
  90. "1kohm_to_gnd",
  91. "7.7kohm_to_gnd",
  92. "32kohm_to_gnd",
  93. };
  94. static int ad3530r_get_powerdown_mode(struct iio_dev *indio_dev,
  95. const struct iio_chan_spec *chan)
  96. {
  97. struct ad3530r_state *st = iio_priv(indio_dev);
  98. guard(mutex)(&st->lock);
  99. return st->chan[chan->channel].powerdown_mode - 1;
  100. }
  101. static int ad3530r_set_powerdown_mode(struct iio_dev *indio_dev,
  102. const struct iio_chan_spec *chan,
  103. unsigned int mode)
  104. {
  105. struct ad3530r_state *st = iio_priv(indio_dev);
  106. guard(mutex)(&st->lock);
  107. st->chan[chan->channel].powerdown_mode = mode + 1;
  108. return 0;
  109. }
  110. static const struct iio_enum ad3530r_powerdown_mode_enum = {
  111. .items = ad3530r_powerdown_modes,
  112. .num_items = ARRAY_SIZE(ad3530r_powerdown_modes),
  113. .get = ad3530r_get_powerdown_mode,
  114. .set = ad3530r_set_powerdown_mode,
  115. };
  116. static ssize_t ad3530r_get_dac_powerdown(struct iio_dev *indio_dev,
  117. uintptr_t private,
  118. const struct iio_chan_spec *chan,
  119. char *buf)
  120. {
  121. struct ad3530r_state *st = iio_priv(indio_dev);
  122. guard(mutex)(&st->lock);
  123. return sysfs_emit(buf, "%d\n", st->chan[chan->channel].powerdown);
  124. }
  125. static ssize_t ad3530r_set_dac_powerdown(struct iio_dev *indio_dev,
  126. uintptr_t private,
  127. const struct iio_chan_spec *chan,
  128. const char *buf, size_t len)
  129. {
  130. struct ad3530r_state *st = iio_priv(indio_dev);
  131. int ret;
  132. unsigned int reg, pdmode, mask, val;
  133. bool powerdown;
  134. ret = kstrtobool(buf, &powerdown);
  135. if (ret)
  136. return ret;
  137. guard(mutex)(&st->lock);
  138. reg = chan->channel < AD3531R_MAX_CHANNELS ?
  139. AD3530R_OUTPUT_OPERATING_MODE_0 :
  140. AD3530R_OUTPUT_OPERATING_MODE_1;
  141. pdmode = powerdown ? st->chan[chan->channel].powerdown_mode : 0;
  142. mask = chan->channel < AD3531R_MAX_CHANNELS ?
  143. AD3530R_OP_MODE_CHAN_MSK(chan->channel) :
  144. AD3530R_OP_MODE_CHAN_MSK(chan->channel - 4);
  145. val = field_prep(mask, pdmode);
  146. ret = regmap_update_bits(st->regmap, reg, mask, val);
  147. if (ret)
  148. return ret;
  149. st->chan[chan->channel].powerdown = powerdown;
  150. return len;
  151. }
  152. static int ad3530r_trigger_hw_ldac(struct gpio_desc *ldac_gpio)
  153. {
  154. gpiod_set_value_cansleep(ldac_gpio, 1);
  155. fsleep(AD3530R_LDAC_PULSE_US);
  156. gpiod_set_value_cansleep(ldac_gpio, 0);
  157. return 0;
  158. }
  159. static int ad3530r_dac_write(struct ad3530r_state *st, unsigned int chan,
  160. unsigned int val)
  161. {
  162. int ret;
  163. guard(mutex)(&st->lock);
  164. st->buf = cpu_to_be16(val);
  165. ret = regmap_bulk_write(st->regmap, st->chip_info->input_ch_reg(chan),
  166. &st->buf, sizeof(st->buf));
  167. if (ret)
  168. return ret;
  169. if (st->ldac_gpio)
  170. return ad3530r_trigger_hw_ldac(st->ldac_gpio);
  171. return regmap_set_bits(st->regmap, st->chip_info->sw_ldac_trig_reg,
  172. AD3530R_SLD_TRIG_A);
  173. }
  174. static int ad3530r_read_raw(struct iio_dev *indio_dev,
  175. struct iio_chan_spec const *chan,
  176. int *val, int *val2, long info)
  177. {
  178. struct ad3530r_state *st = iio_priv(indio_dev);
  179. int ret;
  180. guard(mutex)(&st->lock);
  181. switch (info) {
  182. case IIO_CHAN_INFO_RAW:
  183. ret = regmap_bulk_read(st->regmap,
  184. st->chip_info->input_ch_reg(chan->channel),
  185. &st->buf, sizeof(st->buf));
  186. if (ret)
  187. return ret;
  188. *val = FIELD_GET(AD3530R_REG_VAL_MASK, be16_to_cpu(st->buf));
  189. return IIO_VAL_INT;
  190. case IIO_CHAN_INFO_SCALE:
  191. *val = st->vref_mV;
  192. *val2 = 16;
  193. return IIO_VAL_FRACTIONAL_LOG2;
  194. default:
  195. return -EINVAL;
  196. }
  197. }
  198. static int ad3530r_write_raw(struct iio_dev *indio_dev,
  199. struct iio_chan_spec const *chan,
  200. int val, int val2, long info)
  201. {
  202. struct ad3530r_state *st = iio_priv(indio_dev);
  203. switch (info) {
  204. case IIO_CHAN_INFO_RAW:
  205. if (val < 0 || val > AD3530R_DAC_MAX_VAL)
  206. return -EINVAL;
  207. return ad3530r_dac_write(st, chan->channel, val);
  208. default:
  209. return -EINVAL;
  210. }
  211. }
  212. static int ad3530r_reg_access(struct iio_dev *indio_dev, unsigned int reg,
  213. unsigned int writeval, unsigned int *readval)
  214. {
  215. struct ad3530r_state *st = iio_priv(indio_dev);
  216. if (readval)
  217. return regmap_read(st->regmap, reg, readval);
  218. return regmap_write(st->regmap, reg, writeval);
  219. }
  220. static const struct iio_chan_spec_ext_info ad3530r_ext_info[] = {
  221. {
  222. .name = "powerdown",
  223. .shared = IIO_SEPARATE,
  224. .read = ad3530r_get_dac_powerdown,
  225. .write = ad3530r_set_dac_powerdown,
  226. },
  227. IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad3530r_powerdown_mode_enum),
  228. IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE,
  229. &ad3530r_powerdown_mode_enum),
  230. { }
  231. };
  232. #define AD3530R_CHAN(_chan) \
  233. { \
  234. .type = IIO_VOLTAGE, \
  235. .indexed = 1, \
  236. .channel = _chan, \
  237. .output = 1, \
  238. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  239. BIT(IIO_CHAN_INFO_SCALE), \
  240. .ext_info = ad3530r_ext_info, \
  241. }
  242. static const struct iio_chan_spec ad3530r_channels[] = {
  243. AD3530R_CHAN(0),
  244. AD3530R_CHAN(1),
  245. AD3530R_CHAN(2),
  246. AD3530R_CHAN(3),
  247. AD3530R_CHAN(4),
  248. AD3530R_CHAN(5),
  249. AD3530R_CHAN(6),
  250. AD3530R_CHAN(7),
  251. };
  252. static const struct iio_chan_spec ad3531r_channels[] = {
  253. AD3530R_CHAN(0),
  254. AD3530R_CHAN(1),
  255. AD3530R_CHAN(2),
  256. AD3530R_CHAN(3),
  257. };
  258. static const struct ad3530r_chip_info ad3530_chip = {
  259. .name = "ad3530",
  260. .channels = ad3530r_channels,
  261. .num_channels = ARRAY_SIZE(ad3530r_channels),
  262. .sw_ldac_trig_reg = AD3530R_SW_LDAC_TRIG_A,
  263. .input_ch_reg = ad3530r_input_ch_reg,
  264. .internal_ref_support = false,
  265. };
  266. static const struct ad3530r_chip_info ad3530r_chip = {
  267. .name = "ad3530r",
  268. .channels = ad3530r_channels,
  269. .num_channels = ARRAY_SIZE(ad3530r_channels),
  270. .sw_ldac_trig_reg = AD3530R_SW_LDAC_TRIG_A,
  271. .input_ch_reg = ad3530r_input_ch_reg,
  272. .internal_ref_support = true,
  273. };
  274. static const struct ad3530r_chip_info ad3531_chip = {
  275. .name = "ad3531",
  276. .channels = ad3531r_channels,
  277. .num_channels = ARRAY_SIZE(ad3531r_channels),
  278. .sw_ldac_trig_reg = AD3531R_SW_LDAC_TRIG_A,
  279. .input_ch_reg = ad3531r_input_ch_reg,
  280. .internal_ref_support = false,
  281. };
  282. static const struct ad3530r_chip_info ad3531r_chip = {
  283. .name = "ad3531r",
  284. .channels = ad3531r_channels,
  285. .num_channels = ARRAY_SIZE(ad3531r_channels),
  286. .sw_ldac_trig_reg = AD3531R_SW_LDAC_TRIG_A,
  287. .input_ch_reg = ad3531r_input_ch_reg,
  288. .internal_ref_support = true,
  289. };
  290. static int ad3530r_setup(struct ad3530r_state *st, int external_vref_uV)
  291. {
  292. struct device *dev = regmap_get_device(st->regmap);
  293. struct gpio_desc *reset_gpio;
  294. int i, ret;
  295. u8 range_multiplier, val;
  296. reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
  297. if (IS_ERR(reset_gpio))
  298. return dev_err_probe(dev, PTR_ERR(reset_gpio),
  299. "Failed to get reset GPIO\n");
  300. if (reset_gpio) {
  301. /* Perform hardware reset */
  302. fsleep(1 * USEC_PER_MSEC);
  303. gpiod_set_value_cansleep(reset_gpio, 0);
  304. } else {
  305. /* Perform software reset */
  306. ret = regmap_update_bits(st->regmap, AD3530R_INTERFACE_CONFIG_A,
  307. AD3530R_SW_RESET, AD3530R_SW_RESET);
  308. if (ret)
  309. return ret;
  310. }
  311. fsleep(10 * USEC_PER_MSEC);
  312. range_multiplier = 1;
  313. if (device_property_read_bool(dev, "adi,range-double")) {
  314. ret = regmap_set_bits(st->regmap, AD3530R_OUTPUT_CONTROL_0,
  315. AD3530R_OUTPUT_CONTROL_RANGE);
  316. if (ret)
  317. return ret;
  318. range_multiplier = 2;
  319. }
  320. if (external_vref_uV) {
  321. st->vref_mV = range_multiplier * external_vref_uV / MILLI;
  322. } else {
  323. ret = regmap_set_bits(st->regmap, AD3530R_REFERENCE_CONTROL_0,
  324. AD3530R_REFERENCE_CONTROL_SEL);
  325. if (ret)
  326. return ret;
  327. st->vref_mV = range_multiplier * AD3530R_INTERNAL_VREF_mV;
  328. }
  329. /* Set normal operating mode for all channels */
  330. val = FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(0), AD3530R_NORMAL_OP) |
  331. FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(1), AD3530R_NORMAL_OP) |
  332. FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(2), AD3530R_NORMAL_OP) |
  333. FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(3), AD3530R_NORMAL_OP);
  334. ret = regmap_write(st->regmap, AD3530R_OUTPUT_OPERATING_MODE_0, val);
  335. if (ret)
  336. return ret;
  337. if (st->chip_info->num_channels > 4) {
  338. ret = regmap_write(st->regmap, AD3530R_OUTPUT_OPERATING_MODE_1,
  339. val);
  340. if (ret)
  341. return ret;
  342. }
  343. for (i = 0; i < st->chip_info->num_channels; i++)
  344. st->chan[i].powerdown_mode = AD3530R_POWERDOWN_32K;
  345. st->ldac_gpio = devm_gpiod_get_optional(dev, "ldac", GPIOD_OUT_LOW);
  346. if (IS_ERR(st->ldac_gpio))
  347. return dev_err_probe(dev, PTR_ERR(st->ldac_gpio),
  348. "Failed to get ldac GPIO\n");
  349. return 0;
  350. }
  351. static const struct regmap_config ad3530r_regmap_config = {
  352. .reg_bits = 16,
  353. .val_bits = 8,
  354. .max_register = AD3530R_MAX_REG_ADDR,
  355. };
  356. static const struct iio_info ad3530r_info = {
  357. .read_raw = ad3530r_read_raw,
  358. .write_raw = ad3530r_write_raw,
  359. .debugfs_reg_access = ad3530r_reg_access,
  360. };
  361. static int ad3530r_probe(struct spi_device *spi)
  362. {
  363. static const char * const regulators[] = { "vdd", "iovdd" };
  364. struct device *dev = &spi->dev;
  365. struct iio_dev *indio_dev;
  366. struct ad3530r_state *st;
  367. int ret, external_vref_uV;
  368. indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
  369. if (!indio_dev)
  370. return -ENOMEM;
  371. st = iio_priv(indio_dev);
  372. st->regmap = devm_regmap_init_spi(spi, &ad3530r_regmap_config);
  373. if (IS_ERR(st->regmap))
  374. return dev_err_probe(dev, PTR_ERR(st->regmap),
  375. "Failed to init regmap");
  376. ret = devm_mutex_init(dev, &st->lock);
  377. if (ret)
  378. return ret;
  379. st->chip_info = spi_get_device_match_data(spi);
  380. if (!st->chip_info)
  381. return -ENODEV;
  382. ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(regulators),
  383. regulators);
  384. if (ret)
  385. return dev_err_probe(dev, ret, "Failed to enable regulators\n");
  386. external_vref_uV = devm_regulator_get_enable_read_voltage(dev, "ref");
  387. if (external_vref_uV < 0 && external_vref_uV != -ENODEV)
  388. return external_vref_uV;
  389. if (external_vref_uV == -ENODEV)
  390. external_vref_uV = 0;
  391. if (!st->chip_info->internal_ref_support && external_vref_uV == 0)
  392. return -ENODEV;
  393. ret = ad3530r_setup(st, external_vref_uV);
  394. if (ret)
  395. return ret;
  396. indio_dev->name = st->chip_info->name;
  397. indio_dev->info = &ad3530r_info;
  398. indio_dev->modes = INDIO_DIRECT_MODE;
  399. indio_dev->channels = st->chip_info->channels;
  400. indio_dev->num_channels = st->chip_info->num_channels;
  401. return devm_iio_device_register(&spi->dev, indio_dev);
  402. }
  403. static const struct spi_device_id ad3530r_id[] = {
  404. { "ad3530", (kernel_ulong_t)&ad3530_chip },
  405. { "ad3530r", (kernel_ulong_t)&ad3530r_chip },
  406. { "ad3531", (kernel_ulong_t)&ad3531_chip },
  407. { "ad3531r", (kernel_ulong_t)&ad3531r_chip },
  408. { }
  409. };
  410. MODULE_DEVICE_TABLE(spi, ad3530r_id);
  411. static const struct of_device_id ad3530r_of_match[] = {
  412. { .compatible = "adi,ad3530", .data = &ad3530_chip },
  413. { .compatible = "adi,ad3530r", .data = &ad3530r_chip },
  414. { .compatible = "adi,ad3531", .data = &ad3531_chip },
  415. { .compatible = "adi,ad3531r", .data = &ad3531r_chip },
  416. { }
  417. };
  418. MODULE_DEVICE_TABLE(of, ad3530r_of_match);
  419. static struct spi_driver ad3530r_driver = {
  420. .driver = {
  421. .name = "ad3530r",
  422. .of_match_table = ad3530r_of_match,
  423. },
  424. .probe = ad3530r_probe,
  425. .id_table = ad3530r_id,
  426. };
  427. module_spi_driver(ad3530r_driver);
  428. MODULE_AUTHOR("Kim Seer Paller <kimseer.paller@analog.com>");
  429. MODULE_DESCRIPTION("Analog Devices AD3530R and Similar DACs Driver");
  430. MODULE_LICENSE("GPL");