ad5755.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. /*
  2. * AD5755, AD5755-1, AD5757, AD5735, AD5737 Digital to analog converters driver
  3. *
  4. * Copyright 2012 Analog Devices Inc.
  5. *
  6. * Licensed under the GPL-2.
  7. */
  8. #include <linux/device.h>
  9. #include <linux/err.h>
  10. #include <linux/module.h>
  11. #include <linux/kernel.h>
  12. #include <linux/spi/spi.h>
  13. #include <linux/slab.h>
  14. #include <linux/sysfs.h>
  15. #include <linux/delay.h>
  16. #include <linux/iio/iio.h>
  17. #include <linux/iio/sysfs.h>
  18. #include <linux/platform_data/ad5755.h>
  19. #define AD5755_NUM_CHANNELS 4
  20. #define AD5755_ADDR(x) ((x) << 16)
  21. #define AD5755_WRITE_REG_DATA(chan) (chan)
  22. #define AD5755_WRITE_REG_GAIN(chan) (0x08 | (chan))
  23. #define AD5755_WRITE_REG_OFFSET(chan) (0x10 | (chan))
  24. #define AD5755_WRITE_REG_CTRL(chan) (0x1c | (chan))
  25. #define AD5755_READ_REG_DATA(chan) (chan)
  26. #define AD5755_READ_REG_CTRL(chan) (0x4 | (chan))
  27. #define AD5755_READ_REG_GAIN(chan) (0x8 | (chan))
  28. #define AD5755_READ_REG_OFFSET(chan) (0xc | (chan))
  29. #define AD5755_READ_REG_CLEAR(chan) (0x10 | (chan))
  30. #define AD5755_READ_REG_SLEW(chan) (0x14 | (chan))
  31. #define AD5755_READ_REG_STATUS 0x18
  32. #define AD5755_READ_REG_MAIN 0x19
  33. #define AD5755_READ_REG_DC_DC 0x1a
  34. #define AD5755_CTRL_REG_SLEW 0x0
  35. #define AD5755_CTRL_REG_MAIN 0x1
  36. #define AD5755_CTRL_REG_DAC 0x2
  37. #define AD5755_CTRL_REG_DC_DC 0x3
  38. #define AD5755_CTRL_REG_SW 0x4
  39. #define AD5755_READ_FLAG 0x800000
  40. #define AD5755_NOOP 0x1CE000
  41. #define AD5755_DAC_INT_EN BIT(8)
  42. #define AD5755_DAC_CLR_EN BIT(7)
  43. #define AD5755_DAC_OUT_EN BIT(6)
  44. #define AD5755_DAC_INT_CURRENT_SENSE_RESISTOR BIT(5)
  45. #define AD5755_DAC_DC_DC_EN BIT(4)
  46. #define AD5755_DAC_VOLTAGE_OVERRANGE_EN BIT(3)
  47. #define AD5755_DC_DC_MAXV 0
  48. #define AD5755_DC_DC_FREQ_SHIFT 2
  49. #define AD5755_DC_DC_PHASE_SHIFT 4
  50. #define AD5755_EXT_DC_DC_COMP_RES BIT(6)
  51. #define AD5755_SLEW_STEP_SIZE_SHIFT 0
  52. #define AD5755_SLEW_RATE_SHIFT 3
  53. #define AD5755_SLEW_ENABLE BIT(12)
  54. /**
  55. * struct ad5755_chip_info - chip specific information
  56. * @channel_template: channel specification
  57. * @calib_shift: shift for the calibration data registers
  58. * @has_voltage_out: whether the chip has voltage outputs
  59. */
  60. struct ad5755_chip_info {
  61. const struct iio_chan_spec channel_template;
  62. unsigned int calib_shift;
  63. bool has_voltage_out;
  64. };
  65. /**
  66. * struct ad5755_state - driver instance specific data
  67. * @spi: spi device the driver is attached to
  68. * @chip_info: chip model specific constants, available modes etc
  69. * @pwr_down: bitmask which contains hether a channel is powered down or not
  70. * @ctrl: software shadow of the channel ctrl registers
  71. * @channels: iio channel spec for the device
  72. * @data: spi transfer buffers
  73. */
  74. struct ad5755_state {
  75. struct spi_device *spi;
  76. const struct ad5755_chip_info *chip_info;
  77. unsigned int pwr_down;
  78. unsigned int ctrl[AD5755_NUM_CHANNELS];
  79. struct iio_chan_spec channels[AD5755_NUM_CHANNELS];
  80. /*
  81. * DMA (thus cache coherency maintenance) requires the
  82. * transfer buffers to live in their own cache lines.
  83. */
  84. union {
  85. u32 d32;
  86. u8 d8[4];
  87. } data[2] ____cacheline_aligned;
  88. };
  89. enum ad5755_type {
  90. ID_AD5755,
  91. ID_AD5757,
  92. ID_AD5735,
  93. ID_AD5737,
  94. };
  95. static int ad5755_write_unlocked(struct iio_dev *indio_dev,
  96. unsigned int reg, unsigned int val)
  97. {
  98. struct ad5755_state *st = iio_priv(indio_dev);
  99. st->data[0].d32 = cpu_to_be32((reg << 16) | val);
  100. return spi_write(st->spi, &st->data[0].d8[1], 3);
  101. }
  102. static int ad5755_write_ctrl_unlocked(struct iio_dev *indio_dev,
  103. unsigned int channel, unsigned int reg, unsigned int val)
  104. {
  105. return ad5755_write_unlocked(indio_dev,
  106. AD5755_WRITE_REG_CTRL(channel), (reg << 13) | val);
  107. }
  108. static int ad5755_write(struct iio_dev *indio_dev, unsigned int reg,
  109. unsigned int val)
  110. {
  111. int ret;
  112. mutex_lock(&indio_dev->mlock);
  113. ret = ad5755_write_unlocked(indio_dev, reg, val);
  114. mutex_unlock(&indio_dev->mlock);
  115. return ret;
  116. }
  117. static int ad5755_write_ctrl(struct iio_dev *indio_dev, unsigned int channel,
  118. unsigned int reg, unsigned int val)
  119. {
  120. int ret;
  121. mutex_lock(&indio_dev->mlock);
  122. ret = ad5755_write_ctrl_unlocked(indio_dev, channel, reg, val);
  123. mutex_unlock(&indio_dev->mlock);
  124. return ret;
  125. }
  126. static int ad5755_read(struct iio_dev *indio_dev, unsigned int addr)
  127. {
  128. struct ad5755_state *st = iio_priv(indio_dev);
  129. struct spi_message m;
  130. int ret;
  131. struct spi_transfer t[] = {
  132. {
  133. .tx_buf = &st->data[0].d8[1],
  134. .len = 3,
  135. .cs_change = 1,
  136. }, {
  137. .tx_buf = &st->data[1].d8[1],
  138. .rx_buf = &st->data[1].d8[1],
  139. .len = 3,
  140. },
  141. };
  142. spi_message_init(&m);
  143. spi_message_add_tail(&t[0], &m);
  144. spi_message_add_tail(&t[1], &m);
  145. mutex_lock(&indio_dev->mlock);
  146. st->data[0].d32 = cpu_to_be32(AD5755_READ_FLAG | (addr << 16));
  147. st->data[1].d32 = cpu_to_be32(AD5755_NOOP);
  148. ret = spi_sync(st->spi, &m);
  149. if (ret >= 0)
  150. ret = be32_to_cpu(st->data[1].d32) & 0xffff;
  151. mutex_unlock(&indio_dev->mlock);
  152. return ret;
  153. }
  154. static int ad5755_update_dac_ctrl(struct iio_dev *indio_dev,
  155. unsigned int channel, unsigned int set, unsigned int clr)
  156. {
  157. struct ad5755_state *st = iio_priv(indio_dev);
  158. int ret;
  159. st->ctrl[channel] |= set;
  160. st->ctrl[channel] &= ~clr;
  161. ret = ad5755_write_ctrl_unlocked(indio_dev, channel,
  162. AD5755_CTRL_REG_DAC, st->ctrl[channel]);
  163. return ret;
  164. }
  165. static int ad5755_set_channel_pwr_down(struct iio_dev *indio_dev,
  166. unsigned int channel, bool pwr_down)
  167. {
  168. struct ad5755_state *st = iio_priv(indio_dev);
  169. unsigned int mask = BIT(channel);
  170. mutex_lock(&indio_dev->mlock);
  171. if ((bool)(st->pwr_down & mask) == pwr_down)
  172. goto out_unlock;
  173. if (!pwr_down) {
  174. st->pwr_down &= ~mask;
  175. ad5755_update_dac_ctrl(indio_dev, channel,
  176. AD5755_DAC_INT_EN | AD5755_DAC_DC_DC_EN, 0);
  177. udelay(200);
  178. ad5755_update_dac_ctrl(indio_dev, channel,
  179. AD5755_DAC_OUT_EN, 0);
  180. } else {
  181. st->pwr_down |= mask;
  182. ad5755_update_dac_ctrl(indio_dev, channel,
  183. 0, AD5755_DAC_INT_EN | AD5755_DAC_OUT_EN |
  184. AD5755_DAC_DC_DC_EN);
  185. }
  186. out_unlock:
  187. mutex_unlock(&indio_dev->mlock);
  188. return 0;
  189. }
  190. static const int ad5755_min_max_table[][2] = {
  191. [AD5755_MODE_VOLTAGE_0V_5V] = { 0, 5000 },
  192. [AD5755_MODE_VOLTAGE_0V_10V] = { 0, 10000 },
  193. [AD5755_MODE_VOLTAGE_PLUSMINUS_5V] = { -5000, 5000 },
  194. [AD5755_MODE_VOLTAGE_PLUSMINUS_10V] = { -10000, 10000 },
  195. [AD5755_MODE_CURRENT_4mA_20mA] = { 4, 20 },
  196. [AD5755_MODE_CURRENT_0mA_20mA] = { 0, 20 },
  197. [AD5755_MODE_CURRENT_0mA_24mA] = { 0, 24 },
  198. };
  199. static void ad5755_get_min_max(struct ad5755_state *st,
  200. struct iio_chan_spec const *chan, int *min, int *max)
  201. {
  202. enum ad5755_mode mode = st->ctrl[chan->channel] & 7;
  203. *min = ad5755_min_max_table[mode][0];
  204. *max = ad5755_min_max_table[mode][1];
  205. }
  206. static inline int ad5755_get_offset(struct ad5755_state *st,
  207. struct iio_chan_spec const *chan)
  208. {
  209. int min, max;
  210. ad5755_get_min_max(st, chan, &min, &max);
  211. return (min * (1 << chan->scan_type.realbits)) / (max - min);
  212. }
  213. static inline int ad5755_get_scale(struct ad5755_state *st,
  214. struct iio_chan_spec const *chan)
  215. {
  216. int min, max;
  217. ad5755_get_min_max(st, chan, &min, &max);
  218. return ((max - min) * 1000000000ULL) >> chan->scan_type.realbits;
  219. }
  220. static int ad5755_chan_reg_info(struct ad5755_state *st,
  221. struct iio_chan_spec const *chan, long info, bool write,
  222. unsigned int *reg, unsigned int *shift, unsigned int *offset)
  223. {
  224. switch (info) {
  225. case IIO_CHAN_INFO_RAW:
  226. if (write)
  227. *reg = AD5755_WRITE_REG_DATA(chan->address);
  228. else
  229. *reg = AD5755_READ_REG_DATA(chan->address);
  230. *shift = chan->scan_type.shift;
  231. *offset = 0;
  232. break;
  233. case IIO_CHAN_INFO_CALIBBIAS:
  234. if (write)
  235. *reg = AD5755_WRITE_REG_OFFSET(chan->address);
  236. else
  237. *reg = AD5755_READ_REG_OFFSET(chan->address);
  238. *shift = st->chip_info->calib_shift;
  239. *offset = 32768;
  240. break;
  241. case IIO_CHAN_INFO_CALIBSCALE:
  242. if (write)
  243. *reg = AD5755_WRITE_REG_GAIN(chan->address);
  244. else
  245. *reg = AD5755_READ_REG_GAIN(chan->address);
  246. *shift = st->chip_info->calib_shift;
  247. *offset = 0;
  248. break;
  249. default:
  250. return -EINVAL;
  251. }
  252. return 0;
  253. }
  254. static int ad5755_read_raw(struct iio_dev *indio_dev,
  255. const struct iio_chan_spec *chan, int *val, int *val2, long info)
  256. {
  257. struct ad5755_state *st = iio_priv(indio_dev);
  258. unsigned int reg, shift, offset;
  259. int ret;
  260. switch (info) {
  261. case IIO_CHAN_INFO_SCALE:
  262. *val = 0;
  263. *val2 = ad5755_get_scale(st, chan);
  264. return IIO_VAL_INT_PLUS_NANO;
  265. case IIO_CHAN_INFO_OFFSET:
  266. *val = ad5755_get_offset(st, chan);
  267. return IIO_VAL_INT;
  268. default:
  269. ret = ad5755_chan_reg_info(st, chan, info, false,
  270. &reg, &shift, &offset);
  271. if (ret)
  272. return ret;
  273. ret = ad5755_read(indio_dev, reg);
  274. if (ret < 0)
  275. return ret;
  276. *val = (ret - offset) >> shift;
  277. return IIO_VAL_INT;
  278. }
  279. return -EINVAL;
  280. }
  281. static int ad5755_write_raw(struct iio_dev *indio_dev,
  282. const struct iio_chan_spec *chan, int val, int val2, long info)
  283. {
  284. struct ad5755_state *st = iio_priv(indio_dev);
  285. unsigned int shift, reg, offset;
  286. int ret;
  287. ret = ad5755_chan_reg_info(st, chan, info, true,
  288. &reg, &shift, &offset);
  289. if (ret)
  290. return ret;
  291. val <<= shift;
  292. val += offset;
  293. if (val < 0 || val > 0xffff)
  294. return -EINVAL;
  295. return ad5755_write(indio_dev, reg, val);
  296. }
  297. static ssize_t ad5755_read_powerdown(struct iio_dev *indio_dev, uintptr_t priv,
  298. const struct iio_chan_spec *chan, char *buf)
  299. {
  300. struct ad5755_state *st = iio_priv(indio_dev);
  301. return sprintf(buf, "%d\n",
  302. (bool)(st->pwr_down & (1 << chan->channel)));
  303. }
  304. static ssize_t ad5755_write_powerdown(struct iio_dev *indio_dev, uintptr_t priv,
  305. struct iio_chan_spec const *chan, const char *buf, size_t len)
  306. {
  307. bool pwr_down;
  308. int ret;
  309. ret = strtobool(buf, &pwr_down);
  310. if (ret)
  311. return ret;
  312. ret = ad5755_set_channel_pwr_down(indio_dev, chan->channel, pwr_down);
  313. return ret ? ret : len;
  314. }
  315. static const struct iio_info ad5755_info = {
  316. .read_raw = ad5755_read_raw,
  317. .write_raw = ad5755_write_raw,
  318. .driver_module = THIS_MODULE,
  319. };
  320. static const struct iio_chan_spec_ext_info ad5755_ext_info[] = {
  321. {
  322. .name = "powerdown",
  323. .read = ad5755_read_powerdown,
  324. .write = ad5755_write_powerdown,
  325. },
  326. { },
  327. };
  328. #define AD5755_CHANNEL(_bits) { \
  329. .indexed = 1, \
  330. .output = 1, \
  331. .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
  332. IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \
  333. IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | \
  334. IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | \
  335. IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, \
  336. .scan_type = IIO_ST('u', (_bits), 16, 16 - (_bits)), \
  337. .ext_info = ad5755_ext_info, \
  338. }
  339. static const struct ad5755_chip_info ad5755_chip_info_tbl[] = {
  340. [ID_AD5735] = {
  341. .channel_template = AD5755_CHANNEL(14),
  342. .has_voltage_out = true,
  343. .calib_shift = 4,
  344. },
  345. [ID_AD5737] = {
  346. .channel_template = AD5755_CHANNEL(14),
  347. .has_voltage_out = false,
  348. .calib_shift = 4,
  349. },
  350. [ID_AD5755] = {
  351. .channel_template = AD5755_CHANNEL(16),
  352. .has_voltage_out = true,
  353. .calib_shift = 0,
  354. },
  355. [ID_AD5757] = {
  356. .channel_template = AD5755_CHANNEL(16),
  357. .has_voltage_out = false,
  358. .calib_shift = 0,
  359. },
  360. };
  361. static bool ad5755_is_valid_mode(struct ad5755_state *st, enum ad5755_mode mode)
  362. {
  363. switch (mode) {
  364. case AD5755_MODE_VOLTAGE_0V_5V:
  365. case AD5755_MODE_VOLTAGE_0V_10V:
  366. case AD5755_MODE_VOLTAGE_PLUSMINUS_5V:
  367. case AD5755_MODE_VOLTAGE_PLUSMINUS_10V:
  368. return st->chip_info->has_voltage_out;
  369. case AD5755_MODE_CURRENT_4mA_20mA:
  370. case AD5755_MODE_CURRENT_0mA_20mA:
  371. case AD5755_MODE_CURRENT_0mA_24mA:
  372. return true;
  373. default:
  374. return false;
  375. }
  376. }
  377. static int ad5755_setup_pdata(struct iio_dev *indio_dev,
  378. const struct ad5755_platform_data *pdata)
  379. {
  380. struct ad5755_state *st = iio_priv(indio_dev);
  381. unsigned int val;
  382. unsigned int i;
  383. int ret;
  384. if (pdata->dc_dc_phase > AD5755_DC_DC_PHASE_90_DEGREE ||
  385. pdata->dc_dc_freq > AD5755_DC_DC_FREQ_650kHZ ||
  386. pdata->dc_dc_maxv > AD5755_DC_DC_MAXV_29V5)
  387. return -EINVAL;
  388. val = pdata->dc_dc_maxv << AD5755_DC_DC_MAXV;
  389. val |= pdata->dc_dc_freq << AD5755_DC_DC_FREQ_SHIFT;
  390. val |= pdata->dc_dc_phase << AD5755_DC_DC_PHASE_SHIFT;
  391. if (pdata->ext_dc_dc_compenstation_resistor)
  392. val |= AD5755_EXT_DC_DC_COMP_RES;
  393. ret = ad5755_write_ctrl(indio_dev, 0, AD5755_CTRL_REG_DC_DC, val);
  394. if (ret < 0)
  395. return ret;
  396. for (i = 0; i < ARRAY_SIZE(pdata->dac); ++i) {
  397. val = pdata->dac[i].slew.step_size <<
  398. AD5755_SLEW_STEP_SIZE_SHIFT;
  399. val |= pdata->dac[i].slew.rate <<
  400. AD5755_SLEW_RATE_SHIFT;
  401. if (pdata->dac[i].slew.enable)
  402. val |= AD5755_SLEW_ENABLE;
  403. ret = ad5755_write_ctrl(indio_dev, i,
  404. AD5755_CTRL_REG_SLEW, val);
  405. if (ret < 0)
  406. return ret;
  407. }
  408. for (i = 0; i < ARRAY_SIZE(pdata->dac); ++i) {
  409. if (!ad5755_is_valid_mode(st, pdata->dac[i].mode))
  410. return -EINVAL;
  411. val = 0;
  412. if (!pdata->dac[i].ext_current_sense_resistor)
  413. val |= AD5755_DAC_INT_CURRENT_SENSE_RESISTOR;
  414. if (pdata->dac[i].enable_voltage_overrange)
  415. val |= AD5755_DAC_VOLTAGE_OVERRANGE_EN;
  416. val |= pdata->dac[i].mode;
  417. ret = ad5755_update_dac_ctrl(indio_dev, i, val, 0);
  418. if (ret < 0)
  419. return ret;
  420. }
  421. return 0;
  422. }
  423. static bool ad5755_is_voltage_mode(enum ad5755_mode mode)
  424. {
  425. switch (mode) {
  426. case AD5755_MODE_VOLTAGE_0V_5V:
  427. case AD5755_MODE_VOLTAGE_0V_10V:
  428. case AD5755_MODE_VOLTAGE_PLUSMINUS_5V:
  429. case AD5755_MODE_VOLTAGE_PLUSMINUS_10V:
  430. return true;
  431. default:
  432. return false;
  433. }
  434. }
  435. static int ad5755_init_channels(struct iio_dev *indio_dev,
  436. const struct ad5755_platform_data *pdata)
  437. {
  438. struct ad5755_state *st = iio_priv(indio_dev);
  439. struct iio_chan_spec *channels = st->channels;
  440. unsigned int i;
  441. for (i = 0; i < AD5755_NUM_CHANNELS; ++i) {
  442. channels[i] = st->chip_info->channel_template;
  443. channels[i].channel = i;
  444. channels[i].address = i;
  445. if (pdata && ad5755_is_voltage_mode(pdata->dac[i].mode))
  446. channels[i].type = IIO_VOLTAGE;
  447. else
  448. channels[i].type = IIO_CURRENT;
  449. }
  450. indio_dev->channels = channels;
  451. return 0;
  452. }
  453. #define AD5755_DEFAULT_DAC_PDATA { \
  454. .mode = AD5755_MODE_CURRENT_4mA_20mA, \
  455. .ext_current_sense_resistor = true, \
  456. .enable_voltage_overrange = false, \
  457. .slew = { \
  458. .enable = false, \
  459. .rate = AD5755_SLEW_RATE_64k, \
  460. .step_size = AD5755_SLEW_STEP_SIZE_1, \
  461. }, \
  462. }
  463. static const struct ad5755_platform_data ad5755_default_pdata = {
  464. .ext_dc_dc_compenstation_resistor = false,
  465. .dc_dc_phase = AD5755_DC_DC_PHASE_ALL_SAME_EDGE,
  466. .dc_dc_freq = AD5755_DC_DC_FREQ_410kHZ,
  467. .dc_dc_maxv = AD5755_DC_DC_MAXV_23V,
  468. .dac = {
  469. [0] = AD5755_DEFAULT_DAC_PDATA,
  470. [1] = AD5755_DEFAULT_DAC_PDATA,
  471. [2] = AD5755_DEFAULT_DAC_PDATA,
  472. [3] = AD5755_DEFAULT_DAC_PDATA,
  473. },
  474. };
  475. static int ad5755_probe(struct spi_device *spi)
  476. {
  477. enum ad5755_type type = spi_get_device_id(spi)->driver_data;
  478. const struct ad5755_platform_data *pdata = dev_get_platdata(&spi->dev);
  479. struct iio_dev *indio_dev;
  480. struct ad5755_state *st;
  481. int ret;
  482. indio_dev = iio_device_alloc(sizeof(*st));
  483. if (indio_dev == NULL) {
  484. dev_err(&spi->dev, "Failed to allocate iio device\n");
  485. return -ENOMEM;
  486. }
  487. st = iio_priv(indio_dev);
  488. spi_set_drvdata(spi, indio_dev);
  489. st->chip_info = &ad5755_chip_info_tbl[type];
  490. st->spi = spi;
  491. st->pwr_down = 0xf;
  492. indio_dev->dev.parent = &spi->dev;
  493. indio_dev->name = spi_get_device_id(spi)->name;
  494. indio_dev->info = &ad5755_info;
  495. indio_dev->modes = INDIO_DIRECT_MODE;
  496. indio_dev->num_channels = AD5755_NUM_CHANNELS;
  497. if (!pdata)
  498. pdata = &ad5755_default_pdata;
  499. ret = ad5755_init_channels(indio_dev, pdata);
  500. if (ret)
  501. goto error_free;
  502. ret = ad5755_setup_pdata(indio_dev, pdata);
  503. if (ret)
  504. goto error_free;
  505. ret = iio_device_register(indio_dev);
  506. if (ret) {
  507. dev_err(&spi->dev, "Failed to register iio device: %d\n", ret);
  508. goto error_free;
  509. }
  510. return 0;
  511. error_free:
  512. iio_device_free(indio_dev);
  513. return ret;
  514. }
  515. static int ad5755_remove(struct spi_device *spi)
  516. {
  517. struct iio_dev *indio_dev = spi_get_drvdata(spi);
  518. iio_device_unregister(indio_dev);
  519. iio_device_free(indio_dev);
  520. return 0;
  521. }
  522. static const struct spi_device_id ad5755_id[] = {
  523. { "ad5755", ID_AD5755 },
  524. { "ad5755-1", ID_AD5755 },
  525. { "ad5757", ID_AD5757 },
  526. { "ad5735", ID_AD5735 },
  527. { "ad5737", ID_AD5737 },
  528. {}
  529. };
  530. MODULE_DEVICE_TABLE(spi, ad5755_id);
  531. static struct spi_driver ad5755_driver = {
  532. .driver = {
  533. .name = "ad5755",
  534. .owner = THIS_MODULE,
  535. },
  536. .probe = ad5755_probe,
  537. .remove = ad5755_remove,
  538. .id_table = ad5755_id,
  539. };
  540. module_spi_driver(ad5755_driver);
  541. MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
  542. MODULE_DESCRIPTION("Analog Devices AD5755/55-1/57/35/37 DAC");
  543. MODULE_LICENSE("GPL v2");