0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/device.h>
0009 #include <linux/kernel.h>
0010 #include <linux/slab.h>
0011 #include <linux/sysfs.h>
0012 #include <linux/spi/spi.h>
0013 #include <linux/regulator/consumer.h>
0014 #include <linux/gpio/consumer.h>
0015 #include <linux/err.h>
0016 #include <linux/module.h>
0017 #include <linux/delay.h>
0018
0019 #include <linux/iio/iio.h>
0020 #include <linux/iio/sysfs.h>
0021 #include <linux/iio/frequency/ad9523.h>
0022
0023 #define AD9523_READ (1 << 15)
0024 #define AD9523_WRITE (0 << 15)
0025 #define AD9523_CNT(x) (((x) - 1) << 13)
0026 #define AD9523_ADDR(x) ((x) & 0xFFF)
0027
0028 #define AD9523_R1B (1 << 16)
0029 #define AD9523_R2B (2 << 16)
0030 #define AD9523_R3B (3 << 16)
0031 #define AD9523_TRANSF_LEN(x) ((x) >> 16)
0032
0033 #define AD9523_SERIAL_PORT_CONFIG (AD9523_R1B | 0x0)
0034 #define AD9523_VERSION_REGISTER (AD9523_R1B | 0x2)
0035 #define AD9523_PART_REGISTER (AD9523_R1B | 0x3)
0036 #define AD9523_READBACK_CTRL (AD9523_R1B | 0x4)
0037
0038 #define AD9523_EEPROM_CUSTOMER_VERSION_ID (AD9523_R2B | 0x6)
0039
0040 #define AD9523_PLL1_REF_A_DIVIDER (AD9523_R2B | 0x11)
0041 #define AD9523_PLL1_REF_B_DIVIDER (AD9523_R2B | 0x13)
0042 #define AD9523_PLL1_REF_TEST_DIVIDER (AD9523_R1B | 0x14)
0043 #define AD9523_PLL1_FEEDBACK_DIVIDER (AD9523_R2B | 0x17)
0044 #define AD9523_PLL1_CHARGE_PUMP_CTRL (AD9523_R2B | 0x19)
0045 #define AD9523_PLL1_INPUT_RECEIVERS_CTRL (AD9523_R1B | 0x1A)
0046 #define AD9523_PLL1_REF_CTRL (AD9523_R1B | 0x1B)
0047 #define AD9523_PLL1_MISC_CTRL (AD9523_R1B | 0x1C)
0048 #define AD9523_PLL1_LOOP_FILTER_CTRL (AD9523_R1B | 0x1D)
0049
0050 #define AD9523_PLL2_CHARGE_PUMP (AD9523_R1B | 0xF0)
0051 #define AD9523_PLL2_FEEDBACK_DIVIDER_AB (AD9523_R1B | 0xF1)
0052 #define AD9523_PLL2_CTRL (AD9523_R1B | 0xF2)
0053 #define AD9523_PLL2_VCO_CTRL (AD9523_R1B | 0xF3)
0054 #define AD9523_PLL2_VCO_DIVIDER (AD9523_R1B | 0xF4)
0055 #define AD9523_PLL2_LOOP_FILTER_CTRL (AD9523_R2B | 0xF6)
0056 #define AD9523_PLL2_R2_DIVIDER (AD9523_R1B | 0xF7)
0057
0058 #define AD9523_CHANNEL_CLOCK_DIST(ch) (AD9523_R3B | (0x192 + 3 * ch))
0059
0060 #define AD9523_PLL1_OUTPUT_CTRL (AD9523_R1B | 0x1BA)
0061 #define AD9523_PLL1_OUTPUT_CHANNEL_CTRL (AD9523_R1B | 0x1BB)
0062
0063 #define AD9523_READBACK_0 (AD9523_R1B | 0x22C)
0064 #define AD9523_READBACK_1 (AD9523_R1B | 0x22D)
0065
0066 #define AD9523_STATUS_SIGNALS (AD9523_R3B | 0x232)
0067 #define AD9523_POWER_DOWN_CTRL (AD9523_R1B | 0x233)
0068 #define AD9523_IO_UPDATE (AD9523_R1B | 0x234)
0069
0070 #define AD9523_EEPROM_DATA_XFER_STATUS (AD9523_R1B | 0xB00)
0071 #define AD9523_EEPROM_ERROR_READBACK (AD9523_R1B | 0xB01)
0072 #define AD9523_EEPROM_CTRL1 (AD9523_R1B | 0xB02)
0073 #define AD9523_EEPROM_CTRL2 (AD9523_R1B | 0xB03)
0074
0075
0076
0077 #define AD9523_SER_CONF_SDO_ACTIVE (1 << 7)
0078 #define AD9523_SER_CONF_SOFT_RESET (1 << 5)
0079
0080
0081 #define AD9523_READBACK_CTRL_READ_BUFFERED (1 << 0)
0082
0083
0084 #define AD9523_PLL1_CHARGE_PUMP_CURRENT_nA(x) (((x) / 500) & 0x7F)
0085 #define AD9523_PLL1_CHARGE_PUMP_TRISTATE (1 << 7)
0086 #define AD9523_PLL1_CHARGE_PUMP_MODE_NORMAL (3 << 8)
0087 #define AD9523_PLL1_CHARGE_PUMP_MODE_PUMP_DOWN (2 << 8)
0088 #define AD9523_PLL1_CHARGE_PUMP_MODE_PUMP_UP (1 << 8)
0089 #define AD9523_PLL1_CHARGE_PUMP_MODE_TRISTATE (0 << 8)
0090 #define AD9523_PLL1_BACKLASH_PW_MIN (0 << 10)
0091 #define AD9523_PLL1_BACKLASH_PW_LOW (1 << 10)
0092 #define AD9523_PLL1_BACKLASH_PW_HIGH (2 << 10)
0093 #define AD9523_PLL1_BACKLASH_PW_MAX (3 << 10)
0094
0095
0096 #define AD9523_PLL1_REF_TEST_RCV_EN (1 << 7)
0097 #define AD9523_PLL1_REFB_DIFF_RCV_EN (1 << 6)
0098 #define AD9523_PLL1_REFA_DIFF_RCV_EN (1 << 5)
0099 #define AD9523_PLL1_REFB_RCV_EN (1 << 4)
0100 #define AD9523_PLL1_REFA_RCV_EN (1 << 3)
0101 #define AD9523_PLL1_REFA_REFB_PWR_CTRL_EN (1 << 2)
0102 #define AD9523_PLL1_OSC_IN_CMOS_NEG_INP_EN (1 << 1)
0103 #define AD9523_PLL1_OSC_IN_DIFF_EN (1 << 0)
0104
0105
0106 #define AD9523_PLL1_BYPASS_REF_TEST_DIV_EN (1 << 7)
0107 #define AD9523_PLL1_BYPASS_FEEDBACK_DIV_EN (1 << 6)
0108 #define AD9523_PLL1_ZERO_DELAY_MODE_INT (1 << 5)
0109 #define AD9523_PLL1_ZERO_DELAY_MODE_EXT (0 << 5)
0110 #define AD9523_PLL1_OSC_IN_PLL_FEEDBACK_EN (1 << 4)
0111 #define AD9523_PLL1_ZD_IN_CMOS_NEG_INP_EN (1 << 3)
0112 #define AD9523_PLL1_ZD_IN_DIFF_EN (1 << 2)
0113 #define AD9523_PLL1_REFB_CMOS_NEG_INP_EN (1 << 1)
0114 #define AD9523_PLL1_REFA_CMOS_NEG_INP_EN (1 << 0)
0115
0116
0117 #define AD9523_PLL1_REFB_INDEP_DIV_CTRL_EN (1 << 7)
0118 #define AD9523_PLL1_OSC_CTRL_FAIL_VCC_BY2_EN (1 << 6)
0119 #define AD9523_PLL1_REF_MODE(x) ((x) << 2)
0120 #define AD9523_PLL1_BYPASS_REFB_DIV (1 << 1)
0121 #define AD9523_PLL1_BYPASS_REFA_DIV (1 << 0)
0122
0123
0124 #define AD9523_PLL1_LOOP_FILTER_RZERO(x) ((x) & 0xF)
0125
0126
0127 #define AD9523_PLL2_CHARGE_PUMP_CURRENT_nA(x) ((x) / 3500)
0128
0129
0130 #define AD9523_PLL2_FB_NDIV_A_CNT(x) (((x) & 0x3) << 6)
0131 #define AD9523_PLL2_FB_NDIV_B_CNT(x) (((x) & 0x3F) << 0)
0132 #define AD9523_PLL2_FB_NDIV(a, b) (4 * (b) + (a))
0133
0134
0135 #define AD9523_PLL2_CHARGE_PUMP_MODE_NORMAL (3 << 0)
0136 #define AD9523_PLL2_CHARGE_PUMP_MODE_PUMP_DOWN (2 << 0)
0137 #define AD9523_PLL2_CHARGE_PUMP_MODE_PUMP_UP (1 << 0)
0138 #define AD9523_PLL2_CHARGE_PUMP_MODE_TRISTATE (0 << 0)
0139 #define AD9523_PLL2_BACKLASH_PW_MIN (0 << 2)
0140 #define AD9523_PLL2_BACKLASH_PW_LOW (1 << 2)
0141 #define AD9523_PLL2_BACKLASH_PW_HIGH (2 << 2)
0142 #define AD9523_PLL2_BACKLASH_PW_MAX (3 << 1)
0143 #define AD9523_PLL2_BACKLASH_CTRL_EN (1 << 4)
0144 #define AD9523_PLL2_FREQ_DOUBLER_EN (1 << 5)
0145 #define AD9523_PLL2_LOCK_DETECT_PWR_DOWN_EN (1 << 7)
0146
0147
0148 #define AD9523_PLL2_VCO_CALIBRATE (1 << 1)
0149 #define AD9523_PLL2_FORCE_VCO_MIDSCALE (1 << 2)
0150 #define AD9523_PLL2_FORCE_REFERENCE_VALID (1 << 3)
0151 #define AD9523_PLL2_FORCE_RELEASE_SYNC (1 << 4)
0152
0153
0154 #define AD9523_PLL2_VCO_DIV_M1(x) ((((x) - 3) & 0x3) << 0)
0155 #define AD9523_PLL2_VCO_DIV_M2(x) ((((x) - 3) & 0x3) << 4)
0156 #define AD9523_PLL2_VCO_DIV_M1_PWR_DOWN_EN (1 << 2)
0157 #define AD9523_PLL2_VCO_DIV_M2_PWR_DOWN_EN (1 << 6)
0158
0159
0160 #define AD9523_PLL2_LOOP_FILTER_CPOLE1(x) (((x) & 0x7) << 0)
0161 #define AD9523_PLL2_LOOP_FILTER_RZERO(x) (((x) & 0x7) << 3)
0162 #define AD9523_PLL2_LOOP_FILTER_RPOLE2(x) (((x) & 0x7) << 6)
0163 #define AD9523_PLL2_LOOP_FILTER_RZERO_BYPASS_EN (1 << 8)
0164
0165
0166 #define AD9523_PLL2_R2_DIVIDER_VAL(x) (((x) & 0x1F) << 0)
0167
0168
0169 #define AD9523_CLK_DIST_DIV_PHASE(x) (((x) & 0x3F) << 18)
0170 #define AD9523_CLK_DIST_DIV_PHASE_REV(x) ((ret >> 18) & 0x3F)
0171 #define AD9523_CLK_DIST_DIV(x) ((((x) - 1) & 0x3FF) << 8)
0172 #define AD9523_CLK_DIST_DIV_REV(x) (((ret >> 8) & 0x3FF) + 1)
0173 #define AD9523_CLK_DIST_INV_DIV_OUTPUT_EN (1 << 7)
0174 #define AD9523_CLK_DIST_IGNORE_SYNC_EN (1 << 6)
0175 #define AD9523_CLK_DIST_PWR_DOWN_EN (1 << 5)
0176 #define AD9523_CLK_DIST_LOW_PWR_MODE_EN (1 << 4)
0177 #define AD9523_CLK_DIST_DRIVER_MODE(x) (((x) & 0xF) << 0)
0178
0179
0180 #define AD9523_PLL1_OUTP_CTRL_VCO_DIV_SEL_CH6_M2 (1 << 7)
0181 #define AD9523_PLL1_OUTP_CTRL_VCO_DIV_SEL_CH5_M2 (1 << 6)
0182 #define AD9523_PLL1_OUTP_CTRL_VCO_DIV_SEL_CH4_M2 (1 << 5)
0183 #define AD9523_PLL1_OUTP_CTRL_CMOS_DRV_WEAK (1 << 4)
0184 #define AD9523_PLL1_OUTP_CTRL_OUTPUT_DIV_1 (0 << 0)
0185 #define AD9523_PLL1_OUTP_CTRL_OUTPUT_DIV_2 (1 << 0)
0186 #define AD9523_PLL1_OUTP_CTRL_OUTPUT_DIV_4 (2 << 0)
0187 #define AD9523_PLL1_OUTP_CTRL_OUTPUT_DIV_8 (4 << 0)
0188 #define AD9523_PLL1_OUTP_CTRL_OUTPUT_DIV_16 (8 << 0)
0189
0190
0191 #define AD9523_PLL1_OUTP_CH_CTRL_OUTPUT_PWR_DOWN_EN (1 << 7)
0192 #define AD9523_PLL1_OUTP_CH_CTRL_VCO_DIV_SEL_CH9_M2 (1 << 6)
0193 #define AD9523_PLL1_OUTP_CH_CTRL_VCO_DIV_SEL_CH8_M2 (1 << 5)
0194 #define AD9523_PLL1_OUTP_CH_CTRL_VCO_DIV_SEL_CH7_M2 (1 << 4)
0195 #define AD9523_PLL1_OUTP_CH_CTRL_VCXO_SRC_SEL_CH3 (1 << 3)
0196 #define AD9523_PLL1_OUTP_CH_CTRL_VCXO_SRC_SEL_CH2 (1 << 2)
0197 #define AD9523_PLL1_OUTP_CH_CTRL_VCXO_SRC_SEL_CH1 (1 << 1)
0198 #define AD9523_PLL1_OUTP_CH_CTRL_VCXO_SRC_SEL_CH0 (1 << 0)
0199
0200
0201 #define AD9523_READBACK_0_STAT_PLL2_REF_CLK (1 << 7)
0202 #define AD9523_READBACK_0_STAT_PLL2_FB_CLK (1 << 6)
0203 #define AD9523_READBACK_0_STAT_VCXO (1 << 5)
0204 #define AD9523_READBACK_0_STAT_REF_TEST (1 << 4)
0205 #define AD9523_READBACK_0_STAT_REFB (1 << 3)
0206 #define AD9523_READBACK_0_STAT_REFA (1 << 2)
0207 #define AD9523_READBACK_0_STAT_PLL2_LD (1 << 1)
0208 #define AD9523_READBACK_0_STAT_PLL1_LD (1 << 0)
0209
0210
0211 #define AD9523_READBACK_1_HOLDOVER_ACTIVE (1 << 3)
0212 #define AD9523_READBACK_1_AUTOMODE_SEL_REFB (1 << 2)
0213 #define AD9523_READBACK_1_VCO_CALIB_IN_PROGRESS (1 << 0)
0214
0215
0216 #define AD9523_STATUS_SIGNALS_SYNC_MAN_CTRL (1 << 16)
0217 #define AD9523_STATUS_MONITOR_01_PLL12_LOCKED (0x302)
0218
0219 #define AD9523_POWER_DOWN_CTRL_PLL1_PWR_DOWN (1 << 2)
0220 #define AD9523_POWER_DOWN_CTRL_PLL2_PWR_DOWN (1 << 1)
0221 #define AD9523_POWER_DOWN_CTRL_DIST_PWR_DOWN (1 << 0)
0222
0223
0224 #define AD9523_IO_UPDATE_EN (1 << 0)
0225
0226
0227 #define AD9523_EEPROM_DATA_XFER_IN_PROGRESS (1 << 0)
0228
0229
0230 #define AD9523_EEPROM_ERROR_READBACK_FAIL (1 << 0)
0231
0232
0233 #define AD9523_EEPROM_CTRL1_SOFT_EEPROM (1 << 1)
0234 #define AD9523_EEPROM_CTRL1_EEPROM_WRITE_PROT_DIS (1 << 0)
0235
0236
0237 #define AD9523_EEPROM_CTRL2_REG2EEPROM (1 << 0)
0238
0239 #define AD9523_NUM_CHAN 14
0240 #define AD9523_NUM_CHAN_ALT_CLK_SRC 10
0241
0242
0243 #define AD_IFE(_pde, _a, _b) ((pdata->_pde) ? _a : _b)
0244 #define AD_IF(_pde, _a) AD_IFE(_pde, _a, 0)
0245
0246 enum {
0247 AD9523_STAT_PLL1_LD,
0248 AD9523_STAT_PLL2_LD,
0249 AD9523_STAT_REFA,
0250 AD9523_STAT_REFB,
0251 AD9523_STAT_REF_TEST,
0252 AD9523_STAT_VCXO,
0253 AD9523_STAT_PLL2_FB_CLK,
0254 AD9523_STAT_PLL2_REF_CLK,
0255 AD9523_SYNC,
0256 AD9523_EEPROM,
0257 };
0258
0259 enum {
0260 AD9523_VCO1,
0261 AD9523_VCO2,
0262 AD9523_VCXO,
0263 AD9523_NUM_CLK_SRC,
0264 };
0265
0266 struct ad9523_state {
0267 struct spi_device *spi;
0268 struct regulator *reg;
0269 struct ad9523_platform_data *pdata;
0270 struct iio_chan_spec ad9523_channels[AD9523_NUM_CHAN];
0271 struct gpio_desc *pwrdown_gpio;
0272 struct gpio_desc *reset_gpio;
0273 struct gpio_desc *sync_gpio;
0274
0275 unsigned long vcxo_freq;
0276 unsigned long vco_freq;
0277 unsigned long vco_out_freq[AD9523_NUM_CLK_SRC];
0278 unsigned char vco_out_map[AD9523_NUM_CHAN_ALT_CLK_SRC];
0279
0280
0281
0282
0283
0284
0285
0286
0287 struct mutex lock;
0288
0289
0290
0291
0292
0293 union {
0294 __be32 d32;
0295 u8 d8[4];
0296 } data[2] __aligned(IIO_DMA_MINALIGN);
0297 };
0298
0299 static int ad9523_read(struct iio_dev *indio_dev, unsigned int addr)
0300 {
0301 struct ad9523_state *st = iio_priv(indio_dev);
0302 int ret;
0303
0304
0305
0306
0307
0308
0309 struct spi_transfer t[] = {
0310 {
0311 .tx_buf = &st->data[0].d8[2],
0312 .len = 2,
0313 }, {
0314 .rx_buf = &st->data[1].d8[4 - AD9523_TRANSF_LEN(addr)],
0315 .len = AD9523_TRANSF_LEN(addr),
0316 },
0317 };
0318
0319 st->data[0].d32 = cpu_to_be32(AD9523_READ |
0320 AD9523_CNT(AD9523_TRANSF_LEN(addr)) |
0321 AD9523_ADDR(addr));
0322
0323 ret = spi_sync_transfer(st->spi, t, ARRAY_SIZE(t));
0324 if (ret < 0)
0325 dev_err(&indio_dev->dev, "read failed (%d)", ret);
0326 else
0327 ret = be32_to_cpu(st->data[1].d32) & (0xFFFFFF >>
0328 (8 * (3 - AD9523_TRANSF_LEN(addr))));
0329
0330 return ret;
0331 };
0332
0333 static int ad9523_write(struct iio_dev *indio_dev,
0334 unsigned int addr, unsigned int val)
0335 {
0336 struct ad9523_state *st = iio_priv(indio_dev);
0337 int ret;
0338 struct spi_transfer t[] = {
0339 {
0340 .tx_buf = &st->data[0].d8[2],
0341 .len = 2,
0342 }, {
0343 .tx_buf = &st->data[1].d8[4 - AD9523_TRANSF_LEN(addr)],
0344 .len = AD9523_TRANSF_LEN(addr),
0345 },
0346 };
0347
0348 st->data[0].d32 = cpu_to_be32(AD9523_WRITE |
0349 AD9523_CNT(AD9523_TRANSF_LEN(addr)) |
0350 AD9523_ADDR(addr));
0351 st->data[1].d32 = cpu_to_be32(val);
0352
0353 ret = spi_sync_transfer(st->spi, t, ARRAY_SIZE(t));
0354
0355 if (ret < 0)
0356 dev_err(&indio_dev->dev, "write failed (%d)", ret);
0357
0358 return ret;
0359 }
0360
0361 static int ad9523_io_update(struct iio_dev *indio_dev)
0362 {
0363 return ad9523_write(indio_dev, AD9523_IO_UPDATE, AD9523_IO_UPDATE_EN);
0364 }
0365
0366 static int ad9523_vco_out_map(struct iio_dev *indio_dev,
0367 unsigned int ch, unsigned int out)
0368 {
0369 struct ad9523_state *st = iio_priv(indio_dev);
0370 int ret;
0371 unsigned int mask;
0372
0373 switch (ch) {
0374 case 0 ... 3:
0375 ret = ad9523_read(indio_dev, AD9523_PLL1_OUTPUT_CHANNEL_CTRL);
0376 if (ret < 0)
0377 break;
0378 mask = AD9523_PLL1_OUTP_CH_CTRL_VCXO_SRC_SEL_CH0 << ch;
0379 if (out) {
0380 ret |= mask;
0381 out = 2;
0382 } else {
0383 ret &= ~mask;
0384 }
0385 ret = ad9523_write(indio_dev,
0386 AD9523_PLL1_OUTPUT_CHANNEL_CTRL, ret);
0387 break;
0388 case 4 ... 6:
0389 ret = ad9523_read(indio_dev, AD9523_PLL1_OUTPUT_CTRL);
0390 if (ret < 0)
0391 break;
0392 mask = AD9523_PLL1_OUTP_CTRL_VCO_DIV_SEL_CH4_M2 << (ch - 4);
0393 if (out)
0394 ret |= mask;
0395 else
0396 ret &= ~mask;
0397 ret = ad9523_write(indio_dev, AD9523_PLL1_OUTPUT_CTRL, ret);
0398 break;
0399 case 7 ... 9:
0400 ret = ad9523_read(indio_dev, AD9523_PLL1_OUTPUT_CHANNEL_CTRL);
0401 if (ret < 0)
0402 break;
0403 mask = AD9523_PLL1_OUTP_CH_CTRL_VCO_DIV_SEL_CH7_M2 << (ch - 7);
0404 if (out)
0405 ret |= mask;
0406 else
0407 ret &= ~mask;
0408 ret = ad9523_write(indio_dev,
0409 AD9523_PLL1_OUTPUT_CHANNEL_CTRL, ret);
0410 break;
0411 default:
0412 return 0;
0413 }
0414
0415 st->vco_out_map[ch] = out;
0416
0417 return ret;
0418 }
0419
0420 static int ad9523_set_clock_provider(struct iio_dev *indio_dev,
0421 unsigned int ch, unsigned long freq)
0422 {
0423 struct ad9523_state *st = iio_priv(indio_dev);
0424 long tmp1, tmp2;
0425 bool use_alt_clk_src;
0426
0427 switch (ch) {
0428 case 0 ... 3:
0429 use_alt_clk_src = (freq == st->vco_out_freq[AD9523_VCXO]);
0430 break;
0431 case 4 ... 9:
0432 tmp1 = st->vco_out_freq[AD9523_VCO1] / freq;
0433 tmp2 = st->vco_out_freq[AD9523_VCO2] / freq;
0434 tmp1 *= freq;
0435 tmp2 *= freq;
0436 use_alt_clk_src = (abs(tmp1 - freq) > abs(tmp2 - freq));
0437 break;
0438 default:
0439
0440 return 0;
0441 }
0442
0443 return ad9523_vco_out_map(indio_dev, ch, use_alt_clk_src);
0444 }
0445
0446 static int ad9523_store_eeprom(struct iio_dev *indio_dev)
0447 {
0448 int ret, tmp;
0449
0450 ret = ad9523_write(indio_dev, AD9523_EEPROM_CTRL1,
0451 AD9523_EEPROM_CTRL1_EEPROM_WRITE_PROT_DIS);
0452 if (ret < 0)
0453 return ret;
0454 ret = ad9523_write(indio_dev, AD9523_EEPROM_CTRL2,
0455 AD9523_EEPROM_CTRL2_REG2EEPROM);
0456 if (ret < 0)
0457 return ret;
0458
0459 tmp = 4;
0460 do {
0461 msleep(20);
0462 ret = ad9523_read(indio_dev,
0463 AD9523_EEPROM_DATA_XFER_STATUS);
0464 if (ret < 0)
0465 return ret;
0466 } while ((ret & AD9523_EEPROM_DATA_XFER_IN_PROGRESS) && tmp--);
0467
0468 ret = ad9523_write(indio_dev, AD9523_EEPROM_CTRL1, 0);
0469 if (ret < 0)
0470 return ret;
0471
0472 ret = ad9523_read(indio_dev, AD9523_EEPROM_ERROR_READBACK);
0473 if (ret < 0)
0474 return ret;
0475
0476 if (ret & AD9523_EEPROM_ERROR_READBACK_FAIL) {
0477 dev_err(&indio_dev->dev, "Verify EEPROM failed");
0478 ret = -EIO;
0479 }
0480
0481 return ret;
0482 }
0483
0484 static int ad9523_sync(struct iio_dev *indio_dev)
0485 {
0486 int ret, tmp;
0487
0488 ret = ad9523_read(indio_dev, AD9523_STATUS_SIGNALS);
0489 if (ret < 0)
0490 return ret;
0491
0492 tmp = ret;
0493 tmp |= AD9523_STATUS_SIGNALS_SYNC_MAN_CTRL;
0494
0495 ret = ad9523_write(indio_dev, AD9523_STATUS_SIGNALS, tmp);
0496 if (ret < 0)
0497 return ret;
0498
0499 ad9523_io_update(indio_dev);
0500 tmp &= ~AD9523_STATUS_SIGNALS_SYNC_MAN_CTRL;
0501
0502 ret = ad9523_write(indio_dev, AD9523_STATUS_SIGNALS, tmp);
0503 if (ret < 0)
0504 return ret;
0505
0506 return ad9523_io_update(indio_dev);
0507 }
0508
0509 static ssize_t ad9523_store(struct device *dev,
0510 struct device_attribute *attr,
0511 const char *buf, size_t len)
0512 {
0513 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
0514 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
0515 struct ad9523_state *st = iio_priv(indio_dev);
0516 bool state;
0517 int ret;
0518
0519 ret = kstrtobool(buf, &state);
0520 if (ret < 0)
0521 return ret;
0522
0523 if (!state)
0524 return len;
0525
0526 mutex_lock(&st->lock);
0527 switch ((u32)this_attr->address) {
0528 case AD9523_SYNC:
0529 ret = ad9523_sync(indio_dev);
0530 break;
0531 case AD9523_EEPROM:
0532 ret = ad9523_store_eeprom(indio_dev);
0533 break;
0534 default:
0535 ret = -ENODEV;
0536 }
0537 mutex_unlock(&st->lock);
0538
0539 return ret ? ret : len;
0540 }
0541
0542 static ssize_t ad9523_show(struct device *dev,
0543 struct device_attribute *attr,
0544 char *buf)
0545 {
0546 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
0547 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
0548 struct ad9523_state *st = iio_priv(indio_dev);
0549 int ret;
0550
0551 mutex_lock(&st->lock);
0552 ret = ad9523_read(indio_dev, AD9523_READBACK_0);
0553 if (ret >= 0) {
0554 ret = sysfs_emit(buf, "%d\n", !!(ret & (1 <<
0555 (u32)this_attr->address)));
0556 }
0557 mutex_unlock(&st->lock);
0558
0559 return ret;
0560 }
0561
0562 static IIO_DEVICE_ATTR(pll1_locked, S_IRUGO,
0563 ad9523_show,
0564 NULL,
0565 AD9523_STAT_PLL1_LD);
0566
0567 static IIO_DEVICE_ATTR(pll2_locked, S_IRUGO,
0568 ad9523_show,
0569 NULL,
0570 AD9523_STAT_PLL2_LD);
0571
0572 static IIO_DEVICE_ATTR(pll1_reference_clk_a_present, S_IRUGO,
0573 ad9523_show,
0574 NULL,
0575 AD9523_STAT_REFA);
0576
0577 static IIO_DEVICE_ATTR(pll1_reference_clk_b_present, S_IRUGO,
0578 ad9523_show,
0579 NULL,
0580 AD9523_STAT_REFB);
0581
0582 static IIO_DEVICE_ATTR(pll1_reference_clk_test_present, S_IRUGO,
0583 ad9523_show,
0584 NULL,
0585 AD9523_STAT_REF_TEST);
0586
0587 static IIO_DEVICE_ATTR(vcxo_clk_present, S_IRUGO,
0588 ad9523_show,
0589 NULL,
0590 AD9523_STAT_VCXO);
0591
0592 static IIO_DEVICE_ATTR(pll2_feedback_clk_present, S_IRUGO,
0593 ad9523_show,
0594 NULL,
0595 AD9523_STAT_PLL2_FB_CLK);
0596
0597 static IIO_DEVICE_ATTR(pll2_reference_clk_present, S_IRUGO,
0598 ad9523_show,
0599 NULL,
0600 AD9523_STAT_PLL2_REF_CLK);
0601
0602 static IIO_DEVICE_ATTR(sync_dividers, S_IWUSR,
0603 NULL,
0604 ad9523_store,
0605 AD9523_SYNC);
0606
0607 static IIO_DEVICE_ATTR(store_eeprom, S_IWUSR,
0608 NULL,
0609 ad9523_store,
0610 AD9523_EEPROM);
0611
0612 static struct attribute *ad9523_attributes[] = {
0613 &iio_dev_attr_sync_dividers.dev_attr.attr,
0614 &iio_dev_attr_store_eeprom.dev_attr.attr,
0615 &iio_dev_attr_pll2_feedback_clk_present.dev_attr.attr,
0616 &iio_dev_attr_pll2_reference_clk_present.dev_attr.attr,
0617 &iio_dev_attr_pll1_reference_clk_a_present.dev_attr.attr,
0618 &iio_dev_attr_pll1_reference_clk_b_present.dev_attr.attr,
0619 &iio_dev_attr_pll1_reference_clk_test_present.dev_attr.attr,
0620 &iio_dev_attr_vcxo_clk_present.dev_attr.attr,
0621 &iio_dev_attr_pll1_locked.dev_attr.attr,
0622 &iio_dev_attr_pll2_locked.dev_attr.attr,
0623 NULL,
0624 };
0625
0626 static const struct attribute_group ad9523_attribute_group = {
0627 .attrs = ad9523_attributes,
0628 };
0629
0630 static int ad9523_read_raw(struct iio_dev *indio_dev,
0631 struct iio_chan_spec const *chan,
0632 int *val,
0633 int *val2,
0634 long m)
0635 {
0636 struct ad9523_state *st = iio_priv(indio_dev);
0637 unsigned int code;
0638 int ret;
0639
0640 mutex_lock(&st->lock);
0641 ret = ad9523_read(indio_dev, AD9523_CHANNEL_CLOCK_DIST(chan->channel));
0642 mutex_unlock(&st->lock);
0643
0644 if (ret < 0)
0645 return ret;
0646
0647 switch (m) {
0648 case IIO_CHAN_INFO_RAW:
0649 *val = !(ret & AD9523_CLK_DIST_PWR_DOWN_EN);
0650 return IIO_VAL_INT;
0651 case IIO_CHAN_INFO_FREQUENCY:
0652 *val = st->vco_out_freq[st->vco_out_map[chan->channel]] /
0653 AD9523_CLK_DIST_DIV_REV(ret);
0654 return IIO_VAL_INT;
0655 case IIO_CHAN_INFO_PHASE:
0656 code = (AD9523_CLK_DIST_DIV_PHASE_REV(ret) * 3141592) /
0657 AD9523_CLK_DIST_DIV_REV(ret);
0658 *val = code / 1000000;
0659 *val2 = code % 1000000;
0660 return IIO_VAL_INT_PLUS_MICRO;
0661 default:
0662 return -EINVAL;
0663 }
0664 };
0665
0666 static int ad9523_write_raw(struct iio_dev *indio_dev,
0667 struct iio_chan_spec const *chan,
0668 int val,
0669 int val2,
0670 long mask)
0671 {
0672 struct ad9523_state *st = iio_priv(indio_dev);
0673 unsigned int reg;
0674 int ret, tmp, code;
0675
0676 mutex_lock(&st->lock);
0677 ret = ad9523_read(indio_dev, AD9523_CHANNEL_CLOCK_DIST(chan->channel));
0678 if (ret < 0)
0679 goto out;
0680
0681 reg = ret;
0682
0683 switch (mask) {
0684 case IIO_CHAN_INFO_RAW:
0685 if (val)
0686 reg &= ~AD9523_CLK_DIST_PWR_DOWN_EN;
0687 else
0688 reg |= AD9523_CLK_DIST_PWR_DOWN_EN;
0689 break;
0690 case IIO_CHAN_INFO_FREQUENCY:
0691 if (val <= 0) {
0692 ret = -EINVAL;
0693 goto out;
0694 }
0695 ret = ad9523_set_clock_provider(indio_dev, chan->channel, val);
0696 if (ret < 0)
0697 goto out;
0698 tmp = st->vco_out_freq[st->vco_out_map[chan->channel]] / val;
0699 tmp = clamp(tmp, 1, 1024);
0700 reg &= ~(0x3FF << 8);
0701 reg |= AD9523_CLK_DIST_DIV(tmp);
0702 break;
0703 case IIO_CHAN_INFO_PHASE:
0704 code = val * 1000000 + val2 % 1000000;
0705 tmp = (code * AD9523_CLK_DIST_DIV_REV(ret)) / 3141592;
0706 tmp = clamp(tmp, 0, 63);
0707 reg &= ~AD9523_CLK_DIST_DIV_PHASE(~0);
0708 reg |= AD9523_CLK_DIST_DIV_PHASE(tmp);
0709 break;
0710 default:
0711 ret = -EINVAL;
0712 goto out;
0713 }
0714
0715 ret = ad9523_write(indio_dev, AD9523_CHANNEL_CLOCK_DIST(chan->channel),
0716 reg);
0717 if (ret < 0)
0718 goto out;
0719
0720 ad9523_io_update(indio_dev);
0721 out:
0722 mutex_unlock(&st->lock);
0723 return ret;
0724 }
0725
0726 static int ad9523_reg_access(struct iio_dev *indio_dev,
0727 unsigned int reg, unsigned int writeval,
0728 unsigned int *readval)
0729 {
0730 struct ad9523_state *st = iio_priv(indio_dev);
0731 int ret;
0732
0733 mutex_lock(&st->lock);
0734 if (readval == NULL) {
0735 ret = ad9523_write(indio_dev, reg | AD9523_R1B, writeval);
0736 ad9523_io_update(indio_dev);
0737 } else {
0738 ret = ad9523_read(indio_dev, reg | AD9523_R1B);
0739 if (ret < 0)
0740 goto out_unlock;
0741 *readval = ret;
0742 ret = 0;
0743 }
0744
0745 out_unlock:
0746 mutex_unlock(&st->lock);
0747
0748 return ret;
0749 }
0750
0751 static const struct iio_info ad9523_info = {
0752 .read_raw = &ad9523_read_raw,
0753 .write_raw = &ad9523_write_raw,
0754 .debugfs_reg_access = &ad9523_reg_access,
0755 .attrs = &ad9523_attribute_group,
0756 };
0757
0758 static int ad9523_setup(struct iio_dev *indio_dev)
0759 {
0760 struct ad9523_state *st = iio_priv(indio_dev);
0761 struct ad9523_platform_data *pdata = st->pdata;
0762 struct ad9523_channel_spec *chan;
0763 unsigned long active_mask = 0;
0764 int ret, i;
0765
0766 ret = ad9523_write(indio_dev, AD9523_SERIAL_PORT_CONFIG,
0767 AD9523_SER_CONF_SOFT_RESET |
0768 (st->spi->mode & SPI_3WIRE ? 0 :
0769 AD9523_SER_CONF_SDO_ACTIVE));
0770 if (ret < 0)
0771 return ret;
0772
0773 ret = ad9523_write(indio_dev, AD9523_READBACK_CTRL,
0774 AD9523_READBACK_CTRL_READ_BUFFERED);
0775 if (ret < 0)
0776 return ret;
0777
0778 ret = ad9523_io_update(indio_dev);
0779 if (ret < 0)
0780 return ret;
0781
0782
0783
0784
0785 ret = ad9523_write(indio_dev, AD9523_PLL1_REF_A_DIVIDER,
0786 pdata->refa_r_div);
0787 if (ret < 0)
0788 return ret;
0789
0790 ret = ad9523_write(indio_dev, AD9523_PLL1_REF_B_DIVIDER,
0791 pdata->refb_r_div);
0792 if (ret < 0)
0793 return ret;
0794
0795 ret = ad9523_write(indio_dev, AD9523_PLL1_FEEDBACK_DIVIDER,
0796 pdata->pll1_feedback_div);
0797 if (ret < 0)
0798 return ret;
0799
0800 ret = ad9523_write(indio_dev, AD9523_PLL1_CHARGE_PUMP_CTRL,
0801 AD9523_PLL1_CHARGE_PUMP_CURRENT_nA(pdata->
0802 pll1_charge_pump_current_nA) |
0803 AD9523_PLL1_CHARGE_PUMP_MODE_NORMAL |
0804 AD9523_PLL1_BACKLASH_PW_MIN);
0805 if (ret < 0)
0806 return ret;
0807
0808 ret = ad9523_write(indio_dev, AD9523_PLL1_INPUT_RECEIVERS_CTRL,
0809 AD_IF(refa_diff_rcv_en, AD9523_PLL1_REFA_RCV_EN) |
0810 AD_IF(refb_diff_rcv_en, AD9523_PLL1_REFB_RCV_EN) |
0811 AD_IF(osc_in_diff_en, AD9523_PLL1_OSC_IN_DIFF_EN) |
0812 AD_IF(osc_in_cmos_neg_inp_en,
0813 AD9523_PLL1_OSC_IN_CMOS_NEG_INP_EN) |
0814 AD_IF(refa_diff_rcv_en, AD9523_PLL1_REFA_DIFF_RCV_EN) |
0815 AD_IF(refb_diff_rcv_en, AD9523_PLL1_REFB_DIFF_RCV_EN));
0816 if (ret < 0)
0817 return ret;
0818
0819 ret = ad9523_write(indio_dev, AD9523_PLL1_REF_CTRL,
0820 AD_IF(zd_in_diff_en, AD9523_PLL1_ZD_IN_DIFF_EN) |
0821 AD_IF(zd_in_cmos_neg_inp_en,
0822 AD9523_PLL1_ZD_IN_CMOS_NEG_INP_EN) |
0823 AD_IF(zero_delay_mode_internal_en,
0824 AD9523_PLL1_ZERO_DELAY_MODE_INT) |
0825 AD_IF(osc_in_feedback_en, AD9523_PLL1_OSC_IN_PLL_FEEDBACK_EN) |
0826 AD_IF(refa_cmos_neg_inp_en, AD9523_PLL1_REFA_CMOS_NEG_INP_EN) |
0827 AD_IF(refb_cmos_neg_inp_en, AD9523_PLL1_REFB_CMOS_NEG_INP_EN));
0828 if (ret < 0)
0829 return ret;
0830
0831 ret = ad9523_write(indio_dev, AD9523_PLL1_MISC_CTRL,
0832 AD9523_PLL1_REFB_INDEP_DIV_CTRL_EN |
0833 AD9523_PLL1_REF_MODE(pdata->ref_mode));
0834 if (ret < 0)
0835 return ret;
0836
0837 ret = ad9523_write(indio_dev, AD9523_PLL1_LOOP_FILTER_CTRL,
0838 AD9523_PLL1_LOOP_FILTER_RZERO(pdata->pll1_loop_filter_rzero));
0839 if (ret < 0)
0840 return ret;
0841
0842
0843
0844
0845 ret = ad9523_write(indio_dev, AD9523_PLL2_CHARGE_PUMP,
0846 AD9523_PLL2_CHARGE_PUMP_CURRENT_nA(pdata->
0847 pll2_charge_pump_current_nA));
0848 if (ret < 0)
0849 return ret;
0850
0851 ret = ad9523_write(indio_dev, AD9523_PLL2_FEEDBACK_DIVIDER_AB,
0852 AD9523_PLL2_FB_NDIV_A_CNT(pdata->pll2_ndiv_a_cnt) |
0853 AD9523_PLL2_FB_NDIV_B_CNT(pdata->pll2_ndiv_b_cnt));
0854 if (ret < 0)
0855 return ret;
0856
0857 ret = ad9523_write(indio_dev, AD9523_PLL2_CTRL,
0858 AD9523_PLL2_CHARGE_PUMP_MODE_NORMAL |
0859 AD9523_PLL2_BACKLASH_CTRL_EN |
0860 AD_IF(pll2_freq_doubler_en, AD9523_PLL2_FREQ_DOUBLER_EN));
0861 if (ret < 0)
0862 return ret;
0863
0864 st->vco_freq = div_u64((unsigned long long)pdata->vcxo_freq *
0865 (pdata->pll2_freq_doubler_en ? 2 : 1) *
0866 AD9523_PLL2_FB_NDIV(pdata->pll2_ndiv_a_cnt,
0867 pdata->pll2_ndiv_b_cnt),
0868 pdata->pll2_r2_div);
0869
0870 ret = ad9523_write(indio_dev, AD9523_PLL2_VCO_CTRL,
0871 AD9523_PLL2_VCO_CALIBRATE);
0872 if (ret < 0)
0873 return ret;
0874
0875 ret = ad9523_write(indio_dev, AD9523_PLL2_VCO_DIVIDER,
0876 AD9523_PLL2_VCO_DIV_M1(pdata->pll2_vco_div_m1) |
0877 AD9523_PLL2_VCO_DIV_M2(pdata->pll2_vco_div_m2) |
0878 AD_IFE(pll2_vco_div_m1, 0,
0879 AD9523_PLL2_VCO_DIV_M1_PWR_DOWN_EN) |
0880 AD_IFE(pll2_vco_div_m2, 0,
0881 AD9523_PLL2_VCO_DIV_M2_PWR_DOWN_EN));
0882 if (ret < 0)
0883 return ret;
0884
0885 if (pdata->pll2_vco_div_m1)
0886 st->vco_out_freq[AD9523_VCO1] =
0887 st->vco_freq / pdata->pll2_vco_div_m1;
0888
0889 if (pdata->pll2_vco_div_m2)
0890 st->vco_out_freq[AD9523_VCO2] =
0891 st->vco_freq / pdata->pll2_vco_div_m2;
0892
0893 st->vco_out_freq[AD9523_VCXO] = pdata->vcxo_freq;
0894
0895 ret = ad9523_write(indio_dev, AD9523_PLL2_R2_DIVIDER,
0896 AD9523_PLL2_R2_DIVIDER_VAL(pdata->pll2_r2_div));
0897 if (ret < 0)
0898 return ret;
0899
0900 ret = ad9523_write(indio_dev, AD9523_PLL2_LOOP_FILTER_CTRL,
0901 AD9523_PLL2_LOOP_FILTER_CPOLE1(pdata->cpole1) |
0902 AD9523_PLL2_LOOP_FILTER_RZERO(pdata->rzero) |
0903 AD9523_PLL2_LOOP_FILTER_RPOLE2(pdata->rpole2) |
0904 AD_IF(rzero_bypass_en,
0905 AD9523_PLL2_LOOP_FILTER_RZERO_BYPASS_EN));
0906 if (ret < 0)
0907 return ret;
0908
0909 for (i = 0; i < pdata->num_channels; i++) {
0910 chan = &pdata->channels[i];
0911 if (chan->channel_num < AD9523_NUM_CHAN) {
0912 __set_bit(chan->channel_num, &active_mask);
0913 ret = ad9523_write(indio_dev,
0914 AD9523_CHANNEL_CLOCK_DIST(chan->channel_num),
0915 AD9523_CLK_DIST_DRIVER_MODE(chan->driver_mode) |
0916 AD9523_CLK_DIST_DIV(chan->channel_divider) |
0917 AD9523_CLK_DIST_DIV_PHASE(chan->divider_phase) |
0918 (chan->sync_ignore_en ?
0919 AD9523_CLK_DIST_IGNORE_SYNC_EN : 0) |
0920 (chan->divider_output_invert_en ?
0921 AD9523_CLK_DIST_INV_DIV_OUTPUT_EN : 0) |
0922 (chan->low_power_mode_en ?
0923 AD9523_CLK_DIST_LOW_PWR_MODE_EN : 0) |
0924 (chan->output_dis ?
0925 AD9523_CLK_DIST_PWR_DOWN_EN : 0));
0926 if (ret < 0)
0927 return ret;
0928
0929 ret = ad9523_vco_out_map(indio_dev, chan->channel_num,
0930 chan->use_alt_clock_src);
0931 if (ret < 0)
0932 return ret;
0933
0934 st->ad9523_channels[i].type = IIO_ALTVOLTAGE;
0935 st->ad9523_channels[i].output = 1;
0936 st->ad9523_channels[i].indexed = 1;
0937 st->ad9523_channels[i].channel = chan->channel_num;
0938 st->ad9523_channels[i].extend_name =
0939 chan->extended_name;
0940 st->ad9523_channels[i].info_mask_separate =
0941 BIT(IIO_CHAN_INFO_RAW) |
0942 BIT(IIO_CHAN_INFO_PHASE) |
0943 BIT(IIO_CHAN_INFO_FREQUENCY);
0944 }
0945 }
0946
0947 for_each_clear_bit(i, &active_mask, AD9523_NUM_CHAN) {
0948 ret = ad9523_write(indio_dev,
0949 AD9523_CHANNEL_CLOCK_DIST(i),
0950 AD9523_CLK_DIST_DRIVER_MODE(TRISTATE) |
0951 AD9523_CLK_DIST_PWR_DOWN_EN);
0952 if (ret < 0)
0953 return ret;
0954 }
0955
0956 ret = ad9523_write(indio_dev, AD9523_POWER_DOWN_CTRL, 0);
0957 if (ret < 0)
0958 return ret;
0959
0960 ret = ad9523_write(indio_dev, AD9523_STATUS_SIGNALS,
0961 AD9523_STATUS_MONITOR_01_PLL12_LOCKED);
0962 if (ret < 0)
0963 return ret;
0964
0965 ret = ad9523_io_update(indio_dev);
0966 if (ret < 0)
0967 return ret;
0968
0969 return 0;
0970 }
0971
0972 static void ad9523_reg_disable(void *data)
0973 {
0974 struct regulator *reg = data;
0975
0976 regulator_disable(reg);
0977 }
0978
0979 static int ad9523_probe(struct spi_device *spi)
0980 {
0981 struct ad9523_platform_data *pdata = spi->dev.platform_data;
0982 struct iio_dev *indio_dev;
0983 struct ad9523_state *st;
0984 int ret;
0985
0986 if (!pdata) {
0987 dev_err(&spi->dev, "no platform data?\n");
0988 return -EINVAL;
0989 }
0990
0991 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
0992 if (indio_dev == NULL)
0993 return -ENOMEM;
0994
0995 st = iio_priv(indio_dev);
0996
0997 mutex_init(&st->lock);
0998
0999 st->reg = devm_regulator_get(&spi->dev, "vcc");
1000 if (!IS_ERR(st->reg)) {
1001 ret = regulator_enable(st->reg);
1002 if (ret)
1003 return ret;
1004
1005 ret = devm_add_action_or_reset(&spi->dev, ad9523_reg_disable,
1006 st->reg);
1007 if (ret)
1008 return ret;
1009 }
1010
1011 st->pwrdown_gpio = devm_gpiod_get_optional(&spi->dev, "powerdown",
1012 GPIOD_OUT_HIGH);
1013 if (IS_ERR(st->pwrdown_gpio))
1014 return PTR_ERR(st->pwrdown_gpio);
1015
1016 st->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset",
1017 GPIOD_OUT_LOW);
1018 if (IS_ERR(st->reset_gpio))
1019 return PTR_ERR(st->reset_gpio);
1020
1021 if (st->reset_gpio) {
1022 udelay(1);
1023 gpiod_direction_output(st->reset_gpio, 1);
1024 }
1025
1026 st->sync_gpio = devm_gpiod_get_optional(&spi->dev, "sync",
1027 GPIOD_OUT_HIGH);
1028 if (IS_ERR(st->sync_gpio))
1029 return PTR_ERR(st->sync_gpio);
1030
1031 spi_set_drvdata(spi, indio_dev);
1032 st->spi = spi;
1033 st->pdata = pdata;
1034
1035 indio_dev->name = (pdata->name[0] != 0) ? pdata->name :
1036 spi_get_device_id(spi)->name;
1037 indio_dev->info = &ad9523_info;
1038 indio_dev->modes = INDIO_DIRECT_MODE;
1039 indio_dev->channels = st->ad9523_channels;
1040 indio_dev->num_channels = pdata->num_channels;
1041
1042 ret = ad9523_setup(indio_dev);
1043 if (ret < 0)
1044 return ret;
1045
1046 return devm_iio_device_register(&spi->dev, indio_dev);
1047 }
1048
1049 static const struct spi_device_id ad9523_id[] = {
1050 {"ad9523-1", 9523},
1051 {}
1052 };
1053 MODULE_DEVICE_TABLE(spi, ad9523_id);
1054
1055 static struct spi_driver ad9523_driver = {
1056 .driver = {
1057 .name = "ad9523",
1058 },
1059 .probe = ad9523_probe,
1060 .id_table = ad9523_id,
1061 };
1062 module_spi_driver(ad9523_driver);
1063
1064 MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
1065 MODULE_DESCRIPTION("Analog Devices AD9523 CLOCKDIST/PLL");
1066 MODULE_LICENSE("GPL v2");