cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

adf4371.c (16161B)


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