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)
225 ret = dev->em28xx_read_reg_req(dev, 2, addr);
227 em28xx_warn("reading from i2c device failed (error=%i)\n", ret);
230 if (dev->em28xx_read_reg(dev, 0x5) != 0)
237 * the main i2c transfer function
239 static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
240 struct i2c_msg msgs[], int num)
242 struct em28xx *dev = i2c_adap->algo_data;
243 int addr, rc, i, byte;
247 for (i = 0; i < num; i++) {
248 addr = msgs[i].addr << 1;
249 dprintk2(2, "%s %s addr=%x len=%d:",
250 (msgs[i].flags & I2C_M_RD) ? "read" : "write",
251 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);
252 if (!msgs[i].len) { /* no len: check only for device presence */
253 if (dev->board.is_em2800)
254 rc = em2800_i2c_check_for_device(dev, addr);
256 rc = em28xx_i2c_check_for_device(dev, addr);
258 dprintk2(2, " no device\n");
262 } else if (msgs[i].flags & I2C_M_RD) {
264 if (dev->board.is_em2800)
265 rc = em2800_i2c_recv_bytes(dev, addr,
269 rc = em28xx_i2c_recv_bytes(dev, addr,
272 if (i2c_debug >= 2) {
273 for (byte = 0; byte < msgs[i].len; byte++)
274 printk(" %02x", msgs[i].buf[byte]);
278 if (i2c_debug >= 2) {
279 for (byte = 0; byte < msgs[i].len; byte++)
280 printk(" %02x", msgs[i].buf[byte]);
282 if (dev->board.is_em2800)
283 rc = em2800_i2c_send_bytes(dev, addr,
287 rc = em28xx_i2c_send_bytes(dev, addr,
300 dprintk2(2, " ERROR: %i\n", rc);
304 /* based on linux/sunrpc/svcauth.h and linux/hash.h
305 * The original hash function returns a different value, if arch is x86_64
308 static inline unsigned long em28xx_hash_mem(char *buf, int length, int bits)
310 unsigned long hash = 0;
322 if ((len & (32 / 8 - 1)) == 0)
323 hash = ((hash^l) * 0x9e370001UL);
326 return (hash >> (32 - bits)) & 0xffffffffUL;
329 static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
331 unsigned char buf, *p = eedata;
332 struct em28xx_eeprom *em_eeprom = (void *)eedata;
333 int i, err, size = len, block;
335 if (dev->chip_id == CHIP_ID_EM2874) {
336 /* Empia switched to a 16-bit addressable eeprom in newer
337 devices. While we could certainly write a routine to read
338 the eeprom, there is nothing of use in there that cannot be
339 accessed through registers, and there is the risk that we
340 could corrupt the eeprom (since a 16-bit read call is
341 interpreted as a write call by 8-bit eeproms).
346 dev->i2c_client.addr = 0xa0 >> 1;
348 /* Check if board has eeprom */
349 err = i2c_master_recv(&dev->i2c_client, &buf, 0);
351 em28xx_errdev("board has no eeprom\n");
352 memset(eedata, 0, len);
358 err = i2c_master_send(&dev->i2c_client, &buf, 1);
360 printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n",
371 (err = i2c_master_recv(&dev->i2c_client, p, block))) {
373 "%s: i2c eeprom read error (err=%d)\n",
380 for (i = 0; i < len; i++) {
382 printk(KERN_INFO "%s: i2c eeprom %02x:", dev->name, i);
383 printk(" %02x", eedata[i]);
388 if (em_eeprom->id == 0x9567eb1a)
389 dev->hash = em28xx_hash_mem(eedata, len, 32);
391 printk(KERN_INFO "%s: EEPROM ID= 0x%08x, EEPROM hash = 0x%08lx\n",
392 dev->name, em_eeprom->id, dev->hash);
394 printk(KERN_INFO "%s: EEPROM info:\n", dev->name);
396 switch (em_eeprom->chip_conf >> 4 & 0x3) {
398 printk(KERN_INFO "%s:\tNo audio on board.\n", dev->name);
401 printk(KERN_INFO "%s:\tAC97 audio (5 sample rates)\n",
405 printk(KERN_INFO "%s:\tI2S audio, sample rate=32k\n",
409 printk(KERN_INFO "%s:\tI2S audio, 3 sample rates\n",
414 if (em_eeprom->chip_conf & 1 << 3)
415 printk(KERN_INFO "%s:\tUSB Remote wakeup capable\n", dev->name);
417 if (em_eeprom->chip_conf & 1 << 2)
418 printk(KERN_INFO "%s:\tUSB Self power capable\n", dev->name);
420 switch (em_eeprom->chip_conf & 0x3) {
422 printk(KERN_INFO "%s:\t500mA max power\n", dev->name);
425 printk(KERN_INFO "%s:\t400mA max power\n", dev->name);
428 printk(KERN_INFO "%s:\t300mA max power\n", dev->name);
431 printk(KERN_INFO "%s:\t200mA max power\n", dev->name);
434 printk(KERN_INFO "%s:\tTable at 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
436 em_eeprom->string_idx_table,
444 /* ----------------------------------------------------------- */
449 static u32 functionality(struct i2c_adapter *adap)
451 return I2C_FUNC_SMBUS_EMUL;
456 * gets called when a device attaches to the i2c bus
457 * does some basic configuration
459 static int attach_inform(struct i2c_client *client)
461 struct em28xx *dev = client->adapter->algo_data;
463 switch (client->addr << 1) {
469 struct v4l2_priv_tun_config tda9887_cfg;
471 struct tuner_setup tun_setup;
473 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
474 tun_setup.type = TUNER_TDA9887;
475 tun_setup.addr = client->addr;
477 em28xx_i2c_call_clients(dev, TUNER_SET_TYPE_ADDR,
480 tda9887_cfg.tuner = TUNER_TDA9887;
481 tda9887_cfg.priv = &dev->tda9887_conf;
482 em28xx_i2c_call_clients(dev, TUNER_SET_CONFIG,
487 dprintk1(1, "attach_inform: saa7114 detected.\n");
490 dprintk1(1, "attach_inform: saa7113 detected.\n");
493 dprintk1(1, "attach_inform: eeprom detected.\n");
498 struct IR_i2c *ir = i2c_get_clientdata(client);
499 dprintk1(1, "attach_inform: IR detected (%s).\n",
501 em28xx_set_ir(dev, ir);
506 dprintk1(1, "attach_inform: msp34xx detected.\n");
510 dprintk1(1, "attach_inform: tvp5150 detected.\n");
514 dprintk1(1, "attach_inform: tda9874 detected\n");
518 if (!dev->tuner_addr)
519 dev->tuner_addr = client->addr;
521 dprintk1(1, "attach inform: detected I2C address %x\n",
523 dprintk1(1, "driver id %d\n", client->driver->id);
530 static struct i2c_algorithm em28xx_algo = {
531 .master_xfer = em28xx_i2c_xfer,
532 .functionality = functionality,
535 static struct i2c_adapter em28xx_adap_template = {
536 .owner = THIS_MODULE,
537 .class = I2C_CLASS_TV_ANALOG,
539 .id = I2C_HW_B_EM28XX,
540 .algo = &em28xx_algo,
541 .client_register = attach_inform,
544 static struct i2c_client em28xx_client_template = {
545 .name = "em28xx internal",
548 /* ----------------------------------------------------------- */
552 * incomplete list of known devices
554 static char *i2c_devs[128] = {
555 [0x4a >> 1] = "saa7113h",
556 [0x60 >> 1] = "remote IR sensor",
557 [0x8e >> 1] = "remote IR sensor",
558 [0x86 >> 1] = "tda9887",
559 [0x80 >> 1] = "msp34xx",
560 [0x88 >> 1] = "msp34xx",
561 [0xa0 >> 1] = "eeprom",
562 [0xb0 >> 1] = "tda9874",
563 [0xb8 >> 1] = "tvp5150a",
564 [0xba >> 1] = "tvp5150a",
565 [0xc0 >> 1] = "tuner (analog)",
566 [0xc2 >> 1] = "tuner (analog)",
567 [0xc4 >> 1] = "tuner (analog)",
568 [0xc6 >> 1] = "tuner (analog)",
573 * check i2c address range for devices
575 void em28xx_do_i2c_scan(struct em28xx *dev)
577 u8 i2c_devicelist[128];
581 memset(i2c_devicelist, 0, ARRAY_SIZE(i2c_devicelist));
583 for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
584 dev->i2c_client.addr = i;
585 rc = i2c_master_recv(&dev->i2c_client, &buf, 0);
588 i2c_devicelist[i] = i;
589 printk(KERN_INFO "%s: found i2c device @ 0x%x [%s]\n",
590 dev->name, i << 1, i2c_devs[i] ? i2c_devs[i] : "???");
593 dev->i2c_hash = em28xx_hash_mem(i2c_devicelist,
594 ARRAY_SIZE(i2c_devicelist), 32);
598 * em28xx_i2c_call_clients()
599 * send commands to all attached i2c devices
601 void em28xx_i2c_call_clients(struct em28xx *dev, unsigned int cmd, void *arg)
603 BUG_ON(NULL == dev->i2c_adap.algo_data);
604 i2c_clients_command(&dev->i2c_adap, cmd, arg);
608 * em28xx_i2c_register()
611 int em28xx_i2c_register(struct em28xx *dev)
615 BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg);
616 BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req);
617 dev->i2c_adap = em28xx_adap_template;
618 dev->i2c_adap.dev.parent = &dev->udev->dev;
619 strcpy(dev->i2c_adap.name, dev->name);
620 dev->i2c_adap.algo_data = dev;
622 retval = i2c_add_adapter(&dev->i2c_adap);
624 em28xx_errdev("%s: i2c_add_adapter failed! retval [%d]\n",
629 dev->i2c_client = em28xx_client_template;
630 dev->i2c_client.adapter = &dev->i2c_adap;
632 retval = em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata));
633 if ((retval < 0) && (retval != -ENODEV)) {
634 em28xx_errdev("%s: em28xx_i2_eeprom failed! retval [%d]\n",
641 em28xx_do_i2c_scan(dev);
647 * em28xx_i2c_unregister()
650 int em28xx_i2c_unregister(struct em28xx *dev)
652 i2c_del_adapter(&dev->i2c_adap);