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]");
45 #define dprintk1(lvl, fmt, args...) \
47 if (i2c_debug >= lvl) { \
48 printk(fmt, ##args); \
52 #define dprintk2(lvl, fmt, args...) \
54 if (i2c_debug >= lvl) { \
55 printk(KERN_DEBUG "%s at %s: " fmt, \
56 dev->name, __func__ , ##args); \
61 * em2800_i2c_send_max4()
62 * send up to 4 bytes to the i2c device
64 static int em2800_i2c_send_max4(struct em28xx *dev, unsigned char addr,
70 BUG_ON(len < 1 || len > 4);
71 b2[5] = 0x80 + len - 1;
81 ret = dev->em28xx_write_regs(dev, 4 - len, &b2[4 - len], 2 + len);
83 em28xx_warn("writing to i2c device failed (error=%i)\n", ret);
86 for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0;
88 ret = dev->em28xx_read_reg(dev, 0x05);
89 if (ret == 0x80 + len - 1)
93 em28xx_warn("i2c write timed out\n");
98 * em2800_i2c_send_bytes()
100 static int em2800_i2c_send_bytes(void *data, unsigned char addr, char *buf,
108 struct em28xx *dev = (struct em28xx *)data;
110 count = (len > maxLen) ? maxLen : len;
111 ret = em2800_i2c_send_max4(dev, addr, bufPtr, count);
117 return (ret < 0) ? ret : -EFAULT;
123 * em2800_i2c_check_for_device()
124 * check if there is a i2c_device at the supplied address
126 static int em2800_i2c_check_for_device(struct em28xx *dev, unsigned char addr)
132 ret = dev->em28xx_write_regs(dev, 0x04, &msg, 1);
134 em28xx_warn("setting i2c device address failed (error=%i)\n",
139 ret = dev->em28xx_write_regs(dev, 0x05, &msg, 1);
141 em28xx_warn("preparing i2c read failed (error=%i)\n", ret);
144 for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0;
145 write_timeout -= 5) {
146 unsigned reg = dev->em28xx_read_reg(dev, 0x5);
150 else if (reg == 0x84)
158 * em2800_i2c_recv_bytes()
159 * read from the i2c device
161 static int em2800_i2c_recv_bytes(struct em28xx *dev, unsigned char addr,
165 /* check for the device and set i2c read address */
166 ret = em2800_i2c_check_for_device(dev, addr);
169 ("preparing read at i2c address 0x%x failed (error=%i)\n",
173 ret = dev->em28xx_read_reg_req_len(dev, 0x0, 0x3, buf, len);
175 em28xx_warn("reading from i2c device at 0x%x failed (error=%i)",
183 * em28xx_i2c_send_bytes()
184 * untested for more than 4 bytes
186 static int em28xx_i2c_send_bytes(void *data, unsigned char addr, char *buf,
190 struct em28xx *dev = (struct em28xx *)data;
192 wrcount = dev->em28xx_write_regs_req(dev, stop ? 2 : 3, addr, buf, len);
198 * em28xx_i2c_recv_bytes()
199 * read a byte from the i2c device
201 static int em28xx_i2c_recv_bytes(struct em28xx *dev, unsigned char addr,
205 ret = dev->em28xx_read_reg_req_len(dev, 2, addr, buf, len);
207 em28xx_warn("reading i2c device failed (error=%i)\n", ret);
210 if (dev->em28xx_read_reg(dev, 0x5) != 0)
216 * em28xx_i2c_check_for_device()
217 * check if there is a i2c_device at the supplied address
219 static int em28xx_i2c_check_for_device(struct em28xx *dev, unsigned char addr)
223 ret = dev->em28xx_read_reg_req(dev, 2, addr);
225 em28xx_warn("reading from i2c device failed (error=%i)\n", ret);
228 if (dev->em28xx_read_reg(dev, 0x5) != 0)
235 * the main i2c transfer function
237 static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
238 struct i2c_msg msgs[], int num)
240 struct em28xx *dev = i2c_adap->algo_data;
241 int addr, rc, i, byte;
245 for (i = 0; i < num; i++) {
246 addr = msgs[i].addr << 1;
247 dprintk2(2, "%s %s addr=%x len=%d:",
248 (msgs[i].flags & I2C_M_RD) ? "read" : "write",
249 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);
250 if (!msgs[i].len) { /* no len: check only for device presence */
251 if (dev->board.is_em2800)
252 rc = em2800_i2c_check_for_device(dev, addr);
254 rc = em28xx_i2c_check_for_device(dev, addr);
256 dprintk2(2, " no device\n");
260 } else if (msgs[i].flags & I2C_M_RD) {
262 if (dev->board.is_em2800)
263 rc = em2800_i2c_recv_bytes(dev, addr,
267 rc = em28xx_i2c_recv_bytes(dev, addr,
270 if (i2c_debug >= 2) {
271 for (byte = 0; byte < msgs[i].len; byte++)
272 printk(" %02x", msgs[i].buf[byte]);
276 if (i2c_debug >= 2) {
277 for (byte = 0; byte < msgs[i].len; byte++)
278 printk(" %02x", msgs[i].buf[byte]);
280 if (dev->board.is_em2800)
281 rc = em2800_i2c_send_bytes(dev, addr,
285 rc = em28xx_i2c_send_bytes(dev, addr,
298 dprintk2(2, " ERROR: %i\n", rc);
302 /* based on linux/sunrpc/svcauth.h and linux/hash.h
303 * The original hash function returns a different value, if arch is x86_64
306 static inline unsigned long em28xx_hash_mem(char *buf, int length, int bits)
308 unsigned long hash = 0;
320 if ((len & (32 / 8 - 1)) == 0)
321 hash = ((hash^l) * 0x9e370001UL);
324 return (hash >> (32 - bits)) & 0xffffffffUL;
327 static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
329 unsigned char buf, *p = eedata;
330 struct em28xx_eeprom *em_eeprom = (void *)eedata;
331 int i, err, size = len, block;
333 if (dev->chip_id == CHIP_ID_EM2874 || dev->chip_id == CHIP_ID_EM28174) {
334 /* Empia switched to a 16-bit addressable eeprom in newer
335 devices. While we could certainly write a routine to read
336 the eeprom, there is nothing of use in there that cannot be
337 accessed through registers, and there is the risk that we
338 could corrupt the eeprom (since a 16-bit read call is
339 interpreted as a write call by 8-bit eeproms).
344 dev->i2c_client.addr = 0xa0 >> 1;
346 /* Check if board has eeprom */
347 err = i2c_master_recv(&dev->i2c_client, &buf, 0);
349 em28xx_errdev("board has no eeprom\n");
350 memset(eedata, 0, len);
356 err = i2c_master_send(&dev->i2c_client, &buf, 1);
358 printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n",
369 (err = i2c_master_recv(&dev->i2c_client, p, block))) {
371 "%s: i2c eeprom read error (err=%d)\n",
378 for (i = 0; i < len; i++) {
380 printk(KERN_INFO "%s: i2c eeprom %02x:", dev->name, i);
381 printk(" %02x", eedata[i]);
386 if (em_eeprom->id == 0x9567eb1a)
387 dev->hash = em28xx_hash_mem(eedata, len, 32);
389 printk(KERN_INFO "%s: EEPROM ID= 0x%08x, EEPROM hash = 0x%08lx\n",
390 dev->name, em_eeprom->id, dev->hash);
392 printk(KERN_INFO "%s: EEPROM info:\n", dev->name);
394 switch (em_eeprom->chip_conf >> 4 & 0x3) {
396 printk(KERN_INFO "%s:\tNo audio on board.\n", dev->name);
399 printk(KERN_INFO "%s:\tAC97 audio (5 sample rates)\n",
403 printk(KERN_INFO "%s:\tI2S audio, sample rate=32k\n",
407 printk(KERN_INFO "%s:\tI2S audio, 3 sample rates\n",
412 if (em_eeprom->chip_conf & 1 << 3)
413 printk(KERN_INFO "%s:\tUSB Remote wakeup capable\n", dev->name);
415 if (em_eeprom->chip_conf & 1 << 2)
416 printk(KERN_INFO "%s:\tUSB Self power capable\n", dev->name);
418 switch (em_eeprom->chip_conf & 0x3) {
420 printk(KERN_INFO "%s:\t500mA max power\n", dev->name);
423 printk(KERN_INFO "%s:\t400mA max power\n", dev->name);
426 printk(KERN_INFO "%s:\t300mA max power\n", dev->name);
429 printk(KERN_INFO "%s:\t200mA max power\n", dev->name);
432 printk(KERN_INFO "%s:\tTable at 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
434 em_eeprom->string_idx_table,
442 /* ----------------------------------------------------------- */
447 static u32 functionality(struct i2c_adapter *adap)
449 return I2C_FUNC_SMBUS_EMUL;
452 static struct i2c_algorithm em28xx_algo = {
453 .master_xfer = em28xx_i2c_xfer,
454 .functionality = functionality,
457 static struct i2c_adapter em28xx_adap_template = {
458 .owner = THIS_MODULE,
460 .algo = &em28xx_algo,
463 static struct i2c_client em28xx_client_template = {
464 .name = "em28xx internal",
467 /* ----------------------------------------------------------- */
471 * incomplete list of known devices
473 static char *i2c_devs[128] = {
474 [0x4a >> 1] = "saa7113h",
475 [0x60 >> 1] = "remote IR sensor",
476 [0x8e >> 1] = "remote IR sensor",
477 [0x86 >> 1] = "tda9887",
478 [0x80 >> 1] = "msp34xx",
479 [0x88 >> 1] = "msp34xx",
480 [0xa0 >> 1] = "eeprom",
481 [0xb0 >> 1] = "tda9874",
482 [0xb8 >> 1] = "tvp5150a",
483 [0xba >> 1] = "webcam sensor or tvp5150a",
484 [0xc0 >> 1] = "tuner (analog)",
485 [0xc2 >> 1] = "tuner (analog)",
486 [0xc4 >> 1] = "tuner (analog)",
487 [0xc6 >> 1] = "tuner (analog)",
492 * check i2c address range for devices
494 void em28xx_do_i2c_scan(struct em28xx *dev)
496 u8 i2c_devicelist[128];
500 memset(i2c_devicelist, 0, ARRAY_SIZE(i2c_devicelist));
502 for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
503 dev->i2c_client.addr = i;
504 rc = i2c_master_recv(&dev->i2c_client, &buf, 0);
507 i2c_devicelist[i] = i;
508 printk(KERN_INFO "%s: found i2c device @ 0x%x [%s]\n",
509 dev->name, i << 1, i2c_devs[i] ? i2c_devs[i] : "???");
512 dev->i2c_hash = em28xx_hash_mem(i2c_devicelist,
513 ARRAY_SIZE(i2c_devicelist), 32);
517 * em28xx_i2c_register()
520 int em28xx_i2c_register(struct em28xx *dev)
524 BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg);
525 BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req);
526 dev->i2c_adap = em28xx_adap_template;
527 dev->i2c_adap.dev.parent = &dev->udev->dev;
528 strcpy(dev->i2c_adap.name, dev->name);
529 dev->i2c_adap.algo_data = dev;
530 i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev);
532 retval = i2c_add_adapter(&dev->i2c_adap);
534 em28xx_errdev("%s: i2c_add_adapter failed! retval [%d]\n",
539 dev->i2c_client = em28xx_client_template;
540 dev->i2c_client.adapter = &dev->i2c_adap;
542 retval = em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata));
543 if ((retval < 0) && (retval != -ENODEV)) {
544 em28xx_errdev("%s: em28xx_i2_eeprom failed! retval [%d]\n",
551 em28xx_do_i2c_scan(dev);
553 /* Instantiate the IR receiver device, if present */
554 em28xx_register_i2c_ir(dev);
560 * em28xx_i2c_unregister()
563 int em28xx_i2c_unregister(struct em28xx *dev)
565 i2c_del_adapter(&dev->i2c_adap);