linux/drivers/staging/iio/impedance-analyzer/ad5933.c
<<
>>
Prefs
   1/*
   2 * AD5933 AD5934 Impedance Converter, Network Analyzer
   3 *
   4 * Copyright 2011 Analog Devices Inc.
   5 *
   6 * Licensed under the GPL-2.
   7 */
   8
   9#include <linux/interrupt.h>
  10#include <linux/device.h>
  11#include <linux/kernel.h>
  12#include <linux/sysfs.h>
  13#include <linux/i2c.h>
  14#include <linux/regulator/consumer.h>
  15#include <linux/slab.h>
  16#include <linux/types.h>
  17#include <linux/err.h>
  18#include <linux/delay.h>
  19#include <linux/module.h>
  20#include <asm/div64.h>
  21
  22#include <linux/iio/iio.h>
  23#include <linux/iio/sysfs.h>
  24#include <linux/iio/buffer.h>
  25#include <linux/iio/kfifo_buf.h>
  26
  27#include "ad5933.h"
  28
  29/* AD5933/AD5934 Registers */
  30#define AD5933_REG_CONTROL_HB           0x80    /* R/W, 2 bytes */
  31#define AD5933_REG_CONTROL_LB           0x81    /* R/W, 2 bytes */
  32#define AD5933_REG_FREQ_START           0x82    /* R/W, 3 bytes */
  33#define AD5933_REG_FREQ_INC             0x85    /* R/W, 3 bytes */
  34#define AD5933_REG_INC_NUM              0x88    /* R/W, 2 bytes, 9 bit */
  35#define AD5933_REG_SETTLING_CYCLES      0x8A    /* R/W, 2 bytes */
  36#define AD5933_REG_STATUS               0x8F    /* R, 1 byte */
  37#define AD5933_REG_TEMP_DATA            0x92    /* R, 2 bytes*/
  38#define AD5933_REG_REAL_DATA            0x94    /* R, 2 bytes*/
  39#define AD5933_REG_IMAG_DATA            0x96    /* R, 2 bytes*/
  40
  41/* AD5933_REG_CONTROL_HB Bits */
  42#define AD5933_CTRL_INIT_START_FREQ     (0x1 << 4)
  43#define AD5933_CTRL_START_SWEEP         (0x2 << 4)
  44#define AD5933_CTRL_INC_FREQ            (0x3 << 4)
  45#define AD5933_CTRL_REPEAT_FREQ         (0x4 << 4)
  46#define AD5933_CTRL_MEASURE_TEMP        (0x9 << 4)
  47#define AD5933_CTRL_POWER_DOWN          (0xA << 4)
  48#define AD5933_CTRL_STANDBY             (0xB << 4)
  49
  50#define AD5933_CTRL_RANGE_2000mVpp      (0x0 << 1)
  51#define AD5933_CTRL_RANGE_200mVpp       (0x1 << 1)
  52#define AD5933_CTRL_RANGE_400mVpp       (0x2 << 1)
  53#define AD5933_CTRL_RANGE_1000mVpp      (0x3 << 1)
  54#define AD5933_CTRL_RANGE(x)            ((x) << 1)
  55
  56#define AD5933_CTRL_PGA_GAIN_1          (0x1 << 0)
  57#define AD5933_CTRL_PGA_GAIN_5          (0x0 << 0)
  58
  59/* AD5933_REG_CONTROL_LB Bits */
  60#define AD5933_CTRL_RESET               (0x1 << 4)
  61#define AD5933_CTRL_INT_SYSCLK          (0x0 << 3)
  62#define AD5933_CTRL_EXT_SYSCLK          (0x1 << 3)
  63
  64/* AD5933_REG_STATUS Bits */
  65#define AD5933_STAT_TEMP_VALID          (0x1 << 0)
  66#define AD5933_STAT_DATA_VALID          (0x1 << 1)
  67#define AD5933_STAT_SWEEP_DONE          (0x1 << 2)
  68
  69/* I2C Block Commands */
  70#define AD5933_I2C_BLOCK_WRITE          0xA0
  71#define AD5933_I2C_BLOCK_READ           0xA1
  72#define AD5933_I2C_ADDR_POINTER         0xB0
  73
  74/* Device Specs */
  75#define AD5933_INT_OSC_FREQ_Hz          16776000
  76#define AD5933_MAX_OUTPUT_FREQ_Hz       100000
  77#define AD5933_MAX_RETRIES              100
  78
  79#define AD5933_OUT_RANGE                1
  80#define AD5933_OUT_RANGE_AVAIL          2
  81#define AD5933_OUT_SETTLING_CYCLES      3
  82#define AD5933_IN_PGA_GAIN              4
  83#define AD5933_IN_PGA_GAIN_AVAIL        5
  84#define AD5933_FREQ_POINTS              6
  85
  86#define AD5933_POLL_TIME_ms             10
  87#define AD5933_INIT_EXCITATION_TIME_ms  100
  88
  89struct ad5933_state {
  90        struct i2c_client               *client;
  91        struct regulator                *reg;
  92        struct delayed_work             work;
  93        unsigned long                   mclk_hz;
  94        unsigned char                   ctrl_hb;
  95        unsigned char                   ctrl_lb;
  96        unsigned                        range_avail[4];
  97        unsigned short                  vref_mv;
  98        unsigned short                  settling_cycles;
  99        unsigned short                  freq_points;
 100        unsigned                        freq_start;
 101        unsigned                        freq_inc;
 102        unsigned                        state;
 103        unsigned                        poll_time_jiffies;
 104};
 105
 106static struct ad5933_platform_data ad5933_default_pdata  = {
 107        .vref_mv = 3300,
 108};
 109
 110static const struct iio_chan_spec ad5933_channels[] = {
 111        {
 112                .type = IIO_TEMP,
 113                .indexed = 1,
 114                .channel = 0,
 115                .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
 116                        BIT(IIO_CHAN_INFO_SCALE),
 117                .address = AD5933_REG_TEMP_DATA,
 118                .scan_index = -1,
 119                .scan_type = {
 120                        .sign = 's',
 121                        .realbits = 14,
 122                        .storagebits = 16,
 123                },
 124        }, { /* Ring Channels */
 125                .type = IIO_VOLTAGE,
 126                .indexed = 1,
 127                .channel = 0,
 128                .extend_name = "real",
 129                .address = AD5933_REG_REAL_DATA,
 130                .scan_index = 0,
 131                .scan_type = {
 132                        .sign = 's',
 133                        .realbits = 16,
 134                        .storagebits = 16,
 135                },
 136        }, {
 137                .type = IIO_VOLTAGE,
 138                .indexed = 1,
 139                .channel = 0,
 140                .extend_name = "imag",
 141                .address = AD5933_REG_IMAG_DATA,
 142                .scan_index = 1,
 143                .scan_type = {
 144                        .sign = 's',
 145                        .realbits = 16,
 146                        .storagebits = 16,
 147                },
 148        },
 149};
 150
 151static int ad5933_i2c_write(struct i2c_client *client,
 152                              u8 reg, u8 len, u8 *data)
 153{
 154        int ret;
 155
 156        while (len--) {
 157                ret = i2c_smbus_write_byte_data(client, reg++, *data++);
 158                if (ret < 0) {
 159                        dev_err(&client->dev, "I2C write error\n");
 160                        return ret;
 161                }
 162        }
 163        return 0;
 164}
 165
 166static int ad5933_i2c_read(struct i2c_client *client,
 167                              u8 reg, u8 len, u8 *data)
 168{
 169        int ret;
 170
 171        while (len--) {
 172                ret = i2c_smbus_read_byte_data(client, reg++);
 173                if (ret < 0) {
 174                        dev_err(&client->dev, "I2C read error\n");
 175                        return ret;
 176                }
 177                *data++ = ret;
 178        }
 179        return 0;
 180}
 181
 182static int ad5933_cmd(struct ad5933_state *st, unsigned char cmd)
 183{
 184        unsigned char dat = st->ctrl_hb | cmd;
 185
 186        return ad5933_i2c_write(st->client,
 187                        AD5933_REG_CONTROL_HB, 1, &dat);
 188}
 189
 190static int ad5933_reset(struct ad5933_state *st)
 191{
 192        unsigned char dat = st->ctrl_lb | AD5933_CTRL_RESET;
 193
 194        return ad5933_i2c_write(st->client,
 195                        AD5933_REG_CONTROL_LB, 1, &dat);
 196}
 197
 198static int ad5933_wait_busy(struct ad5933_state *st, unsigned char event)
 199{
 200        unsigned char val, timeout = AD5933_MAX_RETRIES;
 201        int ret;
 202
 203        while (timeout--) {
 204                ret =  ad5933_i2c_read(st->client, AD5933_REG_STATUS, 1, &val);
 205                if (ret < 0)
 206                        return ret;
 207                if (val & event)
 208                        return val;
 209                cpu_relax();
 210                mdelay(1);
 211        }
 212
 213        return -EAGAIN;
 214}
 215
 216static int ad5933_set_freq(struct ad5933_state *st,
 217                           unsigned reg, unsigned long freq)
 218{
 219        unsigned long long freqreg;
 220        union {
 221                __be32 d32;
 222                u8 d8[4];
 223        } dat;
 224
 225        freqreg = (u64) freq * (u64) (1 << 27);
 226        do_div(freqreg, st->mclk_hz / 4);
 227
 228        switch (reg) {
 229        case AD5933_REG_FREQ_START:
 230                st->freq_start = freq;
 231                break;
 232        case AD5933_REG_FREQ_INC:
 233                st->freq_inc = freq;
 234                break;
 235        default:
 236                return -EINVAL;
 237        }
 238
 239        dat.d32 = cpu_to_be32(freqreg);
 240        return ad5933_i2c_write(st->client, reg, 3, &dat.d8[1]);
 241}
 242
 243static int ad5933_setup(struct ad5933_state *st)
 244{
 245        __be16 dat;
 246        int ret;
 247
 248        ret = ad5933_reset(st);
 249        if (ret < 0)
 250                return ret;
 251
 252        ret = ad5933_set_freq(st, AD5933_REG_FREQ_START, 10000);
 253        if (ret < 0)
 254                return ret;
 255
 256        ret = ad5933_set_freq(st, AD5933_REG_FREQ_INC, 200);
 257        if (ret < 0)
 258                return ret;
 259
 260        st->settling_cycles = 10;
 261        dat = cpu_to_be16(st->settling_cycles);
 262
 263        ret = ad5933_i2c_write(st->client,
 264                        AD5933_REG_SETTLING_CYCLES, 2, (u8 *)&dat);
 265        if (ret < 0)
 266                return ret;
 267
 268        st->freq_points = 100;
 269        dat = cpu_to_be16(st->freq_points);
 270
 271        return ad5933_i2c_write(st->client, AD5933_REG_INC_NUM, 2, (u8 *)&dat);
 272}
 273
 274static void ad5933_calc_out_ranges(struct ad5933_state *st)
 275{
 276        int i;
 277        unsigned normalized_3v3[4] = {1980, 198, 383, 970};
 278
 279        for (i = 0; i < 4; i++)
 280                st->range_avail[i] = normalized_3v3[i] * st->vref_mv / 3300;
 281
 282}
 283
 284/*
 285 * handles: AD5933_REG_FREQ_START and AD5933_REG_FREQ_INC
 286 */
 287
 288static ssize_t ad5933_show_frequency(struct device *dev,
 289                                        struct device_attribute *attr,
 290                                        char *buf)
 291{
 292        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 293        struct ad5933_state *st = iio_priv(indio_dev);
 294        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 295        int ret;
 296        unsigned long long freqreg;
 297        union {
 298                __be32 d32;
 299                u8 d8[4];
 300        } dat;
 301
 302        mutex_lock(&indio_dev->mlock);
 303        ret = ad5933_i2c_read(st->client, this_attr->address, 3, &dat.d8[1]);
 304        mutex_unlock(&indio_dev->mlock);
 305        if (ret < 0)
 306                return ret;
 307
 308        freqreg = be32_to_cpu(dat.d32) & 0xFFFFFF;
 309
 310        freqreg = (u64) freqreg * (u64) (st->mclk_hz / 4);
 311        do_div(freqreg, 1 << 27);
 312
 313        return sprintf(buf, "%d\n", (int) freqreg);
 314}
 315
 316static ssize_t ad5933_store_frequency(struct device *dev,
 317                                         struct device_attribute *attr,
 318                                         const char *buf,
 319                                         size_t len)
 320{
 321        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 322        struct ad5933_state *st = iio_priv(indio_dev);
 323        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 324        unsigned long val;
 325        int ret;
 326
 327        ret = kstrtoul(buf, 10, &val);
 328        if (ret)
 329                return ret;
 330
 331        if (val > AD5933_MAX_OUTPUT_FREQ_Hz)
 332                return -EINVAL;
 333
 334        mutex_lock(&indio_dev->mlock);
 335        ret = ad5933_set_freq(st, this_attr->address, val);
 336        mutex_unlock(&indio_dev->mlock);
 337
 338        return ret ? ret : len;
 339}
 340
 341static IIO_DEVICE_ATTR(out_voltage0_freq_start, S_IRUGO | S_IWUSR,
 342                        ad5933_show_frequency,
 343                        ad5933_store_frequency,
 344                        AD5933_REG_FREQ_START);
 345
 346static IIO_DEVICE_ATTR(out_voltage0_freq_increment, S_IRUGO | S_IWUSR,
 347                        ad5933_show_frequency,
 348                        ad5933_store_frequency,
 349                        AD5933_REG_FREQ_INC);
 350
 351static ssize_t ad5933_show(struct device *dev,
 352                                        struct device_attribute *attr,
 353                                        char *buf)
 354{
 355        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 356        struct ad5933_state *st = iio_priv(indio_dev);
 357        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 358        int ret = 0, len = 0;
 359
 360        mutex_lock(&indio_dev->mlock);
 361        switch ((u32) this_attr->address) {
 362        case AD5933_OUT_RANGE:
 363                len = sprintf(buf, "%u\n",
 364                              st->range_avail[(st->ctrl_hb >> 1) & 0x3]);
 365                break;
 366        case AD5933_OUT_RANGE_AVAIL:
 367                len = sprintf(buf, "%u %u %u %u\n", st->range_avail[0],
 368                              st->range_avail[3], st->range_avail[2],
 369                              st->range_avail[1]);
 370                break;
 371        case AD5933_OUT_SETTLING_CYCLES:
 372                len = sprintf(buf, "%d\n", st->settling_cycles);
 373                break;
 374        case AD5933_IN_PGA_GAIN:
 375                len = sprintf(buf, "%s\n",
 376                              (st->ctrl_hb & AD5933_CTRL_PGA_GAIN_1) ?
 377                              "1" : "0.2");
 378                break;
 379        case AD5933_IN_PGA_GAIN_AVAIL:
 380                len = sprintf(buf, "1 0.2\n");
 381                break;
 382        case AD5933_FREQ_POINTS:
 383                len = sprintf(buf, "%d\n", st->freq_points);
 384                break;
 385        default:
 386                ret = -EINVAL;
 387        }
 388
 389        mutex_unlock(&indio_dev->mlock);
 390        return ret ? ret : len;
 391}
 392
 393static ssize_t ad5933_store(struct device *dev,
 394                                         struct device_attribute *attr,
 395                                         const char *buf,
 396                                         size_t len)
 397{
 398        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 399        struct ad5933_state *st = iio_priv(indio_dev);
 400        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 401        u16 val;
 402        int i, ret = 0;
 403        __be16 dat;
 404
 405        if (this_attr->address != AD5933_IN_PGA_GAIN) {
 406                ret = kstrtou16(buf, 10, &val);
 407                if (ret)
 408                        return ret;
 409        }
 410
 411        mutex_lock(&indio_dev->mlock);
 412        switch ((u32) this_attr->address) {
 413        case AD5933_OUT_RANGE:
 414                for (i = 0; i < 4; i++)
 415                        if (val == st->range_avail[i]) {
 416                                st->ctrl_hb &= ~AD5933_CTRL_RANGE(0x3);
 417                                st->ctrl_hb |= AD5933_CTRL_RANGE(i);
 418                                ret = ad5933_cmd(st, 0);
 419                                break;
 420                        }
 421                ret = -EINVAL;
 422                break;
 423        case AD5933_IN_PGA_GAIN:
 424                if (sysfs_streq(buf, "1")) {
 425                        st->ctrl_hb |= AD5933_CTRL_PGA_GAIN_1;
 426                } else if (sysfs_streq(buf, "0.2")) {
 427                        st->ctrl_hb &= ~AD5933_CTRL_PGA_GAIN_1;
 428                } else {
 429                        ret = -EINVAL;
 430                        break;
 431                }
 432                ret = ad5933_cmd(st, 0);
 433                break;
 434        case AD5933_OUT_SETTLING_CYCLES:
 435                val = clamp(val, (u16)0, (u16)0x7FF);
 436                st->settling_cycles = val;
 437
 438                /* 2x, 4x handling, see datasheet */
 439                if (val > 511)
 440                        val = (val >> 1) | (1 << 9);
 441                else if (val > 1022)
 442                        val = (val >> 2) | (3 << 9);
 443
 444                dat = cpu_to_be16(val);
 445                ret = ad5933_i2c_write(st->client,
 446                                AD5933_REG_SETTLING_CYCLES, 2, (u8 *)&dat);
 447                break;
 448        case AD5933_FREQ_POINTS:
 449                val = clamp(val, (u16)0, (u16)511);
 450                st->freq_points = val;
 451
 452                dat = cpu_to_be16(val);
 453                ret = ad5933_i2c_write(st->client, AD5933_REG_INC_NUM, 2,
 454                                       (u8 *)&dat);
 455                break;
 456        default:
 457                ret = -EINVAL;
 458        }
 459
 460        mutex_unlock(&indio_dev->mlock);
 461        return ret ? ret : len;
 462}
 463
 464static IIO_DEVICE_ATTR(out_voltage0_scale, S_IRUGO | S_IWUSR,
 465                        ad5933_show,
 466                        ad5933_store,
 467                        AD5933_OUT_RANGE);
 468
 469static IIO_DEVICE_ATTR(out_voltage0_scale_available, S_IRUGO,
 470                        ad5933_show,
 471                        NULL,
 472                        AD5933_OUT_RANGE_AVAIL);
 473
 474static IIO_DEVICE_ATTR(in_voltage0_scale, S_IRUGO | S_IWUSR,
 475                        ad5933_show,
 476                        ad5933_store,
 477                        AD5933_IN_PGA_GAIN);
 478
 479static IIO_DEVICE_ATTR(in_voltage0_scale_available, S_IRUGO,
 480                        ad5933_show,
 481                        NULL,
 482                        AD5933_IN_PGA_GAIN_AVAIL);
 483
 484static IIO_DEVICE_ATTR(out_voltage0_freq_points, S_IRUGO | S_IWUSR,
 485                        ad5933_show,
 486                        ad5933_store,
 487                        AD5933_FREQ_POINTS);
 488
 489static IIO_DEVICE_ATTR(out_voltage0_settling_cycles, S_IRUGO | S_IWUSR,
 490                        ad5933_show,
 491                        ad5933_store,
 492                        AD5933_OUT_SETTLING_CYCLES);
 493
 494/* note:
 495 * ideally we would handle the scale attributes via the iio_info
 496 * (read|write)_raw methods, however this part is a untypical since we
 497 * don't create dedicated sysfs channel attributes for out0 and in0.
 498 */
 499static struct attribute *ad5933_attributes[] = {
 500        &iio_dev_attr_out_voltage0_scale.dev_attr.attr,
 501        &iio_dev_attr_out_voltage0_scale_available.dev_attr.attr,
 502        &iio_dev_attr_out_voltage0_freq_start.dev_attr.attr,
 503        &iio_dev_attr_out_voltage0_freq_increment.dev_attr.attr,
 504        &iio_dev_attr_out_voltage0_freq_points.dev_attr.attr,
 505        &iio_dev_attr_out_voltage0_settling_cycles.dev_attr.attr,
 506        &iio_dev_attr_in_voltage0_scale.dev_attr.attr,
 507        &iio_dev_attr_in_voltage0_scale_available.dev_attr.attr,
 508        NULL
 509};
 510
 511static const struct attribute_group ad5933_attribute_group = {
 512        .attrs = ad5933_attributes,
 513};
 514
 515static int ad5933_read_raw(struct iio_dev *indio_dev,
 516                           struct iio_chan_spec const *chan,
 517                           int *val,
 518                           int *val2,
 519                           long m)
 520{
 521        struct ad5933_state *st = iio_priv(indio_dev);
 522        __be16 dat;
 523        int ret;
 524
 525        switch (m) {
 526        case IIO_CHAN_INFO_RAW:
 527                mutex_lock(&indio_dev->mlock);
 528                if (iio_buffer_enabled(indio_dev)) {
 529                        ret = -EBUSY;
 530                        goto out;
 531                }
 532                ret = ad5933_cmd(st, AD5933_CTRL_MEASURE_TEMP);
 533                if (ret < 0)
 534                        goto out;
 535                ret = ad5933_wait_busy(st, AD5933_STAT_TEMP_VALID);
 536                if (ret < 0)
 537                        goto out;
 538
 539                ret = ad5933_i2c_read(st->client,
 540                                AD5933_REG_TEMP_DATA, 2,
 541                                (u8 *)&dat);
 542                if (ret < 0)
 543                        goto out;
 544                mutex_unlock(&indio_dev->mlock);
 545                *val = sign_extend32(be16_to_cpu(dat), 13);
 546
 547                return IIO_VAL_INT;
 548        case IIO_CHAN_INFO_SCALE:
 549                *val = 1000;
 550                *val2 = 5;
 551                return IIO_VAL_FRACTIONAL_LOG2;
 552        }
 553
 554        return -EINVAL;
 555out:
 556        mutex_unlock(&indio_dev->mlock);
 557        return ret;
 558}
 559
 560static const struct iio_info ad5933_info = {
 561        .read_raw = ad5933_read_raw,
 562        .attrs = &ad5933_attribute_group,
 563        .driver_module = THIS_MODULE,
 564};
 565
 566static int ad5933_ring_preenable(struct iio_dev *indio_dev)
 567{
 568        struct ad5933_state *st = iio_priv(indio_dev);
 569        int ret;
 570
 571        if (bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength))
 572                return -EINVAL;
 573
 574        ret = ad5933_reset(st);
 575        if (ret < 0)
 576                return ret;
 577
 578        ret = ad5933_cmd(st, AD5933_CTRL_STANDBY);
 579        if (ret < 0)
 580                return ret;
 581
 582        ret = ad5933_cmd(st, AD5933_CTRL_INIT_START_FREQ);
 583        if (ret < 0)
 584                return ret;
 585
 586        st->state = AD5933_CTRL_INIT_START_FREQ;
 587
 588        return 0;
 589}
 590
 591static int ad5933_ring_postenable(struct iio_dev *indio_dev)
 592{
 593        struct ad5933_state *st = iio_priv(indio_dev);
 594
 595        /* AD5933_CTRL_INIT_START_FREQ:
 596         * High Q complex circuits require a long time to reach steady state.
 597         * To facilitate the measurement of such impedances, this mode allows
 598         * the user full control of the settling time requirement before
 599         * entering start frequency sweep mode where the impedance measurement
 600         * takes place. In this mode the impedance is excited with the
 601         * programmed start frequency (ad5933_ring_preenable),
 602         * but no measurement takes place.
 603         */
 604
 605        schedule_delayed_work(&st->work,
 606                              msecs_to_jiffies(AD5933_INIT_EXCITATION_TIME_ms));
 607        return 0;
 608}
 609
 610static int ad5933_ring_postdisable(struct iio_dev *indio_dev)
 611{
 612        struct ad5933_state *st = iio_priv(indio_dev);
 613
 614        cancel_delayed_work_sync(&st->work);
 615        return ad5933_cmd(st, AD5933_CTRL_POWER_DOWN);
 616}
 617
 618static const struct iio_buffer_setup_ops ad5933_ring_setup_ops = {
 619        .preenable = ad5933_ring_preenable,
 620        .postenable = ad5933_ring_postenable,
 621        .postdisable = ad5933_ring_postdisable,
 622};
 623
 624static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
 625{
 626        struct iio_buffer *buffer;
 627
 628        buffer = iio_kfifo_allocate();
 629        if (!buffer)
 630                return -ENOMEM;
 631
 632        iio_device_attach_buffer(indio_dev, buffer);
 633
 634        /* Ring buffer functions - here trigger setup related */
 635        indio_dev->setup_ops = &ad5933_ring_setup_ops;
 636
 637        indio_dev->modes |= INDIO_BUFFER_HARDWARE;
 638
 639        return 0;
 640}
 641
 642static void ad5933_work(struct work_struct *work)
 643{
 644        struct ad5933_state *st = container_of(work,
 645                struct ad5933_state, work.work);
 646        struct iio_dev *indio_dev = i2c_get_clientdata(st->client);
 647        __be16 buf[2];
 648        int val[2];
 649        unsigned char status;
 650
 651        mutex_lock(&indio_dev->mlock);
 652        if (st->state == AD5933_CTRL_INIT_START_FREQ) {
 653                /* start sweep */
 654                ad5933_cmd(st, AD5933_CTRL_START_SWEEP);
 655                st->state = AD5933_CTRL_START_SWEEP;
 656                schedule_delayed_work(&st->work, st->poll_time_jiffies);
 657                mutex_unlock(&indio_dev->mlock);
 658                return;
 659        }
 660
 661        ad5933_i2c_read(st->client, AD5933_REG_STATUS, 1, &status);
 662
 663        if (status & AD5933_STAT_DATA_VALID) {
 664                int scan_count = bitmap_weight(indio_dev->active_scan_mask,
 665                                               indio_dev->masklength);
 666                ad5933_i2c_read(st->client,
 667                                test_bit(1, indio_dev->active_scan_mask) ?
 668                                AD5933_REG_REAL_DATA : AD5933_REG_IMAG_DATA,
 669                                scan_count * 2, (u8 *)buf);
 670
 671                if (scan_count == 2) {
 672                        val[0] = be16_to_cpu(buf[0]);
 673                        val[1] = be16_to_cpu(buf[1]);
 674                } else {
 675                        val[0] = be16_to_cpu(buf[0]);
 676                }
 677                iio_push_to_buffers(indio_dev, val);
 678        } else {
 679                /* no data available - try again later */
 680                schedule_delayed_work(&st->work, st->poll_time_jiffies);
 681                mutex_unlock(&indio_dev->mlock);
 682                return;
 683        }
 684
 685        if (status & AD5933_STAT_SWEEP_DONE) {
 686                /* last sample received - power down do nothing until
 687                 * the ring enable is toggled */
 688                ad5933_cmd(st, AD5933_CTRL_POWER_DOWN);
 689        } else {
 690                /* we just received a valid datum, move on to the next */
 691                ad5933_cmd(st, AD5933_CTRL_INC_FREQ);
 692                schedule_delayed_work(&st->work, st->poll_time_jiffies);
 693        }
 694
 695        mutex_unlock(&indio_dev->mlock);
 696}
 697
 698static int ad5933_probe(struct i2c_client *client,
 699                                   const struct i2c_device_id *id)
 700{
 701        int ret, voltage_uv = 0;
 702        struct ad5933_platform_data *pdata = client->dev.platform_data;
 703        struct ad5933_state *st;
 704        struct iio_dev *indio_dev;
 705
 706        indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
 707        if (!indio_dev)
 708                return -ENOMEM;
 709
 710        st = iio_priv(indio_dev);
 711        i2c_set_clientdata(client, indio_dev);
 712        st->client = client;
 713
 714        if (!pdata)
 715                pdata = &ad5933_default_pdata;
 716
 717        st->reg = devm_regulator_get(&client->dev, "vcc");
 718        if (!IS_ERR(st->reg)) {
 719                ret = regulator_enable(st->reg);
 720                if (ret)
 721                        return ret;
 722                voltage_uv = regulator_get_voltage(st->reg);
 723        }
 724
 725        if (voltage_uv)
 726                st->vref_mv = voltage_uv / 1000;
 727        else
 728                st->vref_mv = pdata->vref_mv;
 729
 730        if (pdata->ext_clk_Hz) {
 731                st->mclk_hz = pdata->ext_clk_Hz;
 732                st->ctrl_lb = AD5933_CTRL_EXT_SYSCLK;
 733        } else {
 734                st->mclk_hz = AD5933_INT_OSC_FREQ_Hz;
 735                st->ctrl_lb = AD5933_CTRL_INT_SYSCLK;
 736        }
 737
 738        ad5933_calc_out_ranges(st);
 739        INIT_DELAYED_WORK(&st->work, ad5933_work);
 740        st->poll_time_jiffies = msecs_to_jiffies(AD5933_POLL_TIME_ms);
 741
 742        indio_dev->dev.parent = &client->dev;
 743        indio_dev->info = &ad5933_info;
 744        indio_dev->name = id->name;
 745        indio_dev->modes = INDIO_DIRECT_MODE;
 746        indio_dev->channels = ad5933_channels;
 747        indio_dev->num_channels = ARRAY_SIZE(ad5933_channels);
 748
 749        ret = ad5933_register_ring_funcs_and_init(indio_dev);
 750        if (ret)
 751                goto error_disable_reg;
 752
 753        ret = ad5933_setup(st);
 754        if (ret)
 755                goto error_unreg_ring;
 756
 757        ret = iio_device_register(indio_dev);
 758        if (ret)
 759                goto error_unreg_ring;
 760
 761        return 0;
 762
 763error_unreg_ring:
 764        iio_kfifo_free(indio_dev->buffer);
 765error_disable_reg:
 766        if (!IS_ERR(st->reg))
 767                regulator_disable(st->reg);
 768
 769        return ret;
 770}
 771
 772static int ad5933_remove(struct i2c_client *client)
 773{
 774        struct iio_dev *indio_dev = i2c_get_clientdata(client);
 775        struct ad5933_state *st = iio_priv(indio_dev);
 776
 777        iio_device_unregister(indio_dev);
 778        iio_kfifo_free(indio_dev->buffer);
 779        if (!IS_ERR(st->reg))
 780                regulator_disable(st->reg);
 781
 782        return 0;
 783}
 784
 785static const struct i2c_device_id ad5933_id[] = {
 786        { "ad5933", 0 },
 787        { "ad5934", 0 },
 788        {}
 789};
 790
 791MODULE_DEVICE_TABLE(i2c, ad5933_id);
 792
 793static struct i2c_driver ad5933_driver = {
 794        .driver = {
 795                .name = "ad5933",
 796        },
 797        .probe = ad5933_probe,
 798        .remove = ad5933_remove,
 799        .id_table = ad5933_id,
 800};
 801module_i2c_driver(ad5933_driver);
 802
 803MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 804MODULE_DESCRIPTION("Analog Devices AD5933 Impedance Conv. Network Analyzer");
 805MODULE_LICENSE("GPL v2");
 806