3 bttv-i2c.c -- all the i2c code is here
5 bttv - Bt848 frame grabber driver
7 Copyright (C) 1996,97,98 Ralph Metzler (rjkm@thp.uni-koeln.de)
8 & Marcus Metzler (mocm@thp.uni-koeln.de)
9 (c) 1999-2003 Gerd Knorr <kraxel@bytesex.org>
11 (c) 2005 Mauro Carvalho Chehab <mchehab@infradead.org>
12 - Multituner support and i2c address binding
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program; if not, write to the Free Software
26 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
30 #include <linux/module.h>
31 #include <linux/init.h>
32 #include <linux/delay.h>
35 #include <media/v4l2-common.h>
36 #include <linux/jiffies.h>
42 module_param(i2c_debug
, int, 0644);
43 MODULE_PARM_DESC(i2c_hw
,"configure i2c debug level");
44 module_param(i2c_hw
, int, 0444);
45 MODULE_PARM_DESC(i2c_hw
,"force use of hardware i2c support, "
46 "instead of software bitbang");
47 module_param(i2c_scan
, int, 0444);
48 MODULE_PARM_DESC(i2c_scan
,"scan i2c bus at insmod time");
50 static unsigned int i2c_udelay
= 5;
51 module_param(i2c_udelay
, int, 0444);
52 MODULE_PARM_DESC(i2c_udelay
,"soft i2c delay at insmod time, in usecs "
53 "(should be 5 or higher). Lower value means higher bus speed.");
55 /* ----------------------------------------------------------------------- */
56 /* I2C functions - bitbanging adapter (software i2c) */
58 static void bttv_bit_setscl(void *data
, int state
)
60 struct bttv
*btv
= (struct bttv
*)data
;
63 btv
->i2c_state
|= 0x02;
65 btv
->i2c_state
&= ~0x02;
66 btwrite(btv
->i2c_state
, BT848_I2C
);
70 static void bttv_bit_setsda(void *data
, int state
)
72 struct bttv
*btv
= (struct bttv
*)data
;
75 btv
->i2c_state
|= 0x01;
77 btv
->i2c_state
&= ~0x01;
78 btwrite(btv
->i2c_state
, BT848_I2C
);
82 static int bttv_bit_getscl(void *data
)
84 struct bttv
*btv
= (struct bttv
*)data
;
87 state
= btread(BT848_I2C
) & 0x02 ? 1 : 0;
91 static int bttv_bit_getsda(void *data
)
93 struct bttv
*btv
= (struct bttv
*)data
;
96 state
= btread(BT848_I2C
) & 0x01;
100 static struct i2c_algo_bit_data __devinitdata bttv_i2c_algo_bit_template
= {
101 .setsda
= bttv_bit_setsda
,
102 .setscl
= bttv_bit_setscl
,
103 .getsda
= bttv_bit_getsda
,
104 .getscl
= bttv_bit_getscl
,
109 /* ----------------------------------------------------------------------- */
110 /* I2C functions - hardware i2c */
112 static u32
functionality(struct i2c_adapter
*adap
)
114 return I2C_FUNC_SMBUS_EMUL
;
118 bttv_i2c_wait_done(struct bttv
*btv
)
123 if (wait_event_interruptible_timeout(btv
->i2c_queue
,
124 btv
->i2c_done
, msecs_to_jiffies(85)) == -ERESTARTSYS
)
128 if (btv
->i2c_done
& BT848_INT_RACK
)
134 #define I2C_HW (BT878_I2C_MODE | BT848_I2C_SYNC |\
135 BT848_I2C_SCL | BT848_I2C_SDA)
138 bttv_i2c_sendbytes(struct bttv
*btv
, const struct i2c_msg
*msg
, int last
)
147 /* start, address + first byte */
148 xmit
= (msg
->addr
<< 25) | (msg
->buf
[0] << 16) | I2C_HW
;
149 if (msg
->len
> 1 || !last
)
150 xmit
|= BT878_I2C_NOSTOP
;
151 btwrite(xmit
, BT848_I2C
);
152 retval
= bttv_i2c_wait_done(btv
);
158 printk(" <W %02x %02x", msg
->addr
<< 1, msg
->buf
[0]);
159 if (!(xmit
& BT878_I2C_NOSTOP
))
163 for (cnt
= 1; cnt
< msg
->len
; cnt
++ ) {
164 /* following bytes */
165 xmit
= (msg
->buf
[cnt
] << 24) | I2C_HW
| BT878_I2C_NOSTART
;
166 if (cnt
< msg
->len
-1 || !last
)
167 xmit
|= BT878_I2C_NOSTOP
;
168 btwrite(xmit
, BT848_I2C
);
169 retval
= bttv_i2c_wait_done(btv
);
175 printk(" %02x", msg
->buf
[cnt
]);
176 if (!(xmit
& BT878_I2C_NOSTOP
))
186 printk(" ERR: %d\n",retval
);
191 bttv_i2c_readbytes(struct bttv
*btv
, const struct i2c_msg
*msg
, int last
)
197 for(cnt
= 0; cnt
< msg
->len
; cnt
++) {
198 xmit
= (msg
->addr
<< 25) | (1 << 24) | I2C_HW
;
199 if (cnt
< msg
->len
-1)
200 xmit
|= BT848_I2C_W3B
;
201 if (cnt
< msg
->len
-1 || !last
)
202 xmit
|= BT878_I2C_NOSTOP
;
204 xmit
|= BT878_I2C_NOSTART
;
205 btwrite(xmit
, BT848_I2C
);
206 retval
= bttv_i2c_wait_done(btv
);
211 msg
->buf
[cnt
] = ((u32
)btread(BT848_I2C
) >> 8) & 0xff;
213 if (!(xmit
& BT878_I2C_NOSTART
))
214 printk(" <R %02x", (msg
->addr
<< 1) +1);
215 printk(" =%02x", msg
->buf
[cnt
]);
216 if (!(xmit
& BT878_I2C_NOSTOP
))
226 printk(" ERR: %d\n",retval
);
230 static int bttv_i2c_xfer(struct i2c_adapter
*i2c_adap
, struct i2c_msg
*msgs
, int num
)
232 struct v4l2_device
*v4l2_dev
= i2c_get_adapdata(i2c_adap
);
233 struct bttv
*btv
= to_bttv(v4l2_dev
);
239 btwrite(BT848_INT_I2CDONE
|BT848_INT_RACK
, BT848_INT_STAT
);
240 for (i
= 0 ; i
< num
; i
++) {
241 if (msgs
[i
].flags
& I2C_M_RD
) {
243 retval
= bttv_i2c_readbytes(btv
, &msgs
[i
], i
+1 == num
);
248 retval
= bttv_i2c_sendbytes(btv
, &msgs
[i
], i
+1 == num
);
259 static const struct i2c_algorithm bttv_algo
= {
260 .master_xfer
= bttv_i2c_xfer
,
261 .functionality
= functionality
,
264 /* ----------------------------------------------------------------------- */
265 /* I2C functions - common stuff */
268 int bttv_I2CRead(struct bttv
*btv
, unsigned char addr
, char *probe_for
)
270 unsigned char buffer
= 0;
272 if (0 != btv
->i2c_rc
)
274 if (bttv_verbose
&& NULL
!= probe_for
)
275 printk(KERN_INFO
"bttv%d: i2c: checking for %s @ 0x%02x... ",
276 btv
->c
.nr
,probe_for
,addr
);
277 btv
->i2c_client
.addr
= addr
>> 1;
278 if (1 != i2c_master_recv(&btv
->i2c_client
, &buffer
, 1)) {
279 if (NULL
!= probe_for
) {
281 printk("not found\n");
283 printk(KERN_WARNING
"bttv%d: i2c read 0x%x: error\n",
287 if (bttv_verbose
&& NULL
!= probe_for
)
293 int bttv_I2CWrite(struct bttv
*btv
, unsigned char addr
, unsigned char b1
,
294 unsigned char b2
, int both
)
296 unsigned char buffer
[2];
297 int bytes
= both
? 2 : 1;
299 if (0 != btv
->i2c_rc
)
301 btv
->i2c_client
.addr
= addr
>> 1;
304 if (bytes
!= i2c_master_send(&btv
->i2c_client
, buffer
, bytes
))
309 /* read EEPROM content */
310 void __devinit
bttv_readee(struct bttv
*btv
, unsigned char *eedata
, int addr
)
312 memset(eedata
, 0, 256);
313 if (0 != btv
->i2c_rc
)
315 btv
->i2c_client
.addr
= addr
>> 1;
316 tveeprom_read(&btv
->i2c_client
, eedata
, 256);
319 static char *i2c_devs
[128] = {
320 [ 0x1c >> 1 ] = "lgdt330x",
321 [ 0x30 >> 1 ] = "IR (hauppauge)",
322 [ 0x80 >> 1 ] = "msp34xx",
323 [ 0x86 >> 1 ] = "tda9887",
324 [ 0xa0 >> 1 ] = "eeprom",
325 [ 0xc0 >> 1 ] = "tuner (analog)",
326 [ 0xc2 >> 1 ] = "tuner (analog)",
329 static void do_i2c_scan(char *name
, struct i2c_client
*c
)
334 for (i
= 0; i
< ARRAY_SIZE(i2c_devs
); i
++) {
336 rc
= i2c_master_recv(c
,&buf
,0);
339 printk("%s: i2c scan: found device @ 0x%x [%s]\n",
340 name
, i
<< 1, i2c_devs
[i
] ? i2c_devs
[i
] : "???");
344 /* init + register i2c algo-bit adapter */
345 int __devinit
init_bttv_i2c(struct bttv
*btv
)
347 strlcpy(btv
->i2c_client
.name
, "bttv internal", I2C_NAME_SIZE
);
351 if (btv
->use_i2c_hw
) {
353 strlcpy(btv
->c
.i2c_adap
.name
, "bt878",
354 sizeof(btv
->c
.i2c_adap
.name
));
355 btv
->c
.i2c_adap
.id
= I2C_HW_B_BT848
; /* FIXME */
356 btv
->c
.i2c_adap
.algo
= &bttv_algo
;
359 /* Prevents usage of invalid delay values */
363 strlcpy(btv
->c
.i2c_adap
.name
, "bttv",
364 sizeof(btv
->c
.i2c_adap
.name
));
365 btv
->c
.i2c_adap
.id
= I2C_HW_B_BT848
;
366 memcpy(&btv
->i2c_algo
, &bttv_i2c_algo_bit_template
,
367 sizeof(bttv_i2c_algo_bit_template
));
368 btv
->i2c_algo
.udelay
= i2c_udelay
;
369 btv
->i2c_algo
.data
= btv
;
370 btv
->c
.i2c_adap
.algo_data
= &btv
->i2c_algo
;
372 btv
->c
.i2c_adap
.owner
= THIS_MODULE
;
374 btv
->c
.i2c_adap
.dev
.parent
= &btv
->c
.pci
->dev
;
375 snprintf(btv
->c
.i2c_adap
.name
, sizeof(btv
->c
.i2c_adap
.name
),
376 "bt%d #%d [%s]", btv
->id
, btv
->c
.nr
,
377 btv
->use_i2c_hw
? "hw" : "sw");
379 i2c_set_adapdata(&btv
->c
.i2c_adap
, &btv
->c
.v4l2_dev
);
380 btv
->i2c_client
.adapter
= &btv
->c
.i2c_adap
;
383 if (btv
->use_i2c_hw
) {
384 btv
->i2c_rc
= i2c_add_adapter(&btv
->c
.i2c_adap
);
386 bttv_bit_setscl(btv
,1);
387 bttv_bit_setsda(btv
,1);
388 btv
->i2c_rc
= i2c_bit_add_bus(&btv
->c
.i2c_adap
);
390 if (0 == btv
->i2c_rc
&& i2c_scan
)
391 do_i2c_scan(btv
->c
.v4l2_dev
.name
, &btv
->i2c_client
);
393 /* Instantiate the IR receiver device, if present */
394 if (0 == btv
->i2c_rc
) {
395 struct i2c_board_info info
;
396 /* The external IR receiver is at i2c address 0x34 (0x35 for
397 reads). Future Hauppauge cards will have an internal
398 receiver at 0x30 (0x31 for reads). In theory, both can be
399 fitted, and Hauppauge suggest an external overrides an
402 That's why we probe 0x1a (~0x34) first. CB
404 const unsigned short addr_list
[] = {
405 0x1a, 0x18, 0x4b, 0x64, 0x30,
409 memset(&info
, 0, sizeof(struct i2c_board_info
));
410 strlcpy(info
.type
, "ir_video", I2C_NAME_SIZE
);
411 i2c_new_probed_device(&btv
->c
.i2c_adap
, &info
, addr_list
);
416 int __devexit
fini_bttv_i2c(struct bttv
*btv
)
418 if (0 != btv
->i2c_rc
)
421 return i2c_del_adapter(&btv
->c
.i2c_adap
);