linux/drivers/i2c/busses/i2c-qup.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
   3 * Copyright (c) 2014, Sony Mobile Communications AB.
   4 *
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 and
   8 * only version 2 as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 */
  16
  17#include <linux/clk.h>
  18#include <linux/delay.h>
  19#include <linux/err.h>
  20#include <linux/i2c.h>
  21#include <linux/interrupt.h>
  22#include <linux/io.h>
  23#include <linux/module.h>
  24#include <linux/of.h>
  25#include <linux/platform_device.h>
  26#include <linux/pm_runtime.h>
  27
  28/* QUP Registers */
  29#define QUP_CONFIG              0x000
  30#define QUP_STATE               0x004
  31#define QUP_IO_MODE             0x008
  32#define QUP_SW_RESET            0x00c
  33#define QUP_OPERATIONAL         0x018
  34#define QUP_ERROR_FLAGS         0x01c
  35#define QUP_ERROR_FLAGS_EN      0x020
  36#define QUP_HW_VERSION          0x030
  37#define QUP_MX_OUTPUT_CNT       0x100
  38#define QUP_OUT_FIFO_BASE       0x110
  39#define QUP_MX_WRITE_CNT        0x150
  40#define QUP_MX_INPUT_CNT        0x200
  41#define QUP_MX_READ_CNT         0x208
  42#define QUP_IN_FIFO_BASE        0x218
  43#define QUP_I2C_CLK_CTL         0x400
  44#define QUP_I2C_STATUS          0x404
  45
  46/* QUP States and reset values */
  47#define QUP_RESET_STATE         0
  48#define QUP_RUN_STATE           1
  49#define QUP_PAUSE_STATE         3
  50#define QUP_STATE_MASK          3
  51
  52#define QUP_STATE_VALID         BIT(2)
  53#define QUP_I2C_MAST_GEN        BIT(4)
  54
  55#define QUP_OPERATIONAL_RESET   0x000ff0
  56#define QUP_I2C_STATUS_RESET    0xfffffc
  57
  58/* QUP OPERATIONAL FLAGS */
  59#define QUP_I2C_NACK_FLAG       BIT(3)
  60#define QUP_OUT_NOT_EMPTY       BIT(4)
  61#define QUP_IN_NOT_EMPTY        BIT(5)
  62#define QUP_OUT_FULL            BIT(6)
  63#define QUP_OUT_SVC_FLAG        BIT(8)
  64#define QUP_IN_SVC_FLAG         BIT(9)
  65#define QUP_MX_OUTPUT_DONE      BIT(10)
  66#define QUP_MX_INPUT_DONE       BIT(11)
  67
  68/* I2C mini core related values */
  69#define QUP_CLOCK_AUTO_GATE     BIT(13)
  70#define I2C_MINI_CORE           (2 << 8)
  71#define I2C_N_VAL               15
  72/* Most significant word offset in FIFO port */
  73#define QUP_MSW_SHIFT           (I2C_N_VAL + 1)
  74
  75/* Packing/Unpacking words in FIFOs, and IO modes */
  76#define QUP_OUTPUT_BLK_MODE     (1 << 10)
  77#define QUP_INPUT_BLK_MODE      (1 << 12)
  78#define QUP_UNPACK_EN           BIT(14)
  79#define QUP_PACK_EN             BIT(15)
  80
  81#define QUP_REPACK_EN           (QUP_UNPACK_EN | QUP_PACK_EN)
  82
  83#define QUP_OUTPUT_BLOCK_SIZE(x)(((x) >> 0) & 0x03)
  84#define QUP_OUTPUT_FIFO_SIZE(x) (((x) >> 2) & 0x07)
  85#define QUP_INPUT_BLOCK_SIZE(x) (((x) >> 5) & 0x03)
  86#define QUP_INPUT_FIFO_SIZE(x)  (((x) >> 7) & 0x07)
  87
  88/* QUP tags */
  89#define QUP_TAG_START           (1 << 8)
  90#define QUP_TAG_DATA            (2 << 8)
  91#define QUP_TAG_STOP            (3 << 8)
  92#define QUP_TAG_REC             (4 << 8)
  93
  94/* Status, Error flags */
  95#define I2C_STATUS_WR_BUFFER_FULL       BIT(0)
  96#define I2C_STATUS_BUS_ACTIVE           BIT(8)
  97#define I2C_STATUS_ERROR_MASK           0x38000fc
  98#define QUP_STATUS_ERROR_FLAGS          0x7c
  99
 100#define QUP_READ_LIMIT                  256
 101
 102struct qup_i2c_dev {
 103        struct device           *dev;
 104        void __iomem            *base;
 105        int                     irq;
 106        struct clk              *clk;
 107        struct clk              *pclk;
 108        struct i2c_adapter      adap;
 109
 110        int                     clk_ctl;
 111        int                     out_fifo_sz;
 112        int                     in_fifo_sz;
 113        int                     out_blk_sz;
 114        int                     in_blk_sz;
 115
 116        unsigned long           one_byte_t;
 117
 118        struct i2c_msg          *msg;
 119        /* Current posion in user message buffer */
 120        int                     pos;
 121        /* I2C protocol errors */
 122        u32                     bus_err;
 123        /* QUP core errors */
 124        u32                     qup_err;
 125
 126        struct completion       xfer;
 127};
 128
 129static irqreturn_t qup_i2c_interrupt(int irq, void *dev)
 130{
 131        struct qup_i2c_dev *qup = dev;
 132        u32 bus_err;
 133        u32 qup_err;
 134        u32 opflags;
 135
 136        bus_err = readl(qup->base + QUP_I2C_STATUS);
 137        qup_err = readl(qup->base + QUP_ERROR_FLAGS);
 138        opflags = readl(qup->base + QUP_OPERATIONAL);
 139
 140        if (!qup->msg) {
 141                /* Clear Error interrupt */
 142                writel(QUP_RESET_STATE, qup->base + QUP_STATE);
 143                return IRQ_HANDLED;
 144        }
 145
 146        bus_err &= I2C_STATUS_ERROR_MASK;
 147        qup_err &= QUP_STATUS_ERROR_FLAGS;
 148
 149        if (qup_err) {
 150                /* Clear Error interrupt */
 151                writel(qup_err, qup->base + QUP_ERROR_FLAGS);
 152                goto done;
 153        }
 154
 155        if (bus_err) {
 156                /* Clear Error interrupt */
 157                writel(QUP_RESET_STATE, qup->base + QUP_STATE);
 158                goto done;
 159        }
 160
 161        if (opflags & QUP_IN_SVC_FLAG)
 162                writel(QUP_IN_SVC_FLAG, qup->base + QUP_OPERATIONAL);
 163
 164        if (opflags & QUP_OUT_SVC_FLAG)
 165                writel(QUP_OUT_SVC_FLAG, qup->base + QUP_OPERATIONAL);
 166
 167done:
 168        qup->qup_err = qup_err;
 169        qup->bus_err = bus_err;
 170        complete(&qup->xfer);
 171        return IRQ_HANDLED;
 172}
 173
 174static int qup_i2c_poll_state_mask(struct qup_i2c_dev *qup,
 175                                   u32 req_state, u32 req_mask)
 176{
 177        int retries = 1;
 178        u32 state;
 179
 180        /*
 181         * State transition takes 3 AHB clocks cycles + 3 I2C master clock
 182         * cycles. So retry once after a 1uS delay.
 183         */
 184        do {
 185                state = readl(qup->base + QUP_STATE);
 186
 187                if (state & QUP_STATE_VALID &&
 188                    (state & req_mask) == req_state)
 189                        return 0;
 190
 191                udelay(1);
 192        } while (retries--);
 193
 194        return -ETIMEDOUT;
 195}
 196
 197static int qup_i2c_poll_state(struct qup_i2c_dev *qup, u32 req_state)
 198{
 199        return qup_i2c_poll_state_mask(qup, req_state, QUP_STATE_MASK);
 200}
 201
 202static int qup_i2c_poll_state_valid(struct qup_i2c_dev *qup)
 203{
 204        return qup_i2c_poll_state_mask(qup, 0, 0);
 205}
 206
 207static int qup_i2c_poll_state_i2c_master(struct qup_i2c_dev *qup)
 208{
 209        return qup_i2c_poll_state_mask(qup, QUP_I2C_MAST_GEN, QUP_I2C_MAST_GEN);
 210}
 211
 212static int qup_i2c_change_state(struct qup_i2c_dev *qup, u32 state)
 213{
 214        if (qup_i2c_poll_state_valid(qup) != 0)
 215                return -EIO;
 216
 217        writel(state, qup->base + QUP_STATE);
 218
 219        if (qup_i2c_poll_state(qup, state) != 0)
 220                return -EIO;
 221        return 0;
 222}
 223
 224static int qup_i2c_wait_writeready(struct qup_i2c_dev *qup)
 225{
 226        unsigned long timeout;
 227        u32 opflags;
 228        u32 status;
 229
 230        timeout = jiffies + HZ;
 231
 232        for (;;) {
 233                opflags = readl(qup->base + QUP_OPERATIONAL);
 234                status = readl(qup->base + QUP_I2C_STATUS);
 235
 236                if (!(opflags & QUP_OUT_NOT_EMPTY) &&
 237                    !(status & I2C_STATUS_BUS_ACTIVE))
 238                        return 0;
 239
 240                if (time_after(jiffies, timeout))
 241                        return -ETIMEDOUT;
 242
 243                usleep_range(qup->one_byte_t, qup->one_byte_t * 2);
 244        }
 245}
 246
 247static void qup_i2c_set_write_mode(struct qup_i2c_dev *qup, struct i2c_msg *msg)
 248{
 249        /* Number of entries to shift out, including the start */
 250        int total = msg->len + 1;
 251
 252        if (total < qup->out_fifo_sz) {
 253                /* FIFO mode */
 254                writel(QUP_REPACK_EN, qup->base + QUP_IO_MODE);
 255                writel(total, qup->base + QUP_MX_WRITE_CNT);
 256        } else {
 257                /* BLOCK mode (transfer data on chunks) */
 258                writel(QUP_OUTPUT_BLK_MODE | QUP_REPACK_EN,
 259                       qup->base + QUP_IO_MODE);
 260                writel(total, qup->base + QUP_MX_OUTPUT_CNT);
 261        }
 262}
 263
 264static void qup_i2c_issue_write(struct qup_i2c_dev *qup, struct i2c_msg *msg)
 265{
 266        u32 addr = msg->addr << 1;
 267        u32 qup_tag;
 268        u32 opflags;
 269        int idx;
 270        u32 val;
 271
 272        if (qup->pos == 0) {
 273                val = QUP_TAG_START | addr;
 274                idx = 1;
 275        } else {
 276                val = 0;
 277                idx = 0;
 278        }
 279
 280        while (qup->pos < msg->len) {
 281                /* Check that there's space in the FIFO for our pair */
 282                opflags = readl(qup->base + QUP_OPERATIONAL);
 283                if (opflags & QUP_OUT_FULL)
 284                        break;
 285
 286                if (qup->pos == msg->len - 1)
 287                        qup_tag = QUP_TAG_STOP;
 288                else
 289                        qup_tag = QUP_TAG_DATA;
 290
 291                if (idx & 1)
 292                        val |= (qup_tag | msg->buf[qup->pos]) << QUP_MSW_SHIFT;
 293                else
 294                        val = qup_tag | msg->buf[qup->pos];
 295
 296                /* Write out the pair and the last odd value */
 297                if (idx & 1 || qup->pos == msg->len - 1)
 298                        writel(val, qup->base + QUP_OUT_FIFO_BASE);
 299
 300                qup->pos++;
 301                idx++;
 302        }
 303}
 304
 305static int qup_i2c_write_one(struct qup_i2c_dev *qup, struct i2c_msg *msg)
 306{
 307        unsigned long left;
 308        int ret;
 309
 310        qup->msg = msg;
 311        qup->pos = 0;
 312
 313        enable_irq(qup->irq);
 314
 315        qup_i2c_set_write_mode(qup, msg);
 316
 317        ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
 318        if (ret)
 319                goto err;
 320
 321        writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
 322
 323        do {
 324                ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
 325                if (ret)
 326                        goto err;
 327
 328                qup_i2c_issue_write(qup, msg);
 329
 330                ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
 331                if (ret)
 332                        goto err;
 333
 334                left = wait_for_completion_timeout(&qup->xfer, HZ);
 335                if (!left) {
 336                        writel(1, qup->base + QUP_SW_RESET);
 337                        ret = -ETIMEDOUT;
 338                        goto err;
 339                }
 340
 341                if (qup->bus_err || qup->qup_err) {
 342                        if (qup->bus_err & QUP_I2C_NACK_FLAG)
 343                                dev_err(qup->dev, "NACK from %x\n", msg->addr);
 344                        ret = -EIO;
 345                        goto err;
 346                }
 347        } while (qup->pos < msg->len);
 348
 349        /* Wait for the outstanding data in the fifo to drain */
 350        ret = qup_i2c_wait_writeready(qup);
 351
 352err:
 353        disable_irq(qup->irq);
 354        qup->msg = NULL;
 355
 356        return ret;
 357}
 358
 359static void qup_i2c_set_read_mode(struct qup_i2c_dev *qup, int len)
 360{
 361        if (len < qup->in_fifo_sz) {
 362                /* FIFO mode */
 363                writel(QUP_REPACK_EN, qup->base + QUP_IO_MODE);
 364                writel(len, qup->base + QUP_MX_READ_CNT);
 365        } else {
 366                /* BLOCK mode (transfer data on chunks) */
 367                writel(QUP_INPUT_BLK_MODE | QUP_REPACK_EN,
 368                       qup->base + QUP_IO_MODE);
 369                writel(len, qup->base + QUP_MX_INPUT_CNT);
 370        }
 371}
 372
 373static void qup_i2c_issue_read(struct qup_i2c_dev *qup, struct i2c_msg *msg)
 374{
 375        u32 addr, len, val;
 376
 377        addr = (msg->addr << 1) | 1;
 378
 379        /* 0 is used to specify a length 256 (QUP_READ_LIMIT) */
 380        len = (msg->len == QUP_READ_LIMIT) ? 0 : msg->len;
 381
 382        val = ((QUP_TAG_REC | len) << QUP_MSW_SHIFT) | QUP_TAG_START | addr;
 383        writel(val, qup->base + QUP_OUT_FIFO_BASE);
 384}
 385
 386
 387static void qup_i2c_read_fifo(struct qup_i2c_dev *qup, struct i2c_msg *msg)
 388{
 389        u32 opflags;
 390        u32 val = 0;
 391        int idx;
 392
 393        for (idx = 0; qup->pos < msg->len; idx++) {
 394                if ((idx & 1) == 0) {
 395                        /* Check that FIFO have data */
 396                        opflags = readl(qup->base + QUP_OPERATIONAL);
 397                        if (!(opflags & QUP_IN_NOT_EMPTY))
 398                                break;
 399
 400                        /* Reading 2 words at time */
 401                        val = readl(qup->base + QUP_IN_FIFO_BASE);
 402
 403                        msg->buf[qup->pos++] = val & 0xFF;
 404                } else {
 405                        msg->buf[qup->pos++] = val >> QUP_MSW_SHIFT;
 406                }
 407        }
 408}
 409
 410static int qup_i2c_read_one(struct qup_i2c_dev *qup, struct i2c_msg *msg)
 411{
 412        unsigned long left;
 413        int ret;
 414
 415        qup->msg = msg;
 416        qup->pos  = 0;
 417
 418        enable_irq(qup->irq);
 419
 420        qup_i2c_set_read_mode(qup, msg->len);
 421
 422        ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
 423        if (ret)
 424                goto err;
 425
 426        writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
 427
 428        ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
 429        if (ret)
 430                goto err;
 431
 432        qup_i2c_issue_read(qup, msg);
 433
 434        ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
 435        if (ret)
 436                goto err;
 437
 438        do {
 439                left = wait_for_completion_timeout(&qup->xfer, HZ);
 440                if (!left) {
 441                        writel(1, qup->base + QUP_SW_RESET);
 442                        ret = -ETIMEDOUT;
 443                        goto err;
 444                }
 445
 446                if (qup->bus_err || qup->qup_err) {
 447                        if (qup->bus_err & QUP_I2C_NACK_FLAG)
 448                                dev_err(qup->dev, "NACK from %x\n", msg->addr);
 449                        ret = -EIO;
 450                        goto err;
 451                }
 452
 453                qup_i2c_read_fifo(qup, msg);
 454        } while (qup->pos < msg->len);
 455
 456err:
 457        disable_irq(qup->irq);
 458        qup->msg = NULL;
 459
 460        return ret;
 461}
 462
 463static int qup_i2c_xfer(struct i2c_adapter *adap,
 464                        struct i2c_msg msgs[],
 465                        int num)
 466{
 467        struct qup_i2c_dev *qup = i2c_get_adapdata(adap);
 468        int ret, idx;
 469
 470        ret = pm_runtime_get_sync(qup->dev);
 471        if (ret < 0)
 472                goto out;
 473
 474        writel(1, qup->base + QUP_SW_RESET);
 475        ret = qup_i2c_poll_state(qup, QUP_RESET_STATE);
 476        if (ret)
 477                goto out;
 478
 479        /* Configure QUP as I2C mini core */
 480        writel(I2C_MINI_CORE | I2C_N_VAL, qup->base + QUP_CONFIG);
 481
 482        for (idx = 0; idx < num; idx++) {
 483                if (msgs[idx].len == 0) {
 484                        ret = -EINVAL;
 485                        goto out;
 486                }
 487
 488                if (qup_i2c_poll_state_i2c_master(qup)) {
 489                        ret = -EIO;
 490                        goto out;
 491                }
 492
 493                if (msgs[idx].flags & I2C_M_RD)
 494                        ret = qup_i2c_read_one(qup, &msgs[idx]);
 495                else
 496                        ret = qup_i2c_write_one(qup, &msgs[idx]);
 497
 498                if (ret)
 499                        break;
 500
 501                ret = qup_i2c_change_state(qup, QUP_RESET_STATE);
 502                if (ret)
 503                        break;
 504        }
 505
 506        if (ret == 0)
 507                ret = num;
 508out:
 509
 510        pm_runtime_mark_last_busy(qup->dev);
 511        pm_runtime_put_autosuspend(qup->dev);
 512
 513        return ret;
 514}
 515
 516static u32 qup_i2c_func(struct i2c_adapter *adap)
 517{
 518        return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
 519}
 520
 521static const struct i2c_algorithm qup_i2c_algo = {
 522        .master_xfer    = qup_i2c_xfer,
 523        .functionality  = qup_i2c_func,
 524};
 525
 526/*
 527 * The QUP block will issue a NACK and STOP on the bus when reaching
 528 * the end of the read, the length of the read is specified as one byte
 529 * which limits the possible read to 256 (QUP_READ_LIMIT) bytes.
 530 */
 531static struct i2c_adapter_quirks qup_i2c_quirks = {
 532        .max_read_len = QUP_READ_LIMIT,
 533};
 534
 535static void qup_i2c_enable_clocks(struct qup_i2c_dev *qup)
 536{
 537        clk_prepare_enable(qup->clk);
 538        clk_prepare_enable(qup->pclk);
 539}
 540
 541static void qup_i2c_disable_clocks(struct qup_i2c_dev *qup)
 542{
 543        u32 config;
 544
 545        qup_i2c_change_state(qup, QUP_RESET_STATE);
 546        clk_disable_unprepare(qup->clk);
 547        config = readl(qup->base + QUP_CONFIG);
 548        config |= QUP_CLOCK_AUTO_GATE;
 549        writel(config, qup->base + QUP_CONFIG);
 550        clk_disable_unprepare(qup->pclk);
 551}
 552
 553static int qup_i2c_probe(struct platform_device *pdev)
 554{
 555        static const int blk_sizes[] = {4, 16, 32};
 556        struct device_node *node = pdev->dev.of_node;
 557        struct qup_i2c_dev *qup;
 558        unsigned long one_bit_t;
 559        struct resource *res;
 560        u32 io_mode, hw_ver, size;
 561        int ret, fs_div, hs_div;
 562        int src_clk_freq;
 563        u32 clk_freq = 100000;
 564
 565        qup = devm_kzalloc(&pdev->dev, sizeof(*qup), GFP_KERNEL);
 566        if (!qup)
 567                return -ENOMEM;
 568
 569        qup->dev = &pdev->dev;
 570        init_completion(&qup->xfer);
 571        platform_set_drvdata(pdev, qup);
 572
 573        of_property_read_u32(node, "clock-frequency", &clk_freq);
 574
 575        /* We support frequencies up to FAST Mode (400KHz) */
 576        if (!clk_freq || clk_freq > 400000) {
 577                dev_err(qup->dev, "clock frequency not supported %d\n",
 578                        clk_freq);
 579                return -EINVAL;
 580        }
 581
 582        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 583        qup->base = devm_ioremap_resource(qup->dev, res);
 584        if (IS_ERR(qup->base))
 585                return PTR_ERR(qup->base);
 586
 587        qup->irq = platform_get_irq(pdev, 0);
 588        if (qup->irq < 0) {
 589                dev_err(qup->dev, "No IRQ defined\n");
 590                return qup->irq;
 591        }
 592
 593        qup->clk = devm_clk_get(qup->dev, "core");
 594        if (IS_ERR(qup->clk)) {
 595                dev_err(qup->dev, "Could not get core clock\n");
 596                return PTR_ERR(qup->clk);
 597        }
 598
 599        qup->pclk = devm_clk_get(qup->dev, "iface");
 600        if (IS_ERR(qup->pclk)) {
 601                dev_err(qup->dev, "Could not get iface clock\n");
 602                return PTR_ERR(qup->pclk);
 603        }
 604
 605        qup_i2c_enable_clocks(qup);
 606
 607        /*
 608         * Bootloaders might leave a pending interrupt on certain QUP's,
 609         * so we reset the core before registering for interrupts.
 610         */
 611        writel(1, qup->base + QUP_SW_RESET);
 612        ret = qup_i2c_poll_state_valid(qup);
 613        if (ret)
 614                goto fail;
 615
 616        ret = devm_request_irq(qup->dev, qup->irq, qup_i2c_interrupt,
 617                               IRQF_TRIGGER_HIGH, "i2c_qup", qup);
 618        if (ret) {
 619                dev_err(qup->dev, "Request %d IRQ failed\n", qup->irq);
 620                goto fail;
 621        }
 622        disable_irq(qup->irq);
 623
 624        hw_ver = readl(qup->base + QUP_HW_VERSION);
 625        dev_dbg(qup->dev, "Revision %x\n", hw_ver);
 626
 627        io_mode = readl(qup->base + QUP_IO_MODE);
 628
 629        /*
 630         * The block/fifo size w.r.t. 'actual data' is 1/2 due to 'tag'
 631         * associated with each byte written/received
 632         */
 633        size = QUP_OUTPUT_BLOCK_SIZE(io_mode);
 634        if (size >= ARRAY_SIZE(blk_sizes)) {
 635                ret = -EIO;
 636                goto fail;
 637        }
 638        qup->out_blk_sz = blk_sizes[size] / 2;
 639
 640        size = QUP_INPUT_BLOCK_SIZE(io_mode);
 641        if (size >= ARRAY_SIZE(blk_sizes)) {
 642                ret = -EIO;
 643                goto fail;
 644        }
 645        qup->in_blk_sz = blk_sizes[size] / 2;
 646
 647        size = QUP_OUTPUT_FIFO_SIZE(io_mode);
 648        qup->out_fifo_sz = qup->out_blk_sz * (2 << size);
 649
 650        size = QUP_INPUT_FIFO_SIZE(io_mode);
 651        qup->in_fifo_sz = qup->in_blk_sz * (2 << size);
 652
 653        src_clk_freq = clk_get_rate(qup->clk);
 654        fs_div = ((src_clk_freq / clk_freq) / 2) - 3;
 655        hs_div = 3;
 656        qup->clk_ctl = (hs_div << 8) | (fs_div & 0xff);
 657
 658        /*
 659         * Time it takes for a byte to be clocked out on the bus.
 660         * Each byte takes 9 clock cycles (8 bits + 1 ack).
 661         */
 662        one_bit_t = (USEC_PER_SEC / clk_freq) + 1;
 663        qup->one_byte_t = one_bit_t * 9;
 664
 665        dev_dbg(qup->dev, "IN:block:%d, fifo:%d, OUT:block:%d, fifo:%d\n",
 666                qup->in_blk_sz, qup->in_fifo_sz,
 667                qup->out_blk_sz, qup->out_fifo_sz);
 668
 669        i2c_set_adapdata(&qup->adap, qup);
 670        qup->adap.algo = &qup_i2c_algo;
 671        qup->adap.quirks = &qup_i2c_quirks;
 672        qup->adap.dev.parent = qup->dev;
 673        qup->adap.dev.of_node = pdev->dev.of_node;
 674        strlcpy(qup->adap.name, "QUP I2C adapter", sizeof(qup->adap.name));
 675
 676        pm_runtime_set_autosuspend_delay(qup->dev, MSEC_PER_SEC);
 677        pm_runtime_use_autosuspend(qup->dev);
 678        pm_runtime_set_active(qup->dev);
 679        pm_runtime_enable(qup->dev);
 680
 681        ret = i2c_add_adapter(&qup->adap);
 682        if (ret)
 683                goto fail_runtime;
 684
 685        return 0;
 686
 687fail_runtime:
 688        pm_runtime_disable(qup->dev);
 689        pm_runtime_set_suspended(qup->dev);
 690fail:
 691        qup_i2c_disable_clocks(qup);
 692        return ret;
 693}
 694
 695static int qup_i2c_remove(struct platform_device *pdev)
 696{
 697        struct qup_i2c_dev *qup = platform_get_drvdata(pdev);
 698
 699        disable_irq(qup->irq);
 700        qup_i2c_disable_clocks(qup);
 701        i2c_del_adapter(&qup->adap);
 702        pm_runtime_disable(qup->dev);
 703        pm_runtime_set_suspended(qup->dev);
 704        return 0;
 705}
 706
 707#ifdef CONFIG_PM
 708static int qup_i2c_pm_suspend_runtime(struct device *device)
 709{
 710        struct qup_i2c_dev *qup = dev_get_drvdata(device);
 711
 712        dev_dbg(device, "pm_runtime: suspending...\n");
 713        qup_i2c_disable_clocks(qup);
 714        return 0;
 715}
 716
 717static int qup_i2c_pm_resume_runtime(struct device *device)
 718{
 719        struct qup_i2c_dev *qup = dev_get_drvdata(device);
 720
 721        dev_dbg(device, "pm_runtime: resuming...\n");
 722        qup_i2c_enable_clocks(qup);
 723        return 0;
 724}
 725#endif
 726
 727#ifdef CONFIG_PM_SLEEP
 728static int qup_i2c_suspend(struct device *device)
 729{
 730        qup_i2c_pm_suspend_runtime(device);
 731        return 0;
 732}
 733
 734static int qup_i2c_resume(struct device *device)
 735{
 736        qup_i2c_pm_resume_runtime(device);
 737        pm_runtime_mark_last_busy(device);
 738        pm_request_autosuspend(device);
 739        return 0;
 740}
 741#endif
 742
 743static const struct dev_pm_ops qup_i2c_qup_pm_ops = {
 744        SET_SYSTEM_SLEEP_PM_OPS(
 745                qup_i2c_suspend,
 746                qup_i2c_resume)
 747        SET_RUNTIME_PM_OPS(
 748                qup_i2c_pm_suspend_runtime,
 749                qup_i2c_pm_resume_runtime,
 750                NULL)
 751};
 752
 753static const struct of_device_id qup_i2c_dt_match[] = {
 754        { .compatible = "qcom,i2c-qup-v1.1.1" },
 755        { .compatible = "qcom,i2c-qup-v2.1.1" },
 756        { .compatible = "qcom,i2c-qup-v2.2.1" },
 757        {}
 758};
 759MODULE_DEVICE_TABLE(of, qup_i2c_dt_match);
 760
 761static struct platform_driver qup_i2c_driver = {
 762        .probe  = qup_i2c_probe,
 763        .remove = qup_i2c_remove,
 764        .driver = {
 765                .name = "i2c_qup",
 766                .pm = &qup_i2c_qup_pm_ops,
 767                .of_match_table = qup_i2c_dt_match,
 768        },
 769};
 770
 771module_platform_driver(qup_i2c_driver);
 772
 773MODULE_LICENSE("GPL v2");
 774MODULE_ALIAS("platform:i2c_qup");
 775