Merge branch 'oprofile-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / drivers / media / video / bt8xx / bttv-i2c.c
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
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");
49
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.");
54
55 /* ----------------------------------------------------------------------- */
56 /* I2C functions - bitbanging adapter (software i2c)                       */
57
58 static 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
70 static 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
82 static 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
91 static 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
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,
107 };
108
109 /* ----------------------------------------------------------------------- */
110 /* I2C functions - hardware i2c                                            */
111
112 static u32 functionality(struct i2c_adapter *adap)
113 {
114         return I2C_FUNC_SMBUS_EMUL;
115 }
116
117 static int
118 bttv_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
137 static int
138 bttv_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
190 static int
191 bttv_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
230 static 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
259 static 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 */
268 int 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 */
293 int 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 */
310 void __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
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)",
327 };
328
329 static 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 */
345 int __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.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;
362
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;
371         }
372         btv->c.i2c_adap.owner = THIS_MODULE;
373
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");
378
379         i2c_set_adapdata(&btv->c.i2c_adap, &btv->c.v4l2_dev);
380         btv->i2c_client.adapter = &btv->c.i2c_adap;
381
382
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);
389         }
390         if (0 == btv->i2c_rc && i2c_scan)
391                 do_i2c_scan(btv->c.v4l2_dev.name, &btv->i2c_client);
392
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.
401
402                    That's why we probe 0x1a (~0x34) first. CB
403                 */
404                 const unsigned short addr_list[] = {
405                         0x1a, 0x18, 0x4b, 0x64, 0x30,
406                         I2C_CLIENT_END
407                 };
408
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);
412         }
413         return btv->i2c_rc;
414 }
415
416 int __devexit fini_bttv_i2c(struct bttv *btv)
417 {
418         if (0 != btv->i2c_rc)
419                 return 0;
420
421         return i2c_del_adapter(&btv->c.i2c_adap);
422 }
423
424 /*
425  * Local variables:
426  * c-basic-offset: 8
427  * End:
428  */