adf4371.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Analog Devices ADF4371 SPI Wideband Synthesizer driver
  4. *
  5. * Copyright 2019 Analog Devices Inc.
  6. */
  7. #include "linux/dev_printk.h"
  8. #include <linux/bitfield.h>
  9. #include <linux/clk.h>
  10. #include <linux/device.h>
  11. #include <linux/err.h>
  12. #include <linux/gcd.h>
  13. #include <linux/kernel.h>
  14. #include <linux/module.h>
  15. #include <linux/regmap.h>
  16. #include <linux/sysfs.h>
  17. #include <linux/spi/spi.h>
  18. #include <linux/iio/iio.h>
  19. /* Registers address macro */
  20. #define ADF4371_REG(x) (x)
  21. /* ADF4371_REG0 */
  22. #define ADF4371_ADDR_ASC_MSK BIT(2)
  23. #define ADF4371_ADDR_ASC(x) FIELD_PREP(ADF4371_ADDR_ASC_MSK, x)
  24. #define ADF4371_ADDR_ASC_R_MSK BIT(5)
  25. #define ADF4371_ADDR_ASC_R(x) FIELD_PREP(ADF4371_ADDR_ASC_R_MSK, x)
  26. #define ADF4371_RESET_CMD 0x81
  27. /* ADF4371_REG17 */
  28. #define ADF4371_FRAC2WORD_L_MSK GENMASK(7, 1)
  29. #define ADF4371_FRAC2WORD_L(x) FIELD_PREP(ADF4371_FRAC2WORD_L_MSK, x)
  30. #define ADF4371_FRAC1WORD_MSK BIT(0)
  31. #define ADF4371_FRAC1WORD(x) FIELD_PREP(ADF4371_FRAC1WORD_MSK, x)
  32. /* ADF4371_REG18 */
  33. #define ADF4371_FRAC2WORD_H_MSK GENMASK(6, 0)
  34. #define ADF4371_FRAC2WORD_H(x) FIELD_PREP(ADF4371_FRAC2WORD_H_MSK, x)
  35. /* ADF4371_REG1A */
  36. #define ADF4371_MOD2WORD_MSK GENMASK(5, 0)
  37. #define ADF4371_MOD2WORD(x) FIELD_PREP(ADF4371_MOD2WORD_MSK, x)
  38. /* ADF4371_REG22 */
  39. #define ADF4371_REFIN_MODE_MASK BIT(6)
  40. #define ADF4371_REFIN_MODE(x) FIELD_PREP(ADF4371_REFIN_MODE_MASK, x)
  41. #define ADF4371_REF_DOUB_MASK BIT(5)
  42. #define ADF4371_REF_DOUB(x) FIELD_PREP(ADF4371_REF_DOUB_MASK, x)\
  43. /* ADF4371_REG24 */
  44. #define ADF4371_RF_DIV_SEL_MSK GENMASK(6, 4)
  45. #define ADF4371_RF_DIV_SEL(x) FIELD_PREP(ADF4371_RF_DIV_SEL_MSK, x)
  46. /* ADF4371_REG25 */
  47. #define ADF4371_MUTE_LD_MSK BIT(7)
  48. #define ADF4371_MUTE_LD(x) FIELD_PREP(ADF4371_MUTE_LD_MSK, x)
  49. /* ADF4371_REG32 */
  50. #define ADF4371_TIMEOUT_MSK GENMASK(1, 0)
  51. #define ADF4371_TIMEOUT(x) FIELD_PREP(ADF4371_TIMEOUT_MSK, x)
  52. /* ADF4371_REG34 */
  53. #define ADF4371_VCO_ALC_TOUT_MSK GENMASK(4, 0)
  54. #define ADF4371_VCO_ALC_TOUT(x) FIELD_PREP(ADF4371_VCO_ALC_TOUT_MSK, x)
  55. /* Specifications */
  56. #define ADF4371_MIN_VCO_FREQ 4000000000ULL /* 4000 MHz */
  57. #define ADF4371_MAX_VCO_FREQ 8000000000ULL /* 8000 MHz */
  58. #define ADF4371_MAX_OUT_RF8_FREQ ADF4371_MAX_VCO_FREQ /* Hz */
  59. #define ADF4371_MIN_OUT_RF8_FREQ (ADF4371_MIN_VCO_FREQ / 64) /* Hz */
  60. #define ADF4371_MAX_OUT_RF16_FREQ (ADF4371_MAX_VCO_FREQ * 2) /* Hz */
  61. #define ADF4371_MIN_OUT_RF16_FREQ (ADF4371_MIN_VCO_FREQ * 2) /* Hz */
  62. #define ADF4371_MAX_OUT_RF32_FREQ (ADF4371_MAX_VCO_FREQ * 4) /* Hz */
  63. #define ADF4371_MIN_OUT_RF32_FREQ (ADF4371_MIN_VCO_FREQ * 4) /* Hz */
  64. #define ADF4371_MAX_FREQ_PFD 250000000UL /* Hz */
  65. #define ADF4371_MAX_FREQ_REFIN 600000000UL /* Hz */
  66. #define ADF4371_MAX_FREQ_REFIN_SE 500000000UL /* Hz */
  67. #define ADF4371_MIN_CLKIN_DOUB_FREQ 10000000ULL /* Hz */
  68. #define ADF4371_MAX_CLKIN_DOUB_FREQ 125000000ULL /* Hz */
  69. /* MOD1 is a 24-bit primary modulus with fixed value of 2^25 */
  70. #define ADF4371_MODULUS1 33554432ULL
  71. /* MOD2 is the programmable, 14-bit auxiliary fractional modulus */
  72. #define ADF4371_MAX_MODULUS2 BIT(14)
  73. #define ADF4371_CHECK_RANGE(freq, range) \
  74. ((freq > ADF4371_MAX_ ## range) || (freq < ADF4371_MIN_ ## range))
  75. enum {
  76. ADF4371_FREQ,
  77. ADF4371_POWER_DOWN,
  78. ADF4371_CHANNEL_NAME
  79. };
  80. enum {
  81. ADF4371_CH_RF8,
  82. ADF4371_CH_RFAUX8,
  83. ADF4371_CH_RF16,
  84. ADF4371_CH_RF32
  85. };
  86. enum adf4371_variant {
  87. ADF4371,
  88. ADF4372
  89. };
  90. struct adf4371_pwrdown {
  91. unsigned int reg;
  92. unsigned int bit;
  93. };
  94. static const char * const adf4371_ch_names[] = {
  95. "RF8x", "RFAUX8x", "RF16x", "RF32x"
  96. };
  97. static const struct adf4371_pwrdown adf4371_pwrdown_ch[4] = {
  98. [ADF4371_CH_RF8] = { ADF4371_REG(0x25), 2 },
  99. [ADF4371_CH_RFAUX8] = { ADF4371_REG(0x72), 3 },
  100. [ADF4371_CH_RF16] = { ADF4371_REG(0x25), 3 },
  101. [ADF4371_CH_RF32] = { ADF4371_REG(0x25), 4 },
  102. };
  103. static const struct reg_sequence adf4371_reg_defaults[] = {
  104. { ADF4371_REG(0x0), 0x18 },
  105. { ADF4371_REG(0x12), 0x40 },
  106. { ADF4371_REG(0x1E), 0x48 },
  107. { ADF4371_REG(0x20), 0x14 },
  108. { ADF4371_REG(0x22), 0x00 },
  109. { ADF4371_REG(0x23), 0x00 },
  110. { ADF4371_REG(0x24), 0x80 },
  111. { ADF4371_REG(0x25), 0x07 },
  112. { ADF4371_REG(0x27), 0xC5 },
  113. { ADF4371_REG(0x28), 0x83 },
  114. { ADF4371_REG(0x2C), 0x44 },
  115. { ADF4371_REG(0x2D), 0x11 },
  116. { ADF4371_REG(0x2E), 0x12 },
  117. { ADF4371_REG(0x2F), 0x94 },
  118. { ADF4371_REG(0x32), 0x04 },
  119. { ADF4371_REG(0x35), 0xFA },
  120. { ADF4371_REG(0x36), 0x30 },
  121. { ADF4371_REG(0x39), 0x07 },
  122. { ADF4371_REG(0x3A), 0x55 },
  123. { ADF4371_REG(0x3E), 0x0C },
  124. { ADF4371_REG(0x3F), 0x80 },
  125. { ADF4371_REG(0x40), 0x50 },
  126. { ADF4371_REG(0x41), 0x28 },
  127. { ADF4371_REG(0x47), 0xC0 },
  128. { ADF4371_REG(0x52), 0xF4 },
  129. { ADF4371_REG(0x70), 0x03 },
  130. { ADF4371_REG(0x71), 0x60 },
  131. { ADF4371_REG(0x72), 0x32 },
  132. };
  133. static const struct regmap_config adf4371_regmap_config = {
  134. .reg_bits = 16,
  135. .val_bits = 8,
  136. .read_flag_mask = BIT(7),
  137. };
  138. struct adf4371_chip_info {
  139. const char *name;
  140. unsigned int num_channels;
  141. const struct iio_chan_spec *channels;
  142. };
  143. struct adf4371_state {
  144. struct spi_device *spi;
  145. struct regmap *regmap;
  146. /*
  147. * Lock for accessing device registers. Some operations require
  148. * multiple consecutive R/W operations, during which the device
  149. * shouldn't be interrupted. The buffers are also shared across
  150. * all operations so need to be protected on stand alone reads and
  151. * writes.
  152. */
  153. struct mutex lock;
  154. const struct adf4371_chip_info *chip_info;
  155. unsigned long clkin_freq;
  156. unsigned long fpfd;
  157. unsigned int integer;
  158. unsigned int fract1;
  159. unsigned int fract2;
  160. unsigned int mod2;
  161. unsigned int rf_div_sel;
  162. unsigned int ref_div_factor;
  163. bool ref_diff_en;
  164. u8 buf[10] __aligned(IIO_DMA_MINALIGN);
  165. };
  166. static unsigned long long adf4371_pll_fract_n_get_rate(struct adf4371_state *st,
  167. u32 channel)
  168. {
  169. unsigned long long val, tmp;
  170. unsigned int ref_div_sel;
  171. val = (((u64)st->integer * ADF4371_MODULUS1) + st->fract1) * st->fpfd;
  172. tmp = (u64)st->fract2 * st->fpfd;
  173. do_div(tmp, st->mod2);
  174. val += tmp + ADF4371_MODULUS1 / 2;
  175. if (channel == ADF4371_CH_RF8 || channel == ADF4371_CH_RFAUX8)
  176. ref_div_sel = st->rf_div_sel;
  177. else
  178. ref_div_sel = 0;
  179. do_div(val, ADF4371_MODULUS1 * (1 << ref_div_sel));
  180. if (channel == ADF4371_CH_RF16)
  181. val <<= 1;
  182. else if (channel == ADF4371_CH_RF32)
  183. val <<= 2;
  184. return val;
  185. }
  186. static void adf4371_pll_fract_n_compute(unsigned long long vco,
  187. unsigned long long pfd,
  188. unsigned int *integer,
  189. unsigned int *fract1,
  190. unsigned int *fract2,
  191. unsigned int *mod2)
  192. {
  193. unsigned long long tmp;
  194. u32 gcd_div;
  195. tmp = do_div(vco, pfd);
  196. tmp = tmp * ADF4371_MODULUS1;
  197. *fract2 = do_div(tmp, pfd);
  198. *integer = vco;
  199. *fract1 = tmp;
  200. *mod2 = pfd;
  201. while (*mod2 > ADF4371_MAX_MODULUS2) {
  202. *mod2 >>= 1;
  203. *fract2 >>= 1;
  204. }
  205. gcd_div = gcd(*fract2, *mod2);
  206. *mod2 /= gcd_div;
  207. *fract2 /= gcd_div;
  208. }
  209. static int adf4371_set_freq(struct adf4371_state *st, unsigned long long freq,
  210. unsigned int channel)
  211. {
  212. u32 cp_bleed;
  213. u8 int_mode = 0;
  214. int ret;
  215. switch (channel) {
  216. case ADF4371_CH_RF8:
  217. case ADF4371_CH_RFAUX8:
  218. if (ADF4371_CHECK_RANGE(freq, OUT_RF8_FREQ))
  219. return -EINVAL;
  220. st->rf_div_sel = 0;
  221. while (freq < ADF4371_MIN_VCO_FREQ) {
  222. freq <<= 1;
  223. st->rf_div_sel++;
  224. }
  225. break;
  226. case ADF4371_CH_RF16:
  227. /* ADF4371 RF16 8000...16000 MHz */
  228. if (ADF4371_CHECK_RANGE(freq, OUT_RF16_FREQ))
  229. return -EINVAL;
  230. freq >>= 1;
  231. break;
  232. case ADF4371_CH_RF32:
  233. /* ADF4371 RF32 16000...32000 MHz */
  234. if (ADF4371_CHECK_RANGE(freq, OUT_RF32_FREQ))
  235. return -EINVAL;
  236. freq >>= 2;
  237. break;
  238. default:
  239. return -EINVAL;
  240. }
  241. adf4371_pll_fract_n_compute(freq, st->fpfd, &st->integer, &st->fract1,
  242. &st->fract2, &st->mod2);
  243. st->buf[0] = st->integer >> 8;
  244. st->buf[1] = 0x40; /* REG12 default */
  245. st->buf[2] = 0x00;
  246. st->buf[3] = st->fract1 & 0xFF;
  247. st->buf[4] = st->fract1 >> 8;
  248. st->buf[5] = st->fract1 >> 16;
  249. st->buf[6] = ADF4371_FRAC2WORD_L(st->fract2 & 0x7F) |
  250. ADF4371_FRAC1WORD(st->fract1 >> 24);
  251. st->buf[7] = ADF4371_FRAC2WORD_H(st->fract2 >> 7);
  252. st->buf[8] = st->mod2 & 0xFF;
  253. st->buf[9] = ADF4371_MOD2WORD(st->mod2 >> 8);
  254. ret = regmap_bulk_write(st->regmap, ADF4371_REG(0x11), st->buf, 10);
  255. if (ret < 0)
  256. return ret;
  257. /*
  258. * The R counter allows the input reference frequency to be
  259. * divided down to produce the reference clock to the PFD
  260. */
  261. ret = regmap_write(st->regmap, ADF4371_REG(0x1F), st->ref_div_factor);
  262. if (ret < 0)
  263. return ret;
  264. ret = regmap_update_bits(st->regmap, ADF4371_REG(0x24),
  265. ADF4371_RF_DIV_SEL_MSK,
  266. ADF4371_RF_DIV_SEL(st->rf_div_sel));
  267. if (ret < 0)
  268. return ret;
  269. cp_bleed = DIV_ROUND_UP(400 * 1750, st->integer * 375);
  270. cp_bleed = clamp(cp_bleed, 1U, 255U);
  271. ret = regmap_write(st->regmap, ADF4371_REG(0x26), cp_bleed);
  272. if (ret < 0)
  273. return ret;
  274. /*
  275. * Set to 1 when in INT mode (when FRAC1 = FRAC2 = 0),
  276. * and set to 0 when in FRAC mode.
  277. */
  278. if (st->fract1 == 0 && st->fract2 == 0)
  279. int_mode = 0x01;
  280. ret = regmap_write(st->regmap, ADF4371_REG(0x2B), int_mode);
  281. if (ret < 0)
  282. return ret;
  283. return regmap_write(st->regmap, ADF4371_REG(0x10), st->integer & 0xFF);
  284. }
  285. static ssize_t adf4371_read(struct iio_dev *indio_dev,
  286. uintptr_t private,
  287. const struct iio_chan_spec *chan,
  288. char *buf)
  289. {
  290. struct adf4371_state *st = iio_priv(indio_dev);
  291. unsigned long long val = 0;
  292. unsigned int readval, reg, bit;
  293. int ret;
  294. switch ((u32)private) {
  295. case ADF4371_FREQ:
  296. val = adf4371_pll_fract_n_get_rate(st, chan->channel);
  297. ret = regmap_read(st->regmap, ADF4371_REG(0x7C), &readval);
  298. if (ret < 0)
  299. break;
  300. if (readval == 0x00) {
  301. dev_dbg(&st->spi->dev, "PLL un-locked\n");
  302. ret = -EBUSY;
  303. }
  304. break;
  305. case ADF4371_POWER_DOWN:
  306. reg = adf4371_pwrdown_ch[chan->channel].reg;
  307. bit = adf4371_pwrdown_ch[chan->channel].bit;
  308. ret = regmap_read(st->regmap, reg, &readval);
  309. if (ret < 0)
  310. break;
  311. val = !(readval & BIT(bit));
  312. break;
  313. case ADF4371_CHANNEL_NAME:
  314. return sprintf(buf, "%s\n", adf4371_ch_names[chan->channel]);
  315. default:
  316. ret = -EINVAL;
  317. val = 0;
  318. break;
  319. }
  320. return ret < 0 ? ret : sprintf(buf, "%llu\n", val);
  321. }
  322. static ssize_t adf4371_write(struct iio_dev *indio_dev,
  323. uintptr_t private,
  324. const struct iio_chan_spec *chan,
  325. const char *buf, size_t len)
  326. {
  327. struct adf4371_state *st = iio_priv(indio_dev);
  328. unsigned long long freq;
  329. bool power_down;
  330. unsigned int bit, readval, reg;
  331. int ret;
  332. mutex_lock(&st->lock);
  333. switch ((u32)private) {
  334. case ADF4371_FREQ:
  335. ret = kstrtoull(buf, 10, &freq);
  336. if (ret)
  337. break;
  338. ret = adf4371_set_freq(st, freq, chan->channel);
  339. break;
  340. case ADF4371_POWER_DOWN:
  341. ret = kstrtobool(buf, &power_down);
  342. if (ret)
  343. break;
  344. reg = adf4371_pwrdown_ch[chan->channel].reg;
  345. bit = adf4371_pwrdown_ch[chan->channel].bit;
  346. ret = regmap_read(st->regmap, reg, &readval);
  347. if (ret < 0)
  348. break;
  349. readval &= ~BIT(bit);
  350. readval |= (!power_down << bit);
  351. ret = regmap_write(st->regmap, reg, readval);
  352. break;
  353. default:
  354. ret = -EINVAL;
  355. break;
  356. }
  357. mutex_unlock(&st->lock);
  358. return ret ? ret : len;
  359. }
  360. #define _ADF4371_EXT_INFO(_name, _ident) { \
  361. .name = _name, \
  362. .read = adf4371_read, \
  363. .write = adf4371_write, \
  364. .private = _ident, \
  365. .shared = IIO_SEPARATE, \
  366. }
  367. static const struct iio_chan_spec_ext_info adf4371_ext_info[] = {
  368. /*
  369. * Ideally we use IIO_CHAN_INFO_FREQUENCY, but there are
  370. * values > 2^32 in order to support the entire frequency range
  371. * in Hz. Using scale is a bit ugly.
  372. */
  373. _ADF4371_EXT_INFO("frequency", ADF4371_FREQ),
  374. _ADF4371_EXT_INFO("powerdown", ADF4371_POWER_DOWN),
  375. _ADF4371_EXT_INFO("name", ADF4371_CHANNEL_NAME),
  376. { }
  377. };
  378. #define ADF4371_CHANNEL(index) { \
  379. .type = IIO_ALTVOLTAGE, \
  380. .output = 1, \
  381. .channel = index, \
  382. .ext_info = adf4371_ext_info, \
  383. .indexed = 1, \
  384. }
  385. static const struct iio_chan_spec adf4371_chan[] = {
  386. ADF4371_CHANNEL(ADF4371_CH_RF8),
  387. ADF4371_CHANNEL(ADF4371_CH_RFAUX8),
  388. ADF4371_CHANNEL(ADF4371_CH_RF16),
  389. ADF4371_CHANNEL(ADF4371_CH_RF32),
  390. };
  391. static const struct adf4371_chip_info adf4371_chip_info = {
  392. .name = "adf4371",
  393. .channels = adf4371_chan,
  394. .num_channels = 4,
  395. };
  396. static const struct adf4371_chip_info adf4372_chip_info = {
  397. .name = "adf4372",
  398. .channels = adf4371_chan,
  399. .num_channels = 3,
  400. };
  401. static int adf4371_reg_access(struct iio_dev *indio_dev,
  402. unsigned int reg,
  403. unsigned int writeval,
  404. unsigned int *readval)
  405. {
  406. struct adf4371_state *st = iio_priv(indio_dev);
  407. if (readval)
  408. return regmap_read(st->regmap, reg, readval);
  409. else
  410. return regmap_write(st->regmap, reg, writeval);
  411. }
  412. static const struct iio_info adf4371_info = {
  413. .debugfs_reg_access = &adf4371_reg_access,
  414. };
  415. static int adf4371_setup(struct adf4371_state *st)
  416. {
  417. unsigned int synth_timeout = 2, timeout = 1, vco_alc_timeout = 1;
  418. unsigned int vco_band_div, tmp, ref_doubler_en = 0;
  419. int ret;
  420. /* Perform a software reset */
  421. ret = regmap_write(st->regmap, ADF4371_REG(0x0), ADF4371_RESET_CMD);
  422. if (ret < 0)
  423. return ret;
  424. ret = regmap_multi_reg_write(st->regmap, adf4371_reg_defaults,
  425. ARRAY_SIZE(adf4371_reg_defaults));
  426. if (ret < 0)
  427. return ret;
  428. /* Mute to Lock Detect */
  429. if (device_property_read_bool(&st->spi->dev, "adi,mute-till-lock-en")) {
  430. ret = regmap_update_bits(st->regmap, ADF4371_REG(0x25),
  431. ADF4371_MUTE_LD_MSK,
  432. ADF4371_MUTE_LD(1));
  433. if (ret < 0)
  434. return ret;
  435. }
  436. /* Set address in ascending order, so the bulk_write() will work */
  437. ret = regmap_update_bits(st->regmap, ADF4371_REG(0x0),
  438. ADF4371_ADDR_ASC_MSK | ADF4371_ADDR_ASC_R_MSK,
  439. ADF4371_ADDR_ASC(1) | ADF4371_ADDR_ASC_R(1));
  440. if (ret < 0)
  441. return ret;
  442. if ((st->ref_diff_en && st->clkin_freq > ADF4371_MAX_FREQ_REFIN) ||
  443. (!st->ref_diff_en && st->clkin_freq > ADF4371_MAX_FREQ_REFIN_SE))
  444. return -EINVAL;
  445. if (st->clkin_freq < ADF4371_MAX_CLKIN_DOUB_FREQ &&
  446. st->clkin_freq > ADF4371_MIN_CLKIN_DOUB_FREQ)
  447. ref_doubler_en = 1;
  448. ret = regmap_update_bits(st->regmap, ADF4371_REG(0x22),
  449. ADF4371_REF_DOUB_MASK |
  450. ADF4371_REFIN_MODE_MASK,
  451. ADF4371_REF_DOUB(ref_doubler_en) |
  452. ADF4371_REFIN_MODE(st->ref_diff_en));
  453. if (ret < 0)
  454. return ret;
  455. /*
  456. * Calculate and maximize PFD frequency
  457. * fPFD = REFIN × ((1 + D)/(R × (1 + T)))
  458. * Where D is the REFIN doubler bit, T is the reference divide by 2,
  459. * R is the reference division factor
  460. * TODO: it is assumed D and T equal 0.
  461. */
  462. do {
  463. st->ref_div_factor++;
  464. st->fpfd = st->clkin_freq * (1 + ref_doubler_en) /
  465. st->ref_div_factor;
  466. } while (st->fpfd > ADF4371_MAX_FREQ_PFD);
  467. /* Calculate Timeouts */
  468. vco_band_div = DIV_ROUND_UP(st->fpfd, 2400000U);
  469. tmp = DIV_ROUND_CLOSEST(st->fpfd, 1000000U);
  470. do {
  471. timeout++;
  472. if (timeout > 1023) {
  473. timeout = 2;
  474. synth_timeout++;
  475. }
  476. } while (synth_timeout * 1024 + timeout <= 20 * tmp);
  477. do {
  478. vco_alc_timeout++;
  479. } while (vco_alc_timeout * 1024 - timeout <= 50 * tmp);
  480. st->buf[0] = vco_band_div;
  481. st->buf[1] = timeout & 0xFF;
  482. st->buf[2] = ADF4371_TIMEOUT(timeout >> 8) | 0x04;
  483. st->buf[3] = synth_timeout;
  484. st->buf[4] = ADF4371_VCO_ALC_TOUT(vco_alc_timeout);
  485. return regmap_bulk_write(st->regmap, ADF4371_REG(0x30), st->buf, 5);
  486. }
  487. static int adf4371_probe(struct spi_device *spi)
  488. {
  489. struct iio_dev *indio_dev;
  490. struct adf4371_state *st;
  491. struct regmap *regmap;
  492. struct clk *clkin;
  493. int ret;
  494. indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
  495. if (!indio_dev)
  496. return -ENOMEM;
  497. regmap = devm_regmap_init_spi(spi, &adf4371_regmap_config);
  498. if (IS_ERR(regmap))
  499. return dev_err_probe(&spi->dev, PTR_ERR(regmap),
  500. "Error initializing spi regmap\n");
  501. st = iio_priv(indio_dev);
  502. st->spi = spi;
  503. st->regmap = regmap;
  504. mutex_init(&st->lock);
  505. st->chip_info = spi_get_device_match_data(spi);
  506. if (!st->chip_info)
  507. return -ENODEV;
  508. indio_dev->name = st->chip_info->name;
  509. indio_dev->info = &adf4371_info;
  510. indio_dev->modes = INDIO_DIRECT_MODE;
  511. indio_dev->channels = st->chip_info->channels;
  512. indio_dev->num_channels = st->chip_info->num_channels;
  513. st->ref_diff_en = false;
  514. clkin = devm_clk_get_enabled(&spi->dev, "clkin");
  515. if (IS_ERR(clkin)) {
  516. clkin = devm_clk_get_enabled(&spi->dev, "clkin-diff");
  517. if (IS_ERR(clkin))
  518. return dev_err_probe(&spi->dev, PTR_ERR(clkin),
  519. "Failed to get clkin/clkin-diff\n");
  520. st->ref_diff_en = true;
  521. }
  522. st->clkin_freq = clk_get_rate(clkin);
  523. ret = adf4371_setup(st);
  524. if (ret < 0)
  525. return dev_err_probe(&spi->dev, ret, "ADF4371 setup failed\n");
  526. return devm_iio_device_register(&spi->dev, indio_dev);
  527. }
  528. static const struct spi_device_id adf4371_id_table[] = {
  529. { "adf4371", (kernel_ulong_t)&adf4371_chip_info },
  530. { "adf4372", (kernel_ulong_t)&adf4372_chip_info },
  531. { }
  532. };
  533. MODULE_DEVICE_TABLE(spi, adf4371_id_table);
  534. static const struct of_device_id adf4371_of_match[] = {
  535. { .compatible = "adi,adf4371", .data = &adf4371_chip_info },
  536. { .compatible = "adi,adf4372", .data = &adf4372_chip_info},
  537. { }
  538. };
  539. MODULE_DEVICE_TABLE(of, adf4371_of_match);
  540. static struct spi_driver adf4371_driver = {
  541. .driver = {
  542. .name = "adf4371",
  543. .of_match_table = adf4371_of_match,
  544. },
  545. .probe = adf4371_probe,
  546. .id_table = adf4371_id_table,
  547. };
  548. module_spi_driver(adf4371_driver);
  549. MODULE_AUTHOR("Stefan Popa <stefan.popa@analog.com>");
  550. MODULE_DESCRIPTION("Analog Devices ADF4371 SPI PLL");
  551. MODULE_LICENSE("GPL");