admv1013.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * ADMV1013 driver
  4. *
  5. * Copyright 2021 Analog Devices Inc.
  6. */
  7. #include <linux/bitfield.h>
  8. #include <linux/bits.h>
  9. #include <linux/clk.h>
  10. #include <linux/device.h>
  11. #include <linux/iio/iio.h>
  12. #include <linux/module.h>
  13. #include <linux/mod_devicetable.h>
  14. #include <linux/notifier.h>
  15. #include <linux/property.h>
  16. #include <linux/regulator/consumer.h>
  17. #include <linux/spi/spi.h>
  18. #include <linux/units.h>
  19. #include <asm/unaligned.h>
  20. /* ADMV1013 Register Map */
  21. #define ADMV1013_REG_SPI_CONTROL 0x00
  22. #define ADMV1013_REG_ALARM 0x01
  23. #define ADMV1013_REG_ALARM_MASKS 0x02
  24. #define ADMV1013_REG_ENABLE 0x03
  25. #define ADMV1013_REG_LO_AMP_I 0x05
  26. #define ADMV1013_REG_LO_AMP_Q 0x06
  27. #define ADMV1013_REG_OFFSET_ADJUST_I 0x07
  28. #define ADMV1013_REG_OFFSET_ADJUST_Q 0x08
  29. #define ADMV1013_REG_QUAD 0x09
  30. #define ADMV1013_REG_VVA_TEMP_COMP 0x0A
  31. /* ADMV1013_REG_SPI_CONTROL Map */
  32. #define ADMV1013_PARITY_EN_MSK BIT(15)
  33. #define ADMV1013_SPI_SOFT_RESET_MSK BIT(14)
  34. #define ADMV1013_CHIP_ID_MSK GENMASK(11, 4)
  35. #define ADMV1013_CHIP_ID 0xA
  36. #define ADMV1013_REVISION_ID_MSK GENMASK(3, 0)
  37. /* ADMV1013_REG_ALARM Map */
  38. #define ADMV1013_PARITY_ERROR_MSK BIT(15)
  39. #define ADMV1013_TOO_FEW_ERRORS_MSK BIT(14)
  40. #define ADMV1013_TOO_MANY_ERRORS_MSK BIT(13)
  41. #define ADMV1013_ADDRESS_RANGE_ERROR_MSK BIT(12)
  42. /* ADMV1013_REG_ENABLE Map */
  43. #define ADMV1013_VGA_PD_MSK BIT(15)
  44. #define ADMV1013_MIXER_PD_MSK BIT(14)
  45. #define ADMV1013_QUAD_PD_MSK GENMASK(13, 11)
  46. #define ADMV1013_BG_PD_MSK BIT(10)
  47. #define ADMV1013_MIXER_IF_EN_MSK BIT(7)
  48. #define ADMV1013_DET_EN_MSK BIT(5)
  49. /* ADMV1013_REG_LO_AMP Map */
  50. #define ADMV1013_LOAMP_PH_ADJ_FINE_MSK GENMASK(13, 7)
  51. #define ADMV1013_MIXER_VGATE_MSK GENMASK(6, 0)
  52. /* ADMV1013_REG_OFFSET_ADJUST Map */
  53. #define ADMV1013_MIXER_OFF_ADJ_P_MSK GENMASK(15, 9)
  54. #define ADMV1013_MIXER_OFF_ADJ_N_MSK GENMASK(8, 2)
  55. /* ADMV1013_REG_QUAD Map */
  56. #define ADMV1013_QUAD_SE_MODE_MSK GENMASK(9, 6)
  57. #define ADMV1013_QUAD_FILTERS_MSK GENMASK(3, 0)
  58. /* ADMV1013_REG_VVA_TEMP_COMP Map */
  59. #define ADMV1013_VVA_TEMP_COMP_MSK GENMASK(15, 0)
  60. /* ADMV1013 Miscellaneous Defines */
  61. #define ADMV1013_READ BIT(7)
  62. #define ADMV1013_REG_ADDR_READ_MSK GENMASK(6, 1)
  63. #define ADMV1013_REG_ADDR_WRITE_MSK GENMASK(22, 17)
  64. #define ADMV1013_REG_DATA_MSK GENMASK(16, 1)
  65. enum {
  66. ADMV1013_IQ_MODE,
  67. ADMV1013_IF_MODE
  68. };
  69. enum {
  70. ADMV1013_RFMOD_I_CALIBPHASE,
  71. ADMV1013_RFMOD_Q_CALIBPHASE,
  72. };
  73. enum {
  74. ADMV1013_SE_MODE_POS = 6,
  75. ADMV1013_SE_MODE_NEG = 9,
  76. ADMV1013_SE_MODE_DIFF = 12
  77. };
  78. struct admv1013_state {
  79. struct spi_device *spi;
  80. struct clk *clkin;
  81. /* Protect against concurrent accesses to the device and to data */
  82. struct mutex lock;
  83. struct regulator *reg;
  84. struct notifier_block nb;
  85. unsigned int input_mode;
  86. unsigned int quad_se_mode;
  87. bool det_en;
  88. u8 data[3] __aligned(IIO_DMA_MINALIGN);
  89. };
  90. static int __admv1013_spi_read(struct admv1013_state *st, unsigned int reg,
  91. unsigned int *val)
  92. {
  93. int ret;
  94. struct spi_transfer t = {0};
  95. st->data[0] = ADMV1013_READ | FIELD_PREP(ADMV1013_REG_ADDR_READ_MSK, reg);
  96. st->data[1] = 0x0;
  97. st->data[2] = 0x0;
  98. t.rx_buf = &st->data[0];
  99. t.tx_buf = &st->data[0];
  100. t.len = 3;
  101. ret = spi_sync_transfer(st->spi, &t, 1);
  102. if (ret)
  103. return ret;
  104. *val = FIELD_GET(ADMV1013_REG_DATA_MSK, get_unaligned_be24(&st->data[0]));
  105. return ret;
  106. }
  107. static int admv1013_spi_read(struct admv1013_state *st, unsigned int reg,
  108. unsigned int *val)
  109. {
  110. int ret;
  111. mutex_lock(&st->lock);
  112. ret = __admv1013_spi_read(st, reg, val);
  113. mutex_unlock(&st->lock);
  114. return ret;
  115. }
  116. static int __admv1013_spi_write(struct admv1013_state *st,
  117. unsigned int reg,
  118. unsigned int val)
  119. {
  120. put_unaligned_be24(FIELD_PREP(ADMV1013_REG_DATA_MSK, val) |
  121. FIELD_PREP(ADMV1013_REG_ADDR_WRITE_MSK, reg), &st->data[0]);
  122. return spi_write(st->spi, &st->data[0], 3);
  123. }
  124. static int admv1013_spi_write(struct admv1013_state *st, unsigned int reg,
  125. unsigned int val)
  126. {
  127. int ret;
  128. mutex_lock(&st->lock);
  129. ret = __admv1013_spi_write(st, reg, val);
  130. mutex_unlock(&st->lock);
  131. return ret;
  132. }
  133. static int __admv1013_spi_update_bits(struct admv1013_state *st, unsigned int reg,
  134. unsigned int mask, unsigned int val)
  135. {
  136. int ret;
  137. unsigned int data, temp;
  138. ret = __admv1013_spi_read(st, reg, &data);
  139. if (ret)
  140. return ret;
  141. temp = (data & ~mask) | (val & mask);
  142. return __admv1013_spi_write(st, reg, temp);
  143. }
  144. static int admv1013_spi_update_bits(struct admv1013_state *st, unsigned int reg,
  145. unsigned int mask, unsigned int val)
  146. {
  147. int ret;
  148. mutex_lock(&st->lock);
  149. ret = __admv1013_spi_update_bits(st, reg, mask, val);
  150. mutex_unlock(&st->lock);
  151. return ret;
  152. }
  153. static int admv1013_read_raw(struct iio_dev *indio_dev,
  154. struct iio_chan_spec const *chan,
  155. int *val, int *val2, long info)
  156. {
  157. struct admv1013_state *st = iio_priv(indio_dev);
  158. unsigned int data, addr;
  159. int ret;
  160. switch (info) {
  161. case IIO_CHAN_INFO_CALIBBIAS:
  162. switch (chan->channel) {
  163. case IIO_MOD_I:
  164. addr = ADMV1013_REG_OFFSET_ADJUST_I;
  165. break;
  166. case IIO_MOD_Q:
  167. addr = ADMV1013_REG_OFFSET_ADJUST_Q;
  168. break;
  169. default:
  170. return -EINVAL;
  171. }
  172. ret = admv1013_spi_read(st, addr, &data);
  173. if (ret)
  174. return ret;
  175. if (!chan->channel)
  176. *val = FIELD_GET(ADMV1013_MIXER_OFF_ADJ_P_MSK, data);
  177. else
  178. *val = FIELD_GET(ADMV1013_MIXER_OFF_ADJ_N_MSK, data);
  179. return IIO_VAL_INT;
  180. default:
  181. return -EINVAL;
  182. }
  183. }
  184. static int admv1013_write_raw(struct iio_dev *indio_dev,
  185. struct iio_chan_spec const *chan,
  186. int val, int val2, long info)
  187. {
  188. struct admv1013_state *st = iio_priv(indio_dev);
  189. unsigned int addr, data, msk;
  190. switch (info) {
  191. case IIO_CHAN_INFO_CALIBBIAS:
  192. switch (chan->channel2) {
  193. case IIO_MOD_I:
  194. addr = ADMV1013_REG_OFFSET_ADJUST_I;
  195. break;
  196. case IIO_MOD_Q:
  197. addr = ADMV1013_REG_OFFSET_ADJUST_Q;
  198. break;
  199. default:
  200. return -EINVAL;
  201. }
  202. if (!chan->channel) {
  203. msk = ADMV1013_MIXER_OFF_ADJ_P_MSK;
  204. data = FIELD_PREP(ADMV1013_MIXER_OFF_ADJ_P_MSK, val);
  205. } else {
  206. msk = ADMV1013_MIXER_OFF_ADJ_N_MSK;
  207. data = FIELD_PREP(ADMV1013_MIXER_OFF_ADJ_N_MSK, val);
  208. }
  209. return admv1013_spi_update_bits(st, addr, msk, data);
  210. default:
  211. return -EINVAL;
  212. }
  213. }
  214. static ssize_t admv1013_read(struct iio_dev *indio_dev,
  215. uintptr_t private,
  216. const struct iio_chan_spec *chan,
  217. char *buf)
  218. {
  219. struct admv1013_state *st = iio_priv(indio_dev);
  220. unsigned int data, addr;
  221. int ret;
  222. switch ((u32)private) {
  223. case ADMV1013_RFMOD_I_CALIBPHASE:
  224. addr = ADMV1013_REG_LO_AMP_I;
  225. break;
  226. case ADMV1013_RFMOD_Q_CALIBPHASE:
  227. addr = ADMV1013_REG_LO_AMP_Q;
  228. break;
  229. default:
  230. return -EINVAL;
  231. }
  232. ret = admv1013_spi_read(st, addr, &data);
  233. if (ret)
  234. return ret;
  235. data = FIELD_GET(ADMV1013_LOAMP_PH_ADJ_FINE_MSK, data);
  236. return sysfs_emit(buf, "%u\n", data);
  237. }
  238. static ssize_t admv1013_write(struct iio_dev *indio_dev,
  239. uintptr_t private,
  240. const struct iio_chan_spec *chan,
  241. const char *buf, size_t len)
  242. {
  243. struct admv1013_state *st = iio_priv(indio_dev);
  244. unsigned int data;
  245. int ret;
  246. ret = kstrtou32(buf, 10, &data);
  247. if (ret)
  248. return ret;
  249. data = FIELD_PREP(ADMV1013_LOAMP_PH_ADJ_FINE_MSK, data);
  250. switch ((u32)private) {
  251. case ADMV1013_RFMOD_I_CALIBPHASE:
  252. ret = admv1013_spi_update_bits(st, ADMV1013_REG_LO_AMP_I,
  253. ADMV1013_LOAMP_PH_ADJ_FINE_MSK,
  254. data);
  255. if (ret)
  256. return ret;
  257. break;
  258. case ADMV1013_RFMOD_Q_CALIBPHASE:
  259. ret = admv1013_spi_update_bits(st, ADMV1013_REG_LO_AMP_Q,
  260. ADMV1013_LOAMP_PH_ADJ_FINE_MSK,
  261. data);
  262. if (ret)
  263. return ret;
  264. break;
  265. default:
  266. return -EINVAL;
  267. }
  268. return ret ? ret : len;
  269. }
  270. static int admv1013_update_quad_filters(struct admv1013_state *st)
  271. {
  272. unsigned int filt_raw;
  273. u64 rate = clk_get_rate(st->clkin);
  274. if (rate >= (5400 * HZ_PER_MHZ) && rate <= (7000 * HZ_PER_MHZ))
  275. filt_raw = 15;
  276. else if (rate >= (5400 * HZ_PER_MHZ) && rate <= (8000 * HZ_PER_MHZ))
  277. filt_raw = 10;
  278. else if (rate >= (6600 * HZ_PER_MHZ) && rate <= (9200 * HZ_PER_MHZ))
  279. filt_raw = 5;
  280. else
  281. filt_raw = 0;
  282. return __admv1013_spi_update_bits(st, ADMV1013_REG_QUAD,
  283. ADMV1013_QUAD_FILTERS_MSK,
  284. FIELD_PREP(ADMV1013_QUAD_FILTERS_MSK, filt_raw));
  285. }
  286. static int admv1013_update_mixer_vgate(struct admv1013_state *st)
  287. {
  288. unsigned int mixer_vgate;
  289. int vcm;
  290. vcm = regulator_get_voltage(st->reg);
  291. if (vcm < 0)
  292. return vcm;
  293. if (vcm <= 1800000)
  294. mixer_vgate = (2389 * vcm / 1000000 + 8100) / 100;
  295. else if (vcm > 1800000 && vcm <= 2600000)
  296. mixer_vgate = (2375 * vcm / 1000000 + 125) / 100;
  297. else
  298. return -EINVAL;
  299. return __admv1013_spi_update_bits(st, ADMV1013_REG_LO_AMP_I,
  300. ADMV1013_MIXER_VGATE_MSK,
  301. FIELD_PREP(ADMV1013_MIXER_VGATE_MSK, mixer_vgate));
  302. }
  303. static int admv1013_reg_access(struct iio_dev *indio_dev,
  304. unsigned int reg,
  305. unsigned int write_val,
  306. unsigned int *read_val)
  307. {
  308. struct admv1013_state *st = iio_priv(indio_dev);
  309. if (read_val)
  310. return admv1013_spi_read(st, reg, read_val);
  311. else
  312. return admv1013_spi_write(st, reg, write_val);
  313. }
  314. static const struct iio_info admv1013_info = {
  315. .read_raw = admv1013_read_raw,
  316. .write_raw = admv1013_write_raw,
  317. .debugfs_reg_access = &admv1013_reg_access,
  318. };
  319. static int admv1013_freq_change(struct notifier_block *nb, unsigned long action, void *data)
  320. {
  321. struct admv1013_state *st = container_of(nb, struct admv1013_state, nb);
  322. int ret;
  323. if (action == POST_RATE_CHANGE) {
  324. mutex_lock(&st->lock);
  325. ret = notifier_from_errno(admv1013_update_quad_filters(st));
  326. mutex_unlock(&st->lock);
  327. return ret;
  328. }
  329. return NOTIFY_OK;
  330. }
  331. #define _ADMV1013_EXT_INFO(_name, _shared, _ident) { \
  332. .name = _name, \
  333. .read = admv1013_read, \
  334. .write = admv1013_write, \
  335. .private = _ident, \
  336. .shared = _shared, \
  337. }
  338. static const struct iio_chan_spec_ext_info admv1013_ext_info[] = {
  339. _ADMV1013_EXT_INFO("i_calibphase", IIO_SEPARATE, ADMV1013_RFMOD_I_CALIBPHASE),
  340. _ADMV1013_EXT_INFO("q_calibphase", IIO_SEPARATE, ADMV1013_RFMOD_Q_CALIBPHASE),
  341. { },
  342. };
  343. #define ADMV1013_CHAN_PHASE(_channel, _channel2, _admv1013_ext_info) { \
  344. .type = IIO_ALTVOLTAGE, \
  345. .output = 0, \
  346. .indexed = 1, \
  347. .channel2 = _channel2, \
  348. .channel = _channel, \
  349. .differential = 1, \
  350. .ext_info = _admv1013_ext_info, \
  351. }
  352. #define ADMV1013_CHAN_CALIB(_channel, rf_comp) { \
  353. .type = IIO_ALTVOLTAGE, \
  354. .output = 0, \
  355. .indexed = 1, \
  356. .channel = _channel, \
  357. .channel2 = IIO_MOD_##rf_comp, \
  358. .info_mask_separate = BIT(IIO_CHAN_INFO_CALIBBIAS), \
  359. }
  360. static const struct iio_chan_spec admv1013_channels[] = {
  361. ADMV1013_CHAN_PHASE(0, 1, admv1013_ext_info),
  362. ADMV1013_CHAN_CALIB(0, I),
  363. ADMV1013_CHAN_CALIB(0, Q),
  364. ADMV1013_CHAN_CALIB(1, I),
  365. ADMV1013_CHAN_CALIB(1, Q),
  366. };
  367. static int admv1013_init(struct admv1013_state *st)
  368. {
  369. int ret;
  370. unsigned int data;
  371. struct spi_device *spi = st->spi;
  372. /* Perform a software reset */
  373. ret = __admv1013_spi_update_bits(st, ADMV1013_REG_SPI_CONTROL,
  374. ADMV1013_SPI_SOFT_RESET_MSK,
  375. FIELD_PREP(ADMV1013_SPI_SOFT_RESET_MSK, 1));
  376. if (ret)
  377. return ret;
  378. ret = __admv1013_spi_update_bits(st, ADMV1013_REG_SPI_CONTROL,
  379. ADMV1013_SPI_SOFT_RESET_MSK,
  380. FIELD_PREP(ADMV1013_SPI_SOFT_RESET_MSK, 0));
  381. if (ret)
  382. return ret;
  383. ret = __admv1013_spi_read(st, ADMV1013_REG_SPI_CONTROL, &data);
  384. if (ret)
  385. return ret;
  386. data = FIELD_GET(ADMV1013_CHIP_ID_MSK, data);
  387. if (data != ADMV1013_CHIP_ID) {
  388. dev_err(&spi->dev, "Invalid Chip ID.\n");
  389. return -EINVAL;
  390. }
  391. ret = __admv1013_spi_write(st, ADMV1013_REG_VVA_TEMP_COMP, 0xE700);
  392. if (ret)
  393. return ret;
  394. data = FIELD_PREP(ADMV1013_QUAD_SE_MODE_MSK, st->quad_se_mode);
  395. ret = __admv1013_spi_update_bits(st, ADMV1013_REG_QUAD,
  396. ADMV1013_QUAD_SE_MODE_MSK, data);
  397. if (ret)
  398. return ret;
  399. ret = admv1013_update_mixer_vgate(st);
  400. if (ret)
  401. return ret;
  402. ret = admv1013_update_quad_filters(st);
  403. if (ret)
  404. return ret;
  405. return __admv1013_spi_update_bits(st, ADMV1013_REG_ENABLE,
  406. ADMV1013_DET_EN_MSK |
  407. ADMV1013_MIXER_IF_EN_MSK,
  408. st->det_en |
  409. st->input_mode);
  410. }
  411. static void admv1013_clk_disable(void *data)
  412. {
  413. clk_disable_unprepare(data);
  414. }
  415. static void admv1013_reg_disable(void *data)
  416. {
  417. regulator_disable(data);
  418. }
  419. static void admv1013_powerdown(void *data)
  420. {
  421. unsigned int enable_reg, enable_reg_msk;
  422. /* Disable all components in the Enable Register */
  423. enable_reg_msk = ADMV1013_VGA_PD_MSK |
  424. ADMV1013_MIXER_PD_MSK |
  425. ADMV1013_QUAD_PD_MSK |
  426. ADMV1013_BG_PD_MSK |
  427. ADMV1013_MIXER_IF_EN_MSK |
  428. ADMV1013_DET_EN_MSK;
  429. enable_reg = FIELD_PREP(ADMV1013_VGA_PD_MSK, 1) |
  430. FIELD_PREP(ADMV1013_MIXER_PD_MSK, 1) |
  431. FIELD_PREP(ADMV1013_QUAD_PD_MSK, 7) |
  432. FIELD_PREP(ADMV1013_BG_PD_MSK, 1) |
  433. FIELD_PREP(ADMV1013_MIXER_IF_EN_MSK, 0) |
  434. FIELD_PREP(ADMV1013_DET_EN_MSK, 0);
  435. admv1013_spi_update_bits(data, ADMV1013_REG_ENABLE, enable_reg_msk, enable_reg);
  436. }
  437. static int admv1013_properties_parse(struct admv1013_state *st)
  438. {
  439. int ret;
  440. const char *str;
  441. struct spi_device *spi = st->spi;
  442. st->det_en = device_property_read_bool(&spi->dev, "adi,detector-enable");
  443. ret = device_property_read_string(&spi->dev, "adi,input-mode", &str);
  444. if (ret)
  445. st->input_mode = ADMV1013_IQ_MODE;
  446. if (!strcmp(str, "iq"))
  447. st->input_mode = ADMV1013_IQ_MODE;
  448. else if (!strcmp(str, "if"))
  449. st->input_mode = ADMV1013_IF_MODE;
  450. else
  451. return -EINVAL;
  452. ret = device_property_read_string(&spi->dev, "adi,quad-se-mode", &str);
  453. if (ret)
  454. st->quad_se_mode = ADMV1013_SE_MODE_DIFF;
  455. if (!strcmp(str, "diff"))
  456. st->quad_se_mode = ADMV1013_SE_MODE_DIFF;
  457. else if (!strcmp(str, "se-pos"))
  458. st->quad_se_mode = ADMV1013_SE_MODE_POS;
  459. else if (!strcmp(str, "se-neg"))
  460. st->quad_se_mode = ADMV1013_SE_MODE_NEG;
  461. else
  462. return -EINVAL;
  463. st->reg = devm_regulator_get(&spi->dev, "vcm");
  464. if (IS_ERR(st->reg))
  465. return dev_err_probe(&spi->dev, PTR_ERR(st->reg),
  466. "failed to get the common-mode voltage\n");
  467. st->clkin = devm_clk_get(&spi->dev, "lo_in");
  468. if (IS_ERR(st->clkin))
  469. return dev_err_probe(&spi->dev, PTR_ERR(st->clkin),
  470. "failed to get the LO input clock\n");
  471. return 0;
  472. }
  473. static int admv1013_probe(struct spi_device *spi)
  474. {
  475. struct iio_dev *indio_dev;
  476. struct admv1013_state *st;
  477. int ret;
  478. indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
  479. if (!indio_dev)
  480. return -ENOMEM;
  481. st = iio_priv(indio_dev);
  482. indio_dev->info = &admv1013_info;
  483. indio_dev->name = "admv1013";
  484. indio_dev->channels = admv1013_channels;
  485. indio_dev->num_channels = ARRAY_SIZE(admv1013_channels);
  486. st->spi = spi;
  487. ret = admv1013_properties_parse(st);
  488. if (ret)
  489. return ret;
  490. ret = regulator_enable(st->reg);
  491. if (ret) {
  492. dev_err(&spi->dev, "Failed to enable specified Common-Mode Voltage!\n");
  493. return ret;
  494. }
  495. ret = devm_add_action_or_reset(&spi->dev, admv1013_reg_disable,
  496. st->reg);
  497. if (ret)
  498. return ret;
  499. ret = clk_prepare_enable(st->clkin);
  500. if (ret)
  501. return ret;
  502. ret = devm_add_action_or_reset(&spi->dev, admv1013_clk_disable, st->clkin);
  503. if (ret)
  504. return ret;
  505. st->nb.notifier_call = admv1013_freq_change;
  506. ret = devm_clk_notifier_register(&spi->dev, st->clkin, &st->nb);
  507. if (ret)
  508. return ret;
  509. mutex_init(&st->lock);
  510. ret = admv1013_init(st);
  511. if (ret) {
  512. dev_err(&spi->dev, "admv1013 init failed\n");
  513. return ret;
  514. }
  515. ret = devm_add_action_or_reset(&spi->dev, admv1013_powerdown, st);
  516. if (ret)
  517. return ret;
  518. return devm_iio_device_register(&spi->dev, indio_dev);
  519. }
  520. static const struct spi_device_id admv1013_id[] = {
  521. { "admv1013", 0 },
  522. {}
  523. };
  524. MODULE_DEVICE_TABLE(spi, admv1013_id);
  525. static const struct of_device_id admv1013_of_match[] = {
  526. { .compatible = "adi,admv1013" },
  527. {},
  528. };
  529. MODULE_DEVICE_TABLE(of, admv1013_of_match);
  530. static struct spi_driver admv1013_driver = {
  531. .driver = {
  532. .name = "admv1013",
  533. .of_match_table = admv1013_of_match,
  534. },
  535. .probe = admv1013_probe,
  536. .id_table = admv1013_id,
  537. };
  538. module_spi_driver(admv1013_driver);
  539. MODULE_AUTHOR("Antoniu Miclaus <[email protected]");
  540. MODULE_DESCRIPTION("Analog Devices ADMV1013");
  541. MODULE_LICENSE("GPL v2");