ti-ads1119.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Texas Instruments ADS1119 ADC driver.
  4. *
  5. * Copyright 2024 Toradex
  6. */
  7. #include <linux/bits.h>
  8. #include <linux/bitfield.h>
  9. #include <linux/completion.h>
  10. #include <linux/delay.h>
  11. #include <linux/dev_printk.h>
  12. #include <linux/err.h>
  13. #include <linux/gpio/consumer.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/iopoll.h>
  16. #include <linux/i2c.h>
  17. #include <linux/kernel.h>
  18. #include <linux/math.h>
  19. #include <linux/module.h>
  20. #include <linux/pm_runtime.h>
  21. #include <linux/regulator/consumer.h>
  22. #include <linux/units.h>
  23. #include <linux/iio/iio.h>
  24. #include <linux/iio/buffer.h>
  25. #include <linux/iio/trigger.h>
  26. #include <linux/iio/triggered_buffer.h>
  27. #include <linux/iio/trigger_consumer.h>
  28. #define ADS1119_CMD_RESET 0x06
  29. #define ADS1119_CMD_POWERDOWN 0x02
  30. #define ADS1119_CMD_START_SYNC 0x08
  31. #define ADS1119_CMD_RDATA 0x10
  32. #define ADS1119_CMD_RREG_CONFIG 0x20
  33. #define ADS1119_CMD_RREG_STATUS 0x24
  34. #define ADS1119_CMD_WREG 0x40
  35. #define ADS1119_CMD_RREG(reg) (0x20 | (reg) << 2)
  36. /* Config register */
  37. #define ADS1119_REG_CONFIG 0x00
  38. #define ADS1119_CONFIG_VREF_FIELD BIT(0)
  39. #define ADS1119_CONFIG_CM_FIELD BIT(1)
  40. #define ADS1119_CONFIG_DR_FIELD GENMASK(3, 2)
  41. #define ADS1119_CONFIG_GAIN_FIELD BIT(4)
  42. #define ADS1119_CONFIG_MUX_FIELD GENMASK(7, 5)
  43. #define ADS1119_VREF_INTERNAL 0
  44. #define ADS1119_VREF_EXTERNAL 1
  45. #define ADS1119_VREF_INTERNAL_VAL 2048000
  46. #define ADS1119_CM_SINGLE 0
  47. #define ADS1119_CM_CONTINUOUS 1
  48. #define ADS1119_DR_20_SPS 0
  49. #define ADS1119_DR_90_SPS 1
  50. #define ADS1119_DR_330_SPS 2
  51. #define ADS1119_DR_1000_SPS 3
  52. #define ADS1119_GAIN_1 0
  53. #define ADS1119_GAIN_4 1
  54. #define ADS1119_MUX_AIN0_AIN1 0
  55. #define ADS1119_MUX_AIN2_AIN3 1
  56. #define ADS1119_MUX_AIN1_AIN2 2
  57. #define ADS1119_MUX_AIN0 3
  58. #define ADS1119_MUX_AIN1 4
  59. #define ADS1119_MUX_AIN2 5
  60. #define ADS1119_MUX_AIN3 6
  61. #define ADS1119_MUX_SHORTED 7
  62. /* Status register */
  63. #define ADS1119_REG_STATUS 0x01
  64. #define ADS1119_STATUS_DRDY_FIELD BIT(7)
  65. #define ADS1119_DEFAULT_GAIN 1
  66. #define ADS1119_DEFAULT_DATARATE 20
  67. #define ADS1119_SUSPEND_DELAY 2000
  68. /* Timeout based on the minimum sample rate of 20 SPS (50000us) */
  69. #define ADS1119_MAX_DRDY_TIMEOUT 85000
  70. #define ADS1119_MAX_CHANNELS 7
  71. #define ADS1119_MAX_SINGLE_CHANNELS 4
  72. struct ads1119_channel_config {
  73. int gain;
  74. int datarate;
  75. int mux;
  76. };
  77. struct ads1119_state {
  78. struct completion completion;
  79. struct i2c_client *client;
  80. struct gpio_desc *reset_gpio;
  81. struct iio_trigger *trig;
  82. struct ads1119_channel_config *channels_cfg;
  83. unsigned int num_channels_cfg;
  84. unsigned int cached_config;
  85. int vref_uV;
  86. };
  87. static const char * const ads1119_power_supplies[] = {
  88. "avdd", "dvdd"
  89. };
  90. static const int ads1119_available_datarates[] = {
  91. 20, 90, 330, 1000,
  92. };
  93. static const int ads1119_available_gains[] = {
  94. 1, 1,
  95. 1, 4,
  96. };
  97. static int ads1119_upd_cfg_reg(struct ads1119_state *st, unsigned int fields,
  98. unsigned int val)
  99. {
  100. unsigned int config = st->cached_config;
  101. int ret;
  102. config &= ~fields;
  103. config |= val;
  104. ret = i2c_smbus_write_byte_data(st->client, ADS1119_CMD_WREG, config);
  105. if (ret)
  106. return ret;
  107. st->cached_config = config;
  108. return 0;
  109. }
  110. static bool ads1119_data_ready(struct ads1119_state *st)
  111. {
  112. int status;
  113. status = i2c_smbus_read_byte_data(st->client, ADS1119_CMD_RREG_STATUS);
  114. if (status < 0)
  115. return false;
  116. return FIELD_GET(ADS1119_STATUS_DRDY_FIELD, status);
  117. }
  118. static int ads1119_reset(struct ads1119_state *st)
  119. {
  120. st->cached_config = 0;
  121. if (!st->reset_gpio)
  122. return i2c_smbus_write_byte(st->client, ADS1119_CMD_RESET);
  123. gpiod_set_value_cansleep(st->reset_gpio, 1);
  124. udelay(1);
  125. gpiod_set_value_cansleep(st->reset_gpio, 0);
  126. udelay(1);
  127. return 0;
  128. }
  129. static int ads1119_set_conv_mode(struct ads1119_state *st, bool continuous)
  130. {
  131. unsigned int mode;
  132. if (continuous)
  133. mode = ADS1119_CM_CONTINUOUS;
  134. else
  135. mode = ADS1119_CM_SINGLE;
  136. return ads1119_upd_cfg_reg(st, ADS1119_CONFIG_CM_FIELD,
  137. FIELD_PREP(ADS1119_CONFIG_CM_FIELD, mode));
  138. }
  139. static int ads1119_get_hw_gain(int gain)
  140. {
  141. if (gain == 4)
  142. return ADS1119_GAIN_4;
  143. else
  144. return ADS1119_GAIN_1;
  145. }
  146. static int ads1119_get_hw_datarate(int datarate)
  147. {
  148. switch (datarate) {
  149. case 90:
  150. return ADS1119_DR_90_SPS;
  151. case 330:
  152. return ADS1119_DR_330_SPS;
  153. case 1000:
  154. return ADS1119_DR_1000_SPS;
  155. case 20:
  156. default:
  157. return ADS1119_DR_20_SPS;
  158. }
  159. }
  160. static int ads1119_configure_channel(struct ads1119_state *st, int mux,
  161. int gain, int datarate)
  162. {
  163. int ret;
  164. ret = ads1119_upd_cfg_reg(st, ADS1119_CONFIG_MUX_FIELD,
  165. FIELD_PREP(ADS1119_CONFIG_MUX_FIELD, mux));
  166. if (ret)
  167. return ret;
  168. ret = ads1119_upd_cfg_reg(st, ADS1119_CONFIG_GAIN_FIELD,
  169. FIELD_PREP(ADS1119_CONFIG_GAIN_FIELD,
  170. ads1119_get_hw_gain(gain)));
  171. if (ret)
  172. return ret;
  173. return ads1119_upd_cfg_reg(st, ADS1119_CONFIG_DR_FIELD,
  174. FIELD_PREP(ADS1119_CONFIG_DR_FIELD,
  175. ads1119_get_hw_datarate(datarate)));
  176. }
  177. static int ads1119_poll_data_ready(struct ads1119_state *st,
  178. struct iio_chan_spec const *chan)
  179. {
  180. unsigned int datarate = st->channels_cfg[chan->address].datarate;
  181. unsigned long wait_time;
  182. bool data_ready;
  183. /* Poll 5 times more than the data rate */
  184. wait_time = DIV_ROUND_CLOSEST(MICRO, 5 * datarate);
  185. return read_poll_timeout(ads1119_data_ready, data_ready,
  186. data_ready, wait_time,
  187. ADS1119_MAX_DRDY_TIMEOUT, false, st);
  188. }
  189. static int ads1119_read_data(struct ads1119_state *st,
  190. struct iio_chan_spec const *chan,
  191. unsigned int *val)
  192. {
  193. unsigned int timeout;
  194. int ret = 0;
  195. timeout = msecs_to_jiffies(ADS1119_MAX_DRDY_TIMEOUT);
  196. if (!st->client->irq) {
  197. ret = ads1119_poll_data_ready(st, chan);
  198. if (ret)
  199. return ret;
  200. } else if (!wait_for_completion_timeout(&st->completion, timeout)) {
  201. return -ETIMEDOUT;
  202. }
  203. ret = i2c_smbus_read_word_swapped(st->client, ADS1119_CMD_RDATA);
  204. if (ret < 0)
  205. return ret;
  206. *val = ret;
  207. return 0;
  208. }
  209. static int ads1119_single_conversion(struct ads1119_state *st,
  210. struct iio_chan_spec const *chan,
  211. int *val,
  212. bool calib_offset)
  213. {
  214. struct device *dev = &st->client->dev;
  215. int mux = st->channels_cfg[chan->address].mux;
  216. int gain = st->channels_cfg[chan->address].gain;
  217. int datarate = st->channels_cfg[chan->address].datarate;
  218. unsigned int sample;
  219. int ret;
  220. if (calib_offset)
  221. mux = ADS1119_MUX_SHORTED;
  222. ret = pm_runtime_resume_and_get(dev);
  223. if (ret)
  224. goto pdown;
  225. ret = ads1119_configure_channel(st, mux, gain, datarate);
  226. if (ret)
  227. goto pdown;
  228. ret = i2c_smbus_write_byte(st->client, ADS1119_CMD_START_SYNC);
  229. if (ret)
  230. goto pdown;
  231. ret = ads1119_read_data(st, chan, &sample);
  232. if (ret)
  233. goto pdown;
  234. *val = sign_extend32(sample, chan->scan_type.realbits - 1);
  235. ret = IIO_VAL_INT;
  236. pdown:
  237. pm_runtime_mark_last_busy(dev);
  238. pm_runtime_put_autosuspend(dev);
  239. return ret;
  240. }
  241. static int ads1119_validate_datarate(struct ads1119_state *st, int datarate)
  242. {
  243. switch (datarate) {
  244. case 20:
  245. case 90:
  246. case 330:
  247. case 1000:
  248. return datarate;
  249. default:
  250. return -EINVAL;
  251. }
  252. }
  253. static int ads1119_read_avail(struct iio_dev *indio_dev,
  254. struct iio_chan_spec const *chan,
  255. const int **vals, int *type, int *length,
  256. long mask)
  257. {
  258. switch (mask) {
  259. case IIO_CHAN_INFO_SCALE:
  260. *type = IIO_VAL_FRACTIONAL;
  261. *vals = ads1119_available_gains;
  262. *length = ARRAY_SIZE(ads1119_available_gains);
  263. return IIO_AVAIL_LIST;
  264. case IIO_CHAN_INFO_SAMP_FREQ:
  265. *type = IIO_VAL_INT;
  266. *vals = ads1119_available_datarates;
  267. *length = ARRAY_SIZE(ads1119_available_datarates);
  268. return IIO_AVAIL_LIST;
  269. default:
  270. return -EINVAL;
  271. }
  272. }
  273. static int ads1119_read_raw(struct iio_dev *indio_dev,
  274. struct iio_chan_spec const *chan, int *val,
  275. int *val2, long mask)
  276. {
  277. struct ads1119_state *st = iio_priv(indio_dev);
  278. unsigned int index = chan->address;
  279. if (index >= st->num_channels_cfg)
  280. return -EINVAL;
  281. switch (mask) {
  282. case IIO_CHAN_INFO_RAW:
  283. iio_device_claim_direct_scoped(return -EBUSY, indio_dev)
  284. return ads1119_single_conversion(st, chan, val, false);
  285. unreachable();
  286. case IIO_CHAN_INFO_OFFSET:
  287. iio_device_claim_direct_scoped(return -EBUSY, indio_dev)
  288. return ads1119_single_conversion(st, chan, val, true);
  289. unreachable();
  290. case IIO_CHAN_INFO_SCALE:
  291. *val = st->vref_uV / 1000;
  292. *val /= st->channels_cfg[index].gain;
  293. *val2 = chan->scan_type.realbits - 1;
  294. return IIO_VAL_FRACTIONAL_LOG2;
  295. case IIO_CHAN_INFO_SAMP_FREQ:
  296. *val = st->channels_cfg[index].datarate;
  297. return IIO_VAL_INT;
  298. default:
  299. return -EINVAL;
  300. }
  301. }
  302. static int ads1119_write_raw(struct iio_dev *indio_dev,
  303. struct iio_chan_spec const *chan, int val,
  304. int val2, long mask)
  305. {
  306. struct ads1119_state *st = iio_priv(indio_dev);
  307. unsigned int index = chan->address;
  308. int ret;
  309. if (index >= st->num_channels_cfg)
  310. return -EINVAL;
  311. switch (mask) {
  312. case IIO_CHAN_INFO_SCALE:
  313. ret = MICRO / ((val * MICRO) + val2);
  314. if (ret != 1 && ret != 4)
  315. return -EINVAL;
  316. st->channels_cfg[index].gain = ret;
  317. return 0;
  318. case IIO_CHAN_INFO_SAMP_FREQ:
  319. ret = ads1119_validate_datarate(st, val);
  320. if (ret < 0)
  321. return ret;
  322. st->channels_cfg[index].datarate = ret;
  323. return 0;
  324. default:
  325. return -EINVAL;
  326. }
  327. }
  328. static int ads1119_debugfs_reg_access(struct iio_dev *indio_dev,
  329. unsigned int reg, unsigned int writeval,
  330. unsigned int *readval)
  331. {
  332. struct ads1119_state *st = iio_priv(indio_dev);
  333. int ret;
  334. if (reg > ADS1119_REG_STATUS)
  335. return -EINVAL;
  336. if (readval) {
  337. ret = i2c_smbus_read_byte_data(st->client,
  338. ADS1119_CMD_RREG(reg));
  339. if (ret < 0)
  340. return ret;
  341. *readval = ret;
  342. return 0;
  343. }
  344. if (reg > ADS1119_REG_CONFIG)
  345. return -EINVAL;
  346. return i2c_smbus_write_byte_data(st->client, ADS1119_CMD_WREG,
  347. writeval);
  348. }
  349. static const struct iio_info ads1119_info = {
  350. .read_avail = ads1119_read_avail,
  351. .read_raw = ads1119_read_raw,
  352. .write_raw = ads1119_write_raw,
  353. .debugfs_reg_access = ads1119_debugfs_reg_access,
  354. };
  355. static int ads1119_triggered_buffer_preenable(struct iio_dev *indio_dev)
  356. {
  357. struct ads1119_state *st = iio_priv(indio_dev);
  358. struct device *dev = &st->client->dev;
  359. unsigned int index;
  360. int ret;
  361. index = find_first_bit(indio_dev->active_scan_mask,
  362. iio_get_masklength(indio_dev));
  363. ret = ads1119_set_conv_mode(st, true);
  364. if (ret)
  365. return ret;
  366. ret = ads1119_configure_channel(st,
  367. st->channels_cfg[index].mux,
  368. st->channels_cfg[index].gain,
  369. st->channels_cfg[index].datarate);
  370. if (ret)
  371. return ret;
  372. ret = pm_runtime_resume_and_get(dev);
  373. if (ret)
  374. return ret;
  375. return i2c_smbus_write_byte(st->client, ADS1119_CMD_START_SYNC);
  376. }
  377. static int ads1119_triggered_buffer_postdisable(struct iio_dev *indio_dev)
  378. {
  379. struct ads1119_state *st = iio_priv(indio_dev);
  380. struct device *dev = &st->client->dev;
  381. int ret;
  382. ret = ads1119_set_conv_mode(st, false);
  383. if (ret)
  384. return ret;
  385. pm_runtime_mark_last_busy(dev);
  386. pm_runtime_put_autosuspend(dev);
  387. return 0;
  388. }
  389. static const struct iio_buffer_setup_ops ads1119_buffer_setup_ops = {
  390. .preenable = ads1119_triggered_buffer_preenable,
  391. .postdisable = ads1119_triggered_buffer_postdisable,
  392. .validate_scan_mask = &iio_validate_scan_mask_onehot,
  393. };
  394. static const struct iio_trigger_ops ads1119_trigger_ops = {
  395. .validate_device = &iio_trigger_validate_own_device,
  396. };
  397. static irqreturn_t ads1119_irq_handler(int irq, void *dev_id)
  398. {
  399. struct iio_dev *indio_dev = dev_id;
  400. struct ads1119_state *st = iio_priv(indio_dev);
  401. if (iio_buffer_enabled(indio_dev) && iio_trigger_using_own(indio_dev))
  402. iio_trigger_poll(indio_dev->trig);
  403. else
  404. complete(&st->completion);
  405. return IRQ_HANDLED;
  406. }
  407. static irqreturn_t ads1119_trigger_handler(int irq, void *private)
  408. {
  409. struct iio_poll_func *pf = private;
  410. struct iio_dev *indio_dev = pf->indio_dev;
  411. struct ads1119_state *st = iio_priv(indio_dev);
  412. struct {
  413. s16 sample;
  414. s64 timestamp __aligned(8);
  415. } scan;
  416. unsigned int index;
  417. int ret;
  418. memset(&scan, 0, sizeof(scan));
  419. if (!iio_trigger_using_own(indio_dev)) {
  420. index = find_first_bit(indio_dev->active_scan_mask,
  421. iio_get_masklength(indio_dev));
  422. ret = ads1119_poll_data_ready(st, &indio_dev->channels[index]);
  423. if (ret) {
  424. dev_err(&st->client->dev,
  425. "Failed to poll data on trigger (%d)\n", ret);
  426. goto done;
  427. }
  428. }
  429. ret = i2c_smbus_read_word_swapped(st->client, ADS1119_CMD_RDATA);
  430. if (ret < 0) {
  431. dev_err(&st->client->dev,
  432. "Failed to read data on trigger (%d)\n", ret);
  433. goto done;
  434. }
  435. scan.sample = ret;
  436. iio_push_to_buffers_with_timestamp(indio_dev, &scan,
  437. iio_get_time_ns(indio_dev));
  438. done:
  439. iio_trigger_notify_done(indio_dev->trig);
  440. return IRQ_HANDLED;
  441. }
  442. static int ads1119_init(struct ads1119_state *st, bool vref_external)
  443. {
  444. int ret;
  445. ret = ads1119_reset(st);
  446. if (ret)
  447. return ret;
  448. if (vref_external)
  449. return ads1119_upd_cfg_reg(st,
  450. ADS1119_CONFIG_VREF_FIELD,
  451. FIELD_PREP(ADS1119_CONFIG_VREF_FIELD,
  452. ADS1119_VREF_EXTERNAL));
  453. return 0;
  454. }
  455. static int ads1119_map_analog_inputs_mux(int ain_pos, int ain_neg,
  456. bool differential)
  457. {
  458. if (ain_pos >= ADS1119_MAX_SINGLE_CHANNELS)
  459. return -EINVAL;
  460. if (!differential)
  461. return ADS1119_MUX_AIN0 + ain_pos;
  462. if (ain_pos == 0 && ain_neg == 1)
  463. return ADS1119_MUX_AIN0_AIN1;
  464. else if (ain_pos == 1 && ain_neg == 2)
  465. return ADS1119_MUX_AIN1_AIN2;
  466. else if (ain_pos == 2 && ain_neg == 3)
  467. return ADS1119_MUX_AIN2_AIN3;
  468. return -EINVAL;
  469. }
  470. static int ads1119_alloc_and_config_channels(struct iio_dev *indio_dev)
  471. {
  472. const struct iio_chan_spec ads1119_channel =
  473. (const struct iio_chan_spec) {
  474. .type = IIO_VOLTAGE,
  475. .indexed = 1,
  476. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  477. BIT(IIO_CHAN_INFO_SCALE) |
  478. BIT(IIO_CHAN_INFO_OFFSET) |
  479. BIT(IIO_CHAN_INFO_SAMP_FREQ),
  480. .info_mask_shared_by_all_available =
  481. BIT(IIO_CHAN_INFO_SCALE) |
  482. BIT(IIO_CHAN_INFO_SAMP_FREQ),
  483. .scan_type = {
  484. .sign = 's',
  485. .realbits = 16,
  486. .storagebits = 16,
  487. .endianness = IIO_CPU,
  488. },
  489. };
  490. const struct iio_chan_spec ads1119_ts = IIO_CHAN_SOFT_TIMESTAMP(0);
  491. struct ads1119_state *st = iio_priv(indio_dev);
  492. struct iio_chan_spec *iio_channels, *chan;
  493. struct device *dev = &st->client->dev;
  494. unsigned int num_channels, i;
  495. bool differential;
  496. u32 ain[2];
  497. int ret;
  498. st->num_channels_cfg = device_get_child_node_count(dev);
  499. if (st->num_channels_cfg > ADS1119_MAX_CHANNELS)
  500. return dev_err_probe(dev, -EINVAL,
  501. "Too many channels %d, max is %d\n",
  502. st->num_channels_cfg,
  503. ADS1119_MAX_CHANNELS);
  504. st->channels_cfg = devm_kcalloc(dev, st->num_channels_cfg,
  505. sizeof(*st->channels_cfg), GFP_KERNEL);
  506. if (!st->channels_cfg)
  507. return -ENOMEM;
  508. /* Allocate one more iio channel for the timestamp */
  509. num_channels = st->num_channels_cfg + 1;
  510. iio_channels = devm_kcalloc(dev, num_channels, sizeof(*iio_channels),
  511. GFP_KERNEL);
  512. if (!iio_channels)
  513. return -ENOMEM;
  514. i = 0;
  515. device_for_each_child_node_scoped(dev, child) {
  516. chan = &iio_channels[i];
  517. differential = fwnode_property_present(child, "diff-channels");
  518. if (differential)
  519. ret = fwnode_property_read_u32_array(child,
  520. "diff-channels",
  521. ain, 2);
  522. else
  523. ret = fwnode_property_read_u32(child, "single-channel",
  524. &ain[0]);
  525. if (ret)
  526. return dev_err_probe(dev, ret,
  527. "Failed to get channel property\n");
  528. ret = ads1119_map_analog_inputs_mux(ain[0], ain[1],
  529. differential);
  530. if (ret < 0)
  531. return dev_err_probe(dev, ret,
  532. "Invalid channel value\n");
  533. st->channels_cfg[i].mux = ret;
  534. st->channels_cfg[i].gain = ADS1119_DEFAULT_GAIN;
  535. st->channels_cfg[i].datarate = ADS1119_DEFAULT_DATARATE;
  536. *chan = ads1119_channel;
  537. chan->channel = ain[0];
  538. chan->address = i;
  539. chan->scan_index = i;
  540. if (differential) {
  541. chan->channel2 = ain[1];
  542. chan->differential = 1;
  543. }
  544. dev_dbg(dev, "channel: index %d, mux %d\n", i,
  545. st->channels_cfg[i].mux);
  546. i++;
  547. }
  548. iio_channels[i] = ads1119_ts;
  549. iio_channels[i].address = i;
  550. iio_channels[i].scan_index = i;
  551. indio_dev->channels = iio_channels;
  552. indio_dev->num_channels = num_channels;
  553. return 0;
  554. }
  555. static void ads1119_powerdown(void *data)
  556. {
  557. struct ads1119_state *st = data;
  558. i2c_smbus_write_byte(st->client, ADS1119_CMD_POWERDOWN);
  559. }
  560. static int ads1119_probe(struct i2c_client *client)
  561. {
  562. struct iio_dev *indio_dev;
  563. struct ads1119_state *st;
  564. struct device *dev = &client->dev;
  565. bool vref_external = true;
  566. int ret;
  567. indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
  568. if (!indio_dev)
  569. return dev_err_probe(dev, -ENOMEM,
  570. "Failed to allocate IIO device\n");
  571. st = iio_priv(indio_dev);
  572. st->client = client;
  573. indio_dev->name = "ads1119";
  574. indio_dev->info = &ads1119_info;
  575. indio_dev->modes = INDIO_DIRECT_MODE;
  576. i2c_set_clientdata(client, indio_dev);
  577. ret = devm_regulator_bulk_get_enable(dev,
  578. ARRAY_SIZE(ads1119_power_supplies),
  579. ads1119_power_supplies);
  580. if (ret)
  581. return dev_err_probe(dev, ret,
  582. "Failed to get and enable supplies\n");
  583. st->vref_uV = devm_regulator_get_enable_read_voltage(dev, "vref");
  584. if (st->vref_uV == -ENODEV) {
  585. vref_external = false;
  586. st->vref_uV = ADS1119_VREF_INTERNAL_VAL;
  587. } else if (st->vref_uV < 0) {
  588. return dev_err_probe(dev, st->vref_uV, "Failed to get vref\n");
  589. }
  590. st->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
  591. if (IS_ERR(st->reset_gpio))
  592. return dev_err_probe(dev, PTR_ERR(st->reset_gpio),
  593. "Failed to get reset gpio\n");
  594. ret = ads1119_alloc_and_config_channels(indio_dev);
  595. if (ret)
  596. return ret;
  597. init_completion(&st->completion);
  598. ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
  599. ads1119_trigger_handler,
  600. &ads1119_buffer_setup_ops);
  601. if (ret)
  602. return dev_err_probe(dev, ret, "Failed to setup IIO buffer\n");
  603. if (client->irq > 0) {
  604. ret = devm_request_threaded_irq(dev, client->irq,
  605. ads1119_irq_handler,
  606. NULL, IRQF_ONESHOT,
  607. "ads1119", indio_dev);
  608. if (ret)
  609. return dev_err_probe(dev, ret,
  610. "Failed to allocate irq\n");
  611. st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
  612. indio_dev->name,
  613. iio_device_id(indio_dev));
  614. if (!st->trig)
  615. return dev_err_probe(dev, -ENOMEM,
  616. "Failed to allocate IIO trigger\n");
  617. st->trig->ops = &ads1119_trigger_ops;
  618. iio_trigger_set_drvdata(st->trig, indio_dev);
  619. ret = devm_iio_trigger_register(dev, st->trig);
  620. if (ret)
  621. return dev_err_probe(dev, ret,
  622. "Failed to register IIO trigger\n");
  623. }
  624. ret = ads1119_init(st, vref_external);
  625. if (ret)
  626. return dev_err_probe(dev, ret,
  627. "Failed to initialize device\n");
  628. pm_runtime_set_autosuspend_delay(dev, ADS1119_SUSPEND_DELAY);
  629. pm_runtime_use_autosuspend(dev);
  630. pm_runtime_mark_last_busy(dev);
  631. pm_runtime_set_active(dev);
  632. ret = devm_pm_runtime_enable(dev);
  633. if (ret)
  634. return dev_err_probe(dev, ret, "Failed to enable pm runtime\n");
  635. ret = devm_add_action_or_reset(dev, ads1119_powerdown, st);
  636. if (ret)
  637. return dev_err_probe(dev, ret,
  638. "Failed to add powerdown action\n");
  639. return devm_iio_device_register(dev, indio_dev);
  640. }
  641. static int ads1119_runtime_suspend(struct device *dev)
  642. {
  643. struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
  644. struct ads1119_state *st = iio_priv(indio_dev);
  645. return i2c_smbus_write_byte(st->client, ADS1119_CMD_POWERDOWN);
  646. }
  647. /*
  648. * The ADS1119 does not require a resume function because it automatically
  649. * powers on after a reset.
  650. * After a power down command, the ADS1119 can still communicate but turns off
  651. * its analog parts. To resume from power down, the device will power up again
  652. * upon receiving a start/sync command.
  653. */
  654. static DEFINE_RUNTIME_DEV_PM_OPS(ads1119_pm_ops, ads1119_runtime_suspend,
  655. NULL, NULL);
  656. static const struct of_device_id __maybe_unused ads1119_of_match[] = {
  657. { .compatible = "ti,ads1119" },
  658. { }
  659. };
  660. MODULE_DEVICE_TABLE(of, ads1119_of_match);
  661. static const struct i2c_device_id ads1119_id[] = {
  662. { "ads1119", 0 },
  663. { }
  664. };
  665. MODULE_DEVICE_TABLE(i2c, ads1119_id);
  666. static struct i2c_driver ads1119_driver = {
  667. .driver = {
  668. .name = "ads1119",
  669. .of_match_table = ads1119_of_match,
  670. .pm = pm_ptr(&ads1119_pm_ops),
  671. },
  672. .probe = ads1119_probe,
  673. .id_table = ads1119_id,
  674. };
  675. module_i2c_driver(ads1119_driver);
  676. MODULE_AUTHOR("João Paulo Gonçalves <joao.goncalves@toradex.com>");
  677. MODULE_DESCRIPTION("Texas Instruments ADS1119 ADC Driver");
  678. MODULE_LICENSE("GPL");