ti-ads1015.c 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144
  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. static int ads1015_set_power_state(struct ads1015_data *data, bool on)
  280. {
  281. int ret;
  282. struct device *dev = regmap_get_device(data->regmap);
  283. if (on) {
  284. ret = pm_runtime_get_sync(dev);
  285. if (ret < 0)
  286. pm_runtime_put_noidle(dev);
  287. } else {
  288. pm_runtime_mark_last_busy(dev);
  289. ret = pm_runtime_put_autosuspend(dev);
  290. }
  291. return ret < 0 ? ret : 0;
  292. }
  293. static
  294. int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
  295. {
  296. int ret, pga, dr, conv_time;
  297. unsigned int old, mask, cfg;
  298. if (chan < 0 || chan >= ADS1015_CHANNELS)
  299. return -EINVAL;
  300. ret = regmap_read(data->regmap, ADS1015_CFG_REG, &old);
  301. if (ret)
  302. return ret;
  303. pga = data->channel_data[chan].pga;
  304. dr = data->channel_data[chan].data_rate;
  305. mask = ADS1015_CFG_MUX_MASK | ADS1015_CFG_PGA_MASK |
  306. ADS1015_CFG_DR_MASK;
  307. cfg = chan << ADS1015_CFG_MUX_SHIFT | pga << ADS1015_CFG_PGA_SHIFT |
  308. dr << ADS1015_CFG_DR_SHIFT;
  309. if (ads1015_event_channel_enabled(data)) {
  310. mask |= ADS1015_CFG_COMP_QUE_MASK | ADS1015_CFG_COMP_MODE_MASK;
  311. cfg |= data->thresh_data[chan].comp_queue <<
  312. ADS1015_CFG_COMP_QUE_SHIFT |
  313. data->comp_mode <<
  314. ADS1015_CFG_COMP_MODE_SHIFT;
  315. }
  316. cfg = (old & ~mask) | (cfg & mask);
  317. ret = regmap_write(data->regmap, ADS1015_CFG_REG, cfg);
  318. if (ret)
  319. return ret;
  320. if (old != cfg || data->conv_invalid) {
  321. int dr_old = (old & ADS1015_CFG_DR_MASK) >>
  322. ADS1015_CFG_DR_SHIFT;
  323. conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
  324. conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
  325. usleep_range(conv_time, conv_time + 1);
  326. data->conv_invalid = false;
  327. }
  328. return regmap_read(data->regmap, ADS1015_CONV_REG, val);
  329. }
  330. static irqreturn_t ads1015_trigger_handler(int irq, void *p)
  331. {
  332. struct iio_poll_func *pf = p;
  333. struct iio_dev *indio_dev = pf->indio_dev;
  334. struct ads1015_data *data = iio_priv(indio_dev);
  335. s16 buf[8]; /* 1x s16 ADC val + 3x s16 padding + 4x s16 timestamp */
  336. int chan, ret, res;
  337. memset(buf, 0, sizeof(buf));
  338. mutex_lock(&data->lock);
  339. chan = find_first_bit(indio_dev->active_scan_mask,
  340. indio_dev->masklength);
  341. ret = ads1015_get_adc_result(data, chan, &res);
  342. if (ret < 0) {
  343. mutex_unlock(&data->lock);
  344. goto err;
  345. }
  346. buf[0] = res;
  347. mutex_unlock(&data->lock);
  348. iio_push_to_buffers_with_timestamp(indio_dev, buf,
  349. iio_get_time_ns(indio_dev));
  350. err:
  351. iio_trigger_notify_done(indio_dev->trig);
  352. return IRQ_HANDLED;
  353. }
  354. static int ads1015_set_scale(struct ads1015_data *data,
  355. struct iio_chan_spec const *chan,
  356. int scale, int uscale)
  357. {
  358. int i;
  359. int fullscale = div_s64((scale * 1000000LL + uscale) <<
  360. (chan->scan_type.realbits - 1), 1000000);
  361. for (i = 0; i < ARRAY_SIZE(ads1015_fullscale_range); i++) {
  362. if (ads1015_fullscale_range[i] == fullscale) {
  363. data->channel_data[chan->address].pga = i;
  364. return 0;
  365. }
  366. }
  367. return -EINVAL;
  368. }
  369. static int ads1015_set_data_rate(struct ads1015_data *data, int chan, int rate)
  370. {
  371. int i;
  372. for (i = 0; i < ARRAY_SIZE(ads1015_data_rate); i++) {
  373. if (data->data_rate[i] == rate) {
  374. data->channel_data[chan].data_rate = i;
  375. return 0;
  376. }
  377. }
  378. return -EINVAL;
  379. }
  380. static int ads1015_read_raw(struct iio_dev *indio_dev,
  381. struct iio_chan_spec const *chan, int *val,
  382. int *val2, long mask)
  383. {
  384. int ret, idx;
  385. struct ads1015_data *data = iio_priv(indio_dev);
  386. mutex_lock(&data->lock);
  387. switch (mask) {
  388. case IIO_CHAN_INFO_RAW: {
  389. int shift = chan->scan_type.shift;
  390. ret = iio_device_claim_direct_mode(indio_dev);
  391. if (ret)
  392. break;
  393. if (ads1015_event_channel_enabled(data) &&
  394. data->event_channel != chan->address) {
  395. ret = -EBUSY;
  396. goto release_direct;
  397. }
  398. ret = ads1015_set_power_state(data, true);
  399. if (ret < 0)
  400. goto release_direct;
  401. ret = ads1015_get_adc_result(data, chan->address, val);
  402. if (ret < 0) {
  403. ads1015_set_power_state(data, false);
  404. goto release_direct;
  405. }
  406. *val = sign_extend32(*val >> shift, 15 - shift);
  407. ret = ads1015_set_power_state(data, false);
  408. if (ret < 0)
  409. goto release_direct;
  410. ret = IIO_VAL_INT;
  411. release_direct:
  412. iio_device_release_direct_mode(indio_dev);
  413. break;
  414. }
  415. case IIO_CHAN_INFO_SCALE:
  416. idx = data->channel_data[chan->address].pga;
  417. *val = ads1015_fullscale_range[idx];
  418. *val2 = chan->scan_type.realbits - 1;
  419. ret = IIO_VAL_FRACTIONAL_LOG2;
  420. break;
  421. case IIO_CHAN_INFO_SAMP_FREQ:
  422. idx = data->channel_data[chan->address].data_rate;
  423. *val = data->data_rate[idx];
  424. ret = IIO_VAL_INT;
  425. break;
  426. default:
  427. ret = -EINVAL;
  428. break;
  429. }
  430. mutex_unlock(&data->lock);
  431. return ret;
  432. }
  433. static int ads1015_write_raw(struct iio_dev *indio_dev,
  434. struct iio_chan_spec const *chan, int val,
  435. int val2, long mask)
  436. {
  437. struct ads1015_data *data = iio_priv(indio_dev);
  438. int ret;
  439. mutex_lock(&data->lock);
  440. switch (mask) {
  441. case IIO_CHAN_INFO_SCALE:
  442. ret = ads1015_set_scale(data, chan, val, val2);
  443. break;
  444. case IIO_CHAN_INFO_SAMP_FREQ:
  445. ret = ads1015_set_data_rate(data, chan->address, val);
  446. break;
  447. default:
  448. ret = -EINVAL;
  449. break;
  450. }
  451. mutex_unlock(&data->lock);
  452. return ret;
  453. }
  454. static int ads1015_read_event(struct iio_dev *indio_dev,
  455. const struct iio_chan_spec *chan, enum iio_event_type type,
  456. enum iio_event_direction dir, enum iio_event_info info, int *val,
  457. int *val2)
  458. {
  459. struct ads1015_data *data = iio_priv(indio_dev);
  460. int ret;
  461. unsigned int comp_queue;
  462. int period;
  463. int dr;
  464. mutex_lock(&data->lock);
  465. switch (info) {
  466. case IIO_EV_INFO_VALUE:
  467. *val = (dir == IIO_EV_DIR_RISING) ?
  468. data->thresh_data[chan->address].high_thresh :
  469. data->thresh_data[chan->address].low_thresh;
  470. ret = IIO_VAL_INT;
  471. break;
  472. case IIO_EV_INFO_PERIOD:
  473. dr = data->channel_data[chan->address].data_rate;
  474. comp_queue = data->thresh_data[chan->address].comp_queue;
  475. period = ads1015_comp_queue[comp_queue] *
  476. USEC_PER_SEC / data->data_rate[dr];
  477. *val = period / USEC_PER_SEC;
  478. *val2 = period % USEC_PER_SEC;
  479. ret = IIO_VAL_INT_PLUS_MICRO;
  480. break;
  481. default:
  482. ret = -EINVAL;
  483. break;
  484. }
  485. mutex_unlock(&data->lock);
  486. return ret;
  487. }
  488. static int ads1015_write_event(struct iio_dev *indio_dev,
  489. const struct iio_chan_spec *chan, enum iio_event_type type,
  490. enum iio_event_direction dir, enum iio_event_info info, int val,
  491. int val2)
  492. {
  493. struct ads1015_data *data = iio_priv(indio_dev);
  494. int realbits = chan->scan_type.realbits;
  495. int ret = 0;
  496. long long period;
  497. int i;
  498. int dr;
  499. mutex_lock(&data->lock);
  500. switch (info) {
  501. case IIO_EV_INFO_VALUE:
  502. if (val >= 1 << (realbits - 1) || val < -1 << (realbits - 1)) {
  503. ret = -EINVAL;
  504. break;
  505. }
  506. if (dir == IIO_EV_DIR_RISING)
  507. data->thresh_data[chan->address].high_thresh = val;
  508. else
  509. data->thresh_data[chan->address].low_thresh = val;
  510. break;
  511. case IIO_EV_INFO_PERIOD:
  512. dr = data->channel_data[chan->address].data_rate;
  513. period = val * USEC_PER_SEC + val2;
  514. for (i = 0; i < ARRAY_SIZE(ads1015_comp_queue) - 1; i++) {
  515. if (period <= ads1015_comp_queue[i] *
  516. USEC_PER_SEC / data->data_rate[dr])
  517. break;
  518. }
  519. data->thresh_data[chan->address].comp_queue = i;
  520. break;
  521. default:
  522. ret = -EINVAL;
  523. break;
  524. }
  525. mutex_unlock(&data->lock);
  526. return ret;
  527. }
  528. static int ads1015_read_event_config(struct iio_dev *indio_dev,
  529. const struct iio_chan_spec *chan, enum iio_event_type type,
  530. enum iio_event_direction dir)
  531. {
  532. struct ads1015_data *data = iio_priv(indio_dev);
  533. int ret = 0;
  534. mutex_lock(&data->lock);
  535. if (data->event_channel == chan->address) {
  536. switch (dir) {
  537. case IIO_EV_DIR_RISING:
  538. ret = 1;
  539. break;
  540. case IIO_EV_DIR_EITHER:
  541. ret = (data->comp_mode == ADS1015_CFG_COMP_MODE_WINDOW);
  542. break;
  543. default:
  544. ret = -EINVAL;
  545. break;
  546. }
  547. }
  548. mutex_unlock(&data->lock);
  549. return ret;
  550. }
  551. static int ads1015_enable_event_config(struct ads1015_data *data,
  552. const struct iio_chan_spec *chan, int comp_mode)
  553. {
  554. int low_thresh = data->thresh_data[chan->address].low_thresh;
  555. int high_thresh = data->thresh_data[chan->address].high_thresh;
  556. int ret;
  557. unsigned int val;
  558. if (ads1015_event_channel_enabled(data)) {
  559. if (data->event_channel != chan->address ||
  560. (data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD &&
  561. comp_mode == ADS1015_CFG_COMP_MODE_WINDOW))
  562. return -EBUSY;
  563. return 0;
  564. }
  565. if (comp_mode == ADS1015_CFG_COMP_MODE_TRAD) {
  566. low_thresh = max(-1 << (chan->scan_type.realbits - 1),
  567. high_thresh - 1);
  568. }
  569. ret = regmap_write(data->regmap, ADS1015_LO_THRESH_REG,
  570. low_thresh << chan->scan_type.shift);
  571. if (ret)
  572. return ret;
  573. ret = regmap_write(data->regmap, ADS1015_HI_THRESH_REG,
  574. high_thresh << chan->scan_type.shift);
  575. if (ret)
  576. return ret;
  577. ret = ads1015_set_power_state(data, true);
  578. if (ret < 0)
  579. return ret;
  580. ads1015_event_channel_enable(data, chan->address, comp_mode);
  581. ret = ads1015_get_adc_result(data, chan->address, &val);
  582. if (ret) {
  583. ads1015_event_channel_disable(data, chan->address);
  584. ads1015_set_power_state(data, false);
  585. }
  586. return ret;
  587. }
  588. static int ads1015_disable_event_config(struct ads1015_data *data,
  589. const struct iio_chan_spec *chan, int comp_mode)
  590. {
  591. int ret;
  592. if (!ads1015_event_channel_enabled(data))
  593. return 0;
  594. if (data->event_channel != chan->address)
  595. return 0;
  596. if (data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD &&
  597. comp_mode == ADS1015_CFG_COMP_MODE_WINDOW)
  598. return 0;
  599. ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
  600. ADS1015_CFG_COMP_QUE_MASK,
  601. ADS1015_CFG_COMP_DISABLE <<
  602. ADS1015_CFG_COMP_QUE_SHIFT);
  603. if (ret)
  604. return ret;
  605. ads1015_event_channel_disable(data, chan->address);
  606. return ads1015_set_power_state(data, false);
  607. }
  608. static int ads1015_write_event_config(struct iio_dev *indio_dev,
  609. const struct iio_chan_spec *chan, enum iio_event_type type,
  610. enum iio_event_direction dir, int state)
  611. {
  612. struct ads1015_data *data = iio_priv(indio_dev);
  613. int ret;
  614. int comp_mode = (dir == IIO_EV_DIR_EITHER) ?
  615. ADS1015_CFG_COMP_MODE_WINDOW : ADS1015_CFG_COMP_MODE_TRAD;
  616. mutex_lock(&data->lock);
  617. /* Prevent from enabling both buffer and event at a time */
  618. ret = iio_device_claim_direct_mode(indio_dev);
  619. if (ret) {
  620. mutex_unlock(&data->lock);
  621. return ret;
  622. }
  623. if (state)
  624. ret = ads1015_enable_event_config(data, chan, comp_mode);
  625. else
  626. ret = ads1015_disable_event_config(data, chan, comp_mode);
  627. iio_device_release_direct_mode(indio_dev);
  628. mutex_unlock(&data->lock);
  629. return ret;
  630. }
  631. static irqreturn_t ads1015_event_handler(int irq, void *priv)
  632. {
  633. struct iio_dev *indio_dev = priv;
  634. struct ads1015_data *data = iio_priv(indio_dev);
  635. int val;
  636. int ret;
  637. /* Clear the latched ALERT/RDY pin */
  638. ret = regmap_read(data->regmap, ADS1015_CONV_REG, &val);
  639. if (ret)
  640. return IRQ_HANDLED;
  641. if (ads1015_event_channel_enabled(data)) {
  642. enum iio_event_direction dir;
  643. u64 code;
  644. dir = data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD ?
  645. IIO_EV_DIR_RISING : IIO_EV_DIR_EITHER;
  646. code = IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, data->event_channel,
  647. IIO_EV_TYPE_THRESH, dir);
  648. iio_push_event(indio_dev, code, iio_get_time_ns(indio_dev));
  649. }
  650. return IRQ_HANDLED;
  651. }
  652. static int ads1015_buffer_preenable(struct iio_dev *indio_dev)
  653. {
  654. struct ads1015_data *data = iio_priv(indio_dev);
  655. /* Prevent from enabling both buffer and event at a time */
  656. if (ads1015_event_channel_enabled(data))
  657. return -EBUSY;
  658. return ads1015_set_power_state(iio_priv(indio_dev), true);
  659. }
  660. static int ads1015_buffer_postdisable(struct iio_dev *indio_dev)
  661. {
  662. return ads1015_set_power_state(iio_priv(indio_dev), false);
  663. }
  664. static const struct iio_buffer_setup_ops ads1015_buffer_setup_ops = {
  665. .preenable = ads1015_buffer_preenable,
  666. .postenable = iio_triggered_buffer_postenable,
  667. .predisable = iio_triggered_buffer_predisable,
  668. .postdisable = ads1015_buffer_postdisable,
  669. .validate_scan_mask = &iio_validate_scan_mask_onehot,
  670. };
  671. static IIO_CONST_ATTR_NAMED(ads1015_scale_available, scale_available,
  672. "3 2 1 0.5 0.25 0.125");
  673. static IIO_CONST_ATTR_NAMED(ads1115_scale_available, scale_available,
  674. "0.1875 0.125 0.0625 0.03125 0.015625 0.007813");
  675. static IIO_CONST_ATTR_NAMED(ads1015_sampling_frequency_available,
  676. sampling_frequency_available, "128 250 490 920 1600 2400 3300");
  677. static IIO_CONST_ATTR_NAMED(ads1115_sampling_frequency_available,
  678. sampling_frequency_available, "8 16 32 64 128 250 475 860");
  679. static struct attribute *ads1015_attributes[] = {
  680. &iio_const_attr_ads1015_scale_available.dev_attr.attr,
  681. &iio_const_attr_ads1015_sampling_frequency_available.dev_attr.attr,
  682. NULL,
  683. };
  684. static const struct attribute_group ads1015_attribute_group = {
  685. .attrs = ads1015_attributes,
  686. };
  687. static struct attribute *ads1115_attributes[] = {
  688. &iio_const_attr_ads1115_scale_available.dev_attr.attr,
  689. &iio_const_attr_ads1115_sampling_frequency_available.dev_attr.attr,
  690. NULL,
  691. };
  692. static const struct attribute_group ads1115_attribute_group = {
  693. .attrs = ads1115_attributes,
  694. };
  695. static const struct iio_info ads1015_info = {
  696. .driver_module = THIS_MODULE,
  697. .read_raw = ads1015_read_raw,
  698. .write_raw = ads1015_write_raw,
  699. .read_event_value = ads1015_read_event,
  700. .write_event_value = ads1015_write_event,
  701. .read_event_config = ads1015_read_event_config,
  702. .write_event_config = ads1015_write_event_config,
  703. .attrs = &ads1015_attribute_group,
  704. };
  705. static const struct iio_info ads1115_info = {
  706. .driver_module = THIS_MODULE,
  707. .read_raw = ads1015_read_raw,
  708. .write_raw = ads1015_write_raw,
  709. .read_event_value = ads1015_read_event,
  710. .write_event_value = ads1015_write_event,
  711. .read_event_config = ads1015_read_event_config,
  712. .write_event_config = ads1015_write_event_config,
  713. .attrs = &ads1115_attribute_group,
  714. };
  715. #ifdef CONFIG_OF
  716. static int ads1015_get_channels_config_of(struct i2c_client *client)
  717. {
  718. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  719. struct ads1015_data *data = iio_priv(indio_dev);
  720. struct device_node *node;
  721. if (!client->dev.of_node ||
  722. !of_get_next_child(client->dev.of_node, NULL))
  723. return -EINVAL;
  724. for_each_child_of_node(client->dev.of_node, node) {
  725. u32 pval;
  726. unsigned int channel;
  727. unsigned int pga = ADS1015_DEFAULT_PGA;
  728. unsigned int data_rate = ADS1015_DEFAULT_DATA_RATE;
  729. if (of_property_read_u32(node, "reg", &pval)) {
  730. dev_err(&client->dev, "invalid reg on %pOF\n",
  731. node);
  732. continue;
  733. }
  734. channel = pval;
  735. if (channel >= ADS1015_CHANNELS) {
  736. dev_err(&client->dev,
  737. "invalid channel index %d on %pOF\n",
  738. channel, node);
  739. continue;
  740. }
  741. if (!of_property_read_u32(node, "ti,gain", &pval)) {
  742. pga = pval;
  743. if (pga > 6) {
  744. dev_err(&client->dev, "invalid gain on %pOF\n",
  745. node);
  746. of_node_put(node);
  747. return -EINVAL;
  748. }
  749. }
  750. if (!of_property_read_u32(node, "ti,datarate", &pval)) {
  751. data_rate = pval;
  752. if (data_rate > 7) {
  753. dev_err(&client->dev,
  754. "invalid data_rate on %pOF\n",
  755. node);
  756. of_node_put(node);
  757. return -EINVAL;
  758. }
  759. }
  760. data->channel_data[channel].pga = pga;
  761. data->channel_data[channel].data_rate = data_rate;
  762. }
  763. return 0;
  764. }
  765. #endif
  766. static void ads1015_get_channels_config(struct i2c_client *client)
  767. {
  768. unsigned int k;
  769. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  770. struct ads1015_data *data = iio_priv(indio_dev);
  771. struct ads1015_platform_data *pdata = dev_get_platdata(&client->dev);
  772. /* prefer platform data */
  773. if (pdata) {
  774. memcpy(data->channel_data, pdata->channel_data,
  775. sizeof(data->channel_data));
  776. return;
  777. }
  778. #ifdef CONFIG_OF
  779. if (!ads1015_get_channels_config_of(client))
  780. return;
  781. #endif
  782. /* fallback on default configuration */
  783. for (k = 0; k < ADS1015_CHANNELS; ++k) {
  784. data->channel_data[k].pga = ADS1015_DEFAULT_PGA;
  785. data->channel_data[k].data_rate = ADS1015_DEFAULT_DATA_RATE;
  786. }
  787. }
  788. static int ads1015_set_conv_mode(struct ads1015_data *data, int mode)
  789. {
  790. return regmap_update_bits(data->regmap, ADS1015_CFG_REG,
  791. ADS1015_CFG_MOD_MASK,
  792. mode << ADS1015_CFG_MOD_SHIFT);
  793. }
  794. static int ads1015_probe(struct i2c_client *client,
  795. const struct i2c_device_id *id)
  796. {
  797. struct iio_dev *indio_dev;
  798. struct ads1015_data *data;
  799. int ret;
  800. enum chip_ids chip;
  801. int i;
  802. indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
  803. if (!indio_dev)
  804. return -ENOMEM;
  805. data = iio_priv(indio_dev);
  806. i2c_set_clientdata(client, indio_dev);
  807. mutex_init(&data->lock);
  808. indio_dev->dev.parent = &client->dev;
  809. indio_dev->dev.of_node = client->dev.of_node;
  810. indio_dev->name = ADS1015_DRV_NAME;
  811. indio_dev->modes = INDIO_DIRECT_MODE;
  812. if (client->dev.of_node)
  813. chip = (enum chip_ids)of_device_get_match_data(&client->dev);
  814. else
  815. chip = id->driver_data;
  816. switch (chip) {
  817. case ADS1015:
  818. indio_dev->channels = ads1015_channels;
  819. indio_dev->num_channels = ARRAY_SIZE(ads1015_channels);
  820. indio_dev->info = &ads1015_info;
  821. data->data_rate = (unsigned int *) &ads1015_data_rate;
  822. break;
  823. case ADS1115:
  824. indio_dev->channels = ads1115_channels;
  825. indio_dev->num_channels = ARRAY_SIZE(ads1115_channels);
  826. indio_dev->info = &ads1115_info;
  827. data->data_rate = (unsigned int *) &ads1115_data_rate;
  828. break;
  829. }
  830. data->event_channel = ADS1015_CHANNELS;
  831. /*
  832. * Set default lower and upper threshold to min and max value
  833. * respectively.
  834. */
  835. for (i = 0; i < ADS1015_CHANNELS; i++) {
  836. int realbits = indio_dev->channels[i].scan_type.realbits;
  837. data->thresh_data[i].low_thresh = -1 << (realbits - 1);
  838. data->thresh_data[i].high_thresh = (1 << (realbits - 1)) - 1;
  839. }
  840. /* we need to keep this ABI the same as used by hwmon ADS1015 driver */
  841. ads1015_get_channels_config(client);
  842. data->regmap = devm_regmap_init_i2c(client, &ads1015_regmap_config);
  843. if (IS_ERR(data->regmap)) {
  844. dev_err(&client->dev, "Failed to allocate register map\n");
  845. return PTR_ERR(data->regmap);
  846. }
  847. ret = devm_iio_triggered_buffer_setup(&client->dev, indio_dev, NULL,
  848. ads1015_trigger_handler,
  849. &ads1015_buffer_setup_ops);
  850. if (ret < 0) {
  851. dev_err(&client->dev, "iio triggered buffer setup failed\n");
  852. return ret;
  853. }
  854. if (client->irq) {
  855. unsigned long irq_trig =
  856. irqd_get_trigger_type(irq_get_irq_data(client->irq));
  857. unsigned int cfg_comp_mask = ADS1015_CFG_COMP_QUE_MASK |
  858. ADS1015_CFG_COMP_LAT_MASK | ADS1015_CFG_COMP_POL_MASK;
  859. unsigned int cfg_comp =
  860. ADS1015_CFG_COMP_DISABLE << ADS1015_CFG_COMP_QUE_SHIFT |
  861. 1 << ADS1015_CFG_COMP_LAT_SHIFT;
  862. switch (irq_trig) {
  863. case IRQF_TRIGGER_LOW:
  864. cfg_comp |= ADS1015_CFG_COMP_POL_LOW <<
  865. ADS1015_CFG_COMP_POL_SHIFT;
  866. break;
  867. case IRQF_TRIGGER_HIGH:
  868. cfg_comp |= ADS1015_CFG_COMP_POL_HIGH <<
  869. ADS1015_CFG_COMP_POL_SHIFT;
  870. break;
  871. default:
  872. return -EINVAL;
  873. }
  874. ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
  875. cfg_comp_mask, cfg_comp);
  876. if (ret)
  877. return ret;
  878. ret = devm_request_threaded_irq(&client->dev, client->irq,
  879. NULL, ads1015_event_handler,
  880. irq_trig | IRQF_ONESHOT,
  881. client->name, indio_dev);
  882. if (ret)
  883. return ret;
  884. }
  885. ret = ads1015_set_conv_mode(data, ADS1015_CONTINUOUS);
  886. if (ret)
  887. return ret;
  888. data->conv_invalid = true;
  889. ret = pm_runtime_set_active(&client->dev);
  890. if (ret)
  891. return ret;
  892. pm_runtime_set_autosuspend_delay(&client->dev, ADS1015_SLEEP_DELAY_MS);
  893. pm_runtime_use_autosuspend(&client->dev);
  894. pm_runtime_enable(&client->dev);
  895. ret = iio_device_register(indio_dev);
  896. if (ret < 0) {
  897. dev_err(&client->dev, "Failed to register IIO device\n");
  898. return ret;
  899. }
  900. return 0;
  901. }
  902. static int ads1015_remove(struct i2c_client *client)
  903. {
  904. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  905. struct ads1015_data *data = iio_priv(indio_dev);
  906. iio_device_unregister(indio_dev);
  907. pm_runtime_disable(&client->dev);
  908. pm_runtime_set_suspended(&client->dev);
  909. pm_runtime_put_noidle(&client->dev);
  910. /* power down single shot mode */
  911. return ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
  912. }
  913. #ifdef CONFIG_PM
  914. static int ads1015_runtime_suspend(struct device *dev)
  915. {
  916. struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
  917. struct ads1015_data *data = iio_priv(indio_dev);
  918. return ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
  919. }
  920. static int ads1015_runtime_resume(struct device *dev)
  921. {
  922. struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
  923. struct ads1015_data *data = iio_priv(indio_dev);
  924. int ret;
  925. ret = ads1015_set_conv_mode(data, ADS1015_CONTINUOUS);
  926. if (!ret)
  927. data->conv_invalid = true;
  928. return ret;
  929. }
  930. #endif
  931. static const struct dev_pm_ops ads1015_pm_ops = {
  932. SET_RUNTIME_PM_OPS(ads1015_runtime_suspend,
  933. ads1015_runtime_resume, NULL)
  934. };
  935. static const struct i2c_device_id ads1015_id[] = {
  936. {"ads1015", ADS1015},
  937. {"ads1115", ADS1115},
  938. {}
  939. };
  940. MODULE_DEVICE_TABLE(i2c, ads1015_id);
  941. static const struct of_device_id ads1015_of_match[] = {
  942. {
  943. .compatible = "ti,ads1015",
  944. .data = (void *)ADS1015
  945. },
  946. {
  947. .compatible = "ti,ads1115",
  948. .data = (void *)ADS1115
  949. },
  950. {}
  951. };
  952. MODULE_DEVICE_TABLE(of, ads1015_of_match);
  953. static struct i2c_driver ads1015_driver = {
  954. .driver = {
  955. .name = ADS1015_DRV_NAME,
  956. .of_match_table = ads1015_of_match,
  957. .pm = &ads1015_pm_ops,
  958. },
  959. .probe = ads1015_probe,
  960. .remove = ads1015_remove,
  961. .id_table = ads1015_id,
  962. };
  963. module_i2c_driver(ads1015_driver);
  964. MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>");
  965. MODULE_DESCRIPTION("Texas Instruments ADS1015 ADC driver");
  966. MODULE_LICENSE("GPL v2");