ad3552r.c 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Analog Devices AD3552R
  4. * Digital to Analog converter driver
  5. *
  6. * Copyright 2021 Analog Devices Inc.
  7. */
  8. #include <linux/unaligned.h>
  9. #include <linux/device.h>
  10. #include <linux/iio/triggered_buffer.h>
  11. #include <linux/iio/trigger_consumer.h>
  12. #include <linux/iopoll.h>
  13. #include <linux/kernel.h>
  14. #include <linux/regulator/consumer.h>
  15. #include <linux/spi/spi.h>
  16. /* Register addresses */
  17. /* Primary address space */
  18. #define AD3552R_REG_ADDR_INTERFACE_CONFIG_A 0x00
  19. #define AD3552R_MASK_SOFTWARE_RESET (BIT(7) | BIT(0))
  20. #define AD3552R_MASK_ADDR_ASCENSION BIT(5)
  21. #define AD3552R_MASK_SDO_ACTIVE BIT(4)
  22. #define AD3552R_REG_ADDR_INTERFACE_CONFIG_B 0x01
  23. #define AD3552R_MASK_SINGLE_INST BIT(7)
  24. #define AD3552R_MASK_SHORT_INSTRUCTION BIT(3)
  25. #define AD3552R_REG_ADDR_DEVICE_CONFIG 0x02
  26. #define AD3552R_MASK_DEVICE_STATUS(n) BIT(4 + (n))
  27. #define AD3552R_MASK_CUSTOM_MODES GENMASK(3, 2)
  28. #define AD3552R_MASK_OPERATING_MODES GENMASK(1, 0)
  29. #define AD3552R_REG_ADDR_CHIP_TYPE 0x03
  30. #define AD3552R_MASK_CLASS GENMASK(7, 0)
  31. #define AD3552R_REG_ADDR_PRODUCT_ID_L 0x04
  32. #define AD3552R_REG_ADDR_PRODUCT_ID_H 0x05
  33. #define AD3552R_REG_ADDR_CHIP_GRADE 0x06
  34. #define AD3552R_MASK_GRADE GENMASK(7, 4)
  35. #define AD3552R_MASK_DEVICE_REVISION GENMASK(3, 0)
  36. #define AD3552R_REG_ADDR_SCRATCH_PAD 0x0A
  37. #define AD3552R_REG_ADDR_SPI_REVISION 0x0B
  38. #define AD3552R_REG_ADDR_VENDOR_L 0x0C
  39. #define AD3552R_REG_ADDR_VENDOR_H 0x0D
  40. #define AD3552R_REG_ADDR_STREAM_MODE 0x0E
  41. #define AD3552R_MASK_LENGTH GENMASK(7, 0)
  42. #define AD3552R_REG_ADDR_TRANSFER_REGISTER 0x0F
  43. #define AD3552R_MASK_MULTI_IO_MODE GENMASK(7, 6)
  44. #define AD3552R_MASK_STREAM_LENGTH_KEEP_VALUE BIT(2)
  45. #define AD3552R_REG_ADDR_INTERFACE_CONFIG_C 0x10
  46. #define AD3552R_MASK_CRC_ENABLE (GENMASK(7, 6) |\
  47. GENMASK(1, 0))
  48. #define AD3552R_MASK_STRICT_REGISTER_ACCESS BIT(5)
  49. #define AD3552R_REG_ADDR_INTERFACE_STATUS_A 0x11
  50. #define AD3552R_MASK_INTERFACE_NOT_READY BIT(7)
  51. #define AD3552R_MASK_CLOCK_COUNTING_ERROR BIT(5)
  52. #define AD3552R_MASK_INVALID_OR_NO_CRC BIT(3)
  53. #define AD3552R_MASK_WRITE_TO_READ_ONLY_REGISTER BIT(2)
  54. #define AD3552R_MASK_PARTIAL_REGISTER_ACCESS BIT(1)
  55. #define AD3552R_MASK_REGISTER_ADDRESS_INVALID BIT(0)
  56. #define AD3552R_REG_ADDR_INTERFACE_CONFIG_D 0x14
  57. #define AD3552R_MASK_ALERT_ENABLE_PULLUP BIT(6)
  58. #define AD3552R_MASK_MEM_CRC_EN BIT(4)
  59. #define AD3552R_MASK_SDO_DRIVE_STRENGTH GENMASK(3, 2)
  60. #define AD3552R_MASK_DUAL_SPI_SYNCHROUNOUS_EN BIT(1)
  61. #define AD3552R_MASK_SPI_CONFIG_DDR BIT(0)
  62. #define AD3552R_REG_ADDR_SH_REFERENCE_CONFIG 0x15
  63. #define AD3552R_MASK_IDUMP_FAST_MODE BIT(6)
  64. #define AD3552R_MASK_SAMPLE_HOLD_DIFFERENTIAL_USER_EN BIT(5)
  65. #define AD3552R_MASK_SAMPLE_HOLD_USER_TRIM GENMASK(4, 3)
  66. #define AD3552R_MASK_SAMPLE_HOLD_USER_ENABLE BIT(2)
  67. #define AD3552R_MASK_REFERENCE_VOLTAGE_SEL GENMASK(1, 0)
  68. #define AD3552R_REG_ADDR_ERR_ALARM_MASK 0x16
  69. #define AD3552R_MASK_REF_RANGE_ALARM BIT(6)
  70. #define AD3552R_MASK_CLOCK_COUNT_ERR_ALARM BIT(5)
  71. #define AD3552R_MASK_MEM_CRC_ERR_ALARM BIT(4)
  72. #define AD3552R_MASK_SPI_CRC_ERR_ALARM BIT(3)
  73. #define AD3552R_MASK_WRITE_TO_READ_ONLY_ALARM BIT(2)
  74. #define AD3552R_MASK_PARTIAL_REGISTER_ACCESS_ALARM BIT(1)
  75. #define AD3552R_MASK_REGISTER_ADDRESS_INVALID_ALARM BIT(0)
  76. #define AD3552R_REG_ADDR_ERR_STATUS 0x17
  77. #define AD3552R_MASK_REF_RANGE_ERR_STATUS BIT(6)
  78. #define AD3552R_MASK_DUAL_SPI_STREAM_EXCEEDS_DAC_ERR_STATUS BIT(5)
  79. #define AD3552R_MASK_MEM_CRC_ERR_STATUS BIT(4)
  80. #define AD3552R_MASK_RESET_STATUS BIT(0)
  81. #define AD3552R_REG_ADDR_POWERDOWN_CONFIG 0x18
  82. #define AD3552R_MASK_CH_DAC_POWERDOWN(ch) BIT(4 + (ch))
  83. #define AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(ch) BIT(ch)
  84. #define AD3552R_REG_ADDR_CH0_CH1_OUTPUT_RANGE 0x19
  85. #define AD3552R_MASK_CH_OUTPUT_RANGE_SEL(ch) ((ch) ? GENMASK(7, 4) :\
  86. GENMASK(3, 0))
  87. #define AD3552R_REG_ADDR_CH_OFFSET(ch) (0x1B + (ch) * 2)
  88. #define AD3552R_MASK_CH_OFFSET_BITS_0_7 GENMASK(7, 0)
  89. #define AD3552R_REG_ADDR_CH_GAIN(ch) (0x1C + (ch) * 2)
  90. #define AD3552R_MASK_CH_RANGE_OVERRIDE BIT(7)
  91. #define AD3552R_MASK_CH_GAIN_SCALING_N GENMASK(6, 5)
  92. #define AD3552R_MASK_CH_GAIN_SCALING_P GENMASK(4, 3)
  93. #define AD3552R_MASK_CH_OFFSET_POLARITY BIT(2)
  94. #define AD3552R_MASK_CH_OFFSET_BIT_8 BIT(0)
  95. /*
  96. * Secondary region
  97. * For multibyte registers specify the highest address because the access is
  98. * done in descending order
  99. */
  100. #define AD3552R_SECONDARY_REGION_START 0x28
  101. #define AD3552R_REG_ADDR_HW_LDAC_16B 0x28
  102. #define AD3552R_REG_ADDR_CH_DAC_16B(ch) (0x2C - (1 - ch) * 2)
  103. #define AD3552R_REG_ADDR_DAC_PAGE_MASK_16B 0x2E
  104. #define AD3552R_REG_ADDR_CH_SELECT_16B 0x2F
  105. #define AD3552R_REG_ADDR_INPUT_PAGE_MASK_16B 0x31
  106. #define AD3552R_REG_ADDR_SW_LDAC_16B 0x32
  107. #define AD3552R_REG_ADDR_CH_INPUT_16B(ch) (0x36 - (1 - ch) * 2)
  108. /* 3 bytes registers */
  109. #define AD3552R_REG_START_24B 0x37
  110. #define AD3552R_REG_ADDR_HW_LDAC_24B 0x37
  111. #define AD3552R_REG_ADDR_CH_DAC_24B(ch) (0x3D - (1 - ch) * 3)
  112. #define AD3552R_REG_ADDR_DAC_PAGE_MASK_24B 0x40
  113. #define AD3552R_REG_ADDR_CH_SELECT_24B 0x41
  114. #define AD3552R_REG_ADDR_INPUT_PAGE_MASK_24B 0x44
  115. #define AD3552R_REG_ADDR_SW_LDAC_24B 0x45
  116. #define AD3552R_REG_ADDR_CH_INPUT_24B(ch) (0x4B - (1 - ch) * 3)
  117. /* Useful defines */
  118. #define AD3552R_MAX_CH 2
  119. #define AD3552R_MASK_CH(ch) BIT(ch)
  120. #define AD3552R_MASK_ALL_CH GENMASK(1, 0)
  121. #define AD3552R_MAX_REG_SIZE 3
  122. #define AD3552R_READ_BIT BIT(7)
  123. #define AD3552R_ADDR_MASK GENMASK(6, 0)
  124. #define AD3552R_MASK_DAC_12B 0xFFF0
  125. #define AD3552R_DEFAULT_CONFIG_B_VALUE 0x8
  126. #define AD3552R_SCRATCH_PAD_TEST_VAL1 0x34
  127. #define AD3552R_SCRATCH_PAD_TEST_VAL2 0xB2
  128. #define AD3552R_GAIN_SCALE 1000
  129. #define AD3552R_LDAC_PULSE_US 100
  130. enum ad3552r_ch_vref_select {
  131. /* Internal source with Vref I/O floating */
  132. AD3552R_INTERNAL_VREF_PIN_FLOATING,
  133. /* Internal source with Vref I/O at 2.5V */
  134. AD3552R_INTERNAL_VREF_PIN_2P5V,
  135. /* External source with Vref I/O as input */
  136. AD3552R_EXTERNAL_VREF_PIN_INPUT
  137. };
  138. enum ad3552r_id {
  139. AD3541R_ID = 0x400b,
  140. AD3542R_ID = 0x4009,
  141. AD3551R_ID = 0x400a,
  142. AD3552R_ID = 0x4008,
  143. };
  144. enum ad3552r_ch_output_range {
  145. /* Range from 0 V to 2.5 V. Requires Rfb1x connection */
  146. AD3552R_CH_OUTPUT_RANGE_0__2P5V,
  147. /* Range from 0 V to 5 V. Requires Rfb1x connection */
  148. AD3552R_CH_OUTPUT_RANGE_0__5V,
  149. /* Range from 0 V to 10 V. Requires Rfb2x connection */
  150. AD3552R_CH_OUTPUT_RANGE_0__10V,
  151. /* Range from -5 V to 5 V. Requires Rfb2x connection */
  152. AD3552R_CH_OUTPUT_RANGE_NEG_5__5V,
  153. /* Range from -10 V to 10 V. Requires Rfb4x connection */
  154. AD3552R_CH_OUTPUT_RANGE_NEG_10__10V,
  155. };
  156. static const s32 ad3552r_ch_ranges[][2] = {
  157. [AD3552R_CH_OUTPUT_RANGE_0__2P5V] = {0, 2500},
  158. [AD3552R_CH_OUTPUT_RANGE_0__5V] = {0, 5000},
  159. [AD3552R_CH_OUTPUT_RANGE_0__10V] = {0, 10000},
  160. [AD3552R_CH_OUTPUT_RANGE_NEG_5__5V] = {-5000, 5000},
  161. [AD3552R_CH_OUTPUT_RANGE_NEG_10__10V] = {-10000, 10000}
  162. };
  163. enum ad3542r_ch_output_range {
  164. /* Range from 0 V to 2.5 V. Requires Rfb1x connection */
  165. AD3542R_CH_OUTPUT_RANGE_0__2P5V,
  166. /* Range from 0 V to 3 V. Requires Rfb1x connection */
  167. AD3542R_CH_OUTPUT_RANGE_0__3V,
  168. /* Range from 0 V to 5 V. Requires Rfb1x connection */
  169. AD3542R_CH_OUTPUT_RANGE_0__5V,
  170. /* Range from 0 V to 10 V. Requires Rfb2x connection */
  171. AD3542R_CH_OUTPUT_RANGE_0__10V,
  172. /* Range from -2.5 V to 7.5 V. Requires Rfb2x connection */
  173. AD3542R_CH_OUTPUT_RANGE_NEG_2P5__7P5V,
  174. /* Range from -5 V to 5 V. Requires Rfb2x connection */
  175. AD3542R_CH_OUTPUT_RANGE_NEG_5__5V,
  176. };
  177. static const s32 ad3542r_ch_ranges[][2] = {
  178. [AD3542R_CH_OUTPUT_RANGE_0__2P5V] = {0, 2500},
  179. [AD3542R_CH_OUTPUT_RANGE_0__3V] = {0, 3000},
  180. [AD3542R_CH_OUTPUT_RANGE_0__5V] = {0, 5000},
  181. [AD3542R_CH_OUTPUT_RANGE_0__10V] = {0, 10000},
  182. [AD3542R_CH_OUTPUT_RANGE_NEG_2P5__7P5V] = {-2500, 7500},
  183. [AD3542R_CH_OUTPUT_RANGE_NEG_5__5V] = {-5000, 5000}
  184. };
  185. enum ad3552r_ch_gain_scaling {
  186. /* Gain scaling of 1 */
  187. AD3552R_CH_GAIN_SCALING_1,
  188. /* Gain scaling of 0.5 */
  189. AD3552R_CH_GAIN_SCALING_0_5,
  190. /* Gain scaling of 0.25 */
  191. AD3552R_CH_GAIN_SCALING_0_25,
  192. /* Gain scaling of 0.125 */
  193. AD3552R_CH_GAIN_SCALING_0_125,
  194. };
  195. /* Gain * AD3552R_GAIN_SCALE */
  196. static const s32 gains_scaling_table[] = {
  197. [AD3552R_CH_GAIN_SCALING_1] = 1000,
  198. [AD3552R_CH_GAIN_SCALING_0_5] = 500,
  199. [AD3552R_CH_GAIN_SCALING_0_25] = 250,
  200. [AD3552R_CH_GAIN_SCALING_0_125] = 125
  201. };
  202. enum ad3552r_dev_attributes {
  203. /* - Direct register values */
  204. /* From 0-3 */
  205. AD3552R_SDO_DRIVE_STRENGTH,
  206. /*
  207. * 0 -> Internal Vref, vref_io pin floating (default)
  208. * 1 -> Internal Vref, vref_io driven by internal vref
  209. * 2 or 3 -> External Vref
  210. */
  211. AD3552R_VREF_SELECT,
  212. /* Read registers in ascending order if set. Else descending */
  213. AD3552R_ADDR_ASCENSION,
  214. };
  215. enum ad3552r_ch_attributes {
  216. /* DAC powerdown */
  217. AD3552R_CH_DAC_POWERDOWN,
  218. /* DAC amplifier powerdown */
  219. AD3552R_CH_AMPLIFIER_POWERDOWN,
  220. /* Select the output range. Select from enum ad3552r_ch_output_range */
  221. AD3552R_CH_OUTPUT_RANGE_SEL,
  222. /*
  223. * Over-rider the range selector in order to manually set the output
  224. * voltage range
  225. */
  226. AD3552R_CH_RANGE_OVERRIDE,
  227. /* Manually set the offset voltage */
  228. AD3552R_CH_GAIN_OFFSET,
  229. /* Sets the polarity of the offset. */
  230. AD3552R_CH_GAIN_OFFSET_POLARITY,
  231. /* PDAC gain scaling */
  232. AD3552R_CH_GAIN_SCALING_P,
  233. /* NDAC gain scaling */
  234. AD3552R_CH_GAIN_SCALING_N,
  235. /* Rfb value */
  236. AD3552R_CH_RFB,
  237. /* Channel select. When set allow Input -> DAC and Mask -> DAC */
  238. AD3552R_CH_SELECT,
  239. };
  240. struct ad3552r_ch_data {
  241. s32 scale_int;
  242. s32 scale_dec;
  243. s32 offset_int;
  244. s32 offset_dec;
  245. s16 gain_offset;
  246. u16 rfb;
  247. u8 n;
  248. u8 p;
  249. u8 range;
  250. bool range_override;
  251. };
  252. struct ad3552r_model_data {
  253. const char *model_name;
  254. enum ad3552r_id chip_id;
  255. unsigned int num_hw_channels;
  256. const s32 (*ranges_table)[2];
  257. int num_ranges;
  258. bool requires_output_range;
  259. };
  260. struct ad3552r_desc {
  261. const struct ad3552r_model_data *model_data;
  262. /* Used to look the spi bus for atomic operations where needed */
  263. struct mutex lock;
  264. struct gpio_desc *gpio_reset;
  265. struct gpio_desc *gpio_ldac;
  266. struct spi_device *spi;
  267. struct ad3552r_ch_data ch_data[AD3552R_MAX_CH];
  268. struct iio_chan_spec channels[AD3552R_MAX_CH + 1];
  269. unsigned long enabled_ch;
  270. unsigned int num_ch;
  271. };
  272. static const u16 addr_mask_map[][2] = {
  273. [AD3552R_ADDR_ASCENSION] = {
  274. AD3552R_REG_ADDR_INTERFACE_CONFIG_A,
  275. AD3552R_MASK_ADDR_ASCENSION
  276. },
  277. [AD3552R_SDO_DRIVE_STRENGTH] = {
  278. AD3552R_REG_ADDR_INTERFACE_CONFIG_D,
  279. AD3552R_MASK_SDO_DRIVE_STRENGTH
  280. },
  281. [AD3552R_VREF_SELECT] = {
  282. AD3552R_REG_ADDR_SH_REFERENCE_CONFIG,
  283. AD3552R_MASK_REFERENCE_VOLTAGE_SEL
  284. },
  285. };
  286. /* 0 -> reg addr, 1->ch0 mask, 2->ch1 mask */
  287. static const u16 addr_mask_map_ch[][3] = {
  288. [AD3552R_CH_DAC_POWERDOWN] = {
  289. AD3552R_REG_ADDR_POWERDOWN_CONFIG,
  290. AD3552R_MASK_CH_DAC_POWERDOWN(0),
  291. AD3552R_MASK_CH_DAC_POWERDOWN(1)
  292. },
  293. [AD3552R_CH_AMPLIFIER_POWERDOWN] = {
  294. AD3552R_REG_ADDR_POWERDOWN_CONFIG,
  295. AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(0),
  296. AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(1)
  297. },
  298. [AD3552R_CH_OUTPUT_RANGE_SEL] = {
  299. AD3552R_REG_ADDR_CH0_CH1_OUTPUT_RANGE,
  300. AD3552R_MASK_CH_OUTPUT_RANGE_SEL(0),
  301. AD3552R_MASK_CH_OUTPUT_RANGE_SEL(1)
  302. },
  303. [AD3552R_CH_SELECT] = {
  304. AD3552R_REG_ADDR_CH_SELECT_16B,
  305. AD3552R_MASK_CH(0),
  306. AD3552R_MASK_CH(1)
  307. }
  308. };
  309. static u8 _ad3552r_reg_len(u8 addr)
  310. {
  311. switch (addr) {
  312. case AD3552R_REG_ADDR_HW_LDAC_16B:
  313. case AD3552R_REG_ADDR_CH_SELECT_16B:
  314. case AD3552R_REG_ADDR_SW_LDAC_16B:
  315. case AD3552R_REG_ADDR_HW_LDAC_24B:
  316. case AD3552R_REG_ADDR_CH_SELECT_24B:
  317. case AD3552R_REG_ADDR_SW_LDAC_24B:
  318. return 1;
  319. default:
  320. break;
  321. }
  322. if (addr > AD3552R_REG_ADDR_HW_LDAC_24B)
  323. return 3;
  324. if (addr > AD3552R_REG_ADDR_HW_LDAC_16B)
  325. return 2;
  326. return 1;
  327. }
  328. /* SPI transfer to device */
  329. static int ad3552r_transfer(struct ad3552r_desc *dac, u8 addr, u32 len,
  330. u8 *data, bool is_read)
  331. {
  332. /* Maximum transfer: Addr (1B) + 2 * (Data Reg (3B)) + SW LDAC(1B) */
  333. u8 buf[8];
  334. buf[0] = addr & AD3552R_ADDR_MASK;
  335. buf[0] |= is_read ? AD3552R_READ_BIT : 0;
  336. if (is_read)
  337. return spi_write_then_read(dac->spi, buf, 1, data, len);
  338. memcpy(buf + 1, data, len);
  339. return spi_write_then_read(dac->spi, buf, len + 1, NULL, 0);
  340. }
  341. static int ad3552r_write_reg(struct ad3552r_desc *dac, u8 addr, u16 val)
  342. {
  343. u8 reg_len;
  344. u8 buf[AD3552R_MAX_REG_SIZE] = { 0 };
  345. reg_len = _ad3552r_reg_len(addr);
  346. if (reg_len == 2)
  347. /* Only DAC register are 2 bytes wide */
  348. val &= AD3552R_MASK_DAC_12B;
  349. if (reg_len == 1)
  350. buf[0] = val & 0xFF;
  351. else
  352. /* reg_len can be 2 or 3, but 3rd bytes needs to be set to 0 */
  353. put_unaligned_be16(val, buf);
  354. return ad3552r_transfer(dac, addr, reg_len, buf, false);
  355. }
  356. static int ad3552r_read_reg(struct ad3552r_desc *dac, u8 addr, u16 *val)
  357. {
  358. int err;
  359. u8 reg_len, buf[AD3552R_MAX_REG_SIZE] = { 0 };
  360. reg_len = _ad3552r_reg_len(addr);
  361. err = ad3552r_transfer(dac, addr, reg_len, buf, true);
  362. if (err)
  363. return err;
  364. if (reg_len == 1)
  365. *val = buf[0];
  366. else
  367. /* reg_len can be 2 or 3, but only first 2 bytes are relevant */
  368. *val = get_unaligned_be16(buf);
  369. return 0;
  370. }
  371. static u16 ad3552r_field_prep(u16 val, u16 mask)
  372. {
  373. return (val << __ffs(mask)) & mask;
  374. }
  375. /* Update field of a register, shift val if needed */
  376. static int ad3552r_update_reg_field(struct ad3552r_desc *dac, u8 addr, u16 mask,
  377. u16 val)
  378. {
  379. int ret;
  380. u16 reg;
  381. ret = ad3552r_read_reg(dac, addr, &reg);
  382. if (ret < 0)
  383. return ret;
  384. reg &= ~mask;
  385. reg |= ad3552r_field_prep(val, mask);
  386. return ad3552r_write_reg(dac, addr, reg);
  387. }
  388. static int ad3552r_set_ch_value(struct ad3552r_desc *dac,
  389. enum ad3552r_ch_attributes attr,
  390. u8 ch,
  391. u16 val)
  392. {
  393. /* Update register related to attributes in chip */
  394. return ad3552r_update_reg_field(dac, addr_mask_map_ch[attr][0],
  395. addr_mask_map_ch[attr][ch + 1], val);
  396. }
  397. #define AD3552R_CH_DAC(_idx) ((struct iio_chan_spec) { \
  398. .type = IIO_VOLTAGE, \
  399. .output = true, \
  400. .indexed = true, \
  401. .channel = _idx, \
  402. .scan_index = _idx, \
  403. .scan_type = { \
  404. .sign = 'u', \
  405. .realbits = 16, \
  406. .storagebits = 16, \
  407. .endianness = IIO_BE, \
  408. }, \
  409. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  410. BIT(IIO_CHAN_INFO_SCALE) | \
  411. BIT(IIO_CHAN_INFO_ENABLE) | \
  412. BIT(IIO_CHAN_INFO_OFFSET), \
  413. })
  414. static int ad3552r_read_raw(struct iio_dev *indio_dev,
  415. struct iio_chan_spec const *chan,
  416. int *val,
  417. int *val2,
  418. long mask)
  419. {
  420. struct ad3552r_desc *dac = iio_priv(indio_dev);
  421. u16 tmp_val;
  422. int err;
  423. u8 ch = chan->channel;
  424. switch (mask) {
  425. case IIO_CHAN_INFO_RAW:
  426. mutex_lock(&dac->lock);
  427. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_CH_DAC_24B(ch),
  428. &tmp_val);
  429. mutex_unlock(&dac->lock);
  430. if (err < 0)
  431. return err;
  432. *val = tmp_val;
  433. return IIO_VAL_INT;
  434. case IIO_CHAN_INFO_ENABLE:
  435. mutex_lock(&dac->lock);
  436. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_POWERDOWN_CONFIG,
  437. &tmp_val);
  438. mutex_unlock(&dac->lock);
  439. if (err < 0)
  440. return err;
  441. *val = !((tmp_val & AD3552R_MASK_CH_DAC_POWERDOWN(ch)) >>
  442. __ffs(AD3552R_MASK_CH_DAC_POWERDOWN(ch)));
  443. return IIO_VAL_INT;
  444. case IIO_CHAN_INFO_SCALE:
  445. *val = dac->ch_data[ch].scale_int;
  446. *val2 = dac->ch_data[ch].scale_dec;
  447. return IIO_VAL_INT_PLUS_MICRO;
  448. case IIO_CHAN_INFO_OFFSET:
  449. *val = dac->ch_data[ch].offset_int;
  450. *val2 = dac->ch_data[ch].offset_dec;
  451. return IIO_VAL_INT_PLUS_MICRO;
  452. default:
  453. return -EINVAL;
  454. }
  455. }
  456. static int ad3552r_write_raw(struct iio_dev *indio_dev,
  457. struct iio_chan_spec const *chan,
  458. int val,
  459. int val2,
  460. long mask)
  461. {
  462. struct ad3552r_desc *dac = iio_priv(indio_dev);
  463. int err;
  464. mutex_lock(&dac->lock);
  465. switch (mask) {
  466. case IIO_CHAN_INFO_RAW:
  467. err = ad3552r_write_reg(dac,
  468. AD3552R_REG_ADDR_CH_DAC_24B(chan->channel),
  469. val);
  470. break;
  471. case IIO_CHAN_INFO_ENABLE:
  472. err = ad3552r_set_ch_value(dac, AD3552R_CH_DAC_POWERDOWN,
  473. chan->channel, !val);
  474. break;
  475. default:
  476. err = -EINVAL;
  477. break;
  478. }
  479. mutex_unlock(&dac->lock);
  480. return err;
  481. }
  482. static const struct iio_info ad3552r_iio_info = {
  483. .read_raw = ad3552r_read_raw,
  484. .write_raw = ad3552r_write_raw
  485. };
  486. static int32_t ad3552r_trigger_hw_ldac(struct gpio_desc *ldac)
  487. {
  488. gpiod_set_value_cansleep(ldac, 0);
  489. usleep_range(AD3552R_LDAC_PULSE_US, AD3552R_LDAC_PULSE_US + 10);
  490. gpiod_set_value_cansleep(ldac, 1);
  491. return 0;
  492. }
  493. static int ad3552r_write_all_channels(struct ad3552r_desc *dac, u8 *data)
  494. {
  495. int err, len;
  496. u8 addr, buff[AD3552R_MAX_CH * AD3552R_MAX_REG_SIZE + 1];
  497. addr = AD3552R_REG_ADDR_CH_INPUT_24B(1);
  498. /* CH1 */
  499. memcpy(buff, data + 2, 2);
  500. buff[2] = 0;
  501. /* CH0 */
  502. memcpy(buff + 3, data, 2);
  503. buff[5] = 0;
  504. len = 6;
  505. if (!dac->gpio_ldac) {
  506. /* Software LDAC */
  507. buff[6] = AD3552R_MASK_ALL_CH;
  508. ++len;
  509. }
  510. err = ad3552r_transfer(dac, addr, len, buff, false);
  511. if (err)
  512. return err;
  513. if (dac->gpio_ldac)
  514. return ad3552r_trigger_hw_ldac(dac->gpio_ldac);
  515. return 0;
  516. }
  517. static int ad3552r_write_codes(struct ad3552r_desc *dac, u32 mask, u8 *data)
  518. {
  519. int err;
  520. u8 addr, buff[AD3552R_MAX_REG_SIZE];
  521. if (mask == AD3552R_MASK_ALL_CH) {
  522. if (memcmp(data, data + 2, 2) != 0)
  523. return ad3552r_write_all_channels(dac, data);
  524. addr = AD3552R_REG_ADDR_INPUT_PAGE_MASK_24B;
  525. } else {
  526. addr = AD3552R_REG_ADDR_CH_INPUT_24B(__ffs(mask));
  527. }
  528. memcpy(buff, data, 2);
  529. buff[2] = 0;
  530. err = ad3552r_transfer(dac, addr, 3, data, false);
  531. if (err)
  532. return err;
  533. if (dac->gpio_ldac)
  534. return ad3552r_trigger_hw_ldac(dac->gpio_ldac);
  535. return ad3552r_write_reg(dac, AD3552R_REG_ADDR_SW_LDAC_24B, mask);
  536. }
  537. static irqreturn_t ad3552r_trigger_handler(int irq, void *p)
  538. {
  539. struct iio_poll_func *pf = p;
  540. struct iio_dev *indio_dev = pf->indio_dev;
  541. struct iio_buffer *buf = indio_dev->buffer;
  542. struct ad3552r_desc *dac = iio_priv(indio_dev);
  543. /* Maximum size of a scan */
  544. u8 buff[AD3552R_MAX_CH * AD3552R_MAX_REG_SIZE];
  545. int err;
  546. memset(buff, 0, sizeof(buff));
  547. err = iio_pop_from_buffer(buf, buff);
  548. if (err)
  549. goto end;
  550. mutex_lock(&dac->lock);
  551. ad3552r_write_codes(dac, *indio_dev->active_scan_mask, buff);
  552. mutex_unlock(&dac->lock);
  553. end:
  554. iio_trigger_notify_done(indio_dev->trig);
  555. return IRQ_HANDLED;
  556. }
  557. static int ad3552r_check_scratch_pad(struct ad3552r_desc *dac)
  558. {
  559. const u16 val1 = AD3552R_SCRATCH_PAD_TEST_VAL1;
  560. const u16 val2 = AD3552R_SCRATCH_PAD_TEST_VAL2;
  561. u16 val;
  562. int err;
  563. err = ad3552r_write_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, val1);
  564. if (err < 0)
  565. return err;
  566. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, &val);
  567. if (err < 0)
  568. return err;
  569. if (val1 != val)
  570. return -ENODEV;
  571. err = ad3552r_write_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, val2);
  572. if (err < 0)
  573. return err;
  574. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, &val);
  575. if (err < 0)
  576. return err;
  577. if (val2 != val)
  578. return -ENODEV;
  579. return 0;
  580. }
  581. struct reg_addr_pool {
  582. struct ad3552r_desc *dac;
  583. u8 addr;
  584. };
  585. static int ad3552r_read_reg_wrapper(struct reg_addr_pool *addr)
  586. {
  587. int err;
  588. u16 val;
  589. err = ad3552r_read_reg(addr->dac, addr->addr, &val);
  590. if (err)
  591. return err;
  592. return val;
  593. }
  594. static int ad3552r_reset(struct ad3552r_desc *dac)
  595. {
  596. struct reg_addr_pool addr;
  597. int ret;
  598. int val;
  599. dac->gpio_reset = devm_gpiod_get_optional(&dac->spi->dev, "reset",
  600. GPIOD_OUT_LOW);
  601. if (IS_ERR(dac->gpio_reset))
  602. return dev_err_probe(&dac->spi->dev, PTR_ERR(dac->gpio_reset),
  603. "Error while getting gpio reset");
  604. if (dac->gpio_reset) {
  605. /* Perform hardware reset */
  606. usleep_range(10, 20);
  607. gpiod_set_value_cansleep(dac->gpio_reset, 1);
  608. } else {
  609. /* Perform software reset if no GPIO provided */
  610. ret = ad3552r_update_reg_field(dac,
  611. AD3552R_REG_ADDR_INTERFACE_CONFIG_A,
  612. AD3552R_MASK_SOFTWARE_RESET,
  613. AD3552R_MASK_SOFTWARE_RESET);
  614. if (ret < 0)
  615. return ret;
  616. }
  617. addr.dac = dac;
  618. addr.addr = AD3552R_REG_ADDR_INTERFACE_CONFIG_B;
  619. ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
  620. val == AD3552R_DEFAULT_CONFIG_B_VALUE ||
  621. val < 0,
  622. 5000, 50000);
  623. if (val < 0)
  624. ret = val;
  625. if (ret) {
  626. dev_err(&dac->spi->dev, "Error while resetting");
  627. return ret;
  628. }
  629. ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
  630. !(val & AD3552R_MASK_INTERFACE_NOT_READY) ||
  631. val < 0,
  632. 5000, 50000);
  633. if (val < 0)
  634. ret = val;
  635. if (ret) {
  636. dev_err(&dac->spi->dev, "Error while resetting");
  637. return ret;
  638. }
  639. return ad3552r_update_reg_field(dac,
  640. addr_mask_map[AD3552R_ADDR_ASCENSION][0],
  641. addr_mask_map[AD3552R_ADDR_ASCENSION][1],
  642. val);
  643. }
  644. static void ad3552r_get_custom_range(struct ad3552r_desc *dac, s32 i, s32 *v_min,
  645. s32 *v_max)
  646. {
  647. s64 vref, tmp, common, offset, gn, gp;
  648. /*
  649. * From datasheet formula (In Volts):
  650. * Vmin = 2.5 + [(GainN + Offset / 1024) * 2.5 * Rfb * 1.03]
  651. * Vmax = 2.5 - [(GainP + Offset / 1024) * 2.5 * Rfb * 1.03]
  652. * Calculus are converted to milivolts
  653. */
  654. vref = 2500;
  655. /* 2.5 * 1.03 * 1000 (To mV) */
  656. common = 2575 * dac->ch_data[i].rfb;
  657. offset = dac->ch_data[i].gain_offset;
  658. gn = gains_scaling_table[dac->ch_data[i].n];
  659. tmp = (1024 * gn + AD3552R_GAIN_SCALE * offset) * common;
  660. tmp = div_s64(tmp, 1024 * AD3552R_GAIN_SCALE);
  661. *v_max = vref + tmp;
  662. gp = gains_scaling_table[dac->ch_data[i].p];
  663. tmp = (1024 * gp - AD3552R_GAIN_SCALE * offset) * common;
  664. tmp = div_s64(tmp, 1024 * AD3552R_GAIN_SCALE);
  665. *v_min = vref - tmp;
  666. }
  667. static void ad3552r_calc_gain_and_offset(struct ad3552r_desc *dac, s32 ch)
  668. {
  669. s32 idx, v_max, v_min, span, rem;
  670. s64 tmp;
  671. if (dac->ch_data[ch].range_override) {
  672. ad3552r_get_custom_range(dac, ch, &v_min, &v_max);
  673. } else {
  674. /* Normal range */
  675. idx = dac->ch_data[ch].range;
  676. v_min = dac->model_data->ranges_table[idx][0];
  677. v_max = dac->model_data->ranges_table[idx][1];
  678. }
  679. /*
  680. * From datasheet formula:
  681. * Vout = Span * (D / 65536) + Vmin
  682. * Converted to scale and offset:
  683. * Scale = Span / 65536
  684. * Offset = 65536 * Vmin / Span
  685. *
  686. * Reminders are in micros in order to be printed as
  687. * IIO_VAL_INT_PLUS_MICRO
  688. */
  689. span = v_max - v_min;
  690. dac->ch_data[ch].scale_int = div_s64_rem(span, 65536, &rem);
  691. /* Do operations in microvolts */
  692. dac->ch_data[ch].scale_dec = DIV_ROUND_CLOSEST((s64)rem * 1000000,
  693. 65536);
  694. dac->ch_data[ch].offset_int = div_s64_rem(v_min * 65536, span, &rem);
  695. tmp = (s64)rem * 1000000;
  696. dac->ch_data[ch].offset_dec = div_s64(tmp, span);
  697. }
  698. static int ad3552r_find_range(const struct ad3552r_model_data *model_data,
  699. s32 *vals)
  700. {
  701. int i;
  702. for (i = 0; i < model_data->num_ranges; i++)
  703. if (vals[0] == model_data->ranges_table[i][0] * 1000 &&
  704. vals[1] == model_data->ranges_table[i][1] * 1000)
  705. return i;
  706. return -EINVAL;
  707. }
  708. static int ad3552r_configure_custom_gain(struct ad3552r_desc *dac,
  709. struct fwnode_handle *child,
  710. u32 ch)
  711. {
  712. struct device *dev = &dac->spi->dev;
  713. u32 val;
  714. int err;
  715. u8 addr;
  716. u16 reg = 0, offset;
  717. struct fwnode_handle *gain_child __free(fwnode_handle)
  718. = fwnode_get_named_child_node(child,
  719. "custom-output-range-config");
  720. if (!gain_child)
  721. return dev_err_probe(dev, -EINVAL,
  722. "mandatory custom-output-range-config property missing\n");
  723. dac->ch_data[ch].range_override = 1;
  724. reg |= ad3552r_field_prep(1, AD3552R_MASK_CH_RANGE_OVERRIDE);
  725. err = fwnode_property_read_u32(gain_child, "adi,gain-scaling-p", &val);
  726. if (err)
  727. return dev_err_probe(dev, err,
  728. "mandatory adi,gain-scaling-p property missing\n");
  729. reg |= ad3552r_field_prep(val, AD3552R_MASK_CH_GAIN_SCALING_P);
  730. dac->ch_data[ch].p = val;
  731. err = fwnode_property_read_u32(gain_child, "adi,gain-scaling-n", &val);
  732. if (err)
  733. return dev_err_probe(dev, err,
  734. "mandatory adi,gain-scaling-n property missing\n");
  735. reg |= ad3552r_field_prep(val, AD3552R_MASK_CH_GAIN_SCALING_N);
  736. dac->ch_data[ch].n = val;
  737. err = fwnode_property_read_u32(gain_child, "adi,rfb-ohms", &val);
  738. if (err)
  739. return dev_err_probe(dev, err,
  740. "mandatory adi,rfb-ohms property missing\n");
  741. dac->ch_data[ch].rfb = val;
  742. err = fwnode_property_read_u32(gain_child, "adi,gain-offset", &val);
  743. if (err)
  744. return dev_err_probe(dev, err,
  745. "mandatory adi,gain-offset property missing\n");
  746. dac->ch_data[ch].gain_offset = val;
  747. offset = abs((s32)val);
  748. reg |= ad3552r_field_prep((offset >> 8), AD3552R_MASK_CH_OFFSET_BIT_8);
  749. reg |= ad3552r_field_prep((s32)val < 0, AD3552R_MASK_CH_OFFSET_POLARITY);
  750. addr = AD3552R_REG_ADDR_CH_GAIN(ch);
  751. err = ad3552r_write_reg(dac, addr,
  752. offset & AD3552R_MASK_CH_OFFSET_BITS_0_7);
  753. if (err)
  754. return dev_err_probe(dev, err, "Error writing register\n");
  755. err = ad3552r_write_reg(dac, addr, reg);
  756. if (err)
  757. return dev_err_probe(dev, err, "Error writing register\n");
  758. return 0;
  759. }
  760. static int ad3552r_configure_device(struct ad3552r_desc *dac)
  761. {
  762. struct device *dev = &dac->spi->dev;
  763. int err, cnt = 0, voltage, delta = 100000;
  764. u32 vals[2], val, ch;
  765. dac->gpio_ldac = devm_gpiod_get_optional(dev, "ldac", GPIOD_OUT_HIGH);
  766. if (IS_ERR(dac->gpio_ldac))
  767. return dev_err_probe(dev, PTR_ERR(dac->gpio_ldac),
  768. "Error getting gpio ldac");
  769. voltage = devm_regulator_get_enable_read_voltage(dev, "vref");
  770. if (voltage < 0 && voltage != -ENODEV)
  771. return dev_err_probe(dev, voltage, "Error getting vref voltage\n");
  772. if (voltage == -ENODEV) {
  773. if (device_property_read_bool(dev, "adi,vref-out-en"))
  774. val = AD3552R_INTERNAL_VREF_PIN_2P5V;
  775. else
  776. val = AD3552R_INTERNAL_VREF_PIN_FLOATING;
  777. } else {
  778. if (voltage > 2500000 + delta || voltage < 2500000 - delta) {
  779. dev_warn(dev, "vref-supply must be 2.5V");
  780. return -EINVAL;
  781. }
  782. val = AD3552R_EXTERNAL_VREF_PIN_INPUT;
  783. }
  784. err = ad3552r_update_reg_field(dac,
  785. addr_mask_map[AD3552R_VREF_SELECT][0],
  786. addr_mask_map[AD3552R_VREF_SELECT][1],
  787. val);
  788. if (err)
  789. return err;
  790. err = device_property_read_u32(dev, "adi,sdo-drive-strength", &val);
  791. if (!err) {
  792. if (val > 3) {
  793. dev_err(dev, "adi,sdo-drive-strength must be less than 4\n");
  794. return -EINVAL;
  795. }
  796. err = ad3552r_update_reg_field(dac,
  797. addr_mask_map[AD3552R_SDO_DRIVE_STRENGTH][0],
  798. addr_mask_map[AD3552R_SDO_DRIVE_STRENGTH][1],
  799. val);
  800. if (err)
  801. return err;
  802. }
  803. dac->num_ch = device_get_child_node_count(dev);
  804. if (!dac->num_ch) {
  805. dev_err(dev, "No channels defined\n");
  806. return -ENODEV;
  807. }
  808. device_for_each_child_node_scoped(dev, child) {
  809. err = fwnode_property_read_u32(child, "reg", &ch);
  810. if (err)
  811. return dev_err_probe(dev, err,
  812. "mandatory reg property missing\n");
  813. if (ch >= dac->model_data->num_hw_channels)
  814. return dev_err_probe(dev, -EINVAL,
  815. "reg must be less than %d\n",
  816. dac->model_data->num_hw_channels);
  817. if (fwnode_property_present(child, "adi,output-range-microvolt")) {
  818. err = fwnode_property_read_u32_array(child,
  819. "adi,output-range-microvolt",
  820. vals,
  821. 2);
  822. if (err)
  823. return dev_err_probe(dev, err,
  824. "adi,output-range-microvolt property could not be parsed\n");
  825. err = ad3552r_find_range(dac->model_data, vals);
  826. if (err < 0)
  827. return dev_err_probe(dev, err,
  828. "Invalid adi,output-range-microvolt value\n");
  829. val = err;
  830. err = ad3552r_set_ch_value(dac,
  831. AD3552R_CH_OUTPUT_RANGE_SEL,
  832. ch, val);
  833. if (err)
  834. return err;
  835. dac->ch_data[ch].range = val;
  836. } else if (dac->model_data->requires_output_range) {
  837. return dev_err_probe(dev, -EINVAL,
  838. "adi,output-range-microvolt is required for %s\n",
  839. dac->model_data->model_name);
  840. } else {
  841. err = ad3552r_configure_custom_gain(dac, child, ch);
  842. if (err)
  843. return err;
  844. }
  845. ad3552r_calc_gain_and_offset(dac, ch);
  846. dac->enabled_ch |= BIT(ch);
  847. err = ad3552r_set_ch_value(dac, AD3552R_CH_SELECT, ch, 1);
  848. if (err < 0)
  849. return err;
  850. dac->channels[cnt] = AD3552R_CH_DAC(ch);
  851. ++cnt;
  852. }
  853. /* Disable unused channels */
  854. for_each_clear_bit(ch, &dac->enabled_ch,
  855. dac->model_data->num_hw_channels) {
  856. err = ad3552r_set_ch_value(dac, AD3552R_CH_AMPLIFIER_POWERDOWN,
  857. ch, 1);
  858. if (err)
  859. return err;
  860. }
  861. dac->num_ch = cnt;
  862. return 0;
  863. }
  864. static int ad3552r_init(struct ad3552r_desc *dac)
  865. {
  866. int err;
  867. u16 val, id;
  868. err = ad3552r_reset(dac);
  869. if (err) {
  870. dev_err(&dac->spi->dev, "Reset failed\n");
  871. return err;
  872. }
  873. err = ad3552r_check_scratch_pad(dac);
  874. if (err) {
  875. dev_err(&dac->spi->dev, "Scratch pad test failed\n");
  876. return err;
  877. }
  878. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_PRODUCT_ID_L, &val);
  879. if (err) {
  880. dev_err(&dac->spi->dev, "Fail read PRODUCT_ID_L\n");
  881. return err;
  882. }
  883. id = val;
  884. err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_PRODUCT_ID_H, &val);
  885. if (err) {
  886. dev_err(&dac->spi->dev, "Fail read PRODUCT_ID_H\n");
  887. return err;
  888. }
  889. id |= val << 8;
  890. if (id != dac->model_data->chip_id) {
  891. dev_err(&dac->spi->dev, "Product id not matching\n");
  892. return -ENODEV;
  893. }
  894. return ad3552r_configure_device(dac);
  895. }
  896. static int ad3552r_probe(struct spi_device *spi)
  897. {
  898. struct ad3552r_desc *dac;
  899. struct iio_dev *indio_dev;
  900. int err;
  901. indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*dac));
  902. if (!indio_dev)
  903. return -ENOMEM;
  904. dac = iio_priv(indio_dev);
  905. dac->spi = spi;
  906. dac->model_data = spi_get_device_match_data(spi);
  907. if (!dac->model_data)
  908. return -EINVAL;
  909. mutex_init(&dac->lock);
  910. err = ad3552r_init(dac);
  911. if (err)
  912. return err;
  913. /* Config triggered buffer device */
  914. indio_dev->name = dac->model_data->model_name;
  915. indio_dev->dev.parent = &spi->dev;
  916. indio_dev->info = &ad3552r_iio_info;
  917. indio_dev->num_channels = dac->num_ch;
  918. indio_dev->channels = dac->channels;
  919. indio_dev->modes = INDIO_DIRECT_MODE;
  920. err = devm_iio_triggered_buffer_setup_ext(&indio_dev->dev, indio_dev, NULL,
  921. &ad3552r_trigger_handler,
  922. IIO_BUFFER_DIRECTION_OUT,
  923. NULL,
  924. NULL);
  925. if (err)
  926. return err;
  927. return devm_iio_device_register(&spi->dev, indio_dev);
  928. }
  929. static const struct ad3552r_model_data ad3541r_model_data = {
  930. .model_name = "ad3541r",
  931. .chip_id = AD3541R_ID,
  932. .num_hw_channels = 1,
  933. .ranges_table = ad3542r_ch_ranges,
  934. .num_ranges = ARRAY_SIZE(ad3542r_ch_ranges),
  935. .requires_output_range = true,
  936. };
  937. static const struct ad3552r_model_data ad3542r_model_data = {
  938. .model_name = "ad3542r",
  939. .chip_id = AD3542R_ID,
  940. .num_hw_channels = 2,
  941. .ranges_table = ad3542r_ch_ranges,
  942. .num_ranges = ARRAY_SIZE(ad3542r_ch_ranges),
  943. .requires_output_range = true,
  944. };
  945. static const struct ad3552r_model_data ad3551r_model_data = {
  946. .model_name = "ad3551r",
  947. .chip_id = AD3551R_ID,
  948. .num_hw_channels = 1,
  949. .ranges_table = ad3552r_ch_ranges,
  950. .num_ranges = ARRAY_SIZE(ad3552r_ch_ranges),
  951. .requires_output_range = false,
  952. };
  953. static const struct ad3552r_model_data ad3552r_model_data = {
  954. .model_name = "ad3552r",
  955. .chip_id = AD3552R_ID,
  956. .num_hw_channels = 2,
  957. .ranges_table = ad3552r_ch_ranges,
  958. .num_ranges = ARRAY_SIZE(ad3552r_ch_ranges),
  959. .requires_output_range = false,
  960. };
  961. static const struct spi_device_id ad3552r_id[] = {
  962. {
  963. .name = "ad3541r",
  964. .driver_data = (kernel_ulong_t)&ad3541r_model_data
  965. },
  966. {
  967. .name = "ad3542r",
  968. .driver_data = (kernel_ulong_t)&ad3542r_model_data
  969. },
  970. {
  971. .name = "ad3551r",
  972. .driver_data = (kernel_ulong_t)&ad3551r_model_data
  973. },
  974. {
  975. .name = "ad3552r",
  976. .driver_data = (kernel_ulong_t)&ad3552r_model_data
  977. },
  978. { }
  979. };
  980. MODULE_DEVICE_TABLE(spi, ad3552r_id);
  981. static const struct of_device_id ad3552r_of_match[] = {
  982. { .compatible = "adi,ad3541r", .data = &ad3541r_model_data },
  983. { .compatible = "adi,ad3542r", .data = &ad3542r_model_data },
  984. { .compatible = "adi,ad3551r", .data = &ad3551r_model_data },
  985. { .compatible = "adi,ad3552r", .data = &ad3552r_model_data },
  986. { }
  987. };
  988. MODULE_DEVICE_TABLE(of, ad3552r_of_match);
  989. static struct spi_driver ad3552r_driver = {
  990. .driver = {
  991. .name = "ad3552r",
  992. .of_match_table = ad3552r_of_match,
  993. },
  994. .probe = ad3552r_probe,
  995. .id_table = ad3552r_id
  996. };
  997. module_spi_driver(ad3552r_driver);
  998. MODULE_AUTHOR("Mihail Chindris <mihail.chindris@analog.com>");
  999. MODULE_DESCRIPTION("Analog Device AD3552R DAC");
  1000. MODULE_LICENSE("GPL v2");