linux/drivers/i2c/busses/i2c-omap.c
<<
>>
Prefs
   1/*
   2 * TI OMAP I2C master mode driver
   3 *
   4 * Copyright (C) 2003 MontaVista Software, Inc.
   5 * Copyright (C) 2005 Nokia Corporation
   6 * Copyright (C) 2004 - 2007 Texas Instruments.
   7 *
   8 * Originally written by MontaVista Software, Inc.
   9 * Additional contributions by:
  10 *      Tony Lindgren <tony@atomide.com>
  11 *      Imre Deak <imre.deak@nokia.com>
  12 *      Juha Yrjölä <juha.yrjola@solidboot.com>
  13 *      Syed Khasim <x0khasim@ti.com>
  14 *      Nishant Menon <nm@ti.com>
  15 *
  16 * This program is free software; you can redistribute it and/or modify
  17 * it under the terms of the GNU General Public License as published by
  18 * the Free Software Foundation; either version 2 of the License, or
  19 * (at your option) any later version.
  20 *
  21 * This program is distributed in the hope that it will be useful,
  22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  24 * GNU General Public License for more details.
  25 */
  26
  27#include <linux/module.h>
  28#include <linux/delay.h>
  29#include <linux/i2c.h>
  30#include <linux/err.h>
  31#include <linux/interrupt.h>
  32#include <linux/completion.h>
  33#include <linux/platform_device.h>
  34#include <linux/clk.h>
  35#include <linux/io.h>
  36#include <linux/of.h>
  37#include <linux/of_device.h>
  38#include <linux/slab.h>
  39#include <linux/i2c-omap.h>
  40#include <linux/pm_runtime.h>
  41#include <linux/pinctrl/consumer.h>
  42
  43/* I2C controller revisions */
  44#define OMAP_I2C_OMAP1_REV_2            0x20
  45
  46/* I2C controller revisions present on specific hardware */
  47#define OMAP_I2C_REV_ON_2430            0x00000036
  48#define OMAP_I2C_REV_ON_3430_3530       0x0000003C
  49#define OMAP_I2C_REV_ON_3630            0x00000040
  50#define OMAP_I2C_REV_ON_4430_PLUS       0x50400002
  51
  52/* timeout waiting for the controller to respond */
  53#define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000))
  54
  55/* timeout for pm runtime autosuspend */
  56#define OMAP_I2C_PM_TIMEOUT             1000    /* ms */
  57
  58/* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */
  59enum {
  60        OMAP_I2C_REV_REG = 0,
  61        OMAP_I2C_IE_REG,
  62        OMAP_I2C_STAT_REG,
  63        OMAP_I2C_IV_REG,
  64        OMAP_I2C_WE_REG,
  65        OMAP_I2C_SYSS_REG,
  66        OMAP_I2C_BUF_REG,
  67        OMAP_I2C_CNT_REG,
  68        OMAP_I2C_DATA_REG,
  69        OMAP_I2C_SYSC_REG,
  70        OMAP_I2C_CON_REG,
  71        OMAP_I2C_OA_REG,
  72        OMAP_I2C_SA_REG,
  73        OMAP_I2C_PSC_REG,
  74        OMAP_I2C_SCLL_REG,
  75        OMAP_I2C_SCLH_REG,
  76        OMAP_I2C_SYSTEST_REG,
  77        OMAP_I2C_BUFSTAT_REG,
  78        /* only on OMAP4430 */
  79        OMAP_I2C_IP_V2_REVNB_LO,
  80        OMAP_I2C_IP_V2_REVNB_HI,
  81        OMAP_I2C_IP_V2_IRQSTATUS_RAW,
  82        OMAP_I2C_IP_V2_IRQENABLE_SET,
  83        OMAP_I2C_IP_V2_IRQENABLE_CLR,
  84};
  85
  86/* I2C Interrupt Enable Register (OMAP_I2C_IE): */
  87#define OMAP_I2C_IE_XDR         (1 << 14)       /* TX Buffer drain int enable */
  88#define OMAP_I2C_IE_RDR         (1 << 13)       /* RX Buffer drain int enable */
  89#define OMAP_I2C_IE_XRDY        (1 << 4)        /* TX data ready int enable */
  90#define OMAP_I2C_IE_RRDY        (1 << 3)        /* RX data ready int enable */
  91#define OMAP_I2C_IE_ARDY        (1 << 2)        /* Access ready int enable */
  92#define OMAP_I2C_IE_NACK        (1 << 1)        /* No ack interrupt enable */
  93#define OMAP_I2C_IE_AL          (1 << 0)        /* Arbitration lost int ena */
  94
  95/* I2C Status Register (OMAP_I2C_STAT): */
  96#define OMAP_I2C_STAT_XDR       (1 << 14)       /* TX Buffer draining */
  97#define OMAP_I2C_STAT_RDR       (1 << 13)       /* RX Buffer draining */
  98#define OMAP_I2C_STAT_BB        (1 << 12)       /* Bus busy */
  99#define OMAP_I2C_STAT_ROVR      (1 << 11)       /* Receive overrun */
 100#define OMAP_I2C_STAT_XUDF      (1 << 10)       /* Transmit underflow */
 101#define OMAP_I2C_STAT_AAS       (1 << 9)        /* Address as slave */
 102#define OMAP_I2C_STAT_AD0       (1 << 8)        /* Address zero */
 103#define OMAP_I2C_STAT_XRDY      (1 << 4)        /* Transmit data ready */
 104#define OMAP_I2C_STAT_RRDY      (1 << 3)        /* Receive data ready */
 105#define OMAP_I2C_STAT_ARDY      (1 << 2)        /* Register access ready */
 106#define OMAP_I2C_STAT_NACK      (1 << 1)        /* No ack interrupt enable */
 107#define OMAP_I2C_STAT_AL        (1 << 0)        /* Arbitration lost int ena */
 108
 109/* I2C WE wakeup enable register */
 110#define OMAP_I2C_WE_XDR_WE      (1 << 14)       /* TX drain wakup */
 111#define OMAP_I2C_WE_RDR_WE      (1 << 13)       /* RX drain wakeup */
 112#define OMAP_I2C_WE_AAS_WE      (1 << 9)        /* Address as slave wakeup*/
 113#define OMAP_I2C_WE_BF_WE       (1 << 8)        /* Bus free wakeup */
 114#define OMAP_I2C_WE_STC_WE      (1 << 6)        /* Start condition wakeup */
 115#define OMAP_I2C_WE_GC_WE       (1 << 5)        /* General call wakeup */
 116#define OMAP_I2C_WE_DRDY_WE     (1 << 3)        /* TX/RX data ready wakeup */
 117#define OMAP_I2C_WE_ARDY_WE     (1 << 2)        /* Reg access ready wakeup */
 118#define OMAP_I2C_WE_NACK_WE     (1 << 1)        /* No acknowledgment wakeup */
 119#define OMAP_I2C_WE_AL_WE       (1 << 0)        /* Arbitration lost wakeup */
 120
 121#define OMAP_I2C_WE_ALL         (OMAP_I2C_WE_XDR_WE | OMAP_I2C_WE_RDR_WE | \
 122                                OMAP_I2C_WE_AAS_WE | OMAP_I2C_WE_BF_WE | \
 123                                OMAP_I2C_WE_STC_WE | OMAP_I2C_WE_GC_WE | \
 124                                OMAP_I2C_WE_DRDY_WE | OMAP_I2C_WE_ARDY_WE | \
 125                                OMAP_I2C_WE_NACK_WE | OMAP_I2C_WE_AL_WE)
 126
 127/* I2C Buffer Configuration Register (OMAP_I2C_BUF): */
 128#define OMAP_I2C_BUF_RDMA_EN    (1 << 15)       /* RX DMA channel enable */
 129#define OMAP_I2C_BUF_RXFIF_CLR  (1 << 14)       /* RX FIFO Clear */
 130#define OMAP_I2C_BUF_XDMA_EN    (1 << 7)        /* TX DMA channel enable */
 131#define OMAP_I2C_BUF_TXFIF_CLR  (1 << 6)        /* TX FIFO Clear */
 132
 133/* I2C Configuration Register (OMAP_I2C_CON): */
 134#define OMAP_I2C_CON_EN         (1 << 15)       /* I2C module enable */
 135#define OMAP_I2C_CON_BE         (1 << 14)       /* Big endian mode */
 136#define OMAP_I2C_CON_OPMODE_HS  (1 << 12)       /* High Speed support */
 137#define OMAP_I2C_CON_STB        (1 << 11)       /* Start byte mode (master) */
 138#define OMAP_I2C_CON_MST        (1 << 10)       /* Master/slave mode */
 139#define OMAP_I2C_CON_TRX        (1 << 9)        /* TX/RX mode (master only) */
 140#define OMAP_I2C_CON_XA         (1 << 8)        /* Expand address */
 141#define OMAP_I2C_CON_RM         (1 << 2)        /* Repeat mode (master only) */
 142#define OMAP_I2C_CON_STP        (1 << 1)        /* Stop cond (master only) */
 143#define OMAP_I2C_CON_STT        (1 << 0)        /* Start condition (master) */
 144
 145/* I2C SCL time value when Master */
 146#define OMAP_I2C_SCLL_HSSCLL    8
 147#define OMAP_I2C_SCLH_HSSCLH    8
 148
 149/* I2C System Test Register (OMAP_I2C_SYSTEST): */
 150#ifdef DEBUG
 151#define OMAP_I2C_SYSTEST_ST_EN          (1 << 15)       /* System test enable */
 152#define OMAP_I2C_SYSTEST_FREE           (1 << 14)       /* Free running mode */
 153#define OMAP_I2C_SYSTEST_TMODE_MASK     (3 << 12)       /* Test mode select */
 154#define OMAP_I2C_SYSTEST_TMODE_SHIFT    (12)            /* Test mode select */
 155#define OMAP_I2C_SYSTEST_SCL_I          (1 << 3)        /* SCL line sense in */
 156#define OMAP_I2C_SYSTEST_SCL_O          (1 << 2)        /* SCL line drive out */
 157#define OMAP_I2C_SYSTEST_SDA_I          (1 << 1)        /* SDA line sense in */
 158#define OMAP_I2C_SYSTEST_SDA_O          (1 << 0)        /* SDA line drive out */
 159#endif
 160
 161/* OCP_SYSSTATUS bit definitions */
 162#define SYSS_RESETDONE_MASK             (1 << 0)
 163
 164/* OCP_SYSCONFIG bit definitions */
 165#define SYSC_CLOCKACTIVITY_MASK         (0x3 << 8)
 166#define SYSC_SIDLEMODE_MASK             (0x3 << 3)
 167#define SYSC_ENAWAKEUP_MASK             (1 << 2)
 168#define SYSC_SOFTRESET_MASK             (1 << 1)
 169#define SYSC_AUTOIDLE_MASK              (1 << 0)
 170
 171#define SYSC_IDLEMODE_SMART             0x2
 172#define SYSC_CLOCKACTIVITY_FCLK         0x2
 173
 174/* Errata definitions */
 175#define I2C_OMAP_ERRATA_I207            (1 << 0)
 176#define I2C_OMAP_ERRATA_I462            (1 << 1)
 177
 178struct omap_i2c_dev {
 179        spinlock_t              lock;           /* IRQ synchronization */
 180        struct device           *dev;
 181        void __iomem            *base;          /* virtual */
 182        int                     irq;
 183        int                     reg_shift;      /* bit shift for I2C register addresses */
 184        struct completion       cmd_complete;
 185        struct resource         *ioarea;
 186        u32                     latency;        /* maximum mpu wkup latency */
 187        void                    (*set_mpu_wkup_lat)(struct device *dev,
 188                                                    long latency);
 189        u32                     speed;          /* Speed of bus in kHz */
 190        u32                     flags;
 191        u16                     cmd_err;
 192        u8                      *buf;
 193        u8                      *regs;
 194        size_t                  buf_len;
 195        struct i2c_adapter      adapter;
 196        u8                      threshold;
 197        u8                      fifo_size;      /* use as flag and value
 198                                                 * fifo_size==0 implies no fifo
 199                                                 * if set, should be trsh+1
 200                                                 */
 201        u32                     rev;
 202        unsigned                b_hw:1;         /* bad h/w fixes */
 203        unsigned                receiver:1;     /* true when we're in receiver mode */
 204        u16                     iestate;        /* Saved interrupt register */
 205        u16                     pscstate;
 206        u16                     scllstate;
 207        u16                     sclhstate;
 208        u16                     syscstate;
 209        u16                     westate;
 210        u16                     errata;
 211
 212        struct pinctrl          *pins;
 213};
 214
 215static const u8 reg_map_ip_v1[] = {
 216        [OMAP_I2C_REV_REG] = 0x00,
 217        [OMAP_I2C_IE_REG] = 0x01,
 218        [OMAP_I2C_STAT_REG] = 0x02,
 219        [OMAP_I2C_IV_REG] = 0x03,
 220        [OMAP_I2C_WE_REG] = 0x03,
 221        [OMAP_I2C_SYSS_REG] = 0x04,
 222        [OMAP_I2C_BUF_REG] = 0x05,
 223        [OMAP_I2C_CNT_REG] = 0x06,
 224        [OMAP_I2C_DATA_REG] = 0x07,
 225        [OMAP_I2C_SYSC_REG] = 0x08,
 226        [OMAP_I2C_CON_REG] = 0x09,
 227        [OMAP_I2C_OA_REG] = 0x0a,
 228        [OMAP_I2C_SA_REG] = 0x0b,
 229        [OMAP_I2C_PSC_REG] = 0x0c,
 230        [OMAP_I2C_SCLL_REG] = 0x0d,
 231        [OMAP_I2C_SCLH_REG] = 0x0e,
 232        [OMAP_I2C_SYSTEST_REG] = 0x0f,
 233        [OMAP_I2C_BUFSTAT_REG] = 0x10,
 234};
 235
 236static const u8 reg_map_ip_v2[] = {
 237        [OMAP_I2C_REV_REG] = 0x04,
 238        [OMAP_I2C_IE_REG] = 0x2c,
 239        [OMAP_I2C_STAT_REG] = 0x28,
 240        [OMAP_I2C_IV_REG] = 0x34,
 241        [OMAP_I2C_WE_REG] = 0x34,
 242        [OMAP_I2C_SYSS_REG] = 0x90,
 243        [OMAP_I2C_BUF_REG] = 0x94,
 244        [OMAP_I2C_CNT_REG] = 0x98,
 245        [OMAP_I2C_DATA_REG] = 0x9c,
 246        [OMAP_I2C_SYSC_REG] = 0x10,
 247        [OMAP_I2C_CON_REG] = 0xa4,
 248        [OMAP_I2C_OA_REG] = 0xa8,
 249        [OMAP_I2C_SA_REG] = 0xac,
 250        [OMAP_I2C_PSC_REG] = 0xb0,
 251        [OMAP_I2C_SCLL_REG] = 0xb4,
 252        [OMAP_I2C_SCLH_REG] = 0xb8,
 253        [OMAP_I2C_SYSTEST_REG] = 0xbC,
 254        [OMAP_I2C_BUFSTAT_REG] = 0xc0,
 255        [OMAP_I2C_IP_V2_REVNB_LO] = 0x00,
 256        [OMAP_I2C_IP_V2_REVNB_HI] = 0x04,
 257        [OMAP_I2C_IP_V2_IRQSTATUS_RAW] = 0x24,
 258        [OMAP_I2C_IP_V2_IRQENABLE_SET] = 0x2c,
 259        [OMAP_I2C_IP_V2_IRQENABLE_CLR] = 0x30,
 260};
 261
 262static inline void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev,
 263                                      int reg, u16 val)
 264{
 265        __raw_writew(val, i2c_dev->base +
 266                        (i2c_dev->regs[reg] << i2c_dev->reg_shift));
 267}
 268
 269static inline u16 omap_i2c_read_reg(struct omap_i2c_dev *i2c_dev, int reg)
 270{
 271        return __raw_readw(i2c_dev->base +
 272                                (i2c_dev->regs[reg] << i2c_dev->reg_shift));
 273}
 274
 275static void __omap_i2c_init(struct omap_i2c_dev *dev)
 276{
 277
 278        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
 279
 280        /* Setup clock prescaler to obtain approx 12MHz I2C module clock: */
 281        omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, dev->pscstate);
 282
 283        /* SCL low and high time values */
 284        omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, dev->scllstate);
 285        omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG, dev->sclhstate);
 286        if (dev->rev >= OMAP_I2C_REV_ON_3430_3530)
 287                omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate);
 288
 289        /* Take the I2C module out of reset: */
 290        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
 291
 292        /*
 293         * Don't write to this register if the IE state is 0 as it can
 294         * cause deadlock.
 295         */
 296        if (dev->iestate)
 297                omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate);
 298}
 299
 300static int omap_i2c_reset(struct omap_i2c_dev *dev)
 301{
 302        unsigned long timeout;
 303        u16 sysc;
 304
 305        if (dev->rev >= OMAP_I2C_OMAP1_REV_2) {
 306                sysc = omap_i2c_read_reg(dev, OMAP_I2C_SYSC_REG);
 307
 308                /* Disable I2C controller before soft reset */
 309                omap_i2c_write_reg(dev, OMAP_I2C_CON_REG,
 310                        omap_i2c_read_reg(dev, OMAP_I2C_CON_REG) &
 311                                ~(OMAP_I2C_CON_EN));
 312
 313                omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, SYSC_SOFTRESET_MASK);
 314                /* For some reason we need to set the EN bit before the
 315                 * reset done bit gets set. */
 316                timeout = jiffies + OMAP_I2C_TIMEOUT;
 317                omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
 318                while (!(omap_i2c_read_reg(dev, OMAP_I2C_SYSS_REG) &
 319                         SYSS_RESETDONE_MASK)) {
 320                        if (time_after(jiffies, timeout)) {
 321                                dev_warn(dev->dev, "timeout waiting "
 322                                                "for controller reset\n");
 323                                return -ETIMEDOUT;
 324                        }
 325                        msleep(1);
 326                }
 327
 328                /* SYSC register is cleared by the reset; rewrite it */
 329                omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, sysc);
 330
 331        }
 332        return 0;
 333}
 334
 335static int omap_i2c_init(struct omap_i2c_dev *dev)
 336{
 337        u16 psc = 0, scll = 0, sclh = 0;
 338        u16 fsscll = 0, fssclh = 0, hsscll = 0, hssclh = 0;
 339        unsigned long fclk_rate = 12000000;
 340        unsigned long internal_clk = 0;
 341        struct clk *fclk;
 342
 343        if (dev->rev >= OMAP_I2C_REV_ON_3430_3530) {
 344                /*
 345                 * Enabling all wakup sources to stop I2C freezing on
 346                 * WFI instruction.
 347                 * REVISIT: Some wkup sources might not be needed.
 348                 */
 349                dev->westate = OMAP_I2C_WE_ALL;
 350        }
 351
 352        if (dev->flags & OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK) {
 353                /*
 354                 * The I2C functional clock is the armxor_ck, so there's
 355                 * no need to get "armxor_ck" separately.  Now, if OMAP2420
 356                 * always returns 12MHz for the functional clock, we can
 357                 * do this bit unconditionally.
 358                 */
 359                fclk = clk_get(dev->dev, "fck");
 360                fclk_rate = clk_get_rate(fclk);
 361                clk_put(fclk);
 362
 363                /* TRM for 5912 says the I2C clock must be prescaled to be
 364                 * between 7 - 12 MHz. The XOR input clock is typically
 365                 * 12, 13 or 19.2 MHz. So we should have code that produces:
 366                 *
 367                 * XOR MHz      Divider         Prescaler
 368                 * 12           1               0
 369                 * 13           2               1
 370                 * 19.2         2               1
 371                 */
 372                if (fclk_rate > 12000000)
 373                        psc = fclk_rate / 12000000;
 374        }
 375
 376        if (!(dev->flags & OMAP_I2C_FLAG_SIMPLE_CLOCK)) {
 377
 378                /*
 379                 * HSI2C controller internal clk rate should be 19.2 Mhz for
 380                 * HS and for all modes on 2430. On 34xx we can use lower rate
 381                 * to get longer filter period for better noise suppression.
 382                 * The filter is iclk (fclk for HS) period.
 383                 */
 384                if (dev->speed > 400 ||
 385                               dev->flags & OMAP_I2C_FLAG_FORCE_19200_INT_CLK)
 386                        internal_clk = 19200;
 387                else if (dev->speed > 100)
 388                        internal_clk = 9600;
 389                else
 390                        internal_clk = 4000;
 391                fclk = clk_get(dev->dev, "fck");
 392                fclk_rate = clk_get_rate(fclk) / 1000;
 393                clk_put(fclk);
 394
 395                /* Compute prescaler divisor */
 396                psc = fclk_rate / internal_clk;
 397                psc = psc - 1;
 398
 399                /* If configured for High Speed */
 400                if (dev->speed > 400) {
 401                        unsigned long scl;
 402
 403                        /* For first phase of HS mode */
 404                        scl = internal_clk / 400;
 405                        fsscll = scl - (scl / 3) - 7;
 406                        fssclh = (scl / 3) - 5;
 407
 408                        /* For second phase of HS mode */
 409                        scl = fclk_rate / dev->speed;
 410                        hsscll = scl - (scl / 3) - 7;
 411                        hssclh = (scl / 3) - 5;
 412                } else if (dev->speed > 100) {
 413                        unsigned long scl;
 414
 415                        /* Fast mode */
 416                        scl = internal_clk / dev->speed;
 417                        fsscll = scl - (scl / 3) - 7;
 418                        fssclh = (scl / 3) - 5;
 419                } else {
 420                        /* Standard mode */
 421                        fsscll = internal_clk / (dev->speed * 2) - 7;
 422                        fssclh = internal_clk / (dev->speed * 2) - 5;
 423                }
 424                scll = (hsscll << OMAP_I2C_SCLL_HSSCLL) | fsscll;
 425                sclh = (hssclh << OMAP_I2C_SCLH_HSSCLH) | fssclh;
 426        } else {
 427                /* Program desired operating rate */
 428                fclk_rate /= (psc + 1) * 1000;
 429                if (psc > 2)
 430                        psc = 2;
 431                scll = fclk_rate / (dev->speed * 2) - 7 + psc;
 432                sclh = fclk_rate / (dev->speed * 2) - 7 + psc;
 433        }
 434
 435        dev->iestate = (OMAP_I2C_IE_XRDY | OMAP_I2C_IE_RRDY |
 436                        OMAP_I2C_IE_ARDY | OMAP_I2C_IE_NACK |
 437                        OMAP_I2C_IE_AL)  | ((dev->fifo_size) ?
 438                                (OMAP_I2C_IE_RDR | OMAP_I2C_IE_XDR) : 0);
 439
 440        dev->pscstate = psc;
 441        dev->scllstate = scll;
 442        dev->sclhstate = sclh;
 443
 444        __omap_i2c_init(dev);
 445
 446        return 0;
 447}
 448
 449/*
 450 * Waiting on Bus Busy
 451 */
 452static int omap_i2c_wait_for_bb(struct omap_i2c_dev *dev)
 453{
 454        unsigned long timeout;
 455
 456        timeout = jiffies + OMAP_I2C_TIMEOUT;
 457        while (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG) & OMAP_I2C_STAT_BB) {
 458                if (time_after(jiffies, timeout)) {
 459                        dev_warn(dev->dev, "timeout waiting for bus ready\n");
 460                        return -ETIMEDOUT;
 461                }
 462                msleep(1);
 463        }
 464
 465        return 0;
 466}
 467
 468static void omap_i2c_resize_fifo(struct omap_i2c_dev *dev, u8 size, bool is_rx)
 469{
 470        u16             buf;
 471
 472        if (dev->flags & OMAP_I2C_FLAG_NO_FIFO)
 473                return;
 474
 475        /*
 476         * Set up notification threshold based on message size. We're doing
 477         * this to try and avoid draining feature as much as possible. Whenever
 478         * we have big messages to transfer (bigger than our total fifo size)
 479         * then we might use draining feature to transfer the remaining bytes.
 480         */
 481
 482        dev->threshold = clamp(size, (u8) 1, dev->fifo_size);
 483
 484        buf = omap_i2c_read_reg(dev, OMAP_I2C_BUF_REG);
 485
 486        if (is_rx) {
 487                /* Clear RX Threshold */
 488                buf &= ~(0x3f << 8);
 489                buf |= ((dev->threshold - 1) << 8) | OMAP_I2C_BUF_RXFIF_CLR;
 490        } else {
 491                /* Clear TX Threshold */
 492                buf &= ~0x3f;
 493                buf |= (dev->threshold - 1) | OMAP_I2C_BUF_TXFIF_CLR;
 494        }
 495
 496        omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, buf);
 497
 498        if (dev->rev < OMAP_I2C_REV_ON_3630)
 499                dev->b_hw = 1; /* Enable hardware fixes */
 500
 501        /* calculate wakeup latency constraint for MPU */
 502        if (dev->set_mpu_wkup_lat != NULL)
 503                dev->latency = (1000000 * dev->threshold) /
 504                        (1000 * dev->speed / 8);
 505}
 506
 507/*
 508 * Low level master read/write transaction.
 509 */
 510static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
 511                             struct i2c_msg *msg, int stop)
 512{
 513        struct omap_i2c_dev *dev = i2c_get_adapdata(adap);
 514        unsigned long timeout;
 515        u16 w;
 516
 517        dev_dbg(dev->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
 518                msg->addr, msg->len, msg->flags, stop);
 519
 520        if (msg->len == 0)
 521                return -EINVAL;
 522
 523        dev->receiver = !!(msg->flags & I2C_M_RD);
 524        omap_i2c_resize_fifo(dev, msg->len, dev->receiver);
 525
 526        omap_i2c_write_reg(dev, OMAP_I2C_SA_REG, msg->addr);
 527
 528        /* REVISIT: Could the STB bit of I2C_CON be used with probing? */
 529        dev->buf = msg->buf;
 530        dev->buf_len = msg->len;
 531
 532        /* make sure writes to dev->buf_len are ordered */
 533        barrier();
 534
 535        omap_i2c_write_reg(dev, OMAP_I2C_CNT_REG, dev->buf_len);
 536
 537        /* Clear the FIFO Buffers */
 538        w = omap_i2c_read_reg(dev, OMAP_I2C_BUF_REG);
 539        w |= OMAP_I2C_BUF_RXFIF_CLR | OMAP_I2C_BUF_TXFIF_CLR;
 540        omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, w);
 541
 542        INIT_COMPLETION(dev->cmd_complete);
 543        dev->cmd_err = 0;
 544
 545        w = OMAP_I2C_CON_EN | OMAP_I2C_CON_MST | OMAP_I2C_CON_STT;
 546
 547        /* High speed configuration */
 548        if (dev->speed > 400)
 549                w |= OMAP_I2C_CON_OPMODE_HS;
 550
 551        if (msg->flags & I2C_M_STOP)
 552                stop = 1;
 553        if (msg->flags & I2C_M_TEN)
 554                w |= OMAP_I2C_CON_XA;
 555        if (!(msg->flags & I2C_M_RD))
 556                w |= OMAP_I2C_CON_TRX;
 557
 558        if (!dev->b_hw && stop)
 559                w |= OMAP_I2C_CON_STP;
 560
 561        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
 562
 563        /*
 564         * Don't write stt and stp together on some hardware.
 565         */
 566        if (dev->b_hw && stop) {
 567                unsigned long delay = jiffies + OMAP_I2C_TIMEOUT;
 568                u16 con = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG);
 569                while (con & OMAP_I2C_CON_STT) {
 570                        con = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG);
 571
 572                        /* Let the user know if i2c is in a bad state */
 573                        if (time_after(jiffies, delay)) {
 574                                dev_err(dev->dev, "controller timed out "
 575                                "waiting for start condition to finish\n");
 576                                return -ETIMEDOUT;
 577                        }
 578                        cpu_relax();
 579                }
 580
 581                w |= OMAP_I2C_CON_STP;
 582                w &= ~OMAP_I2C_CON_STT;
 583                omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
 584        }
 585
 586        /*
 587         * REVISIT: We should abort the transfer on signals, but the bus goes
 588         * into arbitration and we're currently unable to recover from it.
 589         */
 590        timeout = wait_for_completion_timeout(&dev->cmd_complete,
 591                                                OMAP_I2C_TIMEOUT);
 592        if (timeout == 0) {
 593                dev_err(dev->dev, "controller timed out\n");
 594                omap_i2c_reset(dev);
 595                __omap_i2c_init(dev);
 596                return -ETIMEDOUT;
 597        }
 598
 599        if (likely(!dev->cmd_err))
 600                return 0;
 601
 602        /* We have an error */
 603        if (dev->cmd_err & (OMAP_I2C_STAT_AL | OMAP_I2C_STAT_ROVR |
 604                            OMAP_I2C_STAT_XUDF)) {
 605                omap_i2c_reset(dev);
 606                __omap_i2c_init(dev);
 607                return -EIO;
 608        }
 609
 610        if (dev->cmd_err & OMAP_I2C_STAT_NACK) {
 611                if (msg->flags & I2C_M_IGNORE_NAK)
 612                        return 0;
 613                if (stop) {
 614                        w = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG);
 615                        w |= OMAP_I2C_CON_STP;
 616                        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
 617                }
 618                return -EREMOTEIO;
 619        }
 620        return -EIO;
 621}
 622
 623
 624/*
 625 * Prepare controller for a transaction and call omap_i2c_xfer_msg
 626 * to do the work during IRQ processing.
 627 */
 628static int
 629omap_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
 630{
 631        struct omap_i2c_dev *dev = i2c_get_adapdata(adap);
 632        int i;
 633        int r;
 634
 635        r = pm_runtime_get_sync(dev->dev);
 636        if (IS_ERR_VALUE(r))
 637                goto out;
 638
 639        r = omap_i2c_wait_for_bb(dev);
 640        if (r < 0)
 641                goto out;
 642
 643        if (dev->set_mpu_wkup_lat != NULL)
 644                dev->set_mpu_wkup_lat(dev->dev, dev->latency);
 645
 646        for (i = 0; i < num; i++) {
 647                r = omap_i2c_xfer_msg(adap, &msgs[i], (i == (num - 1)));
 648                if (r != 0)
 649                        break;
 650        }
 651
 652        if (r == 0)
 653                r = num;
 654
 655        omap_i2c_wait_for_bb(dev);
 656
 657        if (dev->set_mpu_wkup_lat != NULL)
 658                dev->set_mpu_wkup_lat(dev->dev, -1);
 659
 660out:
 661        pm_runtime_mark_last_busy(dev->dev);
 662        pm_runtime_put_autosuspend(dev->dev);
 663        return r;
 664}
 665
 666static u32
 667omap_i2c_func(struct i2c_adapter *adap)
 668{
 669        return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK) |
 670               I2C_FUNC_PROTOCOL_MANGLING;
 671}
 672
 673static inline void
 674omap_i2c_complete_cmd(struct omap_i2c_dev *dev, u16 err)
 675{
 676        dev->cmd_err |= err;
 677        complete(&dev->cmd_complete);
 678}
 679
 680static inline void
 681omap_i2c_ack_stat(struct omap_i2c_dev *dev, u16 stat)
 682{
 683        omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat);
 684}
 685
 686static inline void i2c_omap_errata_i207(struct omap_i2c_dev *dev, u16 stat)
 687{
 688        /*
 689         * I2C Errata(Errata Nos. OMAP2: 1.67, OMAP3: 1.8)
 690         * Not applicable for OMAP4.
 691         * Under certain rare conditions, RDR could be set again
 692         * when the bus is busy, then ignore the interrupt and
 693         * clear the interrupt.
 694         */
 695        if (stat & OMAP_I2C_STAT_RDR) {
 696                /* Step 1: If RDR is set, clear it */
 697                omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
 698
 699                /* Step 2: */
 700                if (!(omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG)
 701                                                & OMAP_I2C_STAT_BB)) {
 702
 703                        /* Step 3: */
 704                        if (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG)
 705                                                & OMAP_I2C_STAT_RDR) {
 706                                omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
 707                                dev_dbg(dev->dev, "RDR when bus is busy.\n");
 708                        }
 709
 710                }
 711        }
 712}
 713
 714/* rev1 devices are apparently only on some 15xx */
 715#ifdef CONFIG_ARCH_OMAP15XX
 716
 717static irqreturn_t
 718omap_i2c_omap1_isr(int this_irq, void *dev_id)
 719{
 720        struct omap_i2c_dev *dev = dev_id;
 721        u16 iv, w;
 722
 723        if (pm_runtime_suspended(dev->dev))
 724                return IRQ_NONE;
 725
 726        iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG);
 727        switch (iv) {
 728        case 0x00:      /* None */
 729                break;
 730        case 0x01:      /* Arbitration lost */
 731                dev_err(dev->dev, "Arbitration lost\n");
 732                omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_AL);
 733                break;
 734        case 0x02:      /* No acknowledgement */
 735                omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_NACK);
 736                omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_STP);
 737                break;
 738        case 0x03:      /* Register access ready */
 739                omap_i2c_complete_cmd(dev, 0);
 740                break;
 741        case 0x04:      /* Receive data ready */
 742                if (dev->buf_len) {
 743                        w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
 744                        *dev->buf++ = w;
 745                        dev->buf_len--;
 746                        if (dev->buf_len) {
 747                                *dev->buf++ = w >> 8;
 748                                dev->buf_len--;
 749                        }
 750                } else
 751                        dev_err(dev->dev, "RRDY IRQ while no data requested\n");
 752                break;
 753        case 0x05:      /* Transmit data ready */
 754                if (dev->buf_len) {
 755                        w = *dev->buf++;
 756                        dev->buf_len--;
 757                        if (dev->buf_len) {
 758                                w |= *dev->buf++ << 8;
 759                                dev->buf_len--;
 760                        }
 761                        omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
 762                } else
 763                        dev_err(dev->dev, "XRDY IRQ while no data to send\n");
 764                break;
 765        default:
 766                return IRQ_NONE;
 767        }
 768
 769        return IRQ_HANDLED;
 770}
 771#else
 772#define omap_i2c_omap1_isr              NULL
 773#endif
 774
 775/*
 776 * OMAP3430 Errata i462: When an XRDY/XDR is hit, wait for XUDF before writing
 777 * data to DATA_REG. Otherwise some data bytes can be lost while transferring
 778 * them from the memory to the I2C interface.
 779 */
 780static int errata_omap3_i462(struct omap_i2c_dev *dev)
 781{
 782        unsigned long timeout = 10000;
 783        u16 stat;
 784
 785        do {
 786                stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
 787                if (stat & OMAP_I2C_STAT_XUDF)
 788                        break;
 789
 790                if (stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
 791                        omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_XRDY |
 792                                                        OMAP_I2C_STAT_XDR));
 793                        if (stat & OMAP_I2C_STAT_NACK) {
 794                                dev->cmd_err |= OMAP_I2C_STAT_NACK;
 795                                omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
 796                        }
 797
 798                        if (stat & OMAP_I2C_STAT_AL) {
 799                                dev_err(dev->dev, "Arbitration lost\n");
 800                                dev->cmd_err |= OMAP_I2C_STAT_AL;
 801                                omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
 802                        }
 803
 804                        return -EIO;
 805                }
 806
 807                cpu_relax();
 808        } while (--timeout);
 809
 810        if (!timeout) {
 811                dev_err(dev->dev, "timeout waiting on XUDF bit\n");
 812                return 0;
 813        }
 814
 815        return 0;
 816}
 817
 818static void omap_i2c_receive_data(struct omap_i2c_dev *dev, u8 num_bytes,
 819                bool is_rdr)
 820{
 821        u16             w;
 822
 823        while (num_bytes--) {
 824                w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
 825                *dev->buf++ = w;
 826                dev->buf_len--;
 827
 828                /*
 829                 * Data reg in 2430, omap3 and
 830                 * omap4 is 8 bit wide
 831                 */
 832                if (dev->flags & OMAP_I2C_FLAG_16BIT_DATA_REG) {
 833                        *dev->buf++ = w >> 8;
 834                        dev->buf_len--;
 835                }
 836        }
 837}
 838
 839static int omap_i2c_transmit_data(struct omap_i2c_dev *dev, u8 num_bytes,
 840                bool is_xdr)
 841{
 842        u16             w;
 843
 844        while (num_bytes--) {
 845                w = *dev->buf++;
 846                dev->buf_len--;
 847
 848                /*
 849                 * Data reg in 2430, omap3 and
 850                 * omap4 is 8 bit wide
 851                 */
 852                if (dev->flags & OMAP_I2C_FLAG_16BIT_DATA_REG) {
 853                        w |= *dev->buf++ << 8;
 854                        dev->buf_len--;
 855                }
 856
 857                if (dev->errata & I2C_OMAP_ERRATA_I462) {
 858                        int ret;
 859
 860                        ret = errata_omap3_i462(dev);
 861                        if (ret < 0)
 862                                return ret;
 863                }
 864
 865                omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
 866        }
 867
 868        return 0;
 869}
 870
 871static irqreturn_t
 872omap_i2c_isr(int irq, void *dev_id)
 873{
 874        struct omap_i2c_dev *dev = dev_id;
 875        irqreturn_t ret = IRQ_HANDLED;
 876        u16 mask;
 877        u16 stat;
 878
 879        spin_lock(&dev->lock);
 880        mask = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
 881        stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
 882
 883        if (stat & mask)
 884                ret = IRQ_WAKE_THREAD;
 885
 886        spin_unlock(&dev->lock);
 887
 888        return ret;
 889}
 890
 891static irqreturn_t
 892omap_i2c_isr_thread(int this_irq, void *dev_id)
 893{
 894        struct omap_i2c_dev *dev = dev_id;
 895        unsigned long flags;
 896        u16 bits;
 897        u16 stat;
 898        int err = 0, count = 0;
 899
 900        spin_lock_irqsave(&dev->lock, flags);
 901        do {
 902                bits = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
 903                stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
 904                stat &= bits;
 905
 906                /* If we're in receiver mode, ignore XDR/XRDY */
 907                if (dev->receiver)
 908                        stat &= ~(OMAP_I2C_STAT_XDR | OMAP_I2C_STAT_XRDY);
 909                else
 910                        stat &= ~(OMAP_I2C_STAT_RDR | OMAP_I2C_STAT_RRDY);
 911
 912                if (!stat) {
 913                        /* my work here is done */
 914                        goto out;
 915                }
 916
 917                dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat);
 918                if (count++ == 100) {
 919                        dev_warn(dev->dev, "Too much work in one IRQ\n");
 920                        break;
 921                }
 922
 923                if (stat & OMAP_I2C_STAT_NACK) {
 924                        err |= OMAP_I2C_STAT_NACK;
 925                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
 926                        break;
 927                }
 928
 929                if (stat & OMAP_I2C_STAT_AL) {
 930                        dev_err(dev->dev, "Arbitration lost\n");
 931                        err |= OMAP_I2C_STAT_AL;
 932                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
 933                        break;
 934                }
 935
 936                /*
 937                 * ProDB0017052: Clear ARDY bit twice
 938                 */
 939                if (stat & OMAP_I2C_STAT_ARDY)
 940                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ARDY);
 941
 942                if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK |
 943                                        OMAP_I2C_STAT_AL)) {
 944                        omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_RRDY |
 945                                                OMAP_I2C_STAT_RDR |
 946                                                OMAP_I2C_STAT_XRDY |
 947                                                OMAP_I2C_STAT_XDR |
 948                                                OMAP_I2C_STAT_ARDY));
 949                        break;
 950                }
 951
 952                if (stat & OMAP_I2C_STAT_RDR) {
 953                        u8 num_bytes = 1;
 954
 955                        if (dev->fifo_size)
 956                                num_bytes = dev->buf_len;
 957
 958                        omap_i2c_receive_data(dev, num_bytes, true);
 959
 960                        if (dev->errata & I2C_OMAP_ERRATA_I207)
 961                                i2c_omap_errata_i207(dev, stat);
 962
 963                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
 964                        continue;
 965                }
 966
 967                if (stat & OMAP_I2C_STAT_RRDY) {
 968                        u8 num_bytes = 1;
 969
 970                        if (dev->threshold)
 971                                num_bytes = dev->threshold;
 972
 973                        omap_i2c_receive_data(dev, num_bytes, false);
 974                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RRDY);
 975                        continue;
 976                }
 977
 978                if (stat & OMAP_I2C_STAT_XDR) {
 979                        u8 num_bytes = 1;
 980                        int ret;
 981
 982                        if (dev->fifo_size)
 983                                num_bytes = dev->buf_len;
 984
 985                        ret = omap_i2c_transmit_data(dev, num_bytes, true);
 986                        if (ret < 0)
 987                                break;
 988
 989                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XDR);
 990                        continue;
 991                }
 992
 993                if (stat & OMAP_I2C_STAT_XRDY) {
 994                        u8 num_bytes = 1;
 995                        int ret;
 996
 997                        if (dev->threshold)
 998                                num_bytes = dev->threshold;
 999
1000                        ret = omap_i2c_transmit_data(dev, num_bytes, false);
1001                        if (ret < 0)
1002                                break;
1003
1004                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY);
1005                        continue;
1006                }
1007
1008                if (stat & OMAP_I2C_STAT_ROVR) {
1009                        dev_err(dev->dev, "Receive overrun\n");
1010                        err |= OMAP_I2C_STAT_ROVR;
1011                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ROVR);
1012                        break;
1013                }
1014
1015                if (stat & OMAP_I2C_STAT_XUDF) {
1016                        dev_err(dev->dev, "Transmit underflow\n");
1017                        err |= OMAP_I2C_STAT_XUDF;
1018                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XUDF);
1019                        break;
1020                }
1021        } while (stat);
1022
1023        omap_i2c_complete_cmd(dev, err);
1024
1025out:
1026        spin_unlock_irqrestore(&dev->lock, flags);
1027
1028        return IRQ_HANDLED;
1029}
1030
1031static const struct i2c_algorithm omap_i2c_algo = {
1032        .master_xfer    = omap_i2c_xfer,
1033        .functionality  = omap_i2c_func,
1034};
1035
1036#ifdef CONFIG_OF
1037static struct omap_i2c_bus_platform_data omap3_pdata = {
1038        .rev = OMAP_I2C_IP_VERSION_1,
1039        .flags = OMAP_I2C_FLAG_BUS_SHIFT_2,
1040};
1041
1042static struct omap_i2c_bus_platform_data omap4_pdata = {
1043        .rev = OMAP_I2C_IP_VERSION_2,
1044};
1045
1046static const struct of_device_id omap_i2c_of_match[] = {
1047        {
1048                .compatible = "ti,omap4-i2c",
1049                .data = &omap4_pdata,
1050        },
1051        {
1052                .compatible = "ti,omap3-i2c",
1053                .data = &omap3_pdata,
1054        },
1055        { },
1056};
1057MODULE_DEVICE_TABLE(of, omap_i2c_of_match);
1058#endif
1059
1060#define OMAP_I2C_SCHEME(rev)            ((rev & 0xc000) >> 14)
1061
1062#define OMAP_I2C_REV_SCHEME_0_MAJOR(rev) (rev >> 4)
1063#define OMAP_I2C_REV_SCHEME_0_MINOR(rev) (rev & 0xf)
1064
1065#define OMAP_I2C_REV_SCHEME_1_MAJOR(rev) ((rev & 0x0700) >> 7)
1066#define OMAP_I2C_REV_SCHEME_1_MINOR(rev) (rev & 0x1f)
1067#define OMAP_I2C_SCHEME_0               0
1068#define OMAP_I2C_SCHEME_1               1
1069
1070static int
1071omap_i2c_probe(struct platform_device *pdev)
1072{
1073        struct omap_i2c_dev     *dev;
1074        struct i2c_adapter      *adap;
1075        struct resource         *mem;
1076        const struct omap_i2c_bus_platform_data *pdata =
1077                pdev->dev.platform_data;
1078        struct device_node      *node = pdev->dev.of_node;
1079        const struct of_device_id *match;
1080        int irq;
1081        int r;
1082        u32 rev;
1083        u16 minor, major, scheme;
1084
1085        irq = platform_get_irq(pdev, 0);
1086        if (irq < 0) {
1087                dev_err(&pdev->dev, "no irq resource?\n");
1088                return irq;
1089        }
1090
1091        dev = devm_kzalloc(&pdev->dev, sizeof(struct omap_i2c_dev), GFP_KERNEL);
1092        if (!dev) {
1093                dev_err(&pdev->dev, "Menory allocation failed\n");
1094                return -ENOMEM;
1095        }
1096
1097        mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1098        dev->base = devm_ioremap_resource(&pdev->dev, mem);
1099        if (IS_ERR(dev->base))
1100                return PTR_ERR(dev->base);
1101
1102        match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev);
1103        if (match) {
1104                u32 freq = 100000; /* default to 100000 Hz */
1105
1106                pdata = match->data;
1107                dev->flags = pdata->flags;
1108
1109                of_property_read_u32(node, "clock-frequency", &freq);
1110                /* convert DT freq value in Hz into kHz for speed */
1111                dev->speed = freq / 1000;
1112        } else if (pdata != NULL) {
1113                dev->speed = pdata->clkrate;
1114                dev->flags = pdata->flags;
1115                dev->set_mpu_wkup_lat = pdata->set_mpu_wkup_lat;
1116        }
1117
1118        dev->pins = devm_pinctrl_get_select_default(&pdev->dev);
1119        if (IS_ERR(dev->pins)) {
1120                if (PTR_ERR(dev->pins) == -EPROBE_DEFER)
1121                        return -EPROBE_DEFER;
1122
1123                dev_warn(&pdev->dev, "did not get pins for i2c error: %li\n",
1124                         PTR_ERR(dev->pins));
1125                dev->pins = NULL;
1126        }
1127
1128        dev->dev = &pdev->dev;
1129        dev->irq = irq;
1130
1131        spin_lock_init(&dev->lock);
1132
1133        platform_set_drvdata(pdev, dev);
1134        init_completion(&dev->cmd_complete);
1135
1136        dev->reg_shift = (dev->flags >> OMAP_I2C_FLAG_BUS_SHIFT__SHIFT) & 3;
1137
1138        pm_runtime_enable(dev->dev);
1139        pm_runtime_set_autosuspend_delay(dev->dev, OMAP_I2C_PM_TIMEOUT);
1140        pm_runtime_use_autosuspend(dev->dev);
1141
1142        r = pm_runtime_get_sync(dev->dev);
1143        if (IS_ERR_VALUE(r))
1144                goto err_free_mem;
1145
1146        /*
1147         * Read the Rev hi bit-[15:14] ie scheme this is 1 indicates ver2.
1148         * On omap1/3/2 Offset 4 is IE Reg the bit [15:14] is 0 at reset.
1149         * Also since the omap_i2c_read_reg uses reg_map_ip_* a
1150         * raw_readw is done.
1151         */
1152        rev = __raw_readw(dev->base + 0x04);
1153
1154        scheme = OMAP_I2C_SCHEME(rev);
1155        switch (scheme) {
1156        case OMAP_I2C_SCHEME_0:
1157                dev->regs = (u8 *)reg_map_ip_v1;
1158                dev->rev = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG);
1159                minor = OMAP_I2C_REV_SCHEME_0_MAJOR(dev->rev);
1160                major = OMAP_I2C_REV_SCHEME_0_MAJOR(dev->rev);
1161                break;
1162        case OMAP_I2C_SCHEME_1:
1163                /* FALLTHROUGH */
1164        default:
1165                dev->regs = (u8 *)reg_map_ip_v2;
1166                rev = (rev << 16) |
1167                        omap_i2c_read_reg(dev, OMAP_I2C_IP_V2_REVNB_LO);
1168                minor = OMAP_I2C_REV_SCHEME_1_MINOR(rev);
1169                major = OMAP_I2C_REV_SCHEME_1_MAJOR(rev);
1170                dev->rev = rev;
1171        }
1172
1173        dev->errata = 0;
1174
1175        if (dev->rev >= OMAP_I2C_REV_ON_2430 &&
1176                        dev->rev < OMAP_I2C_REV_ON_4430_PLUS)
1177                dev->errata |= I2C_OMAP_ERRATA_I207;
1178
1179        if (dev->rev <= OMAP_I2C_REV_ON_3430_3530)
1180                dev->errata |= I2C_OMAP_ERRATA_I462;
1181
1182        if (!(dev->flags & OMAP_I2C_FLAG_NO_FIFO)) {
1183                u16 s;
1184
1185                /* Set up the fifo size - Get total size */
1186                s = (omap_i2c_read_reg(dev, OMAP_I2C_BUFSTAT_REG) >> 14) & 0x3;
1187                dev->fifo_size = 0x8 << s;
1188
1189                /*
1190                 * Set up notification threshold as half the total available
1191                 * size. This is to ensure that we can handle the status on int
1192                 * call back latencies.
1193                 */
1194
1195                dev->fifo_size = (dev->fifo_size / 2);
1196
1197                if (dev->rev < OMAP_I2C_REV_ON_3630)
1198                        dev->b_hw = 1; /* Enable hardware fixes */
1199
1200                /* calculate wakeup latency constraint for MPU */
1201                if (dev->set_mpu_wkup_lat != NULL)
1202                        dev->latency = (1000000 * dev->fifo_size) /
1203                                       (1000 * dev->speed / 8);
1204        }
1205
1206        /* reset ASAP, clearing any IRQs */
1207        omap_i2c_init(dev);
1208
1209        if (dev->rev < OMAP_I2C_OMAP1_REV_2)
1210                r = devm_request_irq(&pdev->dev, dev->irq, omap_i2c_omap1_isr,
1211                                IRQF_NO_SUSPEND, pdev->name, dev);
1212        else
1213                r = devm_request_threaded_irq(&pdev->dev, dev->irq,
1214                                omap_i2c_isr, omap_i2c_isr_thread,
1215                                IRQF_NO_SUSPEND | IRQF_ONESHOT,
1216                                pdev->name, dev);
1217
1218        if (r) {
1219                dev_err(dev->dev, "failure requesting irq %i\n", dev->irq);
1220                goto err_unuse_clocks;
1221        }
1222
1223        adap = &dev->adapter;
1224        i2c_set_adapdata(adap, dev);
1225        adap->owner = THIS_MODULE;
1226        adap->class = I2C_CLASS_HWMON;
1227        strlcpy(adap->name, "OMAP I2C adapter", sizeof(adap->name));
1228        adap->algo = &omap_i2c_algo;
1229        adap->dev.parent = &pdev->dev;
1230        adap->dev.of_node = pdev->dev.of_node;
1231
1232        /* i2c device drivers may be active on return from add_adapter() */
1233        adap->nr = pdev->id;
1234        r = i2c_add_numbered_adapter(adap);
1235        if (r) {
1236                dev_err(dev->dev, "failure adding adapter\n");
1237                goto err_unuse_clocks;
1238        }
1239
1240        dev_info(dev->dev, "bus %d rev%d.%d at %d kHz\n", adap->nr,
1241                 major, minor, dev->speed);
1242
1243        pm_runtime_mark_last_busy(dev->dev);
1244        pm_runtime_put_autosuspend(dev->dev);
1245
1246        return 0;
1247
1248err_unuse_clocks:
1249        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
1250        pm_runtime_put(dev->dev);
1251        pm_runtime_disable(&pdev->dev);
1252err_free_mem:
1253
1254        return r;
1255}
1256
1257static int omap_i2c_remove(struct platform_device *pdev)
1258{
1259        struct omap_i2c_dev     *dev = platform_get_drvdata(pdev);
1260        int ret;
1261
1262        i2c_del_adapter(&dev->adapter);
1263        ret = pm_runtime_get_sync(&pdev->dev);
1264        if (IS_ERR_VALUE(ret))
1265                return ret;
1266
1267        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
1268        pm_runtime_put(&pdev->dev);
1269        pm_runtime_disable(&pdev->dev);
1270        return 0;
1271}
1272
1273#ifdef CONFIG_PM
1274#ifdef CONFIG_PM_RUNTIME
1275static int omap_i2c_runtime_suspend(struct device *dev)
1276{
1277        struct platform_device *pdev = to_platform_device(dev);
1278        struct omap_i2c_dev *_dev = platform_get_drvdata(pdev);
1279
1280        _dev->iestate = omap_i2c_read_reg(_dev, OMAP_I2C_IE_REG);
1281
1282        omap_i2c_write_reg(_dev, OMAP_I2C_IE_REG, 0);
1283
1284        if (_dev->rev < OMAP_I2C_OMAP1_REV_2) {
1285                omap_i2c_read_reg(_dev, OMAP_I2C_IV_REG); /* Read clears */
1286        } else {
1287                omap_i2c_write_reg(_dev, OMAP_I2C_STAT_REG, _dev->iestate);
1288
1289                /* Flush posted write */
1290                omap_i2c_read_reg(_dev, OMAP_I2C_STAT_REG);
1291        }
1292
1293        return 0;
1294}
1295
1296static int omap_i2c_runtime_resume(struct device *dev)
1297{
1298        struct platform_device *pdev = to_platform_device(dev);
1299        struct omap_i2c_dev *_dev = platform_get_drvdata(pdev);
1300
1301        if (!_dev->regs)
1302                return 0;
1303
1304        __omap_i2c_init(_dev);
1305
1306        return 0;
1307}
1308#endif /* CONFIG_PM_RUNTIME */
1309
1310static struct dev_pm_ops omap_i2c_pm_ops = {
1311        SET_RUNTIME_PM_OPS(omap_i2c_runtime_suspend,
1312                           omap_i2c_runtime_resume, NULL)
1313};
1314#define OMAP_I2C_PM_OPS (&omap_i2c_pm_ops)
1315#else
1316#define OMAP_I2C_PM_OPS NULL
1317#endif /* CONFIG_PM */
1318
1319static struct platform_driver omap_i2c_driver = {
1320        .probe          = omap_i2c_probe,
1321        .remove         = omap_i2c_remove,
1322        .driver         = {
1323                .name   = "omap_i2c",
1324                .owner  = THIS_MODULE,
1325                .pm     = OMAP_I2C_PM_OPS,
1326                .of_match_table = of_match_ptr(omap_i2c_of_match),
1327        },
1328};
1329
1330/* I2C may be needed to bring up other drivers */
1331static int __init
1332omap_i2c_init_driver(void)
1333{
1334        return platform_driver_register(&omap_i2c_driver);
1335}
1336subsys_initcall(omap_i2c_init_driver);
1337
1338static void __exit omap_i2c_exit_driver(void)
1339{
1340        platform_driver_unregister(&omap_i2c_driver);
1341}
1342module_exit(omap_i2c_exit_driver);
1343
1344MODULE_AUTHOR("MontaVista Software, Inc. (and others)");
1345MODULE_DESCRIPTION("TI OMAP I2C bus adapter");
1346MODULE_LICENSE("GPL");
1347MODULE_ALIAS("platform:omap_i2c");
1348