ti-ads1015.c 29 KB

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