linux/drivers/iio/adc/at91_adc.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * Driver for the ADC present in the Atmel AT91 evaluation boards.
   4 *
   5 * Copyright 2011 Free Electrons
   6 */
   7
   8#include <linux/bitmap.h>
   9#include <linux/bitops.h>
  10#include <linux/clk.h>
  11#include <linux/err.h>
  12#include <linux/io.h>
  13#include <linux/input.h>
  14#include <linux/interrupt.h>
  15#include <linux/jiffies.h>
  16#include <linux/kernel.h>
  17#include <linux/module.h>
  18#include <linux/of.h>
  19#include <linux/of_device.h>
  20#include <linux/platform_device.h>
  21#include <linux/sched.h>
  22#include <linux/slab.h>
  23#include <linux/wait.h>
  24
  25#include <linux/iio/iio.h>
  26#include <linux/iio/buffer.h>
  27#include <linux/iio/trigger.h>
  28#include <linux/iio/trigger_consumer.h>
  29#include <linux/iio/triggered_buffer.h>
  30#include <linux/pinctrl/consumer.h>
  31
  32/* Registers */
  33#define AT91_ADC_CR             0x00            /* Control Register */
  34#define         AT91_ADC_SWRST          (1 << 0)        /* Software Reset */
  35#define         AT91_ADC_START          (1 << 1)        /* Start Conversion */
  36
  37#define AT91_ADC_MR             0x04            /* Mode Register */
  38#define         AT91_ADC_TSAMOD         (3 << 0)        /* ADC mode */
  39#define         AT91_ADC_TSAMOD_ADC_ONLY_MODE           (0 << 0)        /* ADC Mode */
  40#define         AT91_ADC_TSAMOD_TS_ONLY_MODE            (1 << 0)        /* Touch Screen Only Mode */
  41#define         AT91_ADC_TRGEN          (1 << 0)        /* Trigger Enable */
  42#define         AT91_ADC_TRGSEL         (7 << 1)        /* Trigger Selection */
  43#define                 AT91_ADC_TRGSEL_TC0             (0 << 1)
  44#define                 AT91_ADC_TRGSEL_TC1             (1 << 1)
  45#define                 AT91_ADC_TRGSEL_TC2             (2 << 1)
  46#define                 AT91_ADC_TRGSEL_EXTERNAL        (6 << 1)
  47#define         AT91_ADC_LOWRES         (1 << 4)        /* Low Resolution */
  48#define         AT91_ADC_SLEEP          (1 << 5)        /* Sleep Mode */
  49#define         AT91_ADC_PENDET         (1 << 6)        /* Pen contact detection enable */
  50#define         AT91_ADC_PRESCAL_9260   (0x3f << 8)     /* Prescalar Rate Selection */
  51#define         AT91_ADC_PRESCAL_9G45   (0xff << 8)
  52#define                 AT91_ADC_PRESCAL_(x)    ((x) << 8)
  53#define         AT91_ADC_STARTUP_9260   (0x1f << 16)    /* Startup Up Time */
  54#define         AT91_ADC_STARTUP_9G45   (0x7f << 16)
  55#define         AT91_ADC_STARTUP_9X5    (0xf << 16)
  56#define                 AT91_ADC_STARTUP_(x)    ((x) << 16)
  57#define         AT91_ADC_SHTIM          (0xf  << 24)    /* Sample & Hold Time */
  58#define                 AT91_ADC_SHTIM_(x)      ((x) << 24)
  59#define         AT91_ADC_PENDBC         (0x0f << 28)    /* Pen Debounce time */
  60#define                 AT91_ADC_PENDBC_(x)     ((x) << 28)
  61
  62#define AT91_ADC_TSR            0x0C
  63#define         AT91_ADC_TSR_SHTIM      (0xf  << 24)    /* Sample & Hold Time */
  64#define                 AT91_ADC_TSR_SHTIM_(x)  ((x) << 24)
  65
  66#define AT91_ADC_CHER           0x10            /* Channel Enable Register */
  67#define AT91_ADC_CHDR           0x14            /* Channel Disable Register */
  68#define AT91_ADC_CHSR           0x18            /* Channel Status Register */
  69#define         AT91_ADC_CH(n)          (1 << (n))      /* Channel Number */
  70
  71#define AT91_ADC_SR             0x1C            /* Status Register */
  72#define         AT91_ADC_EOC(n)         (1 << (n))      /* End of Conversion on Channel N */
  73#define         AT91_ADC_OVRE(n)        (1 << ((n) + 8))/* Overrun Error on Channel N */
  74#define         AT91_ADC_DRDY           (1 << 16)       /* Data Ready */
  75#define         AT91_ADC_GOVRE          (1 << 17)       /* General Overrun Error */
  76#define         AT91_ADC_ENDRX          (1 << 18)       /* End of RX Buffer */
  77#define         AT91_ADC_RXFUFF         (1 << 19)       /* RX Buffer Full */
  78
  79#define AT91_ADC_SR_9X5         0x30            /* Status Register for 9x5 */
  80#define         AT91_ADC_SR_DRDY_9X5    (1 << 24)       /* Data Ready */
  81
  82#define AT91_ADC_LCDR           0x20            /* Last Converted Data Register */
  83#define         AT91_ADC_LDATA          (0x3ff)
  84
  85#define AT91_ADC_IER            0x24            /* Interrupt Enable Register */
  86#define AT91_ADC_IDR            0x28            /* Interrupt Disable Register */
  87#define AT91_ADC_IMR            0x2C            /* Interrupt Mask Register */
  88#define         AT91RL_ADC_IER_PEN      (1 << 20)
  89#define         AT91RL_ADC_IER_NOPEN    (1 << 21)
  90#define         AT91_ADC_IER_PEN        (1 << 29)
  91#define         AT91_ADC_IER_NOPEN      (1 << 30)
  92#define         AT91_ADC_IER_XRDY       (1 << 20)
  93#define         AT91_ADC_IER_YRDY       (1 << 21)
  94#define         AT91_ADC_IER_PRDY       (1 << 22)
  95#define         AT91_ADC_ISR_PENS       (1 << 31)
  96
  97#define AT91_ADC_CHR(n)         (0x30 + ((n) * 4))      /* Channel Data Register N */
  98#define         AT91_ADC_DATA           (0x3ff)
  99
 100#define AT91_ADC_CDR0_9X5       (0x50)                  /* Channel Data Register 0 for 9X5 */
 101
 102#define AT91_ADC_ACR            0x94    /* Analog Control Register */
 103#define         AT91_ADC_ACR_PENDETSENS (0x3 << 0)      /* pull-up resistor */
 104
 105#define AT91_ADC_TSMR           0xB0
 106#define         AT91_ADC_TSMR_TSMODE    (3 << 0)        /* Touch Screen Mode */
 107#define                 AT91_ADC_TSMR_TSMODE_NONE               (0 << 0)
 108#define                 AT91_ADC_TSMR_TSMODE_4WIRE_NO_PRESS     (1 << 0)
 109#define                 AT91_ADC_TSMR_TSMODE_4WIRE_PRESS        (2 << 0)
 110#define                 AT91_ADC_TSMR_TSMODE_5WIRE              (3 << 0)
 111#define         AT91_ADC_TSMR_TSAV      (3 << 4)        /* Averages samples */
 112#define                 AT91_ADC_TSMR_TSAV_(x)          ((x) << 4)
 113#define         AT91_ADC_TSMR_SCTIM     (0x0f << 16)    /* Switch closure time */
 114#define                 AT91_ADC_TSMR_SCTIM_(x)         ((x) << 16)
 115#define         AT91_ADC_TSMR_PENDBC    (0x0f << 28)    /* Pen Debounce time */
 116#define                 AT91_ADC_TSMR_PENDBC_(x)        ((x) << 28)
 117#define         AT91_ADC_TSMR_NOTSDMA   (1 << 22)       /* No Touchscreen DMA */
 118#define         AT91_ADC_TSMR_PENDET_DIS        (0 << 24)       /* Pen contact detection disable */
 119#define         AT91_ADC_TSMR_PENDET_ENA        (1 << 24)       /* Pen contact detection enable */
 120
 121#define AT91_ADC_TSXPOSR        0xB4
 122#define AT91_ADC_TSYPOSR        0xB8
 123#define AT91_ADC_TSPRESSR       0xBC
 124
 125#define AT91_ADC_TRGR_9260      AT91_ADC_MR
 126#define AT91_ADC_TRGR_9G45      0x08
 127#define AT91_ADC_TRGR_9X5       0xC0
 128
 129/* Trigger Register bit field */
 130#define         AT91_ADC_TRGR_TRGPER    (0xffff << 16)
 131#define                 AT91_ADC_TRGR_TRGPER_(x)        ((x) << 16)
 132#define         AT91_ADC_TRGR_TRGMOD    (0x7 << 0)
 133#define                 AT91_ADC_TRGR_NONE              (0 << 0)
 134#define                 AT91_ADC_TRGR_MOD_PERIOD_TRIG   (5 << 0)
 135
 136#define AT91_ADC_CHAN(st, ch) \
 137        (st->registers->channel_base + (ch * 4))
 138#define at91_adc_readl(st, reg) \
 139        (readl_relaxed(st->reg_base + reg))
 140#define at91_adc_writel(st, reg, val) \
 141        (writel_relaxed(val, st->reg_base + reg))
 142
 143#define DRIVER_NAME             "at91_adc"
 144#define MAX_POS_BITS            12
 145
 146#define TOUCH_SAMPLE_PERIOD_US          2000    /* 2ms */
 147#define TOUCH_PEN_DETECT_DEBOUNCE_US    200
 148
 149#define MAX_RLPOS_BITS         10
 150#define TOUCH_SAMPLE_PERIOD_US_RL      10000   /* 10ms, the SoC can't keep up with 2ms */
 151#define TOUCH_SHTIM                    0xa
 152#define TOUCH_SCTIM_US          10              /* 10us for the Touchscreen Switches Closure Time */
 153
 154enum atmel_adc_ts_type {
 155        ATMEL_ADC_TOUCHSCREEN_NONE = 0,
 156        ATMEL_ADC_TOUCHSCREEN_4WIRE = 4,
 157        ATMEL_ADC_TOUCHSCREEN_5WIRE = 5,
 158};
 159
 160/**
 161 * struct at91_adc_trigger - description of triggers
 162 * @name:               name of the trigger advertised to the user
 163 * @value:              value to set in the ADC's trigger setup register
 164 *                      to enable the trigger
 165 * @is_external:        Does the trigger rely on an external pin?
 166 */
 167struct at91_adc_trigger {
 168        const char      *name;
 169        u8              value;
 170        bool            is_external;
 171};
 172
 173/**
 174 * struct at91_adc_reg_desc - Various informations relative to registers
 175 * @channel_base:       Base offset for the channel data registers
 176 * @drdy_mask:          Mask of the DRDY field in the relevant registers
 177 *                      (Interruptions registers mostly)
 178 * @status_register:    Offset of the Interrupt Status Register
 179 * @trigger_register:   Offset of the Trigger setup register
 180 * @mr_prescal_mask:    Mask of the PRESCAL field in the adc MR register
 181 * @mr_startup_mask:    Mask of the STARTUP field in the adc MR register
 182 */
 183struct at91_adc_reg_desc {
 184        u8      channel_base;
 185        u32     drdy_mask;
 186        u8      status_register;
 187        u8      trigger_register;
 188        u32     mr_prescal_mask;
 189        u32     mr_startup_mask;
 190};
 191
 192struct at91_adc_caps {
 193        bool    has_ts;         /* Support touch screen */
 194        bool    has_tsmr;       /* only at91sam9x5, sama5d3 have TSMR reg */
 195        /*
 196         * Numbers of sampling data will be averaged. Can be 0~3.
 197         * Hardware can average (2 ^ ts_filter_average) sample data.
 198         */
 199        u8      ts_filter_average;
 200        /* Pen Detection input pull-up resistor, can be 0~3 */
 201        u8      ts_pen_detect_sensitivity;
 202
 203        /* startup time calculate function */
 204        u32 (*calc_startup_ticks)(u32 startup_time, u32 adc_clk_khz);
 205
 206        u8      num_channels;
 207
 208        u8      low_res_bits;
 209        u8      high_res_bits;
 210        u32     trigger_number;
 211        const struct at91_adc_trigger *triggers;
 212        struct at91_adc_reg_desc registers;
 213};
 214
 215struct at91_adc_state {
 216        struct clk              *adc_clk;
 217        u16                     *buffer;
 218        unsigned long           channels_mask;
 219        struct clk              *clk;
 220        bool                    done;
 221        int                     irq;
 222        u16                     last_value;
 223        int                     chnb;
 224        struct mutex            lock;
 225        u8                      num_channels;
 226        void __iomem            *reg_base;
 227        const struct at91_adc_reg_desc *registers;
 228        u32                     startup_time;
 229        u8                      sample_hold_time;
 230        bool                    sleep_mode;
 231        struct iio_trigger      **trig;
 232        bool                    use_external;
 233        u32                     vref_mv;
 234        u32                     res;            /* resolution used for convertions */
 235        wait_queue_head_t       wq_data_avail;
 236        const struct at91_adc_caps      *caps;
 237
 238        /*
 239         * Following ADC channels are shared by touchscreen:
 240         *
 241         * CH0 -- Touch screen XP/UL
 242         * CH1 -- Touch screen XM/UR
 243         * CH2 -- Touch screen YP/LL
 244         * CH3 -- Touch screen YM/Sense
 245         * CH4 -- Touch screen LR(5-wire only)
 246         *
 247         * The bitfields below represents the reserved channel in the
 248         * touchscreen mode.
 249         */
 250#define CHAN_MASK_TOUCHSCREEN_4WIRE     (0xf << 0)
 251#define CHAN_MASK_TOUCHSCREEN_5WIRE     (0x1f << 0)
 252        enum atmel_adc_ts_type  touchscreen_type;
 253        struct input_dev        *ts_input;
 254
 255        u16                     ts_sample_period_val;
 256        u32                     ts_pressure_threshold;
 257        u16                     ts_pendbc;
 258
 259        bool                    ts_bufferedmeasure;
 260        u32                     ts_prev_absx;
 261        u32                     ts_prev_absy;
 262};
 263
 264static irqreturn_t at91_adc_trigger_handler(int irq, void *p)
 265{
 266        struct iio_poll_func *pf = p;
 267        struct iio_dev *idev = pf->indio_dev;
 268        struct at91_adc_state *st = iio_priv(idev);
 269        struct iio_chan_spec const *chan;
 270        int i, j = 0;
 271
 272        for (i = 0; i < idev->masklength; i++) {
 273                if (!test_bit(i, idev->active_scan_mask))
 274                        continue;
 275                chan = idev->channels + i;
 276                st->buffer[j] = at91_adc_readl(st, AT91_ADC_CHAN(st, chan->channel));
 277                j++;
 278        }
 279
 280        iio_push_to_buffers_with_timestamp(idev, st->buffer, pf->timestamp);
 281
 282        iio_trigger_notify_done(idev->trig);
 283
 284        /* Needed to ACK the DRDY interruption */
 285        at91_adc_readl(st, AT91_ADC_LCDR);
 286
 287        enable_irq(st->irq);
 288
 289        return IRQ_HANDLED;
 290}
 291
 292/* Handler for classic adc channel eoc trigger */
 293static void handle_adc_eoc_trigger(int irq, struct iio_dev *idev)
 294{
 295        struct at91_adc_state *st = iio_priv(idev);
 296
 297        if (iio_buffer_enabled(idev)) {
 298                disable_irq_nosync(irq);
 299                iio_trigger_poll(idev->trig);
 300        } else {
 301                st->last_value = at91_adc_readl(st, AT91_ADC_CHAN(st, st->chnb));
 302                /* Needed to ACK the DRDY interruption */
 303                at91_adc_readl(st, AT91_ADC_LCDR);
 304                st->done = true;
 305                wake_up_interruptible(&st->wq_data_avail);
 306        }
 307}
 308
 309static int at91_ts_sample(struct iio_dev *idev)
 310{
 311        struct at91_adc_state *st = iio_priv(idev);
 312        unsigned int xscale, yscale, reg, z1, z2;
 313        unsigned int x, y, pres, xpos, ypos;
 314        unsigned int rxp = 1;
 315        unsigned int factor = 1000;
 316
 317        unsigned int xyz_mask_bits = st->res;
 318        unsigned int xyz_mask = (1 << xyz_mask_bits) - 1;
 319
 320        /* calculate position */
 321        /* x position = (x / xscale) * max, max = 2^MAX_POS_BITS - 1 */
 322        reg = at91_adc_readl(st, AT91_ADC_TSXPOSR);
 323        xpos = reg & xyz_mask;
 324        x = (xpos << MAX_POS_BITS) - xpos;
 325        xscale = (reg >> 16) & xyz_mask;
 326        if (xscale == 0) {
 327                dev_err(&idev->dev, "Error: xscale == 0!\n");
 328                return -1;
 329        }
 330        x /= xscale;
 331
 332        /* y position = (y / yscale) * max, max = 2^MAX_POS_BITS - 1 */
 333        reg = at91_adc_readl(st, AT91_ADC_TSYPOSR);
 334        ypos = reg & xyz_mask;
 335        y = (ypos << MAX_POS_BITS) - ypos;
 336        yscale = (reg >> 16) & xyz_mask;
 337        if (yscale == 0) {
 338                dev_err(&idev->dev, "Error: yscale == 0!\n");
 339                return -1;
 340        }
 341        y /= yscale;
 342
 343        /* calculate the pressure */
 344        reg = at91_adc_readl(st, AT91_ADC_TSPRESSR);
 345        z1 = reg & xyz_mask;
 346        z2 = (reg >> 16) & xyz_mask;
 347
 348        if (z1 != 0)
 349                pres = rxp * (x * factor / 1024) * (z2 * factor / z1 - factor)
 350                        / factor;
 351        else
 352                pres = st->ts_pressure_threshold;       /* no pen contacted */
 353
 354        dev_dbg(&idev->dev, "xpos = %d, xscale = %d, ypos = %d, yscale = %d, z1 = %d, z2 = %d, press = %d\n",
 355                                xpos, xscale, ypos, yscale, z1, z2, pres);
 356
 357        if (pres < st->ts_pressure_threshold) {
 358                dev_dbg(&idev->dev, "x = %d, y = %d, pressure = %d\n",
 359                                        x, y, pres / factor);
 360                input_report_abs(st->ts_input, ABS_X, x);
 361                input_report_abs(st->ts_input, ABS_Y, y);
 362                input_report_abs(st->ts_input, ABS_PRESSURE, pres);
 363                input_report_key(st->ts_input, BTN_TOUCH, 1);
 364                input_sync(st->ts_input);
 365        } else {
 366                dev_dbg(&idev->dev, "pressure too low: not reporting\n");
 367        }
 368
 369        return 0;
 370}
 371
 372static irqreturn_t at91_adc_rl_interrupt(int irq, void *private)
 373{
 374        struct iio_dev *idev = private;
 375        struct at91_adc_state *st = iio_priv(idev);
 376        u32 status = at91_adc_readl(st, st->registers->status_register);
 377        unsigned int reg;
 378
 379        status &= at91_adc_readl(st, AT91_ADC_IMR);
 380        if (status & GENMASK(st->num_channels - 1, 0))
 381                handle_adc_eoc_trigger(irq, idev);
 382
 383        if (status & AT91RL_ADC_IER_PEN) {
 384                /* Disabling pen debounce is required to get a NOPEN irq */
 385                reg = at91_adc_readl(st, AT91_ADC_MR);
 386                reg &= ~AT91_ADC_PENDBC;
 387                at91_adc_writel(st, AT91_ADC_MR, reg);
 388
 389                at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_PEN);
 390                at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_NOPEN
 391                                | AT91_ADC_EOC(3));
 392                /* Set up period trigger for sampling */
 393                at91_adc_writel(st, st->registers->trigger_register,
 394                        AT91_ADC_TRGR_MOD_PERIOD_TRIG |
 395                        AT91_ADC_TRGR_TRGPER_(st->ts_sample_period_val));
 396        } else if (status & AT91RL_ADC_IER_NOPEN) {
 397                reg = at91_adc_readl(st, AT91_ADC_MR);
 398                reg |= AT91_ADC_PENDBC_(st->ts_pendbc) & AT91_ADC_PENDBC;
 399                at91_adc_writel(st, AT91_ADC_MR, reg);
 400                at91_adc_writel(st, st->registers->trigger_register,
 401                        AT91_ADC_TRGR_NONE);
 402
 403                at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_NOPEN
 404                                | AT91_ADC_EOC(3));
 405                at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_PEN);
 406                st->ts_bufferedmeasure = false;
 407                input_report_key(st->ts_input, BTN_TOUCH, 0);
 408                input_sync(st->ts_input);
 409        } else if (status & AT91_ADC_EOC(3) && st->ts_input) {
 410                /* Conversion finished and we've a touchscreen */
 411                if (st->ts_bufferedmeasure) {
 412                        /*
 413                         * Last measurement is always discarded, since it can
 414                         * be erroneous.
 415                         * Always report previous measurement
 416                         */
 417                        input_report_abs(st->ts_input, ABS_X, st->ts_prev_absx);
 418                        input_report_abs(st->ts_input, ABS_Y, st->ts_prev_absy);
 419                        input_report_key(st->ts_input, BTN_TOUCH, 1);
 420                        input_sync(st->ts_input);
 421                } else
 422                        st->ts_bufferedmeasure = true;
 423
 424                /* Now make new measurement */
 425                st->ts_prev_absx = at91_adc_readl(st, AT91_ADC_CHAN(st, 3))
 426                                   << MAX_RLPOS_BITS;
 427                st->ts_prev_absx /= at91_adc_readl(st, AT91_ADC_CHAN(st, 2));
 428
 429                st->ts_prev_absy = at91_adc_readl(st, AT91_ADC_CHAN(st, 1))
 430                                   << MAX_RLPOS_BITS;
 431                st->ts_prev_absy /= at91_adc_readl(st, AT91_ADC_CHAN(st, 0));
 432        }
 433
 434        return IRQ_HANDLED;
 435}
 436
 437static irqreturn_t at91_adc_9x5_interrupt(int irq, void *private)
 438{
 439        struct iio_dev *idev = private;
 440        struct at91_adc_state *st = iio_priv(idev);
 441        u32 status = at91_adc_readl(st, st->registers->status_register);
 442        const uint32_t ts_data_irq_mask =
 443                AT91_ADC_IER_XRDY |
 444                AT91_ADC_IER_YRDY |
 445                AT91_ADC_IER_PRDY;
 446
 447        if (status & GENMASK(st->num_channels - 1, 0))
 448                handle_adc_eoc_trigger(irq, idev);
 449
 450        if (status & AT91_ADC_IER_PEN) {
 451                at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_PEN);
 452                at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_NOPEN |
 453                        ts_data_irq_mask);
 454                /* Set up period trigger for sampling */
 455                at91_adc_writel(st, st->registers->trigger_register,
 456                        AT91_ADC_TRGR_MOD_PERIOD_TRIG |
 457                        AT91_ADC_TRGR_TRGPER_(st->ts_sample_period_val));
 458        } else if (status & AT91_ADC_IER_NOPEN) {
 459                at91_adc_writel(st, st->registers->trigger_register, 0);
 460                at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_NOPEN |
 461                        ts_data_irq_mask);
 462                at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_PEN);
 463
 464                input_report_key(st->ts_input, BTN_TOUCH, 0);
 465                input_sync(st->ts_input);
 466        } else if ((status & ts_data_irq_mask) == ts_data_irq_mask) {
 467                /* Now all touchscreen data is ready */
 468
 469                if (status & AT91_ADC_ISR_PENS) {
 470                        /* validate data by pen contact */
 471                        at91_ts_sample(idev);
 472                } else {
 473                        /* triggered by event that is no pen contact, just read
 474                         * them to clean the interrupt and discard all.
 475                         */
 476                        at91_adc_readl(st, AT91_ADC_TSXPOSR);
 477                        at91_adc_readl(st, AT91_ADC_TSYPOSR);
 478                        at91_adc_readl(st, AT91_ADC_TSPRESSR);
 479                }
 480        }
 481
 482        return IRQ_HANDLED;
 483}
 484
 485static int at91_adc_channel_init(struct iio_dev *idev)
 486{
 487        struct at91_adc_state *st = iio_priv(idev);
 488        struct iio_chan_spec *chan_array, *timestamp;
 489        int bit, idx = 0;
 490        unsigned long rsvd_mask = 0;
 491
 492        /* If touchscreen is enable, then reserve the adc channels */
 493        if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_4WIRE)
 494                rsvd_mask = CHAN_MASK_TOUCHSCREEN_4WIRE;
 495        else if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_5WIRE)
 496                rsvd_mask = CHAN_MASK_TOUCHSCREEN_5WIRE;
 497
 498        /* set up the channel mask to reserve touchscreen channels */
 499        st->channels_mask &= ~rsvd_mask;
 500
 501        idev->num_channels = bitmap_weight(&st->channels_mask,
 502                                           st->num_channels) + 1;
 503
 504        chan_array = devm_kzalloc(&idev->dev,
 505                                  ((idev->num_channels + 1) *
 506                                        sizeof(struct iio_chan_spec)),
 507                                  GFP_KERNEL);
 508
 509        if (!chan_array)
 510                return -ENOMEM;
 511
 512        for_each_set_bit(bit, &st->channels_mask, st->num_channels) {
 513                struct iio_chan_spec *chan = chan_array + idx;
 514
 515                chan->type = IIO_VOLTAGE;
 516                chan->indexed = 1;
 517                chan->channel = bit;
 518                chan->scan_index = idx;
 519                chan->scan_type.sign = 'u';
 520                chan->scan_type.realbits = st->res;
 521                chan->scan_type.storagebits = 16;
 522                chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
 523                chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
 524                idx++;
 525        }
 526        timestamp = chan_array + idx;
 527
 528        timestamp->type = IIO_TIMESTAMP;
 529        timestamp->channel = -1;
 530        timestamp->scan_index = idx;
 531        timestamp->scan_type.sign = 's';
 532        timestamp->scan_type.realbits = 64;
 533        timestamp->scan_type.storagebits = 64;
 534
 535        idev->channels = chan_array;
 536        return idev->num_channels;
 537}
 538
 539static int at91_adc_get_trigger_value_by_name(struct iio_dev *idev,
 540                                             const struct at91_adc_trigger *triggers,
 541                                             const char *trigger_name)
 542{
 543        struct at91_adc_state *st = iio_priv(idev);
 544        int i;
 545
 546        for (i = 0; i < st->caps->trigger_number; i++) {
 547                char *name = kasprintf(GFP_KERNEL,
 548                                "%s-dev%d-%s",
 549                                idev->name,
 550                                idev->id,
 551                                triggers[i].name);
 552                if (!name)
 553                        return -ENOMEM;
 554
 555                if (strcmp(trigger_name, name) == 0) {
 556                        kfree(name);
 557                        if (triggers[i].value == 0)
 558                                return -EINVAL;
 559                        return triggers[i].value;
 560                }
 561
 562                kfree(name);
 563        }
 564
 565        return -EINVAL;
 566}
 567
 568static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state)
 569{
 570        struct iio_dev *idev = iio_trigger_get_drvdata(trig);
 571        struct at91_adc_state *st = iio_priv(idev);
 572        const struct at91_adc_reg_desc *reg = st->registers;
 573        u32 status = at91_adc_readl(st, reg->trigger_register);
 574        int value;
 575        u8 bit;
 576
 577        value = at91_adc_get_trigger_value_by_name(idev,
 578                                                   st->caps->triggers,
 579                                                   idev->trig->name);
 580        if (value < 0)
 581                return value;
 582
 583        if (state) {
 584                st->buffer = kmalloc(idev->scan_bytes, GFP_KERNEL);
 585                if (st->buffer == NULL)
 586                        return -ENOMEM;
 587
 588                at91_adc_writel(st, reg->trigger_register,
 589                                status | value);
 590
 591                for_each_set_bit(bit, idev->active_scan_mask,
 592                                 st->num_channels) {
 593                        struct iio_chan_spec const *chan = idev->channels + bit;
 594                        at91_adc_writel(st, AT91_ADC_CHER,
 595                                        AT91_ADC_CH(chan->channel));
 596                }
 597
 598                at91_adc_writel(st, AT91_ADC_IER, reg->drdy_mask);
 599
 600        } else {
 601                at91_adc_writel(st, AT91_ADC_IDR, reg->drdy_mask);
 602
 603                at91_adc_writel(st, reg->trigger_register,
 604                                status & ~value);
 605
 606                for_each_set_bit(bit, idev->active_scan_mask,
 607                                 st->num_channels) {
 608                        struct iio_chan_spec const *chan = idev->channels + bit;
 609                        at91_adc_writel(st, AT91_ADC_CHDR,
 610                                        AT91_ADC_CH(chan->channel));
 611                }
 612                kfree(st->buffer);
 613        }
 614
 615        return 0;
 616}
 617
 618static const struct iio_trigger_ops at91_adc_trigger_ops = {
 619        .set_trigger_state = &at91_adc_configure_trigger,
 620};
 621
 622static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev,
 623                                                     const struct at91_adc_trigger *trigger)
 624{
 625        struct iio_trigger *trig;
 626        int ret;
 627
 628        trig = iio_trigger_alloc("%s-dev%d-%s", idev->name,
 629                                 idev->id, trigger->name);
 630        if (trig == NULL)
 631                return NULL;
 632
 633        trig->dev.parent = idev->dev.parent;
 634        iio_trigger_set_drvdata(trig, idev);
 635        trig->ops = &at91_adc_trigger_ops;
 636
 637        ret = iio_trigger_register(trig);
 638        if (ret)
 639                return NULL;
 640
 641        return trig;
 642}
 643
 644static int at91_adc_trigger_init(struct iio_dev *idev)
 645{
 646        struct at91_adc_state *st = iio_priv(idev);
 647        int i, ret;
 648
 649        st->trig = devm_kcalloc(&idev->dev,
 650                                st->caps->trigger_number, sizeof(*st->trig),
 651                                GFP_KERNEL);
 652
 653        if (st->trig == NULL) {
 654                ret = -ENOMEM;
 655                goto error_ret;
 656        }
 657
 658        for (i = 0; i < st->caps->trigger_number; i++) {
 659                if (st->caps->triggers[i].is_external && !(st->use_external))
 660                        continue;
 661
 662                st->trig[i] = at91_adc_allocate_trigger(idev,
 663                                                        st->caps->triggers + i);
 664                if (st->trig[i] == NULL) {
 665                        dev_err(&idev->dev,
 666                                "Could not allocate trigger %d\n", i);
 667                        ret = -ENOMEM;
 668                        goto error_trigger;
 669                }
 670        }
 671
 672        return 0;
 673
 674error_trigger:
 675        for (i--; i >= 0; i--) {
 676                iio_trigger_unregister(st->trig[i]);
 677                iio_trigger_free(st->trig[i]);
 678        }
 679error_ret:
 680        return ret;
 681}
 682
 683static void at91_adc_trigger_remove(struct iio_dev *idev)
 684{
 685        struct at91_adc_state *st = iio_priv(idev);
 686        int i;
 687
 688        for (i = 0; i < st->caps->trigger_number; i++) {
 689                iio_trigger_unregister(st->trig[i]);
 690                iio_trigger_free(st->trig[i]);
 691        }
 692}
 693
 694static int at91_adc_buffer_init(struct iio_dev *idev)
 695{
 696        return iio_triggered_buffer_setup(idev, &iio_pollfunc_store_time,
 697                &at91_adc_trigger_handler, NULL);
 698}
 699
 700static void at91_adc_buffer_remove(struct iio_dev *idev)
 701{
 702        iio_triggered_buffer_cleanup(idev);
 703}
 704
 705static int at91_adc_read_raw(struct iio_dev *idev,
 706                             struct iio_chan_spec const *chan,
 707                             int *val, int *val2, long mask)
 708{
 709        struct at91_adc_state *st = iio_priv(idev);
 710        int ret;
 711
 712        switch (mask) {
 713        case IIO_CHAN_INFO_RAW:
 714                mutex_lock(&st->lock);
 715
 716                st->chnb = chan->channel;
 717                at91_adc_writel(st, AT91_ADC_CHER,
 718                                AT91_ADC_CH(chan->channel));
 719                at91_adc_writel(st, AT91_ADC_IER, BIT(chan->channel));
 720                at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_START);
 721
 722                ret = wait_event_interruptible_timeout(st->wq_data_avail,
 723                                                       st->done,
 724                                                       msecs_to_jiffies(1000));
 725
 726                /* Disable interrupts, regardless if adc conversion was
 727                 * successful or not
 728                 */
 729                at91_adc_writel(st, AT91_ADC_CHDR,
 730                                AT91_ADC_CH(chan->channel));
 731                at91_adc_writel(st, AT91_ADC_IDR, BIT(chan->channel));
 732
 733                if (ret > 0) {
 734                        /* a valid conversion took place */
 735                        *val = st->last_value;
 736                        st->last_value = 0;
 737                        st->done = false;
 738                        ret = IIO_VAL_INT;
 739                } else if (ret == 0) {
 740                        /* conversion timeout */
 741                        dev_err(&idev->dev, "ADC Channel %d timeout.\n",
 742                                chan->channel);
 743                        ret = -ETIMEDOUT;
 744                }
 745
 746                mutex_unlock(&st->lock);
 747                return ret;
 748
 749        case IIO_CHAN_INFO_SCALE:
 750                *val = st->vref_mv;
 751                *val2 = chan->scan_type.realbits;
 752                return IIO_VAL_FRACTIONAL_LOG2;
 753        default:
 754                break;
 755        }
 756        return -EINVAL;
 757}
 758
 759
 760static u32 calc_startup_ticks_9260(u32 startup_time, u32 adc_clk_khz)
 761{
 762        /*
 763         * Number of ticks needed to cover the startup time of the ADC
 764         * as defined in the electrical characteristics of the board,
 765         * divided by 8. The formula thus is :
 766         *   Startup Time = (ticks + 1) * 8 / ADC Clock
 767         */
 768        return round_up((startup_time * adc_clk_khz / 1000) - 1, 8) / 8;
 769}
 770
 771static u32 calc_startup_ticks_9x5(u32 startup_time, u32 adc_clk_khz)
 772{
 773        /*
 774         * For sama5d3x and at91sam9x5, the formula changes to:
 775         * Startup Time = <lookup_table_value> / ADC Clock
 776         */
 777        static const int startup_lookup[] = {
 778                0,   8,   16,  24,
 779                64,  80,  96,  112,
 780                512, 576, 640, 704,
 781                768, 832, 896, 960
 782                };
 783        int i, size = ARRAY_SIZE(startup_lookup);
 784        unsigned int ticks;
 785
 786        ticks = startup_time * adc_clk_khz / 1000;
 787        for (i = 0; i < size; i++)
 788                if (ticks < startup_lookup[i])
 789                        break;
 790
 791        ticks = i;
 792        if (ticks == size)
 793                /* Reach the end of lookup table */
 794                ticks = size - 1;
 795
 796        return ticks;
 797}
 798
 799static int at91_adc_probe_dt_ts(struct device_node *node,
 800        struct at91_adc_state *st, struct device *dev)
 801{
 802        int ret;
 803        u32 prop;
 804
 805        ret = of_property_read_u32(node, "atmel,adc-ts-wires", &prop);
 806        if (ret) {
 807                dev_info(dev, "ADC Touch screen is disabled.\n");
 808                return 0;
 809        }
 810
 811        switch (prop) {
 812        case 4:
 813        case 5:
 814                st->touchscreen_type = prop;
 815                break;
 816        default:
 817                dev_err(dev, "Unsupported number of touchscreen wires (%d). Should be 4 or 5.\n", prop);
 818                return -EINVAL;
 819        }
 820
 821        if (!st->caps->has_tsmr)
 822                return 0;
 823        prop = 0;
 824        of_property_read_u32(node, "atmel,adc-ts-pressure-threshold", &prop);
 825        st->ts_pressure_threshold = prop;
 826        if (st->ts_pressure_threshold) {
 827                return 0;
 828        } else {
 829                dev_err(dev, "Invalid pressure threshold for the touchscreen\n");
 830                return -EINVAL;
 831        }
 832}
 833
 834static const struct iio_info at91_adc_info = {
 835        .read_raw = &at91_adc_read_raw,
 836};
 837
 838/* Touchscreen related functions */
 839static int atmel_ts_open(struct input_dev *dev)
 840{
 841        struct at91_adc_state *st = input_get_drvdata(dev);
 842
 843        if (st->caps->has_tsmr)
 844                at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_PEN);
 845        else
 846                at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_PEN);
 847        return 0;
 848}
 849
 850static void atmel_ts_close(struct input_dev *dev)
 851{
 852        struct at91_adc_state *st = input_get_drvdata(dev);
 853
 854        if (st->caps->has_tsmr)
 855                at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_PEN);
 856        else
 857                at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_PEN);
 858}
 859
 860static int at91_ts_hw_init(struct iio_dev *idev, u32 adc_clk_khz)
 861{
 862        struct at91_adc_state *st = iio_priv(idev);
 863        u32 reg = 0;
 864        u32 tssctim = 0;
 865        int i = 0;
 866
 867        /* a Pen Detect Debounce Time is necessary for the ADC Touch to avoid
 868         * pen detect noise.
 869         * The formula is : Pen Detect Debounce Time = (2 ^ pendbc) / ADCClock
 870         */
 871        st->ts_pendbc = round_up(TOUCH_PEN_DETECT_DEBOUNCE_US * adc_clk_khz /
 872                                 1000, 1);
 873
 874        while (st->ts_pendbc >> ++i)
 875                ;       /* Empty! Find the shift offset */
 876        if (abs(st->ts_pendbc - (1 << i)) < abs(st->ts_pendbc - (1 << (i - 1))))
 877                st->ts_pendbc = i;
 878        else
 879                st->ts_pendbc = i - 1;
 880
 881        if (!st->caps->has_tsmr) {
 882                reg = at91_adc_readl(st, AT91_ADC_MR);
 883                reg |= AT91_ADC_TSAMOD_TS_ONLY_MODE | AT91_ADC_PENDET;
 884
 885                reg |= AT91_ADC_PENDBC_(st->ts_pendbc) & AT91_ADC_PENDBC;
 886                at91_adc_writel(st, AT91_ADC_MR, reg);
 887
 888                reg = AT91_ADC_TSR_SHTIM_(TOUCH_SHTIM) & AT91_ADC_TSR_SHTIM;
 889                at91_adc_writel(st, AT91_ADC_TSR, reg);
 890
 891                st->ts_sample_period_val = round_up((TOUCH_SAMPLE_PERIOD_US_RL *
 892                                                    adc_clk_khz / 1000) - 1, 1);
 893
 894                return 0;
 895        }
 896
 897        /* Touchscreen Switches Closure time needed for allowing the value to
 898         * stabilize.
 899         * Switch Closure Time = (TSSCTIM * 4) ADCClock periods
 900         */
 901        tssctim = DIV_ROUND_UP(TOUCH_SCTIM_US * adc_clk_khz / 1000, 4);
 902        dev_dbg(&idev->dev, "adc_clk at: %d KHz, tssctim at: %d\n",
 903                adc_clk_khz, tssctim);
 904
 905        if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_4WIRE)
 906                reg = AT91_ADC_TSMR_TSMODE_4WIRE_PRESS;
 907        else
 908                reg = AT91_ADC_TSMR_TSMODE_5WIRE;
 909
 910        reg |= AT91_ADC_TSMR_SCTIM_(tssctim) & AT91_ADC_TSMR_SCTIM;
 911        reg |= AT91_ADC_TSMR_TSAV_(st->caps->ts_filter_average)
 912               & AT91_ADC_TSMR_TSAV;
 913        reg |= AT91_ADC_TSMR_PENDBC_(st->ts_pendbc) & AT91_ADC_TSMR_PENDBC;
 914        reg |= AT91_ADC_TSMR_NOTSDMA;
 915        reg |= AT91_ADC_TSMR_PENDET_ENA;
 916        reg |= 0x03 << 8;       /* TSFREQ, needs to be bigger than TSAV */
 917
 918        at91_adc_writel(st, AT91_ADC_TSMR, reg);
 919
 920        /* Change adc internal resistor value for better pen detection,
 921         * default value is 100 kOhm.
 922         * 0 = 200 kOhm, 1 = 150 kOhm, 2 = 100 kOhm, 3 = 50 kOhm
 923         * option only available on ES2 and higher
 924         */
 925        at91_adc_writel(st, AT91_ADC_ACR, st->caps->ts_pen_detect_sensitivity
 926                        & AT91_ADC_ACR_PENDETSENS);
 927
 928        /* Sample Period Time = (TRGPER + 1) / ADCClock */
 929        st->ts_sample_period_val = round_up((TOUCH_SAMPLE_PERIOD_US *
 930                        adc_clk_khz / 1000) - 1, 1);
 931
 932        return 0;
 933}
 934
 935static int at91_ts_register(struct iio_dev *idev,
 936                struct platform_device *pdev)
 937{
 938        struct at91_adc_state *st = iio_priv(idev);
 939        struct input_dev *input;
 940        int ret;
 941
 942        input = input_allocate_device();
 943        if (!input) {
 944                dev_err(&idev->dev, "Failed to allocate TS device!\n");
 945                return -ENOMEM;
 946        }
 947
 948        input->name = DRIVER_NAME;
 949        input->id.bustype = BUS_HOST;
 950        input->dev.parent = &pdev->dev;
 951        input->open = atmel_ts_open;
 952        input->close = atmel_ts_close;
 953
 954        __set_bit(EV_ABS, input->evbit);
 955        __set_bit(EV_KEY, input->evbit);
 956        __set_bit(BTN_TOUCH, input->keybit);
 957        if (st->caps->has_tsmr) {
 958                input_set_abs_params(input, ABS_X, 0, (1 << MAX_POS_BITS) - 1,
 959                                     0, 0);
 960                input_set_abs_params(input, ABS_Y, 0, (1 << MAX_POS_BITS) - 1,
 961                                     0, 0);
 962                input_set_abs_params(input, ABS_PRESSURE, 0, 0xffffff, 0, 0);
 963        } else {
 964                if (st->touchscreen_type != ATMEL_ADC_TOUCHSCREEN_4WIRE) {
 965                        dev_err(&pdev->dev,
 966                                "This touchscreen controller only support 4 wires\n");
 967                        ret = -EINVAL;
 968                        goto err;
 969                }
 970
 971                input_set_abs_params(input, ABS_X, 0, (1 << MAX_RLPOS_BITS) - 1,
 972                                     0, 0);
 973                input_set_abs_params(input, ABS_Y, 0, (1 << MAX_RLPOS_BITS) - 1,
 974                                     0, 0);
 975        }
 976
 977        st->ts_input = input;
 978        input_set_drvdata(input, st);
 979
 980        ret = input_register_device(input);
 981        if (ret)
 982                goto err;
 983
 984        return ret;
 985
 986err:
 987        input_free_device(st->ts_input);
 988        return ret;
 989}
 990
 991static void at91_ts_unregister(struct at91_adc_state *st)
 992{
 993        input_unregister_device(st->ts_input);
 994}
 995
 996static int at91_adc_probe(struct platform_device *pdev)
 997{
 998        unsigned int prsc, mstrclk, ticks, adc_clk, adc_clk_khz, shtim;
 999        struct device_node *node = pdev->dev.of_node;
1000        int ret;
1001        struct iio_dev *idev;
1002        struct at91_adc_state *st;
1003        u32 reg, prop;
1004        char *s;
1005
1006        idev = devm_iio_device_alloc(&pdev->dev, sizeof(struct at91_adc_state));
1007        if (!idev)
1008                return -ENOMEM;
1009
1010        st = iio_priv(idev);
1011
1012        st->caps = of_device_get_match_data(&pdev->dev);
1013
1014        st->use_external = of_property_read_bool(node, "atmel,adc-use-external-triggers");
1015
1016        if (of_property_read_u32(node, "atmel,adc-channels-used", &prop)) {
1017                dev_err(&idev->dev, "Missing adc-channels-used property in the DT.\n");
1018                return -EINVAL;
1019        }
1020        st->channels_mask = prop;
1021
1022        st->sleep_mode = of_property_read_bool(node, "atmel,adc-sleep-mode");
1023
1024        if (of_property_read_u32(node, "atmel,adc-startup-time", &prop)) {
1025                dev_err(&idev->dev, "Missing adc-startup-time property in the DT.\n");
1026                return -EINVAL;
1027        }
1028        st->startup_time = prop;
1029
1030        prop = 0;
1031        of_property_read_u32(node, "atmel,adc-sample-hold-time", &prop);
1032        st->sample_hold_time = prop;
1033
1034        if (of_property_read_u32(node, "atmel,adc-vref", &prop)) {
1035                dev_err(&idev->dev, "Missing adc-vref property in the DT.\n");
1036                return -EINVAL;
1037        }
1038        st->vref_mv = prop;
1039
1040        st->res = st->caps->high_res_bits;
1041        if (st->caps->low_res_bits &&
1042            !of_property_read_string(node, "atmel,adc-use-res", (const char **)&s)
1043            && !strcmp(s, "lowres"))
1044                st->res = st->caps->low_res_bits;
1045
1046        dev_info(&idev->dev, "Resolution used: %u bits\n", st->res);
1047
1048        st->registers = &st->caps->registers;
1049        st->num_channels = st->caps->num_channels;
1050
1051        /* Check if touchscreen is supported. */
1052        if (st->caps->has_ts) {
1053                ret = at91_adc_probe_dt_ts(node, st, &idev->dev);
1054                if (ret)
1055                        return ret;
1056        }
1057
1058        platform_set_drvdata(pdev, idev);
1059
1060        idev->name = dev_name(&pdev->dev);
1061        idev->modes = INDIO_DIRECT_MODE;
1062        idev->info = &at91_adc_info;
1063
1064        st->irq = platform_get_irq(pdev, 0);
1065        if (st->irq < 0)
1066                return -ENODEV;
1067
1068        st->reg_base = devm_platform_ioremap_resource(pdev, 0);
1069        if (IS_ERR(st->reg_base))
1070                return PTR_ERR(st->reg_base);
1071
1072
1073        /*
1074         * Disable all IRQs before setting up the handler
1075         */
1076        at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_SWRST);
1077        at91_adc_writel(st, AT91_ADC_IDR, 0xFFFFFFFF);
1078
1079        if (st->caps->has_tsmr)
1080                ret = request_irq(st->irq, at91_adc_9x5_interrupt, 0,
1081                                  pdev->dev.driver->name, idev);
1082        else
1083                ret = request_irq(st->irq, at91_adc_rl_interrupt, 0,
1084                                  pdev->dev.driver->name, idev);
1085        if (ret) {
1086                dev_err(&pdev->dev, "Failed to allocate IRQ.\n");
1087                return ret;
1088        }
1089
1090        st->clk = devm_clk_get(&pdev->dev, "adc_clk");
1091        if (IS_ERR(st->clk)) {
1092                dev_err(&pdev->dev, "Failed to get the clock.\n");
1093                ret = PTR_ERR(st->clk);
1094                goto error_free_irq;
1095        }
1096
1097        ret = clk_prepare_enable(st->clk);
1098        if (ret) {
1099                dev_err(&pdev->dev,
1100                        "Could not prepare or enable the clock.\n");
1101                goto error_free_irq;
1102        }
1103
1104        st->adc_clk = devm_clk_get(&pdev->dev, "adc_op_clk");
1105        if (IS_ERR(st->adc_clk)) {
1106                dev_err(&pdev->dev, "Failed to get the ADC clock.\n");
1107                ret = PTR_ERR(st->adc_clk);
1108                goto error_disable_clk;
1109        }
1110
1111        ret = clk_prepare_enable(st->adc_clk);
1112        if (ret) {
1113                dev_err(&pdev->dev,
1114                        "Could not prepare or enable the ADC clock.\n");
1115                goto error_disable_clk;
1116        }
1117
1118        /*
1119         * Prescaler rate computation using the formula from the Atmel's
1120         * datasheet : ADC Clock = MCK / ((Prescaler + 1) * 2), ADC Clock being
1121         * specified by the electrical characteristics of the board.
1122         */
1123        mstrclk = clk_get_rate(st->clk);
1124        adc_clk = clk_get_rate(st->adc_clk);
1125        adc_clk_khz = adc_clk / 1000;
1126
1127        dev_dbg(&pdev->dev, "Master clock is set as: %d Hz, adc_clk should set as: %d Hz\n",
1128                mstrclk, adc_clk);
1129
1130        prsc = (mstrclk / (2 * adc_clk)) - 1;
1131
1132        if (!st->startup_time) {
1133                dev_err(&pdev->dev, "No startup time available.\n");
1134                ret = -EINVAL;
1135                goto error_disable_adc_clk;
1136        }
1137        ticks = (*st->caps->calc_startup_ticks)(st->startup_time, adc_clk_khz);
1138
1139        /*
1140         * a minimal Sample and Hold Time is necessary for the ADC to guarantee
1141         * the best converted final value between two channels selection
1142         * The formula thus is : Sample and Hold Time = (shtim + 1) / ADCClock
1143         */
1144        if (st->sample_hold_time > 0)
1145                shtim = round_up((st->sample_hold_time * adc_clk_khz / 1000)
1146                                 - 1, 1);
1147        else
1148                shtim = 0;
1149
1150        reg = AT91_ADC_PRESCAL_(prsc) & st->registers->mr_prescal_mask;
1151        reg |= AT91_ADC_STARTUP_(ticks) & st->registers->mr_startup_mask;
1152        if (st->res == st->caps->low_res_bits)
1153                reg |= AT91_ADC_LOWRES;
1154        if (st->sleep_mode)
1155                reg |= AT91_ADC_SLEEP;
1156        reg |= AT91_ADC_SHTIM_(shtim) & AT91_ADC_SHTIM;
1157        at91_adc_writel(st, AT91_ADC_MR, reg);
1158
1159        /* Setup the ADC channels available on the board */
1160        ret = at91_adc_channel_init(idev);
1161        if (ret < 0) {
1162                dev_err(&pdev->dev, "Couldn't initialize the channels.\n");
1163                goto error_disable_adc_clk;
1164        }
1165
1166        init_waitqueue_head(&st->wq_data_avail);
1167        mutex_init(&st->lock);
1168
1169        /*
1170         * Since touch screen will set trigger register as period trigger. So
1171         * when touch screen is enabled, then we have to disable hardware
1172         * trigger for classic adc.
1173         */
1174        if (!st->touchscreen_type) {
1175                ret = at91_adc_buffer_init(idev);
1176                if (ret < 0) {
1177                        dev_err(&pdev->dev, "Couldn't initialize the buffer.\n");
1178                        goto error_disable_adc_clk;
1179                }
1180
1181                ret = at91_adc_trigger_init(idev);
1182                if (ret < 0) {
1183                        dev_err(&pdev->dev, "Couldn't setup the triggers.\n");
1184                        at91_adc_buffer_remove(idev);
1185                        goto error_disable_adc_clk;
1186                }
1187        } else {
1188                ret = at91_ts_register(idev, pdev);
1189                if (ret)
1190                        goto error_disable_adc_clk;
1191
1192                at91_ts_hw_init(idev, adc_clk_khz);
1193        }
1194
1195        ret = iio_device_register(idev);
1196        if (ret < 0) {
1197                dev_err(&pdev->dev, "Couldn't register the device.\n");
1198                goto error_iio_device_register;
1199        }
1200
1201        return 0;
1202
1203error_iio_device_register:
1204        if (!st->touchscreen_type) {
1205                at91_adc_trigger_remove(idev);
1206                at91_adc_buffer_remove(idev);
1207        } else {
1208                at91_ts_unregister(st);
1209        }
1210error_disable_adc_clk:
1211        clk_disable_unprepare(st->adc_clk);
1212error_disable_clk:
1213        clk_disable_unprepare(st->clk);
1214error_free_irq:
1215        free_irq(st->irq, idev);
1216        return ret;
1217}
1218
1219static int at91_adc_remove(struct platform_device *pdev)
1220{
1221        struct iio_dev *idev = platform_get_drvdata(pdev);
1222        struct at91_adc_state *st = iio_priv(idev);
1223
1224        iio_device_unregister(idev);
1225        if (!st->touchscreen_type) {
1226                at91_adc_trigger_remove(idev);
1227                at91_adc_buffer_remove(idev);
1228        } else {
1229                at91_ts_unregister(st);
1230        }
1231        clk_disable_unprepare(st->adc_clk);
1232        clk_disable_unprepare(st->clk);
1233        free_irq(st->irq, idev);
1234
1235        return 0;
1236}
1237
1238#ifdef CONFIG_PM_SLEEP
1239static int at91_adc_suspend(struct device *dev)
1240{
1241        struct iio_dev *idev = dev_get_drvdata(dev);
1242        struct at91_adc_state *st = iio_priv(idev);
1243
1244        pinctrl_pm_select_sleep_state(dev);
1245        clk_disable_unprepare(st->clk);
1246
1247        return 0;
1248}
1249
1250static int at91_adc_resume(struct device *dev)
1251{
1252        struct iio_dev *idev = dev_get_drvdata(dev);
1253        struct at91_adc_state *st = iio_priv(idev);
1254
1255        clk_prepare_enable(st->clk);
1256        pinctrl_pm_select_default_state(dev);
1257
1258        return 0;
1259}
1260#endif
1261
1262static SIMPLE_DEV_PM_OPS(at91_adc_pm_ops, at91_adc_suspend, at91_adc_resume);
1263
1264static const struct at91_adc_trigger at91sam9260_triggers[] = {
1265        { .name = "timer-counter-0", .value = 0x1 },
1266        { .name = "timer-counter-1", .value = 0x3 },
1267        { .name = "timer-counter-2", .value = 0x5 },
1268        { .name = "external", .value = 0xd, .is_external = true },
1269};
1270
1271static struct at91_adc_caps at91sam9260_caps = {
1272        .calc_startup_ticks = calc_startup_ticks_9260,
1273        .num_channels = 4,
1274        .low_res_bits = 8,
1275        .high_res_bits = 10,
1276        .registers = {
1277                .channel_base = AT91_ADC_CHR(0),
1278                .drdy_mask = AT91_ADC_DRDY,
1279                .status_register = AT91_ADC_SR,
1280                .trigger_register = AT91_ADC_TRGR_9260,
1281                .mr_prescal_mask = AT91_ADC_PRESCAL_9260,
1282                .mr_startup_mask = AT91_ADC_STARTUP_9260,
1283        },
1284        .triggers = at91sam9260_triggers,
1285        .trigger_number = ARRAY_SIZE(at91sam9260_triggers),
1286};
1287
1288static const struct at91_adc_trigger at91sam9x5_triggers[] = {
1289        { .name = "external-rising", .value = 0x1, .is_external = true },
1290        { .name = "external-falling", .value = 0x2, .is_external = true },
1291        { .name = "external-any", .value = 0x3, .is_external = true },
1292        { .name = "continuous", .value = 0x6 },
1293};
1294
1295static struct at91_adc_caps at91sam9rl_caps = {
1296        .has_ts = true,
1297        .calc_startup_ticks = calc_startup_ticks_9260,  /* same as 9260 */
1298        .num_channels = 6,
1299        .low_res_bits = 8,
1300        .high_res_bits = 10,
1301        .registers = {
1302                .channel_base = AT91_ADC_CHR(0),
1303                .drdy_mask = AT91_ADC_DRDY,
1304                .status_register = AT91_ADC_SR,
1305                .trigger_register = AT91_ADC_TRGR_9G45,
1306                .mr_prescal_mask = AT91_ADC_PRESCAL_9260,
1307                .mr_startup_mask = AT91_ADC_STARTUP_9G45,
1308        },
1309        .triggers = at91sam9x5_triggers,
1310        .trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
1311};
1312
1313static struct at91_adc_caps at91sam9g45_caps = {
1314        .has_ts = true,
1315        .calc_startup_ticks = calc_startup_ticks_9260,  /* same as 9260 */
1316        .num_channels = 8,
1317        .low_res_bits = 8,
1318        .high_res_bits = 10,
1319        .registers = {
1320                .channel_base = AT91_ADC_CHR(0),
1321                .drdy_mask = AT91_ADC_DRDY,
1322                .status_register = AT91_ADC_SR,
1323                .trigger_register = AT91_ADC_TRGR_9G45,
1324                .mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
1325                .mr_startup_mask = AT91_ADC_STARTUP_9G45,
1326        },
1327        .triggers = at91sam9x5_triggers,
1328        .trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
1329};
1330
1331static struct at91_adc_caps at91sam9x5_caps = {
1332        .has_ts = true,
1333        .has_tsmr = true,
1334        .ts_filter_average = 3,
1335        .ts_pen_detect_sensitivity = 2,
1336        .calc_startup_ticks = calc_startup_ticks_9x5,
1337        .num_channels = 12,
1338        .low_res_bits = 8,
1339        .high_res_bits = 10,
1340        .registers = {
1341                .channel_base = AT91_ADC_CDR0_9X5,
1342                .drdy_mask = AT91_ADC_SR_DRDY_9X5,
1343                .status_register = AT91_ADC_SR_9X5,
1344                .trigger_register = AT91_ADC_TRGR_9X5,
1345                /* prescal mask is same as 9G45 */
1346                .mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
1347                .mr_startup_mask = AT91_ADC_STARTUP_9X5,
1348        },
1349        .triggers = at91sam9x5_triggers,
1350        .trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
1351};
1352
1353static struct at91_adc_caps sama5d3_caps = {
1354        .has_ts = true,
1355        .has_tsmr = true,
1356        .ts_filter_average = 3,
1357        .ts_pen_detect_sensitivity = 2,
1358        .calc_startup_ticks = calc_startup_ticks_9x5,
1359        .num_channels = 12,
1360        .low_res_bits = 0,
1361        .high_res_bits = 12,
1362        .registers = {
1363                .channel_base = AT91_ADC_CDR0_9X5,
1364                .drdy_mask = AT91_ADC_SR_DRDY_9X5,
1365                .status_register = AT91_ADC_SR_9X5,
1366                .trigger_register = AT91_ADC_TRGR_9X5,
1367                .mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
1368                .mr_startup_mask = AT91_ADC_STARTUP_9X5,
1369        },
1370        .triggers = at91sam9x5_triggers,
1371        .trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
1372};
1373
1374static const struct of_device_id at91_adc_dt_ids[] = {
1375        { .compatible = "atmel,at91sam9260-adc", .data = &at91sam9260_caps },
1376        { .compatible = "atmel,at91sam9rl-adc", .data = &at91sam9rl_caps },
1377        { .compatible = "atmel,at91sam9g45-adc", .data = &at91sam9g45_caps },
1378        { .compatible = "atmel,at91sam9x5-adc", .data = &at91sam9x5_caps },
1379        { .compatible = "atmel,sama5d3-adc", .data = &sama5d3_caps },
1380        {},
1381};
1382MODULE_DEVICE_TABLE(of, at91_adc_dt_ids);
1383
1384static struct platform_driver at91_adc_driver = {
1385        .probe = at91_adc_probe,
1386        .remove = at91_adc_remove,
1387        .driver = {
1388                   .name = DRIVER_NAME,
1389                   .of_match_table = at91_adc_dt_ids,
1390                   .pm = &at91_adc_pm_ops,
1391        },
1392};
1393
1394module_platform_driver(at91_adc_driver);
1395
1396MODULE_LICENSE("GPL");
1397MODULE_DESCRIPTION("Atmel AT91 ADC Driver");
1398MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");
1399