dln2-adc.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. /*
  2. * Driver for the Diolan DLN-2 USB-ADC adapter
  3. *
  4. * Copyright (c) 2017 Jack Andersen
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License as
  8. * published by the Free Software Foundation, version 2.
  9. */
  10. #include <linux/kernel.h>
  11. #include <linux/module.h>
  12. #include <linux/types.h>
  13. #include <linux/platform_device.h>
  14. #include <linux/mfd/dln2.h>
  15. #include <linux/iio/iio.h>
  16. #include <linux/iio/sysfs.h>
  17. #include <linux/iio/trigger.h>
  18. #include <linux/iio/trigger_consumer.h>
  19. #include <linux/iio/triggered_buffer.h>
  20. #include <linux/iio/buffer.h>
  21. #include <linux/iio/kfifo_buf.h>
  22. #define DLN2_ADC_MOD_NAME "dln2-adc"
  23. #define DLN2_ADC_ID 0x06
  24. #define DLN2_ADC_GET_CHANNEL_COUNT DLN2_CMD(0x01, DLN2_ADC_ID)
  25. #define DLN2_ADC_ENABLE DLN2_CMD(0x02, DLN2_ADC_ID)
  26. #define DLN2_ADC_DISABLE DLN2_CMD(0x03, DLN2_ADC_ID)
  27. #define DLN2_ADC_CHANNEL_ENABLE DLN2_CMD(0x05, DLN2_ADC_ID)
  28. #define DLN2_ADC_CHANNEL_DISABLE DLN2_CMD(0x06, DLN2_ADC_ID)
  29. #define DLN2_ADC_SET_RESOLUTION DLN2_CMD(0x08, DLN2_ADC_ID)
  30. #define DLN2_ADC_CHANNEL_GET_VAL DLN2_CMD(0x0A, DLN2_ADC_ID)
  31. #define DLN2_ADC_CHANNEL_GET_ALL_VAL DLN2_CMD(0x0B, DLN2_ADC_ID)
  32. #define DLN2_ADC_CHANNEL_SET_CFG DLN2_CMD(0x0C, DLN2_ADC_ID)
  33. #define DLN2_ADC_CHANNEL_GET_CFG DLN2_CMD(0x0D, DLN2_ADC_ID)
  34. #define DLN2_ADC_CONDITION_MET_EV DLN2_CMD(0x10, DLN2_ADC_ID)
  35. #define DLN2_ADC_EVENT_NONE 0
  36. #define DLN2_ADC_EVENT_BELOW 1
  37. #define DLN2_ADC_EVENT_LEVEL_ABOVE 2
  38. #define DLN2_ADC_EVENT_OUTSIDE 3
  39. #define DLN2_ADC_EVENT_INSIDE 4
  40. #define DLN2_ADC_EVENT_ALWAYS 5
  41. #define DLN2_ADC_MAX_CHANNELS 8
  42. #define DLN2_ADC_DATA_BITS 10
  43. /*
  44. * Plays similar role to iio_demux_table in subsystem core; except allocated
  45. * in a fixed 8-element array.
  46. */
  47. struct dln2_adc_demux_table {
  48. unsigned int from;
  49. unsigned int to;
  50. unsigned int length;
  51. };
  52. struct dln2_adc {
  53. struct platform_device *pdev;
  54. struct iio_chan_spec iio_channels[DLN2_ADC_MAX_CHANNELS + 1];
  55. int port, trigger_chan;
  56. struct iio_trigger *trig;
  57. struct mutex mutex;
  58. /* Cached sample period in milliseconds */
  59. unsigned int sample_period;
  60. /* Demux table */
  61. unsigned int demux_count;
  62. struct dln2_adc_demux_table demux[DLN2_ADC_MAX_CHANNELS];
  63. /* Precomputed timestamp padding offset and length */
  64. unsigned int ts_pad_offset, ts_pad_length;
  65. };
  66. struct dln2_adc_port_chan {
  67. u8 port;
  68. u8 chan;
  69. };
  70. struct dln2_adc_get_all_vals {
  71. __le16 channel_mask;
  72. __le16 values[DLN2_ADC_MAX_CHANNELS];
  73. };
  74. static void dln2_adc_add_demux(struct dln2_adc *dln2,
  75. unsigned int in_loc, unsigned int out_loc,
  76. unsigned int length)
  77. {
  78. struct dln2_adc_demux_table *p = dln2->demux_count ?
  79. &dln2->demux[dln2->demux_count - 1] : NULL;
  80. if (p && p->from + p->length == in_loc &&
  81. p->to + p->length == out_loc) {
  82. p->length += length;
  83. } else if (dln2->demux_count < DLN2_ADC_MAX_CHANNELS) {
  84. p = &dln2->demux[dln2->demux_count++];
  85. p->from = in_loc;
  86. p->to = out_loc;
  87. p->length = length;
  88. }
  89. }
  90. static void dln2_adc_update_demux(struct dln2_adc *dln2)
  91. {
  92. int in_ind = -1, out_ind;
  93. unsigned int in_loc = 0, out_loc = 0;
  94. struct iio_dev *indio_dev = platform_get_drvdata(dln2->pdev);
  95. /* Clear out any old demux */
  96. dln2->demux_count = 0;
  97. /* Optimize all 8-channels case */
  98. if (indio_dev->masklength &&
  99. (*indio_dev->active_scan_mask & 0xff) == 0xff) {
  100. dln2_adc_add_demux(dln2, 0, 0, 16);
  101. dln2->ts_pad_offset = 0;
  102. dln2->ts_pad_length = 0;
  103. return;
  104. }
  105. /* Build demux table from fixed 8-channels to active_scan_mask */
  106. for_each_set_bit(out_ind,
  107. indio_dev->active_scan_mask,
  108. indio_dev->masklength) {
  109. /* Handle timestamp separately */
  110. if (out_ind == DLN2_ADC_MAX_CHANNELS)
  111. break;
  112. for (++in_ind; in_ind != out_ind; ++in_ind)
  113. in_loc += 2;
  114. dln2_adc_add_demux(dln2, in_loc, out_loc, 2);
  115. out_loc += 2;
  116. in_loc += 2;
  117. }
  118. if (indio_dev->scan_timestamp) {
  119. size_t ts_offset = indio_dev->scan_bytes / sizeof(int64_t) - 1;
  120. dln2->ts_pad_offset = out_loc;
  121. dln2->ts_pad_length = ts_offset * sizeof(int64_t) - out_loc;
  122. } else {
  123. dln2->ts_pad_offset = 0;
  124. dln2->ts_pad_length = 0;
  125. }
  126. }
  127. static int dln2_adc_get_chan_count(struct dln2_adc *dln2)
  128. {
  129. int ret;
  130. u8 port = dln2->port;
  131. u8 count;
  132. int olen = sizeof(count);
  133. ret = dln2_transfer(dln2->pdev, DLN2_ADC_GET_CHANNEL_COUNT,
  134. &port, sizeof(port), &count, &olen);
  135. if (ret < 0) {
  136. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  137. return ret;
  138. }
  139. if (olen < sizeof(count))
  140. return -EPROTO;
  141. return count;
  142. }
  143. static int dln2_adc_set_port_resolution(struct dln2_adc *dln2)
  144. {
  145. int ret;
  146. struct dln2_adc_port_chan port_chan = {
  147. .port = dln2->port,
  148. .chan = DLN2_ADC_DATA_BITS,
  149. };
  150. ret = dln2_transfer_tx(dln2->pdev, DLN2_ADC_SET_RESOLUTION,
  151. &port_chan, sizeof(port_chan));
  152. if (ret < 0)
  153. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  154. return ret;
  155. }
  156. static int dln2_adc_set_chan_enabled(struct dln2_adc *dln2,
  157. int channel, bool enable)
  158. {
  159. int ret;
  160. struct dln2_adc_port_chan port_chan = {
  161. .port = dln2->port,
  162. .chan = channel,
  163. };
  164. u16 cmd = enable ? DLN2_ADC_CHANNEL_ENABLE : DLN2_ADC_CHANNEL_DISABLE;
  165. ret = dln2_transfer_tx(dln2->pdev, cmd, &port_chan, sizeof(port_chan));
  166. if (ret < 0)
  167. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  168. return ret;
  169. }
  170. static int dln2_adc_set_port_enabled(struct dln2_adc *dln2, bool enable,
  171. u16 *conflict_out)
  172. {
  173. int ret;
  174. u8 port = dln2->port;
  175. __le16 conflict;
  176. int olen = sizeof(conflict);
  177. u16 cmd = enable ? DLN2_ADC_ENABLE : DLN2_ADC_DISABLE;
  178. if (conflict_out)
  179. *conflict_out = 0;
  180. ret = dln2_transfer(dln2->pdev, cmd, &port, sizeof(port),
  181. &conflict, &olen);
  182. if (ret < 0) {
  183. dev_dbg(&dln2->pdev->dev, "Problem in %s(%d)\n",
  184. __func__, (int)enable);
  185. if (conflict_out && enable && olen >= sizeof(conflict))
  186. *conflict_out = le16_to_cpu(conflict);
  187. return ret;
  188. }
  189. if (enable && olen < sizeof(conflict))
  190. return -EPROTO;
  191. return ret;
  192. }
  193. static int dln2_adc_set_chan_period(struct dln2_adc *dln2,
  194. unsigned int channel, unsigned int period)
  195. {
  196. int ret;
  197. struct {
  198. struct dln2_adc_port_chan port_chan;
  199. __u8 type;
  200. __le16 period;
  201. __le16 low;
  202. __le16 high;
  203. } __packed set_cfg = {
  204. .port_chan.port = dln2->port,
  205. .port_chan.chan = channel,
  206. .type = period ? DLN2_ADC_EVENT_ALWAYS : DLN2_ADC_EVENT_NONE,
  207. .period = cpu_to_le16(period)
  208. };
  209. ret = dln2_transfer_tx(dln2->pdev, DLN2_ADC_CHANNEL_SET_CFG,
  210. &set_cfg, sizeof(set_cfg));
  211. if (ret < 0)
  212. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  213. return ret;
  214. }
  215. static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel)
  216. {
  217. int ret, i;
  218. struct iio_dev *indio_dev = platform_get_drvdata(dln2->pdev);
  219. u16 conflict;
  220. __le16 value;
  221. int olen = sizeof(value);
  222. struct dln2_adc_port_chan port_chan = {
  223. .port = dln2->port,
  224. .chan = channel,
  225. };
  226. ret = iio_device_claim_direct_mode(indio_dev);
  227. if (ret < 0)
  228. return ret;
  229. ret = dln2_adc_set_chan_enabled(dln2, channel, true);
  230. if (ret < 0)
  231. goto release_direct;
  232. ret = dln2_adc_set_port_enabled(dln2, true, &conflict);
  233. if (ret < 0) {
  234. if (conflict) {
  235. dev_err(&dln2->pdev->dev,
  236. "ADC pins conflict with mask %04X\n",
  237. (int)conflict);
  238. ret = -EBUSY;
  239. }
  240. goto disable_chan;
  241. }
  242. /*
  243. * Call GET_VAL twice due to initial zero-return immediately after
  244. * enabling channel.
  245. */
  246. for (i = 0; i < 2; ++i) {
  247. ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_VAL,
  248. &port_chan, sizeof(port_chan),
  249. &value, &olen);
  250. if (ret < 0) {
  251. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  252. goto disable_port;
  253. }
  254. if (olen < sizeof(value)) {
  255. ret = -EPROTO;
  256. goto disable_port;
  257. }
  258. }
  259. ret = le16_to_cpu(value);
  260. disable_port:
  261. dln2_adc_set_port_enabled(dln2, false, NULL);
  262. disable_chan:
  263. dln2_adc_set_chan_enabled(dln2, channel, false);
  264. release_direct:
  265. iio_device_release_direct_mode(indio_dev);
  266. return ret;
  267. }
  268. static int dln2_adc_read_all(struct dln2_adc *dln2,
  269. struct dln2_adc_get_all_vals *get_all_vals)
  270. {
  271. int ret;
  272. __u8 port = dln2->port;
  273. int olen = sizeof(*get_all_vals);
  274. ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_ALL_VAL,
  275. &port, sizeof(port), get_all_vals, &olen);
  276. if (ret < 0) {
  277. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  278. return ret;
  279. }
  280. if (olen < sizeof(*get_all_vals))
  281. return -EPROTO;
  282. return ret;
  283. }
  284. static int dln2_adc_read_raw(struct iio_dev *indio_dev,
  285. struct iio_chan_spec const *chan,
  286. int *val,
  287. int *val2,
  288. long mask)
  289. {
  290. int ret;
  291. unsigned int microhertz;
  292. struct dln2_adc *dln2 = iio_priv(indio_dev);
  293. switch (mask) {
  294. case IIO_CHAN_INFO_RAW:
  295. mutex_lock(&dln2->mutex);
  296. ret = dln2_adc_read(dln2, chan->channel);
  297. mutex_unlock(&dln2->mutex);
  298. if (ret < 0)
  299. return ret;
  300. *val = ret;
  301. return IIO_VAL_INT;
  302. case IIO_CHAN_INFO_SCALE:
  303. /*
  304. * Voltage reference is fixed at 3.3v
  305. * 3.3 / (1 << 10) * 1000000000
  306. */
  307. *val = 0;
  308. *val2 = 3222656;
  309. return IIO_VAL_INT_PLUS_NANO;
  310. case IIO_CHAN_INFO_SAMP_FREQ:
  311. if (dln2->sample_period) {
  312. microhertz = 1000000000 / dln2->sample_period;
  313. *val = microhertz / 1000000;
  314. *val2 = microhertz % 1000000;
  315. } else {
  316. *val = 0;
  317. *val2 = 0;
  318. }
  319. return IIO_VAL_INT_PLUS_MICRO;
  320. default:
  321. return -EINVAL;
  322. }
  323. }
  324. static int dln2_adc_write_raw(struct iio_dev *indio_dev,
  325. struct iio_chan_spec const *chan,
  326. int val,
  327. int val2,
  328. long mask)
  329. {
  330. int ret;
  331. unsigned int microhertz;
  332. struct dln2_adc *dln2 = iio_priv(indio_dev);
  333. switch (mask) {
  334. case IIO_CHAN_INFO_SAMP_FREQ:
  335. microhertz = 1000000 * val + val2;
  336. mutex_lock(&dln2->mutex);
  337. dln2->sample_period =
  338. microhertz ? 1000000000 / microhertz : UINT_MAX;
  339. if (dln2->sample_period > 65535) {
  340. dln2->sample_period = 65535;
  341. dev_warn(&dln2->pdev->dev,
  342. "clamping period to 65535ms\n");
  343. }
  344. /*
  345. * The first requested channel is arbitrated as a shared
  346. * trigger source, so only one event is registered with the
  347. * DLN. The event handler will then read all enabled channel
  348. * values using DLN2_ADC_CHANNEL_GET_ALL_VAL to maintain
  349. * synchronization between ADC readings.
  350. */
  351. if (dln2->trigger_chan != -1)
  352. ret = dln2_adc_set_chan_period(dln2,
  353. dln2->trigger_chan, dln2->sample_period);
  354. else
  355. ret = 0;
  356. mutex_unlock(&dln2->mutex);
  357. return ret;
  358. default:
  359. return -EINVAL;
  360. }
  361. }
  362. static int dln2_update_scan_mode(struct iio_dev *indio_dev,
  363. const unsigned long *scan_mask)
  364. {
  365. struct dln2_adc *dln2 = iio_priv(indio_dev);
  366. int chan_count = indio_dev->num_channels - 1;
  367. int ret, i, j;
  368. mutex_lock(&dln2->mutex);
  369. for (i = 0; i < chan_count; ++i) {
  370. ret = dln2_adc_set_chan_enabled(dln2, i,
  371. test_bit(i, scan_mask));
  372. if (ret < 0) {
  373. for (j = 0; j < i; ++j)
  374. dln2_adc_set_chan_enabled(dln2, j, false);
  375. mutex_unlock(&dln2->mutex);
  376. dev_err(&dln2->pdev->dev,
  377. "Unable to enable ADC channel %d\n", i);
  378. return -EBUSY;
  379. }
  380. }
  381. dln2_adc_update_demux(dln2);
  382. mutex_unlock(&dln2->mutex);
  383. return 0;
  384. }
  385. #define DLN2_ADC_CHAN(lval, idx) { \
  386. lval.type = IIO_VOLTAGE; \
  387. lval.channel = idx; \
  388. lval.indexed = 1; \
  389. lval.info_mask_separate = BIT(IIO_CHAN_INFO_RAW); \
  390. lval.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SCALE) | \
  391. BIT(IIO_CHAN_INFO_SAMP_FREQ); \
  392. lval.scan_index = idx; \
  393. lval.scan_type.sign = 'u'; \
  394. lval.scan_type.realbits = DLN2_ADC_DATA_BITS; \
  395. lval.scan_type.storagebits = 16; \
  396. lval.scan_type.endianness = IIO_LE; \
  397. }
  398. /* Assignment version of IIO_CHAN_SOFT_TIMESTAMP */
  399. #define IIO_CHAN_SOFT_TIMESTAMP_ASSIGN(lval, _si) { \
  400. lval.type = IIO_TIMESTAMP; \
  401. lval.channel = -1; \
  402. lval.scan_index = _si; \
  403. lval.scan_type.sign = 's'; \
  404. lval.scan_type.realbits = 64; \
  405. lval.scan_type.storagebits = 64; \
  406. }
  407. static const struct iio_info dln2_adc_info = {
  408. .read_raw = dln2_adc_read_raw,
  409. .write_raw = dln2_adc_write_raw,
  410. .update_scan_mode = dln2_update_scan_mode,
  411. };
  412. static irqreturn_t dln2_adc_trigger_h(int irq, void *p)
  413. {
  414. struct iio_poll_func *pf = p;
  415. struct iio_dev *indio_dev = pf->indio_dev;
  416. struct {
  417. __le16 values[DLN2_ADC_MAX_CHANNELS];
  418. int64_t timestamp_space;
  419. } data;
  420. struct dln2_adc_get_all_vals dev_data;
  421. struct dln2_adc *dln2 = iio_priv(indio_dev);
  422. const struct dln2_adc_demux_table *t;
  423. int ret, i;
  424. mutex_lock(&dln2->mutex);
  425. ret = dln2_adc_read_all(dln2, &dev_data);
  426. mutex_unlock(&dln2->mutex);
  427. if (ret < 0)
  428. goto done;
  429. /* Demux operation */
  430. for (i = 0; i < dln2->demux_count; ++i) {
  431. t = &dln2->demux[i];
  432. memcpy((void *)data.values + t->to,
  433. (void *)dev_data.values + t->from, t->length);
  434. }
  435. /* Zero padding space between values and timestamp */
  436. if (dln2->ts_pad_length)
  437. memset((void *)data.values + dln2->ts_pad_offset,
  438. 0, dln2->ts_pad_length);
  439. iio_push_to_buffers_with_timestamp(indio_dev, &data,
  440. iio_get_time_ns(indio_dev));
  441. done:
  442. iio_trigger_notify_done(indio_dev->trig);
  443. return IRQ_HANDLED;
  444. }
  445. static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
  446. {
  447. int ret;
  448. struct dln2_adc *dln2 = iio_priv(indio_dev);
  449. u16 conflict;
  450. unsigned int trigger_chan;
  451. ret = iio_triggered_buffer_postenable(indio_dev);
  452. if (ret)
  453. return ret;
  454. mutex_lock(&dln2->mutex);
  455. /* Enable ADC */
  456. ret = dln2_adc_set_port_enabled(dln2, true, &conflict);
  457. if (ret < 0) {
  458. mutex_unlock(&dln2->mutex);
  459. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  460. if (conflict) {
  461. dev_err(&dln2->pdev->dev,
  462. "ADC pins conflict with mask %04X\n",
  463. (int)conflict);
  464. ret = -EBUSY;
  465. }
  466. iio_triggered_buffer_predisable(indio_dev);
  467. return ret;
  468. }
  469. /* Assign trigger channel based on first enabled channel */
  470. trigger_chan = find_first_bit(indio_dev->active_scan_mask,
  471. indio_dev->masklength);
  472. if (trigger_chan < DLN2_ADC_MAX_CHANNELS) {
  473. dln2->trigger_chan = trigger_chan;
  474. ret = dln2_adc_set_chan_period(dln2, dln2->trigger_chan,
  475. dln2->sample_period);
  476. mutex_unlock(&dln2->mutex);
  477. if (ret < 0) {
  478. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  479. iio_triggered_buffer_predisable(indio_dev);
  480. return ret;
  481. }
  482. } else {
  483. dln2->trigger_chan = -1;
  484. mutex_unlock(&dln2->mutex);
  485. }
  486. return 0;
  487. }
  488. static int dln2_adc_triggered_buffer_predisable(struct iio_dev *indio_dev)
  489. {
  490. int ret, ret2;
  491. struct dln2_adc *dln2 = iio_priv(indio_dev);
  492. mutex_lock(&dln2->mutex);
  493. /* Disable trigger channel */
  494. if (dln2->trigger_chan != -1) {
  495. dln2_adc_set_chan_period(dln2, dln2->trigger_chan, 0);
  496. dln2->trigger_chan = -1;
  497. }
  498. /* Disable ADC */
  499. ret = dln2_adc_set_port_enabled(dln2, false, NULL);
  500. mutex_unlock(&dln2->mutex);
  501. if (ret < 0)
  502. dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
  503. ret2 = iio_triggered_buffer_predisable(indio_dev);
  504. if (ret == 0)
  505. ret = ret2;
  506. return ret;
  507. }
  508. static const struct iio_buffer_setup_ops dln2_adc_buffer_setup_ops = {
  509. .postenable = dln2_adc_triggered_buffer_postenable,
  510. .predisable = dln2_adc_triggered_buffer_predisable,
  511. };
  512. static void dln2_adc_event(struct platform_device *pdev, u16 echo,
  513. const void *data, int len)
  514. {
  515. struct iio_dev *indio_dev = platform_get_drvdata(pdev);
  516. struct dln2_adc *dln2 = iio_priv(indio_dev);
  517. /* Called via URB completion handler */
  518. iio_trigger_poll(dln2->trig);
  519. }
  520. static int dln2_adc_probe(struct platform_device *pdev)
  521. {
  522. struct device *dev = &pdev->dev;
  523. struct dln2_adc *dln2;
  524. struct dln2_platform_data *pdata = dev_get_platdata(&pdev->dev);
  525. struct iio_dev *indio_dev;
  526. int i, ret, chans;
  527. indio_dev = devm_iio_device_alloc(dev, sizeof(*dln2));
  528. if (!indio_dev) {
  529. dev_err(dev, "failed allocating iio device\n");
  530. return -ENOMEM;
  531. }
  532. dln2 = iio_priv(indio_dev);
  533. dln2->pdev = pdev;
  534. dln2->port = pdata->port;
  535. dln2->trigger_chan = -1;
  536. mutex_init(&dln2->mutex);
  537. platform_set_drvdata(pdev, indio_dev);
  538. ret = dln2_adc_set_port_resolution(dln2);
  539. if (ret < 0) {
  540. dev_err(dev, "failed to set ADC resolution to 10 bits\n");
  541. return ret;
  542. }
  543. chans = dln2_adc_get_chan_count(dln2);
  544. if (chans < 0) {
  545. dev_err(dev, "failed to get channel count: %d\n", chans);
  546. return chans;
  547. }
  548. if (chans > DLN2_ADC_MAX_CHANNELS) {
  549. chans = DLN2_ADC_MAX_CHANNELS;
  550. dev_warn(dev, "clamping channels to %d\n",
  551. DLN2_ADC_MAX_CHANNELS);
  552. }
  553. for (i = 0; i < chans; ++i)
  554. DLN2_ADC_CHAN(dln2->iio_channels[i], i)
  555. IIO_CHAN_SOFT_TIMESTAMP_ASSIGN(dln2->iio_channels[i], i);
  556. indio_dev->name = DLN2_ADC_MOD_NAME;
  557. indio_dev->dev.parent = dev;
  558. indio_dev->info = &dln2_adc_info;
  559. indio_dev->modes = INDIO_DIRECT_MODE;
  560. indio_dev->channels = dln2->iio_channels;
  561. indio_dev->num_channels = chans + 1;
  562. indio_dev->setup_ops = &dln2_adc_buffer_setup_ops;
  563. dln2->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
  564. indio_dev->name, indio_dev->id);
  565. if (!dln2->trig) {
  566. dev_err(dev, "failed to allocate trigger\n");
  567. return -ENOMEM;
  568. }
  569. iio_trigger_set_drvdata(dln2->trig, dln2);
  570. devm_iio_trigger_register(dev, dln2->trig);
  571. iio_trigger_set_immutable(indio_dev, dln2->trig);
  572. ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
  573. dln2_adc_trigger_h,
  574. &dln2_adc_buffer_setup_ops);
  575. if (ret) {
  576. dev_err(dev, "failed to allocate triggered buffer: %d\n", ret);
  577. return ret;
  578. }
  579. ret = dln2_register_event_cb(pdev, DLN2_ADC_CONDITION_MET_EV,
  580. dln2_adc_event);
  581. if (ret) {
  582. dev_err(dev, "failed to setup DLN2 periodic event: %d\n", ret);
  583. return ret;
  584. }
  585. ret = iio_device_register(indio_dev);
  586. if (ret) {
  587. dev_err(dev, "failed to register iio device: %d\n", ret);
  588. goto unregister_event;
  589. }
  590. return ret;
  591. unregister_event:
  592. dln2_unregister_event_cb(pdev, DLN2_ADC_CONDITION_MET_EV);
  593. return ret;
  594. }
  595. static int dln2_adc_remove(struct platform_device *pdev)
  596. {
  597. struct iio_dev *indio_dev = platform_get_drvdata(pdev);
  598. iio_device_unregister(indio_dev);
  599. dln2_unregister_event_cb(pdev, DLN2_ADC_CONDITION_MET_EV);
  600. return 0;
  601. }
  602. static struct platform_driver dln2_adc_driver = {
  603. .driver.name = DLN2_ADC_MOD_NAME,
  604. .probe = dln2_adc_probe,
  605. .remove = dln2_adc_remove,
  606. };
  607. module_platform_driver(dln2_adc_driver);
  608. MODULE_AUTHOR("Jack Andersen <jackoalan@gmail.com");
  609. MODULE_DESCRIPTION("Driver for the Diolan DLN2 ADC interface");
  610. MODULE_LICENSE("GPL v2");
  611. MODULE_ALIAS("platform:dln2-adc");