Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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