2 em28xx-i2c.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
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>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #include <linux/module.h>
25 #include <linux/kernel.h>
26 #include <linux/usb.h>
27 #include <linux/i2c.h>
30 #include "tuner-xc2028.h"
31 #include <media/v4l2-common.h>
32 #include <media/tuner.h>
34 /* ----------------------------------------------------------- */
36 static unsigned int i2c_scan;
37 module_param(i2c_scan, int, 0444);
38 MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time");
40 static unsigned int i2c_debug;
41 module_param(i2c_debug, int, 0644);
42 MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
44 #define dprintk2(lvl, fmt, args...) \
46 if (i2c_debug >= lvl) { \
47 printk(KERN_DEBUG "%s at %s: " fmt, \
48 dev->name, __func__ , ##args); \
53 * em2800_i2c_send_bytes()
54 * send up to 4 bytes to the em2800 i2c device
56 static int em2800_i2c_send_bytes(struct em28xx *dev, u8 addr, u8 *buf, u16 len)
62 if (len < 1 || len > 4)
65 BUG_ON(len < 1 || len > 4);
66 b2[5] = 0x80 + len - 1;
77 ret = dev->em28xx_write_regs(dev, 4 - len, &b2[4 - len], 2 + len);
79 em28xx_warn("writing to i2c device failed (error=%i)\n", ret);
82 /* wait for completion */
83 for (write_timeout = EM2800_I2C_XFER_TIMEOUT; write_timeout > 0;
85 ret = dev->em28xx_read_reg(dev, 0x05);
86 if (ret == 0x80 + len - 1)
90 em28xx_warn("i2c write timed out\n");
95 * em2800_i2c_recv_bytes()
96 * read up to 4 bytes from the em2800 i2c device
98 static int em2800_i2c_recv_bytes(struct em28xx *dev, u8 addr, u8 *buf, u16 len)
105 if (len < 1 || len > 4)
109 buf2[1] = 0x84 + len - 1;
111 ret = dev->em28xx_write_regs(dev, 0x04, buf2, 2);
113 em28xx_warn("failed to trigger read from i2c address 0x%x "
114 "(error=%i)\n", addr, ret);
115 return (ret < 0) ? ret : -EIO;
118 /* wait for completion */
119 for (read_timeout = EM2800_I2C_XFER_TIMEOUT; read_timeout > 0;
121 ret = dev->em28xx_read_reg(dev, 0x05);
122 if (ret == 0x84 + len - 1) {
124 } else if (ret == 0x94 + len - 1) {
126 } else if (ret < 0) {
127 em28xx_warn("failed to get i2c transfer status from "
128 "bridge register (error=%i)\n", ret);
133 if (ret != 0x84 + len - 1)
134 em28xx_warn("read from i2c device at 0x%x timed out\n", addr);
136 /* get the received message */
137 ret = dev->em28xx_read_reg_req_len(dev, 0x00, 4-len, buf2, len);
139 em28xx_warn("reading from i2c device at 0x%x failed: "
140 "couldn't get the received message from the bridge "
141 "(error=%i)\n", addr, ret);
142 return (ret < 0) ? ret : -EIO;
144 for (i = 0; i < len; i++)
145 buf[i] = buf2[len - 1 - i];
151 * em2800_i2c_check_for_device()
152 * check if there is an i2c device at the supplied address
154 static int em2800_i2c_check_for_device(struct em28xx *dev, u8 addr)
159 ret = em2800_i2c_recv_bytes(dev, addr, &buf, 1);
162 return (ret < 0) ? ret : -EIO;
166 * em28xx_i2c_send_bytes()
168 static int em28xx_i2c_send_bytes(struct em28xx *dev, u16 addr, u8 *buf,
172 int write_timeout, ret;
174 if (len < 1 || len > 64)
177 wrcount = dev->em28xx_write_regs_req(dev, stop ? 2 : 3, addr, buf, len);
179 /* Seems to be required after a write */
180 for (write_timeout = EM2800_I2C_XFER_TIMEOUT; write_timeout > 0;
181 write_timeout -= 5) {
182 ret = dev->em28xx_read_reg(dev, 0x05);
192 * em28xx_i2c_recv_bytes()
193 * read a byte from the i2c device
195 static int em28xx_i2c_recv_bytes(struct em28xx *dev, u16 addr, u8 *buf, u16 len)
199 if (len < 1 || len > 64)
202 ret = dev->em28xx_read_reg_req_len(dev, 2, addr, buf, len);
204 em28xx_warn("reading i2c device failed (error=%i)\n", ret);
207 if (dev->em28xx_read_reg(dev, 0x5) != 0)
213 * em28xx_i2c_check_for_device()
214 * check if there is a i2c_device at the supplied address
216 static int em28xx_i2c_check_for_device(struct em28xx *dev, u16 addr)
220 ret = dev->em28xx_read_reg_req(dev, 2, addr);
222 em28xx_warn("reading from i2c device failed (error=%i)\n", ret);
225 if (dev->em28xx_read_reg(dev, 0x5) != 0)
232 * the main i2c transfer function
234 static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
235 struct i2c_msg msgs[], int num)
237 struct em28xx *dev = i2c_adap->algo_data;
238 int addr, rc, i, byte;
242 for (i = 0; i < num; i++) {
243 addr = msgs[i].addr << 1;
244 dprintk2(2, "%s %s addr=%x len=%d:",
245 (msgs[i].flags & I2C_M_RD) ? "read" : "write",
246 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);
247 if (!msgs[i].len) { /* no len: check only for device presence */
248 if (dev->board.is_em2800)
249 rc = em2800_i2c_check_for_device(dev, addr);
251 rc = em28xx_i2c_check_for_device(dev, addr);
253 dprintk2(2, " no device\n");
257 } else if (msgs[i].flags & I2C_M_RD) {
259 if (dev->board.is_em2800)
260 rc = em2800_i2c_recv_bytes(dev, addr,
264 rc = em28xx_i2c_recv_bytes(dev, addr,
267 if (i2c_debug >= 2) {
268 for (byte = 0; byte < msgs[i].len; byte++)
269 printk(" %02x", msgs[i].buf[byte]);
273 if (i2c_debug >= 2) {
274 for (byte = 0; byte < msgs[i].len; byte++)
275 printk(" %02x", msgs[i].buf[byte]);
277 if (dev->board.is_em2800)
278 rc = em2800_i2c_send_bytes(dev, addr,
282 rc = em28xx_i2c_send_bytes(dev, addr,
295 dprintk2(2, " ERROR: %i\n", rc);
299 /* based on linux/sunrpc/svcauth.h and linux/hash.h
300 * The original hash function returns a different value, if arch is x86_64
303 static inline unsigned long em28xx_hash_mem(char *buf, int length, int bits)
305 unsigned long hash = 0;
317 if ((len & (32 / 8 - 1)) == 0)
318 hash = ((hash^l) * 0x9e370001UL);
321 return (hash >> (32 - bits)) & 0xffffffffUL;
324 static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
326 unsigned char buf, *p = eedata;
327 struct em28xx_eeprom *em_eeprom = (void *)eedata;
328 int i, err, size = len, block;
330 if (dev->chip_id == CHIP_ID_EM2874 ||
331 dev->chip_id == CHIP_ID_EM28174 ||
332 dev->chip_id == CHIP_ID_EM2884) {
333 /* Empia switched to a 16-bit addressable eeprom in newer
334 devices. While we could certainly write a routine to read
335 the eeprom, there is nothing of use in there that cannot be
336 accessed through registers, and there is the risk that we
337 could corrupt the eeprom (since a 16-bit read call is
338 interpreted as a write call by 8-bit eeproms).
343 dev->i2c_client.addr = 0xa0 >> 1;
345 /* Check if board has eeprom */
346 err = i2c_master_recv(&dev->i2c_client, &buf, 0);
348 em28xx_errdev("board has no eeprom\n");
349 memset(eedata, 0, len);
355 err = i2c_master_send(&dev->i2c_client, &buf, 1);
357 printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n",
368 (err = i2c_master_recv(&dev->i2c_client, p, block))) {
370 "%s: i2c eeprom read error (err=%d)\n",
377 for (i = 0; i < len; i++) {
379 printk(KERN_INFO "%s: i2c eeprom %02x:", dev->name, i);
380 printk(" %02x", eedata[i]);
385 if (em_eeprom->id == 0x9567eb1a)
386 dev->hash = em28xx_hash_mem(eedata, len, 32);
388 printk(KERN_INFO "%s: EEPROM ID= 0x%08x, EEPROM hash = 0x%08lx\n",
389 dev->name, em_eeprom->id, dev->hash);
391 printk(KERN_INFO "%s: EEPROM info:\n", dev->name);
393 switch (em_eeprom->chip_conf >> 4 & 0x3) {
395 printk(KERN_INFO "%s:\tNo audio on board.\n", dev->name);
398 printk(KERN_INFO "%s:\tAC97 audio (5 sample rates)\n",
402 printk(KERN_INFO "%s:\tI2S audio, sample rate=32k\n",
406 printk(KERN_INFO "%s:\tI2S audio, 3 sample rates\n",
411 if (em_eeprom->chip_conf & 1 << 3)
412 printk(KERN_INFO "%s:\tUSB Remote wakeup capable\n", dev->name);
414 if (em_eeprom->chip_conf & 1 << 2)
415 printk(KERN_INFO "%s:\tUSB Self power capable\n", dev->name);
417 switch (em_eeprom->chip_conf & 0x3) {
419 printk(KERN_INFO "%s:\t500mA max power\n", dev->name);
422 printk(KERN_INFO "%s:\t400mA max power\n", dev->name);
425 printk(KERN_INFO "%s:\t300mA max power\n", dev->name);
428 printk(KERN_INFO "%s:\t200mA max power\n", dev->name);
431 printk(KERN_INFO "%s:\tTable at 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
433 em_eeprom->string_idx_table,
441 /* ----------------------------------------------------------- */
446 static u32 functionality(struct i2c_adapter *adap)
448 struct em28xx *dev = adap->algo_data;
449 u32 func_flags = I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
450 if (dev->board.is_em2800)
451 func_flags &= ~I2C_FUNC_SMBUS_WRITE_BLOCK_DATA;
455 static struct i2c_algorithm em28xx_algo = {
456 .master_xfer = em28xx_i2c_xfer,
457 .functionality = functionality,
460 static struct i2c_adapter em28xx_adap_template = {
461 .owner = THIS_MODULE,
463 .algo = &em28xx_algo,
466 static struct i2c_client em28xx_client_template = {
467 .name = "em28xx internal",
470 /* ----------------------------------------------------------- */
474 * incomplete list of known devices
476 static char *i2c_devs[128] = {
477 [0x4a >> 1] = "saa7113h",
478 [0x52 >> 1] = "drxk",
479 [0x60 >> 1] = "remote IR sensor",
480 [0x8e >> 1] = "remote IR sensor",
481 [0x86 >> 1] = "tda9887",
482 [0x80 >> 1] = "msp34xx",
483 [0x88 >> 1] = "msp34xx",
484 [0xa0 >> 1] = "eeprom",
485 [0xb0 >> 1] = "tda9874",
486 [0xb8 >> 1] = "tvp5150a",
487 [0xba >> 1] = "webcam sensor or tvp5150a",
488 [0xc0 >> 1] = "tuner (analog)",
489 [0xc2 >> 1] = "tuner (analog)",
490 [0xc4 >> 1] = "tuner (analog)",
491 [0xc6 >> 1] = "tuner (analog)",
496 * check i2c address range for devices
498 void em28xx_do_i2c_scan(struct em28xx *dev)
500 u8 i2c_devicelist[128];
504 memset(i2c_devicelist, 0, ARRAY_SIZE(i2c_devicelist));
506 for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
507 dev->i2c_client.addr = i;
508 rc = i2c_master_recv(&dev->i2c_client, &buf, 0);
511 i2c_devicelist[i] = i;
512 printk(KERN_INFO "%s: found i2c device @ 0x%x [%s]\n",
513 dev->name, i << 1, i2c_devs[i] ? i2c_devs[i] : "???");
516 dev->i2c_hash = em28xx_hash_mem(i2c_devicelist,
517 ARRAY_SIZE(i2c_devicelist), 32);
521 * em28xx_i2c_register()
524 int em28xx_i2c_register(struct em28xx *dev)
528 BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg);
529 BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req);
530 dev->i2c_adap = em28xx_adap_template;
531 dev->i2c_adap.dev.parent = &dev->udev->dev;
532 strcpy(dev->i2c_adap.name, dev->name);
533 dev->i2c_adap.algo_data = dev;
534 i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev);
536 retval = i2c_add_adapter(&dev->i2c_adap);
538 em28xx_errdev("%s: i2c_add_adapter failed! retval [%d]\n",
543 dev->i2c_client = em28xx_client_template;
544 dev->i2c_client.adapter = &dev->i2c_adap;
546 retval = em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata));
547 if ((retval < 0) && (retval != -ENODEV)) {
548 em28xx_errdev("%s: em28xx_i2_eeprom failed! retval [%d]\n",
555 em28xx_do_i2c_scan(dev);
561 * em28xx_i2c_unregister()
564 int em28xx_i2c_unregister(struct em28xx *dev)
566 i2c_del_adapter(&dev->i2c_adap);