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