ad2s1210.c 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * ad2s1210.c support for the ADI Resolver to Digital Converters: AD2S1210
  4. *
  5. * Copyright (c) 2010-2010 Analog Devices Inc.
  6. * Copyright (c) 2023 BayLibre, SAS
  7. *
  8. * Device register to IIO ABI mapping:
  9. *
  10. * Register | Addr | IIO ABI (sysfs)
  11. * ----------------------------|------|-------------------------------------------
  12. * DOS Overrange Threshold | 0x89 | events/in_altvoltage0_thresh_rising_value
  13. * DOS Mismatch Threshold | 0x8A | events/in_altvoltage0_mag_rising_value
  14. * DOS Reset Maximum Threshold | 0x8B | events/in_altvoltage0_mag_rising_reset_max
  15. * DOS Reset Minimum Threshold | 0x8C | events/in_altvoltage0_mag_rising_reset_min
  16. * LOT High Threshold | 0x8D | events/in_angl1_thresh_rising_value
  17. * LOT Low Threshold [1] | 0x8E | events/in_angl1_thresh_rising_hysteresis
  18. * Excitation Frequency | 0x91 | out_altvoltage0_frequency
  19. * Control | 0x92 | *as bit fields*
  20. * Phase lock range | D5 | events/in_phase0_mag_rising_value
  21. * Hysteresis | D4 | in_angl0_hysteresis
  22. * Encoder resolution | D3:2 | *not implemented*
  23. * Resolution | D1:0 | *device tree: assigned-resolution-bits*
  24. * Soft Reset | 0xF0 | [2]
  25. * Fault | 0xFF | *not implemented*
  26. *
  27. * [1]: The value written to the LOT low register is high value minus the
  28. * hysteresis.
  29. * [2]: Soft reset is performed when `out_altvoltage0_frequency` is written.
  30. *
  31. * Fault to event mapping:
  32. *
  33. * Fault | | Channel | Type | Direction
  34. * ----------------------------------------|----|---------------------------------
  35. * Sine/cosine inputs clipped [3] | D7 | altvoltage1 | mag | either
  36. * Sine/cosine inputs below LOS | D6 | altvoltage0 | thresh | falling
  37. * Sine/cosine inputs exceed DOS overrange | D5 | altvoltage0 | thresh | rising
  38. * Sine/cosine inputs exceed DOS mismatch | D4 | altvoltage0 | mag | rising
  39. * Tracking error exceeds LOT | D3 | angl1 | thresh | rising
  40. * Velocity exceeds maximum tracking rate | D2 | anglvel0 | mag | rising
  41. * Phase error exceeds phase lock range | D1 | phase0 | mag | rising
  42. * Configuration parity error | D0 | *writes to kernel log*
  43. *
  44. * [3]: The chip does not differentiate between fault on sine vs. cosine so
  45. * there will also be an event on the altvoltage2 channel.
  46. */
  47. #include <linux/bitfield.h>
  48. #include <linux/bits.h>
  49. #include <linux/cleanup.h>
  50. #include <linux/clk.h>
  51. #include <linux/delay.h>
  52. #include <linux/device.h>
  53. #include <linux/gpio/consumer.h>
  54. #include <linux/module.h>
  55. #include <linux/mutex.h>
  56. #include <linux/regmap.h>
  57. #include <linux/slab.h>
  58. #include <linux/spi/spi.h>
  59. #include <linux/sysfs.h>
  60. #include <linux/types.h>
  61. #include <linux/iio/buffer.h>
  62. #include <linux/iio/events.h>
  63. #include <linux/iio/iio.h>
  64. #include <linux/iio/sysfs.h>
  65. #include <linux/iio/trigger_consumer.h>
  66. #include <linux/iio/triggered_buffer.h>
  67. /* control register flags */
  68. #define AD2S1210_ADDRESS_DATA BIT(7)
  69. #define AD2S1210_PHASE_LOCK_RANGE_44 BIT(5)
  70. #define AD2S1210_ENABLE_HYSTERESIS BIT(4)
  71. #define AD2S1210_SET_ENRES GENMASK(3, 2)
  72. #define AD2S1210_SET_RES GENMASK(1, 0)
  73. /* fault register flags */
  74. #define AD2S1210_FAULT_CLIP BIT(7)
  75. #define AD2S1210_FAULT_LOS BIT(6)
  76. #define AD2S1210_FAULT_DOS_OVR BIT(5)
  77. #define AD2S1210_FAULT_DOS_MIS BIT(4)
  78. #define AD2S1210_FAULT_LOT BIT(3)
  79. #define AD2S1210_FAULT_VELOCITY BIT(2)
  80. #define AD2S1210_FAULT_PHASE BIT(1)
  81. #define AD2S1210_FAULT_CONFIG_PARITY BIT(0)
  82. #define AD2S1210_REG_POSITION_MSB 0x80
  83. #define AD2S1210_REG_POSITION_LSB 0x81
  84. #define AD2S1210_REG_VELOCITY_MSB 0x82
  85. #define AD2S1210_REG_VELOCITY_LSB 0x83
  86. #define AD2S1210_REG_LOS_THRD 0x88
  87. #define AD2S1210_REG_DOS_OVR_THRD 0x89
  88. #define AD2S1210_REG_DOS_MIS_THRD 0x8A
  89. #define AD2S1210_REG_DOS_RST_MAX_THRD 0x8B
  90. #define AD2S1210_REG_DOS_RST_MIN_THRD 0x8C
  91. #define AD2S1210_REG_LOT_HIGH_THRD 0x8D
  92. #define AD2S1210_REG_LOT_LOW_THRD 0x8E
  93. #define AD2S1210_REG_EXCIT_FREQ 0x91
  94. #define AD2S1210_REG_CONTROL 0x92
  95. #define AD2S1210_REG_SOFT_RESET 0xF0
  96. #define AD2S1210_REG_FAULT 0xFF
  97. #define AD2S1210_MIN_CLKIN 6144000
  98. #define AD2S1210_MAX_CLKIN 10240000
  99. #define AD2S1210_MIN_EXCIT 2000
  100. #define AD2S1210_DEF_EXCIT 10000
  101. #define AD2S1210_MAX_EXCIT 20000
  102. #define AD2S1210_MIN_FCW 0x4
  103. #define AD2S1210_MAX_FCW 0x50
  104. /* 44 degrees ~= 0.767945 radians */
  105. #define PHASE_44_DEG_TO_RAD_INT 0
  106. #define PHASE_44_DEG_TO_RAD_MICRO 767945
  107. /* 360 degrees ~= 6.283185 radians */
  108. #define PHASE_360_DEG_TO_RAD_INT 6
  109. #define PHASE_360_DEG_TO_RAD_MICRO 283185
  110. /* Threshold voltage registers have 1 LSB == 38 mV */
  111. #define THRESHOLD_MILLIVOLT_PER_LSB 38
  112. /* max voltage for threshold registers is 0x7F * 38 mV */
  113. #define THRESHOLD_RANGE_STR "[0 38 4826]"
  114. #define FAULT_ONESHOT(bit, new, old) (new & bit && !(old & bit))
  115. enum ad2s1210_mode {
  116. MOD_POS = 0b00,
  117. MOD_VEL = 0b01,
  118. MOD_RESERVED = 0b10,
  119. MOD_CONFIG = 0b11,
  120. };
  121. enum ad2s1210_resolution {
  122. AD2S1210_RES_10 = 0b00,
  123. AD2S1210_RES_12 = 0b01,
  124. AD2S1210_RES_14 = 0b10,
  125. AD2S1210_RES_16 = 0b11,
  126. };
  127. struct ad2s1210_state {
  128. struct mutex lock;
  129. struct spi_device *sdev;
  130. /** GPIO pin connected to SAMPLE line. */
  131. struct gpio_desc *sample_gpio;
  132. /** GPIO pins connected to A0 and A1 lines (optional). */
  133. struct gpio_descs *mode_gpios;
  134. /** Used to access config registers. */
  135. struct regmap *regmap;
  136. /** The external oscillator frequency in Hz. */
  137. unsigned long clkin_hz;
  138. /** Available raw hysteresis values based on resolution. */
  139. int hysteresis_available[2];
  140. /* adi,fixed-mode property - only valid when mode_gpios == NULL. */
  141. enum ad2s1210_mode fixed_mode;
  142. /** The selected resolution */
  143. enum ad2s1210_resolution resolution;
  144. /** Copy of fault register from the previous read. */
  145. u8 prev_fault_flags;
  146. /** For reading raw sample value via SPI. */
  147. struct {
  148. __be16 raw;
  149. u8 fault;
  150. } sample __aligned(IIO_DMA_MINALIGN);
  151. /** Scan buffer */
  152. struct {
  153. __be16 chan[2];
  154. /* Ensure timestamp is naturally aligned. */
  155. s64 timestamp __aligned(8);
  156. } scan;
  157. /** SPI transmit buffer. */
  158. u8 rx[2];
  159. /** SPI receive buffer. */
  160. u8 tx[2];
  161. };
  162. static int ad2s1210_set_mode(struct ad2s1210_state *st, enum ad2s1210_mode mode)
  163. {
  164. struct gpio_descs *gpios = st->mode_gpios;
  165. DECLARE_BITMAP(bitmap, 2);
  166. if (!gpios)
  167. return mode == st->fixed_mode ? 0 : -EOPNOTSUPP;
  168. bitmap[0] = mode;
  169. return gpiod_set_array_value(gpios->ndescs, gpios->desc, gpios->info,
  170. bitmap);
  171. }
  172. /*
  173. * Writes the given data to the given register address.
  174. *
  175. * If the mode is configurable, the device will first be placed in
  176. * configuration mode.
  177. */
  178. static int ad2s1210_regmap_reg_write(void *context, unsigned int reg,
  179. unsigned int val)
  180. {
  181. struct ad2s1210_state *st = context;
  182. struct spi_transfer xfers[] = {
  183. {
  184. .len = 1,
  185. .rx_buf = &st->rx[0],
  186. .tx_buf = &st->tx[0],
  187. .cs_change = 1,
  188. }, {
  189. .len = 1,
  190. .rx_buf = &st->rx[1],
  191. .tx_buf = &st->tx[1],
  192. },
  193. };
  194. int ret;
  195. /* values can only be 7 bits, the MSB indicates an address */
  196. if (val & ~0x7F)
  197. return -EINVAL;
  198. st->tx[0] = reg;
  199. st->tx[1] = val;
  200. ret = ad2s1210_set_mode(st, MOD_CONFIG);
  201. if (ret < 0)
  202. return ret;
  203. ret = spi_sync_transfer(st->sdev, xfers, ARRAY_SIZE(xfers));
  204. if (ret < 0)
  205. return ret;
  206. /* soft reset also clears the fault register */
  207. if (reg == AD2S1210_REG_SOFT_RESET)
  208. st->prev_fault_flags = 0;
  209. return 0;
  210. }
  211. /*
  212. * Reads value from one of the registers.
  213. *
  214. * If the mode is configurable, the device will first be placed in
  215. * configuration mode.
  216. */
  217. static int ad2s1210_regmap_reg_read(void *context, unsigned int reg,
  218. unsigned int *val)
  219. {
  220. struct ad2s1210_state *st = context;
  221. struct spi_transfer xfers[] = {
  222. {
  223. .len = 1,
  224. .rx_buf = &st->rx[0],
  225. .tx_buf = &st->tx[0],
  226. .cs_change = 1,
  227. }, {
  228. .len = 1,
  229. .rx_buf = &st->rx[1],
  230. .tx_buf = &st->tx[1],
  231. },
  232. };
  233. int ret;
  234. ret = ad2s1210_set_mode(st, MOD_CONFIG);
  235. if (ret < 0)
  236. return ret;
  237. st->tx[0] = reg;
  238. /*
  239. * Must be valid register address here otherwise this could write data.
  240. * It doesn't matter which one as long as reading doesn't have side-
  241. * effects.
  242. */
  243. st->tx[1] = AD2S1210_REG_CONTROL;
  244. ret = spi_sync_transfer(st->sdev, xfers, ARRAY_SIZE(xfers));
  245. if (ret < 0)
  246. return ret;
  247. /* reading the fault register also clears it */
  248. if (reg == AD2S1210_REG_FAULT)
  249. st->prev_fault_flags = 0;
  250. /*
  251. * If the D7 bit is set on any read/write register, it indicates a
  252. * parity error. The fault register is read-only and the D7 bit means
  253. * something else there.
  254. */
  255. if ((reg > AD2S1210_REG_VELOCITY_LSB && reg != AD2S1210_REG_FAULT)
  256. && st->rx[1] & AD2S1210_ADDRESS_DATA)
  257. return -EBADMSG;
  258. *val = st->rx[1];
  259. return 0;
  260. }
  261. /*
  262. * Toggles the SAMPLE line on the AD2S1210 to latch in the current position,
  263. * velocity, and faults.
  264. *
  265. * Must be called with lock held.
  266. */
  267. static void ad2s1210_toggle_sample_line(struct ad2s1210_state *st)
  268. {
  269. /*
  270. * Datasheet specifies minimum hold time t16 = 2 * tck + 20 ns. So the
  271. * longest time needed is when CLKIN is 6.144 MHz, in which case t16
  272. * ~= 350 ns. The same delay is also needed before re-asserting the
  273. * SAMPLE line.
  274. */
  275. gpiod_set_value(st->sample_gpio, 1);
  276. ndelay(350);
  277. gpiod_set_value(st->sample_gpio, 0);
  278. ndelay(350);
  279. }
  280. /*
  281. * Sets the excitation frequency and performs software reset.
  282. *
  283. * Must be called with lock held.
  284. */
  285. static int ad2s1210_reinit_excitation_frequency(struct ad2s1210_state *st,
  286. u16 fexcit)
  287. {
  288. /* Map resolution to settle time in milliseconds. */
  289. static const int track_time_ms[] = { 10, 20, 25, 60 };
  290. unsigned int ignored;
  291. int ret;
  292. u8 fcw;
  293. fcw = fexcit * (1 << 15) / st->clkin_hz;
  294. if (fcw < AD2S1210_MIN_FCW || fcw > AD2S1210_MAX_FCW)
  295. return -ERANGE;
  296. ret = regmap_write(st->regmap, AD2S1210_REG_EXCIT_FREQ, fcw);
  297. if (ret < 0)
  298. return ret;
  299. /*
  300. * Software reset reinitializes the excitation frequency output.
  301. * It does not reset any of the configuration registers.
  302. */
  303. ret = regmap_write(st->regmap, AD2S1210_REG_SOFT_RESET, 0);
  304. if (ret < 0)
  305. return ret;
  306. /*
  307. * Soft reset always triggers some faults due the change in the output
  308. * signal so clear the faults too. We need to delay for some time
  309. * (what datasheet calls t[track]) to allow things to settle before
  310. * clearing the faults.
  311. */
  312. msleep(track_time_ms[st->resolution] * 8192000 / st->clkin_hz);
  313. /* Reading the fault register clears the faults. */
  314. ret = regmap_read(st->regmap, AD2S1210_REG_FAULT, &ignored);
  315. if (ret < 0)
  316. return ret;
  317. /* Have to toggle sample line to get fault output pins to reset. */
  318. ad2s1210_toggle_sample_line(st);
  319. return 0;
  320. }
  321. static void ad2s1210_push_events(struct iio_dev *indio_dev,
  322. u8 flags, s64 timestamp)
  323. {
  324. struct ad2s1210_state *st = iio_priv(indio_dev);
  325. /* Sine/cosine inputs clipped */
  326. if (FAULT_ONESHOT(AD2S1210_FAULT_CLIP, flags, st->prev_fault_flags)) {
  327. /*
  328. * The chip does not differentiate between fault on sine vs.
  329. * cosine channel so we just send an event on both channels.
  330. */
  331. iio_push_event(indio_dev,
  332. IIO_UNMOD_EVENT_CODE(IIO_ALTVOLTAGE, 1,
  333. IIO_EV_TYPE_MAG,
  334. IIO_EV_DIR_EITHER),
  335. timestamp);
  336. iio_push_event(indio_dev,
  337. IIO_UNMOD_EVENT_CODE(IIO_ALTVOLTAGE, 2,
  338. IIO_EV_TYPE_MAG,
  339. IIO_EV_DIR_EITHER),
  340. timestamp);
  341. }
  342. /* Sine/cosine inputs below LOS threshold */
  343. if (FAULT_ONESHOT(AD2S1210_FAULT_LOS, flags, st->prev_fault_flags))
  344. iio_push_event(indio_dev,
  345. IIO_UNMOD_EVENT_CODE(IIO_ALTVOLTAGE, 0,
  346. IIO_EV_TYPE_THRESH,
  347. IIO_EV_DIR_FALLING),
  348. timestamp);
  349. /* Sine/cosine inputs exceed DOS overrange threshold */
  350. if (FAULT_ONESHOT(AD2S1210_FAULT_DOS_OVR, flags, st->prev_fault_flags))
  351. iio_push_event(indio_dev,
  352. IIO_UNMOD_EVENT_CODE(IIO_ALTVOLTAGE, 0,
  353. IIO_EV_TYPE_THRESH,
  354. IIO_EV_DIR_RISING),
  355. timestamp);
  356. /* Sine/cosine inputs exceed DOS mismatch threshold */
  357. if (FAULT_ONESHOT(AD2S1210_FAULT_DOS_MIS, flags, st->prev_fault_flags))
  358. iio_push_event(indio_dev,
  359. IIO_UNMOD_EVENT_CODE(IIO_ALTVOLTAGE, 0,
  360. IIO_EV_TYPE_MAG,
  361. IIO_EV_DIR_RISING),
  362. timestamp);
  363. /* Tracking error exceeds LOT threshold */
  364. if (FAULT_ONESHOT(AD2S1210_FAULT_LOT, flags, st->prev_fault_flags))
  365. iio_push_event(indio_dev,
  366. IIO_UNMOD_EVENT_CODE(IIO_ANGL, 1,
  367. IIO_EV_TYPE_THRESH,
  368. IIO_EV_DIR_RISING),
  369. timestamp);
  370. /* Velocity exceeds maximum tracking rate */
  371. if (FAULT_ONESHOT(AD2S1210_FAULT_VELOCITY, flags, st->prev_fault_flags))
  372. iio_push_event(indio_dev,
  373. IIO_UNMOD_EVENT_CODE(IIO_ANGL_VEL, 0,
  374. IIO_EV_TYPE_THRESH,
  375. IIO_EV_DIR_RISING),
  376. timestamp);
  377. /* Phase error exceeds phase lock range */
  378. if (FAULT_ONESHOT(AD2S1210_FAULT_PHASE, flags, st->prev_fault_flags))
  379. iio_push_event(indio_dev,
  380. IIO_UNMOD_EVENT_CODE(IIO_PHASE, 0,
  381. IIO_EV_TYPE_MAG,
  382. IIO_EV_DIR_RISING),
  383. timestamp);
  384. /* Configuration parity error */
  385. if (FAULT_ONESHOT(AD2S1210_FAULT_CONFIG_PARITY, flags,
  386. st->prev_fault_flags))
  387. /*
  388. * Userspace should also get notified of this via error return
  389. * when trying to write to any attribute that writes a register.
  390. */
  391. dev_err_ratelimited(&indio_dev->dev,
  392. "Configuration parity error\n");
  393. st->prev_fault_flags = flags;
  394. }
  395. static int ad2s1210_single_conversion(struct iio_dev *indio_dev,
  396. struct iio_chan_spec const *chan,
  397. int *val)
  398. {
  399. struct ad2s1210_state *st = iio_priv(indio_dev);
  400. s64 timestamp;
  401. int ret;
  402. guard(mutex)(&st->lock);
  403. ad2s1210_toggle_sample_line(st);
  404. timestamp = iio_get_time_ns(indio_dev);
  405. if (st->fixed_mode == MOD_CONFIG) {
  406. unsigned int reg_val;
  407. switch (chan->type) {
  408. case IIO_ANGL:
  409. ret = regmap_bulk_read(st->regmap,
  410. AD2S1210_REG_POSITION_MSB,
  411. &st->sample.raw, 2);
  412. if (ret < 0)
  413. return ret;
  414. break;
  415. case IIO_ANGL_VEL:
  416. ret = regmap_bulk_read(st->regmap,
  417. AD2S1210_REG_VELOCITY_MSB,
  418. &st->sample.raw, 2);
  419. if (ret < 0)
  420. return ret;
  421. break;
  422. default:
  423. return -EINVAL;
  424. }
  425. ret = regmap_read(st->regmap, AD2S1210_REG_FAULT, &reg_val);
  426. if (ret < 0)
  427. return ret;
  428. st->sample.fault = reg_val;
  429. } else {
  430. switch (chan->type) {
  431. case IIO_ANGL:
  432. ret = ad2s1210_set_mode(st, MOD_POS);
  433. break;
  434. case IIO_ANGL_VEL:
  435. ret = ad2s1210_set_mode(st, MOD_VEL);
  436. break;
  437. default:
  438. return -EINVAL;
  439. }
  440. if (ret < 0)
  441. return ret;
  442. ret = spi_read(st->sdev, &st->sample, 3);
  443. if (ret < 0)
  444. return ret;
  445. }
  446. switch (chan->type) {
  447. case IIO_ANGL:
  448. *val = be16_to_cpu(st->sample.raw);
  449. ret = IIO_VAL_INT;
  450. break;
  451. case IIO_ANGL_VEL:
  452. *val = (s16)be16_to_cpu(st->sample.raw);
  453. ret = IIO_VAL_INT;
  454. break;
  455. default:
  456. return -EINVAL;
  457. }
  458. ad2s1210_push_events(indio_dev, st->sample.fault, timestamp);
  459. return ret;
  460. }
  461. static int ad2s1210_get_hysteresis(struct ad2s1210_state *st, int *val)
  462. {
  463. int ret;
  464. guard(mutex)(&st->lock);
  465. ret = regmap_test_bits(st->regmap, AD2S1210_REG_CONTROL,
  466. AD2S1210_ENABLE_HYSTERESIS);
  467. if (ret < 0)
  468. return ret;
  469. *val = ret << (2 * (AD2S1210_RES_16 - st->resolution));
  470. return IIO_VAL_INT;
  471. }
  472. static int ad2s1210_set_hysteresis(struct ad2s1210_state *st, int val)
  473. {
  474. guard(mutex)(&st->lock);
  475. return regmap_update_bits(st->regmap, AD2S1210_REG_CONTROL,
  476. AD2S1210_ENABLE_HYSTERESIS,
  477. val ? AD2S1210_ENABLE_HYSTERESIS : 0);
  478. }
  479. static int ad2s1210_get_phase_lock_range(struct ad2s1210_state *st,
  480. int *val, int *val2)
  481. {
  482. int ret;
  483. guard(mutex)(&st->lock);
  484. ret = regmap_test_bits(st->regmap, AD2S1210_REG_CONTROL,
  485. AD2S1210_PHASE_LOCK_RANGE_44);
  486. if (ret < 0)
  487. return ret;
  488. if (ret) {
  489. /* 44 degrees as radians */
  490. *val = PHASE_44_DEG_TO_RAD_INT;
  491. *val2 = PHASE_44_DEG_TO_RAD_MICRO;
  492. } else {
  493. /* 360 degrees as radians */
  494. *val = PHASE_360_DEG_TO_RAD_INT;
  495. *val2 = PHASE_360_DEG_TO_RAD_MICRO;
  496. }
  497. return IIO_VAL_INT_PLUS_MICRO;
  498. }
  499. static int ad2s1210_set_phase_lock_range(struct ad2s1210_state *st,
  500. int val, int val2)
  501. {
  502. int deg;
  503. /* convert radians to degrees - only two allowable values */
  504. if (val == PHASE_44_DEG_TO_RAD_INT && val2 == PHASE_44_DEG_TO_RAD_MICRO)
  505. deg = 44;
  506. else if (val == PHASE_360_DEG_TO_RAD_INT &&
  507. val2 == PHASE_360_DEG_TO_RAD_MICRO)
  508. deg = 360;
  509. else
  510. return -EINVAL;
  511. guard(mutex)(&st->lock);
  512. return regmap_update_bits(st->regmap, AD2S1210_REG_CONTROL,
  513. AD2S1210_PHASE_LOCK_RANGE_44,
  514. deg == 44 ? AD2S1210_PHASE_LOCK_RANGE_44 : 0);
  515. }
  516. /* map resolution to microradians/LSB for LOT registers */
  517. static const int ad2s1210_lot_threshold_urad_per_lsb[] = {
  518. 6184, /* 10-bit: ~0.35 deg/LSB, 45 deg max */
  519. 2473, /* 12-bit: ~0.14 deg/LSB, 18 deg max */
  520. 1237, /* 14-bit: ~0.07 deg/LSB, 9 deg max */
  521. 1237, /* 16-bit: same as 14-bit */
  522. };
  523. static int ad2s1210_get_voltage_threshold(struct ad2s1210_state *st,
  524. unsigned int reg, int *val)
  525. {
  526. unsigned int reg_val;
  527. int ret;
  528. guard(mutex)(&st->lock);
  529. ret = regmap_read(st->regmap, reg, &reg_val);
  530. if (ret < 0)
  531. return ret;
  532. *val = reg_val * THRESHOLD_MILLIVOLT_PER_LSB;
  533. return IIO_VAL_INT;
  534. }
  535. static int ad2s1210_set_voltage_threshold(struct ad2s1210_state *st,
  536. unsigned int reg, int val)
  537. {
  538. unsigned int reg_val;
  539. reg_val = val / THRESHOLD_MILLIVOLT_PER_LSB;
  540. guard(mutex)(&st->lock);
  541. return regmap_write(st->regmap, reg, reg_val);
  542. }
  543. static int ad2s1210_get_lot_high_threshold(struct ad2s1210_state *st,
  544. int *val, int *val2)
  545. {
  546. unsigned int reg_val;
  547. int ret;
  548. guard(mutex)(&st->lock);
  549. ret = regmap_read(st->regmap, AD2S1210_REG_LOT_HIGH_THRD, &reg_val);
  550. if (ret < 0)
  551. return ret;
  552. *val = 0;
  553. *val2 = reg_val * ad2s1210_lot_threshold_urad_per_lsb[st->resolution];
  554. return IIO_VAL_INT_PLUS_MICRO;
  555. }
  556. static int ad2s1210_set_lot_high_threshold(struct ad2s1210_state *st,
  557. int val, int val2)
  558. {
  559. unsigned int high_reg_val, low_reg_val, hysteresis;
  560. int ret;
  561. /* all valid values are between 0 and pi/4 radians */
  562. if (val != 0)
  563. return -EINVAL;
  564. guard(mutex)(&st->lock);
  565. /*
  566. * We need to read both high and low registers first so we can preserve
  567. * the hysteresis.
  568. */
  569. ret = regmap_read(st->regmap, AD2S1210_REG_LOT_HIGH_THRD, &high_reg_val);
  570. if (ret < 0)
  571. return ret;
  572. ret = regmap_read(st->regmap, AD2S1210_REG_LOT_LOW_THRD, &low_reg_val);
  573. if (ret < 0)
  574. return ret;
  575. hysteresis = high_reg_val - low_reg_val;
  576. high_reg_val = val2 / ad2s1210_lot_threshold_urad_per_lsb[st->resolution];
  577. low_reg_val = high_reg_val - hysteresis;
  578. ret = regmap_write(st->regmap, AD2S1210_REG_LOT_HIGH_THRD, high_reg_val);
  579. if (ret < 0)
  580. return ret;
  581. return regmap_write(st->regmap, AD2S1210_REG_LOT_LOW_THRD, low_reg_val);
  582. }
  583. static int ad2s1210_get_lot_low_threshold(struct ad2s1210_state *st,
  584. int *val, int *val2)
  585. {
  586. unsigned int high_reg_val, low_reg_val;
  587. int ret;
  588. guard(mutex)(&st->lock);
  589. ret = regmap_read(st->regmap, AD2S1210_REG_LOT_HIGH_THRD, &high_reg_val);
  590. if (ret < 0)
  591. return ret;
  592. ret = regmap_read(st->regmap, AD2S1210_REG_LOT_LOW_THRD, &low_reg_val);
  593. if (ret < 0)
  594. return ret;
  595. /* sysfs value is hysteresis rather than actual low value */
  596. *val = 0;
  597. *val2 = (high_reg_val - low_reg_val) *
  598. ad2s1210_lot_threshold_urad_per_lsb[st->resolution];
  599. return IIO_VAL_INT_PLUS_MICRO;
  600. }
  601. static int ad2s1210_set_lot_low_threshold(struct ad2s1210_state *st,
  602. int val, int val2)
  603. {
  604. unsigned int reg_val, hysteresis;
  605. int ret;
  606. /* all valid values are between 0 and pi/4 radians */
  607. if (val != 0)
  608. return -EINVAL;
  609. hysteresis = val2 / ad2s1210_lot_threshold_urad_per_lsb[st->resolution];
  610. guard(mutex)(&st->lock);
  611. ret = regmap_read(st->regmap, AD2S1210_REG_LOT_HIGH_THRD, &reg_val);
  612. if (ret < 0)
  613. return ret;
  614. return regmap_write(st->regmap, AD2S1210_REG_LOT_LOW_THRD,
  615. reg_val - hysteresis);
  616. }
  617. static int ad2s1210_get_excitation_frequency(struct ad2s1210_state *st, int *val)
  618. {
  619. unsigned int reg_val;
  620. int ret;
  621. guard(mutex)(&st->lock);
  622. ret = regmap_read(st->regmap, AD2S1210_REG_EXCIT_FREQ, &reg_val);
  623. if (ret < 0)
  624. return ret;
  625. *val = reg_val * st->clkin_hz / (1 << 15);
  626. return IIO_VAL_INT;
  627. }
  628. static int ad2s1210_set_excitation_frequency(struct ad2s1210_state *st, int val)
  629. {
  630. if (val < AD2S1210_MIN_EXCIT || val > AD2S1210_MAX_EXCIT)
  631. return -EINVAL;
  632. guard(mutex)(&st->lock);
  633. return ad2s1210_reinit_excitation_frequency(st, val);
  634. }
  635. static const int ad2s1210_velocity_scale[] = {
  636. 17089132, /* 8.192MHz / (2*pi * 2500 / 2^15) */
  637. 42722830, /* 8.192MHz / (2*pi * 1000 / 2^15) */
  638. 85445659, /* 8.192MHz / (2*pi * 500 / 2^15) */
  639. 341782638, /* 8.192MHz / (2*pi * 125 / 2^15) */
  640. };
  641. static int ad2s1210_read_raw(struct iio_dev *indio_dev,
  642. struct iio_chan_spec const *chan,
  643. int *val,
  644. int *val2,
  645. long mask)
  646. {
  647. struct ad2s1210_state *st = iio_priv(indio_dev);
  648. switch (mask) {
  649. case IIO_CHAN_INFO_RAW:
  650. return ad2s1210_single_conversion(indio_dev, chan, val);
  651. case IIO_CHAN_INFO_SCALE:
  652. switch (chan->type) {
  653. case IIO_ANGL:
  654. /* approx 0.3 arc min converted to radians */
  655. *val = 0;
  656. *val2 = 95874;
  657. return IIO_VAL_INT_PLUS_NANO;
  658. case IIO_ANGL_VEL:
  659. *val = st->clkin_hz;
  660. *val2 = ad2s1210_velocity_scale[st->resolution];
  661. return IIO_VAL_FRACTIONAL;
  662. default:
  663. return -EINVAL;
  664. }
  665. case IIO_CHAN_INFO_FREQUENCY:
  666. switch (chan->type) {
  667. case IIO_ALTVOLTAGE:
  668. return ad2s1210_get_excitation_frequency(st, val);
  669. default:
  670. return -EINVAL;
  671. }
  672. case IIO_CHAN_INFO_HYSTERESIS:
  673. switch (chan->type) {
  674. case IIO_ANGL:
  675. return ad2s1210_get_hysteresis(st, val);
  676. default:
  677. return -EINVAL;
  678. }
  679. default:
  680. return -EINVAL;
  681. }
  682. }
  683. static int ad2s1210_read_avail(struct iio_dev *indio_dev,
  684. struct iio_chan_spec const *chan,
  685. const int **vals, int *type,
  686. int *length, long mask)
  687. {
  688. static const int excitation_frequency_available[] = {
  689. AD2S1210_MIN_EXCIT,
  690. 250, /* step */
  691. AD2S1210_MAX_EXCIT,
  692. };
  693. struct ad2s1210_state *st = iio_priv(indio_dev);
  694. switch (mask) {
  695. case IIO_CHAN_INFO_FREQUENCY:
  696. switch (chan->type) {
  697. case IIO_ALTVOLTAGE:
  698. *type = IIO_VAL_INT;
  699. *vals = excitation_frequency_available;
  700. return IIO_AVAIL_RANGE;
  701. default:
  702. return -EINVAL;
  703. }
  704. case IIO_CHAN_INFO_HYSTERESIS:
  705. switch (chan->type) {
  706. case IIO_ANGL:
  707. *vals = st->hysteresis_available;
  708. *type = IIO_VAL_INT;
  709. *length = ARRAY_SIZE(st->hysteresis_available);
  710. return IIO_AVAIL_LIST;
  711. default:
  712. return -EINVAL;
  713. }
  714. default:
  715. return -EINVAL;
  716. }
  717. }
  718. static int ad2s1210_write_raw(struct iio_dev *indio_dev,
  719. struct iio_chan_spec const *chan,
  720. int val, int val2, long mask)
  721. {
  722. struct ad2s1210_state *st = iio_priv(indio_dev);
  723. switch (mask) {
  724. case IIO_CHAN_INFO_FREQUENCY:
  725. switch (chan->type) {
  726. case IIO_ALTVOLTAGE:
  727. return ad2s1210_set_excitation_frequency(st, val);
  728. default:
  729. return -EINVAL;
  730. }
  731. case IIO_CHAN_INFO_HYSTERESIS:
  732. switch (chan->type) {
  733. case IIO_ANGL:
  734. return ad2s1210_set_hysteresis(st, val);
  735. default:
  736. return -EINVAL;
  737. }
  738. default:
  739. return -EINVAL;
  740. }
  741. }
  742. static const struct iio_event_spec ad2s1210_position_event_spec[] = {
  743. {
  744. /* Tracking error exceeds LOT threshold fault. */
  745. .type = IIO_EV_TYPE_THRESH,
  746. .dir = IIO_EV_DIR_RISING,
  747. .mask_separate =
  748. /* Loss of tracking high threshold. */
  749. BIT(IIO_EV_INFO_VALUE) |
  750. /* Loss of tracking low threshold. */
  751. BIT(IIO_EV_INFO_HYSTERESIS),
  752. },
  753. };
  754. static const struct iio_event_spec ad2s1210_velocity_event_spec[] = {
  755. {
  756. /* Velocity exceeds maximum tracking rate fault. */
  757. .type = IIO_EV_TYPE_MAG,
  758. .dir = IIO_EV_DIR_RISING,
  759. },
  760. };
  761. static const struct iio_event_spec ad2s1210_phase_event_spec[] = {
  762. {
  763. /* Phase error fault. */
  764. .type = IIO_EV_TYPE_MAG,
  765. .dir = IIO_EV_DIR_RISING,
  766. /* Phase lock range. */
  767. .mask_separate = BIT(IIO_EV_INFO_VALUE),
  768. },
  769. };
  770. static const struct iio_event_spec ad2s1210_monitor_signal_event_spec[] = {
  771. {
  772. /* Sine/cosine below LOS threshold fault. */
  773. .type = IIO_EV_TYPE_THRESH,
  774. .dir = IIO_EV_DIR_FALLING,
  775. /* Loss of signal threshold. */
  776. .mask_separate = BIT(IIO_EV_INFO_VALUE),
  777. },
  778. {
  779. /* Sine/cosine DOS overrange fault.*/
  780. .type = IIO_EV_TYPE_THRESH,
  781. .dir = IIO_EV_DIR_RISING,
  782. /* Degredation of signal overrange threshold. */
  783. .mask_separate = BIT(IIO_EV_INFO_VALUE),
  784. },
  785. {
  786. /* Sine/cosine DOS mismatch fault.*/
  787. .type = IIO_EV_TYPE_MAG,
  788. .dir = IIO_EV_DIR_RISING,
  789. .mask_separate = BIT(IIO_EV_INFO_VALUE),
  790. },
  791. };
  792. static const struct iio_event_spec ad2s1210_sin_cos_event_spec[] = {
  793. {
  794. /* Sine/cosine clipping fault. */
  795. .type = IIO_EV_TYPE_MAG,
  796. .dir = IIO_EV_DIR_EITHER,
  797. },
  798. };
  799. static const struct iio_chan_spec ad2s1210_channels[] = {
  800. {
  801. .type = IIO_ANGL,
  802. .indexed = 1,
  803. .channel = 0,
  804. .scan_index = 0,
  805. .scan_type = {
  806. .sign = 'u',
  807. .realbits = 16,
  808. .storagebits = 16,
  809. .endianness = IIO_BE,
  810. },
  811. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  812. BIT(IIO_CHAN_INFO_SCALE) |
  813. BIT(IIO_CHAN_INFO_HYSTERESIS),
  814. .info_mask_separate_available =
  815. BIT(IIO_CHAN_INFO_HYSTERESIS),
  816. }, {
  817. .type = IIO_ANGL_VEL,
  818. .indexed = 1,
  819. .channel = 0,
  820. .scan_index = 1,
  821. .scan_type = {
  822. .sign = 's',
  823. .realbits = 16,
  824. .storagebits = 16,
  825. .endianness = IIO_BE,
  826. },
  827. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  828. BIT(IIO_CHAN_INFO_SCALE),
  829. .event_spec = ad2s1210_velocity_event_spec,
  830. .num_event_specs = ARRAY_SIZE(ad2s1210_velocity_event_spec),
  831. },
  832. IIO_CHAN_SOFT_TIMESTAMP(2),
  833. {
  834. /* used to configure LOT thresholds and get tracking error */
  835. .type = IIO_ANGL,
  836. .indexed = 1,
  837. .channel = 1,
  838. .scan_index = -1,
  839. .event_spec = ad2s1210_position_event_spec,
  840. .num_event_specs = ARRAY_SIZE(ad2s1210_position_event_spec),
  841. },
  842. {
  843. /* used to configure phase lock range and get phase lock error */
  844. .type = IIO_PHASE,
  845. .indexed = 1,
  846. .channel = 0,
  847. .scan_index = -1,
  848. .event_spec = ad2s1210_phase_event_spec,
  849. .num_event_specs = ARRAY_SIZE(ad2s1210_phase_event_spec),
  850. }, {
  851. /* excitation frequency output */
  852. .type = IIO_ALTVOLTAGE,
  853. .indexed = 1,
  854. .channel = 0,
  855. .output = 1,
  856. .scan_index = -1,
  857. .info_mask_separate = BIT(IIO_CHAN_INFO_FREQUENCY),
  858. .info_mask_separate_available = BIT(IIO_CHAN_INFO_FREQUENCY),
  859. }, {
  860. /* monitor signal */
  861. .type = IIO_ALTVOLTAGE,
  862. .indexed = 1,
  863. .channel = 0,
  864. .scan_index = -1,
  865. .event_spec = ad2s1210_monitor_signal_event_spec,
  866. .num_event_specs = ARRAY_SIZE(ad2s1210_monitor_signal_event_spec),
  867. }, {
  868. /* sine input */
  869. .type = IIO_ALTVOLTAGE,
  870. .indexed = 1,
  871. .channel = 1,
  872. .scan_index = -1,
  873. .event_spec = ad2s1210_sin_cos_event_spec,
  874. .num_event_specs = ARRAY_SIZE(ad2s1210_sin_cos_event_spec),
  875. }, {
  876. /* cosine input */
  877. .type = IIO_ALTVOLTAGE,
  878. .indexed = 1,
  879. .channel = 2,
  880. .scan_index = -1,
  881. .event_spec = ad2s1210_sin_cos_event_spec,
  882. .num_event_specs = ARRAY_SIZE(ad2s1210_sin_cos_event_spec),
  883. },
  884. };
  885. static ssize_t event_attr_voltage_reg_show(struct device *dev,
  886. struct device_attribute *attr,
  887. char *buf)
  888. {
  889. struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
  890. struct iio_dev_attr *iattr = to_iio_dev_attr(attr);
  891. unsigned int value;
  892. int ret;
  893. guard(mutex)(&st->lock);
  894. ret = regmap_read(st->regmap, iattr->address, &value);
  895. if (ret < 0)
  896. return ret;
  897. return sprintf(buf, "%d\n", value * THRESHOLD_MILLIVOLT_PER_LSB);
  898. }
  899. static ssize_t event_attr_voltage_reg_store(struct device *dev,
  900. struct device_attribute *attr,
  901. const char *buf, size_t len)
  902. {
  903. struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
  904. struct iio_dev_attr *iattr = to_iio_dev_attr(attr);
  905. u16 data;
  906. int ret;
  907. ret = kstrtou16(buf, 10, &data);
  908. if (ret)
  909. return -EINVAL;
  910. guard(mutex)(&st->lock);
  911. ret = regmap_write(st->regmap, iattr->address,
  912. data / THRESHOLD_MILLIVOLT_PER_LSB);
  913. if (ret < 0)
  914. return ret;
  915. return len;
  916. }
  917. static ssize_t
  918. in_angl1_thresh_rising_value_available_show(struct device *dev,
  919. struct device_attribute *attr,
  920. char *buf)
  921. {
  922. struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
  923. int step = ad2s1210_lot_threshold_urad_per_lsb[st->resolution];
  924. return sysfs_emit(buf, "[0 0.%06d 0.%06d]\n", step, step * 0x7F);
  925. }
  926. static ssize_t
  927. in_angl1_thresh_rising_hysteresis_available_show(struct device *dev,
  928. struct device_attribute *attr,
  929. char *buf)
  930. {
  931. struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
  932. int step = ad2s1210_lot_threshold_urad_per_lsb[st->resolution];
  933. return sysfs_emit(buf, "[0 0.%06d 0.%06d]\n", step, step * 0x7F);
  934. }
  935. static IIO_CONST_ATTR(in_phase0_mag_rising_value_available,
  936. __stringify(PHASE_44_DEG_TO_RAD_INT) "."
  937. __stringify(PHASE_44_DEG_TO_RAD_MICRO) " "
  938. __stringify(PHASE_360_DEG_TO_RAD_INT) "."
  939. __stringify(PHASE_360_DEG_TO_RAD_MICRO));
  940. static IIO_CONST_ATTR(in_altvoltage0_thresh_falling_value_available,
  941. THRESHOLD_RANGE_STR);
  942. static IIO_CONST_ATTR(in_altvoltage0_thresh_rising_value_available,
  943. THRESHOLD_RANGE_STR);
  944. static IIO_CONST_ATTR(in_altvoltage0_mag_rising_value_available,
  945. THRESHOLD_RANGE_STR);
  946. static IIO_DEVICE_ATTR(in_altvoltage0_mag_rising_reset_max, 0644,
  947. event_attr_voltage_reg_show, event_attr_voltage_reg_store,
  948. AD2S1210_REG_DOS_RST_MAX_THRD);
  949. static IIO_CONST_ATTR(in_altvoltage0_mag_rising_reset_max_available, THRESHOLD_RANGE_STR);
  950. static IIO_DEVICE_ATTR(in_altvoltage0_mag_rising_reset_min, 0644,
  951. event_attr_voltage_reg_show, event_attr_voltage_reg_store,
  952. AD2S1210_REG_DOS_RST_MIN_THRD);
  953. static IIO_CONST_ATTR(in_altvoltage0_mag_rising_reset_min_available, THRESHOLD_RANGE_STR);
  954. static IIO_DEVICE_ATTR_RO(in_angl1_thresh_rising_value_available, 0);
  955. static IIO_DEVICE_ATTR_RO(in_angl1_thresh_rising_hysteresis_available, 0);
  956. static struct attribute *ad2s1210_event_attributes[] = {
  957. &iio_const_attr_in_phase0_mag_rising_value_available.dev_attr.attr,
  958. &iio_const_attr_in_altvoltage0_thresh_falling_value_available.dev_attr.attr,
  959. &iio_const_attr_in_altvoltage0_thresh_rising_value_available.dev_attr.attr,
  960. &iio_const_attr_in_altvoltage0_mag_rising_value_available.dev_attr.attr,
  961. &iio_dev_attr_in_altvoltage0_mag_rising_reset_max.dev_attr.attr,
  962. &iio_const_attr_in_altvoltage0_mag_rising_reset_max_available.dev_attr.attr,
  963. &iio_dev_attr_in_altvoltage0_mag_rising_reset_min.dev_attr.attr,
  964. &iio_const_attr_in_altvoltage0_mag_rising_reset_min_available.dev_attr.attr,
  965. &iio_dev_attr_in_angl1_thresh_rising_value_available.dev_attr.attr,
  966. &iio_dev_attr_in_angl1_thresh_rising_hysteresis_available.dev_attr.attr,
  967. NULL,
  968. };
  969. static const struct attribute_group ad2s1210_event_attribute_group = {
  970. .attrs = ad2s1210_event_attributes,
  971. };
  972. static int ad2s1210_initial(struct ad2s1210_state *st)
  973. {
  974. unsigned int data;
  975. int ret;
  976. guard(mutex)(&st->lock);
  977. /* Use default config register value plus resolution from devicetree. */
  978. data = FIELD_PREP(AD2S1210_PHASE_LOCK_RANGE_44, 1);
  979. data |= FIELD_PREP(AD2S1210_ENABLE_HYSTERESIS, 1);
  980. data |= FIELD_PREP(AD2S1210_SET_ENRES, 0x3);
  981. data |= FIELD_PREP(AD2S1210_SET_RES, st->resolution);
  982. ret = regmap_write(st->regmap, AD2S1210_REG_CONTROL, data);
  983. if (ret < 0)
  984. return ret;
  985. return ad2s1210_reinit_excitation_frequency(st, AD2S1210_DEF_EXCIT);
  986. }
  987. static int ad2s1210_read_label(struct iio_dev *indio_dev,
  988. struct iio_chan_spec const *chan,
  989. char *label)
  990. {
  991. if (chan->type == IIO_ANGL) {
  992. if (chan->channel == 0)
  993. return sprintf(label, "position\n");
  994. if (chan->channel == 1)
  995. return sprintf(label, "tracking error\n");
  996. }
  997. if (chan->type == IIO_ANGL_VEL)
  998. return sprintf(label, "velocity\n");
  999. if (chan->type == IIO_PHASE)
  1000. return sprintf(label, "synthetic reference\n");
  1001. if (chan->type == IIO_ALTVOLTAGE) {
  1002. if (chan->output)
  1003. return sprintf(label, "excitation\n");
  1004. if (chan->channel == 0)
  1005. return sprintf(label, "monitor signal\n");
  1006. if (chan->channel == 1)
  1007. return sprintf(label, "cosine\n");
  1008. if (chan->channel == 2)
  1009. return sprintf(label, "sine\n");
  1010. }
  1011. return -EINVAL;
  1012. }
  1013. static int ad2s1210_read_event_value(struct iio_dev *indio_dev,
  1014. const struct iio_chan_spec *chan,
  1015. enum iio_event_type type,
  1016. enum iio_event_direction dir,
  1017. enum iio_event_info info,
  1018. int *val, int *val2)
  1019. {
  1020. struct ad2s1210_state *st = iio_priv(indio_dev);
  1021. switch (chan->type) {
  1022. case IIO_ANGL:
  1023. switch (info) {
  1024. case IIO_EV_INFO_VALUE:
  1025. return ad2s1210_get_lot_high_threshold(st, val, val2);
  1026. case IIO_EV_INFO_HYSTERESIS:
  1027. return ad2s1210_get_lot_low_threshold(st, val, val2);
  1028. default:
  1029. return -EINVAL;
  1030. }
  1031. case IIO_ALTVOLTAGE:
  1032. if (chan->output)
  1033. return -EINVAL;
  1034. if (type == IIO_EV_TYPE_THRESH && dir == IIO_EV_DIR_FALLING)
  1035. return ad2s1210_get_voltage_threshold(st,
  1036. AD2S1210_REG_LOS_THRD, val);
  1037. if (type == IIO_EV_TYPE_THRESH && dir == IIO_EV_DIR_RISING)
  1038. return ad2s1210_get_voltage_threshold(st,
  1039. AD2S1210_REG_DOS_OVR_THRD, val);
  1040. if (type == IIO_EV_TYPE_MAG)
  1041. return ad2s1210_get_voltage_threshold(st,
  1042. AD2S1210_REG_DOS_MIS_THRD, val);
  1043. return -EINVAL;
  1044. case IIO_PHASE:
  1045. return ad2s1210_get_phase_lock_range(st, val, val2);
  1046. default:
  1047. return -EINVAL;
  1048. }
  1049. }
  1050. static int ad2s1210_write_event_value(struct iio_dev *indio_dev,
  1051. const struct iio_chan_spec *chan,
  1052. enum iio_event_type type,
  1053. enum iio_event_direction dir,
  1054. enum iio_event_info info,
  1055. int val, int val2)
  1056. {
  1057. struct ad2s1210_state *st = iio_priv(indio_dev);
  1058. switch (chan->type) {
  1059. case IIO_ANGL:
  1060. switch (info) {
  1061. case IIO_EV_INFO_VALUE:
  1062. return ad2s1210_set_lot_high_threshold(st, val, val2);
  1063. case IIO_EV_INFO_HYSTERESIS:
  1064. return ad2s1210_set_lot_low_threshold(st, val, val2);
  1065. default:
  1066. return -EINVAL;
  1067. }
  1068. case IIO_ALTVOLTAGE:
  1069. if (chan->output)
  1070. return -EINVAL;
  1071. if (type == IIO_EV_TYPE_THRESH && dir == IIO_EV_DIR_FALLING)
  1072. return ad2s1210_set_voltage_threshold(st,
  1073. AD2S1210_REG_LOS_THRD, val);
  1074. if (type == IIO_EV_TYPE_THRESH && dir == IIO_EV_DIR_RISING)
  1075. return ad2s1210_set_voltage_threshold(st,
  1076. AD2S1210_REG_DOS_OVR_THRD, val);
  1077. if (type == IIO_EV_TYPE_MAG)
  1078. return ad2s1210_set_voltage_threshold(st,
  1079. AD2S1210_REG_DOS_MIS_THRD, val);
  1080. return -EINVAL;
  1081. case IIO_PHASE:
  1082. return ad2s1210_set_phase_lock_range(st, val, val2);
  1083. default:
  1084. return -EINVAL;
  1085. }
  1086. }
  1087. static int ad2s1210_read_event_label(struct iio_dev *indio_dev,
  1088. struct iio_chan_spec const *chan,
  1089. enum iio_event_type type,
  1090. enum iio_event_direction dir,
  1091. char *label)
  1092. {
  1093. if (chan->type == IIO_ANGL)
  1094. return sprintf(label, "LOT\n");
  1095. if (chan->type == IIO_ANGL_VEL)
  1096. return sprintf(label, "max tracking rate\n");
  1097. if (chan->type == IIO_PHASE)
  1098. return sprintf(label, "phase lock\n");
  1099. if (chan->type == IIO_ALTVOLTAGE) {
  1100. if (chan->channel == 0) {
  1101. if (type == IIO_EV_TYPE_THRESH &&
  1102. dir == IIO_EV_DIR_FALLING)
  1103. return sprintf(label, "LOS\n");
  1104. if (type == IIO_EV_TYPE_THRESH &&
  1105. dir == IIO_EV_DIR_RISING)
  1106. return sprintf(label, "DOS overrange\n");
  1107. if (type == IIO_EV_TYPE_MAG)
  1108. return sprintf(label, "DOS mismatch\n");
  1109. }
  1110. if (chan->channel == 1 || chan->channel == 2)
  1111. return sprintf(label, "clipped\n");
  1112. }
  1113. return -EINVAL;
  1114. }
  1115. static int ad2s1210_debugfs_reg_access(struct iio_dev *indio_dev,
  1116. unsigned int reg, unsigned int writeval,
  1117. unsigned int *readval)
  1118. {
  1119. struct ad2s1210_state *st = iio_priv(indio_dev);
  1120. guard(mutex)(&st->lock);
  1121. if (readval)
  1122. return regmap_read(st->regmap, reg, readval);
  1123. return regmap_write(st->regmap, reg, writeval);
  1124. }
  1125. static irqreturn_t ad2s1210_trigger_handler(int irq, void *p)
  1126. {
  1127. struct iio_poll_func *pf = p;
  1128. struct iio_dev *indio_dev = pf->indio_dev;
  1129. struct ad2s1210_state *st = iio_priv(indio_dev);
  1130. size_t chan = 0;
  1131. int ret;
  1132. guard(mutex)(&st->lock);
  1133. memset(&st->scan, 0, sizeof(st->scan));
  1134. ad2s1210_toggle_sample_line(st);
  1135. if (test_bit(0, indio_dev->active_scan_mask)) {
  1136. if (st->fixed_mode == MOD_CONFIG) {
  1137. ret = regmap_bulk_read(st->regmap,
  1138. AD2S1210_REG_POSITION_MSB,
  1139. &st->sample.raw, 2);
  1140. if (ret < 0)
  1141. goto error_ret;
  1142. } else {
  1143. ret = ad2s1210_set_mode(st, MOD_POS);
  1144. if (ret < 0)
  1145. goto error_ret;
  1146. ret = spi_read(st->sdev, &st->sample, 3);
  1147. if (ret < 0)
  1148. goto error_ret;
  1149. }
  1150. memcpy(&st->scan.chan[chan++], &st->sample.raw, 2);
  1151. }
  1152. if (test_bit(1, indio_dev->active_scan_mask)) {
  1153. if (st->fixed_mode == MOD_CONFIG) {
  1154. ret = regmap_bulk_read(st->regmap,
  1155. AD2S1210_REG_VELOCITY_MSB,
  1156. &st->sample.raw, 2);
  1157. if (ret < 0)
  1158. goto error_ret;
  1159. } else {
  1160. ret = ad2s1210_set_mode(st, MOD_VEL);
  1161. if (ret < 0)
  1162. goto error_ret;
  1163. ret = spi_read(st->sdev, &st->sample, 3);
  1164. if (ret < 0)
  1165. goto error_ret;
  1166. }
  1167. memcpy(&st->scan.chan[chan++], &st->sample.raw, 2);
  1168. }
  1169. if (st->fixed_mode == MOD_CONFIG) {
  1170. unsigned int reg_val;
  1171. ret = regmap_read(st->regmap, AD2S1210_REG_FAULT, &reg_val);
  1172. if (ret < 0)
  1173. return ret;
  1174. st->sample.fault = reg_val;
  1175. }
  1176. ad2s1210_push_events(indio_dev, st->sample.fault, pf->timestamp);
  1177. iio_push_to_buffers_with_timestamp(indio_dev, &st->scan, pf->timestamp);
  1178. error_ret:
  1179. iio_trigger_notify_done(indio_dev->trig);
  1180. return IRQ_HANDLED;
  1181. }
  1182. static const struct iio_info ad2s1210_info = {
  1183. .event_attrs = &ad2s1210_event_attribute_group,
  1184. .read_raw = ad2s1210_read_raw,
  1185. .read_avail = ad2s1210_read_avail,
  1186. .write_raw = ad2s1210_write_raw,
  1187. .read_label = ad2s1210_read_label,
  1188. .read_event_value = ad2s1210_read_event_value,
  1189. .write_event_value = ad2s1210_write_event_value,
  1190. .read_event_label = ad2s1210_read_event_label,
  1191. .debugfs_reg_access = &ad2s1210_debugfs_reg_access,
  1192. };
  1193. static int ad2s1210_setup_properties(struct ad2s1210_state *st)
  1194. {
  1195. struct device *dev = &st->sdev->dev;
  1196. const char *str_val;
  1197. u32 val;
  1198. int ret;
  1199. ret = device_property_read_string(dev, "adi,fixed-mode", &str_val);
  1200. if (ret == -EINVAL)
  1201. st->fixed_mode = -1;
  1202. else if (ret < 0)
  1203. return dev_err_probe(dev, ret,
  1204. "failed to read adi,fixed-mode property\n");
  1205. else {
  1206. if (strcmp(str_val, "config"))
  1207. return dev_err_probe(dev, -EINVAL,
  1208. "only adi,fixed-mode=\"config\" is supported\n");
  1209. st->fixed_mode = MOD_CONFIG;
  1210. }
  1211. ret = device_property_read_u32(dev, "assigned-resolution-bits", &val);
  1212. if (ret < 0)
  1213. return dev_err_probe(dev, ret,
  1214. "failed to read assigned-resolution-bits property\n");
  1215. if (val < 10 || val > 16)
  1216. return dev_err_probe(dev, -EINVAL,
  1217. "resolution out of range: %u\n", val);
  1218. st->resolution = (val - 10) >> 1;
  1219. /*
  1220. * These are values that correlate to the hysteresis bit in the Control
  1221. * register. 0 = disabled, 1 = enabled. When enabled, the actual
  1222. * hysteresis is +/- 1 LSB of the raw position value. Which bit is the
  1223. * LSB depends on the specified resolution.
  1224. */
  1225. st->hysteresis_available[0] = 0;
  1226. st->hysteresis_available[1] = 1 << (2 * (AD2S1210_RES_16 -
  1227. st->resolution));
  1228. return 0;
  1229. }
  1230. static int ad2s1210_setup_clocks(struct ad2s1210_state *st)
  1231. {
  1232. struct device *dev = &st->sdev->dev;
  1233. struct clk *clk;
  1234. clk = devm_clk_get_enabled(dev, NULL);
  1235. if (IS_ERR(clk))
  1236. return dev_err_probe(dev, PTR_ERR(clk), "failed to get clock\n");
  1237. st->clkin_hz = clk_get_rate(clk);
  1238. if (st->clkin_hz < AD2S1210_MIN_CLKIN || st->clkin_hz > AD2S1210_MAX_CLKIN)
  1239. return dev_err_probe(dev, -EINVAL,
  1240. "clock frequency out of range: %lu\n",
  1241. st->clkin_hz);
  1242. return 0;
  1243. }
  1244. static int ad2s1210_setup_gpios(struct ad2s1210_state *st)
  1245. {
  1246. struct device *dev = &st->sdev->dev;
  1247. struct gpio_descs *resolution_gpios;
  1248. struct gpio_desc *reset_gpio;
  1249. DECLARE_BITMAP(bitmap, 2);
  1250. int ret;
  1251. /* should not be sampling on startup */
  1252. st->sample_gpio = devm_gpiod_get(dev, "sample", GPIOD_OUT_LOW);
  1253. if (IS_ERR(st->sample_gpio))
  1254. return dev_err_probe(dev, PTR_ERR(st->sample_gpio),
  1255. "failed to request sample GPIO\n");
  1256. /* both pins high means that we start in config mode */
  1257. st->mode_gpios = devm_gpiod_get_array_optional(dev, "mode",
  1258. GPIOD_OUT_HIGH);
  1259. if (IS_ERR(st->mode_gpios))
  1260. return dev_err_probe(dev, PTR_ERR(st->mode_gpios),
  1261. "failed to request mode GPIOs\n");
  1262. if (!st->mode_gpios && st->fixed_mode == -1)
  1263. return dev_err_probe(dev, -EINVAL,
  1264. "must specify either adi,fixed-mode or mode-gpios\n");
  1265. if (st->mode_gpios && st->fixed_mode != -1)
  1266. return dev_err_probe(dev, -EINVAL,
  1267. "must specify only one of adi,fixed-mode or mode-gpios\n");
  1268. if (st->mode_gpios && st->mode_gpios->ndescs != 2)
  1269. return dev_err_probe(dev, -EINVAL,
  1270. "requires exactly 2 mode-gpios\n");
  1271. /*
  1272. * If resolution gpios are provided, they get set to the required
  1273. * resolution, otherwise it is assumed the RES0 and RES1 pins are
  1274. * hard-wired to match the resolution indicated in the devicetree.
  1275. */
  1276. resolution_gpios = devm_gpiod_get_array_optional(dev, "resolution",
  1277. GPIOD_ASIS);
  1278. if (IS_ERR(resolution_gpios))
  1279. return dev_err_probe(dev, PTR_ERR(resolution_gpios),
  1280. "failed to request resolution GPIOs\n");
  1281. if (resolution_gpios) {
  1282. if (resolution_gpios->ndescs != 2)
  1283. return dev_err_probe(dev, -EINVAL,
  1284. "requires exactly 2 resolution-gpios\n");
  1285. bitmap[0] = st->resolution;
  1286. ret = gpiod_set_array_value(resolution_gpios->ndescs,
  1287. resolution_gpios->desc,
  1288. resolution_gpios->info,
  1289. bitmap);
  1290. if (ret < 0)
  1291. return dev_err_probe(dev, ret,
  1292. "failed to set resolution gpios\n");
  1293. }
  1294. /* If the optional reset GPIO is present, toggle it to do a hard reset. */
  1295. reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
  1296. if (IS_ERR(reset_gpio))
  1297. return dev_err_probe(dev, PTR_ERR(reset_gpio),
  1298. "failed to request reset GPIO\n");
  1299. if (reset_gpio) {
  1300. udelay(10);
  1301. gpiod_set_value(reset_gpio, 0);
  1302. }
  1303. return 0;
  1304. }
  1305. static const struct regmap_range ad2s1210_regmap_readable_ranges[] = {
  1306. regmap_reg_range(AD2S1210_REG_POSITION_MSB, AD2S1210_REG_VELOCITY_LSB),
  1307. regmap_reg_range(AD2S1210_REG_LOS_THRD, AD2S1210_REG_LOT_LOW_THRD),
  1308. regmap_reg_range(AD2S1210_REG_EXCIT_FREQ, AD2S1210_REG_CONTROL),
  1309. regmap_reg_range(AD2S1210_REG_FAULT, AD2S1210_REG_FAULT),
  1310. };
  1311. static const struct regmap_access_table ad2s1210_regmap_rd_table = {
  1312. .yes_ranges = ad2s1210_regmap_readable_ranges,
  1313. .n_yes_ranges = ARRAY_SIZE(ad2s1210_regmap_readable_ranges),
  1314. };
  1315. static const struct regmap_range ad2s1210_regmap_writeable_ranges[] = {
  1316. regmap_reg_range(AD2S1210_REG_LOS_THRD, AD2S1210_REG_LOT_LOW_THRD),
  1317. regmap_reg_range(AD2S1210_REG_EXCIT_FREQ, AD2S1210_REG_CONTROL),
  1318. regmap_reg_range(AD2S1210_REG_SOFT_RESET, AD2S1210_REG_SOFT_RESET),
  1319. regmap_reg_range(AD2S1210_REG_FAULT, AD2S1210_REG_FAULT),
  1320. };
  1321. static const struct regmap_access_table ad2s1210_regmap_wr_table = {
  1322. .yes_ranges = ad2s1210_regmap_writeable_ranges,
  1323. .n_yes_ranges = ARRAY_SIZE(ad2s1210_regmap_writeable_ranges),
  1324. };
  1325. static int ad2s1210_setup_regmap(struct ad2s1210_state *st)
  1326. {
  1327. struct device *dev = &st->sdev->dev;
  1328. const struct regmap_config config = {
  1329. .reg_bits = 8,
  1330. .val_bits = 8,
  1331. .disable_locking = true,
  1332. .reg_read = ad2s1210_regmap_reg_read,
  1333. .reg_write = ad2s1210_regmap_reg_write,
  1334. .rd_table = &ad2s1210_regmap_rd_table,
  1335. .wr_table = &ad2s1210_regmap_wr_table,
  1336. .can_sleep = true,
  1337. };
  1338. st->regmap = devm_regmap_init(dev, NULL, st, &config);
  1339. if (IS_ERR(st->regmap))
  1340. return dev_err_probe(dev, PTR_ERR(st->regmap),
  1341. "failed to allocate register map\n");
  1342. return 0;
  1343. }
  1344. static int ad2s1210_probe(struct spi_device *spi)
  1345. {
  1346. struct iio_dev *indio_dev;
  1347. struct ad2s1210_state *st;
  1348. int ret;
  1349. indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
  1350. if (!indio_dev)
  1351. return -ENOMEM;
  1352. st = iio_priv(indio_dev);
  1353. mutex_init(&st->lock);
  1354. st->sdev = spi;
  1355. ret = ad2s1210_setup_properties(st);
  1356. if (ret < 0)
  1357. return ret;
  1358. ret = ad2s1210_setup_clocks(st);
  1359. if (ret < 0)
  1360. return ret;
  1361. ret = ad2s1210_setup_gpios(st);
  1362. if (ret < 0)
  1363. return ret;
  1364. ret = ad2s1210_setup_regmap(st);
  1365. if (ret < 0)
  1366. return ret;
  1367. ret = ad2s1210_initial(st);
  1368. if (ret < 0)
  1369. return ret;
  1370. indio_dev->info = &ad2s1210_info;
  1371. indio_dev->modes = INDIO_DIRECT_MODE;
  1372. indio_dev->channels = ad2s1210_channels;
  1373. indio_dev->num_channels = ARRAY_SIZE(ad2s1210_channels);
  1374. indio_dev->name = spi_get_device_id(spi)->name;
  1375. ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev,
  1376. &iio_pollfunc_store_time,
  1377. &ad2s1210_trigger_handler, NULL);
  1378. if (ret < 0)
  1379. return dev_err_probe(&spi->dev, ret,
  1380. "iio triggered buffer setup failed\n");
  1381. return devm_iio_device_register(&spi->dev, indio_dev);
  1382. }
  1383. static const struct of_device_id ad2s1210_of_match[] = {
  1384. { .compatible = "adi,ad2s1210", },
  1385. { }
  1386. };
  1387. MODULE_DEVICE_TABLE(of, ad2s1210_of_match);
  1388. static const struct spi_device_id ad2s1210_id[] = {
  1389. { "ad2s1210" },
  1390. {}
  1391. };
  1392. MODULE_DEVICE_TABLE(spi, ad2s1210_id);
  1393. static struct spi_driver ad2s1210_driver = {
  1394. .driver = {
  1395. .name = "ad2s1210",
  1396. .of_match_table = ad2s1210_of_match,
  1397. },
  1398. .probe = ad2s1210_probe,
  1399. .id_table = ad2s1210_id,
  1400. };
  1401. module_spi_driver(ad2s1210_driver);
  1402. MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
  1403. MODULE_DESCRIPTION("Analog Devices AD2S1210 Resolver to Digital SPI driver");
  1404. MODULE_LICENSE("GPL v2");