linux/drivers/i2c/busses/i2c-mv64xxx.c
<<
>>
Prefs
   1/*
   2 * Driver for the i2c controller on the Marvell line of host bridges
   3 * (e.g, gt642[46]0, mv643[46]0, mv644[46]0, and Orion SoC family).
   4 *
   5 * Author: Mark A. Greer <mgreer@mvista.com>
   6 *
   7 * 2005 (c) MontaVista, Software, Inc.  This file is licensed under
   8 * the terms of the GNU General Public License version 2.  This program
   9 * is licensed "as is" without any warranty of any kind, whether express
  10 * or implied.
  11 */
  12#include <linux/kernel.h>
  13#include <linux/slab.h>
  14#include <linux/module.h>
  15#include <linux/spinlock.h>
  16#include <linux/i2c.h>
  17#include <linux/interrupt.h>
  18#include <linux/mv643xx_i2c.h>
  19#include <linux/platform_device.h>
  20#include <linux/reset.h>
  21#include <linux/io.h>
  22#include <linux/of.h>
  23#include <linux/of_device.h>
  24#include <linux/of_irq.h>
  25#include <linux/clk.h>
  26#include <linux/err.h>
  27#include <linux/delay.h>
  28
  29#define MV64XXX_I2C_ADDR_ADDR(val)                      ((val & 0x7f) << 1)
  30#define MV64XXX_I2C_BAUD_DIV_N(val)                     (val & 0x7)
  31#define MV64XXX_I2C_BAUD_DIV_M(val)                     ((val & 0xf) << 3)
  32
  33#define MV64XXX_I2C_REG_CONTROL_ACK                     BIT(2)
  34#define MV64XXX_I2C_REG_CONTROL_IFLG                    BIT(3)
  35#define MV64XXX_I2C_REG_CONTROL_STOP                    BIT(4)
  36#define MV64XXX_I2C_REG_CONTROL_START                   BIT(5)
  37#define MV64XXX_I2C_REG_CONTROL_TWSIEN                  BIT(6)
  38#define MV64XXX_I2C_REG_CONTROL_INTEN                   BIT(7)
  39
  40/* Ctlr status values */
  41#define MV64XXX_I2C_STATUS_BUS_ERR                      0x00
  42#define MV64XXX_I2C_STATUS_MAST_START                   0x08
  43#define MV64XXX_I2C_STATUS_MAST_REPEAT_START            0x10
  44#define MV64XXX_I2C_STATUS_MAST_WR_ADDR_ACK             0x18
  45#define MV64XXX_I2C_STATUS_MAST_WR_ADDR_NO_ACK          0x20
  46#define MV64XXX_I2C_STATUS_MAST_WR_ACK                  0x28
  47#define MV64XXX_I2C_STATUS_MAST_WR_NO_ACK               0x30
  48#define MV64XXX_I2C_STATUS_MAST_LOST_ARB                0x38
  49#define MV64XXX_I2C_STATUS_MAST_RD_ADDR_ACK             0x40
  50#define MV64XXX_I2C_STATUS_MAST_RD_ADDR_NO_ACK          0x48
  51#define MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK             0x50
  52#define MV64XXX_I2C_STATUS_MAST_RD_DATA_NO_ACK          0x58
  53#define MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_ACK           0xd0
  54#define MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_NO_ACK        0xd8
  55#define MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_ACK           0xe0
  56#define MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_NO_ACK        0xe8
  57#define MV64XXX_I2C_STATUS_NO_STATUS                    0xf8
  58
  59/* Register defines (I2C bridge) */
  60#define MV64XXX_I2C_REG_TX_DATA_LO                      0xc0
  61#define MV64XXX_I2C_REG_TX_DATA_HI                      0xc4
  62#define MV64XXX_I2C_REG_RX_DATA_LO                      0xc8
  63#define MV64XXX_I2C_REG_RX_DATA_HI                      0xcc
  64#define MV64XXX_I2C_REG_BRIDGE_CONTROL                  0xd0
  65#define MV64XXX_I2C_REG_BRIDGE_STATUS                   0xd4
  66#define MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE               0xd8
  67#define MV64XXX_I2C_REG_BRIDGE_INTR_MASK                0xdC
  68#define MV64XXX_I2C_REG_BRIDGE_TIMING                   0xe0
  69
  70/* Bridge Control values */
  71#define MV64XXX_I2C_BRIDGE_CONTROL_WR                   BIT(0)
  72#define MV64XXX_I2C_BRIDGE_CONTROL_RD                   BIT(1)
  73#define MV64XXX_I2C_BRIDGE_CONTROL_ADDR_SHIFT           2
  74#define MV64XXX_I2C_BRIDGE_CONTROL_ADDR_EXT             BIT(12)
  75#define MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT        13
  76#define MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT        16
  77#define MV64XXX_I2C_BRIDGE_CONTROL_ENABLE               BIT(19)
  78#define MV64XXX_I2C_BRIDGE_CONTROL_REPEATED_START       BIT(20)
  79
  80/* Bridge Status values */
  81#define MV64XXX_I2C_BRIDGE_STATUS_ERROR                 BIT(0)
  82
  83/* Driver states */
  84enum {
  85        MV64XXX_I2C_STATE_INVALID,
  86        MV64XXX_I2C_STATE_IDLE,
  87        MV64XXX_I2C_STATE_WAITING_FOR_START_COND,
  88        MV64XXX_I2C_STATE_WAITING_FOR_RESTART,
  89        MV64XXX_I2C_STATE_WAITING_FOR_ADDR_1_ACK,
  90        MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK,
  91        MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_ACK,
  92        MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_DATA,
  93};
  94
  95/* Driver actions */
  96enum {
  97        MV64XXX_I2C_ACTION_INVALID,
  98        MV64XXX_I2C_ACTION_CONTINUE,
  99        MV64XXX_I2C_ACTION_SEND_RESTART,
 100        MV64XXX_I2C_ACTION_SEND_ADDR_1,
 101        MV64XXX_I2C_ACTION_SEND_ADDR_2,
 102        MV64XXX_I2C_ACTION_SEND_DATA,
 103        MV64XXX_I2C_ACTION_RCV_DATA,
 104        MV64XXX_I2C_ACTION_RCV_DATA_STOP,
 105        MV64XXX_I2C_ACTION_SEND_STOP,
 106};
 107
 108struct mv64xxx_i2c_regs {
 109        u8      addr;
 110        u8      ext_addr;
 111        u8      data;
 112        u8      control;
 113        u8      status;
 114        u8      clock;
 115        u8      soft_reset;
 116};
 117
 118struct mv64xxx_i2c_data {
 119        struct i2c_msg          *msgs;
 120        int                     num_msgs;
 121        int                     irq;
 122        u32                     state;
 123        u32                     action;
 124        u32                     aborting;
 125        u32                     cntl_bits;
 126        void __iomem            *reg_base;
 127        struct mv64xxx_i2c_regs reg_offsets;
 128        u32                     addr1;
 129        u32                     addr2;
 130        u32                     bytes_left;
 131        u32                     byte_posn;
 132        u32                     send_stop;
 133        u32                     block;
 134        int                     rc;
 135        u32                     freq_m;
 136        u32                     freq_n;
 137#if defined(CONFIG_HAVE_CLK)
 138        struct clk              *clk;
 139#endif
 140        wait_queue_head_t       waitq;
 141        spinlock_t              lock;
 142        struct i2c_msg          *msg;
 143        struct i2c_adapter      adapter;
 144        bool                    offload_enabled;
 145/* 5us delay in order to avoid repeated start timing violation */
 146        bool                    errata_delay;
 147        struct reset_control    *rstc;
 148        bool                    irq_clear_inverted;
 149        /* Clk div is 2 to the power n, not 2 to the power n + 1 */
 150        bool                    clk_n_base_0;
 151};
 152
 153static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_mv64xxx = {
 154        .addr           = 0x00,
 155        .ext_addr       = 0x10,
 156        .data           = 0x04,
 157        .control        = 0x08,
 158        .status         = 0x0c,
 159        .clock          = 0x0c,
 160        .soft_reset     = 0x1c,
 161};
 162
 163static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_sun4i = {
 164        .addr           = 0x00,
 165        .ext_addr       = 0x04,
 166        .data           = 0x08,
 167        .control        = 0x0c,
 168        .status         = 0x10,
 169        .clock          = 0x14,
 170        .soft_reset     = 0x18,
 171};
 172
 173static void
 174mv64xxx_i2c_prepare_for_io(struct mv64xxx_i2c_data *drv_data,
 175        struct i2c_msg *msg)
 176{
 177        u32     dir = 0;
 178
 179        drv_data->cntl_bits = MV64XXX_I2C_REG_CONTROL_ACK |
 180                MV64XXX_I2C_REG_CONTROL_INTEN | MV64XXX_I2C_REG_CONTROL_TWSIEN;
 181
 182        if (msg->flags & I2C_M_RD)
 183                dir = 1;
 184
 185        if (msg->flags & I2C_M_TEN) {
 186                drv_data->addr1 = 0xf0 | (((u32)msg->addr & 0x300) >> 7) | dir;
 187                drv_data->addr2 = (u32)msg->addr & 0xff;
 188        } else {
 189                drv_data->addr1 = MV64XXX_I2C_ADDR_ADDR((u32)msg->addr) | dir;
 190                drv_data->addr2 = 0;
 191        }
 192}
 193
 194/*
 195 *****************************************************************************
 196 *
 197 *      Finite State Machine & Interrupt Routines
 198 *
 199 *****************************************************************************
 200 */
 201
 202/* Reset hardware and initialize FSM */
 203static void
 204mv64xxx_i2c_hw_init(struct mv64xxx_i2c_data *drv_data)
 205{
 206        if (drv_data->offload_enabled) {
 207                writel(0, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_CONTROL);
 208                writel(0, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_TIMING);
 209                writel(0, drv_data->reg_base +
 210                        MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
 211                writel(0, drv_data->reg_base +
 212                        MV64XXX_I2C_REG_BRIDGE_INTR_MASK);
 213        }
 214
 215        writel(0, drv_data->reg_base + drv_data->reg_offsets.soft_reset);
 216        writel(MV64XXX_I2C_BAUD_DIV_M(drv_data->freq_m) | MV64XXX_I2C_BAUD_DIV_N(drv_data->freq_n),
 217                drv_data->reg_base + drv_data->reg_offsets.clock);
 218        writel(0, drv_data->reg_base + drv_data->reg_offsets.addr);
 219        writel(0, drv_data->reg_base + drv_data->reg_offsets.ext_addr);
 220        writel(MV64XXX_I2C_REG_CONTROL_TWSIEN | MV64XXX_I2C_REG_CONTROL_STOP,
 221                drv_data->reg_base + drv_data->reg_offsets.control);
 222        drv_data->state = MV64XXX_I2C_STATE_IDLE;
 223}
 224
 225static void
 226mv64xxx_i2c_fsm(struct mv64xxx_i2c_data *drv_data, u32 status)
 227{
 228        /*
 229         * If state is idle, then this is likely the remnants of an old
 230         * operation that driver has given up on or the user has killed.
 231         * If so, issue the stop condition and go to idle.
 232         */
 233        if (drv_data->state == MV64XXX_I2C_STATE_IDLE) {
 234                drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
 235                return;
 236        }
 237
 238        /* The status from the ctlr [mostly] tells us what to do next */
 239        switch (status) {
 240        /* Start condition interrupt */
 241        case MV64XXX_I2C_STATUS_MAST_START: /* 0x08 */
 242        case MV64XXX_I2C_STATUS_MAST_REPEAT_START: /* 0x10 */
 243                drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_1;
 244                drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_ADDR_1_ACK;
 245                break;
 246
 247        /* Performing a write */
 248        case MV64XXX_I2C_STATUS_MAST_WR_ADDR_ACK: /* 0x18 */
 249                if (drv_data->msg->flags & I2C_M_TEN) {
 250                        drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_2;
 251                        drv_data->state =
 252                                MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK;
 253                        break;
 254                }
 255                /* FALLTHRU */
 256        case MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_ACK: /* 0xd0 */
 257        case MV64XXX_I2C_STATUS_MAST_WR_ACK: /* 0x28 */
 258                if ((drv_data->bytes_left == 0)
 259                                || (drv_data->aborting
 260                                        && (drv_data->byte_posn != 0))) {
 261                        if (drv_data->send_stop || drv_data->aborting) {
 262                                drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
 263                                drv_data->state = MV64XXX_I2C_STATE_IDLE;
 264                        } else {
 265                                drv_data->action =
 266                                        MV64XXX_I2C_ACTION_SEND_RESTART;
 267                                drv_data->state =
 268                                        MV64XXX_I2C_STATE_WAITING_FOR_RESTART;
 269                        }
 270                } else {
 271                        drv_data->action = MV64XXX_I2C_ACTION_SEND_DATA;
 272                        drv_data->state =
 273                                MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_ACK;
 274                        drv_data->bytes_left--;
 275                }
 276                break;
 277
 278        /* Performing a read */
 279        case MV64XXX_I2C_STATUS_MAST_RD_ADDR_ACK: /* 40 */
 280                if (drv_data->msg->flags & I2C_M_TEN) {
 281                        drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_2;
 282                        drv_data->state =
 283                                MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK;
 284                        break;
 285                }
 286                /* FALLTHRU */
 287        case MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_ACK: /* 0xe0 */
 288                if (drv_data->bytes_left == 0) {
 289                        drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
 290                        drv_data->state = MV64XXX_I2C_STATE_IDLE;
 291                        break;
 292                }
 293                /* FALLTHRU */
 294        case MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK: /* 0x50 */
 295                if (status != MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK)
 296                        drv_data->action = MV64XXX_I2C_ACTION_CONTINUE;
 297                else {
 298                        drv_data->action = MV64XXX_I2C_ACTION_RCV_DATA;
 299                        drv_data->bytes_left--;
 300                }
 301                drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_DATA;
 302
 303                if ((drv_data->bytes_left == 1) || drv_data->aborting)
 304                        drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_ACK;
 305                break;
 306
 307        case MV64XXX_I2C_STATUS_MAST_RD_DATA_NO_ACK: /* 0x58 */
 308                drv_data->action = MV64XXX_I2C_ACTION_RCV_DATA_STOP;
 309                drv_data->state = MV64XXX_I2C_STATE_IDLE;
 310                break;
 311
 312        case MV64XXX_I2C_STATUS_MAST_WR_ADDR_NO_ACK: /* 0x20 */
 313        case MV64XXX_I2C_STATUS_MAST_WR_NO_ACK: /* 30 */
 314        case MV64XXX_I2C_STATUS_MAST_RD_ADDR_NO_ACK: /* 48 */
 315                /* Doesn't seem to be a device at other end */
 316                drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
 317                drv_data->state = MV64XXX_I2C_STATE_IDLE;
 318                drv_data->rc = -ENXIO;
 319                break;
 320
 321        default:
 322                dev_err(&drv_data->adapter.dev,
 323                        "mv64xxx_i2c_fsm: Ctlr Error -- state: 0x%x, "
 324                        "status: 0x%x, addr: 0x%x, flags: 0x%x\n",
 325                         drv_data->state, status, drv_data->msg->addr,
 326                         drv_data->msg->flags);
 327                drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
 328                mv64xxx_i2c_hw_init(drv_data);
 329                drv_data->rc = -EIO;
 330        }
 331}
 332
 333static void mv64xxx_i2c_send_start(struct mv64xxx_i2c_data *drv_data)
 334{
 335        drv_data->msg = drv_data->msgs;
 336        drv_data->byte_posn = 0;
 337        drv_data->bytes_left = drv_data->msg->len;
 338        drv_data->aborting = 0;
 339        drv_data->rc = 0;
 340
 341        mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs);
 342        writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
 343               drv_data->reg_base + drv_data->reg_offsets.control);
 344}
 345
 346static void
 347mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
 348{
 349        switch(drv_data->action) {
 350        case MV64XXX_I2C_ACTION_SEND_RESTART:
 351                /* We should only get here if we have further messages */
 352                BUG_ON(drv_data->num_msgs == 0);
 353
 354                drv_data->msgs++;
 355                drv_data->num_msgs--;
 356                mv64xxx_i2c_send_start(drv_data);
 357
 358                if (drv_data->errata_delay)
 359                        udelay(5);
 360
 361                /*
 362                 * We're never at the start of the message here, and by this
 363                 * time it's already too late to do any protocol mangling.
 364                 * Thankfully, do not advertise support for that feature.
 365                 */
 366                drv_data->send_stop = drv_data->num_msgs == 1;
 367                break;
 368
 369        case MV64XXX_I2C_ACTION_CONTINUE:
 370                writel(drv_data->cntl_bits,
 371                        drv_data->reg_base + drv_data->reg_offsets.control);
 372                break;
 373
 374        case MV64XXX_I2C_ACTION_SEND_ADDR_1:
 375                writel(drv_data->addr1,
 376                        drv_data->reg_base + drv_data->reg_offsets.data);
 377                writel(drv_data->cntl_bits,
 378                        drv_data->reg_base + drv_data->reg_offsets.control);
 379                break;
 380
 381        case MV64XXX_I2C_ACTION_SEND_ADDR_2:
 382                writel(drv_data->addr2,
 383                        drv_data->reg_base + drv_data->reg_offsets.data);
 384                writel(drv_data->cntl_bits,
 385                        drv_data->reg_base + drv_data->reg_offsets.control);
 386                break;
 387
 388        case MV64XXX_I2C_ACTION_SEND_DATA:
 389                writel(drv_data->msg->buf[drv_data->byte_posn++],
 390                        drv_data->reg_base + drv_data->reg_offsets.data);
 391                writel(drv_data->cntl_bits,
 392                        drv_data->reg_base + drv_data->reg_offsets.control);
 393                break;
 394
 395        case MV64XXX_I2C_ACTION_RCV_DATA:
 396                drv_data->msg->buf[drv_data->byte_posn++] =
 397                        readl(drv_data->reg_base + drv_data->reg_offsets.data);
 398                writel(drv_data->cntl_bits,
 399                        drv_data->reg_base + drv_data->reg_offsets.control);
 400                break;
 401
 402        case MV64XXX_I2C_ACTION_RCV_DATA_STOP:
 403                drv_data->msg->buf[drv_data->byte_posn++] =
 404                        readl(drv_data->reg_base + drv_data->reg_offsets.data);
 405                drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN;
 406                writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
 407                        drv_data->reg_base + drv_data->reg_offsets.control);
 408                drv_data->block = 0;
 409                if (drv_data->errata_delay)
 410                        udelay(5);
 411
 412                wake_up(&drv_data->waitq);
 413                break;
 414
 415        case MV64XXX_I2C_ACTION_INVALID:
 416        default:
 417                dev_err(&drv_data->adapter.dev,
 418                        "mv64xxx_i2c_do_action: Invalid action: %d\n",
 419                        drv_data->action);
 420                drv_data->rc = -EIO;
 421
 422                /* FALLTHRU */
 423        case MV64XXX_I2C_ACTION_SEND_STOP:
 424                drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN;
 425                writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
 426                        drv_data->reg_base + drv_data->reg_offsets.control);
 427                drv_data->block = 0;
 428                wake_up(&drv_data->waitq);
 429                break;
 430        }
 431}
 432
 433static void
 434mv64xxx_i2c_read_offload_rx_data(struct mv64xxx_i2c_data *drv_data,
 435                                 struct i2c_msg *msg)
 436{
 437        u32 buf[2];
 438
 439        buf[0] = readl(drv_data->reg_base + MV64XXX_I2C_REG_RX_DATA_LO);
 440        buf[1] = readl(drv_data->reg_base + MV64XXX_I2C_REG_RX_DATA_HI);
 441
 442        memcpy(msg->buf, buf, msg->len);
 443}
 444
 445static int
 446mv64xxx_i2c_intr_offload(struct mv64xxx_i2c_data *drv_data)
 447{
 448        u32 cause, status;
 449
 450        cause = readl(drv_data->reg_base +
 451                      MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
 452        if (!cause)
 453                return IRQ_NONE;
 454
 455        status = readl(drv_data->reg_base +
 456                       MV64XXX_I2C_REG_BRIDGE_STATUS);
 457
 458        if (status & MV64XXX_I2C_BRIDGE_STATUS_ERROR) {
 459                drv_data->rc = -EIO;
 460                goto out;
 461        }
 462
 463        drv_data->rc = 0;
 464
 465        /*
 466         * Transaction is a one message read transaction, read data
 467         * for this message.
 468         */
 469        if (drv_data->num_msgs == 1 && drv_data->msgs[0].flags & I2C_M_RD) {
 470                mv64xxx_i2c_read_offload_rx_data(drv_data, drv_data->msgs);
 471                drv_data->msgs++;
 472                drv_data->num_msgs--;
 473        }
 474        /*
 475         * Transaction is a two messages write/read transaction, read
 476         * data for the second (read) message.
 477         */
 478        else if (drv_data->num_msgs == 2 &&
 479                 !(drv_data->msgs[0].flags & I2C_M_RD) &&
 480                 drv_data->msgs[1].flags & I2C_M_RD) {
 481                mv64xxx_i2c_read_offload_rx_data(drv_data, drv_data->msgs + 1);
 482                drv_data->msgs += 2;
 483                drv_data->num_msgs -= 2;
 484        }
 485
 486out:
 487        writel(0, drv_data->reg_base +  MV64XXX_I2C_REG_BRIDGE_CONTROL);
 488        writel(0, drv_data->reg_base +
 489               MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
 490        drv_data->block = 0;
 491
 492        wake_up(&drv_data->waitq);
 493
 494        return IRQ_HANDLED;
 495}
 496
 497static irqreturn_t
 498mv64xxx_i2c_intr(int irq, void *dev_id)
 499{
 500        struct mv64xxx_i2c_data *drv_data = dev_id;
 501        unsigned long   flags;
 502        u32             status;
 503        irqreturn_t     rc = IRQ_NONE;
 504
 505        spin_lock_irqsave(&drv_data->lock, flags);
 506
 507        if (drv_data->offload_enabled)
 508                rc = mv64xxx_i2c_intr_offload(drv_data);
 509
 510        while (readl(drv_data->reg_base + drv_data->reg_offsets.control) &
 511                                                MV64XXX_I2C_REG_CONTROL_IFLG) {
 512                status = readl(drv_data->reg_base + drv_data->reg_offsets.status);
 513                mv64xxx_i2c_fsm(drv_data, status);
 514                mv64xxx_i2c_do_action(drv_data);
 515
 516                if (drv_data->irq_clear_inverted)
 517                        writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_IFLG,
 518                               drv_data->reg_base + drv_data->reg_offsets.control);
 519
 520                rc = IRQ_HANDLED;
 521        }
 522        spin_unlock_irqrestore(&drv_data->lock, flags);
 523
 524        return rc;
 525}
 526
 527/*
 528 *****************************************************************************
 529 *
 530 *      I2C Msg Execution Routines
 531 *
 532 *****************************************************************************
 533 */
 534static void
 535mv64xxx_i2c_wait_for_completion(struct mv64xxx_i2c_data *drv_data)
 536{
 537        long            time_left;
 538        unsigned long   flags;
 539        char            abort = 0;
 540
 541        time_left = wait_event_timeout(drv_data->waitq,
 542                !drv_data->block, drv_data->adapter.timeout);
 543
 544        spin_lock_irqsave(&drv_data->lock, flags);
 545        if (!time_left) { /* Timed out */
 546                drv_data->rc = -ETIMEDOUT;
 547                abort = 1;
 548        } else if (time_left < 0) { /* Interrupted/Error */
 549                drv_data->rc = time_left; /* errno value */
 550                abort = 1;
 551        }
 552
 553        if (abort && drv_data->block) {
 554                drv_data->aborting = 1;
 555                spin_unlock_irqrestore(&drv_data->lock, flags);
 556
 557                time_left = wait_event_timeout(drv_data->waitq,
 558                        !drv_data->block, drv_data->adapter.timeout);
 559
 560                if ((time_left <= 0) && drv_data->block) {
 561                        drv_data->state = MV64XXX_I2C_STATE_IDLE;
 562                        dev_err(&drv_data->adapter.dev,
 563                                "mv64xxx: I2C bus locked, block: %d, "
 564                                "time_left: %d\n", drv_data->block,
 565                                (int)time_left);
 566                        mv64xxx_i2c_hw_init(drv_data);
 567                }
 568        } else
 569                spin_unlock_irqrestore(&drv_data->lock, flags);
 570}
 571
 572static int
 573mv64xxx_i2c_execute_msg(struct mv64xxx_i2c_data *drv_data, struct i2c_msg *msg,
 574                                int is_last)
 575{
 576        unsigned long   flags;
 577
 578        spin_lock_irqsave(&drv_data->lock, flags);
 579
 580        drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
 581
 582        drv_data->send_stop = is_last;
 583        drv_data->block = 1;
 584        mv64xxx_i2c_send_start(drv_data);
 585        spin_unlock_irqrestore(&drv_data->lock, flags);
 586
 587        mv64xxx_i2c_wait_for_completion(drv_data);
 588        return drv_data->rc;
 589}
 590
 591static void
 592mv64xxx_i2c_prepare_tx(struct mv64xxx_i2c_data *drv_data)
 593{
 594        struct i2c_msg *msg = drv_data->msgs;
 595        u32 buf[2];
 596
 597        memcpy(buf, msg->buf, msg->len);
 598
 599        writel(buf[0], drv_data->reg_base + MV64XXX_I2C_REG_TX_DATA_LO);
 600        writel(buf[1], drv_data->reg_base + MV64XXX_I2C_REG_TX_DATA_HI);
 601}
 602
 603static int
 604mv64xxx_i2c_offload_xfer(struct mv64xxx_i2c_data *drv_data)
 605{
 606        struct i2c_msg *msgs = drv_data->msgs;
 607        int num = drv_data->num_msgs;
 608        unsigned long ctrl_reg;
 609        unsigned long flags;
 610
 611        spin_lock_irqsave(&drv_data->lock, flags);
 612
 613        /* Build transaction */
 614        ctrl_reg = MV64XXX_I2C_BRIDGE_CONTROL_ENABLE |
 615                (msgs[0].addr << MV64XXX_I2C_BRIDGE_CONTROL_ADDR_SHIFT);
 616
 617        if (msgs[0].flags & I2C_M_TEN)
 618                ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_ADDR_EXT;
 619
 620        /* Single write message transaction */
 621        if (num == 1 && !(msgs[0].flags & I2C_M_RD)) {
 622                size_t len = msgs[0].len - 1;
 623
 624                ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_WR |
 625                        (len << MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT);
 626                mv64xxx_i2c_prepare_tx(drv_data);
 627        }
 628        /* Single read message transaction */
 629        else if (num == 1 && msgs[0].flags & I2C_M_RD) {
 630                size_t len = msgs[0].len - 1;
 631
 632                ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_RD |
 633                        (len << MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT);
 634        }
 635        /*
 636         * Transaction with one write and one read message. This is
 637         * guaranteed by the mv64xx_i2c_can_offload() checks.
 638         */
 639        else if (num == 2) {
 640                size_t lentx = msgs[0].len - 1;
 641                size_t lenrx = msgs[1].len - 1;
 642
 643                ctrl_reg |=
 644                        MV64XXX_I2C_BRIDGE_CONTROL_RD |
 645                        MV64XXX_I2C_BRIDGE_CONTROL_WR |
 646                        (lentx << MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT) |
 647                        (lenrx << MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT) |
 648                        MV64XXX_I2C_BRIDGE_CONTROL_REPEATED_START;
 649                mv64xxx_i2c_prepare_tx(drv_data);
 650        }
 651
 652        /* Execute transaction */
 653        drv_data->block = 1;
 654        writel(ctrl_reg, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_CONTROL);
 655        spin_unlock_irqrestore(&drv_data->lock, flags);
 656
 657        mv64xxx_i2c_wait_for_completion(drv_data);
 658
 659        return drv_data->rc;
 660}
 661
 662static bool
 663mv64xxx_i2c_valid_offload_sz(struct i2c_msg *msg)
 664{
 665        return msg->len <= 8 && msg->len >= 1;
 666}
 667
 668static bool
 669mv64xxx_i2c_can_offload(struct mv64xxx_i2c_data *drv_data)
 670{
 671        struct i2c_msg *msgs = drv_data->msgs;
 672        int num = drv_data->num_msgs;
 673
 674        if (!drv_data->offload_enabled)
 675                return false;
 676
 677        /*
 678         * We can offload a transaction consisting of a single
 679         * message, as long as the message has a length between 1 and
 680         * 8 bytes.
 681         */
 682        if (num == 1 && mv64xxx_i2c_valid_offload_sz(msgs))
 683                return true;
 684
 685        /*
 686         * We can offload a transaction consisting of two messages, if
 687         * the first is a write and a second is a read, and both have
 688         * a length between 1 and 8 bytes.
 689         */
 690        if (num == 2 &&
 691            mv64xxx_i2c_valid_offload_sz(msgs) &&
 692            mv64xxx_i2c_valid_offload_sz(msgs + 1) &&
 693            !(msgs[0].flags & I2C_M_RD) &&
 694            msgs[1].flags & I2C_M_RD)
 695                return true;
 696
 697        return false;
 698}
 699
 700/*
 701 *****************************************************************************
 702 *
 703 *      I2C Core Support Routines (Interface to higher level I2C code)
 704 *
 705 *****************************************************************************
 706 */
 707static u32
 708mv64xxx_i2c_functionality(struct i2c_adapter *adap)
 709{
 710        return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL;
 711}
 712
 713static int
 714mv64xxx_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
 715{
 716        struct mv64xxx_i2c_data *drv_data = i2c_get_adapdata(adap);
 717        int rc, ret = num;
 718
 719        BUG_ON(drv_data->msgs != NULL);
 720        drv_data->msgs = msgs;
 721        drv_data->num_msgs = num;
 722
 723        if (mv64xxx_i2c_can_offload(drv_data))
 724                rc = mv64xxx_i2c_offload_xfer(drv_data);
 725        else
 726                rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[0], num == 1);
 727
 728        if (rc < 0)
 729                ret = rc;
 730
 731        drv_data->num_msgs = 0;
 732        drv_data->msgs = NULL;
 733
 734        return ret;
 735}
 736
 737static const struct i2c_algorithm mv64xxx_i2c_algo = {
 738        .master_xfer = mv64xxx_i2c_xfer,
 739        .functionality = mv64xxx_i2c_functionality,
 740};
 741
 742/*
 743 *****************************************************************************
 744 *
 745 *      Driver Interface & Early Init Routines
 746 *
 747 *****************************************************************************
 748 */
 749static const struct of_device_id mv64xxx_i2c_of_match_table[] = {
 750        { .compatible = "allwinner,sun4i-a10-i2c", .data = &mv64xxx_i2c_regs_sun4i},
 751        { .compatible = "allwinner,sun6i-a31-i2c", .data = &mv64xxx_i2c_regs_sun4i},
 752        { .compatible = "marvell,mv64xxx-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
 753        { .compatible = "marvell,mv78230-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
 754        { .compatible = "marvell,mv78230-a0-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
 755        {}
 756};
 757MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table);
 758
 759#ifdef CONFIG_OF
 760#ifdef CONFIG_HAVE_CLK
 761static int
 762mv64xxx_calc_freq(struct mv64xxx_i2c_data *drv_data,
 763                  const int tclk, const int n, const int m)
 764{
 765        if (drv_data->clk_n_base_0)
 766                return tclk / (10 * (m + 1) * (1 << n));
 767        else
 768                return tclk / (10 * (m + 1) * (2 << n));
 769}
 770
 771static bool
 772mv64xxx_find_baud_factors(struct mv64xxx_i2c_data *drv_data,
 773                          const u32 req_freq, const u32 tclk)
 774{
 775        int freq, delta, best_delta = INT_MAX;
 776        int m, n;
 777
 778        for (n = 0; n <= 7; n++)
 779                for (m = 0; m <= 15; m++) {
 780                        freq = mv64xxx_calc_freq(drv_data, tclk, n, m);
 781                        delta = req_freq - freq;
 782                        if (delta >= 0 && delta < best_delta) {
 783                                drv_data->freq_m = m;
 784                                drv_data->freq_n = n;
 785                                best_delta = delta;
 786                        }
 787                        if (best_delta == 0)
 788                                return true;
 789                }
 790        if (best_delta == INT_MAX)
 791                return false;
 792        return true;
 793}
 794#endif /* CONFIG_HAVE_CLK */
 795
 796static int
 797mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
 798                  struct device *dev)
 799{
 800        /* CLK is mandatory when using DT to describe the i2c bus. We
 801         * need to know tclk in order to calculate bus clock
 802         * factors.
 803         */
 804#if !defined(CONFIG_HAVE_CLK)
 805        /* Have OF but no CLK */
 806        return -ENODEV;
 807#else
 808        const struct of_device_id *device;
 809        struct device_node *np = dev->of_node;
 810        u32 bus_freq, tclk;
 811        int rc = 0;
 812
 813        if (IS_ERR(drv_data->clk)) {
 814                rc = -ENODEV;
 815                goto out;
 816        }
 817        tclk = clk_get_rate(drv_data->clk);
 818
 819        if (of_property_read_u32(np, "clock-frequency", &bus_freq))
 820                bus_freq = 100000; /* 100kHz by default */
 821
 822        if (of_device_is_compatible(np, "allwinner,sun4i-a10-i2c") ||
 823            of_device_is_compatible(np, "allwinner,sun6i-a31-i2c"))
 824                drv_data->clk_n_base_0 = true;
 825
 826        if (!mv64xxx_find_baud_factors(drv_data, bus_freq, tclk)) {
 827                rc = -EINVAL;
 828                goto out;
 829        }
 830        drv_data->irq = irq_of_parse_and_map(np, 0);
 831
 832        drv_data->rstc = devm_reset_control_get_optional(dev, NULL);
 833        if (IS_ERR(drv_data->rstc)) {
 834                if (PTR_ERR(drv_data->rstc) == -EPROBE_DEFER) {
 835                        rc = -EPROBE_DEFER;
 836                        goto out;
 837                }
 838        } else {
 839                reset_control_deassert(drv_data->rstc);
 840        }
 841
 842        /* Its not yet defined how timeouts will be specified in device tree.
 843         * So hard code the value to 1 second.
 844         */
 845        drv_data->adapter.timeout = HZ;
 846
 847        device = of_match_device(mv64xxx_i2c_of_match_table, dev);
 848        if (!device)
 849                return -ENODEV;
 850
 851        memcpy(&drv_data->reg_offsets, device->data, sizeof(drv_data->reg_offsets));
 852
 853        /*
 854         * For controllers embedded in new SoCs activate the
 855         * Transaction Generator support and the errata fix.
 856         */
 857        if (of_device_is_compatible(np, "marvell,mv78230-i2c")) {
 858                drv_data->offload_enabled = true;
 859                drv_data->errata_delay = true;
 860        }
 861
 862        if (of_device_is_compatible(np, "marvell,mv78230-a0-i2c")) {
 863                drv_data->offload_enabled = false;
 864                drv_data->errata_delay = true;
 865        }
 866
 867        if (of_device_is_compatible(np, "allwinner,sun6i-a31-i2c"))
 868                drv_data->irq_clear_inverted = true;
 869
 870out:
 871        return rc;
 872#endif
 873}
 874#else /* CONFIG_OF */
 875static int
 876mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
 877                  struct device *dev)
 878{
 879        return -ENODEV;
 880}
 881#endif /* CONFIG_OF */
 882
 883static int
 884mv64xxx_i2c_probe(struct platform_device *pd)
 885{
 886        struct mv64xxx_i2c_data         *drv_data;
 887        struct mv64xxx_i2c_pdata        *pdata = dev_get_platdata(&pd->dev);
 888        struct resource *r;
 889        int     rc;
 890
 891        if ((!pdata && !pd->dev.of_node))
 892                return -ENODEV;
 893
 894        drv_data = devm_kzalloc(&pd->dev, sizeof(struct mv64xxx_i2c_data),
 895                                GFP_KERNEL);
 896        if (!drv_data)
 897                return -ENOMEM;
 898
 899        r = platform_get_resource(pd, IORESOURCE_MEM, 0);
 900        drv_data->reg_base = devm_ioremap_resource(&pd->dev, r);
 901        if (IS_ERR(drv_data->reg_base))
 902                return PTR_ERR(drv_data->reg_base);
 903
 904        strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
 905                sizeof(drv_data->adapter.name));
 906
 907        init_waitqueue_head(&drv_data->waitq);
 908        spin_lock_init(&drv_data->lock);
 909
 910#if defined(CONFIG_HAVE_CLK)
 911        /* Not all platforms have a clk */
 912        drv_data->clk = devm_clk_get(&pd->dev, NULL);
 913        if (!IS_ERR(drv_data->clk)) {
 914                clk_prepare(drv_data->clk);
 915                clk_enable(drv_data->clk);
 916        }
 917#endif
 918        if (pdata) {
 919                drv_data->freq_m = pdata->freq_m;
 920                drv_data->freq_n = pdata->freq_n;
 921                drv_data->irq = platform_get_irq(pd, 0);
 922                drv_data->adapter.timeout = msecs_to_jiffies(pdata->timeout);
 923                drv_data->offload_enabled = false;
 924                memcpy(&drv_data->reg_offsets, &mv64xxx_i2c_regs_mv64xxx, sizeof(drv_data->reg_offsets));
 925        } else if (pd->dev.of_node) {
 926                rc = mv64xxx_of_config(drv_data, &pd->dev);
 927                if (rc)
 928                        goto exit_clk;
 929        }
 930        if (drv_data->irq < 0) {
 931                rc = -ENXIO;
 932                goto exit_reset;
 933        }
 934
 935        drv_data->adapter.dev.parent = &pd->dev;
 936        drv_data->adapter.algo = &mv64xxx_i2c_algo;
 937        drv_data->adapter.owner = THIS_MODULE;
 938        drv_data->adapter.class = I2C_CLASS_DEPRECATED;
 939        drv_data->adapter.nr = pd->id;
 940        drv_data->adapter.dev.of_node = pd->dev.of_node;
 941        platform_set_drvdata(pd, drv_data);
 942        i2c_set_adapdata(&drv_data->adapter, drv_data);
 943
 944        mv64xxx_i2c_hw_init(drv_data);
 945
 946        rc = request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,
 947                         MV64XXX_I2C_CTLR_NAME, drv_data);
 948        if (rc) {
 949                dev_err(&drv_data->adapter.dev,
 950                        "mv64xxx: Can't register intr handler irq%d: %d\n",
 951                        drv_data->irq, rc);
 952                goto exit_reset;
 953        } else if ((rc = i2c_add_numbered_adapter(&drv_data->adapter)) != 0) {
 954                dev_err(&drv_data->adapter.dev,
 955                        "mv64xxx: Can't add i2c adapter, rc: %d\n", -rc);
 956                goto exit_free_irq;
 957        }
 958
 959        return 0;
 960
 961exit_free_irq:
 962        free_irq(drv_data->irq, drv_data);
 963exit_reset:
 964        if (!IS_ERR_OR_NULL(drv_data->rstc))
 965                reset_control_assert(drv_data->rstc);
 966exit_clk:
 967#if defined(CONFIG_HAVE_CLK)
 968        /* Not all platforms have a clk */
 969        if (!IS_ERR(drv_data->clk)) {
 970                clk_disable(drv_data->clk);
 971                clk_unprepare(drv_data->clk);
 972        }
 973#endif
 974        return rc;
 975}
 976
 977static int
 978mv64xxx_i2c_remove(struct platform_device *dev)
 979{
 980        struct mv64xxx_i2c_data         *drv_data = platform_get_drvdata(dev);
 981
 982        i2c_del_adapter(&drv_data->adapter);
 983        free_irq(drv_data->irq, drv_data);
 984        if (!IS_ERR_OR_NULL(drv_data->rstc))
 985                reset_control_assert(drv_data->rstc);
 986#if defined(CONFIG_HAVE_CLK)
 987        /* Not all platforms have a clk */
 988        if (!IS_ERR(drv_data->clk)) {
 989                clk_disable(drv_data->clk);
 990                clk_unprepare(drv_data->clk);
 991        }
 992#endif
 993
 994        return 0;
 995}
 996
 997static struct platform_driver mv64xxx_i2c_driver = {
 998        .probe  = mv64xxx_i2c_probe,
 999        .remove = mv64xxx_i2c_remove,
1000        .driver = {
1001                .name   = MV64XXX_I2C_CTLR_NAME,
1002                .of_match_table = mv64xxx_i2c_of_match_table,
1003        },
1004};
1005
1006module_platform_driver(mv64xxx_i2c_driver);
1007
1008MODULE_AUTHOR("Mark A. Greer <mgreer@mvista.com>");
1009MODULE_DESCRIPTION("Marvell mv64xxx host bridge i2c ctlr driver");
1010MODULE_LICENSE("GPL");
1011