ad3552r.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Analog Devices AD3552R
  4. * Digital to Analog converter driver
  5. *
  6. * Copyright 2021 Analog Devices Inc.
  7. */
  8. #include <linux/unaligned.h>
  9. #include <linux/bitfield.h>
  10. #include <linux/device.h>
  11. #include <linux/iio/triggered_buffer.h>
  12. #include <linux/iio/trigger_consumer.h>
  13. #include <linux/iopoll.h>
  14. #include <linux/kernel.h>
  15. #include <linux/spi/spi.h>
  16. #include "ad3552r.h"
  17. struct ad3552r_desc {
  18. const struct ad3552r_model_data *model_data;
  19. /* Used to look the spi bus for atomic operations where needed */
  20. struct mutex lock;
  21. struct gpio_desc *gpio_reset;
  22. struct gpio_desc *gpio_ldac;
  23. struct spi_device *spi;
  24. struct ad3552r_ch_data ch_data[AD3552R_MAX_CH];
  25. struct iio_chan_spec channels[AD3552R_MAX_CH + 1];
  26. unsigned long enabled_ch;
  27. unsigned int num_ch;
  28. };
  29. static u8 _ad3552r_reg_len(u8 addr)
  30. {
  31. switch (addr) {
  32. case AD3552R_REG_ADDR_HW_LDAC_16B:
  33. case AD3552R_REG_ADDR_CH_SELECT_16B:
  34. case AD3552R_REG_ADDR_SW_LDAC_16B:
  35. case AD3552R_REG_ADDR_HW_LDAC_24B:
  36. case AD3552R_REG_ADDR_CH_SELECT_24B:
  37. case AD3552R_REG_ADDR_SW_LDAC_24B:
  38. return 1;
  39. default:
  40. break;
  41. }
  42. if (addr > AD3552R_REG_ADDR_HW_LDAC_24B)
  43. return 3;
  44. if (addr > AD3552R_REG_ADDR_HW_LDAC_16B)
  45. return 2;
  46. return 1;
  47. }
  48. /* SPI transfer to device */
  49. static int ad3552r_transfer(struct ad3552r_desc *dac, u8 addr, u32 len,
  50. u8 *data, bool is_read)
  51. {
  52. /* Maximum transfer: Addr (1B) + 2 * (Data Reg (3B)) + SW LDAC(1B) */
  53. u8 buf[8];
  54. buf[0] = addr & AD3552R_ADDR_MASK;
  55. buf[0] |= is_read ? AD3552R_READ_BIT : 0;
  56. if (is_read)
  57. return spi_write_then_read(dac->spi, buf, 1, data, len);
  58. memcpy(buf + 1, data, len);
  59. return spi_write_then_read(dac->spi, buf, len + 1, NULL, 0);
  60. }
  61. static int ad3552r_write_reg(struct ad3552r_desc *dac, u8 addr, u16 val)
  62. {
  63. u8 reg_len;
  64. u8 buf[AD3552R_MAX_REG_SIZE] = { 0 };
  65. reg_len = _ad3552r_reg_len(addr);
  66. if (reg_len == 2)
  67. /* Only DAC register are 2 bytes wide */
  68. val &= AD3552R_MASK_DAC_12B;
  69. if (reg_len == 1)
  70. buf[0] = val & 0xFF;
  71. else
  72. /* reg_len can be 2 or 3, but 3rd bytes needs to be set to 0 */
  73. put_unaligned_be16(val, buf);
  74. return ad3552r_transfer(dac, addr, reg_len, buf, false);
  75. }
  76. static int ad3552r_read_reg(struct ad3552r_desc *dac, u8 addr, u16 *val)
  77. {
  78. int err;
  79. u8 reg_len, buf[AD3552R_MAX_REG_SIZE] = { 0 };
  80. reg_len = _ad3552r_reg_len(addr);
  81. err = ad3552r_transfer(dac, addr, reg_len, buf, true);
  82. if (err)
  83. return err;
  84. if (reg_len == 1)
  85. *val = buf[0];
  86. else
  87. /* reg_len can be 2 or 3, but only first 2 bytes are relevant */
  88. *val = get_unaligned_be16(buf);
  89. return 0;
  90. }
  91. /* Update field of a register, shift val if needed */
  92. static int ad3552r_update_reg_field(struct ad3552r_desc *dac, u8 addr, u16 mask,
  93. u16 val)
  94. {
  95. int ret;
  96. u16 reg;
  97. ret = ad3552r_read_reg(dac, addr, &reg);
  98. if (ret < 0)
  99. return ret;
  100. reg &= ~mask;
  101. reg |= val;
  102. return ad3552r_write_reg(dac, addr, reg);
  103. }
  104. #define AD3552R_CH_DAC(_idx) ((struct iio_chan_spec) { \
  105. .type = IIO_VOLTAGE, \
  106. .output = true, \
  107. .indexed = true, \
  108. .channel = _idx, \
  109. .scan_index = _idx, \
  110. .scan_type = { \
  111. .sign = 'u', \
  112. .realbits = 16, \
  113. .storagebits = 16, \
  114. .endianness = IIO_BE, \
  115. }, \
  116. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  117. BIT(IIO_CHAN_INFO_SCALE) | \
  118. BIT(IIO_CHAN_INFO_ENABLE) | \
  119. BIT(IIO_CHAN_INFO_OFFSET), \
  120. })
  121. static int ad3552r_read_raw(struct iio_dev *indio_dev,
  122. struct iio_chan_spec const *chan,
  123. int *val,
  124. int *val2,
  125. long mask)
  126. {
  127. struct ad3552r_desc *dac = iio_priv(indio_dev);
  128. u16 tmp_val;
  129. int err;
  130. u8 ch = chan->channel;
  131. switch (mask) {
  132. case IIO_CHAN_INFO_RAW:
  133. mutex_lock(&dac->lock);
  134. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_CH_DAC_24B(ch),
  135. &tmp_val);
  136. mutex_unlock(&dac->lock);
  137. if (err < 0)
  138. return err;
  139. *val = tmp_val;
  140. return IIO_VAL_INT;
  141. case IIO_CHAN_INFO_ENABLE:
  142. mutex_lock(&dac->lock);
  143. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_POWERDOWN_CONFIG,
  144. &tmp_val);
  145. mutex_unlock(&dac->lock);
  146. if (err < 0)
  147. return err;
  148. *val = !((tmp_val & AD3552R_MASK_CH_DAC_POWERDOWN(ch)) >>
  149. __ffs(AD3552R_MASK_CH_DAC_POWERDOWN(ch)));
  150. return IIO_VAL_INT;
  151. case IIO_CHAN_INFO_SCALE:
  152. *val = dac->ch_data[ch].scale_int;
  153. *val2 = dac->ch_data[ch].scale_dec;
  154. return IIO_VAL_INT_PLUS_MICRO;
  155. case IIO_CHAN_INFO_OFFSET:
  156. *val = dac->ch_data[ch].offset_int;
  157. *val2 = dac->ch_data[ch].offset_dec;
  158. return IIO_VAL_INT_PLUS_MICRO;
  159. default:
  160. return -EINVAL;
  161. }
  162. }
  163. static int ad3552r_write_raw(struct iio_dev *indio_dev,
  164. struct iio_chan_spec const *chan,
  165. int val,
  166. int val2,
  167. long mask)
  168. {
  169. struct ad3552r_desc *dac = iio_priv(indio_dev);
  170. int err;
  171. mutex_lock(&dac->lock);
  172. switch (mask) {
  173. case IIO_CHAN_INFO_RAW:
  174. err = ad3552r_write_reg(dac,
  175. AD3552R_REG_ADDR_CH_DAC_24B(chan->channel),
  176. val);
  177. break;
  178. case IIO_CHAN_INFO_ENABLE:
  179. if (chan->channel == 0)
  180. val = FIELD_PREP(AD3552R_MASK_CH_DAC_POWERDOWN(0), !val);
  181. else
  182. val = FIELD_PREP(AD3552R_MASK_CH_DAC_POWERDOWN(1), !val);
  183. err = ad3552r_update_reg_field(dac, AD3552R_REG_ADDR_POWERDOWN_CONFIG,
  184. AD3552R_MASK_CH_DAC_POWERDOWN(chan->channel),
  185. val);
  186. break;
  187. default:
  188. err = -EINVAL;
  189. break;
  190. }
  191. mutex_unlock(&dac->lock);
  192. return err;
  193. }
  194. static const struct iio_info ad3552r_iio_info = {
  195. .read_raw = ad3552r_read_raw,
  196. .write_raw = ad3552r_write_raw
  197. };
  198. static int32_t ad3552r_trigger_hw_ldac(struct gpio_desc *ldac)
  199. {
  200. gpiod_set_value_cansleep(ldac, 0);
  201. usleep_range(AD3552R_LDAC_PULSE_US, AD3552R_LDAC_PULSE_US + 10);
  202. gpiod_set_value_cansleep(ldac, 1);
  203. return 0;
  204. }
  205. static int ad3552r_write_all_channels(struct ad3552r_desc *dac, u8 *data)
  206. {
  207. int err, len;
  208. u8 addr, buff[AD3552R_MAX_CH * AD3552R_MAX_REG_SIZE + 1];
  209. addr = AD3552R_REG_ADDR_CH_INPUT_24B(1);
  210. /* CH1 */
  211. memcpy(buff, data + 2, 2);
  212. buff[2] = 0;
  213. /* CH0 */
  214. memcpy(buff + 3, data, 2);
  215. buff[5] = 0;
  216. len = 6;
  217. if (!dac->gpio_ldac) {
  218. /* Software LDAC */
  219. buff[6] = AD3552R_MASK_ALL_CH;
  220. ++len;
  221. }
  222. err = ad3552r_transfer(dac, addr, len, buff, false);
  223. if (err)
  224. return err;
  225. if (dac->gpio_ldac)
  226. return ad3552r_trigger_hw_ldac(dac->gpio_ldac);
  227. return 0;
  228. }
  229. static int ad3552r_write_codes(struct ad3552r_desc *dac, u32 mask, u8 *data)
  230. {
  231. int err;
  232. u8 addr, buff[AD3552R_MAX_REG_SIZE];
  233. if (mask == AD3552R_MASK_ALL_CH) {
  234. if (memcmp(data, data + 2, 2) != 0)
  235. return ad3552r_write_all_channels(dac, data);
  236. addr = AD3552R_REG_ADDR_INPUT_PAGE_MASK_24B;
  237. } else {
  238. addr = AD3552R_REG_ADDR_CH_INPUT_24B(__ffs(mask));
  239. }
  240. memcpy(buff, data, 2);
  241. buff[2] = 0;
  242. err = ad3552r_transfer(dac, addr, 3, data, false);
  243. if (err)
  244. return err;
  245. if (dac->gpio_ldac)
  246. return ad3552r_trigger_hw_ldac(dac->gpio_ldac);
  247. return ad3552r_write_reg(dac, AD3552R_REG_ADDR_SW_LDAC_24B, mask);
  248. }
  249. static irqreturn_t ad3552r_trigger_handler(int irq, void *p)
  250. {
  251. struct iio_poll_func *pf = p;
  252. struct iio_dev *indio_dev = pf->indio_dev;
  253. struct iio_buffer *buf = indio_dev->buffer;
  254. struct ad3552r_desc *dac = iio_priv(indio_dev);
  255. /* Maximum size of a scan */
  256. u8 buff[AD3552R_MAX_CH * AD3552R_MAX_REG_SIZE] = { };
  257. int err;
  258. err = iio_pop_from_buffer(buf, buff);
  259. if (err)
  260. goto end;
  261. mutex_lock(&dac->lock);
  262. ad3552r_write_codes(dac, *indio_dev->active_scan_mask, buff);
  263. mutex_unlock(&dac->lock);
  264. end:
  265. iio_trigger_notify_done(indio_dev->trig);
  266. return IRQ_HANDLED;
  267. }
  268. static int ad3552r_check_scratch_pad(struct ad3552r_desc *dac)
  269. {
  270. const u16 val1 = AD3552R_SCRATCH_PAD_TEST_VAL1;
  271. const u16 val2 = AD3552R_SCRATCH_PAD_TEST_VAL2;
  272. u16 val;
  273. int err;
  274. err = ad3552r_write_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, val1);
  275. if (err < 0)
  276. return err;
  277. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, &val);
  278. if (err < 0)
  279. return err;
  280. if (val1 != val)
  281. return -ENODEV;
  282. err = ad3552r_write_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, val2);
  283. if (err < 0)
  284. return err;
  285. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, &val);
  286. if (err < 0)
  287. return err;
  288. if (val2 != val)
  289. return -ENODEV;
  290. return 0;
  291. }
  292. struct reg_addr_pool {
  293. struct ad3552r_desc *dac;
  294. u8 addr;
  295. };
  296. static int ad3552r_read_reg_wrapper(struct reg_addr_pool *addr)
  297. {
  298. int err;
  299. u16 val;
  300. err = ad3552r_read_reg(addr->dac, addr->addr, &val);
  301. if (err)
  302. return err;
  303. return val;
  304. }
  305. static int ad3552r_reset(struct ad3552r_desc *dac)
  306. {
  307. struct reg_addr_pool addr;
  308. int ret;
  309. int val;
  310. dac->gpio_reset = devm_gpiod_get_optional(&dac->spi->dev, "reset",
  311. GPIOD_OUT_LOW);
  312. if (IS_ERR(dac->gpio_reset))
  313. return dev_err_probe(&dac->spi->dev, PTR_ERR(dac->gpio_reset),
  314. "Error while getting gpio reset");
  315. if (dac->gpio_reset) {
  316. /* Perform hardware reset */
  317. usleep_range(10, 20);
  318. gpiod_set_value_cansleep(dac->gpio_reset, 1);
  319. } else {
  320. /* Perform software reset if no GPIO provided */
  321. ret = ad3552r_update_reg_field(dac,
  322. AD3552R_REG_ADDR_INTERFACE_CONFIG_A,
  323. AD3552R_MASK_SOFTWARE_RESET,
  324. AD3552R_MASK_SOFTWARE_RESET);
  325. if (ret < 0)
  326. return ret;
  327. }
  328. addr.dac = dac;
  329. addr.addr = AD3552R_REG_ADDR_INTERFACE_CONFIG_B;
  330. ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
  331. val == AD3552R_DEFAULT_CONFIG_B_VALUE ||
  332. val < 0,
  333. 5000, 50000);
  334. if (val < 0)
  335. ret = val;
  336. if (ret) {
  337. dev_err(&dac->spi->dev, "Error while resetting");
  338. return ret;
  339. }
  340. ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
  341. !(val & AD3552R_MASK_INTERFACE_NOT_READY) ||
  342. val < 0,
  343. 5000, 50000);
  344. if (val < 0)
  345. ret = val;
  346. if (ret) {
  347. dev_err(&dac->spi->dev, "Error while resetting");
  348. return ret;
  349. }
  350. /* Clear reset error flag, see ad3552r manual, rev B table 38. */
  351. ret = ad3552r_write_reg(dac, AD3552R_REG_ADDR_ERR_STATUS,
  352. AD3552R_MASK_RESET_STATUS);
  353. if (ret)
  354. return ret;
  355. return ad3552r_update_reg_field(dac,
  356. AD3552R_REG_ADDR_INTERFACE_CONFIG_A,
  357. AD3552R_MASK_ADDR_ASCENSION,
  358. FIELD_PREP(AD3552R_MASK_ADDR_ASCENSION, val));
  359. }
  360. static int ad3552r_configure_custom_gain(struct ad3552r_desc *dac,
  361. struct fwnode_handle *child,
  362. u32 ch)
  363. {
  364. struct device *dev = &dac->spi->dev;
  365. int err;
  366. u8 addr;
  367. u16 reg;
  368. err = ad3552r_get_custom_gain(dev, child,
  369. &dac->ch_data[ch].p,
  370. &dac->ch_data[ch].n,
  371. &dac->ch_data[ch].rfb,
  372. &dac->ch_data[ch].gain_offset);
  373. if (err)
  374. return err;
  375. dac->ch_data[ch].range_override = 1;
  376. addr = AD3552R_REG_ADDR_CH_GAIN(ch);
  377. err = ad3552r_write_reg(dac, addr,
  378. abs((s32)dac->ch_data[ch].gain_offset) &
  379. AD3552R_MASK_CH_OFFSET_BITS_0_7);
  380. if (err)
  381. return dev_err_probe(dev, err, "Error writing register\n");
  382. reg = ad3552r_calc_custom_gain(dac->ch_data[ch].p, dac->ch_data[ch].n,
  383. dac->ch_data[ch].gain_offset);
  384. err = ad3552r_write_reg(dac, addr, reg);
  385. if (err)
  386. return dev_err_probe(dev, err, "Error writing register\n");
  387. return 0;
  388. }
  389. static int ad3552r_configure_device(struct ad3552r_desc *dac)
  390. {
  391. struct device *dev = &dac->spi->dev;
  392. int err, cnt = 0;
  393. u32 val, ch;
  394. dac->gpio_ldac = devm_gpiod_get_optional(dev, "ldac", GPIOD_OUT_HIGH);
  395. if (IS_ERR(dac->gpio_ldac))
  396. return dev_err_probe(dev, PTR_ERR(dac->gpio_ldac),
  397. "Error getting gpio ldac");
  398. err = ad3552r_get_ref_voltage(dev, &val);
  399. if (err < 0)
  400. return err;
  401. err = ad3552r_update_reg_field(dac,
  402. AD3552R_REG_ADDR_SH_REFERENCE_CONFIG,
  403. AD3552R_MASK_REFERENCE_VOLTAGE_SEL,
  404. FIELD_PREP(AD3552R_MASK_REFERENCE_VOLTAGE_SEL, val));
  405. if (err)
  406. return err;
  407. err = ad3552r_get_drive_strength(dev, &val);
  408. if (!err) {
  409. err = ad3552r_update_reg_field(dac,
  410. AD3552R_REG_ADDR_INTERFACE_CONFIG_D,
  411. AD3552R_MASK_SDO_DRIVE_STRENGTH,
  412. FIELD_PREP(AD3552R_MASK_SDO_DRIVE_STRENGTH, val));
  413. if (err)
  414. return err;
  415. }
  416. dac->num_ch = device_get_child_node_count(dev);
  417. if (!dac->num_ch) {
  418. dev_err(dev, "No channels defined\n");
  419. return -ENODEV;
  420. }
  421. device_for_each_child_node_scoped(dev, child) {
  422. err = fwnode_property_read_u32(child, "reg", &ch);
  423. if (err)
  424. return dev_err_probe(dev, err,
  425. "mandatory reg property missing\n");
  426. if (ch >= dac->model_data->num_hw_channels)
  427. return dev_err_probe(dev, -EINVAL,
  428. "reg must be less than %d\n",
  429. dac->model_data->num_hw_channels);
  430. err = ad3552r_get_output_range(dev, dac->model_data,
  431. child, &val);
  432. if (err && err != -ENOENT)
  433. return err;
  434. if (!err) {
  435. if (ch == 0)
  436. val = FIELD_PREP(AD3552R_MASK_CH_OUTPUT_RANGE_SEL(0), val);
  437. else
  438. val = FIELD_PREP(AD3552R_MASK_CH_OUTPUT_RANGE_SEL(1), val);
  439. err = ad3552r_update_reg_field(dac,
  440. AD3552R_REG_ADDR_CH0_CH1_OUTPUT_RANGE,
  441. AD3552R_MASK_CH_OUTPUT_RANGE_SEL(ch),
  442. val);
  443. if (err)
  444. return err;
  445. dac->ch_data[ch].range = val;
  446. } else if (dac->model_data->requires_output_range) {
  447. return dev_err_probe(dev, -EINVAL,
  448. "adi,output-range-microvolt is required for %s\n",
  449. dac->model_data->model_name);
  450. } else {
  451. err = ad3552r_configure_custom_gain(dac, child, ch);
  452. if (err)
  453. return err;
  454. }
  455. ad3552r_calc_gain_and_offset(&dac->ch_data[ch], dac->model_data);
  456. dac->enabled_ch |= BIT(ch);
  457. if (ch == 0)
  458. val = FIELD_PREP(AD3552R_MASK_CH(0), 1);
  459. else
  460. val = FIELD_PREP(AD3552R_MASK_CH(1), 1);
  461. err = ad3552r_update_reg_field(dac,
  462. AD3552R_REG_ADDR_CH_SELECT_16B,
  463. AD3552R_MASK_CH(ch), val);
  464. if (err < 0)
  465. return err;
  466. dac->channels[cnt] = AD3552R_CH_DAC(ch);
  467. ++cnt;
  468. }
  469. /* Disable unused channels */
  470. for_each_clear_bit(ch, &dac->enabled_ch,
  471. dac->model_data->num_hw_channels) {
  472. if (ch == 0)
  473. val = FIELD_PREP(AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(0), 1);
  474. else
  475. val = FIELD_PREP(AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(1), 1);
  476. err = ad3552r_update_reg_field(dac,
  477. AD3552R_REG_ADDR_POWERDOWN_CONFIG,
  478. AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(ch),
  479. val);
  480. if (err)
  481. return err;
  482. }
  483. dac->num_ch = cnt;
  484. return 0;
  485. }
  486. static int ad3552r_init(struct ad3552r_desc *dac)
  487. {
  488. int err;
  489. u16 val, id;
  490. err = ad3552r_reset(dac);
  491. if (err) {
  492. dev_err(&dac->spi->dev, "Reset failed\n");
  493. return err;
  494. }
  495. err = ad3552r_check_scratch_pad(dac);
  496. if (err) {
  497. dev_err(&dac->spi->dev, "Scratch pad test failed\n");
  498. return err;
  499. }
  500. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_PRODUCT_ID_L, &val);
  501. if (err) {
  502. dev_err(&dac->spi->dev, "Fail read PRODUCT_ID_L\n");
  503. return err;
  504. }
  505. id = val;
  506. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_PRODUCT_ID_H, &val);
  507. if (err) {
  508. dev_err(&dac->spi->dev, "Fail read PRODUCT_ID_H\n");
  509. return err;
  510. }
  511. id |= val << 8;
  512. if (id != dac->model_data->chip_id) {
  513. dev_err(&dac->spi->dev, "Product id not matching\n");
  514. return -ENODEV;
  515. }
  516. return ad3552r_configure_device(dac);
  517. }
  518. static int ad3552r_probe(struct spi_device *spi)
  519. {
  520. struct ad3552r_desc *dac;
  521. struct iio_dev *indio_dev;
  522. int err;
  523. indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*dac));
  524. if (!indio_dev)
  525. return -ENOMEM;
  526. dac = iio_priv(indio_dev);
  527. dac->spi = spi;
  528. dac->model_data = spi_get_device_match_data(spi);
  529. if (!dac->model_data)
  530. return -EINVAL;
  531. mutex_init(&dac->lock);
  532. err = ad3552r_init(dac);
  533. if (err)
  534. return err;
  535. /* Config triggered buffer device */
  536. indio_dev->name = dac->model_data->model_name;
  537. indio_dev->dev.parent = &spi->dev;
  538. indio_dev->info = &ad3552r_iio_info;
  539. indio_dev->num_channels = dac->num_ch;
  540. indio_dev->channels = dac->channels;
  541. indio_dev->modes = INDIO_DIRECT_MODE;
  542. err = devm_iio_triggered_buffer_setup_ext(&indio_dev->dev, indio_dev, NULL,
  543. &ad3552r_trigger_handler,
  544. IIO_BUFFER_DIRECTION_OUT,
  545. NULL,
  546. NULL);
  547. if (err)
  548. return err;
  549. return devm_iio_device_register(&spi->dev, indio_dev);
  550. }
  551. static const struct spi_device_id ad3552r_id[] = {
  552. {
  553. .name = "ad3541r",
  554. .driver_data = (kernel_ulong_t)&ad3541r_model_data
  555. },
  556. {
  557. .name = "ad3542r",
  558. .driver_data = (kernel_ulong_t)&ad3542r_model_data
  559. },
  560. {
  561. .name = "ad3551r",
  562. .driver_data = (kernel_ulong_t)&ad3551r_model_data
  563. },
  564. {
  565. .name = "ad3552r",
  566. .driver_data = (kernel_ulong_t)&ad3552r_model_data
  567. },
  568. { }
  569. };
  570. MODULE_DEVICE_TABLE(spi, ad3552r_id);
  571. static const struct of_device_id ad3552r_of_match[] = {
  572. { .compatible = "adi,ad3541r", .data = &ad3541r_model_data },
  573. { .compatible = "adi,ad3542r", .data = &ad3542r_model_data },
  574. { .compatible = "adi,ad3551r", .data = &ad3551r_model_data },
  575. { .compatible = "adi,ad3552r", .data = &ad3552r_model_data },
  576. { }
  577. };
  578. MODULE_DEVICE_TABLE(of, ad3552r_of_match);
  579. static struct spi_driver ad3552r_driver = {
  580. .driver = {
  581. .name = "ad3552r",
  582. .of_match_table = ad3552r_of_match,
  583. },
  584. .probe = ad3552r_probe,
  585. .id_table = ad3552r_id
  586. };
  587. module_spi_driver(ad3552r_driver);
  588. MODULE_AUTHOR("Mihail Chindris <mihail.chindris@analog.com>");
  589. MODULE_DESCRIPTION("Analog Device AD3552R DAC");
  590. MODULE_LICENSE("GPL v2");
  591. MODULE_IMPORT_NS("IIO_AD3552R");