ti-ads1015.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152
  1. /*
  2. * ADS1015 - Texas Instruments Analog-to-Digital Converter
  3. *
  4. * Copyright (c) 2016, Intel Corporation.
  5. *
  6. * This file is subject to the terms and conditions of version 2 of
  7. * the GNU General Public License. See the file COPYING in the main
  8. * directory of this archive for more details.
  9. *
  10. * IIO driver for ADS1015 ADC 7-bit I2C slave address:
  11. * * 0x48 - ADDR connected to Ground
  12. * * 0x49 - ADDR connected to Vdd
  13. * * 0x4A - ADDR connected to SDA
  14. * * 0x4B - ADDR connected to SCL
  15. */
  16. #include <linux/module.h>
  17. #include <linux/of_device.h>
  18. #include <linux/init.h>
  19. #include <linux/irq.h>
  20. #include <linux/i2c.h>
  21. #include <linux/regmap.h>
  22. #include <linux/pm_runtime.h>
  23. #include <linux/mutex.h>
  24. #include <linux/delay.h>
  25. #include <linux/platform_data/ads1015.h>
  26. #include <linux/iio/iio.h>
  27. #include <linux/iio/types.h>
  28. #include <linux/iio/sysfs.h>
  29. #include <linux/iio/events.h>
  30. #include <linux/iio/buffer.h>
  31. #include <linux/iio/triggered_buffer.h>
  32. #include <linux/iio/trigger_consumer.h>
  33. #define ADS1015_DRV_NAME "ads1015"
  34. #define ADS1015_CONV_REG 0x00
  35. #define ADS1015_CFG_REG 0x01
  36. #define ADS1015_LO_THRESH_REG 0x02
  37. #define ADS1015_HI_THRESH_REG 0x03
  38. #define ADS1015_CFG_COMP_QUE_SHIFT 0
  39. #define ADS1015_CFG_COMP_LAT_SHIFT 2
  40. #define ADS1015_CFG_COMP_POL_SHIFT 3
  41. #define ADS1015_CFG_COMP_MODE_SHIFT 4
  42. #define ADS1015_CFG_DR_SHIFT 5
  43. #define ADS1015_CFG_MOD_SHIFT 8
  44. #define ADS1015_CFG_PGA_SHIFT 9
  45. #define ADS1015_CFG_MUX_SHIFT 12
  46. #define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0)
  47. #define ADS1015_CFG_COMP_LAT_MASK BIT(2)
  48. #define ADS1015_CFG_COMP_POL_MASK BIT(3)
  49. #define ADS1015_CFG_COMP_MODE_MASK BIT(4)
  50. #define ADS1015_CFG_DR_MASK GENMASK(7, 5)
  51. #define ADS1015_CFG_MOD_MASK BIT(8)
  52. #define ADS1015_CFG_PGA_MASK GENMASK(11, 9)
  53. #define ADS1015_CFG_MUX_MASK GENMASK(14, 12)
  54. /* Comparator queue and disable field */
  55. #define ADS1015_CFG_COMP_DISABLE 3
  56. /* Comparator polarity field */
  57. #define ADS1015_CFG_COMP_POL_LOW 0
  58. #define ADS1015_CFG_COMP_POL_HIGH 1
  59. /* Comparator mode field */
  60. #define ADS1015_CFG_COMP_MODE_TRAD 0
  61. #define ADS1015_CFG_COMP_MODE_WINDOW 1
  62. /* device operating modes */
  63. #define ADS1015_CONTINUOUS 0
  64. #define ADS1015_SINGLESHOT 1
  65. #define ADS1015_SLEEP_DELAY_MS 2000
  66. #define ADS1015_DEFAULT_PGA 2
  67. #define ADS1015_DEFAULT_DATA_RATE 4
  68. #define ADS1015_DEFAULT_CHAN 0
  69. enum chip_ids {
  70. ADS1015,
  71. ADS1115,
  72. };
  73. enum ads1015_channels {
  74. ADS1015_AIN0_AIN1 = 0,
  75. ADS1015_AIN0_AIN3,
  76. ADS1015_AIN1_AIN3,
  77. ADS1015_AIN2_AIN3,
  78. ADS1015_AIN0,
  79. ADS1015_AIN1,
  80. ADS1015_AIN2,
  81. ADS1015_AIN3,
  82. ADS1015_TIMESTAMP,
  83. };
  84. static const unsigned int ads1015_data_rate[] = {
  85. 128, 250, 490, 920, 1600, 2400, 3300, 3300
  86. };
  87. static const unsigned int ads1115_data_rate[] = {
  88. 8, 16, 32, 64, 128, 250, 475, 860
  89. };
  90. /*
  91. * Translation from PGA bits to full-scale positive and negative input voltage
  92. * range in mV
  93. */
  94. static int ads1015_fullscale_range[] = {
  95. 6144, 4096, 2048, 1024, 512, 256, 256, 256
  96. };
  97. /*
  98. * Translation from COMP_QUE field value to the number of successive readings
  99. * exceed the threshold values before an interrupt is generated
  100. */
  101. static const int ads1015_comp_queue[] = { 1, 2, 4 };
  102. static const struct iio_event_spec ads1015_events[] = {
  103. {
  104. .type = IIO_EV_TYPE_THRESH,
  105. .dir = IIO_EV_DIR_RISING,
  106. .mask_separate = BIT(IIO_EV_INFO_VALUE) |
  107. BIT(IIO_EV_INFO_ENABLE),
  108. }, {
  109. .type = IIO_EV_TYPE_THRESH,
  110. .dir = IIO_EV_DIR_FALLING,
  111. .mask_separate = BIT(IIO_EV_INFO_VALUE),
  112. }, {
  113. .type = IIO_EV_TYPE_THRESH,
  114. .dir = IIO_EV_DIR_EITHER,
  115. .mask_separate = BIT(IIO_EV_INFO_ENABLE) |
  116. BIT(IIO_EV_INFO_PERIOD),
  117. },
  118. };
  119. #define ADS1015_V_CHAN(_chan, _addr) { \
  120. .type = IIO_VOLTAGE, \
  121. .indexed = 1, \
  122. .address = _addr, \
  123. .channel = _chan, \
  124. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  125. BIT(IIO_CHAN_INFO_SCALE) | \
  126. BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  127. .scan_index = _addr, \
  128. .scan_type = { \
  129. .sign = 's', \
  130. .realbits = 12, \
  131. .storagebits = 16, \
  132. .shift = 4, \
  133. .endianness = IIO_CPU, \
  134. }, \
  135. .event_spec = ads1015_events, \
  136. .num_event_specs = ARRAY_SIZE(ads1015_events), \
  137. .datasheet_name = "AIN"#_chan, \
  138. }
  139. #define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr) { \
  140. .type = IIO_VOLTAGE, \
  141. .differential = 1, \
  142. .indexed = 1, \
  143. .address = _addr, \
  144. .channel = _chan, \
  145. .channel2 = _chan2, \
  146. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  147. BIT(IIO_CHAN_INFO_SCALE) | \
  148. BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  149. .scan_index = _addr, \
  150. .scan_type = { \
  151. .sign = 's', \
  152. .realbits = 12, \
  153. .storagebits = 16, \
  154. .shift = 4, \
  155. .endianness = IIO_CPU, \
  156. }, \
  157. .event_spec = ads1015_events, \
  158. .num_event_specs = ARRAY_SIZE(ads1015_events), \
  159. .datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
  160. }
  161. #define ADS1115_V_CHAN(_chan, _addr) { \
  162. .type = IIO_VOLTAGE, \
  163. .indexed = 1, \
  164. .address = _addr, \
  165. .channel = _chan, \
  166. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  167. BIT(IIO_CHAN_INFO_SCALE) | \
  168. BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  169. .scan_index = _addr, \
  170. .scan_type = { \
  171. .sign = 's', \
  172. .realbits = 16, \
  173. .storagebits = 16, \
  174. .endianness = IIO_CPU, \
  175. }, \
  176. .event_spec = ads1015_events, \
  177. .num_event_specs = ARRAY_SIZE(ads1015_events), \
  178. .datasheet_name = "AIN"#_chan, \
  179. }
  180. #define ADS1115_V_DIFF_CHAN(_chan, _chan2, _addr) { \
  181. .type = IIO_VOLTAGE, \
  182. .differential = 1, \
  183. .indexed = 1, \
  184. .address = _addr, \
  185. .channel = _chan, \
  186. .channel2 = _chan2, \
  187. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  188. BIT(IIO_CHAN_INFO_SCALE) | \
  189. BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  190. .scan_index = _addr, \
  191. .scan_type = { \
  192. .sign = 's', \
  193. .realbits = 16, \
  194. .storagebits = 16, \
  195. .endianness = IIO_CPU, \
  196. }, \
  197. .event_spec = ads1015_events, \
  198. .num_event_specs = ARRAY_SIZE(ads1015_events), \
  199. .datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
  200. }
  201. struct ads1015_thresh_data {
  202. unsigned int comp_queue;
  203. int high_thresh;
  204. int low_thresh;
  205. };
  206. struct ads1015_data {
  207. struct regmap *regmap;
  208. /*
  209. * Protects ADC ops, e.g: concurrent sysfs/buffered
  210. * data reads, configuration updates
  211. */
  212. struct mutex lock;
  213. struct ads1015_channel_data channel_data[ADS1015_CHANNELS];
  214. unsigned int event_channel;
  215. unsigned int comp_mode;
  216. struct ads1015_thresh_data thresh_data[ADS1015_CHANNELS];
  217. unsigned int *data_rate;
  218. /*
  219. * Set to true when the ADC is switched to the continuous-conversion
  220. * mode and exits from a power-down state. This flag is used to avoid
  221. * getting the stale result from the conversion register.
  222. */
  223. bool conv_invalid;
  224. };
  225. static bool ads1015_event_channel_enabled(struct ads1015_data *data)
  226. {
  227. return (data->event_channel != ADS1015_CHANNELS);
  228. }
  229. static void ads1015_event_channel_enable(struct ads1015_data *data, int chan,
  230. int comp_mode)
  231. {
  232. WARN_ON(ads1015_event_channel_enabled(data));
  233. data->event_channel = chan;
  234. data->comp_mode = comp_mode;
  235. }
  236. static void ads1015_event_channel_disable(struct ads1015_data *data, int chan)
  237. {
  238. data->event_channel = ADS1015_CHANNELS;
  239. }
  240. static bool ads1015_is_writeable_reg(struct device *dev, unsigned int reg)
  241. {
  242. switch (reg) {
  243. case ADS1015_CFG_REG:
  244. case ADS1015_LO_THRESH_REG:
  245. case ADS1015_HI_THRESH_REG:
  246. return true;
  247. default:
  248. return false;
  249. }
  250. }
  251. static const struct regmap_config ads1015_regmap_config = {
  252. .reg_bits = 8,
  253. .val_bits = 16,
  254. .max_register = ADS1015_HI_THRESH_REG,
  255. .writeable_reg = ads1015_is_writeable_reg,
  256. };
  257. static const struct iio_chan_spec ads1015_channels[] = {
  258. ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1),
  259. ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3),
  260. ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3),
  261. ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3),
  262. ADS1015_V_CHAN(0, ADS1015_AIN0),
  263. ADS1015_V_CHAN(1, ADS1015_AIN1),
  264. ADS1015_V_CHAN(2, ADS1015_AIN2),
  265. ADS1015_V_CHAN(3, ADS1015_AIN3),
  266. IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
  267. };
  268. static const struct iio_chan_spec ads1115_channels[] = {
  269. ADS1115_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1),
  270. ADS1115_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3),
  271. ADS1115_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3),
  272. ADS1115_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3),
  273. ADS1115_V_CHAN(0, ADS1015_AIN0),
  274. ADS1115_V_CHAN(1, ADS1015_AIN1),
  275. ADS1115_V_CHAN(2, ADS1015_AIN2),
  276. ADS1115_V_CHAN(3, ADS1015_AIN3),
  277. IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
  278. };
  279. #ifdef CONFIG_PM
  280. static int ads1015_set_power_state(struct ads1015_data *data, bool on)
  281. {
  282. int ret;
  283. struct device *dev = regmap_get_device(data->regmap);
  284. if (on) {
  285. ret = pm_runtime_get_sync(dev);
  286. if (ret < 0)
  287. pm_runtime_put_noidle(dev);
  288. } else {
  289. pm_runtime_mark_last_busy(dev);
  290. ret = pm_runtime_put_autosuspend(dev);
  291. }
  292. return ret < 0 ? ret : 0;
  293. }
  294. #else /* !CONFIG_PM */
  295. static int ads1015_set_power_state(struct ads1015_data *data, bool on)
  296. {
  297. return 0;
  298. }
  299. #endif /* !CONFIG_PM */
  300. static
  301. int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
  302. {
  303. int ret, pga, dr, dr_old, conv_time;
  304. unsigned int old, mask, cfg;
  305. if (chan < 0 || chan >= ADS1015_CHANNELS)
  306. return -EINVAL;
  307. ret = regmap_read(data->regmap, ADS1015_CFG_REG, &old);
  308. if (ret)
  309. return ret;
  310. pga = data->channel_data[chan].pga;
  311. dr = data->channel_data[chan].data_rate;
  312. mask = ADS1015_CFG_MUX_MASK | ADS1015_CFG_PGA_MASK |
  313. ADS1015_CFG_DR_MASK;
  314. cfg = chan << ADS1015_CFG_MUX_SHIFT | pga << ADS1015_CFG_PGA_SHIFT |
  315. dr << ADS1015_CFG_DR_SHIFT;
  316. if (ads1015_event_channel_enabled(data)) {
  317. mask |= ADS1015_CFG_COMP_QUE_MASK | ADS1015_CFG_COMP_MODE_MASK;
  318. cfg |= data->thresh_data[chan].comp_queue <<
  319. ADS1015_CFG_COMP_QUE_SHIFT |
  320. data->comp_mode <<
  321. ADS1015_CFG_COMP_MODE_SHIFT;
  322. }
  323. cfg = (old & ~mask) | (cfg & mask);
  324. if (old != cfg) {
  325. ret = regmap_write(data->regmap, ADS1015_CFG_REG, cfg);
  326. if (ret)
  327. return ret;
  328. data->conv_invalid = true;
  329. }
  330. if (data->conv_invalid) {
  331. dr_old = (old & ADS1015_CFG_DR_MASK) >> ADS1015_CFG_DR_SHIFT;
  332. conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
  333. conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
  334. conv_time += conv_time / 10; /* 10% internal clock inaccuracy */
  335. usleep_range(conv_time, conv_time + 1);
  336. data->conv_invalid = false;
  337. }
  338. return regmap_read(data->regmap, ADS1015_CONV_REG, val);
  339. }
  340. static irqreturn_t ads1015_trigger_handler(int irq, void *p)
  341. {
  342. struct iio_poll_func *pf = p;
  343. struct iio_dev *indio_dev = pf->indio_dev;
  344. struct ads1015_data *data = iio_priv(indio_dev);
  345. s16 buf[8]; /* 1x s16 ADC val + 3x s16 padding + 4x s16 timestamp */
  346. int chan, ret, res;
  347. memset(buf, 0, sizeof(buf));
  348. mutex_lock(&data->lock);
  349. chan = find_first_bit(indio_dev->active_scan_mask,
  350. indio_dev->masklength);
  351. ret = ads1015_get_adc_result(data, chan, &res);
  352. if (ret < 0) {
  353. mutex_unlock(&data->lock);
  354. goto err;
  355. }
  356. buf[0] = res;
  357. mutex_unlock(&data->lock);
  358. iio_push_to_buffers_with_timestamp(indio_dev, buf,
  359. iio_get_time_ns(indio_dev));
  360. err:
  361. iio_trigger_notify_done(indio_dev->trig);
  362. return IRQ_HANDLED;
  363. }
  364. static int ads1015_set_scale(struct ads1015_data *data,
  365. struct iio_chan_spec const *chan,
  366. int scale, int uscale)
  367. {
  368. int i;
  369. int fullscale = div_s64((scale * 1000000LL + uscale) <<
  370. (chan->scan_type.realbits - 1), 1000000);
  371. for (i = 0; i < ARRAY_SIZE(ads1015_fullscale_range); i++) {
  372. if (ads1015_fullscale_range[i] == fullscale) {
  373. data->channel_data[chan->address].pga = i;
  374. return 0;
  375. }
  376. }
  377. return -EINVAL;
  378. }
  379. static int ads1015_set_data_rate(struct ads1015_data *data, int chan, int rate)
  380. {
  381. int i;
  382. for (i = 0; i < ARRAY_SIZE(ads1015_data_rate); i++) {
  383. if (data->data_rate[i] == rate) {
  384. data->channel_data[chan].data_rate = i;
  385. return 0;
  386. }
  387. }
  388. return -EINVAL;
  389. }
  390. static int ads1015_read_raw(struct iio_dev *indio_dev,
  391. struct iio_chan_spec const *chan, int *val,
  392. int *val2, long mask)
  393. {
  394. int ret, idx;
  395. struct ads1015_data *data = iio_priv(indio_dev);
  396. mutex_lock(&data->lock);
  397. switch (mask) {
  398. case IIO_CHAN_INFO_RAW: {
  399. int shift = chan->scan_type.shift;
  400. ret = iio_device_claim_direct_mode(indio_dev);
  401. if (ret)
  402. break;
  403. if (ads1015_event_channel_enabled(data) &&
  404. data->event_channel != chan->address) {
  405. ret = -EBUSY;
  406. goto release_direct;
  407. }
  408. ret = ads1015_set_power_state(data, true);
  409. if (ret < 0)
  410. goto release_direct;
  411. ret = ads1015_get_adc_result(data, chan->address, val);
  412. if (ret < 0) {
  413. ads1015_set_power_state(data, false);
  414. goto release_direct;
  415. }
  416. *val = sign_extend32(*val >> shift, 15 - shift);
  417. ret = ads1015_set_power_state(data, false);
  418. if (ret < 0)
  419. goto release_direct;
  420. ret = IIO_VAL_INT;
  421. release_direct:
  422. iio_device_release_direct_mode(indio_dev);
  423. break;
  424. }
  425. case IIO_CHAN_INFO_SCALE:
  426. idx = data->channel_data[chan->address].pga;
  427. *val = ads1015_fullscale_range[idx];
  428. *val2 = chan->scan_type.realbits - 1;
  429. ret = IIO_VAL_FRACTIONAL_LOG2;
  430. break;
  431. case IIO_CHAN_INFO_SAMP_FREQ:
  432. idx = data->channel_data[chan->address].data_rate;
  433. *val = data->data_rate[idx];
  434. ret = IIO_VAL_INT;
  435. break;
  436. default:
  437. ret = -EINVAL;
  438. break;
  439. }
  440. mutex_unlock(&data->lock);
  441. return ret;
  442. }
  443. static int ads1015_write_raw(struct iio_dev *indio_dev,
  444. struct iio_chan_spec const *chan, int val,
  445. int val2, long mask)
  446. {
  447. struct ads1015_data *data = iio_priv(indio_dev);
  448. int ret;
  449. mutex_lock(&data->lock);
  450. switch (mask) {
  451. case IIO_CHAN_INFO_SCALE:
  452. ret = ads1015_set_scale(data, chan, val, val2);
  453. break;
  454. case IIO_CHAN_INFO_SAMP_FREQ:
  455. ret = ads1015_set_data_rate(data, chan->address, val);
  456. break;
  457. default:
  458. ret = -EINVAL;
  459. break;
  460. }
  461. mutex_unlock(&data->lock);
  462. return ret;
  463. }
  464. static int ads1015_read_event(struct iio_dev *indio_dev,
  465. const struct iio_chan_spec *chan, enum iio_event_type type,
  466. enum iio_event_direction dir, enum iio_event_info info, int *val,
  467. int *val2)
  468. {
  469. struct ads1015_data *data = iio_priv(indio_dev);
  470. int ret;
  471. unsigned int comp_queue;
  472. int period;
  473. int dr;
  474. mutex_lock(&data->lock);
  475. switch (info) {
  476. case IIO_EV_INFO_VALUE:
  477. *val = (dir == IIO_EV_DIR_RISING) ?
  478. data->thresh_data[chan->address].high_thresh :
  479. data->thresh_data[chan->address].low_thresh;
  480. ret = IIO_VAL_INT;
  481. break;
  482. case IIO_EV_INFO_PERIOD:
  483. dr = data->channel_data[chan->address].data_rate;
  484. comp_queue = data->thresh_data[chan->address].comp_queue;
  485. period = ads1015_comp_queue[comp_queue] *
  486. USEC_PER_SEC / data->data_rate[dr];
  487. *val = period / USEC_PER_SEC;
  488. *val2 = period % USEC_PER_SEC;
  489. ret = IIO_VAL_INT_PLUS_MICRO;
  490. break;
  491. default:
  492. ret = -EINVAL;
  493. break;
  494. }
  495. mutex_unlock(&data->lock);
  496. return ret;
  497. }
  498. static int ads1015_write_event(struct iio_dev *indio_dev,
  499. const struct iio_chan_spec *chan, enum iio_event_type type,
  500. enum iio_event_direction dir, enum iio_event_info info, int val,
  501. int val2)
  502. {
  503. struct ads1015_data *data = iio_priv(indio_dev);
  504. int realbits = chan->scan_type.realbits;
  505. int ret = 0;
  506. long long period;
  507. int i;
  508. int dr;
  509. mutex_lock(&data->lock);
  510. switch (info) {
  511. case IIO_EV_INFO_VALUE:
  512. if (val >= 1 << (realbits - 1) || val < -1 << (realbits - 1)) {
  513. ret = -EINVAL;
  514. break;
  515. }
  516. if (dir == IIO_EV_DIR_RISING)
  517. data->thresh_data[chan->address].high_thresh = val;
  518. else
  519. data->thresh_data[chan->address].low_thresh = val;
  520. break;
  521. case IIO_EV_INFO_PERIOD:
  522. dr = data->channel_data[chan->address].data_rate;
  523. period = val * USEC_PER_SEC + val2;
  524. for (i = 0; i < ARRAY_SIZE(ads1015_comp_queue) - 1; i++) {
  525. if (period <= ads1015_comp_queue[i] *
  526. USEC_PER_SEC / data->data_rate[dr])
  527. break;
  528. }
  529. data->thresh_data[chan->address].comp_queue = i;
  530. break;
  531. default:
  532. ret = -EINVAL;
  533. break;
  534. }
  535. mutex_unlock(&data->lock);
  536. return ret;
  537. }
  538. static int ads1015_read_event_config(struct iio_dev *indio_dev,
  539. const struct iio_chan_spec *chan, enum iio_event_type type,
  540. enum iio_event_direction dir)
  541. {
  542. struct ads1015_data *data = iio_priv(indio_dev);
  543. int ret = 0;
  544. mutex_lock(&data->lock);
  545. if (data->event_channel == chan->address) {
  546. switch (dir) {
  547. case IIO_EV_DIR_RISING:
  548. ret = 1;
  549. break;
  550. case IIO_EV_DIR_EITHER:
  551. ret = (data->comp_mode == ADS1015_CFG_COMP_MODE_WINDOW);
  552. break;
  553. default:
  554. ret = -EINVAL;
  555. break;
  556. }
  557. }
  558. mutex_unlock(&data->lock);
  559. return ret;
  560. }
  561. static int ads1015_enable_event_config(struct ads1015_data *data,
  562. const struct iio_chan_spec *chan, int comp_mode)
  563. {
  564. int low_thresh = data->thresh_data[chan->address].low_thresh;
  565. int high_thresh = data->thresh_data[chan->address].high_thresh;
  566. int ret;
  567. unsigned int val;
  568. if (ads1015_event_channel_enabled(data)) {
  569. if (data->event_channel != chan->address ||
  570. (data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD &&
  571. comp_mode == ADS1015_CFG_COMP_MODE_WINDOW))
  572. return -EBUSY;
  573. return 0;
  574. }
  575. if (comp_mode == ADS1015_CFG_COMP_MODE_TRAD) {
  576. low_thresh = max(-1 << (chan->scan_type.realbits - 1),
  577. high_thresh - 1);
  578. }
  579. ret = regmap_write(data->regmap, ADS1015_LO_THRESH_REG,
  580. low_thresh << chan->scan_type.shift);
  581. if (ret)
  582. return ret;
  583. ret = regmap_write(data->regmap, ADS1015_HI_THRESH_REG,
  584. high_thresh << chan->scan_type.shift);
  585. if (ret)
  586. return ret;
  587. ret = ads1015_set_power_state(data, true);
  588. if (ret < 0)
  589. return ret;
  590. ads1015_event_channel_enable(data, chan->address, comp_mode);
  591. ret = ads1015_get_adc_result(data, chan->address, &val);
  592. if (ret) {
  593. ads1015_event_channel_disable(data, chan->address);
  594. ads1015_set_power_state(data, false);
  595. }
  596. return ret;
  597. }
  598. static int ads1015_disable_event_config(struct ads1015_data *data,
  599. const struct iio_chan_spec *chan, int comp_mode)
  600. {
  601. int ret;
  602. if (!ads1015_event_channel_enabled(data))
  603. return 0;
  604. if (data->event_channel != chan->address)
  605. return 0;
  606. if (data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD &&
  607. comp_mode == ADS1015_CFG_COMP_MODE_WINDOW)
  608. return 0;
  609. ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
  610. ADS1015_CFG_COMP_QUE_MASK,
  611. ADS1015_CFG_COMP_DISABLE <<
  612. ADS1015_CFG_COMP_QUE_SHIFT);
  613. if (ret)
  614. return ret;
  615. ads1015_event_channel_disable(data, chan->address);
  616. return ads1015_set_power_state(data, false);
  617. }
  618. static int ads1015_write_event_config(struct iio_dev *indio_dev,
  619. const struct iio_chan_spec *chan, enum iio_event_type type,
  620. enum iio_event_direction dir, int state)
  621. {
  622. struct ads1015_data *data = iio_priv(indio_dev);
  623. int ret;
  624. int comp_mode = (dir == IIO_EV_DIR_EITHER) ?
  625. ADS1015_CFG_COMP_MODE_WINDOW : ADS1015_CFG_COMP_MODE_TRAD;
  626. mutex_lock(&data->lock);
  627. /* Prevent from enabling both buffer and event at a time */
  628. ret = iio_device_claim_direct_mode(indio_dev);
  629. if (ret) {
  630. mutex_unlock(&data->lock);
  631. return ret;
  632. }
  633. if (state)
  634. ret = ads1015_enable_event_config(data, chan, comp_mode);
  635. else
  636. ret = ads1015_disable_event_config(data, chan, comp_mode);
  637. iio_device_release_direct_mode(indio_dev);
  638. mutex_unlock(&data->lock);
  639. return ret;
  640. }
  641. static irqreturn_t ads1015_event_handler(int irq, void *priv)
  642. {
  643. struct iio_dev *indio_dev = priv;
  644. struct ads1015_data *data = iio_priv(indio_dev);
  645. int val;
  646. int ret;
  647. /* Clear the latched ALERT/RDY pin */
  648. ret = regmap_read(data->regmap, ADS1015_CONV_REG, &val);
  649. if (ret)
  650. return IRQ_HANDLED;
  651. if (ads1015_event_channel_enabled(data)) {
  652. enum iio_event_direction dir;
  653. u64 code;
  654. dir = data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD ?
  655. IIO_EV_DIR_RISING : IIO_EV_DIR_EITHER;
  656. code = IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, data->event_channel,
  657. IIO_EV_TYPE_THRESH, dir);
  658. iio_push_event(indio_dev, code, iio_get_time_ns(indio_dev));
  659. }
  660. return IRQ_HANDLED;
  661. }
  662. static int ads1015_buffer_preenable(struct iio_dev *indio_dev)
  663. {
  664. struct ads1015_data *data = iio_priv(indio_dev);
  665. /* Prevent from enabling both buffer and event at a time */
  666. if (ads1015_event_channel_enabled(data))
  667. return -EBUSY;
  668. return ads1015_set_power_state(iio_priv(indio_dev), true);
  669. }
  670. static int ads1015_buffer_postdisable(struct iio_dev *indio_dev)
  671. {
  672. return ads1015_set_power_state(iio_priv(indio_dev), false);
  673. }
  674. static const struct iio_buffer_setup_ops ads1015_buffer_setup_ops = {
  675. .preenable = ads1015_buffer_preenable,
  676. .postenable = iio_triggered_buffer_postenable,
  677. .predisable = iio_triggered_buffer_predisable,
  678. .postdisable = ads1015_buffer_postdisable,
  679. .validate_scan_mask = &iio_validate_scan_mask_onehot,
  680. };
  681. static IIO_CONST_ATTR_NAMED(ads1015_scale_available, scale_available,
  682. "3 2 1 0.5 0.25 0.125");
  683. static IIO_CONST_ATTR_NAMED(ads1115_scale_available, scale_available,
  684. "0.1875 0.125 0.0625 0.03125 0.015625 0.007813");
  685. static IIO_CONST_ATTR_NAMED(ads1015_sampling_frequency_available,
  686. sampling_frequency_available, "128 250 490 920 1600 2400 3300");
  687. static IIO_CONST_ATTR_NAMED(ads1115_sampling_frequency_available,
  688. sampling_frequency_available, "8 16 32 64 128 250 475 860");
  689. static struct attribute *ads1015_attributes[] = {
  690. &iio_const_attr_ads1015_scale_available.dev_attr.attr,
  691. &iio_const_attr_ads1015_sampling_frequency_available.dev_attr.attr,
  692. NULL,
  693. };
  694. static const struct attribute_group ads1015_attribute_group = {
  695. .attrs = ads1015_attributes,
  696. };
  697. static struct attribute *ads1115_attributes[] = {
  698. &iio_const_attr_ads1115_scale_available.dev_attr.attr,
  699. &iio_const_attr_ads1115_sampling_frequency_available.dev_attr.attr,
  700. NULL,
  701. };
  702. static const struct attribute_group ads1115_attribute_group = {
  703. .attrs = ads1115_attributes,
  704. };
  705. static const struct iio_info ads1015_info = {
  706. .read_raw = ads1015_read_raw,
  707. .write_raw = ads1015_write_raw,
  708. .read_event_value = ads1015_read_event,
  709. .write_event_value = ads1015_write_event,
  710. .read_event_config = ads1015_read_event_config,
  711. .write_event_config = ads1015_write_event_config,
  712. .attrs = &ads1015_attribute_group,
  713. };
  714. static const struct iio_info ads1115_info = {
  715. .read_raw = ads1015_read_raw,
  716. .write_raw = ads1015_write_raw,
  717. .read_event_value = ads1015_read_event,
  718. .write_event_value = ads1015_write_event,
  719. .read_event_config = ads1015_read_event_config,
  720. .write_event_config = ads1015_write_event_config,
  721. .attrs = &ads1115_attribute_group,
  722. };
  723. #ifdef CONFIG_OF
  724. static int ads1015_get_channels_config_of(struct i2c_client *client)
  725. {
  726. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  727. struct ads1015_data *data = iio_priv(indio_dev);
  728. struct device_node *node;
  729. if (!client->dev.of_node ||
  730. !of_get_next_child(client->dev.of_node, NULL))
  731. return -EINVAL;
  732. for_each_child_of_node(client->dev.of_node, node) {
  733. u32 pval;
  734. unsigned int channel;
  735. unsigned int pga = ADS1015_DEFAULT_PGA;
  736. unsigned int data_rate = ADS1015_DEFAULT_DATA_RATE;
  737. if (of_property_read_u32(node, "reg", &pval)) {
  738. dev_err(&client->dev, "invalid reg on %pOF\n",
  739. node);
  740. continue;
  741. }
  742. channel = pval;
  743. if (channel >= ADS1015_CHANNELS) {
  744. dev_err(&client->dev,
  745. "invalid channel index %d on %pOF\n",
  746. channel, node);
  747. continue;
  748. }
  749. if (!of_property_read_u32(node, "ti,gain", &pval)) {
  750. pga = pval;
  751. if (pga > 6) {
  752. dev_err(&client->dev, "invalid gain on %pOF\n",
  753. node);
  754. of_node_put(node);
  755. return -EINVAL;
  756. }
  757. }
  758. if (!of_property_read_u32(node, "ti,datarate", &pval)) {
  759. data_rate = pval;
  760. if (data_rate > 7) {
  761. dev_err(&client->dev,
  762. "invalid data_rate on %pOF\n",
  763. node);
  764. of_node_put(node);
  765. return -EINVAL;
  766. }
  767. }
  768. data->channel_data[channel].pga = pga;
  769. data->channel_data[channel].data_rate = data_rate;
  770. }
  771. return 0;
  772. }
  773. #endif
  774. static void ads1015_get_channels_config(struct i2c_client *client)
  775. {
  776. unsigned int k;
  777. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  778. struct ads1015_data *data = iio_priv(indio_dev);
  779. struct ads1015_platform_data *pdata = dev_get_platdata(&client->dev);
  780. /* prefer platform data */
  781. if (pdata) {
  782. memcpy(data->channel_data, pdata->channel_data,
  783. sizeof(data->channel_data));
  784. return;
  785. }
  786. #ifdef CONFIG_OF
  787. if (!ads1015_get_channels_config_of(client))
  788. return;
  789. #endif
  790. /* fallback on default configuration */
  791. for (k = 0; k < ADS1015_CHANNELS; ++k) {
  792. data->channel_data[k].pga = ADS1015_DEFAULT_PGA;
  793. data->channel_data[k].data_rate = ADS1015_DEFAULT_DATA_RATE;
  794. }
  795. }
  796. static int ads1015_set_conv_mode(struct ads1015_data *data, int mode)
  797. {
  798. return regmap_update_bits(data->regmap, ADS1015_CFG_REG,
  799. ADS1015_CFG_MOD_MASK,
  800. mode << ADS1015_CFG_MOD_SHIFT);
  801. }
  802. static int ads1015_probe(struct i2c_client *client,
  803. const struct i2c_device_id *id)
  804. {
  805. struct iio_dev *indio_dev;
  806. struct ads1015_data *data;
  807. int ret;
  808. enum chip_ids chip;
  809. int i;
  810. indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
  811. if (!indio_dev)
  812. return -ENOMEM;
  813. data = iio_priv(indio_dev);
  814. i2c_set_clientdata(client, indio_dev);
  815. mutex_init(&data->lock);
  816. indio_dev->dev.parent = &client->dev;
  817. indio_dev->dev.of_node = client->dev.of_node;
  818. indio_dev->name = ADS1015_DRV_NAME;
  819. indio_dev->modes = INDIO_DIRECT_MODE;
  820. if (client->dev.of_node)
  821. chip = (enum chip_ids)of_device_get_match_data(&client->dev);
  822. else
  823. chip = id->driver_data;
  824. switch (chip) {
  825. case ADS1015:
  826. indio_dev->channels = ads1015_channels;
  827. indio_dev->num_channels = ARRAY_SIZE(ads1015_channels);
  828. indio_dev->info = &ads1015_info;
  829. data->data_rate = (unsigned int *) &ads1015_data_rate;
  830. break;
  831. case ADS1115:
  832. indio_dev->channels = ads1115_channels;
  833. indio_dev->num_channels = ARRAY_SIZE(ads1115_channels);
  834. indio_dev->info = &ads1115_info;
  835. data->data_rate = (unsigned int *) &ads1115_data_rate;
  836. break;
  837. }
  838. data->event_channel = ADS1015_CHANNELS;
  839. /*
  840. * Set default lower and upper threshold to min and max value
  841. * respectively.
  842. */
  843. for (i = 0; i < ADS1015_CHANNELS; i++) {
  844. int realbits = indio_dev->channels[i].scan_type.realbits;
  845. data->thresh_data[i].low_thresh = -1 << (realbits - 1);
  846. data->thresh_data[i].high_thresh = (1 << (realbits - 1)) - 1;
  847. }
  848. /* we need to keep this ABI the same as used by hwmon ADS1015 driver */
  849. ads1015_get_channels_config(client);
  850. data->regmap = devm_regmap_init_i2c(client, &ads1015_regmap_config);
  851. if (IS_ERR(data->regmap)) {
  852. dev_err(&client->dev, "Failed to allocate register map\n");
  853. return PTR_ERR(data->regmap);
  854. }
  855. ret = devm_iio_triggered_buffer_setup(&client->dev, indio_dev, NULL,
  856. ads1015_trigger_handler,
  857. &ads1015_buffer_setup_ops);
  858. if (ret < 0) {
  859. dev_err(&client->dev, "iio triggered buffer setup failed\n");
  860. return ret;
  861. }
  862. if (client->irq) {
  863. unsigned long irq_trig =
  864. irqd_get_trigger_type(irq_get_irq_data(client->irq));
  865. unsigned int cfg_comp_mask = ADS1015_CFG_COMP_QUE_MASK |
  866. ADS1015_CFG_COMP_LAT_MASK | ADS1015_CFG_COMP_POL_MASK;
  867. unsigned int cfg_comp =
  868. ADS1015_CFG_COMP_DISABLE << ADS1015_CFG_COMP_QUE_SHIFT |
  869. 1 << ADS1015_CFG_COMP_LAT_SHIFT;
  870. switch (irq_trig) {
  871. case IRQF_TRIGGER_LOW:
  872. cfg_comp |= ADS1015_CFG_COMP_POL_LOW <<
  873. ADS1015_CFG_COMP_POL_SHIFT;
  874. break;
  875. case IRQF_TRIGGER_HIGH:
  876. cfg_comp |= ADS1015_CFG_COMP_POL_HIGH <<
  877. ADS1015_CFG_COMP_POL_SHIFT;
  878. break;
  879. default:
  880. return -EINVAL;
  881. }
  882. ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
  883. cfg_comp_mask, cfg_comp);
  884. if (ret)
  885. return ret;
  886. ret = devm_request_threaded_irq(&client->dev, client->irq,
  887. NULL, ads1015_event_handler,
  888. irq_trig | IRQF_ONESHOT,
  889. client->name, indio_dev);
  890. if (ret)
  891. return ret;
  892. }
  893. ret = ads1015_set_conv_mode(data, ADS1015_CONTINUOUS);
  894. if (ret)
  895. return ret;
  896. data->conv_invalid = true;
  897. ret = pm_runtime_set_active(&client->dev);
  898. if (ret)
  899. return ret;
  900. pm_runtime_set_autosuspend_delay(&client->dev, ADS1015_SLEEP_DELAY_MS);
  901. pm_runtime_use_autosuspend(&client->dev);
  902. pm_runtime_enable(&client->dev);
  903. ret = iio_device_register(indio_dev);
  904. if (ret < 0) {
  905. dev_err(&client->dev, "Failed to register IIO device\n");
  906. return ret;
  907. }
  908. return 0;
  909. }
  910. static int ads1015_remove(struct i2c_client *client)
  911. {
  912. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  913. struct ads1015_data *data = iio_priv(indio_dev);
  914. iio_device_unregister(indio_dev);
  915. pm_runtime_disable(&client->dev);
  916. pm_runtime_set_suspended(&client->dev);
  917. pm_runtime_put_noidle(&client->dev);
  918. /* power down single shot mode */
  919. return ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
  920. }
  921. #ifdef CONFIG_PM
  922. static int ads1015_runtime_suspend(struct device *dev)
  923. {
  924. struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
  925. struct ads1015_data *data = iio_priv(indio_dev);
  926. return ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
  927. }
  928. static int ads1015_runtime_resume(struct device *dev)
  929. {
  930. struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
  931. struct ads1015_data *data = iio_priv(indio_dev);
  932. int ret;
  933. ret = ads1015_set_conv_mode(data, ADS1015_CONTINUOUS);
  934. if (!ret)
  935. data->conv_invalid = true;
  936. return ret;
  937. }
  938. #endif
  939. static const struct dev_pm_ops ads1015_pm_ops = {
  940. SET_RUNTIME_PM_OPS(ads1015_runtime_suspend,
  941. ads1015_runtime_resume, NULL)
  942. };
  943. static const struct i2c_device_id ads1015_id[] = {
  944. {"ads1015", ADS1015},
  945. {"ads1115", ADS1115},
  946. {}
  947. };
  948. MODULE_DEVICE_TABLE(i2c, ads1015_id);
  949. static const struct of_device_id ads1015_of_match[] = {
  950. {
  951. .compatible = "ti,ads1015",
  952. .data = (void *)ADS1015
  953. },
  954. {
  955. .compatible = "ti,ads1115",
  956. .data = (void *)ADS1115
  957. },
  958. {}
  959. };
  960. MODULE_DEVICE_TABLE(of, ads1015_of_match);
  961. static struct i2c_driver ads1015_driver = {
  962. .driver = {
  963. .name = ADS1015_DRV_NAME,
  964. .of_match_table = ads1015_of_match,
  965. .pm = &ads1015_pm_ops,
  966. },
  967. .probe = ads1015_probe,
  968. .remove = ads1015_remove,
  969. .id_table = ads1015_id,
  970. };
  971. module_i2c_driver(ads1015_driver);
  972. MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>");
  973. MODULE_DESCRIPTION("Texas Instruments ADS1015 ADC driver");
  974. MODULE_LICENSE("GPL v2");