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@brturbo.com.br>
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>
28 #include <linux/video_decoder.h>
31 #include <media/tuner.h>
33 /* ----------------------------------------------------------- */
35 static unsigned int i2c_scan
= 0;
36 module_param(i2c_scan
, int, 0444);
37 MODULE_PARM_DESC(i2c_scan
, "scan i2c bus at insmod time");
39 static unsigned int i2c_debug
= 0;
40 module_param(i2c_debug
, int, 0644);
41 MODULE_PARM_DESC(i2c_debug
, "enable debug messages [i2c]");
43 #define dprintk1(lvl,fmt, args...) if (i2c_debug>=lvl) do {\
44 printk(fmt, ##args); } while (0)
45 #define dprintk2(lvl,fmt, args...) if (i2c_debug>=lvl) do{ \
46 printk(KERN_DEBUG "%s at %s: " fmt, \
47 dev->name, __FUNCTION__ , ##args); } while (0)
50 * em2800_i2c_send_max4()
51 * send up to 4 bytes to the i2c device
53 static int em2800_i2c_send_max4(struct em28xx
*dev
, unsigned char addr
,
59 BUG_ON(len
< 1 || len
> 4);
60 b2
[5] = 0x80 + len
- 1;
70 ret
= dev
->em28xx_write_regs(dev
, 4 - len
, &b2
[4 - len
], 2 + len
);
72 em28xx_warn("writting to i2c device failed (error=%i)\n", ret
);
75 for (write_timeout
= EM2800_I2C_WRITE_TIMEOUT
; write_timeout
> 0;
77 ret
= dev
->em28xx_read_reg(dev
, 0x05);
78 if (ret
== 0x80 + len
- 1)
82 em28xx_warn("i2c write timed out\n");
87 * em2800_i2c_send_bytes()
89 static int em2800_i2c_send_bytes(void *data
, unsigned char addr
, char *buf
,
97 struct em28xx
*dev
= (struct em28xx
*)data
;
99 count
= (len
> maxLen
) ? maxLen
: len
;
100 ret
= em2800_i2c_send_max4(dev
, addr
, bufPtr
, count
);
106 return (ret
< 0) ? ret
: -EFAULT
;
112 * em2800_i2c_check_for_device()
113 * check if there is a i2c_device at the supplied address
115 static int em2800_i2c_check_for_device(struct em28xx
*dev
, unsigned char addr
)
121 ret
= dev
->em28xx_write_regs(dev
, 0x04, &msg
, 1);
123 em28xx_warn("setting i2c device address failed (error=%i)\n",
128 ret
= dev
->em28xx_write_regs(dev
, 0x05, &msg
, 1);
130 em28xx_warn("preparing i2c read failed (error=%i)\n", ret
);
133 for (write_timeout
= EM2800_I2C_WRITE_TIMEOUT
; write_timeout
> 0;
134 write_timeout
-= 5) {
135 unsigned msg
= dev
->em28xx_read_reg(dev
, 0x5);
138 else if (msg
== 0x84)
146 * em2800_i2c_recv_bytes()
147 * read from the i2c device
149 static int em2800_i2c_recv_bytes(struct em28xx
*dev
, unsigned char addr
,
153 /* check for the device and set i2c read address */
154 ret
= em2800_i2c_check_for_device(dev
, addr
);
157 ("preparing read at i2c address 0x%x failed (error=%i)\n",
161 ret
= dev
->em28xx_read_reg_req_len(dev
, 0x0, 0x3, buf
, len
);
163 em28xx_warn("reading from i2c device at 0x%x failed (error=%i)",
171 * em28xx_i2c_send_bytes()
172 * untested for more than 4 bytes
174 static int em28xx_i2c_send_bytes(void *data
, unsigned char addr
, char *buf
,
178 struct em28xx
*dev
= (struct em28xx
*)data
;
180 wrcount
= dev
->em28xx_write_regs_req(dev
, stop
? 2 : 3, addr
, buf
, len
);
186 * em28xx_i2c_recv_bytes()
187 * read a byte from the i2c device
189 static int em28xx_i2c_recv_bytes(struct em28xx
*dev
, unsigned char addr
,
193 ret
= dev
->em28xx_read_reg_req_len(dev
, 2, addr
, buf
, len
);
195 em28xx_warn("reading i2c device failed (error=%i)\n", ret
);
198 if (dev
->em28xx_read_reg(dev
, 0x5) != 0)
204 * em28xx_i2c_check_for_device()
205 * check if there is a i2c_device at the supplied address
207 static int em28xx_i2c_check_for_device(struct em28xx
*dev
, unsigned char addr
)
213 ret
= dev
->em28xx_read_reg_req(dev
, 2, addr
);
215 em28xx_warn("reading from i2c device failed (error=%i)\n", ret
);
218 if (dev
->em28xx_read_reg(dev
, 0x5) != 0)
225 * the main i2c transfer function
227 static int em28xx_i2c_xfer(struct i2c_adapter
*i2c_adap
,
228 struct i2c_msg msgs
[], int num
)
230 struct em28xx
*dev
= i2c_adap
->algo_data
;
231 int addr
, rc
, i
, byte
;
235 for (i
= 0; i
< num
; i
++) {
236 addr
= msgs
[i
].addr
<< 1;
237 dprintk2(2,"%s %s addr=%x len=%d:",
238 (msgs
[i
].flags
& I2C_M_RD
) ? "read" : "write",
239 i
== num
- 1 ? "stop" : "nonstop", addr
, msgs
[i
].len
);
240 if (!msgs
[i
].len
) { /* no len: check only for device presence */
242 rc
= em2800_i2c_check_for_device(dev
, addr
);
244 rc
= em28xx_i2c_check_for_device(dev
, addr
);
246 dprintk2(2," no device\n");
250 } else if (msgs
[i
].flags
& I2C_M_RD
) {
253 rc
= em2800_i2c_recv_bytes(dev
, addr
,
257 rc
= em28xx_i2c_recv_bytes(dev
, addr
,
261 for (byte
= 0; byte
< msgs
[i
].len
; byte
++) {
262 printk(" %02x", msgs
[i
].buf
[byte
]);
268 for (byte
= 0; byte
< msgs
[i
].len
; byte
++)
269 printk(" %02x", msgs
[i
].buf
[byte
]);
272 rc
= em2800_i2c_send_bytes(dev
, addr
,
276 rc
= em28xx_i2c_send_bytes(dev
, addr
,
289 dprintk2(2," ERROR: %i\n", rc
);
293 static int em28xx_i2c_eeprom(struct em28xx
*dev
, unsigned char *eedata
, int len
)
295 unsigned char buf
, *p
= eedata
;
296 struct em28xx_eeprom
*em_eeprom
= (void *)eedata
;
297 int i
, err
, size
= len
, block
;
299 dev
->i2c_client
.addr
= 0xa0 >> 1;
301 /* Check if board has eeprom */
302 err
= i2c_master_recv(&dev
->i2c_client
, &buf
, 0);
307 if (1 != (err
= i2c_master_send(&dev
->i2c_client
, &buf
, 1))) {
308 printk(KERN_INFO
"%s: Huh, no eeprom present (err=%d)?\n",
319 (err
= i2c_master_recv(&dev
->i2c_client
, p
, block
))) {
321 "%s: i2c eeprom read error (err=%d)\n",
328 for (i
= 0; i
< len
; i
++) {
330 printk(KERN_INFO
"%s: i2c eeprom %02x:", dev
->name
, i
);
331 printk(" %02x", eedata
[i
]);
336 printk(KERN_INFO
"EEPROM ID= 0x%08x\n", em_eeprom
->id
);
337 printk(KERN_INFO
"Vendor/Product ID= %04x:%04x\n", em_eeprom
->vendor_ID
,
338 em_eeprom
->product_ID
);
340 switch (em_eeprom
->chip_conf
>> 4 & 0x3) {
342 printk(KERN_INFO
"No audio on board.\n");
345 printk(KERN_INFO
"AC97 audio (5 sample rates)\n");
348 printk(KERN_INFO
"I2S audio, sample rate=32k\n");
351 printk(KERN_INFO
"I2S audio, 3 sample rates\n");
355 if (em_eeprom
->chip_conf
& 1 << 3)
356 printk(KERN_INFO
"USB Remote wakeup capable\n");
358 if (em_eeprom
->chip_conf
& 1 << 2)
359 printk(KERN_INFO
"USB Self power capable\n");
361 switch (em_eeprom
->chip_conf
& 0x3) {
363 printk(KERN_INFO
"500mA max power\n");
366 printk(KERN_INFO
"400mA max power\n");
369 printk(KERN_INFO
"300mA max power\n");
372 printk(KERN_INFO
"200mA max power\n");
375 printk(KERN_INFO
"Table at 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
376 em_eeprom
->string_idx_table
,em_eeprom
->string1
,
377 em_eeprom
->string2
,em_eeprom
->string3
);
382 /* ----------------------------------------------------------- */
387 static int algo_control(struct i2c_adapter
*adapter
,
388 unsigned int cmd
, unsigned long arg
)
396 static u32
functionality(struct i2c_adapter
*adap
)
398 return I2C_FUNC_SMBUS_EMUL
;
402 static void inc_use(struct i2c_adapter
*adap
)
407 static void dec_use(struct i2c_adapter
*adap
)
413 static int em28xx_set_tuner(int check_eeprom
, struct i2c_client
*client
)
415 struct em28xx
*dev
= client
->adapter
->algo_data
;
416 struct tuner_setup tun_setup
;
418 if (dev
->has_tuner
) {
419 tun_setup
.mode_mask
= T_ANALOG_TV
| T_RADIO
;
420 tun_setup
.type
= dev
->tuner_type
;
421 tun_setup
.addr
= dev
->tuner_addr
;
423 em28xx_i2c_call_clients(dev
, TUNER_SET_TYPE_ADDR
, &tun_setup
);
431 * gets called when a device attaches to the i2c bus
432 * does some basic configuration
434 static int attach_inform(struct i2c_client
*client
)
436 struct em28xx
*dev
= client
->adapter
->algo_data
;
438 switch (client
->addr
<< 1) {
440 em28xx_i2c_call_clients(dev
, TDA9887_SET_CONFIG
, &dev
->tda9887_conf
);
443 dprintk1(1,"attach_inform: saa7114 detected.\n");
446 dprintk1(1,"attach_inform: saa7113 detected.\n");
449 dprintk1(1,"attach_inform: eeprom detected.\n");
454 struct IR_i2c
*ir
= i2c_get_clientdata(client
);
455 dprintk1(1,"attach_inform: IR detected (%s).\n",ir
->phys
);
456 em28xx_set_ir(dev
,ir
);
461 dprintk1(1,"attach_inform: msp34xx detected.\n");
465 dprintk1(1,"attach_inform: tvp5150 detected.\n");
468 dprintk1(1,"attach inform: detected I2C address %x\n", client
->addr
<< 1);
469 dev
->tuner_addr
= client
->addr
;
470 em28xx_set_tuner(-1, client
);
476 static struct i2c_algorithm em28xx_algo
= {
477 .master_xfer
= em28xx_i2c_xfer
,
478 .algo_control
= algo_control
,
479 .functionality
= functionality
,
482 static struct i2c_adapter em28xx_adap_template
= {
484 .owner
= THIS_MODULE
,
489 #ifdef I2C_CLASS_TV_ANALOG
490 .class = I2C_CLASS_TV_ANALOG
,
493 .id
= I2C_HW_B_EM28XX
,
494 .algo
= &em28xx_algo
,
495 .client_register
= attach_inform
,
498 static struct i2c_client em28xx_client_template
= {
499 .name
= "em28xx internal",
500 .flags
= I2C_CLIENT_ALLOW_USE
,
503 /* ----------------------------------------------------------- */
507 * incomplete list of known devices
509 static char *i2c_devs
[128] = {
510 [0x4a >> 1] = "saa7113h",
511 [0x60 >> 1] = "remote IR sensor",
512 [0x8e >> 1] = "remote IR sensor",
513 [0x86 >> 1] = "tda9887",
514 [0x80 >> 1] = "msp34xx",
515 [0x88 >> 1] = "msp34xx",
516 [0xa0 >> 1] = "eeprom",
517 [0xb8 >> 1] = "tvp5150a",
518 [0xba >> 1] = "tvp5150a",
519 [0xc0 >> 1] = "tuner (analog)",
520 [0xc2 >> 1] = "tuner (analog)",
521 [0xc4 >> 1] = "tuner (analog)",
522 [0xc6 >> 1] = "tuner (analog)",
527 * check i2c address range for devices
529 static void do_i2c_scan(char *name
, struct i2c_client
*c
)
534 for (i
= 0; i
< 128; i
++) {
536 rc
= i2c_master_recv(c
, &buf
, 0);
539 printk(KERN_INFO
"%s: found i2c device @ 0x%x [%s]\n", name
,
540 i
<< 1, i2c_devs
[i
] ? i2c_devs
[i
] : "???");
545 * em28xx_i2c_call_clients()
546 * send commands to all attached i2c devices
548 void em28xx_i2c_call_clients(struct em28xx
*dev
, unsigned int cmd
, void *arg
)
550 BUG_ON(NULL
== dev
->i2c_adap
.algo_data
);
551 i2c_clients_command(&dev
->i2c_adap
, cmd
, arg
);
555 * em28xx_i2c_register()
558 int em28xx_i2c_register(struct em28xx
*dev
)
560 BUG_ON(!dev
->em28xx_write_regs
|| !dev
->em28xx_read_reg
);
561 BUG_ON(!dev
->em28xx_write_regs_req
|| !dev
->em28xx_read_reg_req
);
562 dev
->i2c_adap
= em28xx_adap_template
;
563 dev
->i2c_adap
.dev
.parent
= &dev
->udev
->dev
;
564 strcpy(dev
->i2c_adap
.name
, dev
->name
);
565 dev
->i2c_adap
.algo_data
= dev
;
566 i2c_add_adapter(&dev
->i2c_adap
);
568 dev
->i2c_client
= em28xx_client_template
;
569 dev
->i2c_client
.adapter
= &dev
->i2c_adap
;
571 em28xx_i2c_eeprom(dev
, dev
->eedata
, sizeof(dev
->eedata
));
574 do_i2c_scan(dev
->name
, &dev
->i2c_client
);
579 * em28xx_i2c_unregister()
582 int em28xx_i2c_unregister(struct em28xx
*dev
)
584 i2c_del_adapter(&dev
->i2c_adap
);