bttv-i2c.c revision 0a25f3b292c5c70de80d2b1f1cf3f5b9aae91b86
1/*
2
3    bttv-i2c.c  --  all the i2c code is here
4
5    bttv - Bt848 frame grabber driver
6
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>
10
11    (c) 2005 Mauro Carvalho Chehab <mchehab@infradead.org>
12	- Multituner support and i2c address binding
13
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.
18
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.
23
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.
27
28*/
29
30#include <linux/module.h>
31#include <linux/init.h>
32#include <linux/delay.h>
33
34#include "bttvp.h"
35#include <media/v4l2-common.h>
36#include <linux/jiffies.h>
37#include <asm/io.h>
38
39static int i2c_debug;
40static int i2c_hw;
41static int i2c_scan;
42module_param(i2c_debug, int, 0644);
43MODULE_PARM_DESC(i2c_debug, "configure i2c debug level");
44module_param(i2c_hw,    int, 0444);
45MODULE_PARM_DESC(i2c_hw,"force use of hardware i2c support, "
46			"instead of software bitbang");
47module_param(i2c_scan,  int, 0444);
48MODULE_PARM_DESC(i2c_scan,"scan i2c bus at insmod time");
49
50static unsigned int i2c_udelay = 5;
51module_param(i2c_udelay, int, 0444);
52MODULE_PARM_DESC(i2c_udelay,"soft i2c delay at insmod time, in usecs "
53		"(should be 5 or higher). Lower value means higher bus speed.");
54
55/* ----------------------------------------------------------------------- */
56/* I2C functions - bitbanging adapter (software i2c)                       */
57
58static void bttv_bit_setscl(void *data, int state)
59{
60	struct bttv *btv = (struct bttv*)data;
61
62	if (state)
63		btv->i2c_state |= 0x02;
64	else
65		btv->i2c_state &= ~0x02;
66	btwrite(btv->i2c_state, BT848_I2C);
67	btread(BT848_I2C);
68}
69
70static void bttv_bit_setsda(void *data, int state)
71{
72	struct bttv *btv = (struct bttv*)data;
73
74	if (state)
75		btv->i2c_state |= 0x01;
76	else
77		btv->i2c_state &= ~0x01;
78	btwrite(btv->i2c_state, BT848_I2C);
79	btread(BT848_I2C);
80}
81
82static int bttv_bit_getscl(void *data)
83{
84	struct bttv *btv = (struct bttv*)data;
85	int state;
86
87	state = btread(BT848_I2C) & 0x02 ? 1 : 0;
88	return state;
89}
90
91static int bttv_bit_getsda(void *data)
92{
93	struct bttv *btv = (struct bttv*)data;
94	int state;
95
96	state = btread(BT848_I2C) & 0x01;
97	return state;
98}
99
100static 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,
105	.udelay  = 16,
106	.timeout = 200,
107};
108
109/* ----------------------------------------------------------------------- */
110/* I2C functions - hardware i2c                                            */
111
112static u32 functionality(struct i2c_adapter *adap)
113{
114	return I2C_FUNC_SMBUS_EMUL;
115}
116
117static int
118bttv_i2c_wait_done(struct bttv *btv)
119{
120	int rc = 0;
121
122	/* timeout */
123	if (wait_event_interruptible_timeout(btv->i2c_queue,
124		btv->i2c_done, msecs_to_jiffies(85)) == -ERESTARTSYS)
125
126	rc = -EIO;
127
128	if (btv->i2c_done & BT848_INT_RACK)
129		rc = 1;
130	btv->i2c_done = 0;
131	return rc;
132}
133
134#define I2C_HW (BT878_I2C_MODE  | BT848_I2C_SYNC |\
135		BT848_I2C_SCL | BT848_I2C_SDA)
136
137static int
138bttv_i2c_sendbytes(struct bttv *btv, const struct i2c_msg *msg, int last)
139{
140	u32 xmit;
141	int retval,cnt;
142
143	/* sanity checks */
144	if (0 == msg->len)
145		return -EINVAL;
146
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);
153	if (retval < 0)
154		goto err;
155	if (retval == 0)
156		goto eio;
157	if (i2c_debug) {
158		printk(" <W %02x %02x", msg->addr << 1, msg->buf[0]);
159		if (!(xmit & BT878_I2C_NOSTOP))
160			printk(" >\n");
161	}
162
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);
170		if (retval < 0)
171			goto err;
172		if (retval == 0)
173			goto eio;
174		if (i2c_debug) {
175			printk(" %02x", msg->buf[cnt]);
176			if (!(xmit & BT878_I2C_NOSTOP))
177				printk(" >\n");
178		}
179	}
180	return msg->len;
181
182 eio:
183	retval = -EIO;
184 err:
185	if (i2c_debug)
186		printk(" ERR: %d\n",retval);
187	return retval;
188}
189
190static int
191bttv_i2c_readbytes(struct bttv *btv, const struct i2c_msg *msg, int last)
192{
193	u32 xmit;
194	u32 cnt;
195	int retval;
196
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;
203		if (cnt)
204			xmit |= BT878_I2C_NOSTART;
205		btwrite(xmit, BT848_I2C);
206		retval = bttv_i2c_wait_done(btv);
207		if (retval < 0)
208			goto err;
209		if (retval == 0)
210			goto eio;
211		msg->buf[cnt] = ((u32)btread(BT848_I2C) >> 8) & 0xff;
212		if (i2c_debug) {
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))
217				printk(" >\n");
218		}
219	}
220	return msg->len;
221
222 eio:
223	retval = -EIO;
224 err:
225	if (i2c_debug)
226		printk(" ERR: %d\n",retval);
227	return retval;
228}
229
230static int bttv_i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num)
231{
232	struct v4l2_device *v4l2_dev = i2c_get_adapdata(i2c_adap);
233	struct bttv *btv = to_bttv(v4l2_dev);
234	int retval = 0;
235	int i;
236
237	if (i2c_debug)
238		printk("bt-i2c:");
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) {
242			/* read */
243			retval = bttv_i2c_readbytes(btv, &msgs[i], i+1 == num);
244			if (retval < 0)
245				goto err;
246		} else {
247			/* write */
248			retval = bttv_i2c_sendbytes(btv, &msgs[i], i+1 == num);
249			if (retval < 0)
250				goto err;
251		}
252	}
253	return num;
254
255 err:
256	return retval;
257}
258
259static const struct i2c_algorithm bttv_algo = {
260	.master_xfer   = bttv_i2c_xfer,
261	.functionality = functionality,
262};
263
264/* ----------------------------------------------------------------------- */
265/* I2C functions - common stuff                                            */
266
267/* read I2C */
268int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for)
269{
270	unsigned char buffer = 0;
271
272	if (0 != btv->i2c_rc)
273		return -1;
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) {
280			if (bttv_verbose)
281				printk("not found\n");
282		} else
283			printk(KERN_WARNING "bttv%d: i2c read 0x%x: error\n",
284			       btv->c.nr,addr);
285		return -1;
286	}
287	if (bttv_verbose && NULL != probe_for)
288		printk("found\n");
289	return buffer;
290}
291
292/* write I2C */
293int bttv_I2CWrite(struct bttv *btv, unsigned char addr, unsigned char b1,
294		    unsigned char b2, int both)
295{
296	unsigned char buffer[2];
297	int bytes = both ? 2 : 1;
298
299	if (0 != btv->i2c_rc)
300		return -1;
301	btv->i2c_client.addr = addr >> 1;
302	buffer[0] = b1;
303	buffer[1] = b2;
304	if (bytes != i2c_master_send(&btv->i2c_client, buffer, bytes))
305		return -1;
306	return 0;
307}
308
309/* read EEPROM content */
310void __devinit bttv_readee(struct bttv *btv, unsigned char *eedata, int addr)
311{
312	memset(eedata, 0, 256);
313	if (0 != btv->i2c_rc)
314		return;
315	btv->i2c_client.addr = addr >> 1;
316	tveeprom_read(&btv->i2c_client, eedata, 256);
317}
318
319static 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)",
327};
328
329static void do_i2c_scan(char *name, struct i2c_client *c)
330{
331	unsigned char buf;
332	int i,rc;
333
334	for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
335		c->addr = i;
336		rc = i2c_master_recv(c,&buf,0);
337		if (rc < 0)
338			continue;
339		printk("%s: i2c scan: found device @ 0x%x  [%s]\n",
340		       name, i << 1, i2c_devs[i] ? i2c_devs[i] : "???");
341	}
342}
343
344/* init + register i2c algo-bit adapter */
345int __devinit init_bttv_i2c(struct bttv *btv)
346{
347	strlcpy(btv->i2c_client.name, "bttv internal", I2C_NAME_SIZE);
348
349	if (i2c_hw)
350		btv->use_i2c_hw = 1;
351	if (btv->use_i2c_hw) {
352		/* bt878 */
353		strlcpy(btv->c.i2c_adap.name, "bt878",
354			sizeof(btv->c.i2c_adap.name));
355		btv->c.i2c_adap.algo = &bttv_algo;
356	} else {
357		/* bt848 */
358	/* Prevents usage of invalid delay values */
359		if (i2c_udelay<5)
360			i2c_udelay=5;
361
362		strlcpy(btv->c.i2c_adap.name, "bttv",
363			sizeof(btv->c.i2c_adap.name));
364		memcpy(&btv->i2c_algo, &bttv_i2c_algo_bit_template,
365		       sizeof(bttv_i2c_algo_bit_template));
366		btv->i2c_algo.udelay = i2c_udelay;
367		btv->i2c_algo.data = btv;
368		btv->c.i2c_adap.algo_data = &btv->i2c_algo;
369	}
370	btv->c.i2c_adap.owner = THIS_MODULE;
371
372	btv->c.i2c_adap.dev.parent = &btv->c.pci->dev;
373	snprintf(btv->c.i2c_adap.name, sizeof(btv->c.i2c_adap.name),
374		 "bt%d #%d [%s]", btv->id, btv->c.nr,
375		 btv->use_i2c_hw ? "hw" : "sw");
376
377	i2c_set_adapdata(&btv->c.i2c_adap, &btv->c.v4l2_dev);
378	btv->i2c_client.adapter = &btv->c.i2c_adap;
379
380
381	if (btv->use_i2c_hw) {
382		btv->i2c_rc = i2c_add_adapter(&btv->c.i2c_adap);
383	} else {
384		bttv_bit_setscl(btv,1);
385		bttv_bit_setsda(btv,1);
386		btv->i2c_rc = i2c_bit_add_bus(&btv->c.i2c_adap);
387	}
388	if (0 == btv->i2c_rc && i2c_scan)
389		do_i2c_scan(btv->c.v4l2_dev.name, &btv->i2c_client);
390
391	/* Instantiate the IR receiver device, if present */
392	if (0 == btv->i2c_rc) {
393		struct i2c_board_info info;
394		/* The external IR receiver is at i2c address 0x34 (0x35 for
395		   reads).  Future Hauppauge cards will have an internal
396		   receiver at 0x30 (0x31 for reads).  In theory, both can be
397		   fitted, and Hauppauge suggest an external overrides an
398		   internal.
399
400		   That's why we probe 0x1a (~0x34) first. CB
401		*/
402		const unsigned short addr_list[] = {
403			0x1a, 0x18, 0x4b, 0x64, 0x30, 0x71,
404			I2C_CLIENT_END
405		};
406
407		memset(&info, 0, sizeof(struct i2c_board_info));
408		strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
409		i2c_new_probed_device(&btv->c.i2c_adap, &info, addr_list);
410	}
411	return btv->i2c_rc;
412}
413
414int __devexit fini_bttv_i2c(struct bttv *btv)
415{
416	if (0 != btv->i2c_rc)
417		return 0;
418
419	return i2c_del_adapter(&btv->c.i2c_adap);
420}
421
422/*
423 * Local variables:
424 * c-basic-offset: 8
425 * End:
426 */
427