linux/drivers/i2c/algos/i2c-algo-bit.c
<<
>>
Prefs
   1/* -------------------------------------------------------------------------
   2 * i2c-algo-bit.c i2c driver algorithms for bit-shift adapters
   3 * -------------------------------------------------------------------------
   4 *   Copyright (C) 1995-2000 Simon G. Vogl
   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 as published by
   8    the Free Software Foundation; either version 2 of the License, or
   9    (at your option) any later version.
  10
  11    This program is distributed in the hope that it will be useful,
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14    GNU General Public License for more details.
  15
  16    You should have received a copy of the GNU General Public License
  17    along with this program; if not, write to the Free Software
  18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19 * ------------------------------------------------------------------------- */
  20
  21/* With some changes from Frodo Looijaard <frodol@dds.nl>, Kyösti Mälkki
  22   <kmalkki@cc.hut.fi> and Jean Delvare <khali@linux-fr.org> */
  23
  24#include <linux/kernel.h>
  25#include <linux/module.h>
  26#include <linux/delay.h>
  27#include <linux/slab.h>
  28#include <linux/init.h>
  29#include <linux/errno.h>
  30#include <linux/sched.h>
  31#include <linux/i2c.h>
  32#include <linux/i2c-algo-bit.h>
  33
  34
  35/* ----- global defines ----------------------------------------------- */
  36
  37#ifdef DEBUG
  38#define bit_dbg(level, dev, format, args...) \
  39        do { \
  40                if (i2c_debug >= level) \
  41                        dev_dbg(dev, format, ##args); \
  42        } while (0)
  43#else
  44#define bit_dbg(level, dev, format, args...) \
  45        do {} while (0)
  46#endif /* DEBUG */
  47
  48/* ----- global variables --------------------------------------------- */
  49
  50static int bit_test;    /* see if the line-setting functions work       */
  51module_param(bit_test, bool, 0);
  52MODULE_PARM_DESC(bit_test, "Test the lines of the bus to see if it is stuck");
  53
  54#ifdef DEBUG
  55static int i2c_debug = 1;
  56module_param(i2c_debug, int, S_IRUGO | S_IWUSR);
  57MODULE_PARM_DESC(i2c_debug,
  58                 "debug level - 0 off; 1 normal; 2 verbose; 3 very verbose");
  59#endif
  60
  61/* --- setting states on the bus with the right timing: --------------- */
  62
  63#define setsda(adap, val)       adap->setsda(adap->data, val)
  64#define setscl(adap, val)       adap->setscl(adap->data, val)
  65#define getsda(adap)            adap->getsda(adap->data)
  66#define getscl(adap)            adap->getscl(adap->data)
  67
  68static inline void sdalo(struct i2c_algo_bit_data *adap)
  69{
  70        setsda(adap, 0);
  71        udelay((adap->udelay + 1) / 2);
  72}
  73
  74static inline void sdahi(struct i2c_algo_bit_data *adap)
  75{
  76        setsda(adap, 1);
  77        udelay((adap->udelay + 1) / 2);
  78}
  79
  80static inline void scllo(struct i2c_algo_bit_data *adap)
  81{
  82        setscl(adap, 0);
  83        udelay(adap->udelay / 2);
  84}
  85
  86/*
  87 * Raise scl line, and do checking for delays. This is necessary for slower
  88 * devices.
  89 */
  90static int sclhi(struct i2c_algo_bit_data *adap)
  91{
  92        unsigned long start;
  93
  94        setscl(adap, 1);
  95
  96        /* Not all adapters have scl sense line... */
  97        if (!adap->getscl)
  98                goto done;
  99
 100        start = jiffies;
 101        while (!getscl(adap)) {
 102                /* This hw knows how to read the clock line, so we wait
 103                 * until it actually gets high.  This is safer as some
 104                 * chips may hold it low ("clock stretching") while they
 105                 * are processing data internally.
 106                 */
 107                if (time_after(jiffies, start + adap->timeout))
 108                        return -ETIMEDOUT;
 109                cond_resched();
 110        }
 111#ifdef DEBUG
 112        if (jiffies != start && i2c_debug >= 3)
 113                pr_debug("i2c-algo-bit: needed %ld jiffies for SCL to go "
 114                         "high\n", jiffies - start);
 115#endif
 116
 117done:
 118        udelay(adap->udelay);
 119        return 0;
 120}
 121
 122
 123/* --- other auxiliary functions -------------------------------------- */
 124static void i2c_start(struct i2c_algo_bit_data *adap)
 125{
 126        /* assert: scl, sda are high */
 127        setsda(adap, 0);
 128        udelay(adap->udelay);
 129        scllo(adap);
 130}
 131
 132static void i2c_repstart(struct i2c_algo_bit_data *adap)
 133{
 134        /* assert: scl is low */
 135        sdahi(adap);
 136        sclhi(adap);
 137        setsda(adap, 0);
 138        udelay(adap->udelay);
 139        scllo(adap);
 140}
 141
 142
 143static void i2c_stop(struct i2c_algo_bit_data *adap)
 144{
 145        /* assert: scl is low */
 146        sdalo(adap);
 147        sclhi(adap);
 148        setsda(adap, 1);
 149        udelay(adap->udelay);
 150}
 151
 152
 153
 154/* send a byte without start cond., look for arbitration,
 155   check ackn. from slave */
 156/* returns:
 157 * 1 if the device acknowledged
 158 * 0 if the device did not ack
 159 * -ETIMEDOUT if an error occurred (while raising the scl line)
 160 */
 161static int i2c_outb(struct i2c_adapter *i2c_adap, unsigned char c)
 162{
 163        int i;
 164        int sb;
 165        int ack;
 166        struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
 167
 168        /* assert: scl is low */
 169        for (i = 7; i >= 0; i--) {
 170                sb = (c >> i) & 1;
 171                setsda(adap, sb);
 172                udelay((adap->udelay + 1) / 2);
 173                if (sclhi(adap) < 0) { /* timed out */
 174                        bit_dbg(1, &i2c_adap->dev, "i2c_outb: 0x%02x, "
 175                                "timeout at bit #%d\n", (int)c, i);
 176                        return -ETIMEDOUT;
 177                }
 178                /* FIXME do arbitration here:
 179                 * if (sb && !getsda(adap)) -> ouch! Get out of here.
 180                 *
 181                 * Report a unique code, so higher level code can retry
 182                 * the whole (combined) message and *NOT* issue STOP.
 183                 */
 184                scllo(adap);
 185        }
 186        sdahi(adap);
 187        if (sclhi(adap) < 0) { /* timeout */
 188                bit_dbg(1, &i2c_adap->dev, "i2c_outb: 0x%02x, "
 189                        "timeout at ack\n", (int)c);
 190                return -ETIMEDOUT;
 191        }
 192
 193        /* read ack: SDA should be pulled down by slave, or it may
 194         * NAK (usually to report problems with the data we wrote).
 195         */
 196        ack = !getsda(adap);    /* ack: sda is pulled low -> success */
 197        bit_dbg(2, &i2c_adap->dev, "i2c_outb: 0x%02x %s\n", (int)c,
 198                ack ? "A" : "NA");
 199
 200        scllo(adap);
 201        return ack;
 202        /* assert: scl is low (sda undef) */
 203}
 204
 205
 206static int i2c_inb(struct i2c_adapter *i2c_adap)
 207{
 208        /* read byte via i2c port, without start/stop sequence  */
 209        /* acknowledge is sent in i2c_read.                     */
 210        int i;
 211        unsigned char indata = 0;
 212        struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
 213
 214        /* assert: scl is low */
 215        sdahi(adap);
 216        for (i = 0; i < 8; i++) {
 217                if (sclhi(adap) < 0) { /* timeout */
 218                        bit_dbg(1, &i2c_adap->dev, "i2c_inb: timeout at bit "
 219                                "#%d\n", 7 - i);
 220                        return -ETIMEDOUT;
 221                }
 222                indata *= 2;
 223                if (getsda(adap))
 224                        indata |= 0x01;
 225                setscl(adap, 0);
 226                udelay(i == 7 ? adap->udelay / 2 : adap->udelay);
 227        }
 228        /* assert: scl is low */
 229        return indata;
 230}
 231
 232/*
 233 * Sanity check for the adapter hardware - check the reaction of
 234 * the bus lines only if it seems to be idle.
 235 */
 236static int test_bus(struct i2c_algo_bit_data *adap, char *name)
 237{
 238        int scl, sda;
 239
 240        if (adap->getscl == NULL)
 241                pr_info("%s: Testing SDA only, SCL is not readable\n", name);
 242
 243        sda = getsda(adap);
 244        scl = (adap->getscl == NULL) ? 1 : getscl(adap);
 245        if (!scl || !sda) {
 246                printk(KERN_WARNING "%s: bus seems to be busy\n", name);
 247                goto bailout;
 248        }
 249
 250        sdalo(adap);
 251        sda = getsda(adap);
 252        scl = (adap->getscl == NULL) ? 1 : getscl(adap);
 253        if (sda) {
 254                printk(KERN_WARNING "%s: SDA stuck high!\n", name);
 255                goto bailout;
 256        }
 257        if (!scl) {
 258                printk(KERN_WARNING "%s: SCL unexpected low "
 259                       "while pulling SDA low!\n", name);
 260                goto bailout;
 261        }
 262
 263        sdahi(adap);
 264        sda = getsda(adap);
 265        scl = (adap->getscl == NULL) ? 1 : getscl(adap);
 266        if (!sda) {
 267                printk(KERN_WARNING "%s: SDA stuck low!\n", name);
 268                goto bailout;
 269        }
 270        if (!scl) {
 271                printk(KERN_WARNING "%s: SCL unexpected low "
 272                       "while pulling SDA high!\n", name);
 273                goto bailout;
 274        }
 275
 276        scllo(adap);
 277        sda = getsda(adap);
 278        scl = (adap->getscl == NULL) ? 0 : getscl(adap);
 279        if (scl) {
 280                printk(KERN_WARNING "%s: SCL stuck high!\n", name);
 281                goto bailout;
 282        }
 283        if (!sda) {
 284                printk(KERN_WARNING "%s: SDA unexpected low "
 285                       "while pulling SCL low!\n", name);
 286                goto bailout;
 287        }
 288
 289        sclhi(adap);
 290        sda = getsda(adap);
 291        scl = (adap->getscl == NULL) ? 1 : getscl(adap);
 292        if (!scl) {
 293                printk(KERN_WARNING "%s: SCL stuck low!\n", name);
 294                goto bailout;
 295        }
 296        if (!sda) {
 297                printk(KERN_WARNING "%s: SDA unexpected low "
 298                       "while pulling SCL high!\n", name);
 299                goto bailout;
 300        }
 301        pr_info("%s: Test OK\n", name);
 302        return 0;
 303bailout:
 304        sdahi(adap);
 305        sclhi(adap);
 306        return -ENODEV;
 307}
 308
 309/* ----- Utility functions
 310 */
 311
 312/* try_address tries to contact a chip for a number of
 313 * times before it gives up.
 314 * return values:
 315 * 1 chip answered
 316 * 0 chip did not answer
 317 * -x transmission error
 318 */
 319static int try_address(struct i2c_adapter *i2c_adap,
 320                       unsigned char addr, int retries)
 321{
 322        struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
 323        int i, ret = 0;
 324
 325        for (i = 0; i <= retries; i++) {
 326                ret = i2c_outb(i2c_adap, addr);
 327                if (ret == 1 || i == retries)
 328                        break;
 329                bit_dbg(3, &i2c_adap->dev, "emitting stop condition\n");
 330                i2c_stop(adap);
 331                udelay(adap->udelay);
 332                yield();
 333                bit_dbg(3, &i2c_adap->dev, "emitting start condition\n");
 334                i2c_start(adap);
 335        }
 336        if (i && ret)
 337                bit_dbg(1, &i2c_adap->dev, "Used %d tries to %s client at "
 338                        "0x%02x: %s\n", i + 1,
 339                        addr & 1 ? "read from" : "write to", addr >> 1,
 340                        ret == 1 ? "success" : "failed, timeout?");
 341        return ret;
 342}
 343
 344static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
 345{
 346        const unsigned char *temp = msg->buf;
 347        int count = msg->len;
 348        unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
 349        int retval;
 350        int wrcount = 0;
 351
 352        while (count > 0) {
 353                retval = i2c_outb(i2c_adap, *temp);
 354
 355                /* OK/ACK; or ignored NAK */
 356                if ((retval > 0) || (nak_ok && (retval == 0))) {
 357                        count--;
 358                        temp++;
 359                        wrcount++;
 360
 361                /* A slave NAKing the master means the slave didn't like
 362                 * something about the data it saw.  For example, maybe
 363                 * the SMBus PEC was wrong.
 364                 */
 365                } else if (retval == 0) {
 366                        dev_err(&i2c_adap->dev, "sendbytes: NAK bailout.\n");
 367                        return -EIO;
 368
 369                /* Timeout; or (someday) lost arbitration
 370                 *
 371                 * FIXME Lost ARB implies retrying the transaction from
 372                 * the first message, after the "winning" master issues
 373                 * its STOP.  As a rule, upper layer code has no reason
 374                 * to know or care about this ... it is *NOT* an error.
 375                 */
 376                } else {
 377                        dev_err(&i2c_adap->dev, "sendbytes: error %d\n",
 378                                        retval);
 379                        return retval;
 380                }
 381        }
 382        return wrcount;
 383}
 384
 385static int acknak(struct i2c_adapter *i2c_adap, int is_ack)
 386{
 387        struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
 388
 389        /* assert: sda is high */
 390        if (is_ack)             /* send ack */
 391                setsda(adap, 0);
 392        udelay((adap->udelay + 1) / 2);
 393        if (sclhi(adap) < 0) {  /* timeout */
 394                dev_err(&i2c_adap->dev, "readbytes: ack/nak timeout\n");
 395                return -ETIMEDOUT;
 396        }
 397        scllo(adap);
 398        return 0;
 399}
 400
 401static int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
 402{
 403        int inval;
 404        int rdcount = 0;        /* counts bytes read */
 405        unsigned char *temp = msg->buf;
 406        int count = msg->len;
 407        const unsigned flags = msg->flags;
 408
 409        while (count > 0) {
 410                inval = i2c_inb(i2c_adap);
 411                if (inval >= 0) {
 412                        *temp = inval;
 413                        rdcount++;
 414                } else {   /* read timed out */
 415                        break;
 416                }
 417
 418                temp++;
 419                count--;
 420
 421                /* Some SMBus transactions require that we receive the
 422                   transaction length as the first read byte. */
 423                if (rdcount == 1 && (flags & I2C_M_RECV_LEN)) {
 424                        if (inval <= 0 || inval > I2C_SMBUS_BLOCK_MAX) {
 425                                if (!(flags & I2C_M_NO_RD_ACK))
 426                                        acknak(i2c_adap, 0);
 427                                dev_err(&i2c_adap->dev, "readbytes: invalid "
 428                                        "block length (%d)\n", inval);
 429                                return -EREMOTEIO;
 430                        }
 431                        /* The original count value accounts for the extra
 432                           bytes, that is, either 1 for a regular transaction,
 433                           or 2 for a PEC transaction. */
 434                        count += inval;
 435                        msg->len += inval;
 436                }
 437
 438                bit_dbg(2, &i2c_adap->dev, "readbytes: 0x%02x %s\n",
 439                        inval,
 440                        (flags & I2C_M_NO_RD_ACK)
 441                                ? "(no ack/nak)"
 442                                : (count ? "A" : "NA"));
 443
 444                if (!(flags & I2C_M_NO_RD_ACK)) {
 445                        inval = acknak(i2c_adap, count);
 446                        if (inval < 0)
 447                                return inval;
 448                }
 449        }
 450        return rdcount;
 451}
 452
 453/* doAddress initiates the transfer by generating the start condition (in
 454 * try_address) and transmits the address in the necessary format to handle
 455 * reads, writes as well as 10bit-addresses.
 456 * returns:
 457 *  0 everything went okay, the chip ack'ed, or IGNORE_NAK flag was set
 458 * -x an error occurred (like: -EREMOTEIO if the device did not answer, or
 459 *      -ETIMEDOUT, for example if the lines are stuck...)
 460 */
 461static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
 462{
 463        unsigned short flags = msg->flags;
 464        unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
 465        struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
 466
 467        unsigned char addr;
 468        int ret, retries;
 469
 470        retries = nak_ok ? 0 : i2c_adap->retries;
 471
 472        if (flags & I2C_M_TEN) {
 473                /* a ten bit address */
 474                addr = 0xf0 | ((msg->addr >> 7) & 0x03);
 475                bit_dbg(2, &i2c_adap->dev, "addr0: %d\n", addr);
 476                /* try extended address code...*/
 477                ret = try_address(i2c_adap, addr, retries);
 478                if ((ret != 1) && !nak_ok)  {
 479                        dev_err(&i2c_adap->dev,
 480                                "died at extended address code\n");
 481                        return -EREMOTEIO;
 482                }
 483                /* the remaining 8 bit address */
 484                ret = i2c_outb(i2c_adap, msg->addr & 0x7f);
 485                if ((ret != 1) && !nak_ok) {
 486                        /* the chip did not ack / xmission error occurred */
 487                        dev_err(&i2c_adap->dev, "died at 2nd address code\n");
 488                        return -EREMOTEIO;
 489                }
 490                if (flags & I2C_M_RD) {
 491                        bit_dbg(3, &i2c_adap->dev, "emitting repeated "
 492                                "start condition\n");
 493                        i2c_repstart(adap);
 494                        /* okay, now switch into reading mode */
 495                        addr |= 0x01;
 496                        ret = try_address(i2c_adap, addr, retries);
 497                        if ((ret != 1) && !nak_ok) {
 498                                dev_err(&i2c_adap->dev,
 499                                        "died at repeated address code\n");
 500                                return -EREMOTEIO;
 501                        }
 502                }
 503        } else {                /* normal 7bit address  */
 504                addr = msg->addr << 1;
 505                if (flags & I2C_M_RD)
 506                        addr |= 1;
 507                if (flags & I2C_M_REV_DIR_ADDR)
 508                        addr ^= 1;
 509                ret = try_address(i2c_adap, addr, retries);
 510                if ((ret != 1) && !nak_ok)
 511                        return -ENXIO;
 512        }
 513
 514        return 0;
 515}
 516
 517static int bit_xfer(struct i2c_adapter *i2c_adap,
 518                    struct i2c_msg msgs[], int num)
 519{
 520        struct i2c_msg *pmsg;
 521        struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
 522        int i, ret;
 523        unsigned short nak_ok;
 524
 525        bit_dbg(3, &i2c_adap->dev, "emitting start condition\n");
 526        i2c_start(adap);
 527        for (i = 0; i < num; i++) {
 528                pmsg = &msgs[i];
 529                nak_ok = pmsg->flags & I2C_M_IGNORE_NAK;
 530                if (!(pmsg->flags & I2C_M_NOSTART)) {
 531                        if (i) {
 532                                bit_dbg(3, &i2c_adap->dev, "emitting "
 533                                        "repeated start condition\n");
 534                                i2c_repstart(adap);
 535                        }
 536                        ret = bit_doAddress(i2c_adap, pmsg);
 537                        if ((ret != 0) && !nak_ok) {
 538                                bit_dbg(1, &i2c_adap->dev, "NAK from "
 539                                        "device addr 0x%02x msg #%d\n",
 540                                        msgs[i].addr, i);
 541                                goto bailout;
 542                        }
 543                }
 544                if (pmsg->flags & I2C_M_RD) {
 545                        /* read bytes into buffer*/
 546                        ret = readbytes(i2c_adap, pmsg);
 547                        if (ret >= 1)
 548                                bit_dbg(2, &i2c_adap->dev, "read %d byte%s\n",
 549                                        ret, ret == 1 ? "" : "s");
 550                        if (ret < pmsg->len) {
 551                                if (ret >= 0)
 552                                        ret = -EREMOTEIO;
 553                                goto bailout;
 554                        }
 555                } else {
 556                        /* write bytes from buffer */
 557                        ret = sendbytes(i2c_adap, pmsg);
 558                        if (ret >= 1)
 559                                bit_dbg(2, &i2c_adap->dev, "wrote %d byte%s\n",
 560                                        ret, ret == 1 ? "" : "s");
 561                        if (ret < pmsg->len) {
 562                                if (ret >= 0)
 563                                        ret = -EREMOTEIO;
 564                                goto bailout;
 565                        }
 566                }
 567        }
 568        ret = i;
 569
 570bailout:
 571        bit_dbg(3, &i2c_adap->dev, "emitting stop condition\n");
 572        i2c_stop(adap);
 573        return ret;
 574}
 575
 576static u32 bit_func(struct i2c_adapter *adap)
 577{
 578        return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
 579               I2C_FUNC_SMBUS_READ_BLOCK_DATA |
 580               I2C_FUNC_SMBUS_BLOCK_PROC_CALL |
 581               I2C_FUNC_10BIT_ADDR | I2C_FUNC_PROTOCOL_MANGLING;
 582}
 583
 584
 585/* -----exported algorithm data: -------------------------------------  */
 586
 587static const struct i2c_algorithm i2c_bit_algo = {
 588        .master_xfer    = bit_xfer,
 589        .functionality  = bit_func,
 590};
 591
 592/*
 593 * registering functions to load algorithms at runtime
 594 */
 595static int i2c_bit_prepare_bus(struct i2c_adapter *adap)
 596{
 597        struct i2c_algo_bit_data *bit_adap = adap->algo_data;
 598
 599        if (bit_test) {
 600                int ret = test_bus(bit_adap, adap->name);
 601                if (ret < 0)
 602                        return -ENODEV;
 603        }
 604
 605        /* register new adapter to i2c module... */
 606        adap->algo = &i2c_bit_algo;
 607        adap->retries = 3;
 608
 609        return 0;
 610}
 611
 612int i2c_bit_add_bus(struct i2c_adapter *adap)
 613{
 614        int err;
 615
 616        err = i2c_bit_prepare_bus(adap);
 617        if (err)
 618                return err;
 619
 620        return i2c_add_adapter(adap);
 621}
 622EXPORT_SYMBOL(i2c_bit_add_bus);
 623
 624int i2c_bit_add_numbered_bus(struct i2c_adapter *adap)
 625{
 626        int err;
 627
 628        err = i2c_bit_prepare_bus(adap);
 629        if (err)
 630                return err;
 631
 632        return i2c_add_numbered_adapter(adap);
 633}
 634EXPORT_SYMBOL(i2c_bit_add_numbered_bus);
 635
 636MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
 637MODULE_DESCRIPTION("I2C-Bus bit-banging algorithm");
 638MODULE_LICENSE("GPL");
 639