ad7280a.c 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * AD7280A Lithium Ion Battery Monitoring System
  4. *
  5. * Copyright 2011 Analog Devices Inc.
  6. */
  7. #include <linux/bitfield.h>
  8. #include <linux/bits.h>
  9. #include <linux/cleanup.h>
  10. #include <linux/crc8.h>
  11. #include <linux/delay.h>
  12. #include <linux/device.h>
  13. #include <linux/err.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/kernel.h>
  16. #include <linux/module.h>
  17. #include <linux/mod_devicetable.h>
  18. #include <linux/mutex.h>
  19. #include <linux/slab.h>
  20. #include <linux/sysfs.h>
  21. #include <linux/spi/spi.h>
  22. #include <linux/iio/events.h>
  23. #include <linux/iio/iio.h>
  24. /* Registers */
  25. #define AD7280A_CELL_VOLTAGE_1_REG 0x0 /* D11 to D0, Read only */
  26. #define AD7280A_CELL_VOLTAGE_2_REG 0x1 /* D11 to D0, Read only */
  27. #define AD7280A_CELL_VOLTAGE_3_REG 0x2 /* D11 to D0, Read only */
  28. #define AD7280A_CELL_VOLTAGE_4_REG 0x3 /* D11 to D0, Read only */
  29. #define AD7280A_CELL_VOLTAGE_5_REG 0x4 /* D11 to D0, Read only */
  30. #define AD7280A_CELL_VOLTAGE_6_REG 0x5 /* D11 to D0, Read only */
  31. #define AD7280A_AUX_ADC_1_REG 0x6 /* D11 to D0, Read only */
  32. #define AD7280A_AUX_ADC_2_REG 0x7 /* D11 to D0, Read only */
  33. #define AD7280A_AUX_ADC_3_REG 0x8 /* D11 to D0, Read only */
  34. #define AD7280A_AUX_ADC_4_REG 0x9 /* D11 to D0, Read only */
  35. #define AD7280A_AUX_ADC_5_REG 0xA /* D11 to D0, Read only */
  36. #define AD7280A_AUX_ADC_6_REG 0xB /* D11 to D0, Read only */
  37. #define AD7280A_SELF_TEST_REG 0xC /* D11 to D0, Read only */
  38. #define AD7280A_CTRL_HB_REG 0xD /* D15 to D8, Read/write */
  39. #define AD7280A_CTRL_HB_CONV_INPUT_MSK GENMASK(7, 6)
  40. #define AD7280A_CTRL_HB_CONV_INPUT_ALL 0
  41. #define AD7280A_CTRL_HB_CONV_INPUT_6CELL_AUX1_3_5 1
  42. #define AD7280A_CTRL_HB_CONV_INPUT_6CELL 2
  43. #define AD7280A_CTRL_HB_CONV_INPUT_SELF_TEST 3
  44. #define AD7280A_CTRL_HB_CONV_RREAD_MSK GENMASK(5, 4)
  45. #define AD7280A_CTRL_HB_CONV_RREAD_ALL 0
  46. #define AD7280A_CTRL_HB_CONV_RREAD_6CELL_AUX1_3_5 1
  47. #define AD7280A_CTRL_HB_CONV_RREAD_6CELL 2
  48. #define AD7280A_CTRL_HB_CONV_RREAD_NO 3
  49. #define AD7280A_CTRL_HB_CONV_START_MSK BIT(3)
  50. #define AD7280A_CTRL_HB_CONV_START_CNVST 0
  51. #define AD7280A_CTRL_HB_CONV_START_CS 1
  52. #define AD7280A_CTRL_HB_CONV_AVG_MSK GENMASK(2, 1)
  53. #define AD7280A_CTRL_HB_CONV_AVG_DIS 0
  54. #define AD7280A_CTRL_HB_CONV_AVG_2 1
  55. #define AD7280A_CTRL_HB_CONV_AVG_4 2
  56. #define AD7280A_CTRL_HB_CONV_AVG_8 3
  57. #define AD7280A_CTRL_HB_PWRDN_SW BIT(0)
  58. #define AD7280A_CTRL_LB_REG 0xE /* D7 to D0, Read/write */
  59. #define AD7280A_CTRL_LB_SWRST_MSK BIT(7)
  60. #define AD7280A_CTRL_LB_ACQ_TIME_MSK GENMASK(6, 5)
  61. #define AD7280A_CTRL_LB_ACQ_TIME_400ns 0
  62. #define AD7280A_CTRL_LB_ACQ_TIME_800ns 1
  63. #define AD7280A_CTRL_LB_ACQ_TIME_1200ns 2
  64. #define AD7280A_CTRL_LB_ACQ_TIME_1600ns 3
  65. #define AD7280A_CTRL_LB_MUST_SET BIT(4)
  66. #define AD7280A_CTRL_LB_THERMISTOR_MSK BIT(3)
  67. #define AD7280A_CTRL_LB_LOCK_DEV_ADDR_MSK BIT(2)
  68. #define AD7280A_CTRL_LB_INC_DEV_ADDR_MSK BIT(1)
  69. #define AD7280A_CTRL_LB_DAISY_CHAIN_RB_MSK BIT(0)
  70. #define AD7280A_CELL_OVERVOLTAGE_REG 0xF /* D7 to D0, Read/write */
  71. #define AD7280A_CELL_UNDERVOLTAGE_REG 0x10 /* D7 to D0, Read/write */
  72. #define AD7280A_AUX_ADC_OVERVOLTAGE_REG 0x11 /* D7 to D0, Read/write */
  73. #define AD7280A_AUX_ADC_UNDERVOLTAGE_REG 0x12 /* D7 to D0, Read/write */
  74. #define AD7280A_ALERT_REG 0x13 /* D7 to D0, Read/write */
  75. #define AD7280A_ALERT_REMOVE_MSK GENMASK(3, 0)
  76. #define AD7280A_ALERT_REMOVE_AUX5 BIT(0)
  77. #define AD7280A_ALERT_REMOVE_AUX3_AUX5 BIT(1)
  78. #define AD7280A_ALERT_REMOVE_VIN5 BIT(2)
  79. #define AD7280A_ALERT_REMOVE_VIN4_VIN5 BIT(3)
  80. #define AD7280A_ALERT_GEN_STATIC_HIGH BIT(6)
  81. #define AD7280A_ALERT_RELAY_SIG_CHAIN_DOWN (BIT(7) | BIT(6))
  82. #define AD7280A_CELL_BALANCE_REG 0x14 /* D7 to D0, Read/write */
  83. #define AD7280A_CELL_BALANCE_CHAN_BITMAP_MSK GENMASK(7, 2)
  84. #define AD7280A_CB1_TIMER_REG 0x15 /* D7 to D0, Read/write */
  85. #define AD7280A_CB_TIMER_VAL_MSK GENMASK(7, 3)
  86. #define AD7280A_CB2_TIMER_REG 0x16 /* D7 to D0, Read/write */
  87. #define AD7280A_CB3_TIMER_REG 0x17 /* D7 to D0, Read/write */
  88. #define AD7280A_CB4_TIMER_REG 0x18 /* D7 to D0, Read/write */
  89. #define AD7280A_CB5_TIMER_REG 0x19 /* D7 to D0, Read/write */
  90. #define AD7280A_CB6_TIMER_REG 0x1A /* D7 to D0, Read/write */
  91. #define AD7280A_PD_TIMER_REG 0x1B /* D7 to D0, Read/write */
  92. #define AD7280A_READ_REG 0x1C /* D7 to D0, Read/write */
  93. #define AD7280A_READ_ADDR_MSK GENMASK(7, 2)
  94. #define AD7280A_CNVST_CTRL_REG 0x1D /* D7 to D0, Read/write */
  95. /* Transfer fields */
  96. #define AD7280A_TRANS_WRITE_DEVADDR_MSK GENMASK(31, 27)
  97. #define AD7280A_TRANS_WRITE_ADDR_MSK GENMASK(26, 21)
  98. #define AD7280A_TRANS_WRITE_VAL_MSK GENMASK(20, 13)
  99. #define AD7280A_TRANS_WRITE_ALL_MSK BIT(12)
  100. #define AD7280A_TRANS_WRITE_CRC_MSK GENMASK(10, 3)
  101. #define AD7280A_TRANS_WRITE_RES_PATTERN 0x2
  102. /* Layouts differ for channel vs other registers */
  103. #define AD7280A_TRANS_READ_DEVADDR_MSK GENMASK(31, 27)
  104. #define AD7280A_TRANS_READ_CONV_CHANADDR_MSK GENMASK(26, 23)
  105. #define AD7280A_TRANS_READ_CONV_DATA_MSK GENMASK(22, 11)
  106. #define AD7280A_TRANS_READ_REG_REGADDR_MSK GENMASK(26, 21)
  107. #define AD7280A_TRANS_READ_REG_DATA_MSK GENMASK(20, 13)
  108. #define AD7280A_TRANS_READ_WRITE_ACK_MSK BIT(10)
  109. #define AD7280A_TRANS_READ_CRC_MSK GENMASK(9, 2)
  110. /* Magic value used to indicate this special case */
  111. #define AD7280A_ALL_CELLS (0xAD << 16)
  112. #define AD7280A_MAX_SPI_CLK_HZ 700000 /* < 1MHz */
  113. #define AD7280A_MAX_CHAIN 8
  114. #define AD7280A_CELLS_PER_DEV 6
  115. #define AD7280A_BITS 12
  116. #define AD7280A_NUM_CH (AD7280A_AUX_ADC_6_REG - \
  117. AD7280A_CELL_VOLTAGE_1_REG + 1)
  118. #define AD7280A_CALC_VOLTAGE_CHAN_NUM(d, c) (((d) * AD7280A_CELLS_PER_DEV) + \
  119. (c))
  120. #define AD7280A_CALC_TEMP_CHAN_NUM(d, c) (((d) * AD7280A_CELLS_PER_DEV) + \
  121. (c) - AD7280A_CELLS_PER_DEV)
  122. #define AD7280A_DEVADDR_MASTER 0
  123. #define AD7280A_DEVADDR_ALL 0x1F
  124. static const unsigned short ad7280a_n_avg[4] = {1, 2, 4, 8};
  125. static const unsigned short ad7280a_t_acq_ns[4] = {470, 1030, 1510, 1945};
  126. /* 5-bit device address is sent LSB first */
  127. static unsigned int ad7280a_devaddr(unsigned int addr)
  128. {
  129. return ((addr & 0x1) << 4) |
  130. ((addr & 0x2) << 2) |
  131. (addr & 0x4) |
  132. ((addr & 0x8) >> 2) |
  133. ((addr & 0x10) >> 4);
  134. }
  135. /*
  136. * During a read a valid write is mandatory.
  137. * So writing to the highest available address (Address 0x1F) and setting the
  138. * address all parts bit to 0 is recommended.
  139. * So the TXVAL is AD7280A_DEVADDR_ALL + CRC
  140. */
  141. #define AD7280A_READ_TXVAL 0xF800030A
  142. /*
  143. * AD7280 CRC
  144. *
  145. * P(x) = x^8 + x^5 + x^3 + x^2 + x^1 + x^0 = 0b100101111 => 0x2F
  146. */
  147. #define POLYNOM 0x2F
  148. struct ad7280_state {
  149. struct spi_device *spi;
  150. struct iio_chan_spec *channels;
  151. unsigned int chain_last_alert_ignore;
  152. bool thermistor_term_en;
  153. int slave_num;
  154. int scan_cnt;
  155. int readback_delay_us;
  156. unsigned char crc_tab[CRC8_TABLE_SIZE];
  157. u8 oversampling_ratio;
  158. u8 acquisition_time;
  159. unsigned char ctrl_lb;
  160. unsigned char cell_threshhigh;
  161. unsigned char cell_threshlow;
  162. unsigned char aux_threshhigh;
  163. unsigned char aux_threshlow;
  164. unsigned char cb_mask[AD7280A_MAX_CHAIN];
  165. struct mutex lock; /* protect sensor state */
  166. __be32 tx __aligned(IIO_DMA_MINALIGN);
  167. __be32 rx;
  168. };
  169. static unsigned char ad7280_calc_crc8(unsigned char *crc_tab, unsigned int val)
  170. {
  171. unsigned char crc;
  172. crc = crc_tab[val >> 16 & 0xFF];
  173. crc = crc_tab[crc ^ (val >> 8 & 0xFF)];
  174. return crc ^ (val & 0xFF);
  175. }
  176. static int ad7280_check_crc(struct ad7280_state *st, unsigned int val)
  177. {
  178. unsigned char crc = ad7280_calc_crc8(st->crc_tab, val >> 10);
  179. if (crc != ((val >> 2) & 0xFF))
  180. return -EIO;
  181. return 0;
  182. }
  183. /*
  184. * After initiating a conversion sequence we need to wait until the conversion
  185. * is done. The delay is typically in the range of 15..30us however depending on
  186. * the number of devices in the daisy chain, the number of averages taken,
  187. * conversion delays and acquisition time options it may take up to 250us, in
  188. * this case we better sleep instead of busy wait.
  189. */
  190. static void ad7280_delay(struct ad7280_state *st)
  191. {
  192. if (st->readback_delay_us < 50)
  193. udelay(st->readback_delay_us);
  194. else
  195. usleep_range(250, 500);
  196. }
  197. static int __ad7280_read32(struct ad7280_state *st, unsigned int *val)
  198. {
  199. int ret;
  200. struct spi_transfer t = {
  201. .tx_buf = &st->tx,
  202. .rx_buf = &st->rx,
  203. .len = sizeof(st->tx),
  204. };
  205. st->tx = cpu_to_be32(AD7280A_READ_TXVAL);
  206. ret = spi_sync_transfer(st->spi, &t, 1);
  207. if (ret)
  208. return ret;
  209. *val = be32_to_cpu(st->rx);
  210. return 0;
  211. }
  212. static int ad7280_write(struct ad7280_state *st, unsigned int devaddr,
  213. unsigned int addr, bool all, unsigned int val)
  214. {
  215. unsigned int reg = FIELD_PREP(AD7280A_TRANS_WRITE_DEVADDR_MSK, devaddr) |
  216. FIELD_PREP(AD7280A_TRANS_WRITE_ADDR_MSK, addr) |
  217. FIELD_PREP(AD7280A_TRANS_WRITE_VAL_MSK, val) |
  218. FIELD_PREP(AD7280A_TRANS_WRITE_ALL_MSK, all);
  219. reg |= FIELD_PREP(AD7280A_TRANS_WRITE_CRC_MSK,
  220. ad7280_calc_crc8(st->crc_tab, reg >> 11));
  221. /* Reserved b010 pattern not included crc calc */
  222. reg |= AD7280A_TRANS_WRITE_RES_PATTERN;
  223. st->tx = cpu_to_be32(reg);
  224. return spi_write(st->spi, &st->tx, sizeof(st->tx));
  225. }
  226. static int ad7280_read_reg(struct ad7280_state *st, unsigned int devaddr,
  227. unsigned int addr)
  228. {
  229. int ret;
  230. unsigned int tmp;
  231. /* turns off the read operation on all parts */
  232. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_CTRL_HB_REG, 1,
  233. FIELD_PREP(AD7280A_CTRL_HB_CONV_INPUT_MSK,
  234. AD7280A_CTRL_HB_CONV_INPUT_ALL) |
  235. FIELD_PREP(AD7280A_CTRL_HB_CONV_RREAD_MSK,
  236. AD7280A_CTRL_HB_CONV_RREAD_NO) |
  237. FIELD_PREP(AD7280A_CTRL_HB_CONV_AVG_MSK,
  238. st->oversampling_ratio));
  239. if (ret)
  240. return ret;
  241. /* turns on the read operation on the addressed part */
  242. ret = ad7280_write(st, devaddr, AD7280A_CTRL_HB_REG, 0,
  243. FIELD_PREP(AD7280A_CTRL_HB_CONV_INPUT_MSK,
  244. AD7280A_CTRL_HB_CONV_INPUT_ALL) |
  245. FIELD_PREP(AD7280A_CTRL_HB_CONV_RREAD_MSK,
  246. AD7280A_CTRL_HB_CONV_RREAD_ALL) |
  247. FIELD_PREP(AD7280A_CTRL_HB_CONV_AVG_MSK,
  248. st->oversampling_ratio));
  249. if (ret)
  250. return ret;
  251. /* Set register address on the part to be read from */
  252. ret = ad7280_write(st, devaddr, AD7280A_READ_REG, 0,
  253. FIELD_PREP(AD7280A_READ_ADDR_MSK, addr));
  254. if (ret)
  255. return ret;
  256. ret = __ad7280_read32(st, &tmp);
  257. if (ret)
  258. return ret;
  259. if (ad7280_check_crc(st, tmp))
  260. return -EIO;
  261. if ((FIELD_GET(AD7280A_TRANS_READ_DEVADDR_MSK, tmp) != devaddr) ||
  262. (FIELD_GET(AD7280A_TRANS_READ_REG_REGADDR_MSK, tmp) != addr))
  263. return -EFAULT;
  264. return FIELD_GET(AD7280A_TRANS_READ_REG_DATA_MSK, tmp);
  265. }
  266. static int ad7280_read_channel(struct ad7280_state *st, unsigned int devaddr,
  267. unsigned int addr)
  268. {
  269. int ret;
  270. unsigned int tmp;
  271. ret = ad7280_write(st, devaddr, AD7280A_READ_REG, 0,
  272. FIELD_PREP(AD7280A_READ_ADDR_MSK, addr));
  273. if (ret)
  274. return ret;
  275. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_CTRL_HB_REG, 1,
  276. FIELD_PREP(AD7280A_CTRL_HB_CONV_INPUT_MSK,
  277. AD7280A_CTRL_HB_CONV_INPUT_ALL) |
  278. FIELD_PREP(AD7280A_CTRL_HB_CONV_RREAD_MSK,
  279. AD7280A_CTRL_HB_CONV_RREAD_NO) |
  280. FIELD_PREP(AD7280A_CTRL_HB_CONV_AVG_MSK,
  281. st->oversampling_ratio));
  282. if (ret)
  283. return ret;
  284. ret = ad7280_write(st, devaddr, AD7280A_CTRL_HB_REG, 0,
  285. FIELD_PREP(AD7280A_CTRL_HB_CONV_INPUT_MSK,
  286. AD7280A_CTRL_HB_CONV_INPUT_ALL) |
  287. FIELD_PREP(AD7280A_CTRL_HB_CONV_RREAD_MSK,
  288. AD7280A_CTRL_HB_CONV_RREAD_ALL) |
  289. FIELD_PREP(AD7280A_CTRL_HB_CONV_START_MSK,
  290. AD7280A_CTRL_HB_CONV_START_CS) |
  291. FIELD_PREP(AD7280A_CTRL_HB_CONV_AVG_MSK,
  292. st->oversampling_ratio));
  293. if (ret)
  294. return ret;
  295. ad7280_delay(st);
  296. ret = __ad7280_read32(st, &tmp);
  297. if (ret)
  298. return ret;
  299. if (ad7280_check_crc(st, tmp))
  300. return -EIO;
  301. if ((FIELD_GET(AD7280A_TRANS_READ_DEVADDR_MSK, tmp) != devaddr) ||
  302. (FIELD_GET(AD7280A_TRANS_READ_CONV_CHANADDR_MSK, tmp) != addr))
  303. return -EFAULT;
  304. return FIELD_GET(AD7280A_TRANS_READ_CONV_DATA_MSK, tmp);
  305. }
  306. static int ad7280_read_all_channels(struct ad7280_state *st, unsigned int cnt,
  307. unsigned int *array)
  308. {
  309. int i, ret;
  310. unsigned int tmp, sum = 0;
  311. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_READ_REG, 1,
  312. AD7280A_CELL_VOLTAGE_1_REG << 2);
  313. if (ret)
  314. return ret;
  315. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_CTRL_HB_REG, 1,
  316. FIELD_PREP(AD7280A_CTRL_HB_CONV_INPUT_MSK,
  317. AD7280A_CTRL_HB_CONV_INPUT_ALL) |
  318. FIELD_PREP(AD7280A_CTRL_HB_CONV_RREAD_MSK,
  319. AD7280A_CTRL_HB_CONV_RREAD_ALL) |
  320. FIELD_PREP(AD7280A_CTRL_HB_CONV_START_MSK,
  321. AD7280A_CTRL_HB_CONV_START_CS) |
  322. FIELD_PREP(AD7280A_CTRL_HB_CONV_AVG_MSK,
  323. st->oversampling_ratio));
  324. if (ret)
  325. return ret;
  326. ad7280_delay(st);
  327. for (i = 0; i < cnt; i++) {
  328. ret = __ad7280_read32(st, &tmp);
  329. if (ret)
  330. return ret;
  331. if (ad7280_check_crc(st, tmp))
  332. return -EIO;
  333. if (array)
  334. array[i] = tmp;
  335. /* only sum cell voltages */
  336. if (FIELD_GET(AD7280A_TRANS_READ_CONV_CHANADDR_MSK, tmp) <=
  337. AD7280A_CELL_VOLTAGE_6_REG)
  338. sum += FIELD_GET(AD7280A_TRANS_READ_CONV_DATA_MSK, tmp);
  339. }
  340. return sum;
  341. }
  342. static void ad7280_sw_power_down(void *data)
  343. {
  344. struct ad7280_state *st = data;
  345. ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_CTRL_HB_REG, 1,
  346. AD7280A_CTRL_HB_PWRDN_SW |
  347. FIELD_PREP(AD7280A_CTRL_HB_CONV_AVG_MSK, st->oversampling_ratio));
  348. }
  349. static int ad7280_chain_setup(struct ad7280_state *st)
  350. {
  351. unsigned int val, n;
  352. int ret;
  353. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_CTRL_LB_REG, 1,
  354. FIELD_PREP(AD7280A_CTRL_LB_DAISY_CHAIN_RB_MSK, 1) |
  355. FIELD_PREP(AD7280A_CTRL_LB_LOCK_DEV_ADDR_MSK, 1) |
  356. AD7280A_CTRL_LB_MUST_SET |
  357. FIELD_PREP(AD7280A_CTRL_LB_SWRST_MSK, 1) |
  358. st->ctrl_lb);
  359. if (ret)
  360. return ret;
  361. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_CTRL_LB_REG, 1,
  362. FIELD_PREP(AD7280A_CTRL_LB_DAISY_CHAIN_RB_MSK, 1) |
  363. FIELD_PREP(AD7280A_CTRL_LB_LOCK_DEV_ADDR_MSK, 1) |
  364. AD7280A_CTRL_LB_MUST_SET |
  365. FIELD_PREP(AD7280A_CTRL_LB_SWRST_MSK, 0) |
  366. st->ctrl_lb);
  367. if (ret)
  368. goto error_power_down;
  369. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_READ_REG, 1,
  370. FIELD_PREP(AD7280A_READ_ADDR_MSK, AD7280A_CTRL_LB_REG));
  371. if (ret)
  372. goto error_power_down;
  373. for (n = 0; n <= AD7280A_MAX_CHAIN; n++) {
  374. ret = __ad7280_read32(st, &val);
  375. if (ret)
  376. goto error_power_down;
  377. if (val == 0)
  378. return n - 1;
  379. if (ad7280_check_crc(st, val)) {
  380. ret = -EIO;
  381. goto error_power_down;
  382. }
  383. if (n != ad7280a_devaddr(FIELD_GET(AD7280A_TRANS_READ_DEVADDR_MSK, val))) {
  384. ret = -EIO;
  385. goto error_power_down;
  386. }
  387. }
  388. ret = -EFAULT;
  389. error_power_down:
  390. ad7280_write(st, AD7280A_DEVADDR_MASTER, AD7280A_CTRL_HB_REG, 1,
  391. AD7280A_CTRL_HB_PWRDN_SW |
  392. FIELD_PREP(AD7280A_CTRL_HB_CONV_AVG_MSK, st->oversampling_ratio));
  393. return ret;
  394. }
  395. static ssize_t ad7280_show_balance_sw(struct iio_dev *indio_dev,
  396. uintptr_t private,
  397. const struct iio_chan_spec *chan, char *buf)
  398. {
  399. struct ad7280_state *st = iio_priv(indio_dev);
  400. return sysfs_emit(buf, "%d\n",
  401. !!(st->cb_mask[chan->address >> 8] &
  402. BIT(chan->address & 0xFF)));
  403. }
  404. static ssize_t ad7280_store_balance_sw(struct iio_dev *indio_dev,
  405. uintptr_t private,
  406. const struct iio_chan_spec *chan,
  407. const char *buf, size_t len)
  408. {
  409. struct ad7280_state *st = iio_priv(indio_dev);
  410. unsigned int devaddr, ch;
  411. bool readin;
  412. int ret;
  413. ret = kstrtobool(buf, &readin);
  414. if (ret)
  415. return ret;
  416. devaddr = chan->address >> 8;
  417. ch = chan->address & 0xFF;
  418. mutex_lock(&st->lock);
  419. if (readin)
  420. st->cb_mask[devaddr] |= BIT(ch);
  421. else
  422. st->cb_mask[devaddr] &= ~BIT(ch);
  423. ret = ad7280_write(st, devaddr, AD7280A_CELL_BALANCE_REG, 0,
  424. FIELD_PREP(AD7280A_CELL_BALANCE_CHAN_BITMAP_MSK,
  425. st->cb_mask[devaddr]));
  426. mutex_unlock(&st->lock);
  427. return ret ? ret : len;
  428. }
  429. static ssize_t ad7280_show_balance_timer(struct iio_dev *indio_dev,
  430. uintptr_t private,
  431. const struct iio_chan_spec *chan,
  432. char *buf)
  433. {
  434. struct ad7280_state *st = iio_priv(indio_dev);
  435. unsigned int msecs;
  436. int ret;
  437. mutex_lock(&st->lock);
  438. ret = ad7280_read_reg(st, chan->address >> 8,
  439. (chan->address & 0xFF) + AD7280A_CB1_TIMER_REG);
  440. mutex_unlock(&st->lock);
  441. if (ret < 0)
  442. return ret;
  443. msecs = FIELD_GET(AD7280A_CB_TIMER_VAL_MSK, ret) * 71500;
  444. return sysfs_emit(buf, "%u.%u\n", msecs / 1000, msecs % 1000);
  445. }
  446. static ssize_t ad7280_store_balance_timer(struct iio_dev *indio_dev,
  447. uintptr_t private,
  448. const struct iio_chan_spec *chan,
  449. const char *buf, size_t len)
  450. {
  451. struct ad7280_state *st = iio_priv(indio_dev);
  452. int val, val2;
  453. int ret;
  454. ret = iio_str_to_fixpoint(buf, 1000, &val, &val2);
  455. if (ret)
  456. return ret;
  457. val = val * 1000 + val2;
  458. val /= 71500;
  459. if (val > 31)
  460. return -EINVAL;
  461. mutex_lock(&st->lock);
  462. ret = ad7280_write(st, chan->address >> 8,
  463. (chan->address & 0xFF) + AD7280A_CB1_TIMER_REG, 0,
  464. FIELD_PREP(AD7280A_CB_TIMER_VAL_MSK, val));
  465. mutex_unlock(&st->lock);
  466. return ret ? ret : len;
  467. }
  468. static const struct iio_chan_spec_ext_info ad7280_cell_ext_info[] = {
  469. {
  470. .name = "balance_switch_en",
  471. .read = ad7280_show_balance_sw,
  472. .write = ad7280_store_balance_sw,
  473. .shared = IIO_SEPARATE,
  474. }, {
  475. .name = "balance_switch_timer",
  476. .read = ad7280_show_balance_timer,
  477. .write = ad7280_store_balance_timer,
  478. .shared = IIO_SEPARATE,
  479. },
  480. {}
  481. };
  482. static const struct iio_event_spec ad7280_events[] = {
  483. {
  484. .type = IIO_EV_TYPE_THRESH,
  485. .dir = IIO_EV_DIR_RISING,
  486. .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE),
  487. }, {
  488. .type = IIO_EV_TYPE_THRESH,
  489. .dir = IIO_EV_DIR_FALLING,
  490. .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE),
  491. },
  492. };
  493. static void ad7280_voltage_channel_init(struct iio_chan_spec *chan, int i,
  494. bool irq_present)
  495. {
  496. chan->type = IIO_VOLTAGE;
  497. chan->differential = 1;
  498. chan->channel = i;
  499. chan->channel2 = chan->channel + 1;
  500. if (irq_present) {
  501. chan->event_spec = ad7280_events;
  502. chan->num_event_specs = ARRAY_SIZE(ad7280_events);
  503. }
  504. chan->ext_info = ad7280_cell_ext_info;
  505. }
  506. static void ad7280_temp_channel_init(struct iio_chan_spec *chan, int i,
  507. bool irq_present)
  508. {
  509. chan->type = IIO_TEMP;
  510. chan->channel = i;
  511. if (irq_present) {
  512. chan->event_spec = ad7280_events;
  513. chan->num_event_specs = ARRAY_SIZE(ad7280_events);
  514. }
  515. }
  516. static void ad7280_common_fields_init(struct iio_chan_spec *chan, int addr,
  517. int cnt)
  518. {
  519. chan->indexed = 1;
  520. chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
  521. chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
  522. chan->info_mask_shared_by_all = BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO);
  523. chan->address = addr;
  524. chan->scan_index = cnt;
  525. chan->scan_type.sign = 'u';
  526. chan->scan_type.realbits = 12;
  527. chan->scan_type.storagebits = 32;
  528. }
  529. static void ad7280_total_voltage_channel_init(struct iio_chan_spec *chan,
  530. int cnt, int dev)
  531. {
  532. chan->type = IIO_VOLTAGE;
  533. chan->differential = 1;
  534. chan->channel = 0;
  535. chan->channel2 = dev * AD7280A_CELLS_PER_DEV;
  536. chan->address = AD7280A_ALL_CELLS;
  537. chan->indexed = 1;
  538. chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
  539. chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
  540. chan->scan_index = cnt;
  541. chan->scan_type.sign = 'u';
  542. chan->scan_type.realbits = 32;
  543. chan->scan_type.storagebits = 32;
  544. }
  545. static void ad7280_init_dev_channels(struct ad7280_state *st, int dev, int *cnt,
  546. bool irq_present)
  547. {
  548. int addr, ch, i;
  549. struct iio_chan_spec *chan;
  550. for (ch = AD7280A_CELL_VOLTAGE_1_REG; ch <= AD7280A_AUX_ADC_6_REG; ch++) {
  551. chan = &st->channels[*cnt];
  552. if (ch < AD7280A_AUX_ADC_1_REG) {
  553. i = AD7280A_CALC_VOLTAGE_CHAN_NUM(dev, ch);
  554. ad7280_voltage_channel_init(chan, i, irq_present);
  555. } else {
  556. i = AD7280A_CALC_TEMP_CHAN_NUM(dev, ch);
  557. ad7280_temp_channel_init(chan, i, irq_present);
  558. }
  559. addr = ad7280a_devaddr(dev) << 8 | ch;
  560. ad7280_common_fields_init(chan, addr, *cnt);
  561. (*cnt)++;
  562. }
  563. }
  564. static int ad7280_channel_init(struct ad7280_state *st, bool irq_present)
  565. {
  566. int dev, cnt = 0;
  567. st->channels = devm_kcalloc(&st->spi->dev, (st->slave_num + 1) * 12 + 1,
  568. sizeof(*st->channels), GFP_KERNEL);
  569. if (!st->channels)
  570. return -ENOMEM;
  571. for (dev = 0; dev <= st->slave_num; dev++)
  572. ad7280_init_dev_channels(st, dev, &cnt, irq_present);
  573. ad7280_total_voltage_channel_init(&st->channels[cnt], cnt, dev);
  574. return cnt + 1;
  575. }
  576. static int ad7280a_read_thresh(struct iio_dev *indio_dev,
  577. const struct iio_chan_spec *chan,
  578. enum iio_event_type type,
  579. enum iio_event_direction dir,
  580. enum iio_event_info info, int *val, int *val2)
  581. {
  582. struct ad7280_state *st = iio_priv(indio_dev);
  583. switch (chan->type) {
  584. case IIO_VOLTAGE:
  585. switch (dir) {
  586. case IIO_EV_DIR_RISING:
  587. *val = 1000 + (st->cell_threshhigh * 1568L) / 100;
  588. return IIO_VAL_INT;
  589. case IIO_EV_DIR_FALLING:
  590. *val = 1000 + (st->cell_threshlow * 1568L) / 100;
  591. return IIO_VAL_INT;
  592. default:
  593. return -EINVAL;
  594. }
  595. break;
  596. case IIO_TEMP:
  597. switch (dir) {
  598. case IIO_EV_DIR_RISING:
  599. *val = ((st->aux_threshhigh) * 196L) / 10;
  600. return IIO_VAL_INT;
  601. case IIO_EV_DIR_FALLING:
  602. *val = (st->aux_threshlow * 196L) / 10;
  603. return IIO_VAL_INT;
  604. default:
  605. return -EINVAL;
  606. }
  607. break;
  608. default:
  609. return -EINVAL;
  610. }
  611. }
  612. static int ad7280a_write_thresh(struct iio_dev *indio_dev,
  613. const struct iio_chan_spec *chan,
  614. enum iio_event_type type,
  615. enum iio_event_direction dir,
  616. enum iio_event_info info,
  617. int val, int val2)
  618. {
  619. struct ad7280_state *st = iio_priv(indio_dev);
  620. unsigned int addr;
  621. long value;
  622. int ret;
  623. if (val2 != 0)
  624. return -EINVAL;
  625. mutex_lock(&st->lock);
  626. switch (chan->type) {
  627. case IIO_VOLTAGE:
  628. value = ((val - 1000) * 100) / 1568; /* LSB 15.68mV */
  629. value = clamp(value, 0L, 0xFFL);
  630. switch (dir) {
  631. case IIO_EV_DIR_RISING:
  632. addr = AD7280A_CELL_OVERVOLTAGE_REG;
  633. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, addr,
  634. 1, value);
  635. if (ret)
  636. break;
  637. st->cell_threshhigh = value;
  638. break;
  639. case IIO_EV_DIR_FALLING:
  640. addr = AD7280A_CELL_UNDERVOLTAGE_REG;
  641. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, addr,
  642. 1, value);
  643. if (ret)
  644. break;
  645. st->cell_threshlow = value;
  646. break;
  647. default:
  648. ret = -EINVAL;
  649. goto err_unlock;
  650. }
  651. break;
  652. case IIO_TEMP:
  653. value = (val * 10) / 196; /* LSB 19.6mV */
  654. value = clamp(value, 0L, 0xFFL);
  655. switch (dir) {
  656. case IIO_EV_DIR_RISING:
  657. addr = AD7280A_AUX_ADC_OVERVOLTAGE_REG;
  658. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, addr,
  659. 1, value);
  660. if (ret)
  661. break;
  662. st->aux_threshhigh = value;
  663. break;
  664. case IIO_EV_DIR_FALLING:
  665. addr = AD7280A_AUX_ADC_UNDERVOLTAGE_REG;
  666. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER, addr,
  667. 1, value);
  668. if (ret)
  669. break;
  670. st->aux_threshlow = value;
  671. break;
  672. default:
  673. ret = -EINVAL;
  674. goto err_unlock;
  675. }
  676. break;
  677. default:
  678. ret = -EINVAL;
  679. goto err_unlock;
  680. }
  681. err_unlock:
  682. mutex_unlock(&st->lock);
  683. return ret;
  684. }
  685. static irqreturn_t ad7280_event_handler(int irq, void *private)
  686. {
  687. struct iio_dev *indio_dev = private;
  688. struct ad7280_state *st = iio_priv(indio_dev);
  689. int i, ret;
  690. unsigned int *channels __free(kfree) = kcalloc(st->scan_cnt, sizeof(*channels),
  691. GFP_KERNEL);
  692. if (!channels)
  693. return IRQ_HANDLED;
  694. ret = ad7280_read_all_channels(st, st->scan_cnt, channels);
  695. if (ret < 0)
  696. return IRQ_HANDLED;
  697. for (i = 0; i < st->scan_cnt; i++) {
  698. unsigned int val;
  699. val = FIELD_GET(AD7280A_TRANS_READ_CONV_DATA_MSK, channels[i]);
  700. if (FIELD_GET(AD7280A_TRANS_READ_CONV_CHANADDR_MSK, channels[i]) <=
  701. AD7280A_CELL_VOLTAGE_6_REG) {
  702. if (val >= st->cell_threshhigh) {
  703. u64 tmp = IIO_EVENT_CODE(IIO_VOLTAGE, 1, 0,
  704. IIO_EV_DIR_RISING,
  705. IIO_EV_TYPE_THRESH,
  706. 0, 0, 0);
  707. iio_push_event(indio_dev, tmp,
  708. iio_get_time_ns(indio_dev));
  709. } else if (val <= st->cell_threshlow) {
  710. u64 tmp = IIO_EVENT_CODE(IIO_VOLTAGE, 1, 0,
  711. IIO_EV_DIR_FALLING,
  712. IIO_EV_TYPE_THRESH,
  713. 0, 0, 0);
  714. iio_push_event(indio_dev, tmp,
  715. iio_get_time_ns(indio_dev));
  716. }
  717. } else {
  718. if (val >= st->aux_threshhigh) {
  719. u64 tmp = IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
  720. IIO_EV_TYPE_THRESH,
  721. IIO_EV_DIR_RISING);
  722. iio_push_event(indio_dev, tmp,
  723. iio_get_time_ns(indio_dev));
  724. } else if (val <= st->aux_threshlow) {
  725. u64 tmp = IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
  726. IIO_EV_TYPE_THRESH,
  727. IIO_EV_DIR_FALLING);
  728. iio_push_event(indio_dev, tmp,
  729. iio_get_time_ns(indio_dev));
  730. }
  731. }
  732. }
  733. return IRQ_HANDLED;
  734. }
  735. static void ad7280_update_delay(struct ad7280_state *st)
  736. {
  737. /*
  738. * Total Conversion Time = ((tACQ + tCONV) *
  739. * (Number of Conversions per Part)) −
  740. * tACQ + ((N - 1) * tDELAY)
  741. *
  742. * Readback Delay = Total Conversion Time + tWAIT
  743. */
  744. st->readback_delay_us =
  745. ((ad7280a_t_acq_ns[st->acquisition_time & 0x3] + 720) *
  746. (AD7280A_NUM_CH * ad7280a_n_avg[st->oversampling_ratio & 0x3])) -
  747. ad7280a_t_acq_ns[st->acquisition_time & 0x3] + st->slave_num * 250;
  748. /* Convert to usecs */
  749. st->readback_delay_us = DIV_ROUND_UP(st->readback_delay_us, 1000);
  750. st->readback_delay_us += 5; /* Add tWAIT */
  751. }
  752. static int ad7280_read_raw(struct iio_dev *indio_dev,
  753. struct iio_chan_spec const *chan,
  754. int *val,
  755. int *val2,
  756. long m)
  757. {
  758. struct ad7280_state *st = iio_priv(indio_dev);
  759. int ret;
  760. switch (m) {
  761. case IIO_CHAN_INFO_RAW:
  762. mutex_lock(&st->lock);
  763. if (chan->address == AD7280A_ALL_CELLS)
  764. ret = ad7280_read_all_channels(st, st->scan_cnt, NULL);
  765. else
  766. ret = ad7280_read_channel(st, chan->address >> 8,
  767. chan->address & 0xFF);
  768. mutex_unlock(&st->lock);
  769. if (ret < 0)
  770. return ret;
  771. *val = ret;
  772. return IIO_VAL_INT;
  773. case IIO_CHAN_INFO_SCALE:
  774. if ((chan->address & 0xFF) <= AD7280A_CELL_VOLTAGE_6_REG)
  775. *val = 4000;
  776. else
  777. *val = 5000;
  778. *val2 = AD7280A_BITS;
  779. return IIO_VAL_FRACTIONAL_LOG2;
  780. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  781. *val = ad7280a_n_avg[st->oversampling_ratio];
  782. return IIO_VAL_INT;
  783. }
  784. return -EINVAL;
  785. }
  786. static int ad7280_write_raw(struct iio_dev *indio_dev,
  787. struct iio_chan_spec const *chan,
  788. int val, int val2, long mask)
  789. {
  790. struct ad7280_state *st = iio_priv(indio_dev);
  791. int i;
  792. switch (mask) {
  793. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  794. if (val2 != 0)
  795. return -EINVAL;
  796. for (i = 0; i < ARRAY_SIZE(ad7280a_n_avg); i++) {
  797. if (val == ad7280a_n_avg[i]) {
  798. st->oversampling_ratio = i;
  799. ad7280_update_delay(st);
  800. return 0;
  801. }
  802. }
  803. return -EINVAL;
  804. default:
  805. return -EINVAL;
  806. }
  807. }
  808. static const struct iio_info ad7280_info = {
  809. .read_raw = ad7280_read_raw,
  810. .write_raw = ad7280_write_raw,
  811. .read_event_value = &ad7280a_read_thresh,
  812. .write_event_value = &ad7280a_write_thresh,
  813. };
  814. static const struct iio_info ad7280_info_no_irq = {
  815. .read_raw = ad7280_read_raw,
  816. .write_raw = ad7280_write_raw,
  817. };
  818. static int ad7280_probe(struct spi_device *spi)
  819. {
  820. struct device *dev = &spi->dev;
  821. struct ad7280_state *st;
  822. int ret;
  823. struct iio_dev *indio_dev;
  824. indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
  825. if (!indio_dev)
  826. return -ENOMEM;
  827. st = iio_priv(indio_dev);
  828. spi_set_drvdata(spi, indio_dev);
  829. st->spi = spi;
  830. mutex_init(&st->lock);
  831. st->thermistor_term_en =
  832. device_property_read_bool(dev, "adi,thermistor-termination");
  833. if (device_property_present(dev, "adi,acquisition-time-ns")) {
  834. u32 val;
  835. ret = device_property_read_u32(dev, "adi,acquisition-time-ns", &val);
  836. if (ret)
  837. return ret;
  838. switch (val) {
  839. case 400:
  840. st->acquisition_time = AD7280A_CTRL_LB_ACQ_TIME_400ns;
  841. break;
  842. case 800:
  843. st->acquisition_time = AD7280A_CTRL_LB_ACQ_TIME_800ns;
  844. break;
  845. case 1200:
  846. st->acquisition_time = AD7280A_CTRL_LB_ACQ_TIME_1200ns;
  847. break;
  848. case 1600:
  849. st->acquisition_time = AD7280A_CTRL_LB_ACQ_TIME_1600ns;
  850. break;
  851. default:
  852. dev_err(dev, "Firmware provided acquisition time is invalid\n");
  853. return -EINVAL;
  854. }
  855. } else {
  856. st->acquisition_time = AD7280A_CTRL_LB_ACQ_TIME_400ns;
  857. }
  858. /* Alert masks are intended for when particular inputs are not wired up */
  859. if (device_property_present(dev, "adi,voltage-alert-last-chan")) {
  860. u32 val;
  861. ret = device_property_read_u32(dev, "adi,voltage-alert-last-chan", &val);
  862. if (ret)
  863. return ret;
  864. switch (val) {
  865. case 3:
  866. st->chain_last_alert_ignore |= AD7280A_ALERT_REMOVE_VIN4_VIN5;
  867. break;
  868. case 4:
  869. st->chain_last_alert_ignore |= AD7280A_ALERT_REMOVE_VIN5;
  870. break;
  871. case 5:
  872. break;
  873. default:
  874. dev_err(dev,
  875. "Firmware provided last voltage alert channel invalid\n");
  876. break;
  877. }
  878. }
  879. crc8_populate_msb(st->crc_tab, POLYNOM);
  880. st->spi->max_speed_hz = AD7280A_MAX_SPI_CLK_HZ;
  881. st->spi->mode = SPI_MODE_1;
  882. spi_setup(st->spi);
  883. st->ctrl_lb = FIELD_PREP(AD7280A_CTRL_LB_ACQ_TIME_MSK, st->acquisition_time) |
  884. FIELD_PREP(AD7280A_CTRL_LB_THERMISTOR_MSK, st->thermistor_term_en);
  885. st->oversampling_ratio = 0; /* No oversampling */
  886. ret = ad7280_chain_setup(st);
  887. if (ret < 0)
  888. return ret;
  889. st->slave_num = ret;
  890. st->scan_cnt = (st->slave_num + 1) * AD7280A_NUM_CH;
  891. st->cell_threshhigh = 0xFF;
  892. st->aux_threshhigh = 0xFF;
  893. ret = devm_add_action_or_reset(dev, ad7280_sw_power_down, st);
  894. if (ret)
  895. return ret;
  896. ad7280_update_delay(st);
  897. indio_dev->name = spi_get_device_id(spi)->name;
  898. indio_dev->modes = INDIO_DIRECT_MODE;
  899. ret = ad7280_channel_init(st, spi->irq > 0);
  900. if (ret < 0)
  901. return ret;
  902. indio_dev->num_channels = ret;
  903. indio_dev->channels = st->channels;
  904. if (spi->irq > 0) {
  905. ret = ad7280_write(st, AD7280A_DEVADDR_MASTER,
  906. AD7280A_ALERT_REG, 1,
  907. AD7280A_ALERT_RELAY_SIG_CHAIN_DOWN);
  908. if (ret)
  909. return ret;
  910. ret = ad7280_write(st, ad7280a_devaddr(st->slave_num),
  911. AD7280A_ALERT_REG, 0,
  912. AD7280A_ALERT_GEN_STATIC_HIGH |
  913. FIELD_PREP(AD7280A_ALERT_REMOVE_MSK,
  914. st->chain_last_alert_ignore));
  915. if (ret)
  916. return ret;
  917. ret = devm_request_threaded_irq(dev, spi->irq,
  918. NULL,
  919. ad7280_event_handler,
  920. IRQF_TRIGGER_FALLING |
  921. IRQF_ONESHOT,
  922. indio_dev->name,
  923. indio_dev);
  924. if (ret)
  925. return ret;
  926. indio_dev->info = &ad7280_info;
  927. } else {
  928. indio_dev->info = &ad7280_info_no_irq;
  929. }
  930. return devm_iio_device_register(dev, indio_dev);
  931. }
  932. static const struct spi_device_id ad7280_id[] = {
  933. { "ad7280a", 0 },
  934. { }
  935. };
  936. MODULE_DEVICE_TABLE(spi, ad7280_id);
  937. static struct spi_driver ad7280_driver = {
  938. .driver = {
  939. .name = "ad7280",
  940. },
  941. .probe = ad7280_probe,
  942. .id_table = ad7280_id,
  943. };
  944. module_spi_driver(ad7280_driver);
  945. MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
  946. MODULE_DESCRIPTION("Analog Devices AD7280A");
  947. MODULE_LICENSE("GPL v2");