blob: a2e528ccf28ad02d96aacce7456e5f52be9a1b70 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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
61extern const struct zoran_format zoran_formats[];
62
63static int card[BUZ_MAX] = { -1, -1, -1, -1 };
64module_param_array(card, int, NULL, 0);
65MODULE_PARM_DESC(card, "The type of card");
66
67static int encoder[BUZ_MAX] = { -1, -1, -1, -1 };
68module_param_array(encoder, int, NULL, 0);
69MODULE_PARM_DESC(encoder, "i2c TV encoder");
70
71static int decoder[BUZ_MAX] = { -1, -1, -1, -1 };
72module_param_array(decoder, int, NULL, 0);
73MODULE_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
83static unsigned long vidmem = 0; /* Video memory base address */
84module_param(vidmem, ulong, 0);
85
86/*
87 Default input and video norm at startup of the driver.
88*/
89
90static int default_input = 0; /* 0=Composite, 1=S-Video */
91module_param(default_input, int, 0);
92MODULE_PARM_DESC(default_input,
93 "Default input (0=Composite, 1=S-Video, 2=Internal)");
94
95static int default_norm = 0; /* 0=PAL, 1=NTSC 2=SECAM */
96module_param(default_norm, int, 0);
97MODULE_PARM_DESC(default_norm, "Default norm (0=PAL, 1=NTSC, 2=SECAM)");
98
99static int video_nr = -1; /* /dev/videoN, -1 for autodetect */
100module_param(video_nr, int, 0);
101MODULE_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
120int v4l_nbufs = 2;
121int v4l_bufsize = 128; /* Everybody should be able to work with this setting */
122module_param(v4l_nbufs, int, 0);
123MODULE_PARM_DESC(v4l_nbufs, "Maximum number of V4L buffers to use");
124module_param(v4l_bufsize, int, 0);
125MODULE_PARM_DESC(v4l_bufsize, "Maximum size per V4L buffer (in kB)");
126
127int jpg_nbufs = 32;
128int jpg_bufsize = 512; /* max size for 100% quality full-PAL frame */
129module_param(jpg_nbufs, int, 0);
130MODULE_PARM_DESC(jpg_nbufs, "Maximum number of JPG buffers to use");
131module_param(jpg_bufsize, int, 0);
132MODULE_PARM_DESC(jpg_bufsize, "Maximum size per JPG buffer (in kB)");
133
134int 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) */
136module_param(pass_through, int, 0);
137MODULE_PARM_DESC(pass_through,
138 "Pass TV signal through to TV-out when idling");
139
140static int debug = 1;
141int *zr_debug = &debug;
142module_param(debug, int, 0);
143MODULE_PARM_DESC(debug, "Debug level (0-4)");
144
145MODULE_DESCRIPTION("Zoran-36057/36067 JPEG codec driver");
146MODULE_AUTHOR("Serguei Miridonov");
147MODULE_LICENSE("GPL");
148
149static 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};
154MODULE_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
162int zoran_num; /* number of Buzs in use */
163struct zoran zoran[BUZ_MAX];
164
165/* videocodec bus functions ZR36060 */
166static u32
167zr36060_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
183static void
184zr36060_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 */
200static u32
201zr36050_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
216static void
217zr36050_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 */
232static u32
233zr36016_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 */
248void
249zr36016_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
266static void
267dc10_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
278static void
279dc10plus_init (struct zoran *zr)
280{
281 dprintk(3, KERN_DEBUG "%s: dc10plus_init()\n", ZR_DEVNAME(zr));
282}
283
284static void
285buz_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
295static void
296lml33_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
303static char *
304i2cid_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
349static char *
350codecid_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
375static struct tvnorm f50sqpixel = { 944, 768, 83, 880, 625, 576, 16 };
376static struct tvnorm f60sqpixel = { 780, 640, 51, 716, 525, 480, 12 };
377static struct tvnorm f50ccir601 = { 864, 720, 75, 804, 625, 576, 18 };
378static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 16 };
379
380static struct tvnorm f50ccir601_lml33 = { 864, 720, 75+34, 804, 625, 576, 18 };
381static 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 */
384static struct tvnorm f50sqpixel_dc10 = { 944, 768, 0, 880, 625, 576, 0 };
385static 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>) */
390static struct tvnorm f50ccir601_lm33r10 = { 864, 720, 74+54, 804, 625, 576, 18 };
391static struct tvnorm f60ccir601_lm33r10 = { 858, 720, 56+54, 788, 525, 480, 16 };
392
393static 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 */
624static int
625zoran_i2c_getsda (void *data)
626{
627 struct zoran *zr = (struct zoran *) data;
628
629 return (btread(ZR36057_I2CBR) >> 1) & 1;
630}
631
632static int
633zoran_i2c_getscl (void *data)
634{
635 struct zoran *zr = (struct zoran *) data;
636
637 return btread(ZR36057_I2CBR) & 1;
638}
639
640static void
641zoran_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
653static void
654zoran_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
666static int
667zoran_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
696clientreg_unlock_and_return:
697 up(&zr->resource_lock);
698
699 return res;
700}
701
702static int
703zoran_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 }
724clientunreg_unlock_and_return:
725 up(&zr->resource_lock);
726 return res;
727}
728
729static 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
739static struct i2c_adapter zoran_i2c_adapter_template = {
Jean Delvarefae91e72005-08-15 19:57:04 +0200740 .name = "zr36057",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700741 .id = I2C_HW_B_ZR36067,
742 .algo = NULL,
743 .client_register = zoran_i2c_client_register,
744 .client_unregister = zoran_i2c_client_unregister,
745};
746
747static int
748zoran_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
762static void
763zoran_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
770int
771zoran_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
906void
907zoran_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
969static void __devinit
970test_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
995static int __devinit
996zr36057_init (struct zoran *zr)
997{
Jean Delvaredaf72f42006-03-22 03:48:37 -0300998 int j, err;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700999 int two = 2;
1000 int zero = 0;
1001
1002 dprintk(1,
1003 KERN_INFO
1004 "%s: zr36057_init() - initializing card[%d], zr=%p\n",
1005 ZR_DEVNAME(zr), zr->id, zr);
1006
1007 /* default setup of all parameters which will persist between opens */
1008 zr->user = 0;
1009
1010 init_waitqueue_head(&zr->v4l_capq);
1011 init_waitqueue_head(&zr->jpg_capq);
1012 init_waitqueue_head(&zr->test_q);
1013 zr->jpg_buffers.allocated = 0;
1014 zr->v4l_buffers.allocated = 0;
1015
1016 zr->buffer.base = (void *) vidmem;
1017 zr->buffer.width = 0;
1018 zr->buffer.height = 0;
1019 zr->buffer.depth = 0;
1020 zr->buffer.bytesperline = 0;
1021
1022 /* Avoid nonsense settings from user for default input/norm */
1023 if (default_norm < VIDEO_MODE_PAL &&
1024 default_norm > VIDEO_MODE_SECAM)
1025 default_norm = VIDEO_MODE_PAL;
1026 zr->norm = default_norm;
1027 if (!(zr->timing = zr->card.tvn[zr->norm])) {
1028 dprintk(1,
1029 KERN_WARNING
1030 "%s: zr36057_init() - default TV standard not supported by hardware. PAL will be used.\n",
1031 ZR_DEVNAME(zr));
1032 zr->norm = VIDEO_MODE_PAL;
1033 zr->timing = zr->card.tvn[zr->norm];
1034 }
1035
1036 zr->input = default_input = (default_input ? 1 : 0);
1037
1038 /* Should the following be reset at every open ? */
1039 zr->hue = 32768;
1040 zr->contrast = 32768;
1041 zr->saturation = 32768;
1042 zr->brightness = 32768;
1043
1044 /* default setup (will be repeated at every open) */
1045 zoran_open_init_params(zr);
1046
1047 /* allocate memory *before* doing anything to the hardware
1048 * in case allocation fails */
Jean Delvaredaf72f42006-03-22 03:48:37 -03001049 zr->stat_com = kzalloc(BUZ_NUM_STAT_COM * 4, GFP_KERNEL);
1050 zr->video_dev = kmalloc(sizeof(struct video_device), GFP_KERNEL);
1051 if (!zr->stat_com || !zr->video_dev) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001052 dprintk(1,
1053 KERN_ERR
1054 "%s: zr36057_init() - kmalloc (STAT_COM) failed\n",
1055 ZR_DEVNAME(zr));
Jean Delvaredaf72f42006-03-22 03:48:37 -03001056 err = -ENOMEM;
1057 goto exit_free;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001058 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001059 for (j = 0; j < BUZ_NUM_STAT_COM; j++) {
1060 zr->stat_com[j] = 1; /* mark as unavailable to zr36057 */
1061 }
1062
1063 /*
1064 * Now add the template and register the device unit.
1065 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001066 memcpy(zr->video_dev, &zoran_template, sizeof(zoran_template));
1067 strcpy(zr->video_dev->name, ZR_DEVNAME(zr));
Jean Delvaredaf72f42006-03-22 03:48:37 -03001068 err = video_register_device(zr->video_dev, VFL_TYPE_GRABBER, video_nr);
1069 if (err < 0)
1070 goto exit_unregister;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001071
1072 zoran_init_hardware(zr);
1073 if (*zr_debug > 2)
1074 detect_guest_activity(zr);
1075 test_interrupts(zr);
1076 if (!pass_through) {
1077 decoder_command(zr, DECODER_ENABLE_OUTPUT, &zero);
1078 encoder_command(zr, ENCODER_SET_INPUT, &two);
1079 }
1080
1081 zr->zoran_proc = NULL;
1082 zr->initialized = 1;
1083 return 0;
Jean Delvaredaf72f42006-03-22 03:48:37 -03001084
1085exit_unregister:
1086 zoran_unregister_i2c(zr);
1087exit_free:
1088 kfree(zr->stat_com);
1089 kfree(zr->video_dev);
1090 return err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001091}
1092
1093static void
1094zoran_release (struct zoran *zr)
1095{
1096 if (!zr->initialized)
1097 return;
1098 /* unregister videocodec bus */
1099 if (zr->codec) {
1100 struct videocodec_master *master = zr->codec->master_data;
Jesper Juhl2ea75332005-11-07 01:01:31 -08001101
Linus Torvalds1da177e2005-04-16 15:20:36 -07001102 videocodec_detach(zr->codec);
Jesper Juhl2ea75332005-11-07 01:01:31 -08001103 kfree(master);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001104 }
1105 if (zr->vfe) {
1106 struct videocodec_master *master = zr->vfe->master_data;
Jesper Juhl2ea75332005-11-07 01:01:31 -08001107
Linus Torvalds1da177e2005-04-16 15:20:36 -07001108 videocodec_detach(zr->vfe);
Jesper Juhl2ea75332005-11-07 01:01:31 -08001109 kfree(master);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001110 }
1111
1112 /* unregister i2c bus */
1113 zoran_unregister_i2c(zr);
1114 /* disable PCI bus-mastering */
1115 zoran_set_pci_master(zr, 0);
1116 /* put chip into reset */
1117 btwrite(0, ZR36057_SPGPPCR);
1118 free_irq(zr->pci_dev->irq, zr);
1119 /* unmap and free memory */
Jean Delvaredaf72f42006-03-22 03:48:37 -03001120 kfree(zr->stat_com);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001121 zoran_proc_cleanup(zr);
1122 iounmap(zr->zr36057_mem);
1123 pci_disable_device(zr->pci_dev);
1124 video_unregister_device(zr->video_dev);
1125}
1126
1127void
1128zoran_vdev_release (struct video_device *vdev)
1129{
1130 kfree(vdev);
1131}
1132
1133static struct videocodec_master * __devinit
1134zoran_setup_videocodec (struct zoran *zr,
1135 int type)
1136{
1137 struct videocodec_master *m = NULL;
1138
1139 m = kmalloc(sizeof(struct videocodec_master), GFP_KERNEL);
1140 if (!m) {
1141 dprintk(1,
1142 KERN_ERR
1143 "%s: zoran_setup_videocodec() - no memory\n",
1144 ZR_DEVNAME(zr));
1145 return m;
1146 }
1147
1148 m->magic = 0L; /* magic not used */
1149 m->type = VID_HARDWARE_ZR36067;
1150 m->flags = CODEC_FLAG_ENCODER | CODEC_FLAG_DECODER;
1151 strncpy(m->name, ZR_DEVNAME(zr), sizeof(m->name));
1152 m->data = zr;
1153
1154 switch (type)
1155 {
1156 case CODEC_TYPE_ZR36060:
1157 m->readreg = zr36060_read;
1158 m->writereg = zr36060_write;
1159 m->flags |= CODEC_FLAG_JPEG | CODEC_FLAG_VFE;
1160 break;
1161 case CODEC_TYPE_ZR36050:
1162 m->readreg = zr36050_read;
1163 m->writereg = zr36050_write;
1164 m->flags |= CODEC_FLAG_JPEG;
1165 break;
1166 case CODEC_TYPE_ZR36016:
1167 m->readreg = zr36016_read;
1168 m->writereg = zr36016_write;
1169 m->flags |= CODEC_FLAG_VFE;
1170 break;
1171 }
1172
1173 return m;
1174}
1175
1176/*
1177 * Scan for a Buz card (actually for the PCI contoler ZR36057),
1178 * request the irq and map the io memory
1179 */
1180static int __devinit
1181find_zr36057 (void)
1182{
1183 unsigned char latency, need_latency;
1184 struct zoran *zr;
1185 struct pci_dev *dev = NULL;
1186 int result;
1187 struct videocodec_master *master_vfe = NULL;
1188 struct videocodec_master *master_codec = NULL;
1189 int card_num;
1190 char *i2c_enc_name, *i2c_dec_name, *codec_name, *vfe_name;
1191
1192 zoran_num = 0;
1193 while (zoran_num < BUZ_MAX &&
1194 (dev =
1195 pci_find_device(PCI_VENDOR_ID_ZORAN,
1196 PCI_DEVICE_ID_ZORAN_36057, dev)) != NULL) {
1197 card_num = card[zoran_num];
1198 zr = &zoran[zoran_num];
1199 memset(zr, 0, sizeof(struct zoran)); // Just in case if previous cycle failed
1200 zr->pci_dev = dev;
1201 //zr->zr36057_mem = NULL;
1202 zr->id = zoran_num;
1203 snprintf(ZR_DEVNAME(zr), sizeof(ZR_DEVNAME(zr)), "MJPEG[%u]", zr->id);
1204 spin_lock_init(&zr->spinlock);
1205 init_MUTEX(&zr->resource_lock);
1206 if (pci_enable_device(dev))
1207 continue;
1208 zr->zr36057_adr = pci_resource_start(zr->pci_dev, 0);
1209 pci_read_config_byte(zr->pci_dev, PCI_CLASS_REVISION,
1210 &zr->revision);
1211 if (zr->revision < 2) {
1212 dprintk(1,
1213 KERN_INFO
1214 "%s: Zoran ZR36057 (rev %d) irq: %d, memory: 0x%08x.\n",
1215 ZR_DEVNAME(zr), zr->revision, zr->pci_dev->irq,
1216 zr->zr36057_adr);
1217
1218 if (card_num == -1) {
1219 dprintk(1,
1220 KERN_ERR
1221 "%s: find_zr36057() - no card specified, please use the card=X insmod option\n",
1222 ZR_DEVNAME(zr));
1223 continue;
1224 }
1225 } else {
1226 int i;
1227 unsigned short ss_vendor, ss_device;
1228
1229 ss_vendor = zr->pci_dev->subsystem_vendor;
1230 ss_device = zr->pci_dev->subsystem_device;
1231 dprintk(1,
1232 KERN_INFO
1233 "%s: Zoran ZR36067 (rev %d) irq: %d, memory: 0x%08x\n",
1234 ZR_DEVNAME(zr), zr->revision, zr->pci_dev->irq,
1235 zr->zr36057_adr);
1236 dprintk(1,
1237 KERN_INFO
1238 "%s: subsystem vendor=0x%04x id=0x%04x\n",
1239 ZR_DEVNAME(zr), ss_vendor, ss_device);
1240 if (card_num == -1) {
1241 dprintk(3,
1242 KERN_DEBUG
1243 "%s: find_zr36057() - trying to autodetect card type\n",
1244 ZR_DEVNAME(zr));
1245 for (i=0;i<NUM_CARDS;i++) {
1246 if (ss_vendor == zoran_cards[i].vendor_id &&
1247 ss_device == zoran_cards[i].device_id) {
1248 dprintk(3,
1249 KERN_DEBUG
1250 "%s: find_zr36057() - card %s detected\n",
1251 ZR_DEVNAME(zr),
1252 zoran_cards[i].name);
1253 card_num = i;
1254 break;
1255 }
1256 }
1257 if (i == NUM_CARDS) {
1258 dprintk(1,
1259 KERN_ERR
1260 "%s: find_zr36057() - unknown card\n",
1261 ZR_DEVNAME(zr));
1262 continue;
1263 }
1264 }
1265 }
1266
1267 if (card_num < 0 || card_num >= NUM_CARDS) {
1268 dprintk(2,
1269 KERN_ERR
1270 "%s: find_zr36057() - invalid cardnum %d\n",
1271 ZR_DEVNAME(zr), card_num);
1272 continue;
1273 }
1274
1275 /* even though we make this a non pointer and thus
1276 * theoretically allow for making changes to this struct
1277 * on a per-individual card basis at runtime, this is
1278 * strongly discouraged. This structure is intended to
1279 * keep general card information, no settings or anything */
1280 zr->card = zoran_cards[card_num];
1281 snprintf(ZR_DEVNAME(zr), sizeof(ZR_DEVNAME(zr)),
1282 "%s[%u]", zr->card.name, zr->id);
1283
1284 zr->zr36057_mem = ioremap_nocache(zr->zr36057_adr, 0x1000);
1285 if (!zr->zr36057_mem) {
1286 dprintk(1,
1287 KERN_ERR
1288 "%s: find_zr36057() - ioremap failed\n",
1289 ZR_DEVNAME(zr));
1290 continue;
1291 }
1292
1293 result = request_irq(zr->pci_dev->irq,
1294 zoran_irq,
1295 SA_SHIRQ | SA_INTERRUPT,
1296 ZR_DEVNAME(zr),
1297 (void *) zr);
1298 if (result < 0) {
1299 if (result == -EINVAL) {
1300 dprintk(1,
1301 KERN_ERR
1302 "%s: find_zr36057() - bad irq number or handler\n",
1303 ZR_DEVNAME(zr));
1304 } else if (result == -EBUSY) {
1305 dprintk(1,
1306 KERN_ERR
1307 "%s: find_zr36057() - IRQ %d busy, change your PnP config in BIOS\n",
1308 ZR_DEVNAME(zr), zr->pci_dev->irq);
1309 } else {
1310 dprintk(1,
1311 KERN_ERR
1312 "%s: find_zr36057() - can't assign irq, error code %d\n",
1313 ZR_DEVNAME(zr), result);
1314 }
1315 goto zr_unmap;
1316 }
1317
1318 /* set PCI latency timer */
1319 pci_read_config_byte(zr->pci_dev, PCI_LATENCY_TIMER,
1320 &latency);
1321 need_latency = zr->revision > 1 ? 32 : 48;
1322 if (latency != need_latency) {
1323 dprintk(2,
1324 KERN_INFO
1325 "%s: Changing PCI latency from %d to %d.\n",
1326 ZR_DEVNAME(zr), latency, need_latency);
1327 pci_write_config_byte(zr->pci_dev,
1328 PCI_LATENCY_TIMER,
1329 need_latency);
1330 }
1331
1332 zr36057_restart(zr);
1333 /* i2c */
1334 dprintk(2, KERN_INFO "%s: Initializing i2c bus...\n",
1335 ZR_DEVNAME(zr));
1336
1337 /* i2c decoder */
1338 if (decoder[zr->id] != -1) {
1339 i2c_dec_name = i2cid_to_modulename(decoder[zr->id]);
1340 zr->card.i2c_decoder = decoder[zr->id];
1341 } else if (zr->card.i2c_decoder != 0) {
1342 i2c_dec_name =
1343 i2cid_to_modulename(zr->card.i2c_decoder);
1344 } else {
1345 i2c_dec_name = NULL;
1346 }
1347
1348 if (i2c_dec_name) {
1349 if ((result = request_module(i2c_dec_name)) < 0) {
1350 dprintk(1,
1351 KERN_ERR
1352 "%s: failed to load module %s: %d\n",
1353 ZR_DEVNAME(zr), i2c_dec_name, result);
1354 }
1355 }
1356
1357 /* i2c encoder */
1358 if (encoder[zr->id] != -1) {
1359 i2c_enc_name = i2cid_to_modulename(encoder[zr->id]);
1360 zr->card.i2c_encoder = encoder[zr->id];
1361 } else if (zr->card.i2c_encoder != 0) {
1362 i2c_enc_name =
1363 i2cid_to_modulename(zr->card.i2c_encoder);
1364 } else {
1365 i2c_enc_name = NULL;
1366 }
1367
1368 if (i2c_enc_name) {
1369 if ((result = request_module(i2c_enc_name)) < 0) {
1370 dprintk(1,
1371 KERN_ERR
1372 "%s: failed to load module %s: %d\n",
1373 ZR_DEVNAME(zr), i2c_enc_name, result);
1374 }
1375 }
1376
1377 if (zoran_register_i2c(zr) < 0) {
1378 dprintk(1,
1379 KERN_ERR
1380 "%s: find_zr36057() - can't initialize i2c bus\n",
1381 ZR_DEVNAME(zr));
1382 goto zr_free_irq;
1383 }
1384
1385 dprintk(2,
1386 KERN_INFO "%s: Initializing videocodec bus...\n",
1387 ZR_DEVNAME(zr));
1388
1389 if (zr->card.video_codec != 0 &&
1390 (codec_name =
1391 codecid_to_modulename(zr->card.video_codec)) != NULL) {
1392 if ((result = request_module(codec_name)) < 0) {
1393 dprintk(1,
1394 KERN_ERR
1395 "%s: failed to load modules %s: %d\n",
1396 ZR_DEVNAME(zr), codec_name, result);
1397 }
1398 }
1399 if (zr->card.video_vfe != 0 &&
1400 (vfe_name =
1401 codecid_to_modulename(zr->card.video_vfe)) != NULL) {
1402 if ((result = request_module(vfe_name)) < 0) {
1403 dprintk(1,
1404 KERN_ERR
1405 "%s: failed to load modules %s: %d\n",
1406 ZR_DEVNAME(zr), vfe_name, result);
1407 }
1408 }
1409
1410 /* reset JPEG codec */
1411 jpeg_codec_sleep(zr, 1);
1412 jpeg_codec_reset(zr);
1413 /* video bus enabled */
1414 /* display codec revision */
1415 if (zr->card.video_codec != 0) {
1416 master_codec = zoran_setup_videocodec(zr,
1417 zr->card.video_codec);
1418 if (!master_codec)
1419 goto zr_unreg_i2c;
1420 zr->codec = videocodec_attach(master_codec);
1421 if (!zr->codec) {
1422 dprintk(1,
1423 KERN_ERR
1424 "%s: find_zr36057() - no codec found\n",
1425 ZR_DEVNAME(zr));
1426 goto zr_free_codec;
1427 }
1428 if (zr->codec->type != zr->card.video_codec) {
1429 dprintk(1,
1430 KERN_ERR
1431 "%s: find_zr36057() - wrong codec\n",
1432 ZR_DEVNAME(zr));
1433 goto zr_detach_codec;
1434 }
1435 }
1436 if (zr->card.video_vfe != 0) {
1437 master_vfe = zoran_setup_videocodec(zr,
1438 zr->card.video_vfe);
1439 if (!master_vfe)
1440 goto zr_detach_codec;
1441 zr->vfe = videocodec_attach(master_vfe);
1442 if (!zr->vfe) {
1443 dprintk(1,
1444 KERN_ERR
1445 "%s: find_zr36057() - no VFE found\n",
1446 ZR_DEVNAME(zr));
1447 goto zr_free_vfe;
1448 }
1449 if (zr->vfe->type != zr->card.video_vfe) {
1450 dprintk(1,
1451 KERN_ERR
1452 "%s: find_zr36057() = wrong VFE\n",
1453 ZR_DEVNAME(zr));
1454 goto zr_detach_vfe;
1455 }
1456 }
1457
1458 zoran_num++;
1459 continue;
1460
1461 // Init errors
1462 zr_detach_vfe:
1463 videocodec_detach(zr->vfe);
1464 zr_free_vfe:
1465 kfree(master_vfe);
1466 zr_detach_codec:
1467 videocodec_detach(zr->codec);
1468 zr_free_codec:
1469 kfree(master_codec);
1470 zr_unreg_i2c:
1471 zoran_unregister_i2c(zr);
1472 zr_free_irq:
1473 btwrite(0, ZR36057_SPGPPCR);
1474 free_irq(zr->pci_dev->irq, zr);
1475 zr_unmap:
1476 iounmap(zr->zr36057_mem);
1477 continue;
1478 }
1479 if (zoran_num == 0) {
1480 dprintk(1, KERN_INFO "No known MJPEG cards found.\n");
1481 }
1482 return zoran_num;
1483}
1484
1485static int __init
1486init_dc10_cards (void)
1487{
1488 int i;
1489
1490 memset(zoran, 0, sizeof(zoran));
1491 printk(KERN_INFO "Zoran MJPEG board driver version %d.%d.%d\n",
1492 MAJOR_VERSION, MINOR_VERSION, RELEASE_VERSION);
1493
1494 /* Look for cards */
1495 if (find_zr36057() < 0) {
1496 return -EIO;
1497 }
1498 if (zoran_num == 0)
1499 return -ENODEV;
1500 dprintk(1, KERN_INFO "%s: %d card(s) found\n", ZORAN_NAME,
1501 zoran_num);
1502 /* check the parameters we have been given, adjust if necessary */
1503 if (v4l_nbufs < 2)
1504 v4l_nbufs = 2;
1505 if (v4l_nbufs > VIDEO_MAX_FRAME)
1506 v4l_nbufs = VIDEO_MAX_FRAME;
1507 /* The user specfies the in KB, we want them in byte
1508 * (and page aligned) */
1509 v4l_bufsize = PAGE_ALIGN(v4l_bufsize * 1024);
1510 if (v4l_bufsize < 32768)
1511 v4l_bufsize = 32768;
1512 /* 2 MB is arbitrary but sufficient for the maximum possible images */
1513 if (v4l_bufsize > 2048 * 1024)
1514 v4l_bufsize = 2048 * 1024;
1515 if (jpg_nbufs < 4)
1516 jpg_nbufs = 4;
1517 if (jpg_nbufs > BUZ_MAX_FRAME)
1518 jpg_nbufs = BUZ_MAX_FRAME;
1519 jpg_bufsize = PAGE_ALIGN(jpg_bufsize * 1024);
1520 if (jpg_bufsize < 8192)
1521 jpg_bufsize = 8192;
1522 if (jpg_bufsize > (512 * 1024))
1523 jpg_bufsize = 512 * 1024;
1524 /* Use parameter for vidmem or try to find a video card */
1525 if (vidmem) {
1526 dprintk(1,
1527 KERN_INFO
1528 "%s: Using supplied video memory base address @ 0x%lx\n",
1529 ZORAN_NAME, vidmem);
1530 }
1531
1532 /* random nonsense */
1533 dprintk(5, KERN_DEBUG "Jotti is een held!\n");
1534
1535 /* some mainboards might not do PCI-PCI data transfer well */
1536 if (pci_pci_problems & PCIPCI_FAIL) {
1537 dprintk(1,
1538 KERN_WARNING
1539 "%s: chipset may not support reliable PCI-PCI DMA\n",
1540 ZORAN_NAME);
1541 }
1542
1543 /* take care of Natoma chipset and a revision 1 zr36057 */
1544 for (i = 0; i < zoran_num; i++) {
1545 struct zoran *zr = &zoran[i];
1546
1547 if (pci_pci_problems & PCIPCI_NATOMA && zr->revision <= 1) {
1548 zr->jpg_buffers.need_contiguous = 1;
1549 dprintk(1,
1550 KERN_INFO
1551 "%s: ZR36057/Natoma bug, max. buffer size is 128K\n",
1552 ZR_DEVNAME(zr));
1553 }
1554
1555 if (zr36057_init(zr) < 0) {
1556 for (i = 0; i < zoran_num; i++)
1557 zoran_release(&zoran[i]);
1558 return -EIO;
1559 }
1560 zoran_proc_init(zr);
1561 }
1562
1563 return 0;
1564}
1565
1566static void __exit
1567unload_dc10_cards (void)
1568{
1569 int i;
1570
1571 for (i = 0; i < zoran_num; i++)
1572 zoran_release(&zoran[i]);
1573}
1574
1575module_init(init_dc10_cards);
1576module_exit(unload_dc10_cards);