powerpc: use consistent types in mktree
[zen-stable.git] / drivers / media / video / bt8xx / bttv-i2c.c
blobebd1ee9dc871d222f6f918b8670aa407037e9777
1 /*
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>
34 #include "bttvp.h"
35 #include <media/v4l2-common.h>
36 #include <linux/jiffies.h>
37 #include <asm/io.h>
39 static int i2c_debug;
40 static int i2c_hw;
41 static int i2c_scan;
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;
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);
70 static void bttv_bit_setsda(void *data, int state)
72 struct bttv *btv = (struct bttv*)data;
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);
82 static int bttv_bit_getscl(void *data)
84 struct bttv *btv = (struct bttv*)data;
85 int state;
87 state = btread(BT848_I2C) & 0x02 ? 1 : 0;
88 return state;
91 static int bttv_bit_getsda(void *data)
93 struct bttv *btv = (struct bttv*)data;
94 int state;
96 state = btread(BT848_I2C) & 0x01;
97 return state;
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,
105 .udelay = 16,
106 .timeout = 200,
109 /* ----------------------------------------------------------------------- */
110 /* I2C functions - hardware i2c */
112 static u32 functionality(struct i2c_adapter *adap)
114 return I2C_FUNC_SMBUS_EMUL;
117 static int
118 bttv_i2c_wait_done(struct bttv *btv)
120 int rc = 0;
122 /* timeout */
123 if (wait_event_interruptible_timeout(btv->i2c_queue,
124 btv->i2c_done, msecs_to_jiffies(85)) == -ERESTARTSYS)
126 rc = -EIO;
128 if (btv->i2c_done & BT848_INT_RACK)
129 rc = 1;
130 btv->i2c_done = 0;
131 return rc;
134 #define I2C_HW (BT878_I2C_MODE | BT848_I2C_SYNC |\
135 BT848_I2C_SCL | BT848_I2C_SDA)
137 static int
138 bttv_i2c_sendbytes(struct bttv *btv, const struct i2c_msg *msg, int last)
140 u32 xmit;
141 int retval,cnt;
143 /* sanity checks */
144 if (0 == msg->len)
145 return -EINVAL;
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");
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");
180 return msg->len;
182 eio:
183 retval = -EIO;
184 err:
185 if (i2c_debug)
186 printk(" ERR: %d\n",retval);
187 return retval;
190 static int
191 bttv_i2c_readbytes(struct bttv *btv, const struct i2c_msg *msg, int last)
193 u32 xmit;
194 u32 cnt;
195 int retval;
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");
220 return msg->len;
222 eio:
223 retval = -EIO;
224 err:
225 if (i2c_debug)
226 printk(" ERR: %d\n",retval);
227 return 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);
234 int retval = 0;
235 int i;
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;
253 return num;
255 err:
256 return retval;
259 static const struct i2c_algorithm bttv_algo = {
260 .master_xfer = bttv_i2c_xfer,
261 .functionality = functionality,
264 /* ----------------------------------------------------------------------- */
265 /* I2C functions - common stuff */
267 /* read I2C */
268 int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for)
270 unsigned char buffer = 0;
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;
287 if (bttv_verbose && NULL != probe_for)
288 printk("found\n");
289 return buffer;
292 /* write I2C */
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)
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;
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)
314 return;
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)
331 unsigned char buf;
332 int i,rc;
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] : "???");
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);
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.id = I2C_HW_B_BT848; /* FIXME */
356 btv->c.i2c_adap.algo = &bttv_algo;
357 } else {
358 /* bt848 */
359 /* Prevents usage of invalid delay values */
360 if (i2c_udelay<5)
361 i2c_udelay=5;
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);
385 } else {
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
400 internal.
402 That's why we probe 0x1a (~0x34) first. CB
404 const unsigned short addr_list[] = {
405 0x1a, 0x18, 0x4b, 0x64, 0x30,
406 I2C_CLIENT_END
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);
413 return btv->i2c_rc;
416 int __devexit fini_bttv_i2c(struct bttv *btv)
418 if (0 != btv->i2c_rc)
419 return 0;
421 return i2c_del_adapter(&btv->c.i2c_adap);
425 * Local variables:
426 * c-basic-offset: 8
427 * End: