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("failed to trigger write to i2c address 0x%x "
80 "(error=%i)\n", addr, ret);
81 return (ret < 0) ? ret : -EIO;
83 /* wait for completion */
84 for (write_timeout = EM2800_I2C_XFER_TIMEOUT; write_timeout > 0;
86 ret = dev->em28xx_read_reg(dev, 0x05);
87 if (ret == 0x80 + len - 1) {
89 } else if (ret == 0x94 + len - 1) {
92 em28xx_warn("failed to get i2c transfer status from "
93 "bridge register (error=%i)\n", ret);
98 em28xx_warn("write to i2c device at 0x%x timed out\n", addr);
103 * em2800_i2c_recv_bytes()
104 * read up to 4 bytes from the em2800 i2c device
106 static int em2800_i2c_recv_bytes(struct em28xx *dev, u8 addr, u8 *buf, u16 len)
113 if (len < 1 || len > 4)
117 buf2[1] = 0x84 + len - 1;
119 ret = dev->em28xx_write_regs(dev, 0x04, buf2, 2);
121 em28xx_warn("failed to trigger read from i2c address 0x%x "
122 "(error=%i)\n", addr, ret);
123 return (ret < 0) ? ret : -EIO;
126 /* wait for completion */
127 for (read_timeout = EM2800_I2C_XFER_TIMEOUT; read_timeout > 0;
129 ret = dev->em28xx_read_reg(dev, 0x05);
130 if (ret == 0x84 + len - 1) {
132 } else if (ret == 0x94 + len - 1) {
134 } else if (ret < 0) {
135 em28xx_warn("failed to get i2c transfer status from "
136 "bridge register (error=%i)\n", ret);
141 if (ret != 0x84 + len - 1)
142 em28xx_warn("read from i2c device at 0x%x timed out\n", addr);
144 /* get the received message */
145 ret = dev->em28xx_read_reg_req_len(dev, 0x00, 4-len, buf2, len);
147 em28xx_warn("reading from i2c device at 0x%x failed: "
148 "couldn't get the received message from the bridge "
149 "(error=%i)\n", addr, ret);
150 return (ret < 0) ? ret : -EIO;
152 for (i = 0; i < len; i++)
153 buf[i] = buf2[len - 1 - i];
159 * em2800_i2c_check_for_device()
160 * check if there is an i2c device at the supplied address
162 static int em2800_i2c_check_for_device(struct em28xx *dev, u8 addr)
167 ret = em2800_i2c_recv_bytes(dev, addr, &buf, 1);
170 return (ret < 0) ? ret : -EIO;
174 * em28xx_i2c_send_bytes()
176 static int em28xx_i2c_send_bytes(struct em28xx *dev, u16 addr, u8 *buf,
179 int write_timeout, ret;
181 if (len < 1 || len > 64)
183 /* NOTE: limited by the USB ctrl message constraints
184 * Zero length reads always succeed, even if no device is connected */
186 /* Write to i2c device */
187 ret = dev->em28xx_write_regs_req(dev, stop ? 2 : 3, addr, buf, len);
190 em28xx_warn("writing to i2c device at 0x%x failed "
191 "(error=%i)\n", addr, ret);
194 em28xx_warn("%i bytes write to i2c device at 0x%x "
195 "requested, but %i bytes written\n",
201 /* Check success of the i2c operation */
202 for (write_timeout = EM2800_I2C_XFER_TIMEOUT; write_timeout > 0;
203 write_timeout -= 5) {
204 ret = dev->em28xx_read_reg(dev, 0x05);
205 if (ret == 0) { /* success */
207 } else if (ret == 0x10) {
209 } else if (ret < 0) {
210 em28xx_warn("failed to read i2c transfer status from "
211 "bridge (error=%i)\n", ret);
215 /* NOTE: do we really have to wait for success ?
216 Never seen anything else than 0x00 or 0x10
217 (even with high payload) ... */
219 em28xx_warn("write to i2c device at 0x%x timed out\n", addr);
224 * em28xx_i2c_recv_bytes()
225 * read a byte from the i2c device
227 static int em28xx_i2c_recv_bytes(struct em28xx *dev, u16 addr, u8 *buf, u16 len)
231 if (len < 1 || len > 64)
233 /* NOTE: limited by the USB ctrl message constraints
234 * Zero length reads always succeed, even if no device is connected */
236 /* Read data from i2c device */
237 ret = dev->em28xx_read_reg_req_len(dev, 2, addr, buf, len);
240 em28xx_warn("reading from i2c device at 0x%x failed "
241 "(error=%i)\n", addr, ret);
244 em28xx_warn("%i bytes requested from i2c device at "
245 "0x%x, but %i bytes received\n",
251 /* Check success of the i2c operation */
252 ret = dev->em28xx_read_reg(dev, 0x05);
254 em28xx_warn("failed to read i2c transfer status from "
255 "bridge (error=%i)\n", ret);
262 em28xx_warn("unknown i2c error (status=%i)\n", ret);
270 * em28xx_i2c_check_for_device()
271 * check if there is a i2c_device at the supplied address
273 static int em28xx_i2c_check_for_device(struct em28xx *dev, u16 addr)
278 ret = em28xx_i2c_recv_bytes(dev, addr, &buf, 1);
281 return (ret < 0) ? ret : -EIO;
286 * the main i2c transfer function
288 static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
289 struct i2c_msg msgs[], int num)
291 struct em28xx *dev = i2c_adap->algo_data;
292 int addr, rc, i, byte;
296 for (i = 0; i < num; i++) {
297 addr = msgs[i].addr << 1;
298 dprintk2(2, "%s %s addr=%x len=%d:",
299 (msgs[i].flags & I2C_M_RD) ? "read" : "write",
300 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);
301 if (!msgs[i].len) { /* no len: check only for device presence */
302 if (dev->board.is_em2800)
303 rc = em2800_i2c_check_for_device(dev, addr);
305 rc = em28xx_i2c_check_for_device(dev, addr);
308 printk(" no device\n");
311 } else if (msgs[i].flags & I2C_M_RD) {
313 if (dev->board.is_em2800)
314 rc = em2800_i2c_recv_bytes(dev, addr,
318 rc = em28xx_i2c_recv_bytes(dev, addr,
321 if (i2c_debug >= 2) {
322 for (byte = 0; byte < msgs[i].len; byte++)
323 printk(" %02x", msgs[i].buf[byte]);
327 if (i2c_debug >= 2) {
328 for (byte = 0; byte < msgs[i].len; byte++)
329 printk(" %02x", msgs[i].buf[byte]);
331 if (dev->board.is_em2800)
332 rc = em2800_i2c_send_bytes(dev, addr,
336 rc = em28xx_i2c_send_bytes(dev, addr,
343 printk(" ERROR: %i\n", rc);
353 /* based on linux/sunrpc/svcauth.h and linux/hash.h
354 * The original hash function returns a different value, if arch is x86_64
357 static inline unsigned long em28xx_hash_mem(char *buf, int length, int bits)
359 unsigned long hash = 0;
371 if ((len & (32 / 8 - 1)) == 0)
372 hash = ((hash^l) * 0x9e370001UL);
375 return (hash >> (32 - bits)) & 0xffffffffUL;
378 static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
380 unsigned char buf, *p = eedata;
381 struct em28xx_eeprom *em_eeprom = (void *)eedata;
382 int i, err, size = len, block, block_max;
384 if (dev->chip_id == CHIP_ID_EM2874 ||
385 dev->chip_id == CHIP_ID_EM28174 ||
386 dev->chip_id == CHIP_ID_EM2884) {
387 /* Empia switched to a 16-bit addressable eeprom in newer
388 devices. While we could certainly write a routine to read
389 the eeprom, there is nothing of use in there that cannot be
390 accessed through registers, and there is the risk that we
391 could corrupt the eeprom (since a 16-bit read call is
392 interpreted as a write call by 8-bit eeproms).
397 dev->i2c_client.addr = 0xa0 >> 1;
399 /* Check if board has eeprom */
400 err = i2c_master_recv(&dev->i2c_client, &buf, 0);
402 em28xx_errdev("board has no eeprom\n");
403 memset(eedata, 0, len);
409 err = i2c_master_send(&dev->i2c_client, &buf, 1);
411 printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n",
416 if (dev->board.is_em2800)
422 if (size > block_max)
428 (err = i2c_master_recv(&dev->i2c_client, p, block))) {
430 "%s: i2c eeprom read error (err=%d)\n",
437 for (i = 0; i < len; i++) {
439 printk(KERN_INFO "%s: i2c eeprom %02x:", dev->name, i);
440 printk(" %02x", eedata[i]);
445 if (em_eeprom->id == 0x9567eb1a)
446 dev->hash = em28xx_hash_mem(eedata, len, 32);
448 printk(KERN_INFO "%s: EEPROM ID= 0x%08x, EEPROM hash = 0x%08lx\n",
449 dev->name, em_eeprom->id, dev->hash);
451 printk(KERN_INFO "%s: EEPROM info:\n", dev->name);
453 switch (em_eeprom->chip_conf >> 4 & 0x3) {
455 printk(KERN_INFO "%s:\tNo audio on board.\n", dev->name);
458 printk(KERN_INFO "%s:\tAC97 audio (5 sample rates)\n",
462 printk(KERN_INFO "%s:\tI2S audio, sample rate=32k\n",
466 printk(KERN_INFO "%s:\tI2S audio, 3 sample rates\n",
471 if (em_eeprom->chip_conf & 1 << 3)
472 printk(KERN_INFO "%s:\tUSB Remote wakeup capable\n", dev->name);
474 if (em_eeprom->chip_conf & 1 << 2)
475 printk(KERN_INFO "%s:\tUSB Self power capable\n", dev->name);
477 switch (em_eeprom->chip_conf & 0x3) {
479 printk(KERN_INFO "%s:\t500mA max power\n", dev->name);
482 printk(KERN_INFO "%s:\t400mA max power\n", dev->name);
485 printk(KERN_INFO "%s:\t300mA max power\n", dev->name);
488 printk(KERN_INFO "%s:\t200mA max power\n", dev->name);
491 printk(KERN_INFO "%s:\tTable at 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
493 em_eeprom->string_idx_table,
501 /* ----------------------------------------------------------- */
506 static u32 functionality(struct i2c_adapter *adap)
508 struct em28xx *dev = adap->algo_data;
509 u32 func_flags = I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
510 if (dev->board.is_em2800)
511 func_flags &= ~I2C_FUNC_SMBUS_WRITE_BLOCK_DATA;
515 static struct i2c_algorithm em28xx_algo = {
516 .master_xfer = em28xx_i2c_xfer,
517 .functionality = functionality,
520 static struct i2c_adapter em28xx_adap_template = {
521 .owner = THIS_MODULE,
523 .algo = &em28xx_algo,
526 static struct i2c_client em28xx_client_template = {
527 .name = "em28xx internal",
530 /* ----------------------------------------------------------- */
534 * incomplete list of known devices
536 static char *i2c_devs[128] = {
537 [0x3e >> 1] = "remote IR sensor",
538 [0x4a >> 1] = "saa7113h",
539 [0x52 >> 1] = "drxk",
540 [0x60 >> 1] = "remote IR sensor",
541 [0x8e >> 1] = "remote IR sensor",
542 [0x86 >> 1] = "tda9887",
543 [0x80 >> 1] = "msp34xx",
544 [0x88 >> 1] = "msp34xx",
545 [0xa0 >> 1] = "eeprom",
546 [0xb0 >> 1] = "tda9874",
547 [0xb8 >> 1] = "tvp5150a",
548 [0xba >> 1] = "webcam sensor or tvp5150a",
549 [0xc0 >> 1] = "tuner (analog)",
550 [0xc2 >> 1] = "tuner (analog)",
551 [0xc4 >> 1] = "tuner (analog)",
552 [0xc6 >> 1] = "tuner (analog)",
557 * check i2c address range for devices
559 void em28xx_do_i2c_scan(struct em28xx *dev)
561 u8 i2c_devicelist[128];
565 memset(i2c_devicelist, 0, ARRAY_SIZE(i2c_devicelist));
567 for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
568 dev->i2c_client.addr = i;
569 rc = i2c_master_recv(&dev->i2c_client, &buf, 0);
572 i2c_devicelist[i] = i;
573 printk(KERN_INFO "%s: found i2c device @ 0x%x [%s]\n",
574 dev->name, i << 1, i2c_devs[i] ? i2c_devs[i] : "???");
577 dev->i2c_hash = em28xx_hash_mem(i2c_devicelist,
578 ARRAY_SIZE(i2c_devicelist), 32);
582 * em28xx_i2c_register()
585 int em28xx_i2c_register(struct em28xx *dev)
589 BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg);
590 BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req);
591 dev->i2c_adap = em28xx_adap_template;
592 dev->i2c_adap.dev.parent = &dev->udev->dev;
593 strcpy(dev->i2c_adap.name, dev->name);
594 dev->i2c_adap.algo_data = dev;
595 i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev);
597 retval = i2c_add_adapter(&dev->i2c_adap);
599 em28xx_errdev("%s: i2c_add_adapter failed! retval [%d]\n",
604 dev->i2c_client = em28xx_client_template;
605 dev->i2c_client.adapter = &dev->i2c_adap;
607 retval = em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata));
608 if ((retval < 0) && (retval != -ENODEV)) {
609 em28xx_errdev("%s: em28xx_i2_eeprom failed! retval [%d]\n",
616 em28xx_do_i2c_scan(dev);
622 * em28xx_i2c_unregister()
625 int em28xx_i2c_unregister(struct em28xx *dev)
627 i2c_del_adapter(&dev->i2c_adap);