linux/drivers/media/usb/em28xx/em28xx-i2c.c
<<
>>
Prefs
   1/*
   2   em28xx-i2c.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
   3
   4   Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
   5                      Markus Rechberger <mrechberger@gmail.com>
   6                      Mauro Carvalho Chehab <mchehab@infradead.org>
   7                      Sascha Sommer <saschasommer@freenet.de>
   8   Copyright (C) 2013 Frank Schäfer <fschaefer.oss@googlemail.com>
   9
  10   This program is free software; you can redistribute it and/or modify
  11   it under the terms of the GNU General Public License as published by
  12   the Free Software Foundation; either version 2 of the License, or
  13   (at your option) any later version.
  14
  15   This program is distributed in the hope that it will be useful,
  16   but WITHOUT ANY WARRANTY; without even the implied warranty of
  17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18   GNU General Public License for more details.
  19
  20   You should have received a copy of the GNU General Public License
  21   along with this program; if not, write to the Free Software
  22   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  23 */
  24
  25#include "em28xx.h"
  26
  27#include <linux/module.h>
  28#include <linux/kernel.h>
  29#include <linux/usb.h>
  30#include <linux/i2c.h>
  31#include <linux/jiffies.h>
  32
  33#include "tuner-xc2028.h"
  34#include <media/v4l2-common.h>
  35#include <media/tuner.h>
  36
  37/* ----------------------------------------------------------- */
  38
  39static unsigned int i2c_scan;
  40module_param(i2c_scan, int, 0444);
  41MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time");
  42
  43static unsigned int i2c_debug;
  44module_param(i2c_debug, int, 0644);
  45MODULE_PARM_DESC(i2c_debug, "i2c debug message level (1: normal debug, 2: show I2C transfers)");
  46
  47#define dprintk(level, fmt, arg...) do {                                \
  48        if (i2c_debug > level)                                          \
  49                dev_printk(KERN_DEBUG, &dev->intf->dev,                 \
  50                           "i2c: %s: " fmt, __func__, ## arg);          \
  51} while (0)
  52
  53
  54/*
  55 * em2800_i2c_send_bytes()
  56 * send up to 4 bytes to the em2800 i2c device
  57 */
  58static int em2800_i2c_send_bytes(struct em28xx *dev, u8 addr, u8 *buf, u16 len)
  59{
  60        unsigned long timeout = jiffies + msecs_to_jiffies(EM28XX_I2C_XFER_TIMEOUT);
  61        int ret;
  62        u8 b2[6];
  63
  64        if (len < 1 || len > 4)
  65                return -EOPNOTSUPP;
  66
  67        BUG_ON(len < 1 || len > 4);
  68        b2[5] = 0x80 + len - 1;
  69        b2[4] = addr;
  70        b2[3] = buf[0];
  71        if (len > 1)
  72                b2[2] = buf[1];
  73        if (len > 2)
  74                b2[1] = buf[2];
  75        if (len > 3)
  76                b2[0] = buf[3];
  77
  78        /* trigger write */
  79        ret = dev->em28xx_write_regs(dev, 4 - len, &b2[4 - len], 2 + len);
  80        if (ret != 2 + len) {
  81                dev_warn(&dev->intf->dev,
  82                         "failed to trigger write to i2c address 0x%x (error=%i)\n",
  83                            addr, ret);
  84                return (ret < 0) ? ret : -EIO;
  85        }
  86        /* wait for completion */
  87        while (time_is_after_jiffies(timeout)) {
  88                ret = dev->em28xx_read_reg(dev, 0x05);
  89                if (ret == 0x80 + len - 1)
  90                        return len;
  91                if (ret == 0x94 + len - 1) {
  92                        dprintk(1, "R05 returned 0x%02x: I2C ACK error\n", ret);
  93                        return -ENXIO;
  94                }
  95                if (ret < 0) {
  96                        dev_warn(&dev->intf->dev,
  97                                 "failed to get i2c transfer status from bridge register (error=%i)\n",
  98                                ret);
  99                        return ret;
 100                }
 101                msleep(5);
 102        }
 103        dprintk(0, "write to i2c device at 0x%x timed out\n", addr);
 104        return -ETIMEDOUT;
 105}
 106
 107/*
 108 * em2800_i2c_recv_bytes()
 109 * read up to 4 bytes from the em2800 i2c device
 110 */
 111static int em2800_i2c_recv_bytes(struct em28xx *dev, u8 addr, u8 *buf, u16 len)
 112{
 113        unsigned long timeout = jiffies + msecs_to_jiffies(EM28XX_I2C_XFER_TIMEOUT);
 114        u8 buf2[4];
 115        int ret;
 116        int i;
 117
 118        if (len < 1 || len > 4)
 119                return -EOPNOTSUPP;
 120
 121        /* trigger read */
 122        buf2[1] = 0x84 + len - 1;
 123        buf2[0] = addr;
 124        ret = dev->em28xx_write_regs(dev, 0x04, buf2, 2);
 125        if (ret != 2) {
 126                dev_warn(&dev->intf->dev,
 127                         "failed to trigger read from i2c address 0x%x (error=%i)\n",
 128                         addr, ret);
 129                return (ret < 0) ? ret : -EIO;
 130        }
 131
 132        /* wait for completion */
 133        while (time_is_after_jiffies(timeout)) {
 134                ret = dev->em28xx_read_reg(dev, 0x05);
 135                if (ret == 0x84 + len - 1)
 136                        break;
 137                if (ret == 0x94 + len - 1) {
 138                        dprintk(1, "R05 returned 0x%02x: I2C ACK error\n",
 139                                ret);
 140                        return -ENXIO;
 141                }
 142                if (ret < 0) {
 143                        dev_warn(&dev->intf->dev,
 144                                 "failed to get i2c transfer status from bridge register (error=%i)\n",
 145                                 ret);
 146                        return ret;
 147                }
 148                msleep(5);
 149        }
 150        if (ret != 0x84 + len - 1) {
 151                dprintk(0, "read from i2c device at 0x%x timed out\n", addr);
 152        }
 153
 154        /* get the received message */
 155        ret = dev->em28xx_read_reg_req_len(dev, 0x00, 4-len, buf2, len);
 156        if (ret != len) {
 157                dev_warn(&dev->intf->dev,
 158                         "reading from i2c device at 0x%x failed: couldn't get the received message from the bridge (error=%i)\n",
 159                         addr, ret);
 160                return (ret < 0) ? ret : -EIO;
 161        }
 162        for (i = 0; i < len; i++)
 163                buf[i] = buf2[len - 1 - i];
 164
 165        return ret;
 166}
 167
 168/*
 169 * em2800_i2c_check_for_device()
 170 * check if there is an i2c device at the supplied address
 171 */
 172static int em2800_i2c_check_for_device(struct em28xx *dev, u8 addr)
 173{
 174        u8 buf;
 175        int ret;
 176
 177        ret = em2800_i2c_recv_bytes(dev, addr, &buf, 1);
 178        if (ret == 1)
 179                return 0;
 180        return (ret < 0) ? ret : -EIO;
 181}
 182
 183/*
 184 * em28xx_i2c_send_bytes()
 185 */
 186static int em28xx_i2c_send_bytes(struct em28xx *dev, u16 addr, u8 *buf,
 187                                 u16 len, int stop)
 188{
 189        unsigned long timeout = jiffies + msecs_to_jiffies(EM28XX_I2C_XFER_TIMEOUT);
 190        int ret;
 191
 192        if (len < 1 || len > 64)
 193                return -EOPNOTSUPP;
 194        /*
 195         * NOTE: limited by the USB ctrl message constraints
 196         * Zero length reads always succeed, even if no device is connected
 197         */
 198
 199        /* Write to i2c device */
 200        ret = dev->em28xx_write_regs_req(dev, stop ? 2 : 3, addr, buf, len);
 201        if (ret != len) {
 202                if (ret < 0) {
 203                        dev_warn(&dev->intf->dev,
 204                                 "writing to i2c device at 0x%x failed (error=%i)\n",
 205                                 addr, ret);
 206                        return ret;
 207                } else {
 208                        dev_warn(&dev->intf->dev,
 209                                 "%i bytes write to i2c device at 0x%x requested, but %i bytes written\n",
 210                                 len, addr, ret);
 211                        return -EIO;
 212                }
 213        }
 214
 215        /* wait for completion */
 216        while (time_is_after_jiffies(timeout)) {
 217                ret = dev->em28xx_read_reg(dev, 0x05);
 218                if (ret == 0) /* success */
 219                        return len;
 220                if (ret == 0x10) {
 221                        dprintk(1, "I2C ACK error on writing to addr 0x%02x\n",
 222                                addr);
 223                        return -ENXIO;
 224                }
 225                if (ret < 0) {
 226                        dev_warn(&dev->intf->dev,
 227                                 "failed to get i2c transfer status from bridge register (error=%i)\n",
 228                                 ret);
 229                        return ret;
 230                }
 231                msleep(5);
 232                /*
 233                 * NOTE: do we really have to wait for success ?
 234                 * Never seen anything else than 0x00 or 0x10
 235                 * (even with high payload) ...
 236                 */
 237        }
 238
 239        if (ret == 0x02 || ret == 0x04) {
 240                /* NOTE: these errors seem to be related to clock stretching */
 241                dprintk(0,
 242                        "write to i2c device at 0x%x timed out (status=%i)\n",
 243                        addr, ret);
 244                return -ETIMEDOUT;
 245        }
 246
 247        dev_warn(&dev->intf->dev,
 248                 "write to i2c device at 0x%x failed with unknown error (status=%i)\n",
 249                 addr, ret);
 250        return -EIO;
 251}
 252
 253/*
 254 * em28xx_i2c_recv_bytes()
 255 * read a byte from the i2c device
 256 */
 257static int em28xx_i2c_recv_bytes(struct em28xx *dev, u16 addr, u8 *buf, u16 len)
 258{
 259        int ret;
 260
 261        if (len < 1 || len > 64)
 262                return -EOPNOTSUPP;
 263        /*
 264         * NOTE: limited by the USB ctrl message constraints
 265         * Zero length reads always succeed, even if no device is connected
 266         */
 267
 268        /* Read data from i2c device */
 269        ret = dev->em28xx_read_reg_req_len(dev, 2, addr, buf, len);
 270        if (ret < 0) {
 271                dev_warn(&dev->intf->dev,
 272                         "reading from i2c device at 0x%x failed (error=%i)\n",
 273                         addr, ret);
 274                return ret;
 275        }
 276        /*
 277         * NOTE: some devices with two i2c busses have the bad habit to return 0
 278         * bytes if we are on bus B AND there was no write attempt to the
 279         * specified slave address before AND no device is present at the
 280         * requested slave address.
 281         * Anyway, the next check will fail with -ENXIO in this case, so avoid
 282         * spamming the system log on device probing and do nothing here.
 283         */
 284
 285        /* Check success of the i2c operation */
 286        ret = dev->em28xx_read_reg(dev, 0x05);
 287        if (ret == 0) /* success */
 288                return len;
 289        if (ret < 0) {
 290                dev_warn(&dev->intf->dev,
 291                         "failed to get i2c transfer status from bridge register (error=%i)\n",
 292                         ret);
 293                return ret;
 294        }
 295        if (ret == 0x10) {
 296                dprintk(1, "I2C ACK error on writing to addr 0x%02x\n",
 297                        addr);
 298                return -ENXIO;
 299        }
 300
 301        if (ret == 0x02 || ret == 0x04) {
 302                /* NOTE: these errors seem to be related to clock stretching */
 303                dprintk(0,
 304                        "write to i2c device at 0x%x timed out (status=%i)\n",
 305                        addr, ret);
 306                return -ETIMEDOUT;
 307        }
 308
 309        dev_warn(&dev->intf->dev,
 310                 "write to i2c device at 0x%x failed with unknown error (status=%i)\n",
 311                 addr, ret);
 312        return -EIO;
 313}
 314
 315/*
 316 * em28xx_i2c_check_for_device()
 317 * check if there is a i2c_device at the supplied address
 318 */
 319static int em28xx_i2c_check_for_device(struct em28xx *dev, u16 addr)
 320{
 321        int ret;
 322        u8 buf;
 323
 324        ret = em28xx_i2c_recv_bytes(dev, addr, &buf, 1);
 325        if (ret == 1)
 326                return 0;
 327        return (ret < 0) ? ret : -EIO;
 328}
 329
 330/*
 331 * em25xx_bus_B_send_bytes
 332 * write bytes to the i2c device
 333 */
 334static int em25xx_bus_B_send_bytes(struct em28xx *dev, u16 addr, u8 *buf,
 335                                   u16 len)
 336{
 337        int ret;
 338
 339        if (len < 1 || len > 64)
 340                return -EOPNOTSUPP;
 341        /*
 342         * NOTE: limited by the USB ctrl message constraints
 343         * Zero length reads always succeed, even if no device is connected
 344         */
 345
 346        /* Set register and write value */
 347        ret = dev->em28xx_write_regs_req(dev, 0x06, addr, buf, len);
 348        if (ret != len) {
 349                if (ret < 0) {
 350                        dev_warn(&dev->intf->dev,
 351                                 "writing to i2c device at 0x%x failed (error=%i)\n",
 352                                 addr, ret);
 353                        return ret;
 354                } else {
 355                        dev_warn(&dev->intf->dev,
 356                                 "%i bytes write to i2c device at 0x%x requested, but %i bytes written\n",
 357                                 len, addr, ret);
 358                        return -EIO;
 359                }
 360        }
 361        /* Check success */
 362        ret = dev->em28xx_read_reg_req(dev, 0x08, 0x0000);
 363        /*
 364         * NOTE: the only error we've seen so far is
 365         * 0x01 when the slave device is not present
 366         */
 367        if (!ret)
 368                return len;
 369        else if (ret > 0) {
 370                dprintk(1, "Bus B R08 returned 0x%02x: I2C ACK error\n", ret);
 371                return -ENXIO;
 372        }
 373
 374        return ret;
 375        /*
 376         * NOTE: With chip types (other chip IDs) which actually don't support
 377         * this operation, it seems to succeed ALWAYS ! (even if there is no
 378         * slave device or even no second i2c bus provided)
 379         */
 380}
 381
 382/*
 383 * em25xx_bus_B_recv_bytes
 384 * read bytes from the i2c device
 385 */
 386static int em25xx_bus_B_recv_bytes(struct em28xx *dev, u16 addr, u8 *buf,
 387                                   u16 len)
 388{
 389        int ret;
 390
 391        if (len < 1 || len > 64)
 392                return -EOPNOTSUPP;
 393        /*
 394         * NOTE: limited by the USB ctrl message constraints
 395         * Zero length reads always succeed, even if no device is connected
 396         */
 397
 398        /* Read value */
 399        ret = dev->em28xx_read_reg_req_len(dev, 0x06, addr, buf, len);
 400        if (ret < 0) {
 401                dev_warn(&dev->intf->dev,
 402                         "reading from i2c device at 0x%x failed (error=%i)\n",
 403                         addr, ret);
 404                return ret;
 405        }
 406        /*
 407         * NOTE: some devices with two i2c busses have the bad habit to return 0
 408         * bytes if we are on bus B AND there was no write attempt to the
 409         * specified slave address before AND no device is present at the
 410         * requested slave address.
 411         * Anyway, the next check will fail with -ENXIO in this case, so avoid
 412         * spamming the system log on device probing and do nothing here.
 413         */
 414
 415        /* Check success */
 416        ret = dev->em28xx_read_reg_req(dev, 0x08, 0x0000);
 417        /*
 418         * NOTE: the only error we've seen so far is
 419         * 0x01 when the slave device is not present
 420         */
 421        if (!ret)
 422                return len;
 423        else if (ret > 0) {
 424                dprintk(1, "Bus B R08 returned 0x%02x: I2C ACK error\n", ret);
 425                return -ENXIO;
 426        }
 427
 428        return ret;
 429        /*
 430         * NOTE: With chip types (other chip IDs) which actually don't support
 431         * this operation, it seems to succeed ALWAYS ! (even if there is no
 432         * slave device or even no second i2c bus provided)
 433         */
 434}
 435
 436/*
 437 * em25xx_bus_B_check_for_device()
 438 * check if there is a i2c device at the supplied address
 439 */
 440static int em25xx_bus_B_check_for_device(struct em28xx *dev, u16 addr)
 441{
 442        u8 buf;
 443        int ret;
 444
 445        ret = em25xx_bus_B_recv_bytes(dev, addr, &buf, 1);
 446        if (ret < 0)
 447                return ret;
 448
 449        return 0;
 450        /*
 451         * NOTE: With chips which do not support this operation,
 452         * it seems to succeed ALWAYS ! (even if no device connected)
 453         */
 454}
 455
 456static inline int i2c_check_for_device(struct em28xx_i2c_bus *i2c_bus, u16 addr)
 457{
 458        struct em28xx *dev = i2c_bus->dev;
 459        int rc = -EOPNOTSUPP;
 460
 461        if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM28XX)
 462                rc = em28xx_i2c_check_for_device(dev, addr);
 463        else if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM2800)
 464                rc = em2800_i2c_check_for_device(dev, addr);
 465        else if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM25XX_BUS_B)
 466                rc = em25xx_bus_B_check_for_device(dev, addr);
 467        return rc;
 468}
 469
 470static inline int i2c_recv_bytes(struct em28xx_i2c_bus *i2c_bus,
 471                                 struct i2c_msg msg)
 472{
 473        struct em28xx *dev = i2c_bus->dev;
 474        u16 addr = msg.addr << 1;
 475        int rc = -EOPNOTSUPP;
 476
 477        if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM28XX)
 478                rc = em28xx_i2c_recv_bytes(dev, addr, msg.buf, msg.len);
 479        else if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM2800)
 480                rc = em2800_i2c_recv_bytes(dev, addr, msg.buf, msg.len);
 481        else if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM25XX_BUS_B)
 482                rc = em25xx_bus_B_recv_bytes(dev, addr, msg.buf, msg.len);
 483        return rc;
 484}
 485
 486static inline int i2c_send_bytes(struct em28xx_i2c_bus *i2c_bus,
 487                                 struct i2c_msg msg, int stop)
 488{
 489        struct em28xx *dev = i2c_bus->dev;
 490        u16 addr = msg.addr << 1;
 491        int rc = -EOPNOTSUPP;
 492
 493        if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM28XX)
 494                rc = em28xx_i2c_send_bytes(dev, addr, msg.buf, msg.len, stop);
 495        else if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM2800)
 496                rc = em2800_i2c_send_bytes(dev, addr, msg.buf, msg.len);
 497        else if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM25XX_BUS_B)
 498                rc = em25xx_bus_B_send_bytes(dev, addr, msg.buf, msg.len);
 499        return rc;
 500}
 501
 502/*
 503 * em28xx_i2c_xfer()
 504 * the main i2c transfer function
 505 */
 506static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
 507                           struct i2c_msg msgs[], int num)
 508{
 509        struct em28xx_i2c_bus *i2c_bus = i2c_adap->algo_data;
 510        struct em28xx *dev = i2c_bus->dev;
 511        unsigned bus = i2c_bus->bus;
 512        int addr, rc, i;
 513        u8 reg;
 514
 515        /* prevent i2c xfer attempts after device is disconnected
 516           some fe's try to do i2c writes/reads from their release
 517           interfaces when called in disconnect path */
 518        if (dev->disconnected)
 519                return -ENODEV;
 520
 521        if (!rt_mutex_trylock(&dev->i2c_bus_lock))
 522                return -EAGAIN;
 523
 524        /* Switch I2C bus if needed */
 525        if (bus != dev->cur_i2c_bus &&
 526            i2c_bus->algo_type == EM28XX_I2C_ALGO_EM28XX) {
 527                if (bus == 1)
 528                        reg = EM2874_I2C_SECONDARY_BUS_SELECT;
 529                else
 530                        reg = 0;
 531                em28xx_write_reg_bits(dev, EM28XX_R06_I2C_CLK, reg,
 532                                      EM2874_I2C_SECONDARY_BUS_SELECT);
 533                dev->cur_i2c_bus = bus;
 534        }
 535
 536        if (num <= 0) {
 537                rt_mutex_unlock(&dev->i2c_bus_lock);
 538                return 0;
 539        }
 540        for (i = 0; i < num; i++) {
 541                addr = msgs[i].addr << 1;
 542                if (!msgs[i].len) {
 543                        /*
 544                         * no len: check only for device presence
 545                         * This code is only called during device probe.
 546                         */
 547                        rc = i2c_check_for_device(i2c_bus, addr);
 548
 549                        if (rc == -ENXIO)
 550                                rc = -ENODEV;
 551                } else if (msgs[i].flags & I2C_M_RD) {
 552                        /* read bytes */
 553                        rc = i2c_recv_bytes(i2c_bus, msgs[i]);
 554                } else {
 555                        /* write bytes */
 556                        rc = i2c_send_bytes(i2c_bus, msgs[i], i == num - 1);
 557                }
 558
 559                if (rc < 0)
 560                        goto error;
 561
 562                dprintk(2, "%s %s addr=%02x len=%d: %*ph\n",
 563                        (msgs[i].flags & I2C_M_RD) ? "read" : "write",
 564                        i == num - 1 ? "stop" : "nonstop",
 565                        addr, msgs[i].len,
 566                        msgs[i].len, msgs[i].buf);
 567        }
 568
 569        rt_mutex_unlock(&dev->i2c_bus_lock);
 570        return num;
 571
 572error:
 573        dprintk(2, "%s %s addr=%02x len=%d: %sERROR: %i\n",
 574                (msgs[i].flags & I2C_M_RD) ? "read" : "write",
 575                i == num - 1 ? "stop" : "nonstop",
 576                addr, msgs[i].len,
 577                (rc == -ENODEV) ? "no device " : "",
 578                rc);
 579
 580        rt_mutex_unlock(&dev->i2c_bus_lock);
 581        return rc;
 582}
 583
 584/*
 585 * based on linux/sunrpc/svcauth.h and linux/hash.h
 586 * The original hash function returns a different value, if arch is x86_64
 587 * or i386.
 588 */
 589static inline unsigned long em28xx_hash_mem(char *buf, int length, int bits)
 590{
 591        unsigned long hash = 0;
 592        unsigned long l = 0;
 593        int len = 0;
 594        unsigned char c;
 595
 596        do {
 597                if (len == length) {
 598                        c = (char)len;
 599                        len = -1;
 600                } else
 601                        c = *buf++;
 602                l = (l << 8) | c;
 603                len++;
 604                if ((len & (32 / 8 - 1)) == 0)
 605                        hash = ((hash^l) * 0x9e370001UL);
 606        } while (len);
 607
 608        return (hash >> (32 - bits)) & 0xffffffffUL;
 609}
 610
 611/*
 612 * Helper function to read data blocks from i2c clients with 8 or 16 bit
 613 * address width, 8 bit register width and auto incrementation been activated
 614 */
 615static int em28xx_i2c_read_block(struct em28xx *dev, unsigned bus, u16 addr,
 616                                 bool addr_w16, u16 len, u8 *data)
 617{
 618        int remain = len, rsize, rsize_max, ret;
 619        u8 buf[2];
 620
 621        /* Sanity check */
 622        if (addr + remain > (addr_w16 * 0xff00 + 0xff + 1))
 623                return -EINVAL;
 624        /* Select address */
 625        buf[0] = addr >> 8;
 626        buf[1] = addr & 0xff;
 627        ret = i2c_master_send(&dev->i2c_client[bus], buf + !addr_w16, 1 + addr_w16);
 628        if (ret < 0)
 629                return ret;
 630        /* Read data */
 631        if (dev->board.is_em2800)
 632                rsize_max = 4;
 633        else
 634                rsize_max = 64;
 635        while (remain > 0) {
 636                if (remain > rsize_max)
 637                        rsize = rsize_max;
 638                else
 639                        rsize = remain;
 640
 641                ret = i2c_master_recv(&dev->i2c_client[bus], data, rsize);
 642                if (ret < 0)
 643                        return ret;
 644
 645                remain -= rsize;
 646                data += rsize;
 647        }
 648
 649        return len;
 650}
 651
 652static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned bus,
 653                             u8 **eedata, u16 *eedata_len)
 654{
 655        const u16 len = 256;
 656        /*
 657         * FIXME common length/size for bytes to read, to display, hash
 658         * calculation and returned device dataset. Simplifies the code a lot,
 659         * but we might have to deal with multiple sizes in the future !
 660         */
 661        int err;
 662        struct em28xx_eeprom *dev_config;
 663        u8 buf, *data;
 664
 665        *eedata = NULL;
 666        *eedata_len = 0;
 667
 668        /* EEPROM is always on i2c bus 0 on all known devices. */
 669
 670        dev->i2c_client[bus].addr = 0xa0 >> 1;
 671
 672        /* Check if board has eeprom */
 673        err = i2c_master_recv(&dev->i2c_client[bus], &buf, 0);
 674        if (err < 0) {
 675                dev_info(&dev->intf->dev, "board has no eeprom\n");
 676                return -ENODEV;
 677        }
 678
 679        data = kzalloc(len, GFP_KERNEL);
 680        if (data == NULL)
 681                return -ENOMEM;
 682
 683        /* Read EEPROM content */
 684        err = em28xx_i2c_read_block(dev, bus, 0x0000,
 685                                    dev->eeprom_addrwidth_16bit,
 686                                    len, data);
 687        if (err != len) {
 688                dev_err(&dev->intf->dev,
 689                        "failed to read eeprom (err=%d)\n", err);
 690                goto error;
 691        }
 692
 693        if (i2c_debug) {
 694                /* Display eeprom content */
 695                print_hex_dump(KERN_DEBUG, "em28xx eeprom ", DUMP_PREFIX_OFFSET,
 696                               16, 1, data, len, true);
 697
 698                if (dev->eeprom_addrwidth_16bit)
 699                        dev_info(&dev->intf->dev,
 700                                 "eeprom %06x: ... (skipped)\n", 256);
 701        }
 702
 703        if (dev->eeprom_addrwidth_16bit &&
 704            data[0] == 0x26 && data[3] == 0x00) {
 705                /* new eeprom format; size 4-64kb */
 706                u16 mc_start;
 707                u16 hwconf_offset;
 708
 709                dev->hash = em28xx_hash_mem(data, len, 32);
 710                mc_start = (data[1] << 8) + 4;  /* usually 0x0004 */
 711
 712                dev_info(&dev->intf->dev,
 713                         "EEPROM ID = %02x %02x %02x %02x, EEPROM hash = 0x%08lx\n",
 714                         data[0], data[1], data[2], data[3], dev->hash);
 715                dev_info(&dev->intf->dev,
 716                         "EEPROM info:\n");
 717                dev_info(&dev->intf->dev,
 718                         "\tmicrocode start address = 0x%04x, boot configuration = 0x%02x\n",
 719                         mc_start, data[2]);
 720                /*
 721                 * boot configuration (address 0x0002):
 722                 * [0]   microcode download speed: 1 = 400 kHz; 0 = 100 kHz
 723                 * [1]   always selects 12 kb RAM
 724                 * [2]   USB device speed: 1 = force Full Speed; 0 = auto detect
 725                 * [4]   1 = force fast mode and no suspend for device testing
 726                 * [5:7] USB PHY tuning registers; determined by device
 727                 *       characterization
 728                 */
 729
 730                /*
 731                 * Read hardware config dataset offset from address
 732                 * (microcode start + 46)
 733                 */
 734                err = em28xx_i2c_read_block(dev, bus, mc_start + 46, 1, 2,
 735                                            data);
 736                if (err != 2) {
 737                        dev_err(&dev->intf->dev,
 738                                "failed to read hardware configuration data from eeprom (err=%d)\n",
 739                                err);
 740                        goto error;
 741                }
 742
 743                /* Calculate hardware config dataset start address */
 744                hwconf_offset = mc_start + data[0] + (data[1] << 8);
 745
 746                /* Read hardware config dataset */
 747                /*
 748                 * NOTE: the microcode copy can be multiple pages long, but
 749                 * we assume the hardware config dataset is the same as in
 750                 * the old eeprom and not longer than 256 bytes.
 751                 * tveeprom is currently also limited to 256 bytes.
 752                 */
 753                err = em28xx_i2c_read_block(dev, bus, hwconf_offset, 1, len,
 754                                            data);
 755                if (err != len) {
 756                        dev_err(&dev->intf->dev,
 757                                "failed to read hardware configuration data from eeprom (err=%d)\n",
 758                                err);
 759                        goto error;
 760                }
 761
 762                /* Verify hardware config dataset */
 763                /* NOTE: not all devices provide this type of dataset */
 764                if (data[0] != 0x1a || data[1] != 0xeb ||
 765                    data[2] != 0x67 || data[3] != 0x95) {
 766                        dev_info(&dev->intf->dev,
 767                                 "\tno hardware configuration dataset found in eeprom\n");
 768                        kfree(data);
 769                        return 0;
 770                }
 771
 772                /* TODO: decrypt eeprom data for camera bridges (em25xx, em276x+) */
 773
 774        } else if (!dev->eeprom_addrwidth_16bit &&
 775                   data[0] == 0x1a && data[1] == 0xeb &&
 776                   data[2] == 0x67 && data[3] == 0x95) {
 777                dev->hash = em28xx_hash_mem(data, len, 32);
 778                dev_info(&dev->intf->dev,
 779                         "EEPROM ID = %02x %02x %02x %02x, EEPROM hash = 0x%08lx\n",
 780                         data[0], data[1], data[2], data[3], dev->hash);
 781                dev_info(&dev->intf->dev,
 782                         "EEPROM info:\n");
 783        } else {
 784                dev_info(&dev->intf->dev,
 785                         "unknown eeprom format or eeprom corrupted !\n");
 786                err = -ENODEV;
 787                goto error;
 788        }
 789
 790        *eedata = data;
 791        *eedata_len = len;
 792        dev_config = (void *)*eedata;
 793
 794        switch (le16_to_cpu(dev_config->chip_conf) >> 4 & 0x3) {
 795        case 0:
 796                dev_info(&dev->intf->dev, "\tNo audio on board.\n");
 797                break;
 798        case 1:
 799                dev_info(&dev->intf->dev, "\tAC97 audio (5 sample rates)\n");
 800                break;
 801        case 2:
 802                if (dev->chip_id < CHIP_ID_EM2860)
 803                        dev_info(&dev->intf->dev,
 804                                 "\tI2S audio, sample rate=32k\n");
 805                else
 806                        dev_info(&dev->intf->dev,
 807                                 "\tI2S audio, 3 sample rates\n");
 808                break;
 809        case 3:
 810                if (dev->chip_id < CHIP_ID_EM2860)
 811                        dev_info(&dev->intf->dev,
 812                                 "\tI2S audio, 3 sample rates\n");
 813                else
 814                        dev_info(&dev->intf->dev,
 815                                 "\tI2S audio, 5 sample rates\n");
 816                break;
 817        }
 818
 819        if (le16_to_cpu(dev_config->chip_conf) & 1 << 3)
 820                dev_info(&dev->intf->dev, "\tUSB Remote wakeup capable\n");
 821
 822        if (le16_to_cpu(dev_config->chip_conf) & 1 << 2)
 823                dev_info(&dev->intf->dev, "\tUSB Self power capable\n");
 824
 825        switch (le16_to_cpu(dev_config->chip_conf) & 0x3) {
 826        case 0:
 827                dev_info(&dev->intf->dev, "\t500mA max power\n");
 828                break;
 829        case 1:
 830                dev_info(&dev->intf->dev, "\t400mA max power\n");
 831                break;
 832        case 2:
 833                dev_info(&dev->intf->dev, "\t300mA max power\n");
 834                break;
 835        case 3:
 836                dev_info(&dev->intf->dev, "\t200mA max power\n");
 837                break;
 838        }
 839        dev_info(&dev->intf->dev,
 840                 "\tTable at offset 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
 841                 dev_config->string_idx_table,
 842                 le16_to_cpu(dev_config->string1),
 843                 le16_to_cpu(dev_config->string2),
 844                 le16_to_cpu(dev_config->string3));
 845
 846        return 0;
 847
 848error:
 849        kfree(data);
 850        return err;
 851}
 852
 853/* ----------------------------------------------------------- */
 854
 855/*
 856 * functionality()
 857 */
 858static u32 functionality(struct i2c_adapter *i2c_adap)
 859{
 860        struct em28xx_i2c_bus *i2c_bus = i2c_adap->algo_data;
 861
 862        if ((i2c_bus->algo_type == EM28XX_I2C_ALGO_EM28XX) ||
 863            (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM25XX_BUS_B)) {
 864                return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
 865        } else if (i2c_bus->algo_type == EM28XX_I2C_ALGO_EM2800)  {
 866                return (I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL) &
 867                        ~I2C_FUNC_SMBUS_WRITE_BLOCK_DATA;
 868        }
 869
 870        WARN(1, "Unknown i2c bus algorithm.\n");
 871        return 0;
 872}
 873
 874static const struct i2c_algorithm em28xx_algo = {
 875        .master_xfer   = em28xx_i2c_xfer,
 876        .functionality = functionality,
 877};
 878
 879static const struct i2c_adapter em28xx_adap_template = {
 880        .owner = THIS_MODULE,
 881        .name = "em28xx",
 882        .algo = &em28xx_algo,
 883};
 884
 885static const struct i2c_client em28xx_client_template = {
 886        .name = "em28xx internal",
 887};
 888
 889/* ----------------------------------------------------------- */
 890
 891/*
 892 * i2c_devs
 893 * incomplete list of known devices
 894 */
 895static char *i2c_devs[128] = {
 896       [0x1c >> 1] = "lgdt330x",
 897        [0x3e >> 1] = "remote IR sensor",
 898        [0x4a >> 1] = "saa7113h",
 899        [0x52 >> 1] = "drxk",
 900        [0x60 >> 1] = "remote IR sensor",
 901        [0x8e >> 1] = "remote IR sensor",
 902        [0x86 >> 1] = "tda9887",
 903        [0x80 >> 1] = "msp34xx",
 904        [0x88 >> 1] = "msp34xx",
 905        [0xa0 >> 1] = "eeprom",
 906        [0xb0 >> 1] = "tda9874",
 907        [0xb8 >> 1] = "tvp5150a",
 908        [0xba >> 1] = "webcam sensor or tvp5150a",
 909        [0xc0 >> 1] = "tuner (analog)",
 910        [0xc2 >> 1] = "tuner (analog)",
 911        [0xc4 >> 1] = "tuner (analog)",
 912        [0xc6 >> 1] = "tuner (analog)",
 913};
 914
 915/*
 916 * do_i2c_scan()
 917 * check i2c address range for devices
 918 */
 919void em28xx_do_i2c_scan(struct em28xx *dev, unsigned bus)
 920{
 921        u8 i2c_devicelist[128];
 922        unsigned char buf;
 923        int i, rc;
 924
 925        memset(i2c_devicelist, 0, ARRAY_SIZE(i2c_devicelist));
 926
 927        for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
 928                dev->i2c_client[bus].addr = i;
 929                rc = i2c_master_recv(&dev->i2c_client[bus], &buf, 0);
 930                if (rc < 0)
 931                        continue;
 932                i2c_devicelist[i] = i;
 933                dev_info(&dev->intf->dev,
 934                         "found i2c device @ 0x%x on bus %d [%s]\n",
 935                         i << 1, bus, i2c_devs[i] ? i2c_devs[i] : "???");
 936        }
 937
 938        if (bus == dev->def_i2c_bus)
 939                dev->i2c_hash = em28xx_hash_mem(i2c_devicelist,
 940                                                ARRAY_SIZE(i2c_devicelist), 32);
 941}
 942
 943/*
 944 * em28xx_i2c_register()
 945 * register i2c bus
 946 */
 947int em28xx_i2c_register(struct em28xx *dev, unsigned bus,
 948                        enum em28xx_i2c_algo_type algo_type)
 949{
 950        int retval;
 951
 952        BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg);
 953        BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req);
 954
 955        if (bus >= NUM_I2C_BUSES)
 956                return -ENODEV;
 957
 958        dev->i2c_adap[bus] = em28xx_adap_template;
 959        dev->i2c_adap[bus].dev.parent = &dev->intf->dev;
 960        strcpy(dev->i2c_adap[bus].name, dev_name(&dev->intf->dev));
 961
 962        dev->i2c_bus[bus].bus = bus;
 963        dev->i2c_bus[bus].algo_type = algo_type;
 964        dev->i2c_bus[bus].dev = dev;
 965        dev->i2c_adap[bus].algo_data = &dev->i2c_bus[bus];
 966
 967        retval = i2c_add_adapter(&dev->i2c_adap[bus]);
 968        if (retval < 0) {
 969                dev_err(&dev->intf->dev,
 970                        "%s: i2c_add_adapter failed! retval [%d]\n",
 971                        __func__, retval);
 972                return retval;
 973        }
 974
 975        dev->i2c_client[bus] = em28xx_client_template;
 976        dev->i2c_client[bus].adapter = &dev->i2c_adap[bus];
 977
 978        /* Up to now, all eeproms are at bus 0 */
 979        if (!bus) {
 980                retval = em28xx_i2c_eeprom(dev, bus, &dev->eedata, &dev->eedata_len);
 981                if ((retval < 0) && (retval != -ENODEV)) {
 982                        dev_err(&dev->intf->dev,
 983                                "%s: em28xx_i2_eeprom failed! retval [%d]\n",
 984                                __func__, retval);
 985                }
 986        }
 987
 988        if (i2c_scan)
 989                em28xx_do_i2c_scan(dev, bus);
 990
 991        return 0;
 992}
 993
 994/*
 995 * em28xx_i2c_unregister()
 996 * unregister i2c_bus
 997 */
 998int em28xx_i2c_unregister(struct em28xx *dev, unsigned bus)
 999{
1000        if (bus >= NUM_I2C_BUSES)
1001                return -ENODEV;
1002
1003        i2c_del_adapter(&dev->i2c_adap[bus]);
1004        return 0;
1005}
1006