Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
[deliverable/linux.git] / drivers / media / video / zoran_card.c
1 /*
2 * Zoran zr36057/zr36067 PCI controller driver, for the
3 * Pinnacle/Miro DC10/DC10+/DC30/DC30+, Iomega Buz, Linux
4 * Media Labs LML33/LML33R10.
5 *
6 * This part handles card-specific data and detection
7 *
8 * Copyright (C) 2000 Serguei Miridonov <mirsev@cicese.mx>
9 *
10 * Currently maintained by:
11 * Ronald Bultje <rbultje@ronald.bitfreak.net>
12 * Laurent Pinchart <laurent.pinchart@skynet.be>
13 * Mailinglist <mjpeg-users@lists.sf.net>
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
19 *
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28 */
29
30 #include <linux/config.h>
31 #include <linux/types.h>
32 #include <linux/kernel.h>
33 #include <linux/module.h>
34 #include <linux/init.h>
35 #include <linux/vmalloc.h>
36
37 #include <linux/proc_fs.h>
38 #include <linux/i2c.h>
39 #include <linux/i2c-algo-bit.h>
40 #include <linux/videodev.h>
41 #include <linux/spinlock.h>
42 #include <linux/sem.h>
43 #include <linux/kmod.h>
44 #include <linux/wait.h>
45
46 #include <linux/pci.h>
47 #include <linux/interrupt.h>
48 #include <linux/video_decoder.h>
49 #include <linux/video_encoder.h>
50
51 #include <asm/io.h>
52
53 #include "videocodec.h"
54 #include "zoran.h"
55 #include "zoran_card.h"
56 #include "zoran_device.h"
57 #include "zoran_procfs.h"
58
59 #define I2C_NAME(x) (x)->name
60
61 extern const struct zoran_format zoran_formats[];
62
63 static int card[BUZ_MAX] = { -1, -1, -1, -1 };
64 module_param_array(card, int, NULL, 0);
65 MODULE_PARM_DESC(card, "The type of card");
66
67 static int encoder[BUZ_MAX] = { -1, -1, -1, -1 };
68 module_param_array(encoder, int, NULL, 0);
69 MODULE_PARM_DESC(encoder, "i2c TV encoder");
70
71 static int decoder[BUZ_MAX] = { -1, -1, -1, -1 };
72 module_param_array(decoder, int, NULL, 0);
73 MODULE_PARM_DESC(decoder, "i2c TV decoder");
74
75 /*
76 The video mem address of the video card.
77 The driver has a little database for some videocards
78 to determine it from there. If your video card is not in there
79 you have either to give it to the driver as a parameter
80 or set in in a VIDIOCSFBUF ioctl
81 */
82
83 static unsigned long vidmem = 0; /* Video memory base address */
84 module_param(vidmem, ulong, 0);
85
86 /*
87 Default input and video norm at startup of the driver.
88 */
89
90 static int default_input = 0; /* 0=Composite, 1=S-Video */
91 module_param(default_input, int, 0);
92 MODULE_PARM_DESC(default_input,
93 "Default input (0=Composite, 1=S-Video, 2=Internal)");
94
95 static int default_norm = 0; /* 0=PAL, 1=NTSC 2=SECAM */
96 module_param(default_norm, int, 0);
97 MODULE_PARM_DESC(default_norm, "Default norm (0=PAL, 1=NTSC, 2=SECAM)");
98
99 static int video_nr = -1; /* /dev/videoN, -1 for autodetect */
100 module_param(video_nr, int, 0);
101 MODULE_PARM_DESC(video_nr, "video device number");
102
103 /*
104 Number and size of grab buffers for Video 4 Linux
105 The vast majority of applications should not need more than 2,
106 the very popular BTTV driver actually does ONLY have 2.
107 Time sensitive applications might need more, the maximum
108 is VIDEO_MAX_FRAME (defined in <linux/videodev.h>).
109
110 The size is set so that the maximum possible request
111 can be satisfied. Decrease it, if bigphys_area alloc'd
112 memory is low. If you don't have the bigphys_area patch,
113 set it to 128 KB. Will you allow only to grab small
114 images with V4L, but that's better than nothing.
115
116 v4l_bufsize has to be given in KB !
117
118 */
119
120 int v4l_nbufs = 2;
121 int v4l_bufsize = 128; /* Everybody should be able to work with this setting */
122 module_param(v4l_nbufs, int, 0);
123 MODULE_PARM_DESC(v4l_nbufs, "Maximum number of V4L buffers to use");
124 module_param(v4l_bufsize, int, 0);
125 MODULE_PARM_DESC(v4l_bufsize, "Maximum size per V4L buffer (in kB)");
126
127 int jpg_nbufs = 32;
128 int jpg_bufsize = 512; /* max size for 100% quality full-PAL frame */
129 module_param(jpg_nbufs, int, 0);
130 MODULE_PARM_DESC(jpg_nbufs, "Maximum number of JPG buffers to use");
131 module_param(jpg_bufsize, int, 0);
132 MODULE_PARM_DESC(jpg_bufsize, "Maximum size per JPG buffer (in kB)");
133
134 int pass_through = 0; /* 1=Pass through TV signal when device is not used */
135 /* 0=Show color bar when device is not used (LML33: only if lml33dpath=1) */
136 module_param(pass_through, int, 0);
137 MODULE_PARM_DESC(pass_through,
138 "Pass TV signal through to TV-out when idling");
139
140 static int debug = 1;
141 int *zr_debug = &debug;
142 module_param(debug, int, 0);
143 MODULE_PARM_DESC(debug, "Debug level (0-4)");
144
145 MODULE_DESCRIPTION("Zoran-36057/36067 JPEG codec driver");
146 MODULE_AUTHOR("Serguei Miridonov");
147 MODULE_LICENSE("GPL");
148
149 static struct pci_device_id zr36067_pci_tbl[] = {
150 {PCI_VENDOR_ID_ZORAN, PCI_DEVICE_ID_ZORAN_36057,
151 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
152 {0}
153 };
154 MODULE_DEVICE_TABLE(pci, zr36067_pci_tbl);
155
156 #define dprintk(num, format, args...) \
157 do { \
158 if (*zr_debug >= num) \
159 printk(format, ##args); \
160 } while (0)
161
162 int zoran_num; /* number of Buzs in use */
163 struct zoran zoran[BUZ_MAX];
164
165 /* videocodec bus functions ZR36060 */
166 static u32
167 zr36060_read (struct videocodec *codec,
168 u16 reg)
169 {
170 struct zoran *zr = (struct zoran *) codec->master_data->data;
171 __u32 data;
172
173 if (post_office_wait(zr)
174 || post_office_write(zr, 0, 1, reg >> 8)
175 || post_office_write(zr, 0, 2, reg & 0xff)) {
176 return -1;
177 }
178
179 data = post_office_read(zr, 0, 3) & 0xff;
180 return data;
181 }
182
183 static void
184 zr36060_write (struct videocodec *codec,
185 u16 reg,
186 u32 val)
187 {
188 struct zoran *zr = (struct zoran *) codec->master_data->data;
189
190 if (post_office_wait(zr)
191 || post_office_write(zr, 0, 1, reg >> 8)
192 || post_office_write(zr, 0, 2, reg & 0xff)) {
193 return;
194 }
195
196 post_office_write(zr, 0, 3, val & 0xff);
197 }
198
199 /* videocodec bus functions ZR36050 */
200 static u32
201 zr36050_read (struct videocodec *codec,
202 u16 reg)
203 {
204 struct zoran *zr = (struct zoran *) codec->master_data->data;
205 __u32 data;
206
207 if (post_office_wait(zr)
208 || post_office_write(zr, 1, 0, reg >> 2)) { // reg. HIGHBYTES
209 return -1;
210 }
211
212 data = post_office_read(zr, 0, reg & 0x03) & 0xff; // reg. LOWBYTES + read
213 return data;
214 }
215
216 static void
217 zr36050_write (struct videocodec *codec,
218 u16 reg,
219 u32 val)
220 {
221 struct zoran *zr = (struct zoran *) codec->master_data->data;
222
223 if (post_office_wait(zr)
224 || post_office_write(zr, 1, 0, reg >> 2)) { // reg. HIGHBYTES
225 return;
226 }
227
228 post_office_write(zr, 0, reg & 0x03, val & 0xff); // reg. LOWBYTES + wr. data
229 }
230
231 /* videocodec bus functions ZR36016 */
232 static u32
233 zr36016_read (struct videocodec *codec,
234 u16 reg)
235 {
236 struct zoran *zr = (struct zoran *) codec->master_data->data;
237 __u32 data;
238
239 if (post_office_wait(zr)) {
240 return -1;
241 }
242
243 data = post_office_read(zr, 2, reg & 0x03) & 0xff; // read
244 return data;
245 }
246
247 /* hack for in zoran_device.c */
248 void
249 zr36016_write (struct videocodec *codec,
250 u16 reg,
251 u32 val)
252 {
253 struct zoran *zr = (struct zoran *) codec->master_data->data;
254
255 if (post_office_wait(zr)) {
256 return;
257 }
258
259 post_office_write(zr, 2, reg & 0x03, val & 0x0ff); // wr. data
260 }
261
262 /*
263 * Board specific information
264 */
265
266 static void
267 dc10_init (struct zoran *zr)
268 {
269 dprintk(3, KERN_DEBUG "%s: dc10_init()\n", ZR_DEVNAME(zr));
270
271 /* Pixel clock selection */
272 GPIO(zr, 4, 0);
273 GPIO(zr, 5, 1);
274 /* Enable the video bus sync signals */
275 GPIO(zr, 7, 0);
276 }
277
278 static void
279 dc10plus_init (struct zoran *zr)
280 {
281 dprintk(3, KERN_DEBUG "%s: dc10plus_init()\n", ZR_DEVNAME(zr));
282 }
283
284 static void
285 buz_init (struct zoran *zr)
286 {
287 dprintk(3, KERN_DEBUG "%s: buz_init()\n", ZR_DEVNAME(zr));
288
289 /* some stuff from Iomega */
290 pci_write_config_dword(zr->pci_dev, 0xfc, 0x90680f15);
291 pci_write_config_dword(zr->pci_dev, 0x0c, 0x00012020);
292 pci_write_config_dword(zr->pci_dev, 0xe8, 0xc0200000);
293 }
294
295 static void
296 lml33_init (struct zoran *zr)
297 {
298 dprintk(3, KERN_DEBUG "%s: lml33_init()\n", ZR_DEVNAME(zr));
299
300 GPIO(zr, 2, 1); // Set Composite input/output
301 }
302
303 static char *
304 i2cid_to_modulename (u16 i2c_id)
305 {
306 char *name = NULL;
307
308 switch (i2c_id) {
309 case I2C_DRIVERID_SAA7110:
310 name = "saa7110";
311 break;
312 case I2C_DRIVERID_SAA7111A:
313 name = "saa7111";
314 break;
315 case I2C_DRIVERID_SAA7114:
316 name = "saa7114";
317 break;
318 case I2C_DRIVERID_SAA7185B:
319 name = "saa7185";
320 break;
321 case I2C_DRIVERID_ADV7170:
322 name = "adv7170";
323 break;
324 case I2C_DRIVERID_ADV7175:
325 name = "adv7175";
326 break;
327 case I2C_DRIVERID_BT819:
328 name = "bt819";
329 break;
330 case I2C_DRIVERID_BT856:
331 name = "bt856";
332 break;
333 case I2C_DRIVERID_VPX3220:
334 name = "vpx3220";
335 break;
336 /* case I2C_DRIVERID_VPX3224:
337 name = "vpx3224";
338 break;
339 case I2C_DRIVERID_MSE3000:
340 name = "mse3000";
341 break;*/
342 default:
343 break;
344 }
345
346 return name;
347 }
348
349 static char *
350 codecid_to_modulename (u16 codecid)
351 {
352 char *name = NULL;
353
354 switch (codecid) {
355 case CODEC_TYPE_ZR36060:
356 name = "zr36060";
357 break;
358 case CODEC_TYPE_ZR36050:
359 name = "zr36050";
360 break;
361 case CODEC_TYPE_ZR36016:
362 name = "zr36016";
363 break;
364 default:
365 break;
366 }
367
368 return name;
369 }
370
371 // struct tvnorm {
372 // u16 Wt, Wa, HStart, HSyncStart, Ht, Ha, VStart;
373 // };
374
375 static struct tvnorm f50sqpixel = { 944, 768, 83, 880, 625, 576, 16 };
376 static struct tvnorm f60sqpixel = { 780, 640, 51, 716, 525, 480, 12 };
377 static struct tvnorm f50ccir601 = { 864, 720, 75, 804, 625, 576, 18 };
378 static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 16 };
379
380 static struct tvnorm f50ccir601_lml33 = { 864, 720, 75+34, 804, 625, 576, 18 };
381 static struct tvnorm f60ccir601_lml33 = { 858, 720, 57+34, 788, 525, 480, 16 };
382
383 /* The DC10 (57/16/50) uses VActive as HSync, so HStart must be 0 */
384 static struct tvnorm f50sqpixel_dc10 = { 944, 768, 0, 880, 625, 576, 0 };
385 static struct tvnorm f60sqpixel_dc10 = { 780, 640, 0, 716, 525, 480, 12 };
386
387 /* FIXME: I cannot swap U and V in saa7114, so i do one
388 * pixel left shift in zoran (75 -> 74)
389 * (Maxim Yevtyushkin <max@linuxmedialabs.com>) */
390 static struct tvnorm f50ccir601_lm33r10 = { 864, 720, 74+54, 804, 625, 576, 18 };
391 static struct tvnorm f60ccir601_lm33r10 = { 858, 720, 56+54, 788, 525, 480, 16 };
392
393 static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
394 {
395 .type = DC10_old,
396 .name = "DC10(old)",
397 .i2c_decoder = I2C_DRIVERID_VPX3220,
398 /*.i2c_encoder = I2C_DRIVERID_MSE3000,*/
399 .video_codec = CODEC_TYPE_ZR36050,
400 .video_vfe = CODEC_TYPE_ZR36016,
401
402 .inputs = 3,
403 .input = {
404 { 1, "Composite" },
405 { 2, "S-Video" },
406 { 0, "Internal/comp" }
407 },
408 .norms = 3,
409 .tvn = {
410 &f50sqpixel_dc10,
411 &f60sqpixel_dc10,
412 &f50sqpixel_dc10
413 },
414 .jpeg_int = 0,
415 .vsync_int = ZR36057_ISR_GIRQ1,
416 .gpio = { 2, 1, -1, 3, 7, 0, 4, 5 },
417 .gpio_pol = { 0, 0, 0, 1, 0, 0, 0, 0 },
418 .gpcs = { -1, 0 },
419 .vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
420 .gws_not_connected = 0,
421 .init = &dc10_init,
422 }, {
423 .type = DC10_new,
424 .name = "DC10(new)",
425 .i2c_decoder = I2C_DRIVERID_SAA7110,
426 .i2c_encoder = I2C_DRIVERID_ADV7175,
427 .video_codec = CODEC_TYPE_ZR36060,
428
429 .inputs = 3,
430 .input = {
431 { 0, "Composite" },
432 { 7, "S-Video" },
433 { 5, "Internal/comp" }
434 },
435 .norms = 3,
436 .tvn = {
437 &f50sqpixel,
438 &f60sqpixel,
439 &f50sqpixel},
440 .jpeg_int = ZR36057_ISR_GIRQ0,
441 .vsync_int = ZR36057_ISR_GIRQ1,
442 .gpio = { 3, 0, 6, 1, 2, -1, 4, 5 },
443 .gpio_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
444 .gpcs = { -1, 1},
445 .vfe_pol = { 1, 1, 1, 1, 0, 0, 0, 0 },
446 .gws_not_connected = 0,
447 .init = &dc10plus_init,
448 }, {
449 .type = DC10plus,
450 .name = "DC10plus",
451 .vendor_id = PCI_VENDOR_ID_MIRO,
452 .device_id = PCI_DEVICE_ID_MIRO_DC10PLUS,
453 .i2c_decoder = I2C_DRIVERID_SAA7110,
454 .i2c_encoder = I2C_DRIVERID_ADV7175,
455 .video_codec = CODEC_TYPE_ZR36060,
456
457 .inputs = 3,
458 .input = {
459 { 0, "Composite" },
460 { 7, "S-Video" },
461 { 5, "Internal/comp" }
462 },
463 .norms = 3,
464 .tvn = {
465 &f50sqpixel,
466 &f60sqpixel,
467 &f50sqpixel
468 },
469 .jpeg_int = ZR36057_ISR_GIRQ0,
470 .vsync_int = ZR36057_ISR_GIRQ1,
471 .gpio = { 3, 0, 6, 1, 2, -1, 4, 5 },
472 .gpio_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
473 .gpcs = { -1, 1 },
474 .vfe_pol = { 1, 1, 1, 1, 0, 0, 0, 0 },
475 .gws_not_connected = 0,
476 .init = &dc10plus_init,
477 }, {
478 .type = DC30,
479 .name = "DC30",
480 .i2c_decoder = I2C_DRIVERID_VPX3220,
481 .i2c_encoder = I2C_DRIVERID_ADV7175,
482 .video_codec = CODEC_TYPE_ZR36050,
483 .video_vfe = CODEC_TYPE_ZR36016,
484
485 .inputs = 3,
486 .input = {
487 { 1, "Composite" },
488 { 2, "S-Video" },
489 { 0, "Internal/comp" }
490 },
491 .norms = 3,
492 .tvn = {
493 &f50sqpixel_dc10,
494 &f60sqpixel_dc10,
495 &f50sqpixel_dc10
496 },
497 .jpeg_int = 0,
498 .vsync_int = ZR36057_ISR_GIRQ1,
499 .gpio = { 2, 1, -1, 3, 7, 0, 4, 5 },
500 .gpio_pol = { 0, 0, 0, 1, 0, 0, 0, 0 },
501 .gpcs = { -1, 0 },
502 .vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
503 .gws_not_connected = 0,
504 .init = &dc10_init,
505 }, {
506 .type = DC30plus,
507 .name = "DC30plus",
508 .vendor_id = PCI_VENDOR_ID_MIRO,
509 .device_id = PCI_DEVICE_ID_MIRO_DC30PLUS,
510 .i2c_decoder = I2C_DRIVERID_VPX3220,
511 .i2c_encoder = I2C_DRIVERID_ADV7175,
512 .video_codec = CODEC_TYPE_ZR36050,
513 .video_vfe = CODEC_TYPE_ZR36016,
514
515 .inputs = 3,
516 .input = {
517 { 1, "Composite" },
518 { 2, "S-Video" },
519 { 0, "Internal/comp" }
520 },
521 .norms = 3,
522 .tvn = {
523 &f50sqpixel_dc10,
524 &f60sqpixel_dc10,
525 &f50sqpixel_dc10
526 },
527 .jpeg_int = 0,
528 .vsync_int = ZR36057_ISR_GIRQ1,
529 .gpio = { 2, 1, -1, 3, 7, 0, 4, 5 },
530 .gpio_pol = { 0, 0, 0, 1, 0, 0, 0, 0 },
531 .gpcs = { -1, 0 },
532 .vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
533 .gws_not_connected = 0,
534 .init = &dc10_init,
535 }, {
536 .type = LML33,
537 .name = "LML33",
538 .i2c_decoder = I2C_DRIVERID_BT819,
539 .i2c_encoder = I2C_DRIVERID_BT856,
540 .video_codec = CODEC_TYPE_ZR36060,
541
542 .inputs = 2,
543 .input = {
544 { 0, "Composite" },
545 { 7, "S-Video" }
546 },
547 .norms = 2,
548 .tvn = {
549 &f50ccir601_lml33,
550 &f60ccir601_lml33,
551 NULL
552 },
553 .jpeg_int = ZR36057_ISR_GIRQ1,
554 .vsync_int = ZR36057_ISR_GIRQ0,
555 .gpio = { 1, -1, 3, 5, 7, -1, -1, -1 },
556 .gpio_pol = { 0, 0, 0, 0, 1, 0, 0, 0 },
557 .gpcs = { 3, 1 },
558 .vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 },
559 .gws_not_connected = 1,
560 .init = &lml33_init,
561 }, {
562 .type = LML33R10,
563 .name = "LML33R10",
564 .vendor_id = PCI_VENDOR_ID_ELECTRONICDESIGNGMBH,
565 .device_id = PCI_DEVICE_ID_LML_33R10,
566 .i2c_decoder = I2C_DRIVERID_SAA7114,
567 .i2c_encoder = I2C_DRIVERID_ADV7170,
568 .video_codec = CODEC_TYPE_ZR36060,
569
570 .inputs = 2,
571 .input = {
572 { 0, "Composite" },
573 { 7, "S-Video" }
574 },
575 .norms = 2,
576 .tvn = {
577 &f50ccir601_lm33r10,
578 &f60ccir601_lm33r10,
579 NULL
580 },
581 .jpeg_int = ZR36057_ISR_GIRQ1,
582 .vsync_int = ZR36057_ISR_GIRQ0,
583 .gpio = { 1, -1, 3, 5, 7, -1, -1, -1 },
584 .gpio_pol = { 0, 0, 0, 0, 1, 0, 0, 0 },
585 .gpcs = { 3, 1 },
586 .vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 },
587 .gws_not_connected = 1,
588 .init = &lml33_init,
589 }, {
590 .type = BUZ,
591 .name = "Buz",
592 .vendor_id = PCI_VENDOR_ID_IOMEGA,
593 .device_id = PCI_DEVICE_ID_IOMEGA_BUZ,
594 .i2c_decoder = I2C_DRIVERID_SAA7111A,
595 .i2c_encoder = I2C_DRIVERID_SAA7185B,
596 .video_codec = CODEC_TYPE_ZR36060,
597
598 .inputs = 2,
599 .input = {
600 { 3, "Composite" },
601 { 7, "S-Video" }
602 },
603 .norms = 3,
604 .tvn = {
605 &f50ccir601,
606 &f60ccir601,
607 &f50ccir601
608 },
609 .jpeg_int = ZR36057_ISR_GIRQ1,
610 .vsync_int = ZR36057_ISR_GIRQ0,
611 .gpio = { 1, -1, 3, -1, -1, -1, -1, -1 },
612 .gpio_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
613 .gpcs = { 3, 1 },
614 .vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 },
615 .gws_not_connected = 1,
616 .init = &buz_init,
617 }
618 };
619
620 /*
621 * I2C functions
622 */
623 /* software I2C functions */
624 static int
625 zoran_i2c_getsda (void *data)
626 {
627 struct zoran *zr = (struct zoran *) data;
628
629 return (btread(ZR36057_I2CBR) >> 1) & 1;
630 }
631
632 static int
633 zoran_i2c_getscl (void *data)
634 {
635 struct zoran *zr = (struct zoran *) data;
636
637 return btread(ZR36057_I2CBR) & 1;
638 }
639
640 static void
641 zoran_i2c_setsda (void *data,
642 int state)
643 {
644 struct zoran *zr = (struct zoran *) data;
645
646 if (state)
647 zr->i2cbr |= 2;
648 else
649 zr->i2cbr &= ~2;
650 btwrite(zr->i2cbr, ZR36057_I2CBR);
651 }
652
653 static void
654 zoran_i2c_setscl (void *data,
655 int state)
656 {
657 struct zoran *zr = (struct zoran *) data;
658
659 if (state)
660 zr->i2cbr |= 1;
661 else
662 zr->i2cbr &= ~1;
663 btwrite(zr->i2cbr, ZR36057_I2CBR);
664 }
665
666 static int
667 zoran_i2c_client_register (struct i2c_client *client)
668 {
669 struct zoran *zr = (struct zoran *) i2c_get_adapdata(client->adapter);
670 int res = 0;
671
672 dprintk(2,
673 KERN_DEBUG "%s: i2c_client_register() - driver id = %d\n",
674 ZR_DEVNAME(zr), client->driver->id);
675
676 down(&zr->resource_lock);
677
678 if (zr->user > 0) {
679 /* we're already busy, so we keep a reference to
680 * them... Could do a lot of stuff here, but this
681 * is easiest. (Did I ever mention I'm a lazy ass?)
682 */
683 res = -EBUSY;
684 goto clientreg_unlock_and_return;
685 }
686
687 if (client->driver->id == zr->card.i2c_decoder)
688 zr->decoder = client;
689 else if (client->driver->id == zr->card.i2c_encoder)
690 zr->encoder = client;
691 else {
692 res = -ENODEV;
693 goto clientreg_unlock_and_return;
694 }
695
696 clientreg_unlock_and_return:
697 up(&zr->resource_lock);
698
699 return res;
700 }
701
702 static int
703 zoran_i2c_client_unregister (struct i2c_client *client)
704 {
705 struct zoran *zr = (struct zoran *) i2c_get_adapdata(client->adapter);
706 int res = 0;
707
708 dprintk(2, KERN_DEBUG "%s: i2c_client_unregister()\n", ZR_DEVNAME(zr));
709
710 down(&zr->resource_lock);
711
712 if (zr->user > 0) {
713 res = -EBUSY;
714 goto clientunreg_unlock_and_return;
715 }
716
717 /* try to locate it */
718 if (client == zr->encoder) {
719 zr->encoder = NULL;
720 } else if (client == zr->decoder) {
721 zr->decoder = NULL;
722 snprintf(ZR_DEVNAME(zr), sizeof(ZR_DEVNAME(zr)), "MJPEG[%d]", zr->id);
723 }
724 clientunreg_unlock_and_return:
725 up(&zr->resource_lock);
726 return res;
727 }
728
729 static struct i2c_algo_bit_data zoran_i2c_bit_data_template = {
730 .setsda = zoran_i2c_setsda,
731 .setscl = zoran_i2c_setscl,
732 .getsda = zoran_i2c_getsda,
733 .getscl = zoran_i2c_getscl,
734 .udelay = 10,
735 .mdelay = 0,
736 .timeout = 100,
737 };
738
739 static struct i2c_adapter zoran_i2c_adapter_template = {
740 .name = "zr36057",
741 .id = I2C_HW_B_ZR36067,
742 .algo = NULL,
743 .client_register = zoran_i2c_client_register,
744 .client_unregister = zoran_i2c_client_unregister,
745 };
746
747 static int
748 zoran_register_i2c (struct zoran *zr)
749 {
750 memcpy(&zr->i2c_algo, &zoran_i2c_bit_data_template,
751 sizeof(struct i2c_algo_bit_data));
752 zr->i2c_algo.data = zr;
753 memcpy(&zr->i2c_adapter, &zoran_i2c_adapter_template,
754 sizeof(struct i2c_adapter));
755 strncpy(I2C_NAME(&zr->i2c_adapter), ZR_DEVNAME(zr),
756 sizeof(I2C_NAME(&zr->i2c_adapter)) - 1);
757 i2c_set_adapdata(&zr->i2c_adapter, zr);
758 zr->i2c_adapter.algo_data = &zr->i2c_algo;
759 return i2c_bit_add_bus(&zr->i2c_adapter);
760 }
761
762 static void
763 zoran_unregister_i2c (struct zoran *zr)
764 {
765 i2c_bit_del_bus((&zr->i2c_adapter));
766 }
767
768 /* Check a zoran_params struct for correctness, insert default params */
769
770 int
771 zoran_check_jpg_settings (struct zoran *zr,
772 struct zoran_jpg_settings *settings)
773 {
774 int err = 0, err0 = 0;
775
776 dprintk(4,
777 KERN_DEBUG
778 "%s: check_jpg_settings() - dec: %d, Hdcm: %d, Vdcm: %d, Tdcm: %d\n",
779 ZR_DEVNAME(zr), settings->decimation, settings->HorDcm,
780 settings->VerDcm, settings->TmpDcm);
781 dprintk(4,
782 KERN_DEBUG
783 "%s: check_jpg_settings() - x: %d, y: %d, w: %d, y: %d\n",
784 ZR_DEVNAME(zr), settings->img_x, settings->img_y,
785 settings->img_width, settings->img_height);
786 /* Check decimation, set default values for decimation = 1, 2, 4 */
787 switch (settings->decimation) {
788 case 1:
789
790 settings->HorDcm = 1;
791 settings->VerDcm = 1;
792 settings->TmpDcm = 1;
793 settings->field_per_buff = 2;
794 settings->img_x = 0;
795 settings->img_y = 0;
796 settings->img_width = BUZ_MAX_WIDTH;
797 settings->img_height = BUZ_MAX_HEIGHT / 2;
798 break;
799 case 2:
800
801 settings->HorDcm = 2;
802 settings->VerDcm = 1;
803 settings->TmpDcm = 2;
804 settings->field_per_buff = 1;
805 settings->img_x = (BUZ_MAX_WIDTH == 720) ? 8 : 0;
806 settings->img_y = 0;
807 settings->img_width =
808 (BUZ_MAX_WIDTH == 720) ? 704 : BUZ_MAX_WIDTH;
809 settings->img_height = BUZ_MAX_HEIGHT / 2;
810 break;
811 case 4:
812
813 if (zr->card.type == DC10_new) {
814 dprintk(1,
815 KERN_DEBUG
816 "%s: check_jpg_settings() - HDec by 4 is not supported on the DC10\n",
817 ZR_DEVNAME(zr));
818 err0++;
819 break;
820 }
821
822 settings->HorDcm = 4;
823 settings->VerDcm = 2;
824 settings->TmpDcm = 2;
825 settings->field_per_buff = 1;
826 settings->img_x = (BUZ_MAX_WIDTH == 720) ? 8 : 0;
827 settings->img_y = 0;
828 settings->img_width =
829 (BUZ_MAX_WIDTH == 720) ? 704 : BUZ_MAX_WIDTH;
830 settings->img_height = BUZ_MAX_HEIGHT / 2;
831 break;
832 case 0:
833
834 /* We have to check the data the user has set */
835
836 if (settings->HorDcm != 1 && settings->HorDcm != 2 &&
837 (zr->card.type == DC10_new || settings->HorDcm != 4))
838 err0++;
839 if (settings->VerDcm != 1 && settings->VerDcm != 2)
840 err0++;
841 if (settings->TmpDcm != 1 && settings->TmpDcm != 2)
842 err0++;
843 if (settings->field_per_buff != 1 &&
844 settings->field_per_buff != 2)
845 err0++;
846 if (settings->img_x < 0)
847 err0++;
848 if (settings->img_y < 0)
849 err0++;
850 if (settings->img_width < 0)
851 err0++;
852 if (settings->img_height < 0)
853 err0++;
854 if (settings->img_x + settings->img_width > BUZ_MAX_WIDTH)
855 err0++;
856 if (settings->img_y + settings->img_height >
857 BUZ_MAX_HEIGHT / 2)
858 err0++;
859 if (settings->HorDcm && settings->VerDcm) {
860 if (settings->img_width %
861 (16 * settings->HorDcm) != 0)
862 err0++;
863 if (settings->img_height %
864 (8 * settings->VerDcm) != 0)
865 err0++;
866 }
867
868 if (err0) {
869 dprintk(1,
870 KERN_ERR
871 "%s: check_jpg_settings() - error in params for decimation = 0\n",
872 ZR_DEVNAME(zr));
873 err++;
874 }
875 break;
876 default:
877 dprintk(1,
878 KERN_ERR
879 "%s: check_jpg_settings() - decimation = %d, must be 0, 1, 2 or 4\n",
880 ZR_DEVNAME(zr), settings->decimation);
881 err++;
882 break;
883 }
884
885 if (settings->jpg_comp.quality > 100)
886 settings->jpg_comp.quality = 100;
887 if (settings->jpg_comp.quality < 5)
888 settings->jpg_comp.quality = 5;
889 if (settings->jpg_comp.APPn < 0)
890 settings->jpg_comp.APPn = 0;
891 if (settings->jpg_comp.APPn > 15)
892 settings->jpg_comp.APPn = 15;
893 if (settings->jpg_comp.APP_len < 0)
894 settings->jpg_comp.APP_len = 0;
895 if (settings->jpg_comp.APP_len > 60)
896 settings->jpg_comp.APP_len = 60;
897 if (settings->jpg_comp.COM_len < 0)
898 settings->jpg_comp.COM_len = 0;
899 if (settings->jpg_comp.COM_len > 60)
900 settings->jpg_comp.COM_len = 60;
901 if (err)
902 return -EINVAL;
903 return 0;
904 }
905
906 void
907 zoran_open_init_params (struct zoran *zr)
908 {
909 int i;
910
911 /* User must explicitly set a window */
912 zr->overlay_settings.is_set = 0;
913 zr->overlay_mask = NULL;
914 zr->overlay_active = ZORAN_FREE;
915
916 zr->v4l_memgrab_active = 0;
917 zr->v4l_overlay_active = 0;
918 zr->v4l_grab_frame = NO_GRAB_ACTIVE;
919 zr->v4l_grab_seq = 0;
920 zr->v4l_settings.width = 192;
921 zr->v4l_settings.height = 144;
922 zr->v4l_settings.format = &zoran_formats[4]; /* YUY2 - YUV-4:2:2 packed */
923 zr->v4l_settings.bytesperline =
924 zr->v4l_settings.width *
925 ((zr->v4l_settings.format->depth + 7) / 8);
926
927 /* DMA ring stuff for V4L */
928 zr->v4l_pend_tail = 0;
929 zr->v4l_pend_head = 0;
930 zr->v4l_sync_tail = 0;
931 zr->v4l_buffers.active = ZORAN_FREE;
932 for (i = 0; i < VIDEO_MAX_FRAME; i++) {
933 zr->v4l_buffers.buffer[i].state = BUZ_STATE_USER; /* nothing going on */
934 }
935 zr->v4l_buffers.allocated = 0;
936
937 for (i = 0; i < BUZ_MAX_FRAME; i++) {
938 zr->jpg_buffers.buffer[i].state = BUZ_STATE_USER; /* nothing going on */
939 }
940 zr->jpg_buffers.active = ZORAN_FREE;
941 zr->jpg_buffers.allocated = 0;
942 /* Set necessary params and call zoran_check_jpg_settings to set the defaults */
943 zr->jpg_settings.decimation = 1;
944 zr->jpg_settings.jpg_comp.quality = 50; /* default compression factor 8 */
945 if (zr->card.type != BUZ)
946 zr->jpg_settings.odd_even = 1;
947 else
948 zr->jpg_settings.odd_even = 0;
949 zr->jpg_settings.jpg_comp.APPn = 0;
950 zr->jpg_settings.jpg_comp.APP_len = 0; /* No APPn marker */
951 memset(zr->jpg_settings.jpg_comp.APP_data, 0,
952 sizeof(zr->jpg_settings.jpg_comp.APP_data));
953 zr->jpg_settings.jpg_comp.COM_len = 0; /* No COM marker */
954 memset(zr->jpg_settings.jpg_comp.COM_data, 0,
955 sizeof(zr->jpg_settings.jpg_comp.COM_data));
956 zr->jpg_settings.jpg_comp.jpeg_markers =
957 JPEG_MARKER_DHT | JPEG_MARKER_DQT;
958 i = zoran_check_jpg_settings(zr, &zr->jpg_settings);
959 if (i)
960 dprintk(1,
961 KERN_ERR
962 "%s: zoran_open_init_params() internal error\n",
963 ZR_DEVNAME(zr));
964
965 clear_interrupt_counters(zr);
966 zr->testing = 0;
967 }
968
969 static void __devinit
970 test_interrupts (struct zoran *zr)
971 {
972 DEFINE_WAIT(wait);
973 int timeout, icr;
974
975 clear_interrupt_counters(zr);
976
977 zr->testing = 1;
978 icr = btread(ZR36057_ICR);
979 btwrite(0x78000000 | ZR36057_ICR_IntPinEn, ZR36057_ICR);
980 prepare_to_wait(&zr->test_q, &wait, TASK_INTERRUPTIBLE);
981 timeout = schedule_timeout(HZ);
982 finish_wait(&zr->test_q, &wait);
983 btwrite(0, ZR36057_ICR);
984 btwrite(0x78000000, ZR36057_ISR);
985 zr->testing = 0;
986 dprintk(5, KERN_INFO "%s: Testing interrupts...\n", ZR_DEVNAME(zr));
987 if (timeout) {
988 dprintk(1, ": time spent: %d\n", 1 * HZ - timeout);
989 }
990 if (*zr_debug > 1)
991 print_interrupts(zr);
992 btwrite(icr, ZR36057_ICR);
993 }
994
995 static int __devinit
996 zr36057_init (struct zoran *zr)
997 {
998 unsigned long mem;
999 void *vdev;
1000 unsigned mem_needed;
1001 int j;
1002 int two = 2;
1003 int zero = 0;
1004
1005 dprintk(1,
1006 KERN_INFO
1007 "%s: zr36057_init() - initializing card[%d], zr=%p\n",
1008 ZR_DEVNAME(zr), zr->id, zr);
1009
1010 /* default setup of all parameters which will persist between opens */
1011 zr->user = 0;
1012
1013 init_waitqueue_head(&zr->v4l_capq);
1014 init_waitqueue_head(&zr->jpg_capq);
1015 init_waitqueue_head(&zr->test_q);
1016 zr->jpg_buffers.allocated = 0;
1017 zr->v4l_buffers.allocated = 0;
1018
1019 zr->buffer.base = (void *) vidmem;
1020 zr->buffer.width = 0;
1021 zr->buffer.height = 0;
1022 zr->buffer.depth = 0;
1023 zr->buffer.bytesperline = 0;
1024
1025 /* Avoid nonsense settings from user for default input/norm */
1026 if (default_norm < VIDEO_MODE_PAL &&
1027 default_norm > VIDEO_MODE_SECAM)
1028 default_norm = VIDEO_MODE_PAL;
1029 zr->norm = default_norm;
1030 if (!(zr->timing = zr->card.tvn[zr->norm])) {
1031 dprintk(1,
1032 KERN_WARNING
1033 "%s: zr36057_init() - default TV standard not supported by hardware. PAL will be used.\n",
1034 ZR_DEVNAME(zr));
1035 zr->norm = VIDEO_MODE_PAL;
1036 zr->timing = zr->card.tvn[zr->norm];
1037 }
1038
1039 zr->input = default_input = (default_input ? 1 : 0);
1040
1041 /* Should the following be reset at every open ? */
1042 zr->hue = 32768;
1043 zr->contrast = 32768;
1044 zr->saturation = 32768;
1045 zr->brightness = 32768;
1046
1047 /* default setup (will be repeated at every open) */
1048 zoran_open_init_params(zr);
1049
1050 /* allocate memory *before* doing anything to the hardware
1051 * in case allocation fails */
1052 mem_needed = BUZ_NUM_STAT_COM * 4;
1053 mem = kzalloc(mem_needed, GFP_KERNEL);
1054 vdev = (void *) kmalloc(sizeof(struct video_device), GFP_KERNEL);
1055 if (!mem || !vdev) {
1056 dprintk(1,
1057 KERN_ERR
1058 "%s: zr36057_init() - kmalloc (STAT_COM) failed\n",
1059 ZR_DEVNAME(zr));
1060 kfree(vdev);
1061 kfree((void *)mem);
1062 return -ENOMEM;
1063 }
1064 zr->stat_com = (u32 *) mem;
1065 for (j = 0; j < BUZ_NUM_STAT_COM; j++) {
1066 zr->stat_com[j] = 1; /* mark as unavailable to zr36057 */
1067 }
1068
1069 /*
1070 * Now add the template and register the device unit.
1071 */
1072 zr->video_dev = vdev;
1073 memcpy(zr->video_dev, &zoran_template, sizeof(zoran_template));
1074 strcpy(zr->video_dev->name, ZR_DEVNAME(zr));
1075 if (video_register_device(zr->video_dev, VFL_TYPE_GRABBER,
1076 video_nr) < 0) {
1077 zoran_unregister_i2c(zr);
1078 kfree((void *) zr->stat_com);
1079 kfree(vdev);
1080 return -1;
1081 }
1082
1083 zoran_init_hardware(zr);
1084 if (*zr_debug > 2)
1085 detect_guest_activity(zr);
1086 test_interrupts(zr);
1087 if (!pass_through) {
1088 decoder_command(zr, DECODER_ENABLE_OUTPUT, &zero);
1089 encoder_command(zr, ENCODER_SET_INPUT, &two);
1090 }
1091
1092 zr->zoran_proc = NULL;
1093 zr->initialized = 1;
1094 return 0;
1095 }
1096
1097 static void
1098 zoran_release (struct zoran *zr)
1099 {
1100 if (!zr->initialized)
1101 return;
1102 /* unregister videocodec bus */
1103 if (zr->codec) {
1104 struct videocodec_master *master = zr->codec->master_data;
1105
1106 videocodec_detach(zr->codec);
1107 kfree(master);
1108 }
1109 if (zr->vfe) {
1110 struct videocodec_master *master = zr->vfe->master_data;
1111
1112 videocodec_detach(zr->vfe);
1113 kfree(master);
1114 }
1115
1116 /* unregister i2c bus */
1117 zoran_unregister_i2c(zr);
1118 /* disable PCI bus-mastering */
1119 zoran_set_pci_master(zr, 0);
1120 /* put chip into reset */
1121 btwrite(0, ZR36057_SPGPPCR);
1122 free_irq(zr->pci_dev->irq, zr);
1123 /* unmap and free memory */
1124 kfree((void *) zr->stat_com);
1125 zoran_proc_cleanup(zr);
1126 iounmap(zr->zr36057_mem);
1127 pci_disable_device(zr->pci_dev);
1128 video_unregister_device(zr->video_dev);
1129 }
1130
1131 void
1132 zoran_vdev_release (struct video_device *vdev)
1133 {
1134 kfree(vdev);
1135 }
1136
1137 static struct videocodec_master * __devinit
1138 zoran_setup_videocodec (struct zoran *zr,
1139 int type)
1140 {
1141 struct videocodec_master *m = NULL;
1142
1143 m = kmalloc(sizeof(struct videocodec_master), GFP_KERNEL);
1144 if (!m) {
1145 dprintk(1,
1146 KERN_ERR
1147 "%s: zoran_setup_videocodec() - no memory\n",
1148 ZR_DEVNAME(zr));
1149 return m;
1150 }
1151
1152 m->magic = 0L; /* magic not used */
1153 m->type = VID_HARDWARE_ZR36067;
1154 m->flags = CODEC_FLAG_ENCODER | CODEC_FLAG_DECODER;
1155 strncpy(m->name, ZR_DEVNAME(zr), sizeof(m->name));
1156 m->data = zr;
1157
1158 switch (type)
1159 {
1160 case CODEC_TYPE_ZR36060:
1161 m->readreg = zr36060_read;
1162 m->writereg = zr36060_write;
1163 m->flags |= CODEC_FLAG_JPEG | CODEC_FLAG_VFE;
1164 break;
1165 case CODEC_TYPE_ZR36050:
1166 m->readreg = zr36050_read;
1167 m->writereg = zr36050_write;
1168 m->flags |= CODEC_FLAG_JPEG;
1169 break;
1170 case CODEC_TYPE_ZR36016:
1171 m->readreg = zr36016_read;
1172 m->writereg = zr36016_write;
1173 m->flags |= CODEC_FLAG_VFE;
1174 break;
1175 }
1176
1177 return m;
1178 }
1179
1180 /*
1181 * Scan for a Buz card (actually for the PCI contoler ZR36057),
1182 * request the irq and map the io memory
1183 */
1184 static int __devinit
1185 find_zr36057 (void)
1186 {
1187 unsigned char latency, need_latency;
1188 struct zoran *zr;
1189 struct pci_dev *dev = NULL;
1190 int result;
1191 struct videocodec_master *master_vfe = NULL;
1192 struct videocodec_master *master_codec = NULL;
1193 int card_num;
1194 char *i2c_enc_name, *i2c_dec_name, *codec_name, *vfe_name;
1195
1196 zoran_num = 0;
1197 while (zoran_num < BUZ_MAX &&
1198 (dev =
1199 pci_find_device(PCI_VENDOR_ID_ZORAN,
1200 PCI_DEVICE_ID_ZORAN_36057, dev)) != NULL) {
1201 card_num = card[zoran_num];
1202 zr = &zoran[zoran_num];
1203 memset(zr, 0, sizeof(struct zoran)); // Just in case if previous cycle failed
1204 zr->pci_dev = dev;
1205 //zr->zr36057_mem = NULL;
1206 zr->id = zoran_num;
1207 snprintf(ZR_DEVNAME(zr), sizeof(ZR_DEVNAME(zr)), "MJPEG[%u]", zr->id);
1208 spin_lock_init(&zr->spinlock);
1209 init_MUTEX(&zr->resource_lock);
1210 if (pci_enable_device(dev))
1211 continue;
1212 zr->zr36057_adr = pci_resource_start(zr->pci_dev, 0);
1213 pci_read_config_byte(zr->pci_dev, PCI_CLASS_REVISION,
1214 &zr->revision);
1215 if (zr->revision < 2) {
1216 dprintk(1,
1217 KERN_INFO
1218 "%s: Zoran ZR36057 (rev %d) irq: %d, memory: 0x%08x.\n",
1219 ZR_DEVNAME(zr), zr->revision, zr->pci_dev->irq,
1220 zr->zr36057_adr);
1221
1222 if (card_num == -1) {
1223 dprintk(1,
1224 KERN_ERR
1225 "%s: find_zr36057() - no card specified, please use the card=X insmod option\n",
1226 ZR_DEVNAME(zr));
1227 continue;
1228 }
1229 } else {
1230 int i;
1231 unsigned short ss_vendor, ss_device;
1232
1233 ss_vendor = zr->pci_dev->subsystem_vendor;
1234 ss_device = zr->pci_dev->subsystem_device;
1235 dprintk(1,
1236 KERN_INFO
1237 "%s: Zoran ZR36067 (rev %d) irq: %d, memory: 0x%08x\n",
1238 ZR_DEVNAME(zr), zr->revision, zr->pci_dev->irq,
1239 zr->zr36057_adr);
1240 dprintk(1,
1241 KERN_INFO
1242 "%s: subsystem vendor=0x%04x id=0x%04x\n",
1243 ZR_DEVNAME(zr), ss_vendor, ss_device);
1244 if (card_num == -1) {
1245 dprintk(3,
1246 KERN_DEBUG
1247 "%s: find_zr36057() - trying to autodetect card type\n",
1248 ZR_DEVNAME(zr));
1249 for (i=0;i<NUM_CARDS;i++) {
1250 if (ss_vendor == zoran_cards[i].vendor_id &&
1251 ss_device == zoran_cards[i].device_id) {
1252 dprintk(3,
1253 KERN_DEBUG
1254 "%s: find_zr36057() - card %s detected\n",
1255 ZR_DEVNAME(zr),
1256 zoran_cards[i].name);
1257 card_num = i;
1258 break;
1259 }
1260 }
1261 if (i == NUM_CARDS) {
1262 dprintk(1,
1263 KERN_ERR
1264 "%s: find_zr36057() - unknown card\n",
1265 ZR_DEVNAME(zr));
1266 continue;
1267 }
1268 }
1269 }
1270
1271 if (card_num < 0 || card_num >= NUM_CARDS) {
1272 dprintk(2,
1273 KERN_ERR
1274 "%s: find_zr36057() - invalid cardnum %d\n",
1275 ZR_DEVNAME(zr), card_num);
1276 continue;
1277 }
1278
1279 /* even though we make this a non pointer and thus
1280 * theoretically allow for making changes to this struct
1281 * on a per-individual card basis at runtime, this is
1282 * strongly discouraged. This structure is intended to
1283 * keep general card information, no settings or anything */
1284 zr->card = zoran_cards[card_num];
1285 snprintf(ZR_DEVNAME(zr), sizeof(ZR_DEVNAME(zr)),
1286 "%s[%u]", zr->card.name, zr->id);
1287
1288 zr->zr36057_mem = ioremap_nocache(zr->zr36057_adr, 0x1000);
1289 if (!zr->zr36057_mem) {
1290 dprintk(1,
1291 KERN_ERR
1292 "%s: find_zr36057() - ioremap failed\n",
1293 ZR_DEVNAME(zr));
1294 continue;
1295 }
1296
1297 result = request_irq(zr->pci_dev->irq,
1298 zoran_irq,
1299 SA_SHIRQ | SA_INTERRUPT,
1300 ZR_DEVNAME(zr),
1301 (void *) zr);
1302 if (result < 0) {
1303 if (result == -EINVAL) {
1304 dprintk(1,
1305 KERN_ERR
1306 "%s: find_zr36057() - bad irq number or handler\n",
1307 ZR_DEVNAME(zr));
1308 } else if (result == -EBUSY) {
1309 dprintk(1,
1310 KERN_ERR
1311 "%s: find_zr36057() - IRQ %d busy, change your PnP config in BIOS\n",
1312 ZR_DEVNAME(zr), zr->pci_dev->irq);
1313 } else {
1314 dprintk(1,
1315 KERN_ERR
1316 "%s: find_zr36057() - can't assign irq, error code %d\n",
1317 ZR_DEVNAME(zr), result);
1318 }
1319 goto zr_unmap;
1320 }
1321
1322 /* set PCI latency timer */
1323 pci_read_config_byte(zr->pci_dev, PCI_LATENCY_TIMER,
1324 &latency);
1325 need_latency = zr->revision > 1 ? 32 : 48;
1326 if (latency != need_latency) {
1327 dprintk(2,
1328 KERN_INFO
1329 "%s: Changing PCI latency from %d to %d.\n",
1330 ZR_DEVNAME(zr), latency, need_latency);
1331 pci_write_config_byte(zr->pci_dev,
1332 PCI_LATENCY_TIMER,
1333 need_latency);
1334 }
1335
1336 zr36057_restart(zr);
1337 /* i2c */
1338 dprintk(2, KERN_INFO "%s: Initializing i2c bus...\n",
1339 ZR_DEVNAME(zr));
1340
1341 /* i2c decoder */
1342 if (decoder[zr->id] != -1) {
1343 i2c_dec_name = i2cid_to_modulename(decoder[zr->id]);
1344 zr->card.i2c_decoder = decoder[zr->id];
1345 } else if (zr->card.i2c_decoder != 0) {
1346 i2c_dec_name =
1347 i2cid_to_modulename(zr->card.i2c_decoder);
1348 } else {
1349 i2c_dec_name = NULL;
1350 }
1351
1352 if (i2c_dec_name) {
1353 if ((result = request_module(i2c_dec_name)) < 0) {
1354 dprintk(1,
1355 KERN_ERR
1356 "%s: failed to load module %s: %d\n",
1357 ZR_DEVNAME(zr), i2c_dec_name, result);
1358 }
1359 }
1360
1361 /* i2c encoder */
1362 if (encoder[zr->id] != -1) {
1363 i2c_enc_name = i2cid_to_modulename(encoder[zr->id]);
1364 zr->card.i2c_encoder = encoder[zr->id];
1365 } else if (zr->card.i2c_encoder != 0) {
1366 i2c_enc_name =
1367 i2cid_to_modulename(zr->card.i2c_encoder);
1368 } else {
1369 i2c_enc_name = NULL;
1370 }
1371
1372 if (i2c_enc_name) {
1373 if ((result = request_module(i2c_enc_name)) < 0) {
1374 dprintk(1,
1375 KERN_ERR
1376 "%s: failed to load module %s: %d\n",
1377 ZR_DEVNAME(zr), i2c_enc_name, result);
1378 }
1379 }
1380
1381 if (zoran_register_i2c(zr) < 0) {
1382 dprintk(1,
1383 KERN_ERR
1384 "%s: find_zr36057() - can't initialize i2c bus\n",
1385 ZR_DEVNAME(zr));
1386 goto zr_free_irq;
1387 }
1388
1389 dprintk(2,
1390 KERN_INFO "%s: Initializing videocodec bus...\n",
1391 ZR_DEVNAME(zr));
1392
1393 if (zr->card.video_codec != 0 &&
1394 (codec_name =
1395 codecid_to_modulename(zr->card.video_codec)) != NULL) {
1396 if ((result = request_module(codec_name)) < 0) {
1397 dprintk(1,
1398 KERN_ERR
1399 "%s: failed to load modules %s: %d\n",
1400 ZR_DEVNAME(zr), codec_name, result);
1401 }
1402 }
1403 if (zr->card.video_vfe != 0 &&
1404 (vfe_name =
1405 codecid_to_modulename(zr->card.video_vfe)) != NULL) {
1406 if ((result = request_module(vfe_name)) < 0) {
1407 dprintk(1,
1408 KERN_ERR
1409 "%s: failed to load modules %s: %d\n",
1410 ZR_DEVNAME(zr), vfe_name, result);
1411 }
1412 }
1413
1414 /* reset JPEG codec */
1415 jpeg_codec_sleep(zr, 1);
1416 jpeg_codec_reset(zr);
1417 /* video bus enabled */
1418 /* display codec revision */
1419 if (zr->card.video_codec != 0) {
1420 master_codec = zoran_setup_videocodec(zr,
1421 zr->card.video_codec);
1422 if (!master_codec)
1423 goto zr_unreg_i2c;
1424 zr->codec = videocodec_attach(master_codec);
1425 if (!zr->codec) {
1426 dprintk(1,
1427 KERN_ERR
1428 "%s: find_zr36057() - no codec found\n",
1429 ZR_DEVNAME(zr));
1430 goto zr_free_codec;
1431 }
1432 if (zr->codec->type != zr->card.video_codec) {
1433 dprintk(1,
1434 KERN_ERR
1435 "%s: find_zr36057() - wrong codec\n",
1436 ZR_DEVNAME(zr));
1437 goto zr_detach_codec;
1438 }
1439 }
1440 if (zr->card.video_vfe != 0) {
1441 master_vfe = zoran_setup_videocodec(zr,
1442 zr->card.video_vfe);
1443 if (!master_vfe)
1444 goto zr_detach_codec;
1445 zr->vfe = videocodec_attach(master_vfe);
1446 if (!zr->vfe) {
1447 dprintk(1,
1448 KERN_ERR
1449 "%s: find_zr36057() - no VFE found\n",
1450 ZR_DEVNAME(zr));
1451 goto zr_free_vfe;
1452 }
1453 if (zr->vfe->type != zr->card.video_vfe) {
1454 dprintk(1,
1455 KERN_ERR
1456 "%s: find_zr36057() = wrong VFE\n",
1457 ZR_DEVNAME(zr));
1458 goto zr_detach_vfe;
1459 }
1460 }
1461
1462 zoran_num++;
1463 continue;
1464
1465 // Init errors
1466 zr_detach_vfe:
1467 videocodec_detach(zr->vfe);
1468 zr_free_vfe:
1469 kfree(master_vfe);
1470 zr_detach_codec:
1471 videocodec_detach(zr->codec);
1472 zr_free_codec:
1473 kfree(master_codec);
1474 zr_unreg_i2c:
1475 zoran_unregister_i2c(zr);
1476 zr_free_irq:
1477 btwrite(0, ZR36057_SPGPPCR);
1478 free_irq(zr->pci_dev->irq, zr);
1479 zr_unmap:
1480 iounmap(zr->zr36057_mem);
1481 continue;
1482 }
1483 if (zoran_num == 0) {
1484 dprintk(1, KERN_INFO "No known MJPEG cards found.\n");
1485 }
1486 return zoran_num;
1487 }
1488
1489 static int __init
1490 init_dc10_cards (void)
1491 {
1492 int i;
1493
1494 memset(zoran, 0, sizeof(zoran));
1495 printk(KERN_INFO "Zoran MJPEG board driver version %d.%d.%d\n",
1496 MAJOR_VERSION, MINOR_VERSION, RELEASE_VERSION);
1497
1498 /* Look for cards */
1499 if (find_zr36057() < 0) {
1500 return -EIO;
1501 }
1502 if (zoran_num == 0)
1503 return -ENODEV;
1504 dprintk(1, KERN_INFO "%s: %d card(s) found\n", ZORAN_NAME,
1505 zoran_num);
1506 /* check the parameters we have been given, adjust if necessary */
1507 if (v4l_nbufs < 2)
1508 v4l_nbufs = 2;
1509 if (v4l_nbufs > VIDEO_MAX_FRAME)
1510 v4l_nbufs = VIDEO_MAX_FRAME;
1511 /* The user specfies the in KB, we want them in byte
1512 * (and page aligned) */
1513 v4l_bufsize = PAGE_ALIGN(v4l_bufsize * 1024);
1514 if (v4l_bufsize < 32768)
1515 v4l_bufsize = 32768;
1516 /* 2 MB is arbitrary but sufficient for the maximum possible images */
1517 if (v4l_bufsize > 2048 * 1024)
1518 v4l_bufsize = 2048 * 1024;
1519 if (jpg_nbufs < 4)
1520 jpg_nbufs = 4;
1521 if (jpg_nbufs > BUZ_MAX_FRAME)
1522 jpg_nbufs = BUZ_MAX_FRAME;
1523 jpg_bufsize = PAGE_ALIGN(jpg_bufsize * 1024);
1524 if (jpg_bufsize < 8192)
1525 jpg_bufsize = 8192;
1526 if (jpg_bufsize > (512 * 1024))
1527 jpg_bufsize = 512 * 1024;
1528 /* Use parameter for vidmem or try to find a video card */
1529 if (vidmem) {
1530 dprintk(1,
1531 KERN_INFO
1532 "%s: Using supplied video memory base address @ 0x%lx\n",
1533 ZORAN_NAME, vidmem);
1534 }
1535
1536 /* random nonsense */
1537 dprintk(5, KERN_DEBUG "Jotti is een held!\n");
1538
1539 /* some mainboards might not do PCI-PCI data transfer well */
1540 if (pci_pci_problems & PCIPCI_FAIL) {
1541 dprintk(1,
1542 KERN_WARNING
1543 "%s: chipset may not support reliable PCI-PCI DMA\n",
1544 ZORAN_NAME);
1545 }
1546
1547 /* take care of Natoma chipset and a revision 1 zr36057 */
1548 for (i = 0; i < zoran_num; i++) {
1549 struct zoran *zr = &zoran[i];
1550
1551 if (pci_pci_problems & PCIPCI_NATOMA && zr->revision <= 1) {
1552 zr->jpg_buffers.need_contiguous = 1;
1553 dprintk(1,
1554 KERN_INFO
1555 "%s: ZR36057/Natoma bug, max. buffer size is 128K\n",
1556 ZR_DEVNAME(zr));
1557 }
1558
1559 if (zr36057_init(zr) < 0) {
1560 for (i = 0; i < zoran_num; i++)
1561 zoran_release(&zoran[i]);
1562 return -EIO;
1563 }
1564 zoran_proc_init(zr);
1565 }
1566
1567 return 0;
1568 }
1569
1570 static void __exit
1571 unload_dc10_cards (void)
1572 {
1573 int i;
1574
1575 for (i = 0; i < zoran_num; i++)
1576 zoran_release(&zoran[i]);
1577 }
1578
1579 module_init(init_dc10_cards);
1580 module_exit(unload_dc10_cards);
This page took 0.10106 seconds and 6 git commands to generate.