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()
185 static int em28xx_i2c_send_bytes(void *data
, unsigned char addr
, char *buf
,
189 struct em28xx
*dev
= (struct em28xx
*)data
;
190 int write_timeout
, ret
;
192 wrcount
= dev
->em28xx_write_regs_req(dev
, stop
? 2 : 3, addr
, buf
, len
);
194 /* Seems to be required after a write */
195 for (write_timeout
= EM2800_I2C_WRITE_TIMEOUT
; write_timeout
> 0;
196 write_timeout
-= 5) {
197 ret
= dev
->em28xx_read_reg(dev
, 0x05);
207 * em28xx_i2c_recv_bytes()
208 * read a byte from the i2c device
210 static int em28xx_i2c_recv_bytes(struct em28xx
*dev
, unsigned char addr
,
214 ret
= dev
->em28xx_read_reg_req_len(dev
, 2, addr
, buf
, len
);
216 em28xx_warn("reading i2c device failed (error=%i)\n", ret
);
219 if (dev
->em28xx_read_reg(dev
, 0x5) != 0)
225 * em28xx_i2c_check_for_device()
226 * check if there is a i2c_device at the supplied address
228 static int em28xx_i2c_check_for_device(struct em28xx
*dev
, unsigned char addr
)
232 ret
= dev
->em28xx_read_reg_req(dev
, 2, addr
);
234 em28xx_warn("reading from i2c device failed (error=%i)\n", ret
);
237 if (dev
->em28xx_read_reg(dev
, 0x5) != 0)
244 * the main i2c transfer function
246 static int em28xx_i2c_xfer(struct i2c_adapter
*i2c_adap
,
247 struct i2c_msg msgs
[], int num
)
249 struct em28xx
*dev
= i2c_adap
->algo_data
;
250 int addr
, rc
, i
, byte
;
254 for (i
= 0; i
< num
; i
++) {
255 addr
= msgs
[i
].addr
<< 1;
256 dprintk2(2, "%s %s addr=%x len=%d:",
257 (msgs
[i
].flags
& I2C_M_RD
) ? "read" : "write",
258 i
== num
- 1 ? "stop" : "nonstop", addr
, msgs
[i
].len
);
259 if (!msgs
[i
].len
) { /* no len: check only for device presence */
260 if (dev
->board
.is_em2800
)
261 rc
= em2800_i2c_check_for_device(dev
, addr
);
263 rc
= em28xx_i2c_check_for_device(dev
, addr
);
265 dprintk2(2, " no device\n");
269 } else if (msgs
[i
].flags
& I2C_M_RD
) {
271 if (dev
->board
.is_em2800
)
272 rc
= em2800_i2c_recv_bytes(dev
, addr
,
276 rc
= em28xx_i2c_recv_bytes(dev
, addr
,
279 if (i2c_debug
>= 2) {
280 for (byte
= 0; byte
< msgs
[i
].len
; byte
++)
281 printk(" %02x", msgs
[i
].buf
[byte
]);
285 if (i2c_debug
>= 2) {
286 for (byte
= 0; byte
< msgs
[i
].len
; byte
++)
287 printk(" %02x", msgs
[i
].buf
[byte
]);
289 if (dev
->board
.is_em2800
)
290 rc
= em2800_i2c_send_bytes(dev
, addr
,
294 rc
= em28xx_i2c_send_bytes(dev
, addr
,
307 dprintk2(2, " ERROR: %i\n", rc
);
311 /* based on linux/sunrpc/svcauth.h and linux/hash.h
312 * The original hash function returns a different value, if arch is x86_64
315 static inline unsigned long em28xx_hash_mem(char *buf
, int length
, int bits
)
317 unsigned long hash
= 0;
329 if ((len
& (32 / 8 - 1)) == 0)
330 hash
= ((hash
^l
) * 0x9e370001UL
);
333 return (hash
>> (32 - bits
)) & 0xffffffffUL
;
336 static int em28xx_i2c_eeprom(struct em28xx
*dev
, unsigned char *eedata
, int len
)
338 unsigned char buf
, *p
= eedata
;
339 struct em28xx_eeprom
*em_eeprom
= (void *)eedata
;
340 int i
, err
, size
= len
, block
;
342 if (dev
->chip_id
== CHIP_ID_EM2874
||
343 dev
->chip_id
== CHIP_ID_EM28174
||
344 dev
->chip_id
== CHIP_ID_EM2884
) {
345 /* Empia switched to a 16-bit addressable eeprom in newer
346 devices. While we could certainly write a routine to read
347 the eeprom, there is nothing of use in there that cannot be
348 accessed through registers, and there is the risk that we
349 could corrupt the eeprom (since a 16-bit read call is
350 interpreted as a write call by 8-bit eeproms).
355 dev
->i2c_client
.addr
= 0xa0 >> 1;
357 /* Check if board has eeprom */
358 err
= i2c_master_recv(&dev
->i2c_client
, &buf
, 0);
360 em28xx_errdev("board has no eeprom\n");
361 memset(eedata
, 0, len
);
367 err
= i2c_master_send(&dev
->i2c_client
, &buf
, 1);
369 printk(KERN_INFO
"%s: Huh, no eeprom present (err=%d)?\n",
380 (err
= i2c_master_recv(&dev
->i2c_client
, p
, block
))) {
382 "%s: i2c eeprom read error (err=%d)\n",
389 for (i
= 0; i
< len
; i
++) {
391 printk(KERN_INFO
"%s: i2c eeprom %02x:", dev
->name
, i
);
392 printk(" %02x", eedata
[i
]);
397 if (em_eeprom
->id
== 0x9567eb1a)
398 dev
->hash
= em28xx_hash_mem(eedata
, len
, 32);
400 printk(KERN_INFO
"%s: EEPROM ID= 0x%08x, EEPROM hash = 0x%08lx\n",
401 dev
->name
, em_eeprom
->id
, dev
->hash
);
403 printk(KERN_INFO
"%s: EEPROM info:\n", dev
->name
);
405 switch (em_eeprom
->chip_conf
>> 4 & 0x3) {
407 printk(KERN_INFO
"%s:\tNo audio on board.\n", dev
->name
);
410 printk(KERN_INFO
"%s:\tAC97 audio (5 sample rates)\n",
414 printk(KERN_INFO
"%s:\tI2S audio, sample rate=32k\n",
418 printk(KERN_INFO
"%s:\tI2S audio, 3 sample rates\n",
423 if (em_eeprom
->chip_conf
& 1 << 3)
424 printk(KERN_INFO
"%s:\tUSB Remote wakeup capable\n", dev
->name
);
426 if (em_eeprom
->chip_conf
& 1 << 2)
427 printk(KERN_INFO
"%s:\tUSB Self power capable\n", dev
->name
);
429 switch (em_eeprom
->chip_conf
& 0x3) {
431 printk(KERN_INFO
"%s:\t500mA max power\n", dev
->name
);
434 printk(KERN_INFO
"%s:\t400mA max power\n", dev
->name
);
437 printk(KERN_INFO
"%s:\t300mA max power\n", dev
->name
);
440 printk(KERN_INFO
"%s:\t200mA max power\n", dev
->name
);
443 printk(KERN_INFO
"%s:\tTable at 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
445 em_eeprom
->string_idx_table
,
453 /* ----------------------------------------------------------- */
458 static u32
functionality(struct i2c_adapter
*adap
)
460 return I2C_FUNC_SMBUS_EMUL
;
463 static struct i2c_algorithm em28xx_algo
= {
464 .master_xfer
= em28xx_i2c_xfer
,
465 .functionality
= functionality
,
468 static struct i2c_adapter em28xx_adap_template
= {
469 .owner
= THIS_MODULE
,
471 .algo
= &em28xx_algo
,
474 static struct i2c_client em28xx_client_template
= {
475 .name
= "em28xx internal",
478 /* ----------------------------------------------------------- */
482 * incomplete list of known devices
484 static char *i2c_devs
[128] = {
485 [0x4a >> 1] = "saa7113h",
486 [0x60 >> 1] = "remote IR sensor",
487 [0x8e >> 1] = "remote IR sensor",
488 [0x86 >> 1] = "tda9887",
489 [0x80 >> 1] = "msp34xx",
490 [0x88 >> 1] = "msp34xx",
491 [0xa0 >> 1] = "eeprom",
492 [0xb0 >> 1] = "tda9874",
493 [0xb8 >> 1] = "tvp5150a",
494 [0xba >> 1] = "webcam sensor or tvp5150a",
495 [0xc0 >> 1] = "tuner (analog)",
496 [0xc2 >> 1] = "tuner (analog)",
497 [0xc4 >> 1] = "tuner (analog)",
498 [0xc6 >> 1] = "tuner (analog)",
503 * check i2c address range for devices
505 void em28xx_do_i2c_scan(struct em28xx
*dev
)
507 u8 i2c_devicelist
[128];
511 memset(i2c_devicelist
, 0, ARRAY_SIZE(i2c_devicelist
));
513 for (i
= 0; i
< ARRAY_SIZE(i2c_devs
); i
++) {
514 dev
->i2c_client
.addr
= i
;
515 rc
= i2c_master_recv(&dev
->i2c_client
, &buf
, 0);
518 i2c_devicelist
[i
] = i
;
519 printk(KERN_INFO
"%s: found i2c device @ 0x%x [%s]\n",
520 dev
->name
, i
<< 1, i2c_devs
[i
] ? i2c_devs
[i
] : "???");
523 dev
->i2c_hash
= em28xx_hash_mem(i2c_devicelist
,
524 ARRAY_SIZE(i2c_devicelist
), 32);
528 * em28xx_i2c_register()
531 int em28xx_i2c_register(struct em28xx
*dev
)
535 BUG_ON(!dev
->em28xx_write_regs
|| !dev
->em28xx_read_reg
);
536 BUG_ON(!dev
->em28xx_write_regs_req
|| !dev
->em28xx_read_reg_req
);
537 dev
->i2c_adap
= em28xx_adap_template
;
538 dev
->i2c_adap
.dev
.parent
= &dev
->udev
->dev
;
539 strcpy(dev
->i2c_adap
.name
, dev
->name
);
540 dev
->i2c_adap
.algo_data
= dev
;
541 i2c_set_adapdata(&dev
->i2c_adap
, &dev
->v4l2_dev
);
543 retval
= i2c_add_adapter(&dev
->i2c_adap
);
545 em28xx_errdev("%s: i2c_add_adapter failed! retval [%d]\n",
550 dev
->i2c_client
= em28xx_client_template
;
551 dev
->i2c_client
.adapter
= &dev
->i2c_adap
;
553 retval
= em28xx_i2c_eeprom(dev
, dev
->eedata
, sizeof(dev
->eedata
));
554 if ((retval
< 0) && (retval
!= -ENODEV
)) {
555 em28xx_errdev("%s: em28xx_i2_eeprom failed! retval [%d]\n",
562 em28xx_do_i2c_scan(dev
);
564 /* Instantiate the IR receiver device, if present */
565 em28xx_register_i2c_ir(dev
);
571 * em28xx_i2c_unregister()
574 int em28xx_i2c_unregister(struct em28xx
*dev
)
576 i2c_del_adapter(&dev
->i2c_adap
);