linux/drivers/iio/adc/ad7768-1.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Analog Devices AD7768-1 SPI ADC driver
   4 *
   5 * Copyright 2017 Analog Devices Inc.
   6 */
   7#include <linux/bitfield.h>
   8#include <linux/clk.h>
   9#include <linux/delay.h>
  10#include <linux/device.h>
  11#include <linux/err.h>
  12#include <linux/gpio/consumer.h>
  13#include <linux/kernel.h>
  14#include <linux/module.h>
  15#include <linux/regulator/consumer.h>
  16#include <linux/sysfs.h>
  17#include <linux/spi/spi.h>
  18
  19#include <linux/iio/buffer.h>
  20#include <linux/iio/iio.h>
  21#include <linux/iio/sysfs.h>
  22#include <linux/iio/trigger.h>
  23#include <linux/iio/triggered_buffer.h>
  24#include <linux/iio/trigger_consumer.h>
  25
  26/* AD7768 registers definition */
  27#define AD7768_REG_CHIP_TYPE            0x3
  28#define AD7768_REG_PROD_ID_L            0x4
  29#define AD7768_REG_PROD_ID_H            0x5
  30#define AD7768_REG_CHIP_GRADE           0x6
  31#define AD7768_REG_SCRATCH_PAD          0x0A
  32#define AD7768_REG_VENDOR_L             0x0C
  33#define AD7768_REG_VENDOR_H             0x0D
  34#define AD7768_REG_INTERFACE_FORMAT     0x14
  35#define AD7768_REG_POWER_CLOCK          0x15
  36#define AD7768_REG_ANALOG               0x16
  37#define AD7768_REG_ANALOG2              0x17
  38#define AD7768_REG_CONVERSION           0x18
  39#define AD7768_REG_DIGITAL_FILTER       0x19
  40#define AD7768_REG_SINC3_DEC_RATE_MSB   0x1A
  41#define AD7768_REG_SINC3_DEC_RATE_LSB   0x1B
  42#define AD7768_REG_DUTY_CYCLE_RATIO     0x1C
  43#define AD7768_REG_SYNC_RESET           0x1D
  44#define AD7768_REG_GPIO_CONTROL         0x1E
  45#define AD7768_REG_GPIO_WRITE           0x1F
  46#define AD7768_REG_GPIO_READ            0x20
  47#define AD7768_REG_OFFSET_HI            0x21
  48#define AD7768_REG_OFFSET_MID           0x22
  49#define AD7768_REG_OFFSET_LO            0x23
  50#define AD7768_REG_GAIN_HI              0x24
  51#define AD7768_REG_GAIN_MID             0x25
  52#define AD7768_REG_GAIN_LO              0x26
  53#define AD7768_REG_SPI_DIAG_ENABLE      0x28
  54#define AD7768_REG_ADC_DIAG_ENABLE      0x29
  55#define AD7768_REG_DIG_DIAG_ENABLE      0x2A
  56#define AD7768_REG_ADC_DATA             0x2C
  57#define AD7768_REG_MASTER_STATUS        0x2D
  58#define AD7768_REG_SPI_DIAG_STATUS      0x2E
  59#define AD7768_REG_ADC_DIAG_STATUS      0x2F
  60#define AD7768_REG_DIG_DIAG_STATUS      0x30
  61#define AD7768_REG_MCLK_COUNTER         0x31
  62
  63/* AD7768_REG_POWER_CLOCK */
  64#define AD7768_PWR_MCLK_DIV_MSK         GENMASK(5, 4)
  65#define AD7768_PWR_MCLK_DIV(x)          FIELD_PREP(AD7768_PWR_MCLK_DIV_MSK, x)
  66#define AD7768_PWR_PWRMODE_MSK          GENMASK(1, 0)
  67#define AD7768_PWR_PWRMODE(x)           FIELD_PREP(AD7768_PWR_PWRMODE_MSK, x)
  68
  69/* AD7768_REG_DIGITAL_FILTER */
  70#define AD7768_DIG_FIL_FIL_MSK          GENMASK(6, 4)
  71#define AD7768_DIG_FIL_FIL(x)           FIELD_PREP(AD7768_DIG_FIL_FIL_MSK, x)
  72#define AD7768_DIG_FIL_DEC_MSK          GENMASK(2, 0)
  73#define AD7768_DIG_FIL_DEC_RATE(x)      FIELD_PREP(AD7768_DIG_FIL_DEC_MSK, x)
  74
  75/* AD7768_REG_CONVERSION */
  76#define AD7768_CONV_MODE_MSK            GENMASK(2, 0)
  77#define AD7768_CONV_MODE(x)             FIELD_PREP(AD7768_CONV_MODE_MSK, x)
  78
  79#define AD7768_RD_FLAG_MSK(x)           (BIT(6) | ((x) & 0x3F))
  80#define AD7768_WR_FLAG_MSK(x)           ((x) & 0x3F)
  81
  82enum ad7768_conv_mode {
  83        AD7768_CONTINUOUS,
  84        AD7768_ONE_SHOT,
  85        AD7768_SINGLE,
  86        AD7768_PERIODIC,
  87        AD7768_STANDBY
  88};
  89
  90enum ad7768_pwrmode {
  91        AD7768_ECO_MODE = 0,
  92        AD7768_MED_MODE = 2,
  93        AD7768_FAST_MODE = 3
  94};
  95
  96enum ad7768_mclk_div {
  97        AD7768_MCLK_DIV_16,
  98        AD7768_MCLK_DIV_8,
  99        AD7768_MCLK_DIV_4,
 100        AD7768_MCLK_DIV_2
 101};
 102
 103enum ad7768_dec_rate {
 104        AD7768_DEC_RATE_32 = 0,
 105        AD7768_DEC_RATE_64 = 1,
 106        AD7768_DEC_RATE_128 = 2,
 107        AD7768_DEC_RATE_256 = 3,
 108        AD7768_DEC_RATE_512 = 4,
 109        AD7768_DEC_RATE_1024 = 5,
 110        AD7768_DEC_RATE_8 = 9,
 111        AD7768_DEC_RATE_16 = 10
 112};
 113
 114struct ad7768_clk_configuration {
 115        enum ad7768_mclk_div mclk_div;
 116        enum ad7768_dec_rate dec_rate;
 117        unsigned int clk_div;
 118        enum ad7768_pwrmode pwrmode;
 119};
 120
 121static const struct ad7768_clk_configuration ad7768_clk_config[] = {
 122        { AD7768_MCLK_DIV_2, AD7768_DEC_RATE_8, 16,  AD7768_FAST_MODE },
 123        { AD7768_MCLK_DIV_2, AD7768_DEC_RATE_16, 32,  AD7768_FAST_MODE },
 124        { AD7768_MCLK_DIV_2, AD7768_DEC_RATE_32, 64, AD7768_FAST_MODE },
 125        { AD7768_MCLK_DIV_2, AD7768_DEC_RATE_64, 128, AD7768_FAST_MODE },
 126        { AD7768_MCLK_DIV_2, AD7768_DEC_RATE_128, 256, AD7768_FAST_MODE },
 127        { AD7768_MCLK_DIV_4, AD7768_DEC_RATE_128, 512, AD7768_MED_MODE },
 128        { AD7768_MCLK_DIV_4, AD7768_DEC_RATE_256, 1024, AD7768_MED_MODE },
 129        { AD7768_MCLK_DIV_4, AD7768_DEC_RATE_512, 2048, AD7768_MED_MODE },
 130        { AD7768_MCLK_DIV_4, AD7768_DEC_RATE_1024, 4096, AD7768_MED_MODE },
 131        { AD7768_MCLK_DIV_8, AD7768_DEC_RATE_1024, 8192, AD7768_MED_MODE },
 132        { AD7768_MCLK_DIV_16, AD7768_DEC_RATE_1024, 16384, AD7768_ECO_MODE },
 133};
 134
 135static const struct iio_chan_spec ad7768_channels[] = {
 136        {
 137                .type = IIO_VOLTAGE,
 138                .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
 139                .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
 140                .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
 141                .indexed = 1,
 142                .channel = 0,
 143                .scan_index = 0,
 144                .scan_type = {
 145                        .sign = 'u',
 146                        .realbits = 24,
 147                        .storagebits = 32,
 148                        .shift = 8,
 149                        .endianness = IIO_BE,
 150                },
 151        },
 152};
 153
 154struct ad7768_state {
 155        struct spi_device *spi;
 156        struct regulator *vref;
 157        struct mutex lock;
 158        struct clk *mclk;
 159        unsigned int mclk_freq;
 160        unsigned int samp_freq;
 161        struct completion completion;
 162        struct iio_trigger *trig;
 163        struct gpio_desc *gpio_sync_in;
 164        const char *labels[ARRAY_SIZE(ad7768_channels)];
 165        /*
 166         * DMA (thus cache coherency maintenance) requires the
 167         * transfer buffers to live in their own cache lines.
 168         */
 169        union {
 170                struct {
 171                        __be32 chan;
 172                        s64 timestamp;
 173                } scan;
 174                __be32 d32;
 175                u8 d8[2];
 176        } data ____cacheline_aligned;
 177};
 178
 179static int ad7768_spi_reg_read(struct ad7768_state *st, unsigned int addr,
 180                               unsigned int len)
 181{
 182        unsigned int shift;
 183        int ret;
 184
 185        shift = 32 - (8 * len);
 186        st->data.d8[0] = AD7768_RD_FLAG_MSK(addr);
 187
 188        ret = spi_write_then_read(st->spi, st->data.d8, 1,
 189                                  &st->data.d32, len);
 190        if (ret < 0)
 191                return ret;
 192
 193        return (be32_to_cpu(st->data.d32) >> shift);
 194}
 195
 196static int ad7768_spi_reg_write(struct ad7768_state *st,
 197                                unsigned int addr,
 198                                unsigned int val)
 199{
 200        st->data.d8[0] = AD7768_WR_FLAG_MSK(addr);
 201        st->data.d8[1] = val & 0xFF;
 202
 203        return spi_write(st->spi, st->data.d8, 2);
 204}
 205
 206static int ad7768_set_mode(struct ad7768_state *st,
 207                           enum ad7768_conv_mode mode)
 208{
 209        int regval;
 210
 211        regval = ad7768_spi_reg_read(st, AD7768_REG_CONVERSION, 1);
 212        if (regval < 0)
 213                return regval;
 214
 215        regval &= ~AD7768_CONV_MODE_MSK;
 216        regval |= AD7768_CONV_MODE(mode);
 217
 218        return ad7768_spi_reg_write(st, AD7768_REG_CONVERSION, regval);
 219}
 220
 221static int ad7768_scan_direct(struct iio_dev *indio_dev)
 222{
 223        struct ad7768_state *st = iio_priv(indio_dev);
 224        int readval, ret;
 225
 226        reinit_completion(&st->completion);
 227
 228        ret = ad7768_set_mode(st, AD7768_ONE_SHOT);
 229        if (ret < 0)
 230                return ret;
 231
 232        ret = wait_for_completion_timeout(&st->completion,
 233                                          msecs_to_jiffies(1000));
 234        if (!ret)
 235                return -ETIMEDOUT;
 236
 237        readval = ad7768_spi_reg_read(st, AD7768_REG_ADC_DATA, 3);
 238        if (readval < 0)
 239                return readval;
 240        /*
 241         * Any SPI configuration of the AD7768-1 can only be
 242         * performed in continuous conversion mode.
 243         */
 244        ret = ad7768_set_mode(st, AD7768_CONTINUOUS);
 245        if (ret < 0)
 246                return ret;
 247
 248        return readval;
 249}
 250
 251static int ad7768_reg_access(struct iio_dev *indio_dev,
 252                             unsigned int reg,
 253                             unsigned int writeval,
 254                             unsigned int *readval)
 255{
 256        struct ad7768_state *st = iio_priv(indio_dev);
 257        int ret;
 258
 259        mutex_lock(&st->lock);
 260        if (readval) {
 261                ret = ad7768_spi_reg_read(st, reg, 1);
 262                if (ret < 0)
 263                        goto err_unlock;
 264                *readval = ret;
 265                ret = 0;
 266        } else {
 267                ret = ad7768_spi_reg_write(st, reg, writeval);
 268        }
 269err_unlock:
 270        mutex_unlock(&st->lock);
 271
 272        return ret;
 273}
 274
 275static int ad7768_set_dig_fil(struct ad7768_state *st,
 276                              enum ad7768_dec_rate dec_rate)
 277{
 278        unsigned int mode;
 279        int ret;
 280
 281        if (dec_rate == AD7768_DEC_RATE_8 || dec_rate == AD7768_DEC_RATE_16)
 282                mode = AD7768_DIG_FIL_FIL(dec_rate);
 283        else
 284                mode = AD7768_DIG_FIL_DEC_RATE(dec_rate);
 285
 286        ret = ad7768_spi_reg_write(st, AD7768_REG_DIGITAL_FILTER, mode);
 287        if (ret < 0)
 288                return ret;
 289
 290        /* A sync-in pulse is required every time the filter dec rate changes */
 291        gpiod_set_value(st->gpio_sync_in, 1);
 292        gpiod_set_value(st->gpio_sync_in, 0);
 293
 294        return 0;
 295}
 296
 297static int ad7768_set_freq(struct ad7768_state *st,
 298                           unsigned int freq)
 299{
 300        unsigned int diff_new, diff_old, pwr_mode, i, idx;
 301        int res, ret;
 302
 303        diff_old = U32_MAX;
 304        idx = 0;
 305
 306        res = DIV_ROUND_CLOSEST(st->mclk_freq, freq);
 307
 308        /* Find the closest match for the desired sampling frequency */
 309        for (i = 0; i < ARRAY_SIZE(ad7768_clk_config); i++) {
 310                diff_new = abs(res - ad7768_clk_config[i].clk_div);
 311                if (diff_new < diff_old) {
 312                        diff_old = diff_new;
 313                        idx = i;
 314                }
 315        }
 316
 317        /*
 318         * Set both the mclk_div and pwrmode with a single write to the
 319         * POWER_CLOCK register
 320         */
 321        pwr_mode = AD7768_PWR_MCLK_DIV(ad7768_clk_config[idx].mclk_div) |
 322                   AD7768_PWR_PWRMODE(ad7768_clk_config[idx].pwrmode);
 323        ret = ad7768_spi_reg_write(st, AD7768_REG_POWER_CLOCK, pwr_mode);
 324        if (ret < 0)
 325                return ret;
 326
 327        ret =  ad7768_set_dig_fil(st, ad7768_clk_config[idx].dec_rate);
 328        if (ret < 0)
 329                return ret;
 330
 331        st->samp_freq = DIV_ROUND_CLOSEST(st->mclk_freq,
 332                                          ad7768_clk_config[idx].clk_div);
 333
 334        return 0;
 335}
 336
 337static ssize_t ad7768_sampling_freq_avail(struct device *dev,
 338                                          struct device_attribute *attr,
 339                                          char *buf)
 340{
 341        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 342        struct ad7768_state *st = iio_priv(indio_dev);
 343        unsigned int freq;
 344        int i, len = 0;
 345
 346        for (i = 0; i < ARRAY_SIZE(ad7768_clk_config); i++) {
 347                freq = DIV_ROUND_CLOSEST(st->mclk_freq,
 348                                         ad7768_clk_config[i].clk_div);
 349                len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", freq);
 350        }
 351
 352        buf[len - 1] = '\n';
 353
 354        return len;
 355}
 356
 357static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(ad7768_sampling_freq_avail);
 358
 359static int ad7768_read_raw(struct iio_dev *indio_dev,
 360                           struct iio_chan_spec const *chan,
 361                           int *val, int *val2, long info)
 362{
 363        struct ad7768_state *st = iio_priv(indio_dev);
 364        int scale_uv, ret;
 365
 366        switch (info) {
 367        case IIO_CHAN_INFO_RAW:
 368                ret = iio_device_claim_direct_mode(indio_dev);
 369                if (ret)
 370                        return ret;
 371
 372                ret = ad7768_scan_direct(indio_dev);
 373                if (ret >= 0)
 374                        *val = ret;
 375
 376                iio_device_release_direct_mode(indio_dev);
 377                if (ret < 0)
 378                        return ret;
 379
 380                return IIO_VAL_INT;
 381
 382        case IIO_CHAN_INFO_SCALE:
 383                scale_uv = regulator_get_voltage(st->vref);
 384                if (scale_uv < 0)
 385                        return scale_uv;
 386
 387                *val = (scale_uv * 2) / 1000;
 388                *val2 = chan->scan_type.realbits;
 389
 390                return IIO_VAL_FRACTIONAL_LOG2;
 391
 392        case IIO_CHAN_INFO_SAMP_FREQ:
 393                *val = st->samp_freq;
 394
 395                return IIO_VAL_INT;
 396        }
 397
 398        return -EINVAL;
 399}
 400
 401static int ad7768_write_raw(struct iio_dev *indio_dev,
 402                            struct iio_chan_spec const *chan,
 403                            int val, int val2, long info)
 404{
 405        struct ad7768_state *st = iio_priv(indio_dev);
 406
 407        switch (info) {
 408        case IIO_CHAN_INFO_SAMP_FREQ:
 409                return ad7768_set_freq(st, val);
 410        default:
 411                return -EINVAL;
 412        }
 413}
 414
 415static int ad7768_read_label(struct iio_dev *indio_dev,
 416        const struct iio_chan_spec *chan, char *label)
 417{
 418        struct ad7768_state *st = iio_priv(indio_dev);
 419
 420        return sprintf(label, "%s\n", st->labels[chan->channel]);
 421}
 422
 423static struct attribute *ad7768_attributes[] = {
 424        &iio_dev_attr_sampling_frequency_available.dev_attr.attr,
 425        NULL
 426};
 427
 428static const struct attribute_group ad7768_group = {
 429        .attrs = ad7768_attributes,
 430};
 431
 432static const struct iio_info ad7768_info = {
 433        .attrs = &ad7768_group,
 434        .read_raw = &ad7768_read_raw,
 435        .write_raw = &ad7768_write_raw,
 436        .read_label = ad7768_read_label,
 437        .debugfs_reg_access = &ad7768_reg_access,
 438};
 439
 440static int ad7768_setup(struct ad7768_state *st)
 441{
 442        int ret;
 443
 444        /*
 445         * Two writes to the SPI_RESET[1:0] bits are required to initiate
 446         * a software reset. The bits must first be set to 11, and then
 447         * to 10. When the sequence is detected, the reset occurs.
 448         * See the datasheet, page 70.
 449         */
 450        ret = ad7768_spi_reg_write(st, AD7768_REG_SYNC_RESET, 0x3);
 451        if (ret)
 452                return ret;
 453
 454        ret = ad7768_spi_reg_write(st, AD7768_REG_SYNC_RESET, 0x2);
 455        if (ret)
 456                return ret;
 457
 458        st->gpio_sync_in = devm_gpiod_get(&st->spi->dev, "adi,sync-in",
 459                                          GPIOD_OUT_LOW);
 460        if (IS_ERR(st->gpio_sync_in))
 461                return PTR_ERR(st->gpio_sync_in);
 462
 463        /* Set the default sampling frequency to 32000 kSPS */
 464        return ad7768_set_freq(st, 32000);
 465}
 466
 467static irqreturn_t ad7768_trigger_handler(int irq, void *p)
 468{
 469        struct iio_poll_func *pf = p;
 470        struct iio_dev *indio_dev = pf->indio_dev;
 471        struct ad7768_state *st = iio_priv(indio_dev);
 472        int ret;
 473
 474        mutex_lock(&st->lock);
 475
 476        ret = spi_read(st->spi, &st->data.scan.chan, 3);
 477        if (ret < 0)
 478                goto err_unlock;
 479
 480        iio_push_to_buffers_with_timestamp(indio_dev, &st->data.scan,
 481                                           iio_get_time_ns(indio_dev));
 482
 483        iio_trigger_notify_done(indio_dev->trig);
 484err_unlock:
 485        mutex_unlock(&st->lock);
 486
 487        return IRQ_HANDLED;
 488}
 489
 490static irqreturn_t ad7768_interrupt(int irq, void *dev_id)
 491{
 492        struct iio_dev *indio_dev = dev_id;
 493        struct ad7768_state *st = iio_priv(indio_dev);
 494
 495        if (iio_buffer_enabled(indio_dev))
 496                iio_trigger_poll(st->trig);
 497        else
 498                complete(&st->completion);
 499
 500        return IRQ_HANDLED;
 501};
 502
 503static int ad7768_buffer_postenable(struct iio_dev *indio_dev)
 504{
 505        struct ad7768_state *st = iio_priv(indio_dev);
 506
 507        /*
 508         * Write a 1 to the LSB of the INTERFACE_FORMAT register to enter
 509         * continuous read mode. Subsequent data reads do not require an
 510         * initial 8-bit write to query the ADC_DATA register.
 511         */
 512        return ad7768_spi_reg_write(st, AD7768_REG_INTERFACE_FORMAT, 0x01);
 513}
 514
 515static int ad7768_buffer_predisable(struct iio_dev *indio_dev)
 516{
 517        struct ad7768_state *st = iio_priv(indio_dev);
 518
 519        /*
 520         * To exit continuous read mode, perform a single read of the ADC_DATA
 521         * reg (0x2C), which allows further configuration of the device.
 522         */
 523        return ad7768_spi_reg_read(st, AD7768_REG_ADC_DATA, 3);
 524}
 525
 526static const struct iio_buffer_setup_ops ad7768_buffer_ops = {
 527        .postenable = &ad7768_buffer_postenable,
 528        .predisable = &ad7768_buffer_predisable,
 529};
 530
 531static const struct iio_trigger_ops ad7768_trigger_ops = {
 532        .validate_device = iio_trigger_validate_own_device,
 533};
 534
 535static void ad7768_regulator_disable(void *data)
 536{
 537        struct ad7768_state *st = data;
 538
 539        regulator_disable(st->vref);
 540}
 541
 542static void ad7768_clk_disable(void *data)
 543{
 544        struct ad7768_state *st = data;
 545
 546        clk_disable_unprepare(st->mclk);
 547}
 548
 549static int ad7768_set_channel_label(struct iio_dev *indio_dev,
 550                                                int num_channels)
 551{
 552        struct ad7768_state *st = iio_priv(indio_dev);
 553        struct device *device = indio_dev->dev.parent;
 554        struct fwnode_handle *fwnode;
 555        struct fwnode_handle *child;
 556        const char *label;
 557        int crt_ch = 0;
 558
 559        fwnode = dev_fwnode(device);
 560        fwnode_for_each_child_node(fwnode, child) {
 561                if (fwnode_property_read_u32(child, "reg", &crt_ch))
 562                        continue;
 563
 564                if (crt_ch >= num_channels)
 565                        continue;
 566
 567                if (fwnode_property_read_string(child, "label", &label))
 568                        continue;
 569
 570                st->labels[crt_ch] = label;
 571        }
 572
 573        return 0;
 574}
 575
 576static int ad7768_probe(struct spi_device *spi)
 577{
 578        struct ad7768_state *st;
 579        struct iio_dev *indio_dev;
 580        int ret;
 581
 582        indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
 583        if (!indio_dev)
 584                return -ENOMEM;
 585
 586        st = iio_priv(indio_dev);
 587        st->spi = spi;
 588
 589        st->vref = devm_regulator_get(&spi->dev, "vref");
 590        if (IS_ERR(st->vref))
 591                return PTR_ERR(st->vref);
 592
 593        ret = regulator_enable(st->vref);
 594        if (ret) {
 595                dev_err(&spi->dev, "Failed to enable specified vref supply\n");
 596                return ret;
 597        }
 598
 599        ret = devm_add_action_or_reset(&spi->dev, ad7768_regulator_disable, st);
 600        if (ret)
 601                return ret;
 602
 603        st->mclk = devm_clk_get(&spi->dev, "mclk");
 604        if (IS_ERR(st->mclk))
 605                return PTR_ERR(st->mclk);
 606
 607        ret = clk_prepare_enable(st->mclk);
 608        if (ret < 0)
 609                return ret;
 610
 611        ret = devm_add_action_or_reset(&spi->dev, ad7768_clk_disable, st);
 612        if (ret)
 613                return ret;
 614
 615        st->mclk_freq = clk_get_rate(st->mclk);
 616
 617        mutex_init(&st->lock);
 618
 619        indio_dev->channels = ad7768_channels;
 620        indio_dev->num_channels = ARRAY_SIZE(ad7768_channels);
 621        indio_dev->name = spi_get_device_id(spi)->name;
 622        indio_dev->info = &ad7768_info;
 623        indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_TRIGGERED;
 624
 625        ret = ad7768_setup(st);
 626        if (ret < 0) {
 627                dev_err(&spi->dev, "AD7768 setup failed\n");
 628                return ret;
 629        }
 630
 631        st->trig = devm_iio_trigger_alloc(&spi->dev, "%s-dev%d",
 632                                          indio_dev->name,
 633                                          iio_device_id(indio_dev));
 634        if (!st->trig)
 635                return -ENOMEM;
 636
 637        st->trig->ops = &ad7768_trigger_ops;
 638        iio_trigger_set_drvdata(st->trig, indio_dev);
 639        ret = devm_iio_trigger_register(&spi->dev, st->trig);
 640        if (ret)
 641                return ret;
 642
 643        indio_dev->trig = iio_trigger_get(st->trig);
 644
 645        init_completion(&st->completion);
 646
 647        ret = ad7768_set_channel_label(indio_dev, ARRAY_SIZE(ad7768_channels));
 648        if (ret)
 649                return ret;
 650
 651        ret = devm_request_irq(&spi->dev, spi->irq,
 652                               &ad7768_interrupt,
 653                               IRQF_TRIGGER_RISING | IRQF_ONESHOT,
 654                               indio_dev->name, indio_dev);
 655        if (ret)
 656                return ret;
 657
 658        ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev,
 659                                              &iio_pollfunc_store_time,
 660                                              &ad7768_trigger_handler,
 661                                              &ad7768_buffer_ops);
 662        if (ret)
 663                return ret;
 664
 665        return devm_iio_device_register(&spi->dev, indio_dev);
 666}
 667
 668static const struct spi_device_id ad7768_id_table[] = {
 669        { "ad7768-1", 0 },
 670        {}
 671};
 672MODULE_DEVICE_TABLE(spi, ad7768_id_table);
 673
 674static const struct of_device_id ad7768_of_match[] = {
 675        { .compatible = "adi,ad7768-1" },
 676        { },
 677};
 678MODULE_DEVICE_TABLE(of, ad7768_of_match);
 679
 680static struct spi_driver ad7768_driver = {
 681        .driver = {
 682                .name = "ad7768-1",
 683                .of_match_table = ad7768_of_match,
 684        },
 685        .probe = ad7768_probe,
 686        .id_table = ad7768_id_table,
 687};
 688module_spi_driver(ad7768_driver);
 689
 690MODULE_AUTHOR("Stefan Popa <stefan.popa@analog.com>");
 691MODULE_DESCRIPTION("Analog Devices AD7768-1 ADC driver");
 692MODULE_LICENSE("GPL v2");
 693