1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 4 bttv - Bt848 frame grabber driver 5 6 Copyright (C) 1996,97,98 Ralph Metzler <rjkm@thp.uni-koeln.de> 7 & Marcus Metzler <mocm@thp.uni-koeln.de> 8 (c) 1999-2002 Gerd Knorr <kraxel@bytesex.org> 9 10 some v4l2 code lines are taken from Justin's bttv2 driver which is 11 (c) 2000 Justin Schoeman <justin@suntiger.ee.up.ac.za> 12 13 V4L1 removal from: 14 (c) 2005-2006 Nickolay V. Shmyrev <nshmyrev@yandex.ru> 15 16 Fixes to be fully V4L2 compliant by 17 (c) 2006 Mauro Carvalho Chehab <mchehab@kernel.org> 18 19 Cropping and overscan support 20 Copyright (C) 2005, 2006 Michael H. Schimek <mschimek@gmx.at> 21 Sponsored by OPQ Systems AB 22 23 */ 24 25 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 26 27 #include <linux/init.h> 28 #include <linux/module.h> 29 #include <linux/delay.h> 30 #include <linux/slab.h> 31 #include <linux/errno.h> 32 #include <linux/fs.h> 33 #include <linux/kernel.h> 34 #include <linux/sched.h> 35 #include <linux/interrupt.h> 36 #include <linux/kdev_t.h> 37 #include "bttvp.h" 38 #include <media/v4l2-common.h> 39 #include <media/v4l2-ioctl.h> 40 #include <media/v4l2-event.h> 41 #include <media/i2c/tvaudio.h> 42 #include <media/drv-intf/msp3400.h> 43 44 #include <linux/dma-mapping.h> 45 46 #include <asm/io.h> 47 #include <asm/byteorder.h> 48 49 #include <media/i2c/saa6588.h> 50 51 #define BTTV_VERSION "0.9.19" 52 53 unsigned int bttv_num; /* number of Bt848s in use */ 54 struct bttv *bttvs[BTTV_MAX]; 55 56 unsigned int bttv_debug; 57 unsigned int bttv_verbose = 1; 58 unsigned int bttv_gpio; 59 60 /* config variables */ 61 #ifdef __BIG_ENDIAN 62 static unsigned int bigendian=1; 63 #else 64 static unsigned int bigendian; 65 #endif 66 static unsigned int radio[BTTV_MAX]; 67 static unsigned int irq_debug; 68 static unsigned int gbuffers = 8; 69 static unsigned int gbufsize = 0x208000; 70 static unsigned int reset_crop = 1; 71 72 static int video_nr[BTTV_MAX] = { [0 ... (BTTV_MAX-1)] = -1 }; 73 static int radio_nr[BTTV_MAX] = { [0 ... (BTTV_MAX-1)] = -1 }; 74 static int vbi_nr[BTTV_MAX] = { [0 ... (BTTV_MAX-1)] = -1 }; 75 static int debug_latency; 76 static int disable_ir; 77 78 static unsigned int fdsr; 79 80 /* options */ 81 static unsigned int combfilter; 82 static unsigned int lumafilter; 83 static unsigned int automute = 1; 84 static unsigned int chroma_agc; 85 static unsigned int agc_crush = 1; 86 static unsigned int whitecrush_upper = 0xCF; 87 static unsigned int whitecrush_lower = 0x7F; 88 static unsigned int vcr_hack; 89 static unsigned int irq_iswitch; 90 static unsigned int uv_ratio = 50; 91 static unsigned int full_luma_range; 92 static unsigned int coring; 93 94 /* API features (turn on/off stuff for testing) */ 95 static unsigned int v4l2 = 1; 96 97 /* insmod args */ 98 module_param(bttv_verbose, int, 0644); 99 module_param(bttv_gpio, int, 0644); 100 module_param(bttv_debug, int, 0644); 101 module_param(irq_debug, int, 0644); 102 module_param(debug_latency, int, 0644); 103 module_param(disable_ir, int, 0444); 104 105 module_param(fdsr, int, 0444); 106 module_param(gbuffers, int, 0444); 107 module_param(gbufsize, int, 0444); 108 module_param(reset_crop, int, 0444); 109 110 module_param(v4l2, int, 0644); 111 module_param(bigendian, int, 0644); 112 module_param(irq_iswitch, int, 0644); 113 module_param(combfilter, int, 0444); 114 module_param(lumafilter, int, 0444); 115 module_param(automute, int, 0444); 116 module_param(chroma_agc, int, 0444); 117 module_param(agc_crush, int, 0444); 118 module_param(whitecrush_upper, int, 0444); 119 module_param(whitecrush_lower, int, 0444); 120 module_param(vcr_hack, int, 0444); 121 module_param(uv_ratio, int, 0444); 122 module_param(full_luma_range, int, 0444); 123 module_param(coring, int, 0444); 124 125 module_param_array(radio, int, NULL, 0444); 126 module_param_array(video_nr, int, NULL, 0444); 127 module_param_array(radio_nr, int, NULL, 0444); 128 module_param_array(vbi_nr, int, NULL, 0444); 129 130 MODULE_PARM_DESC(radio, "The TV card supports radio, default is 0 (no)"); 131 MODULE_PARM_DESC(bigendian, "byte order of the framebuffer, default is native endian"); 132 MODULE_PARM_DESC(bttv_verbose, "verbose startup messages, default is 1 (yes)"); 133 MODULE_PARM_DESC(bttv_gpio, "log gpio changes, default is 0 (no)"); 134 MODULE_PARM_DESC(bttv_debug, "debug messages, default is 0 (no)"); 135 MODULE_PARM_DESC(irq_debug, "irq handler debug messages, default is 0 (no)"); 136 MODULE_PARM_DESC(disable_ir, "disable infrared remote support"); 137 MODULE_PARM_DESC(gbuffers, "number of capture buffers. range 2-32, default 8"); 138 MODULE_PARM_DESC(gbufsize, "size of the capture buffers, default is 0x208000"); 139 MODULE_PARM_DESC(reset_crop, "reset cropping parameters at open(), default is 1 (yes) for compatibility with older applications"); 140 MODULE_PARM_DESC(automute, "mute audio on bad/missing video signal, default is 1 (yes)"); 141 MODULE_PARM_DESC(chroma_agc, "enables the AGC of chroma signal, default is 0 (no)"); 142 MODULE_PARM_DESC(agc_crush, "enables the luminance AGC crush, default is 1 (yes)"); 143 MODULE_PARM_DESC(whitecrush_upper, "sets the white crush upper value, default is 207"); 144 MODULE_PARM_DESC(whitecrush_lower, "sets the white crush lower value, default is 127"); 145 MODULE_PARM_DESC(vcr_hack, "enables the VCR hack (improves synch on poor VCR tapes), default is 0 (no)"); 146 MODULE_PARM_DESC(irq_iswitch, "switch inputs in irq handler"); 147 MODULE_PARM_DESC(uv_ratio, "ratio between u and v gains, default is 50"); 148 MODULE_PARM_DESC(full_luma_range, "use the full luma range, default is 0 (no)"); 149 MODULE_PARM_DESC(coring, "set the luma coring level, default is 0 (no)"); 150 MODULE_PARM_DESC(video_nr, "video device numbers"); 151 MODULE_PARM_DESC(vbi_nr, "vbi device numbers"); 152 MODULE_PARM_DESC(radio_nr, "radio device numbers"); 153 154 MODULE_DESCRIPTION("bttv - v4l/v4l2 driver module for bt848/878 based cards"); 155 MODULE_AUTHOR("Ralph Metzler & Marcus Metzler & Gerd Knorr"); 156 MODULE_LICENSE("GPL"); 157 MODULE_VERSION(BTTV_VERSION); 158 159 #define V4L2_CID_PRIVATE_COMBFILTER (V4L2_CID_USER_BTTV_BASE + 0) 160 #define V4L2_CID_PRIVATE_AUTOMUTE (V4L2_CID_USER_BTTV_BASE + 1) 161 #define V4L2_CID_PRIVATE_LUMAFILTER (V4L2_CID_USER_BTTV_BASE + 2) 162 #define V4L2_CID_PRIVATE_AGC_CRUSH (V4L2_CID_USER_BTTV_BASE + 3) 163 #define V4L2_CID_PRIVATE_VCR_HACK (V4L2_CID_USER_BTTV_BASE + 4) 164 #define V4L2_CID_PRIVATE_WHITECRUSH_LOWER (V4L2_CID_USER_BTTV_BASE + 5) 165 #define V4L2_CID_PRIVATE_WHITECRUSH_UPPER (V4L2_CID_USER_BTTV_BASE + 6) 166 #define V4L2_CID_PRIVATE_UV_RATIO (V4L2_CID_USER_BTTV_BASE + 7) 167 #define V4L2_CID_PRIVATE_FULL_LUMA_RANGE (V4L2_CID_USER_BTTV_BASE + 8) 168 #define V4L2_CID_PRIVATE_CORING (V4L2_CID_USER_BTTV_BASE + 9) 169 170 /* ----------------------------------------------------------------------- */ 171 /* sysfs */ 172 173 static ssize_t card_show(struct device *cd, 174 struct device_attribute *attr, char *buf) 175 { 176 struct video_device *vfd = to_video_device(cd); 177 struct bttv *btv = video_get_drvdata(vfd); 178 return sprintf(buf, "%d\n", btv ? btv->c.type : UNSET); 179 } 180 static DEVICE_ATTR_RO(card); 181 182 /* ----------------------------------------------------------------------- */ 183 /* dvb auto-load setup */ 184 #if defined(CONFIG_MODULES) && defined(MODULE) 185 static void request_module_async(struct work_struct *work) 186 { 187 request_module("dvb-bt8xx"); 188 } 189 190 static void request_modules(struct bttv *dev) 191 { 192 INIT_WORK(&dev->request_module_wk, request_module_async); 193 schedule_work(&dev->request_module_wk); 194 } 195 196 static void flush_request_modules(struct bttv *dev) 197 { 198 flush_work(&dev->request_module_wk); 199 } 200 #else 201 #define request_modules(dev) 202 #define flush_request_modules(dev) do {} while(0) 203 #endif /* CONFIG_MODULES */ 204 205 206 /* ----------------------------------------------------------------------- */ 207 /* static data */ 208 209 /* special timing tables from conexant... */ 210 static u8 SRAM_Table[][60] = 211 { 212 /* PAL digital input over GPIO[7:0] */ 213 { 214 45, // 45 bytes following 215 0x36,0x11,0x01,0x00,0x90,0x02,0x05,0x10,0x04,0x16, 216 0x12,0x05,0x11,0x00,0x04,0x12,0xC0,0x00,0x31,0x00, 217 0x06,0x51,0x08,0x03,0x89,0x08,0x07,0xC0,0x44,0x00, 218 0x81,0x01,0x01,0xA9,0x0D,0x02,0x02,0x50,0x03,0x37, 219 0x37,0x00,0xAF,0x21,0x00 220 }, 221 /* NTSC digital input over GPIO[7:0] */ 222 { 223 51, // 51 bytes following 224 0x0C,0xC0,0x00,0x00,0x90,0x02,0x03,0x10,0x03,0x06, 225 0x10,0x04,0x12,0x12,0x05,0x02,0x13,0x04,0x19,0x00, 226 0x04,0x39,0x00,0x06,0x59,0x08,0x03,0x83,0x08,0x07, 227 0x03,0x50,0x00,0xC0,0x40,0x00,0x86,0x01,0x01,0xA6, 228 0x0D,0x02,0x03,0x11,0x01,0x05,0x37,0x00,0xAC,0x21, 229 0x00, 230 }, 231 // TGB_NTSC392 // quartzsight 232 // This table has been modified to be used for Fusion Rev D 233 { 234 0x2A, // size of table = 42 235 0x06, 0x08, 0x04, 0x0a, 0xc0, 0x00, 0x18, 0x08, 0x03, 0x24, 236 0x08, 0x07, 0x02, 0x90, 0x02, 0x08, 0x10, 0x04, 0x0c, 0x10, 237 0x05, 0x2c, 0x11, 0x04, 0x55, 0x48, 0x00, 0x05, 0x50, 0x00, 238 0xbf, 0x0c, 0x02, 0x2f, 0x3d, 0x00, 0x2f, 0x3f, 0x00, 0xc3, 239 0x20, 0x00 240 } 241 }; 242 243 /* minhdelayx1 first video pixel we can capture on a line and 244 hdelayx1 start of active video, both relative to rising edge of 245 /HRESET pulse (0H) in 1 / fCLKx1. 246 swidth width of active video and 247 totalwidth total line width, both in 1 / fCLKx1. 248 sqwidth total line width in square pixels. 249 vdelay start of active video in 2 * field lines relative to 250 trailing edge of /VRESET pulse (VDELAY register). 251 sheight height of active video in 2 * field lines. 252 extraheight Added to sheight for cropcap.bounds.height only 253 videostart0 ITU-R frame line number of the line corresponding 254 to vdelay in the first field. */ 255 #define CROPCAP(minhdelayx1, hdelayx1, swidth, totalwidth, sqwidth, \ 256 vdelay, sheight, extraheight, videostart0) \ 257 .cropcap.bounds.left = minhdelayx1, \ 258 /* * 2 because vertically we count field lines times two, */ \ 259 /* e.g. 23 * 2 to 23 * 2 + 576 in PAL-BGHI defrect. */ \ 260 .cropcap.bounds.top = (videostart0) * 2 - (vdelay) + MIN_VDELAY, \ 261 /* 4 is a safety margin at the end of the line. */ \ 262 .cropcap.bounds.width = (totalwidth) - (minhdelayx1) - 4, \ 263 .cropcap.bounds.height = (sheight) + (extraheight) + (vdelay) - \ 264 MIN_VDELAY, \ 265 .cropcap.defrect.left = hdelayx1, \ 266 .cropcap.defrect.top = (videostart0) * 2, \ 267 .cropcap.defrect.width = swidth, \ 268 .cropcap.defrect.height = sheight, \ 269 .cropcap.pixelaspect.numerator = totalwidth, \ 270 .cropcap.pixelaspect.denominator = sqwidth, 271 272 const struct bttv_tvnorm bttv_tvnorms[] = { 273 /* PAL-BDGHI */ 274 /* max. active video is actually 922, but 924 is divisible by 4 and 3! */ 275 /* actually, max active PAL with HSCALE=0 is 948, NTSC is 768 - nil */ 276 { 277 .v4l2_id = V4L2_STD_PAL, 278 .name = "PAL", 279 .Fsc = 35468950, 280 .swidth = 924, 281 .sheight = 576, 282 .totalwidth = 1135, 283 .adelay = 0x7f, 284 .bdelay = 0x72, 285 .iform = (BT848_IFORM_PAL_BDGHI|BT848_IFORM_XT1), 286 .scaledtwidth = 1135, 287 .hdelayx1 = 186, 288 .hactivex1 = 924, 289 .vdelay = 0x20, 290 .vbipack = 255, /* min (2048 / 4, 0x1ff) & 0xff */ 291 .sram = 0, 292 /* ITU-R frame line number of the first VBI line 293 we can capture, of the first and second field. 294 The last line is determined by cropcap.bounds. */ 295 .vbistart = { 7, 320 }, 296 CROPCAP(/* minhdelayx1 */ 68, 297 /* hdelayx1 */ 186, 298 /* Should be (768 * 1135 + 944 / 2) / 944. 299 cropcap.defrect is used for image width 300 checks, so we keep the old value 924. */ 301 /* swidth */ 924, 302 /* totalwidth */ 1135, 303 /* sqwidth */ 944, 304 /* vdelay */ 0x20, 305 /* sheight */ 576, 306 /* bt878 (and bt848?) can capture another 307 line below active video. */ 308 /* extraheight */ 2, 309 /* videostart0 */ 23) 310 },{ 311 .v4l2_id = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR, 312 .name = "NTSC", 313 .Fsc = 28636363, 314 .swidth = 768, 315 .sheight = 480, 316 .totalwidth = 910, 317 .adelay = 0x68, 318 .bdelay = 0x5d, 319 .iform = (BT848_IFORM_NTSC|BT848_IFORM_XT0), 320 .scaledtwidth = 910, 321 .hdelayx1 = 128, 322 .hactivex1 = 910, 323 .vdelay = 0x1a, 324 .vbipack = 144, /* min (1600 / 4, 0x1ff) & 0xff */ 325 .sram = 1, 326 .vbistart = { 10, 273 }, 327 CROPCAP(/* minhdelayx1 */ 68, 328 /* hdelayx1 */ 128, 329 /* Should be (640 * 910 + 780 / 2) / 780? */ 330 /* swidth */ 768, 331 /* totalwidth */ 910, 332 /* sqwidth */ 780, 333 /* vdelay */ 0x1a, 334 /* sheight */ 480, 335 /* extraheight */ 0, 336 /* videostart0 */ 23) 337 },{ 338 .v4l2_id = V4L2_STD_SECAM, 339 .name = "SECAM", 340 .Fsc = 35468950, 341 .swidth = 924, 342 .sheight = 576, 343 .totalwidth = 1135, 344 .adelay = 0x7f, 345 .bdelay = 0xb0, 346 .iform = (BT848_IFORM_SECAM|BT848_IFORM_XT1), 347 .scaledtwidth = 1135, 348 .hdelayx1 = 186, 349 .hactivex1 = 922, 350 .vdelay = 0x20, 351 .vbipack = 255, 352 .sram = 0, /* like PAL, correct? */ 353 .vbistart = { 7, 320 }, 354 CROPCAP(/* minhdelayx1 */ 68, 355 /* hdelayx1 */ 186, 356 /* swidth */ 924, 357 /* totalwidth */ 1135, 358 /* sqwidth */ 944, 359 /* vdelay */ 0x20, 360 /* sheight */ 576, 361 /* extraheight */ 0, 362 /* videostart0 */ 23) 363 },{ 364 .v4l2_id = V4L2_STD_PAL_Nc, 365 .name = "PAL-Nc", 366 .Fsc = 28636363, 367 .swidth = 640, 368 .sheight = 576, 369 .totalwidth = 910, 370 .adelay = 0x68, 371 .bdelay = 0x5d, 372 .iform = (BT848_IFORM_PAL_NC|BT848_IFORM_XT0), 373 .scaledtwidth = 780, 374 .hdelayx1 = 130, 375 .hactivex1 = 734, 376 .vdelay = 0x1a, 377 .vbipack = 144, 378 .sram = -1, 379 .vbistart = { 7, 320 }, 380 CROPCAP(/* minhdelayx1 */ 68, 381 /* hdelayx1 */ 130, 382 /* swidth */ (640 * 910 + 780 / 2) / 780, 383 /* totalwidth */ 910, 384 /* sqwidth */ 780, 385 /* vdelay */ 0x1a, 386 /* sheight */ 576, 387 /* extraheight */ 0, 388 /* videostart0 */ 23) 389 },{ 390 .v4l2_id = V4L2_STD_PAL_M, 391 .name = "PAL-M", 392 .Fsc = 28636363, 393 .swidth = 640, 394 .sheight = 480, 395 .totalwidth = 910, 396 .adelay = 0x68, 397 .bdelay = 0x5d, 398 .iform = (BT848_IFORM_PAL_M|BT848_IFORM_XT0), 399 .scaledtwidth = 780, 400 .hdelayx1 = 135, 401 .hactivex1 = 754, 402 .vdelay = 0x1a, 403 .vbipack = 144, 404 .sram = -1, 405 .vbistart = { 10, 273 }, 406 CROPCAP(/* minhdelayx1 */ 68, 407 /* hdelayx1 */ 135, 408 /* swidth */ (640 * 910 + 780 / 2) / 780, 409 /* totalwidth */ 910, 410 /* sqwidth */ 780, 411 /* vdelay */ 0x1a, 412 /* sheight */ 480, 413 /* extraheight */ 0, 414 /* videostart0 */ 23) 415 },{ 416 .v4l2_id = V4L2_STD_PAL_N, 417 .name = "PAL-N", 418 .Fsc = 35468950, 419 .swidth = 768, 420 .sheight = 576, 421 .totalwidth = 1135, 422 .adelay = 0x7f, 423 .bdelay = 0x72, 424 .iform = (BT848_IFORM_PAL_N|BT848_IFORM_XT1), 425 .scaledtwidth = 944, 426 .hdelayx1 = 186, 427 .hactivex1 = 922, 428 .vdelay = 0x20, 429 .vbipack = 144, 430 .sram = -1, 431 .vbistart = { 7, 320 }, 432 CROPCAP(/* minhdelayx1 */ 68, 433 /* hdelayx1 */ 186, 434 /* swidth */ (768 * 1135 + 944 / 2) / 944, 435 /* totalwidth */ 1135, 436 /* sqwidth */ 944, 437 /* vdelay */ 0x20, 438 /* sheight */ 576, 439 /* extraheight */ 0, 440 /* videostart0 */ 23) 441 },{ 442 .v4l2_id = V4L2_STD_NTSC_M_JP, 443 .name = "NTSC-JP", 444 .Fsc = 28636363, 445 .swidth = 640, 446 .sheight = 480, 447 .totalwidth = 910, 448 .adelay = 0x68, 449 .bdelay = 0x5d, 450 .iform = (BT848_IFORM_NTSC_J|BT848_IFORM_XT0), 451 .scaledtwidth = 780, 452 .hdelayx1 = 135, 453 .hactivex1 = 754, 454 .vdelay = 0x16, 455 .vbipack = 144, 456 .sram = -1, 457 .vbistart = { 10, 273 }, 458 CROPCAP(/* minhdelayx1 */ 68, 459 /* hdelayx1 */ 135, 460 /* swidth */ (640 * 910 + 780 / 2) / 780, 461 /* totalwidth */ 910, 462 /* sqwidth */ 780, 463 /* vdelay */ 0x16, 464 /* sheight */ 480, 465 /* extraheight */ 0, 466 /* videostart0 */ 23) 467 },{ 468 /* that one hopefully works with the strange timing 469 * which video recorders produce when playing a NTSC 470 * tape on a PAL TV ... */ 471 .v4l2_id = V4L2_STD_PAL_60, 472 .name = "PAL-60", 473 .Fsc = 35468950, 474 .swidth = 924, 475 .sheight = 480, 476 .totalwidth = 1135, 477 .adelay = 0x7f, 478 .bdelay = 0x72, 479 .iform = (BT848_IFORM_PAL_BDGHI|BT848_IFORM_XT1), 480 .scaledtwidth = 1135, 481 .hdelayx1 = 186, 482 .hactivex1 = 924, 483 .vdelay = 0x1a, 484 .vbipack = 255, 485 .vtotal = 524, 486 .sram = -1, 487 .vbistart = { 10, 273 }, 488 CROPCAP(/* minhdelayx1 */ 68, 489 /* hdelayx1 */ 186, 490 /* swidth */ 924, 491 /* totalwidth */ 1135, 492 /* sqwidth */ 944, 493 /* vdelay */ 0x1a, 494 /* sheight */ 480, 495 /* extraheight */ 0, 496 /* videostart0 */ 23) 497 } 498 }; 499 static const unsigned int BTTV_TVNORMS = ARRAY_SIZE(bttv_tvnorms); 500 501 /* ----------------------------------------------------------------------- */ 502 /* bttv format list 503 packed pixel formats must come first */ 504 static const struct bttv_format formats[] = { 505 { 506 .fourcc = V4L2_PIX_FMT_GREY, 507 .btformat = BT848_COLOR_FMT_Y8, 508 .depth = 8, 509 .flags = FORMAT_FLAGS_PACKED, 510 },{ 511 .fourcc = V4L2_PIX_FMT_HI240, 512 .btformat = BT848_COLOR_FMT_RGB8, 513 .depth = 8, 514 .flags = FORMAT_FLAGS_PACKED | FORMAT_FLAGS_DITHER, 515 },{ 516 .fourcc = V4L2_PIX_FMT_RGB555, 517 .btformat = BT848_COLOR_FMT_RGB15, 518 .depth = 16, 519 .flags = FORMAT_FLAGS_PACKED, 520 },{ 521 .fourcc = V4L2_PIX_FMT_RGB555X, 522 .btformat = BT848_COLOR_FMT_RGB15, 523 .btswap = 0x03, /* byteswap */ 524 .depth = 16, 525 .flags = FORMAT_FLAGS_PACKED, 526 },{ 527 .fourcc = V4L2_PIX_FMT_RGB565, 528 .btformat = BT848_COLOR_FMT_RGB16, 529 .depth = 16, 530 .flags = FORMAT_FLAGS_PACKED, 531 },{ 532 .fourcc = V4L2_PIX_FMT_RGB565X, 533 .btformat = BT848_COLOR_FMT_RGB16, 534 .btswap = 0x03, /* byteswap */ 535 .depth = 16, 536 .flags = FORMAT_FLAGS_PACKED, 537 },{ 538 .fourcc = V4L2_PIX_FMT_BGR24, 539 .btformat = BT848_COLOR_FMT_RGB24, 540 .depth = 24, 541 .flags = FORMAT_FLAGS_PACKED, 542 },{ 543 .fourcc = V4L2_PIX_FMT_BGR32, 544 .btformat = BT848_COLOR_FMT_RGB32, 545 .depth = 32, 546 .flags = FORMAT_FLAGS_PACKED, 547 },{ 548 .fourcc = V4L2_PIX_FMT_RGB32, 549 .btformat = BT848_COLOR_FMT_RGB32, 550 .btswap = 0x0f, /* byte+word swap */ 551 .depth = 32, 552 .flags = FORMAT_FLAGS_PACKED, 553 },{ 554 .fourcc = V4L2_PIX_FMT_YUYV, 555 .btformat = BT848_COLOR_FMT_YUY2, 556 .depth = 16, 557 .flags = FORMAT_FLAGS_PACKED, 558 },{ 559 .fourcc = V4L2_PIX_FMT_UYVY, 560 .btformat = BT848_COLOR_FMT_YUY2, 561 .btswap = 0x03, /* byteswap */ 562 .depth = 16, 563 .flags = FORMAT_FLAGS_PACKED, 564 },{ 565 .fourcc = V4L2_PIX_FMT_YUV422P, 566 .btformat = BT848_COLOR_FMT_YCrCb422, 567 .depth = 16, 568 .flags = FORMAT_FLAGS_PLANAR, 569 .hshift = 1, 570 .vshift = 0, 571 },{ 572 .fourcc = V4L2_PIX_FMT_YUV420, 573 .btformat = BT848_COLOR_FMT_YCrCb422, 574 .depth = 12, 575 .flags = FORMAT_FLAGS_PLANAR, 576 .hshift = 1, 577 .vshift = 1, 578 },{ 579 .fourcc = V4L2_PIX_FMT_YVU420, 580 .btformat = BT848_COLOR_FMT_YCrCb422, 581 .depth = 12, 582 .flags = FORMAT_FLAGS_PLANAR | FORMAT_FLAGS_CrCb, 583 .hshift = 1, 584 .vshift = 1, 585 },{ 586 .fourcc = V4L2_PIX_FMT_YUV411P, 587 .btformat = BT848_COLOR_FMT_YCrCb411, 588 .depth = 12, 589 .flags = FORMAT_FLAGS_PLANAR, 590 .hshift = 2, 591 .vshift = 0, 592 },{ 593 .fourcc = V4L2_PIX_FMT_YUV410, 594 .btformat = BT848_COLOR_FMT_YCrCb411, 595 .depth = 9, 596 .flags = FORMAT_FLAGS_PLANAR, 597 .hshift = 2, 598 .vshift = 2, 599 },{ 600 .fourcc = V4L2_PIX_FMT_YVU410, 601 .btformat = BT848_COLOR_FMT_YCrCb411, 602 .depth = 9, 603 .flags = FORMAT_FLAGS_PLANAR | FORMAT_FLAGS_CrCb, 604 .hshift = 2, 605 .vshift = 2, 606 },{ 607 .fourcc = -1, 608 .btformat = BT848_COLOR_FMT_RAW, 609 .depth = 8, 610 .flags = FORMAT_FLAGS_RAW, 611 } 612 }; 613 static const unsigned int FORMATS = ARRAY_SIZE(formats); 614 615 /* ----------------------------------------------------------------------- */ 616 /* resource management */ 617 618 /* 619 RESOURCE_ allocated by freed by 620 621 VIDEO_READ bttv_read 1) bttv_read 2) 622 623 VIDEO_STREAM VIDIOC_STREAMON VIDIOC_STREAMOFF 624 VIDIOC_QBUF 1) bttv_release 625 VIDIOCMCAPTURE 1) 626 627 VBI VIDIOC_STREAMON VIDIOC_STREAMOFF 628 VIDIOC_QBUF 1) bttv_release 629 bttv_read, bttv_poll 1) 3) 630 631 1) The resource must be allocated when we enter buffer prepare functions 632 and remain allocated while buffers are in the DMA queue. 633 2) This is a single frame read. 634 3) This is a continuous read, implies VIDIOC_STREAMON. 635 636 Note this driver permits video input and standard changes regardless if 637 resources are allocated. 638 */ 639 640 #define VBI_RESOURCES (RESOURCE_VBI) 641 #define VIDEO_RESOURCES (RESOURCE_VIDEO_READ | \ 642 RESOURCE_VIDEO_STREAM) 643 644 int check_alloc_btres_lock(struct bttv *btv, int bit) 645 { 646 int xbits; /* mutual exclusive resources */ 647 648 xbits = bit; 649 if (bit & (RESOURCE_VIDEO_READ | RESOURCE_VIDEO_STREAM)) 650 xbits |= RESOURCE_VIDEO_READ | RESOURCE_VIDEO_STREAM; 651 652 /* is it free? */ 653 if (btv->resources & xbits) { 654 /* no, someone else uses it */ 655 goto fail; 656 } 657 658 if ((bit & VIDEO_RESOURCES) 659 && 0 == (btv->resources & VIDEO_RESOURCES)) { 660 /* Do crop - use current, don't - use default parameters. */ 661 __s32 top = btv->crop[!!btv->do_crop].rect.top; 662 663 if (btv->vbi_end > top) 664 goto fail; 665 666 /* We cannot capture the same line as video and VBI data. 667 Claim scan lines crop[].rect.top to bottom. */ 668 btv->crop_start = top; 669 } else if (bit & VBI_RESOURCES) { 670 __s32 end = btv->vbi_fmt.end; 671 672 if (end > btv->crop_start) 673 goto fail; 674 675 /* Claim scan lines above btv->vbi_fmt.end. */ 676 btv->vbi_end = end; 677 } 678 679 /* it's free, grab it */ 680 btv->resources |= bit; 681 return 1; 682 683 fail: 684 return 0; 685 } 686 687 static 688 int check_btres(struct bttv *btv, int bit) 689 { 690 return (btv->resources & bit); 691 } 692 693 static 694 int locked_btres(struct bttv *btv, int bit) 695 { 696 return (btv->resources & bit); 697 } 698 699 /* Call with btv->lock down. */ 700 static void 701 disclaim_vbi_lines(struct bttv *btv) 702 { 703 btv->vbi_end = 0; 704 } 705 706 /* Call with btv->lock down. */ 707 static void 708 disclaim_video_lines(struct bttv *btv) 709 { 710 const struct bttv_tvnorm *tvnorm; 711 u8 crop; 712 713 tvnorm = &bttv_tvnorms[btv->tvnorm]; 714 btv->crop_start = tvnorm->cropcap.bounds.top 715 + tvnorm->cropcap.bounds.height; 716 717 /* VBI capturing ends at VDELAY, start of video capturing, no 718 matter how many lines the VBI RISC program expects. When video 719 capturing is off, it shall no longer "preempt" VBI capturing, 720 so we set VDELAY to maximum. */ 721 crop = btread(BT848_E_CROP) | 0xc0; 722 btwrite(crop, BT848_E_CROP); 723 btwrite(0xfe, BT848_E_VDELAY_LO); 724 btwrite(crop, BT848_O_CROP); 725 btwrite(0xfe, BT848_O_VDELAY_LO); 726 } 727 728 void free_btres_lock(struct bttv *btv, int bits) 729 { 730 if ((btv->resources & bits) != bits) { 731 /* trying to free resources not allocated by us ... */ 732 pr_err("BUG! (btres)\n"); 733 } 734 btv->resources &= ~bits; 735 736 bits = btv->resources; 737 738 if (0 == (bits & VIDEO_RESOURCES)) 739 disclaim_video_lines(btv); 740 741 if (0 == (bits & VBI_RESOURCES)) 742 disclaim_vbi_lines(btv); 743 } 744 745 /* ----------------------------------------------------------------------- */ 746 /* If Bt848a or Bt849, use PLL for PAL/SECAM and crystal for NTSC */ 747 748 /* Frequency = (F_input / PLL_X) * PLL_I.PLL_F/PLL_C 749 PLL_X = Reference pre-divider (0=1, 1=2) 750 PLL_C = Post divider (0=6, 1=4) 751 PLL_I = Integer input 752 PLL_F = Fractional input 753 754 F_input = 28.636363 MHz: 755 PAL (CLKx2 = 35.46895 MHz): PLL_X = 1, PLL_I = 0x0E, PLL_F = 0xDCF9, PLL_C = 0 756 */ 757 758 static void set_pll_freq(struct bttv *btv, unsigned int fin, unsigned int fout) 759 { 760 unsigned char fl, fh, fi; 761 762 /* prevent overflows */ 763 fin/=4; 764 fout/=4; 765 766 fout*=12; 767 fi=fout/fin; 768 769 fout=(fout%fin)*256; 770 fh=fout/fin; 771 772 fout=(fout%fin)*256; 773 fl=fout/fin; 774 775 btwrite(fl, BT848_PLL_F_LO); 776 btwrite(fh, BT848_PLL_F_HI); 777 btwrite(fi|BT848_PLL_X, BT848_PLL_XCI); 778 } 779 780 static void set_pll(struct bttv *btv) 781 { 782 int i; 783 784 if (!btv->pll.pll_crystal) 785 return; 786 787 if (btv->pll.pll_ofreq == btv->pll.pll_current) { 788 dprintk("%d: PLL: no change required\n", btv->c.nr); 789 return; 790 } 791 792 if (btv->pll.pll_ifreq == btv->pll.pll_ofreq) { 793 /* no PLL needed */ 794 if (btv->pll.pll_current == 0) 795 return; 796 if (bttv_verbose) 797 pr_info("%d: PLL can sleep, using XTAL (%d)\n", 798 btv->c.nr, btv->pll.pll_ifreq); 799 btwrite(0x00,BT848_TGCTRL); 800 btwrite(0x00,BT848_PLL_XCI); 801 btv->pll.pll_current = 0; 802 return; 803 } 804 805 if (bttv_verbose) 806 pr_info("%d: Setting PLL: %d => %d (needs up to 100ms)\n", 807 btv->c.nr, 808 btv->pll.pll_ifreq, btv->pll.pll_ofreq); 809 set_pll_freq(btv, btv->pll.pll_ifreq, btv->pll.pll_ofreq); 810 811 for (i=0; i<10; i++) { 812 /* Let other people run while the PLL stabilizes */ 813 msleep(10); 814 815 if (btread(BT848_DSTATUS) & BT848_DSTATUS_PLOCK) { 816 btwrite(0,BT848_DSTATUS); 817 } else { 818 btwrite(0x08,BT848_TGCTRL); 819 btv->pll.pll_current = btv->pll.pll_ofreq; 820 if (bttv_verbose) 821 pr_info("PLL set ok\n"); 822 return; 823 } 824 } 825 btv->pll.pll_current = -1; 826 if (bttv_verbose) 827 pr_info("Setting PLL failed\n"); 828 return; 829 } 830 831 /* used to switch between the bt848's analog/digital video capture modes */ 832 static void bt848A_set_timing(struct bttv *btv) 833 { 834 int i, len; 835 int table_idx = bttv_tvnorms[btv->tvnorm].sram; 836 int fsc = bttv_tvnorms[btv->tvnorm].Fsc; 837 838 if (btv->input == btv->dig) { 839 dprintk("%d: load digital timing table (table_idx=%d)\n", 840 btv->c.nr,table_idx); 841 842 /* timing change...reset timing generator address */ 843 btwrite(0x00, BT848_TGCTRL); 844 btwrite(0x02, BT848_TGCTRL); 845 btwrite(0x00, BT848_TGCTRL); 846 847 len=SRAM_Table[table_idx][0]; 848 for(i = 1; i <= len; i++) 849 btwrite(SRAM_Table[table_idx][i],BT848_TGLB); 850 btv->pll.pll_ofreq = 27000000; 851 852 set_pll(btv); 853 btwrite(0x11, BT848_TGCTRL); 854 btwrite(0x41, BT848_DVSIF); 855 } else { 856 btv->pll.pll_ofreq = fsc; 857 set_pll(btv); 858 btwrite(0x0, BT848_DVSIF); 859 } 860 } 861 862 /* ----------------------------------------------------------------------- */ 863 864 static void bt848_bright(struct bttv *btv, int bright) 865 { 866 int value; 867 868 // printk("set bright: %d\n", bright); // DEBUG 869 btv->bright = bright; 870 871 /* We want -128 to 127 we get 0-65535 */ 872 value = (bright >> 8) - 128; 873 btwrite(value & 0xff, BT848_BRIGHT); 874 } 875 876 static void bt848_hue(struct bttv *btv, int hue) 877 { 878 int value; 879 880 btv->hue = hue; 881 882 /* -128 to 127 */ 883 value = (hue >> 8) - 128; 884 btwrite(value & 0xff, BT848_HUE); 885 } 886 887 static void bt848_contrast(struct bttv *btv, int cont) 888 { 889 int value,hibit; 890 891 btv->contrast = cont; 892 893 /* 0-511 */ 894 value = (cont >> 7); 895 hibit = (value >> 6) & 4; 896 btwrite(value & 0xff, BT848_CONTRAST_LO); 897 btaor(hibit, ~4, BT848_E_CONTROL); 898 btaor(hibit, ~4, BT848_O_CONTROL); 899 } 900 901 static void bt848_sat(struct bttv *btv, int color) 902 { 903 int val_u,val_v,hibits; 904 905 btv->saturation = color; 906 907 /* 0-511 for the color */ 908 val_u = ((color * btv->opt_uv_ratio) / 50) >> 7; 909 val_v = (((color * (100 - btv->opt_uv_ratio) / 50) >>7)*180L)/254; 910 hibits = (val_u >> 7) & 2; 911 hibits |= (val_v >> 8) & 1; 912 btwrite(val_u & 0xff, BT848_SAT_U_LO); 913 btwrite(val_v & 0xff, BT848_SAT_V_LO); 914 btaor(hibits, ~3, BT848_E_CONTROL); 915 btaor(hibits, ~3, BT848_O_CONTROL); 916 } 917 918 /* ----------------------------------------------------------------------- */ 919 920 static int 921 video_mux(struct bttv *btv, unsigned int input) 922 { 923 int mux,mask2; 924 925 if (input >= bttv_tvcards[btv->c.type].video_inputs) 926 return -EINVAL; 927 928 /* needed by RemoteVideo MX */ 929 mask2 = bttv_tvcards[btv->c.type].gpiomask2; 930 if (mask2) 931 gpio_inout(mask2,mask2); 932 933 if (input == btv->svhs) { 934 btor(BT848_CONTROL_COMP, BT848_E_CONTROL); 935 btor(BT848_CONTROL_COMP, BT848_O_CONTROL); 936 } else { 937 btand(~BT848_CONTROL_COMP, BT848_E_CONTROL); 938 btand(~BT848_CONTROL_COMP, BT848_O_CONTROL); 939 } 940 mux = bttv_muxsel(btv, input); 941 btaor(mux<<5, ~(3<<5), BT848_IFORM); 942 dprintk("%d: video mux: input=%d mux=%d\n", btv->c.nr, input, mux); 943 944 /* card specific hook */ 945 if(bttv_tvcards[btv->c.type].muxsel_hook) 946 bttv_tvcards[btv->c.type].muxsel_hook (btv, input); 947 return 0; 948 } 949 950 static char *audio_modes[] = { 951 "audio: tuner", "audio: radio", "audio: extern", 952 "audio: intern", "audio: mute" 953 }; 954 955 static void 956 audio_mux_gpio(struct bttv *btv, int input, int mute) 957 { 958 int gpio_val, signal, mute_gpio; 959 960 gpio_inout(bttv_tvcards[btv->c.type].gpiomask, 961 bttv_tvcards[btv->c.type].gpiomask); 962 signal = btread(BT848_DSTATUS) & BT848_DSTATUS_HLOC; 963 964 /* automute */ 965 mute_gpio = mute || (btv->opt_automute && (!signal || !btv->users) 966 && !btv->has_radio_tuner); 967 968 if (mute_gpio) 969 gpio_val = bttv_tvcards[btv->c.type].gpiomute; 970 else 971 gpio_val = bttv_tvcards[btv->c.type].gpiomux[input]; 972 973 switch (btv->c.type) { 974 case BTTV_BOARD_VOODOOTV_FM: 975 case BTTV_BOARD_VOODOOTV_200: 976 gpio_val = bttv_tda9880_setnorm(btv, gpio_val); 977 break; 978 979 default: 980 gpio_bits(bttv_tvcards[btv->c.type].gpiomask, gpio_val); 981 } 982 983 if (bttv_gpio) 984 bttv_gpio_tracking(btv, audio_modes[mute_gpio ? 4 : input]); 985 } 986 987 static int 988 audio_mute(struct bttv *btv, int mute) 989 { 990 struct v4l2_ctrl *ctrl; 991 992 audio_mux_gpio(btv, btv->audio_input, mute); 993 994 if (btv->sd_msp34xx) { 995 ctrl = v4l2_ctrl_find(btv->sd_msp34xx->ctrl_handler, V4L2_CID_AUDIO_MUTE); 996 if (ctrl) 997 v4l2_ctrl_s_ctrl(ctrl, mute); 998 } 999 if (btv->sd_tvaudio) { 1000 ctrl = v4l2_ctrl_find(btv->sd_tvaudio->ctrl_handler, V4L2_CID_AUDIO_MUTE); 1001 if (ctrl) 1002 v4l2_ctrl_s_ctrl(ctrl, mute); 1003 } 1004 if (btv->sd_tda7432) { 1005 ctrl = v4l2_ctrl_find(btv->sd_tda7432->ctrl_handler, V4L2_CID_AUDIO_MUTE); 1006 if (ctrl) 1007 v4l2_ctrl_s_ctrl(ctrl, mute); 1008 } 1009 return 0; 1010 } 1011 1012 static int 1013 audio_input(struct bttv *btv, int input) 1014 { 1015 audio_mux_gpio(btv, input, btv->mute); 1016 1017 if (btv->sd_msp34xx) { 1018 u32 in; 1019 1020 /* Note: the inputs tuner/radio/extern/intern are translated 1021 to msp routings. This assumes common behavior for all msp3400 1022 based TV cards. When this assumption fails, then the 1023 specific MSP routing must be added to the card table. 1024 For now this is sufficient. */ 1025 switch (input) { 1026 case TVAUDIO_INPUT_RADIO: 1027 /* Some boards need the msp do to the radio demod */ 1028 if (btv->radio_uses_msp_demodulator) { 1029 in = MSP_INPUT_DEFAULT; 1030 break; 1031 } 1032 in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, 1033 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART); 1034 break; 1035 case TVAUDIO_INPUT_EXTERN: 1036 in = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, 1037 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART); 1038 break; 1039 case TVAUDIO_INPUT_INTERN: 1040 /* Yes, this is the same input as for RADIO. I doubt 1041 if this is ever used. The only board with an INTERN 1042 input is the BTTV_BOARD_AVERMEDIA98. I wonder how 1043 that was tested. My guess is that the whole INTERN 1044 input does not work. */ 1045 in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, 1046 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART); 1047 break; 1048 case TVAUDIO_INPUT_TUNER: 1049 default: 1050 /* This is the only card that uses TUNER2, and afaik, 1051 is the only difference between the VOODOOTV_FM 1052 and VOODOOTV_200 */ 1053 if (btv->c.type == BTTV_BOARD_VOODOOTV_200) 1054 in = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER2, \ 1055 MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER); 1056 else 1057 in = MSP_INPUT_DEFAULT; 1058 break; 1059 } 1060 v4l2_subdev_call(btv->sd_msp34xx, audio, s_routing, 1061 in, MSP_OUTPUT_DEFAULT, 0); 1062 } 1063 if (btv->sd_tvaudio) { 1064 v4l2_subdev_call(btv->sd_tvaudio, audio, s_routing, 1065 input, 0, 0); 1066 } 1067 return 0; 1068 } 1069 1070 static void 1071 bttv_crop_calc_limits(struct bttv_crop *c) 1072 { 1073 /* Scale factor min. 1:1, max. 16:1. Min. image size 1074 48 x 32. Scaled width must be a multiple of 4. */ 1075 1076 if (1) { 1077 /* For bug compatibility with VIDIOCGCAP and image 1078 size checks in earlier driver versions. */ 1079 c->min_scaled_width = 48; 1080 c->min_scaled_height = 32; 1081 } else { 1082 c->min_scaled_width = 1083 (max_t(unsigned int, 48, c->rect.width >> 4) + 3) & ~3; 1084 c->min_scaled_height = 1085 max_t(unsigned int, 32, c->rect.height >> 4); 1086 } 1087 1088 c->max_scaled_width = c->rect.width & ~3; 1089 c->max_scaled_height = c->rect.height; 1090 } 1091 1092 static void 1093 bttv_crop_reset(struct bttv_crop *c, unsigned int norm) 1094 { 1095 c->rect = bttv_tvnorms[norm].cropcap.defrect; 1096 bttv_crop_calc_limits(c); 1097 } 1098 1099 /* Call with btv->lock down. */ 1100 static int 1101 set_tvnorm(struct bttv *btv, unsigned int norm) 1102 { 1103 const struct bttv_tvnorm *tvnorm; 1104 v4l2_std_id id; 1105 1106 WARN_ON(norm >= BTTV_TVNORMS); 1107 WARN_ON(btv->tvnorm >= BTTV_TVNORMS); 1108 1109 tvnorm = &bttv_tvnorms[norm]; 1110 1111 if (memcmp(&bttv_tvnorms[btv->tvnorm].cropcap, &tvnorm->cropcap, 1112 sizeof (tvnorm->cropcap))) { 1113 bttv_crop_reset(&btv->crop[0], norm); 1114 btv->crop[1] = btv->crop[0]; /* current = default */ 1115 1116 if (0 == (btv->resources & VIDEO_RESOURCES)) { 1117 btv->crop_start = tvnorm->cropcap.bounds.top 1118 + tvnorm->cropcap.bounds.height; 1119 } 1120 } 1121 1122 btv->tvnorm = norm; 1123 1124 btwrite(tvnorm->adelay, BT848_ADELAY); 1125 btwrite(tvnorm->bdelay, BT848_BDELAY); 1126 btaor(tvnorm->iform,~(BT848_IFORM_NORM|BT848_IFORM_XTBOTH), 1127 BT848_IFORM); 1128 btwrite(tvnorm->vbipack, BT848_VBI_PACK_SIZE); 1129 btwrite(1, BT848_VBI_PACK_DEL); 1130 bt848A_set_timing(btv); 1131 1132 switch (btv->c.type) { 1133 case BTTV_BOARD_VOODOOTV_FM: 1134 case BTTV_BOARD_VOODOOTV_200: 1135 bttv_tda9880_setnorm(btv, gpio_read()); 1136 break; 1137 } 1138 id = tvnorm->v4l2_id; 1139 bttv_call_all(btv, video, s_std, id); 1140 1141 return 0; 1142 } 1143 1144 /* Call with btv->lock down. */ 1145 static void 1146 set_input(struct bttv *btv, unsigned int input, unsigned int norm) 1147 { 1148 unsigned long flags; 1149 1150 btv->input = input; 1151 if (irq_iswitch) { 1152 spin_lock_irqsave(&btv->s_lock,flags); 1153 if (btv->curr.frame_irq) { 1154 /* active capture -> delayed input switch */ 1155 btv->new_input = input; 1156 } else { 1157 video_mux(btv,input); 1158 } 1159 spin_unlock_irqrestore(&btv->s_lock,flags); 1160 } else { 1161 video_mux(btv,input); 1162 } 1163 btv->audio_input = (btv->tuner_type != TUNER_ABSENT && input == 0) ? 1164 TVAUDIO_INPUT_TUNER : TVAUDIO_INPUT_EXTERN; 1165 audio_input(btv, btv->audio_input); 1166 set_tvnorm(btv, norm); 1167 } 1168 1169 void init_irqreg(struct bttv *btv) 1170 { 1171 /* clear status */ 1172 btwrite(0xfffffUL, BT848_INT_STAT); 1173 1174 if (bttv_tvcards[btv->c.type].no_video) { 1175 /* i2c only */ 1176 btwrite(BT848_INT_I2CDONE, 1177 BT848_INT_MASK); 1178 } else { 1179 /* full video */ 1180 btwrite((btv->triton1) | 1181 (btv->gpioirq ? BT848_INT_GPINT : 0) | 1182 BT848_INT_SCERR | 1183 (fdsr ? BT848_INT_FDSR : 0) | 1184 BT848_INT_RISCI | BT848_INT_OCERR | 1185 BT848_INT_FMTCHG|BT848_INT_HLOCK| 1186 BT848_INT_I2CDONE, 1187 BT848_INT_MASK); 1188 } 1189 } 1190 1191 static void init_bt848(struct bttv *btv) 1192 { 1193 if (bttv_tvcards[btv->c.type].no_video) { 1194 /* very basic init only */ 1195 init_irqreg(btv); 1196 return; 1197 } 1198 1199 btwrite(0x00, BT848_CAP_CTL); 1200 btwrite(BT848_COLOR_CTL_GAMMA, BT848_COLOR_CTL); 1201 btwrite(BT848_IFORM_XTAUTO | BT848_IFORM_AUTO, BT848_IFORM); 1202 1203 /* set planar and packed mode trigger points and */ 1204 /* set rising edge of inverted GPINTR pin as irq trigger */ 1205 btwrite(BT848_GPIO_DMA_CTL_PKTP_32| 1206 BT848_GPIO_DMA_CTL_PLTP1_16| 1207 BT848_GPIO_DMA_CTL_PLTP23_16| 1208 BT848_GPIO_DMA_CTL_GPINTC| 1209 BT848_GPIO_DMA_CTL_GPINTI, 1210 BT848_GPIO_DMA_CTL); 1211 1212 btwrite(0x20, BT848_E_VSCALE_HI); 1213 btwrite(0x20, BT848_O_VSCALE_HI); 1214 1215 v4l2_ctrl_handler_setup(&btv->ctrl_handler); 1216 1217 /* interrupt */ 1218 init_irqreg(btv); 1219 } 1220 1221 static void bttv_reinit_bt848(struct bttv *btv) 1222 { 1223 unsigned long flags; 1224 1225 if (bttv_verbose) 1226 pr_info("%d: reset, reinitialize\n", btv->c.nr); 1227 spin_lock_irqsave(&btv->s_lock,flags); 1228 btv->errors=0; 1229 bttv_set_dma(btv,0); 1230 spin_unlock_irqrestore(&btv->s_lock,flags); 1231 1232 init_bt848(btv); 1233 btv->pll.pll_current = -1; 1234 set_input(btv, btv->input, btv->tvnorm); 1235 } 1236 1237 static int bttv_s_ctrl(struct v4l2_ctrl *c) 1238 { 1239 struct bttv *btv = container_of(c->handler, struct bttv, ctrl_handler); 1240 int val; 1241 1242 switch (c->id) { 1243 case V4L2_CID_BRIGHTNESS: 1244 bt848_bright(btv, c->val); 1245 break; 1246 case V4L2_CID_HUE: 1247 bt848_hue(btv, c->val); 1248 break; 1249 case V4L2_CID_CONTRAST: 1250 bt848_contrast(btv, c->val); 1251 break; 1252 case V4L2_CID_SATURATION: 1253 bt848_sat(btv, c->val); 1254 break; 1255 case V4L2_CID_COLOR_KILLER: 1256 if (c->val) { 1257 btor(BT848_SCLOOP_CKILL, BT848_E_SCLOOP); 1258 btor(BT848_SCLOOP_CKILL, BT848_O_SCLOOP); 1259 } else { 1260 btand(~BT848_SCLOOP_CKILL, BT848_E_SCLOOP); 1261 btand(~BT848_SCLOOP_CKILL, BT848_O_SCLOOP); 1262 } 1263 break; 1264 case V4L2_CID_AUDIO_MUTE: 1265 audio_mute(btv, c->val); 1266 btv->mute = c->val; 1267 break; 1268 case V4L2_CID_AUDIO_VOLUME: 1269 btv->volume_gpio(btv, c->val); 1270 break; 1271 1272 case V4L2_CID_CHROMA_AGC: 1273 val = c->val ? BT848_SCLOOP_CAGC : 0; 1274 btwrite(val, BT848_E_SCLOOP); 1275 btwrite(val, BT848_O_SCLOOP); 1276 break; 1277 case V4L2_CID_PRIVATE_COMBFILTER: 1278 btv->opt_combfilter = c->val; 1279 break; 1280 case V4L2_CID_PRIVATE_LUMAFILTER: 1281 if (c->val) { 1282 btand(~BT848_CONTROL_LDEC, BT848_E_CONTROL); 1283 btand(~BT848_CONTROL_LDEC, BT848_O_CONTROL); 1284 } else { 1285 btor(BT848_CONTROL_LDEC, BT848_E_CONTROL); 1286 btor(BT848_CONTROL_LDEC, BT848_O_CONTROL); 1287 } 1288 break; 1289 case V4L2_CID_PRIVATE_AUTOMUTE: 1290 btv->opt_automute = c->val; 1291 break; 1292 case V4L2_CID_PRIVATE_AGC_CRUSH: 1293 btwrite(BT848_ADC_RESERVED | 1294 (c->val ? BT848_ADC_CRUSH : 0), 1295 BT848_ADC); 1296 break; 1297 case V4L2_CID_PRIVATE_VCR_HACK: 1298 btv->opt_vcr_hack = c->val; 1299 break; 1300 case V4L2_CID_PRIVATE_WHITECRUSH_UPPER: 1301 btwrite(c->val, BT848_WC_UP); 1302 break; 1303 case V4L2_CID_PRIVATE_WHITECRUSH_LOWER: 1304 btwrite(c->val, BT848_WC_DOWN); 1305 break; 1306 case V4L2_CID_PRIVATE_UV_RATIO: 1307 btv->opt_uv_ratio = c->val; 1308 bt848_sat(btv, btv->saturation); 1309 break; 1310 case V4L2_CID_PRIVATE_FULL_LUMA_RANGE: 1311 btaor((c->val << 7), ~BT848_OFORM_RANGE, BT848_OFORM); 1312 break; 1313 case V4L2_CID_PRIVATE_CORING: 1314 btaor((c->val << 5), ~BT848_OFORM_CORE32, BT848_OFORM); 1315 break; 1316 default: 1317 return -EINVAL; 1318 } 1319 return 0; 1320 } 1321 1322 /* ----------------------------------------------------------------------- */ 1323 1324 static const struct v4l2_ctrl_ops bttv_ctrl_ops = { 1325 .s_ctrl = bttv_s_ctrl, 1326 }; 1327 1328 static struct v4l2_ctrl_config bttv_ctrl_combfilter = { 1329 .ops = &bttv_ctrl_ops, 1330 .id = V4L2_CID_PRIVATE_COMBFILTER, 1331 .name = "Comb Filter", 1332 .type = V4L2_CTRL_TYPE_BOOLEAN, 1333 .min = 0, 1334 .max = 1, 1335 .step = 1, 1336 .def = 1, 1337 }; 1338 1339 static struct v4l2_ctrl_config bttv_ctrl_automute = { 1340 .ops = &bttv_ctrl_ops, 1341 .id = V4L2_CID_PRIVATE_AUTOMUTE, 1342 .name = "Auto Mute", 1343 .type = V4L2_CTRL_TYPE_BOOLEAN, 1344 .min = 0, 1345 .max = 1, 1346 .step = 1, 1347 .def = 1, 1348 }; 1349 1350 static struct v4l2_ctrl_config bttv_ctrl_lumafilter = { 1351 .ops = &bttv_ctrl_ops, 1352 .id = V4L2_CID_PRIVATE_LUMAFILTER, 1353 .name = "Luma Decimation Filter", 1354 .type = V4L2_CTRL_TYPE_BOOLEAN, 1355 .min = 0, 1356 .max = 1, 1357 .step = 1, 1358 .def = 1, 1359 }; 1360 1361 static struct v4l2_ctrl_config bttv_ctrl_agc_crush = { 1362 .ops = &bttv_ctrl_ops, 1363 .id = V4L2_CID_PRIVATE_AGC_CRUSH, 1364 .name = "AGC Crush", 1365 .type = V4L2_CTRL_TYPE_BOOLEAN, 1366 .min = 0, 1367 .max = 1, 1368 .step = 1, 1369 .def = 1, 1370 }; 1371 1372 static struct v4l2_ctrl_config bttv_ctrl_vcr_hack = { 1373 .ops = &bttv_ctrl_ops, 1374 .id = V4L2_CID_PRIVATE_VCR_HACK, 1375 .name = "VCR Hack", 1376 .type = V4L2_CTRL_TYPE_BOOLEAN, 1377 .min = 0, 1378 .max = 1, 1379 .step = 1, 1380 .def = 1, 1381 }; 1382 1383 static struct v4l2_ctrl_config bttv_ctrl_whitecrush_lower = { 1384 .ops = &bttv_ctrl_ops, 1385 .id = V4L2_CID_PRIVATE_WHITECRUSH_LOWER, 1386 .name = "Whitecrush Lower", 1387 .type = V4L2_CTRL_TYPE_INTEGER, 1388 .min = 0, 1389 .max = 255, 1390 .step = 1, 1391 .def = 0x7f, 1392 }; 1393 1394 static struct v4l2_ctrl_config bttv_ctrl_whitecrush_upper = { 1395 .ops = &bttv_ctrl_ops, 1396 .id = V4L2_CID_PRIVATE_WHITECRUSH_UPPER, 1397 .name = "Whitecrush Upper", 1398 .type = V4L2_CTRL_TYPE_INTEGER, 1399 .min = 0, 1400 .max = 255, 1401 .step = 1, 1402 .def = 0xcf, 1403 }; 1404 1405 static struct v4l2_ctrl_config bttv_ctrl_uv_ratio = { 1406 .ops = &bttv_ctrl_ops, 1407 .id = V4L2_CID_PRIVATE_UV_RATIO, 1408 .name = "UV Ratio", 1409 .type = V4L2_CTRL_TYPE_INTEGER, 1410 .min = 0, 1411 .max = 100, 1412 .step = 1, 1413 .def = 50, 1414 }; 1415 1416 static struct v4l2_ctrl_config bttv_ctrl_full_luma = { 1417 .ops = &bttv_ctrl_ops, 1418 .id = V4L2_CID_PRIVATE_FULL_LUMA_RANGE, 1419 .name = "Full Luma Range", 1420 .type = V4L2_CTRL_TYPE_BOOLEAN, 1421 .min = 0, 1422 .max = 1, 1423 .step = 1, 1424 }; 1425 1426 static struct v4l2_ctrl_config bttv_ctrl_coring = { 1427 .ops = &bttv_ctrl_ops, 1428 .id = V4L2_CID_PRIVATE_CORING, 1429 .name = "Coring", 1430 .type = V4L2_CTRL_TYPE_INTEGER, 1431 .min = 0, 1432 .max = 3, 1433 .step = 1, 1434 }; 1435 1436 1437 /* ----------------------------------------------------------------------- */ 1438 1439 void bttv_gpio_tracking(struct bttv *btv, char *comment) 1440 { 1441 unsigned int outbits, data; 1442 outbits = btread(BT848_GPIO_OUT_EN); 1443 data = btread(BT848_GPIO_DATA); 1444 pr_debug("%d: gpio: en=%08x, out=%08x in=%08x [%s]\n", 1445 btv->c.nr, outbits, data & outbits, data & ~outbits, comment); 1446 } 1447 1448 static const struct bttv_format* 1449 format_by_fourcc(int fourcc) 1450 { 1451 unsigned int i; 1452 1453 for (i = 0; i < FORMATS; i++) { 1454 if (-1 == formats[i].fourcc) 1455 continue; 1456 if (formats[i].fourcc == fourcc) 1457 return formats+i; 1458 } 1459 return NULL; 1460 } 1461 1462 /* ----------------------------------------------------------------------- */ 1463 /* video4linux (1) interface */ 1464 1465 static int queue_setup(struct vb2_queue *q, unsigned int *num_buffers, 1466 unsigned int *num_planes, unsigned int sizes[], 1467 struct device *alloc_devs[]) 1468 { 1469 struct bttv *btv = vb2_get_drv_priv(q); 1470 unsigned int size = btv->fmt->depth * btv->width * btv->height >> 3; 1471 1472 if (*num_planes) 1473 return sizes[0] < size ? -EINVAL : 0; 1474 *num_planes = 1; 1475 sizes[0] = size; 1476 1477 return 0; 1478 } 1479 1480 static void buf_queue(struct vb2_buffer *vb) 1481 { 1482 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 1483 struct vb2_queue *vq = vb->vb2_queue; 1484 struct bttv *btv = vb2_get_drv_priv(vq); 1485 struct bttv_buffer *buf = container_of(vbuf, struct bttv_buffer, vbuf); 1486 unsigned long flags; 1487 1488 spin_lock_irqsave(&btv->s_lock, flags); 1489 if (list_empty(&btv->capture)) { 1490 btv->loop_irq = BT848_RISC_VIDEO; 1491 if (vb2_is_streaming(&btv->vbiq)) 1492 btv->loop_irq |= BT848_RISC_VBI; 1493 bttv_set_dma(btv, BT848_CAP_CTL_CAPTURE_ODD | 1494 BT848_CAP_CTL_CAPTURE_EVEN); 1495 } 1496 list_add_tail(&buf->list, &btv->capture); 1497 spin_unlock_irqrestore(&btv->s_lock, flags); 1498 } 1499 1500 static int buf_prepare(struct vb2_buffer *vb) 1501 { 1502 struct vb2_queue *vq = vb->vb2_queue; 1503 struct bttv *btv = vb2_get_drv_priv(vq); 1504 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 1505 struct bttv_buffer *buf = container_of(vbuf, struct bttv_buffer, vbuf); 1506 unsigned int size = (btv->fmt->depth * btv->width * btv->height) >> 3; 1507 1508 if (vb2_plane_size(vb, 0) < size) 1509 return -EINVAL; 1510 vb2_set_plane_payload(vb, 0, size); 1511 1512 if (btv->field != V4L2_FIELD_ALTERNATE) { 1513 buf->vbuf.field = btv->field; 1514 } else if (btv->field_last == V4L2_FIELD_TOP) { 1515 buf->vbuf.field = V4L2_FIELD_BOTTOM; 1516 btv->field_last = V4L2_FIELD_BOTTOM; 1517 } else { 1518 buf->vbuf.field = V4L2_FIELD_TOP; 1519 btv->field_last = V4L2_FIELD_TOP; 1520 } 1521 1522 /* Allocate memory for risc struct and create the risc program. */ 1523 return bttv_buffer_risc(btv, buf); 1524 } 1525 1526 static void buf_cleanup(struct vb2_buffer *vb) 1527 { 1528 struct vb2_queue *vq = vb->vb2_queue; 1529 struct bttv *btv = vb2_get_drv_priv(vq); 1530 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 1531 struct bttv_buffer *buf = container_of(vbuf, struct bttv_buffer, vbuf); 1532 1533 btcx_riscmem_free(btv->c.pci, &buf->top); 1534 btcx_riscmem_free(btv->c.pci, &buf->bottom); 1535 } 1536 1537 static int start_streaming(struct vb2_queue *q, unsigned int count) 1538 { 1539 int seqnr = 0; 1540 struct bttv_buffer *buf; 1541 struct bttv *btv = vb2_get_drv_priv(q); 1542 1543 if (!check_alloc_btres_lock(btv, RESOURCE_VIDEO_STREAM)) { 1544 if (btv->field_count) 1545 seqnr++; 1546 while (!list_empty(&btv->capture)) { 1547 buf = list_entry(btv->capture.next, 1548 struct bttv_buffer, list); 1549 list_del(&buf->list); 1550 buf->vbuf.sequence = (btv->field_count >> 1) + seqnr++; 1551 vb2_buffer_done(&buf->vbuf.vb2_buf, 1552 VB2_BUF_STATE_QUEUED); 1553 } 1554 return -EBUSY; 1555 } 1556 if (!vb2_is_streaming(&btv->vbiq)) { 1557 init_irqreg(btv); 1558 btv->field_count = 0; 1559 } 1560 btv->framedrop = 0; 1561 1562 return 0; 1563 } 1564 1565 static void stop_streaming(struct vb2_queue *q) 1566 { 1567 unsigned long flags; 1568 struct bttv *btv = vb2_get_drv_priv(q); 1569 1570 vb2_wait_for_all_buffers(q); 1571 spin_lock_irqsave(&btv->s_lock, flags); 1572 free_btres_lock(btv, RESOURCE_VIDEO_STREAM); 1573 if (!vb2_is_streaming(&btv->vbiq)) { 1574 /* stop field counter */ 1575 btand(~BT848_INT_VSYNC, BT848_INT_MASK); 1576 } 1577 spin_unlock_irqrestore(&btv->s_lock, flags); 1578 } 1579 1580 static const struct vb2_ops bttv_video_qops = { 1581 .queue_setup = queue_setup, 1582 .buf_queue = buf_queue, 1583 .buf_prepare = buf_prepare, 1584 .buf_cleanup = buf_cleanup, 1585 .start_streaming = start_streaming, 1586 .stop_streaming = stop_streaming, 1587 }; 1588 1589 static void radio_enable(struct bttv *btv) 1590 { 1591 /* Switch to the radio tuner */ 1592 if (!btv->has_radio_tuner) { 1593 btv->has_radio_tuner = 1; 1594 bttv_call_all(btv, tuner, s_radio); 1595 btv->audio_input = TVAUDIO_INPUT_RADIO; 1596 audio_input(btv, btv->audio_input); 1597 } 1598 } 1599 1600 static int bttv_s_std(struct file *file, void *priv, v4l2_std_id id) 1601 { 1602 struct bttv *btv = video_drvdata(file); 1603 unsigned int i; 1604 1605 for (i = 0; i < BTTV_TVNORMS; i++) 1606 if (id & bttv_tvnorms[i].v4l2_id) 1607 break; 1608 if (i == BTTV_TVNORMS) 1609 return -EINVAL; 1610 btv->std = id; 1611 set_tvnorm(btv, i); 1612 return 0; 1613 } 1614 1615 static int bttv_g_std(struct file *file, void *priv, v4l2_std_id *id) 1616 { 1617 struct bttv *btv = video_drvdata(file); 1618 1619 *id = btv->std; 1620 return 0; 1621 } 1622 1623 static int bttv_querystd(struct file *file, void *f, v4l2_std_id *id) 1624 { 1625 struct bttv *btv = video_drvdata(file); 1626 1627 if (btread(BT848_DSTATUS) & BT848_DSTATUS_NUML) 1628 *id &= V4L2_STD_625_50; 1629 else 1630 *id &= V4L2_STD_525_60; 1631 return 0; 1632 } 1633 1634 static int bttv_enum_input(struct file *file, void *priv, 1635 struct v4l2_input *i) 1636 { 1637 struct bttv *btv = video_drvdata(file); 1638 1639 if (i->index >= bttv_tvcards[btv->c.type].video_inputs) 1640 return -EINVAL; 1641 1642 i->type = V4L2_INPUT_TYPE_CAMERA; 1643 i->audioset = 0; 1644 1645 if (btv->tuner_type != TUNER_ABSENT && i->index == 0) { 1646 sprintf(i->name, "Television"); 1647 i->type = V4L2_INPUT_TYPE_TUNER; 1648 i->tuner = 0; 1649 } else if (i->index == btv->svhs) { 1650 sprintf(i->name, "S-Video"); 1651 } else { 1652 sprintf(i->name, "Composite%d", i->index); 1653 } 1654 1655 if (i->index == btv->input) { 1656 __u32 dstatus = btread(BT848_DSTATUS); 1657 if (0 == (dstatus & BT848_DSTATUS_PRES)) 1658 i->status |= V4L2_IN_ST_NO_SIGNAL; 1659 if (0 == (dstatus & BT848_DSTATUS_HLOC)) 1660 i->status |= V4L2_IN_ST_NO_H_LOCK; 1661 } 1662 1663 i->std = BTTV_NORMS; 1664 return 0; 1665 } 1666 1667 static int bttv_g_input(struct file *file, void *priv, unsigned int *i) 1668 { 1669 struct bttv *btv = video_drvdata(file); 1670 1671 *i = btv->input; 1672 1673 return 0; 1674 } 1675 1676 static int bttv_s_input(struct file *file, void *priv, unsigned int i) 1677 { 1678 struct bttv *btv = video_drvdata(file); 1679 1680 if (i >= bttv_tvcards[btv->c.type].video_inputs) 1681 return -EINVAL; 1682 1683 set_input(btv, i, btv->tvnorm); 1684 return 0; 1685 } 1686 1687 static int bttv_s_tuner(struct file *file, void *priv, 1688 const struct v4l2_tuner *t) 1689 { 1690 struct bttv *btv = video_drvdata(file); 1691 1692 if (t->index) 1693 return -EINVAL; 1694 1695 bttv_call_all(btv, tuner, s_tuner, t); 1696 1697 if (btv->audio_mode_gpio) { 1698 struct v4l2_tuner copy = *t; 1699 1700 btv->audio_mode_gpio(btv, ©, 1); 1701 } 1702 return 0; 1703 } 1704 1705 static int bttv_g_frequency(struct file *file, void *priv, 1706 struct v4l2_frequency *f) 1707 { 1708 struct bttv *btv = video_drvdata(file); 1709 1710 if (f->tuner) 1711 return -EINVAL; 1712 1713 if (f->type == V4L2_TUNER_RADIO) 1714 radio_enable(btv); 1715 f->frequency = f->type == V4L2_TUNER_RADIO ? 1716 btv->radio_freq : btv->tv_freq; 1717 1718 return 0; 1719 } 1720 1721 static void bttv_set_frequency(struct bttv *btv, const struct v4l2_frequency *f) 1722 { 1723 struct v4l2_frequency new_freq = *f; 1724 1725 bttv_call_all(btv, tuner, s_frequency, f); 1726 /* s_frequency may clamp the frequency, so get the actual 1727 frequency before assigning radio/tv_freq. */ 1728 bttv_call_all(btv, tuner, g_frequency, &new_freq); 1729 if (new_freq.type == V4L2_TUNER_RADIO) { 1730 radio_enable(btv); 1731 btv->radio_freq = new_freq.frequency; 1732 if (btv->has_tea575x) { 1733 btv->tea.freq = btv->radio_freq; 1734 snd_tea575x_set_freq(&btv->tea); 1735 } 1736 } else { 1737 btv->tv_freq = new_freq.frequency; 1738 } 1739 } 1740 1741 static int bttv_s_frequency(struct file *file, void *priv, 1742 const struct v4l2_frequency *f) 1743 { 1744 struct bttv *btv = video_drvdata(file); 1745 1746 if (f->tuner) 1747 return -EINVAL; 1748 1749 bttv_set_frequency(btv, f); 1750 return 0; 1751 } 1752 1753 static int bttv_log_status(struct file *file, void *f) 1754 { 1755 struct video_device *vdev = video_devdata(file); 1756 struct bttv *btv = video_drvdata(file); 1757 1758 v4l2_ctrl_handler_log_status(vdev->ctrl_handler, btv->c.v4l2_dev.name); 1759 bttv_call_all(btv, core, log_status); 1760 return 0; 1761 } 1762 1763 #ifdef CONFIG_VIDEO_ADV_DEBUG 1764 static int bttv_g_register(struct file *file, void *f, 1765 struct v4l2_dbg_register *reg) 1766 { 1767 struct bttv *btv = video_drvdata(file); 1768 1769 /* bt848 has a 12-bit register space */ 1770 reg->reg &= 0xfff; 1771 reg->val = btread(reg->reg); 1772 reg->size = 1; 1773 1774 return 0; 1775 } 1776 1777 static int bttv_s_register(struct file *file, void *f, 1778 const struct v4l2_dbg_register *reg) 1779 { 1780 struct bttv *btv = video_drvdata(file); 1781 1782 /* bt848 has a 12-bit register space */ 1783 btwrite(reg->val, reg->reg & 0xfff); 1784 1785 return 0; 1786 } 1787 #endif 1788 1789 /* Given cropping boundaries b and the scaled width and height of a 1790 single field or frame, which must not exceed hardware limits, this 1791 function adjusts the cropping parameters c. */ 1792 static void 1793 bttv_crop_adjust (struct bttv_crop * c, 1794 const struct v4l2_rect * b, 1795 __s32 width, 1796 __s32 height, 1797 enum v4l2_field field) 1798 { 1799 __s32 frame_height = height << !V4L2_FIELD_HAS_BOTH(field); 1800 __s32 max_left; 1801 __s32 max_top; 1802 1803 if (width < c->min_scaled_width) { 1804 /* Max. hor. scale factor 16:1. */ 1805 c->rect.width = width * 16; 1806 } else if (width > c->max_scaled_width) { 1807 /* Min. hor. scale factor 1:1. */ 1808 c->rect.width = width; 1809 1810 max_left = b->left + b->width - width; 1811 max_left = min(max_left, (__s32) MAX_HDELAY); 1812 if (c->rect.left > max_left) 1813 c->rect.left = max_left; 1814 } 1815 1816 if (height < c->min_scaled_height) { 1817 /* Max. vert. scale factor 16:1, single fields 8:1. */ 1818 c->rect.height = height * 16; 1819 } else if (frame_height > c->max_scaled_height) { 1820 /* Min. vert. scale factor 1:1. 1821 Top and height count field lines times two. */ 1822 c->rect.height = (frame_height + 1) & ~1; 1823 1824 max_top = b->top + b->height - c->rect.height; 1825 if (c->rect.top > max_top) 1826 c->rect.top = max_top; 1827 } 1828 1829 bttv_crop_calc_limits(c); 1830 } 1831 1832 /* Returns an error if scaling to a frame or single field with the given 1833 width and height is not possible with the current cropping parameters 1834 and width aligned according to width_mask. If adjust_size is TRUE the 1835 function may adjust the width and/or height instead, rounding width 1836 to (width + width_bias) & width_mask. If adjust_crop is TRUE it may 1837 also adjust the current cropping parameters to get closer to the 1838 desired image size. */ 1839 static int 1840 limit_scaled_size_lock(struct bttv *btv, __s32 *width, __s32 *height, 1841 enum v4l2_field field, unsigned int width_mask, 1842 unsigned int width_bias, int adjust_size, 1843 int adjust_crop) 1844 { 1845 const struct v4l2_rect *b; 1846 struct bttv_crop *c; 1847 __s32 min_width; 1848 __s32 min_height; 1849 __s32 max_width; 1850 __s32 max_height; 1851 int rc; 1852 1853 WARN_ON((int)width_mask >= 0 || 1854 width_bias >= (unsigned int)(-width_mask)); 1855 1856 /* Make sure tvnorm, vbi_end and the current cropping parameters 1857 remain consistent until we're done. */ 1858 1859 b = &bttv_tvnorms[btv->tvnorm].cropcap.bounds; 1860 1861 /* Do crop - use current, don't - use default parameters. */ 1862 c = &btv->crop[!!btv->do_crop]; 1863 1864 if (btv->do_crop 1865 && adjust_size 1866 && adjust_crop 1867 && !locked_btres(btv, VIDEO_RESOURCES)) { 1868 min_width = 48; 1869 min_height = 32; 1870 1871 /* We cannot scale up. When the scaled image is larger 1872 than crop.rect we adjust the crop.rect as required 1873 by the V4L2 spec, hence cropcap.bounds are our limit. */ 1874 max_width = min_t(unsigned int, b->width, MAX_HACTIVE); 1875 max_height = b->height; 1876 1877 /* We cannot capture the same line as video and VBI data. 1878 Note btv->vbi_end is really a minimum, see 1879 bttv_vbi_try_fmt(). */ 1880 if (btv->vbi_end > b->top) { 1881 max_height -= btv->vbi_end - b->top; 1882 rc = -EBUSY; 1883 if (min_height > max_height) 1884 goto fail; 1885 } 1886 } else { 1887 rc = -EBUSY; 1888 if (btv->vbi_end > c->rect.top) 1889 goto fail; 1890 1891 min_width = c->min_scaled_width; 1892 min_height = c->min_scaled_height; 1893 max_width = c->max_scaled_width; 1894 max_height = c->max_scaled_height; 1895 1896 adjust_crop = 0; 1897 } 1898 1899 min_width = (min_width - width_mask - 1) & width_mask; 1900 max_width = max_width & width_mask; 1901 1902 /* Max. scale factor is 16:1 for frames, 8:1 for fields. */ 1903 /* Min. scale factor is 1:1. */ 1904 max_height >>= !V4L2_FIELD_HAS_BOTH(field); 1905 1906 if (adjust_size) { 1907 *width = clamp(*width, min_width, max_width); 1908 *height = clamp(*height, min_height, max_height); 1909 1910 /* Round after clamping to avoid overflow. */ 1911 *width = (*width + width_bias) & width_mask; 1912 1913 if (adjust_crop) { 1914 bttv_crop_adjust(c, b, *width, *height, field); 1915 1916 if (btv->vbi_end > c->rect.top) { 1917 /* Move the crop window out of the way. */ 1918 c->rect.top = btv->vbi_end; 1919 } 1920 } 1921 } else { 1922 rc = -EINVAL; 1923 if (*width < min_width || 1924 *height < min_height || 1925 *width > max_width || 1926 *height > max_height || 1927 0 != (*width & ~width_mask)) 1928 goto fail; 1929 } 1930 1931 rc = 0; /* success */ 1932 1933 fail: 1934 1935 return rc; 1936 } 1937 1938 static int bttv_switch_type(struct bttv *btv, enum v4l2_buf_type type) 1939 { 1940 int res; 1941 struct vb2_queue *q; 1942 1943 switch (type) { 1944 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 1945 q = &btv->capq; 1946 res = RESOURCE_VIDEO_STREAM; 1947 break; 1948 case V4L2_BUF_TYPE_VBI_CAPTURE: 1949 q = &btv->vbiq; 1950 res = RESOURCE_VBI; 1951 break; 1952 default: 1953 WARN_ON(1); 1954 return -EINVAL; 1955 } 1956 1957 if (check_btres(btv, res)) 1958 return -EBUSY; 1959 if (vb2_is_busy(q)) 1960 return -EBUSY; 1961 btv->type = type; 1962 1963 return 0; 1964 } 1965 1966 static void 1967 pix_format_set_size (struct v4l2_pix_format * f, 1968 const struct bttv_format * fmt, 1969 unsigned int width, 1970 unsigned int height) 1971 { 1972 f->width = width; 1973 f->height = height; 1974 1975 if (fmt->flags & FORMAT_FLAGS_PLANAR) { 1976 f->bytesperline = width; /* Y plane */ 1977 f->sizeimage = (width * height * fmt->depth) >> 3; 1978 } else { 1979 f->bytesperline = (width * fmt->depth) >> 3; 1980 f->sizeimage = height * f->bytesperline; 1981 } 1982 } 1983 1984 static int bttv_g_fmt_vid_cap(struct file *file, void *priv, 1985 struct v4l2_format *f) 1986 { 1987 struct bttv *btv = video_drvdata(file); 1988 1989 pix_format_set_size(&f->fmt.pix, btv->fmt, btv->width, btv->height); 1990 f->fmt.pix.field = btv->field; 1991 f->fmt.pix.pixelformat = btv->fmt->fourcc; 1992 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 1993 1994 return 0; 1995 } 1996 1997 static void bttv_get_width_mask_vid_cap(const struct bttv_format *fmt, 1998 unsigned int *width_mask, 1999 unsigned int *width_bias) 2000 { 2001 if (fmt->flags & FORMAT_FLAGS_PLANAR) { 2002 *width_mask = ~15; /* width must be a multiple of 16 pixels */ 2003 *width_bias = 8; /* nearest */ 2004 } else { 2005 *width_mask = ~3; /* width must be a multiple of 4 pixels */ 2006 *width_bias = 2; /* nearest */ 2007 } 2008 } 2009 2010 static int bttv_try_fmt_vid_cap(struct file *file, void *priv, 2011 struct v4l2_format *f) 2012 { 2013 const struct bttv_format *fmt; 2014 struct bttv *btv = video_drvdata(file); 2015 enum v4l2_field field; 2016 __s32 width, height; 2017 __s32 height2; 2018 unsigned int width_mask, width_bias; 2019 int rc; 2020 2021 fmt = format_by_fourcc(f->fmt.pix.pixelformat); 2022 if (NULL == fmt) 2023 return -EINVAL; 2024 2025 field = f->fmt.pix.field; 2026 2027 switch (field) { 2028 case V4L2_FIELD_TOP: 2029 case V4L2_FIELD_BOTTOM: 2030 case V4L2_FIELD_ALTERNATE: 2031 case V4L2_FIELD_INTERLACED: 2032 break; 2033 case V4L2_FIELD_SEQ_BT: 2034 case V4L2_FIELD_SEQ_TB: 2035 if (!(fmt->flags & FORMAT_FLAGS_PLANAR)) { 2036 field = V4L2_FIELD_SEQ_TB; 2037 break; 2038 } 2039 fallthrough; 2040 default: /* FIELD_ANY case */ 2041 height2 = btv->crop[!!btv->do_crop].rect.height >> 1; 2042 field = (f->fmt.pix.height > height2) 2043 ? V4L2_FIELD_INTERLACED 2044 : V4L2_FIELD_BOTTOM; 2045 break; 2046 } 2047 2048 width = f->fmt.pix.width; 2049 height = f->fmt.pix.height; 2050 2051 bttv_get_width_mask_vid_cap(fmt, &width_mask, &width_bias); 2052 rc = limit_scaled_size_lock(btv, &width, &height, field, width_mask, 2053 width_bias, 1, 0); 2054 if (0 != rc) 2055 return rc; 2056 2057 /* update data for the application */ 2058 f->fmt.pix.field = field; 2059 pix_format_set_size(&f->fmt.pix, fmt, width, height); 2060 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 2061 2062 return 0; 2063 } 2064 2065 static int bttv_s_fmt_vid_cap(struct file *file, void *priv, 2066 struct v4l2_format *f) 2067 { 2068 int retval; 2069 const struct bttv_format *fmt; 2070 struct bttv *btv = video_drvdata(file); 2071 __s32 width, height; 2072 unsigned int width_mask, width_bias; 2073 enum v4l2_field field; 2074 2075 retval = bttv_switch_type(btv, f->type); 2076 if (0 != retval) 2077 return retval; 2078 2079 retval = bttv_try_fmt_vid_cap(file, priv, f); 2080 if (0 != retval) 2081 return retval; 2082 2083 width = f->fmt.pix.width; 2084 height = f->fmt.pix.height; 2085 field = f->fmt.pix.field; 2086 2087 fmt = format_by_fourcc(f->fmt.pix.pixelformat); 2088 bttv_get_width_mask_vid_cap(fmt, &width_mask, &width_bias); 2089 retval = limit_scaled_size_lock(btv, &width, &height, f->fmt.pix.field, 2090 width_mask, width_bias, 1, 1); 2091 if (0 != retval) 2092 return retval; 2093 2094 f->fmt.pix.field = field; 2095 2096 /* update our state information */ 2097 btv->fmt = fmt; 2098 btv->width = f->fmt.pix.width; 2099 btv->height = f->fmt.pix.height; 2100 btv->field = f->fmt.pix.field; 2101 /* 2102 * When field is V4L2_FIELD_ALTERNATE, buffers will be either 2103 * V4L2_FIELD_TOP or V4L2_FIELD_BOTTOM depending on the value of 2104 * field_last. Initialize field_last to V4L2_FIELD_BOTTOM so that 2105 * streaming starts with a V4L2_FIELD_TOP buffer. 2106 */ 2107 btv->field_last = V4L2_FIELD_BOTTOM; 2108 2109 return 0; 2110 } 2111 2112 static int bttv_querycap(struct file *file, void *priv, 2113 struct v4l2_capability *cap) 2114 { 2115 struct bttv *btv = video_drvdata(file); 2116 2117 if (0 == v4l2) 2118 return -EINVAL; 2119 2120 strscpy(cap->driver, "bttv", sizeof(cap->driver)); 2121 strscpy(cap->card, btv->video_dev.name, sizeof(cap->card)); 2122 cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE | 2123 V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS; 2124 if (video_is_registered(&btv->vbi_dev)) 2125 cap->capabilities |= V4L2_CAP_VBI_CAPTURE; 2126 if (video_is_registered(&btv->radio_dev)) { 2127 cap->capabilities |= V4L2_CAP_RADIO; 2128 if (btv->has_tea575x) 2129 cap->capabilities |= V4L2_CAP_HW_FREQ_SEEK; 2130 } 2131 2132 /* 2133 * No need to lock here: those vars are initialized during board 2134 * probe and remains untouched during the rest of the driver lifecycle 2135 */ 2136 if (btv->has_saa6588) 2137 cap->capabilities |= V4L2_CAP_RDS_CAPTURE; 2138 if (btv->tuner_type != TUNER_ABSENT) 2139 cap->capabilities |= V4L2_CAP_TUNER; 2140 return 0; 2141 } 2142 2143 static int bttv_enum_fmt_vid_cap(struct file *file, void *priv, 2144 struct v4l2_fmtdesc *f) 2145 { 2146 int index = -1, i; 2147 2148 for (i = 0; i < FORMATS; i++) { 2149 if (formats[i].fourcc != -1) 2150 index++; 2151 if ((unsigned int)index == f->index) 2152 break; 2153 } 2154 if (FORMATS == i) 2155 return -EINVAL; 2156 2157 f->pixelformat = formats[i].fourcc; 2158 2159 return 0; 2160 } 2161 2162 static int bttv_g_parm(struct file *file, void *f, 2163 struct v4l2_streamparm *parm) 2164 { 2165 struct bttv *btv = video_drvdata(file); 2166 2167 if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 2168 return -EINVAL; 2169 parm->parm.capture.readbuffers = gbuffers; 2170 v4l2_video_std_frame_period(bttv_tvnorms[btv->tvnorm].v4l2_id, 2171 &parm->parm.capture.timeperframe); 2172 2173 return 0; 2174 } 2175 2176 static int bttv_g_tuner(struct file *file, void *priv, 2177 struct v4l2_tuner *t) 2178 { 2179 struct bttv *btv = video_drvdata(file); 2180 2181 if (0 != t->index) 2182 return -EINVAL; 2183 2184 t->rxsubchans = V4L2_TUNER_SUB_MONO; 2185 t->capability = V4L2_TUNER_CAP_NORM; 2186 bttv_call_all(btv, tuner, g_tuner, t); 2187 strscpy(t->name, "Television", sizeof(t->name)); 2188 t->type = V4L2_TUNER_ANALOG_TV; 2189 if (btread(BT848_DSTATUS)&BT848_DSTATUS_HLOC) 2190 t->signal = 0xffff; 2191 2192 if (btv->audio_mode_gpio) 2193 btv->audio_mode_gpio(btv, t, 0); 2194 2195 return 0; 2196 } 2197 2198 static int bttv_g_pixelaspect(struct file *file, void *priv, 2199 int type, struct v4l2_fract *f) 2200 { 2201 struct bttv *btv = video_drvdata(file); 2202 2203 if (type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 2204 return -EINVAL; 2205 2206 /* defrect and bounds are set via g_selection */ 2207 *f = bttv_tvnorms[btv->tvnorm].cropcap.pixelaspect; 2208 return 0; 2209 } 2210 2211 static int bttv_g_selection(struct file *file, void *f, struct v4l2_selection *sel) 2212 { 2213 struct bttv *btv = video_drvdata(file); 2214 2215 if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 2216 return -EINVAL; 2217 2218 switch (sel->target) { 2219 case V4L2_SEL_TGT_CROP: 2220 sel->r = btv->crop[!!btv->do_crop].rect; 2221 break; 2222 case V4L2_SEL_TGT_CROP_DEFAULT: 2223 sel->r = bttv_tvnorms[btv->tvnorm].cropcap.defrect; 2224 break; 2225 case V4L2_SEL_TGT_CROP_BOUNDS: 2226 sel->r = bttv_tvnorms[btv->tvnorm].cropcap.bounds; 2227 break; 2228 default: 2229 return -EINVAL; 2230 } 2231 2232 return 0; 2233 } 2234 2235 static int bttv_s_selection(struct file *file, void *f, struct v4l2_selection *sel) 2236 { 2237 struct bttv *btv = video_drvdata(file); 2238 const struct v4l2_rect *b; 2239 int retval; 2240 struct bttv_crop c; 2241 __s32 b_left; 2242 __s32 b_top; 2243 __s32 b_right; 2244 __s32 b_bottom; 2245 2246 if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 2247 return -EINVAL; 2248 2249 if (sel->target != V4L2_SEL_TGT_CROP) 2250 return -EINVAL; 2251 2252 /* Make sure tvnorm, vbi_end and the current cropping 2253 parameters remain consistent until we're done. Note 2254 read() may change vbi_end in check_alloc_btres_lock(). */ 2255 retval = -EBUSY; 2256 2257 if (locked_btres(btv, VIDEO_RESOURCES)) 2258 return retval; 2259 2260 b = &bttv_tvnorms[btv->tvnorm].cropcap.bounds; 2261 2262 b_left = b->left; 2263 b_right = b_left + b->width; 2264 b_bottom = b->top + b->height; 2265 2266 b_top = max(b->top, btv->vbi_end); 2267 if (b_top + 32 >= b_bottom) { 2268 return retval; 2269 } 2270 2271 /* Min. scaled size 48 x 32. */ 2272 c.rect.left = clamp_t(s32, sel->r.left, b_left, b_right - 48); 2273 c.rect.left = min(c.rect.left, (__s32) MAX_HDELAY); 2274 2275 c.rect.width = clamp_t(s32, sel->r.width, 2276 48, b_right - c.rect.left); 2277 2278 c.rect.top = clamp_t(s32, sel->r.top, b_top, b_bottom - 32); 2279 /* Top and height must be a multiple of two. */ 2280 c.rect.top = (c.rect.top + 1) & ~1; 2281 2282 c.rect.height = clamp_t(s32, sel->r.height, 2283 32, b_bottom - c.rect.top); 2284 c.rect.height = (c.rect.height + 1) & ~1; 2285 2286 bttv_crop_calc_limits(&c); 2287 2288 sel->r = c.rect; 2289 2290 btv->crop[1] = c; 2291 2292 btv->do_crop = 1; 2293 2294 if (btv->width < c.min_scaled_width) 2295 btv->width = c.min_scaled_width; 2296 else if (btv->width > c.max_scaled_width) 2297 btv->width = c.max_scaled_width; 2298 2299 if (btv->height < c.min_scaled_height) 2300 btv->height = c.min_scaled_height; 2301 else if (btv->height > c.max_scaled_height) 2302 btv->height = c.max_scaled_height; 2303 2304 return 0; 2305 } 2306 2307 static const struct v4l2_file_operations bttv_fops = 2308 { 2309 .owner = THIS_MODULE, 2310 .open = v4l2_fh_open, 2311 .release = vb2_fop_release, 2312 .unlocked_ioctl = video_ioctl2, 2313 .read = vb2_fop_read, 2314 .mmap = vb2_fop_mmap, 2315 .poll = vb2_fop_poll, 2316 }; 2317 2318 static const struct v4l2_ioctl_ops bttv_ioctl_ops = { 2319 .vidioc_querycap = bttv_querycap, 2320 .vidioc_enum_fmt_vid_cap = bttv_enum_fmt_vid_cap, 2321 .vidioc_g_fmt_vid_cap = bttv_g_fmt_vid_cap, 2322 .vidioc_try_fmt_vid_cap = bttv_try_fmt_vid_cap, 2323 .vidioc_s_fmt_vid_cap = bttv_s_fmt_vid_cap, 2324 .vidioc_g_fmt_vbi_cap = bttv_g_fmt_vbi_cap, 2325 .vidioc_try_fmt_vbi_cap = bttv_try_fmt_vbi_cap, 2326 .vidioc_s_fmt_vbi_cap = bttv_s_fmt_vbi_cap, 2327 .vidioc_g_pixelaspect = bttv_g_pixelaspect, 2328 .vidioc_reqbufs = vb2_ioctl_reqbufs, 2329 .vidioc_create_bufs = vb2_ioctl_create_bufs, 2330 .vidioc_querybuf = vb2_ioctl_querybuf, 2331 .vidioc_qbuf = vb2_ioctl_qbuf, 2332 .vidioc_dqbuf = vb2_ioctl_dqbuf, 2333 .vidioc_streamon = vb2_ioctl_streamon, 2334 .vidioc_streamoff = vb2_ioctl_streamoff, 2335 .vidioc_s_std = bttv_s_std, 2336 .vidioc_g_std = bttv_g_std, 2337 .vidioc_enum_input = bttv_enum_input, 2338 .vidioc_g_input = bttv_g_input, 2339 .vidioc_s_input = bttv_s_input, 2340 .vidioc_g_tuner = bttv_g_tuner, 2341 .vidioc_s_tuner = bttv_s_tuner, 2342 .vidioc_g_selection = bttv_g_selection, 2343 .vidioc_s_selection = bttv_s_selection, 2344 .vidioc_g_parm = bttv_g_parm, 2345 .vidioc_g_frequency = bttv_g_frequency, 2346 .vidioc_s_frequency = bttv_s_frequency, 2347 .vidioc_log_status = bttv_log_status, 2348 .vidioc_querystd = bttv_querystd, 2349 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 2350 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 2351 #ifdef CONFIG_VIDEO_ADV_DEBUG 2352 .vidioc_g_register = bttv_g_register, 2353 .vidioc_s_register = bttv_s_register, 2354 #endif 2355 }; 2356 2357 static struct video_device bttv_video_template = { 2358 .fops = &bttv_fops, 2359 .ioctl_ops = &bttv_ioctl_ops, 2360 .tvnorms = BTTV_NORMS, 2361 }; 2362 2363 /* ----------------------------------------------------------------------- */ 2364 /* radio interface */ 2365 2366 static int radio_open(struct file *file) 2367 { 2368 struct video_device *vdev = video_devdata(file); 2369 struct bttv *btv = video_drvdata(file); 2370 int ret = v4l2_fh_open(file); 2371 2372 if (ret) 2373 return ret; 2374 2375 dprintk("open dev=%s\n", video_device_node_name(vdev)); 2376 dprintk("%d: open called (radio)\n", btv->c.nr); 2377 2378 btv->radio_user++; 2379 audio_mute(btv, btv->mute); 2380 2381 return 0; 2382 } 2383 2384 static int radio_release(struct file *file) 2385 { 2386 struct bttv *btv = video_drvdata(file); 2387 struct saa6588_command cmd; 2388 2389 btv->radio_user--; 2390 2391 bttv_call_all(btv, core, command, SAA6588_CMD_CLOSE, &cmd); 2392 2393 if (btv->radio_user == 0) 2394 btv->has_radio_tuner = 0; 2395 2396 v4l2_fh_release(file); 2397 2398 return 0; 2399 } 2400 2401 static int radio_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t) 2402 { 2403 struct bttv *btv = video_drvdata(file); 2404 2405 if (0 != t->index) 2406 return -EINVAL; 2407 strscpy(t->name, "Radio", sizeof(t->name)); 2408 t->type = V4L2_TUNER_RADIO; 2409 radio_enable(btv); 2410 2411 bttv_call_all(btv, tuner, g_tuner, t); 2412 2413 if (btv->audio_mode_gpio) 2414 btv->audio_mode_gpio(btv, t, 0); 2415 2416 if (btv->has_tea575x) 2417 return snd_tea575x_g_tuner(&btv->tea, t); 2418 2419 return 0; 2420 } 2421 2422 static int radio_s_tuner(struct file *file, void *priv, 2423 const struct v4l2_tuner *t) 2424 { 2425 struct bttv *btv = video_drvdata(file); 2426 2427 if (0 != t->index) 2428 return -EINVAL; 2429 2430 radio_enable(btv); 2431 bttv_call_all(btv, tuner, s_tuner, t); 2432 return 0; 2433 } 2434 2435 static int radio_s_hw_freq_seek(struct file *file, void *priv, 2436 const struct v4l2_hw_freq_seek *a) 2437 { 2438 struct bttv *btv = video_drvdata(file); 2439 2440 if (btv->has_tea575x) 2441 return snd_tea575x_s_hw_freq_seek(file, &btv->tea, a); 2442 2443 return -ENOTTY; 2444 } 2445 2446 static int radio_enum_freq_bands(struct file *file, void *priv, 2447 struct v4l2_frequency_band *band) 2448 { 2449 struct bttv *btv = video_drvdata(file); 2450 2451 if (btv->has_tea575x) 2452 return snd_tea575x_enum_freq_bands(&btv->tea, band); 2453 2454 return -ENOTTY; 2455 } 2456 2457 static ssize_t radio_read(struct file *file, char __user *data, 2458 size_t count, loff_t *ppos) 2459 { 2460 struct bttv *btv = video_drvdata(file); 2461 struct saa6588_command cmd; 2462 2463 cmd.block_count = count / 3; 2464 cmd.nonblocking = file->f_flags & O_NONBLOCK; 2465 cmd.buffer = data; 2466 cmd.instance = file; 2467 cmd.result = -ENODEV; 2468 radio_enable(btv); 2469 2470 bttv_call_all(btv, core, command, SAA6588_CMD_READ, &cmd); 2471 2472 return cmd.result; 2473 } 2474 2475 static __poll_t radio_poll(struct file *file, poll_table *wait) 2476 { 2477 struct bttv *btv = video_drvdata(file); 2478 struct saa6588_command cmd; 2479 __poll_t rc = v4l2_ctrl_poll(file, wait); 2480 2481 radio_enable(btv); 2482 cmd.instance = file; 2483 cmd.event_list = wait; 2484 cmd.poll_mask = 0; 2485 bttv_call_all(btv, core, command, SAA6588_CMD_POLL, &cmd); 2486 2487 return rc | cmd.poll_mask; 2488 } 2489 2490 static const struct v4l2_file_operations radio_fops = 2491 { 2492 .owner = THIS_MODULE, 2493 .open = radio_open, 2494 .read = radio_read, 2495 .release = radio_release, 2496 .unlocked_ioctl = video_ioctl2, 2497 .poll = radio_poll, 2498 }; 2499 2500 static const struct v4l2_ioctl_ops radio_ioctl_ops = { 2501 .vidioc_querycap = bttv_querycap, 2502 .vidioc_log_status = bttv_log_status, 2503 .vidioc_g_tuner = radio_g_tuner, 2504 .vidioc_s_tuner = radio_s_tuner, 2505 .vidioc_g_frequency = bttv_g_frequency, 2506 .vidioc_s_frequency = bttv_s_frequency, 2507 .vidioc_s_hw_freq_seek = radio_s_hw_freq_seek, 2508 .vidioc_enum_freq_bands = radio_enum_freq_bands, 2509 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 2510 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 2511 }; 2512 2513 static struct video_device radio_template = { 2514 .fops = &radio_fops, 2515 .ioctl_ops = &radio_ioctl_ops, 2516 }; 2517 2518 /* ----------------------------------------------------------------------- */ 2519 /* some debug code */ 2520 2521 static int bttv_risc_decode(u32 risc) 2522 { 2523 static char *instr[16] = { 2524 [ BT848_RISC_WRITE >> 28 ] = "write", 2525 [ BT848_RISC_SKIP >> 28 ] = "skip", 2526 [ BT848_RISC_WRITEC >> 28 ] = "writec", 2527 [ BT848_RISC_JUMP >> 28 ] = "jump", 2528 [ BT848_RISC_SYNC >> 28 ] = "sync", 2529 [ BT848_RISC_WRITE123 >> 28 ] = "write123", 2530 [ BT848_RISC_SKIP123 >> 28 ] = "skip123", 2531 [ BT848_RISC_WRITE1S23 >> 28 ] = "write1s23", 2532 }; 2533 static int incr[16] = { 2534 [ BT848_RISC_WRITE >> 28 ] = 2, 2535 [ BT848_RISC_JUMP >> 28 ] = 2, 2536 [ BT848_RISC_SYNC >> 28 ] = 2, 2537 [ BT848_RISC_WRITE123 >> 28 ] = 5, 2538 [ BT848_RISC_SKIP123 >> 28 ] = 2, 2539 [ BT848_RISC_WRITE1S23 >> 28 ] = 3, 2540 }; 2541 static char *bits[] = { 2542 "be0", "be1", "be2", "be3/resync", 2543 "set0", "set1", "set2", "set3", 2544 "clr0", "clr1", "clr2", "clr3", 2545 "irq", "res", "eol", "sol", 2546 }; 2547 int i; 2548 2549 pr_cont("0x%08x [ %s", risc, 2550 instr[risc >> 28] ? instr[risc >> 28] : "INVALID"); 2551 for (i = ARRAY_SIZE(bits)-1; i >= 0; i--) 2552 if (risc & (1 << (i + 12))) 2553 pr_cont(" %s", bits[i]); 2554 pr_cont(" count=%d ]\n", risc & 0xfff); 2555 return incr[risc >> 28] ? incr[risc >> 28] : 1; 2556 } 2557 2558 static void bttv_risc_disasm(struct bttv *btv, 2559 struct btcx_riscmem *risc) 2560 { 2561 unsigned int i,j,n; 2562 2563 pr_info("%s: risc disasm: %p [dma=0x%08lx]\n", 2564 btv->c.v4l2_dev.name, risc->cpu, (unsigned long)risc->dma); 2565 for (i = 0; i < (risc->size >> 2); i += n) { 2566 pr_info("%s: 0x%lx: ", 2567 btv->c.v4l2_dev.name, 2568 (unsigned long)(risc->dma + (i<<2))); 2569 n = bttv_risc_decode(le32_to_cpu(risc->cpu[i])); 2570 for (j = 1; j < n; j++) 2571 pr_info("%s: 0x%lx: 0x%08x [ arg #%d ]\n", 2572 btv->c.v4l2_dev.name, 2573 (unsigned long)(risc->dma + ((i+j)<<2)), 2574 risc->cpu[i+j], j); 2575 if (0 == risc->cpu[i]) 2576 break; 2577 } 2578 } 2579 2580 static void bttv_print_riscaddr(struct bttv *btv) 2581 { 2582 pr_info(" main: %08llx\n", (unsigned long long)btv->main.dma); 2583 pr_info(" vbi : o=%08llx e=%08llx\n", 2584 btv->cvbi ? (unsigned long long)btv->cvbi->top.dma : 0, 2585 btv->cvbi ? (unsigned long long)btv->cvbi->bottom.dma : 0); 2586 pr_info(" cap : o=%08llx e=%08llx\n", 2587 btv->curr.top 2588 ? (unsigned long long)btv->curr.top->top.dma : 0, 2589 btv->curr.bottom 2590 ? (unsigned long long)btv->curr.bottom->bottom.dma : 0); 2591 bttv_risc_disasm(btv, &btv->main); 2592 } 2593 2594 /* ----------------------------------------------------------------------- */ 2595 /* irq handler */ 2596 2597 static char *irq_name[] = { 2598 "FMTCHG", // format change detected (525 vs. 625) 2599 "VSYNC", // vertical sync (new field) 2600 "HSYNC", // horizontal sync 2601 "OFLOW", // chroma/luma AGC overflow 2602 "HLOCK", // horizontal lock changed 2603 "VPRES", // video presence changed 2604 "6", "7", 2605 "I2CDONE", // hw irc operation finished 2606 "GPINT", // gpio port triggered irq 2607 "10", 2608 "RISCI", // risc instruction triggered irq 2609 "FBUS", // pixel data fifo dropped data (high pci bus latencies) 2610 "FTRGT", // pixel data fifo overrun 2611 "FDSR", // fifo data stream resyncronisation 2612 "PPERR", // parity error (data transfer) 2613 "RIPERR", // parity error (read risc instructions) 2614 "PABORT", // pci abort 2615 "OCERR", // risc instruction error 2616 "SCERR", // syncronisation error 2617 }; 2618 2619 static void bttv_print_irqbits(u32 print, u32 mark) 2620 { 2621 unsigned int i; 2622 2623 pr_cont("bits:"); 2624 for (i = 0; i < ARRAY_SIZE(irq_name); i++) { 2625 if (print & (1 << i)) 2626 pr_cont(" %s", irq_name[i]); 2627 if (mark & (1 << i)) 2628 pr_cont("*"); 2629 } 2630 } 2631 2632 static void bttv_irq_debug_low_latency(struct bttv *btv, u32 rc) 2633 { 2634 pr_warn("%d: irq: skipped frame [main=%lx,o_vbi=%lx,o_field=%lx,rc=%lx]\n", 2635 btv->c.nr, 2636 (unsigned long)btv->main.dma, 2637 (unsigned long)le32_to_cpu(btv->main.cpu[RISC_SLOT_O_VBI+1]), 2638 (unsigned long)le32_to_cpu(btv->main.cpu[RISC_SLOT_O_FIELD+1]), 2639 (unsigned long)rc); 2640 2641 if (0 == (btread(BT848_DSTATUS) & BT848_DSTATUS_HLOC)) { 2642 pr_notice("%d: Oh, there (temporarily?) is no input signal. Ok, then this is harmless, don't worry ;)\n", 2643 btv->c.nr); 2644 return; 2645 } 2646 pr_notice("%d: Uhm. Looks like we have unusual high IRQ latencies\n", 2647 btv->c.nr); 2648 pr_notice("%d: Lets try to catch the culprit red-handed ...\n", 2649 btv->c.nr); 2650 dump_stack(); 2651 } 2652 2653 static int 2654 bttv_irq_next_video(struct bttv *btv, struct bttv_buffer_set *set) 2655 { 2656 struct bttv_buffer *item; 2657 2658 memset(set,0,sizeof(*set)); 2659 2660 /* capture request ? */ 2661 if (!list_empty(&btv->capture)) { 2662 set->frame_irq = BT848_RISC_VIDEO; 2663 item = list_entry(btv->capture.next, struct bttv_buffer, list); 2664 2665 if (V4L2_FIELD_HAS_TOP(item->vbuf.field)) 2666 set->top = item; 2667 if (V4L2_FIELD_HAS_BOTTOM(item->vbuf.field)) 2668 set->bottom = item; 2669 2670 /* capture request for other field ? */ 2671 if (!V4L2_FIELD_HAS_BOTH(item->vbuf.field) && 2672 item->list.next != &btv->capture) { 2673 item = list_entry(item->list.next, 2674 struct bttv_buffer, list); 2675 /* Mike Isely <isely@pobox.com> - Only check 2676 * and set up the bottom field in the logic 2677 * below. Don't ever do the top field. This 2678 * of course means that if we set up the 2679 * bottom field in the above code that we'll 2680 * actually skip a field. But that's OK. 2681 * Having processed only a single buffer this 2682 * time, then the next time around the first 2683 * available buffer should be for a top field. 2684 * That will then cause us here to set up a 2685 * top then a bottom field in the normal way. 2686 * The alternative to this understanding is 2687 * that we set up the second available buffer 2688 * as a top field, but that's out of order 2689 * since this driver always processes the top 2690 * field first - the effect will be the two 2691 * buffers being returned in the wrong order, 2692 * with the second buffer also being delayed 2693 * by one field time (owing to the fifo nature 2694 * of videobuf). Worse still, we'll be stuck 2695 * doing fields out of order now every time 2696 * until something else causes a field to be 2697 * dropped. By effectively forcing a field to 2698 * drop this way then we always get back into 2699 * sync within a single frame time. (Out of 2700 * order fields can screw up deinterlacing 2701 * algorithms.) */ 2702 if (!V4L2_FIELD_HAS_BOTH(item->vbuf.field)) { 2703 if (!set->bottom && 2704 item->vbuf.field == V4L2_FIELD_BOTTOM) 2705 set->bottom = item; 2706 if (set->top && set->bottom) { 2707 /* 2708 * The buffer set has a top buffer and 2709 * a bottom buffer and they are not 2710 * copies of each other. 2711 */ 2712 set->top_irq = BT848_RISC_TOP; 2713 } 2714 } 2715 } 2716 } 2717 2718 dprintk("%d: next set: top=%p bottom=%p [irq=%d,%d]\n", 2719 btv->c.nr, set->top, set->bottom, 2720 set->frame_irq, set->top_irq); 2721 return 0; 2722 } 2723 2724 static void 2725 bttv_irq_wakeup_video(struct bttv *btv, struct bttv_buffer_set *wakeup, 2726 struct bttv_buffer_set *curr, unsigned int state) 2727 { 2728 u64 ts = ktime_get_ns(); 2729 2730 if (wakeup->top == wakeup->bottom) { 2731 if (NULL != wakeup->top && curr->top != wakeup->top) { 2732 if (irq_debug > 1) 2733 pr_debug("%d: wakeup: both=%p\n", 2734 btv->c.nr, wakeup->top); 2735 wakeup->top->vbuf.vb2_buf.timestamp = ts; 2736 wakeup->top->vbuf.sequence = btv->field_count >> 1; 2737 vb2_buffer_done(&wakeup->top->vbuf.vb2_buf, state); 2738 if (btv->field_count == 0) 2739 btor(BT848_INT_VSYNC, BT848_INT_MASK); 2740 } 2741 } else { 2742 if (NULL != wakeup->top && curr->top != wakeup->top) { 2743 if (irq_debug > 1) 2744 pr_debug("%d: wakeup: top=%p\n", 2745 btv->c.nr, wakeup->top); 2746 wakeup->top->vbuf.vb2_buf.timestamp = ts; 2747 wakeup->top->vbuf.sequence = btv->field_count >> 1; 2748 vb2_buffer_done(&wakeup->top->vbuf.vb2_buf, state); 2749 if (btv->field_count == 0) 2750 btor(BT848_INT_VSYNC, BT848_INT_MASK); 2751 } 2752 if (NULL != wakeup->bottom && curr->bottom != wakeup->bottom) { 2753 if (irq_debug > 1) 2754 pr_debug("%d: wakeup: bottom=%p\n", 2755 btv->c.nr, wakeup->bottom); 2756 wakeup->bottom->vbuf.vb2_buf.timestamp = ts; 2757 wakeup->bottom->vbuf.sequence = btv->field_count >> 1; 2758 vb2_buffer_done(&wakeup->bottom->vbuf.vb2_buf, state); 2759 if (btv->field_count == 0) 2760 btor(BT848_INT_VSYNC, BT848_INT_MASK); 2761 } 2762 } 2763 } 2764 2765 static void 2766 bttv_irq_wakeup_vbi(struct bttv *btv, struct bttv_buffer *wakeup, 2767 unsigned int state) 2768 { 2769 if (NULL == wakeup) 2770 return; 2771 wakeup->vbuf.vb2_buf.timestamp = ktime_get_ns(); 2772 wakeup->vbuf.sequence = btv->field_count >> 1; 2773 2774 /* 2775 * Ugly hack for backwards compatibility. 2776 * Some applications expect that the last 4 bytes of 2777 * the VBI data contains the sequence number. 2778 * 2779 * This makes it possible to associate the VBI data 2780 * with the video frame if you use read() to get the 2781 * VBI data. 2782 */ 2783 if (vb2_fileio_is_active(wakeup->vbuf.vb2_buf.vb2_queue)) { 2784 u32 *vaddr = vb2_plane_vaddr(&wakeup->vbuf.vb2_buf, 0); 2785 unsigned long size = 2786 vb2_get_plane_payload(&wakeup->vbuf.vb2_buf, 0) / 4; 2787 2788 if (vaddr && size) { 2789 vaddr += size - 1; 2790 *vaddr = wakeup->vbuf.sequence; 2791 } 2792 } 2793 2794 vb2_buffer_done(&wakeup->vbuf.vb2_buf, state); 2795 if (btv->field_count == 0) 2796 btor(BT848_INT_VSYNC, BT848_INT_MASK); 2797 } 2798 2799 static void bttv_irq_timeout(struct timer_list *t) 2800 { 2801 struct bttv *btv = from_timer(btv, t, timeout); 2802 struct bttv_buffer_set old,new; 2803 struct bttv_buffer *ovbi; 2804 struct bttv_buffer *item; 2805 unsigned long flags; 2806 int seqnr = 0; 2807 2808 if (bttv_verbose) { 2809 pr_info("%d: timeout: drop=%d irq=%d/%d, risc=%08x, ", 2810 btv->c.nr, btv->framedrop, btv->irq_me, btv->irq_total, 2811 btread(BT848_RISC_COUNT)); 2812 bttv_print_irqbits(btread(BT848_INT_STAT),0); 2813 pr_cont("\n"); 2814 } 2815 2816 spin_lock_irqsave(&btv->s_lock,flags); 2817 2818 /* deactivate stuff */ 2819 memset(&new,0,sizeof(new)); 2820 old = btv->curr; 2821 ovbi = btv->cvbi; 2822 btv->curr = new; 2823 btv->cvbi = NULL; 2824 btv->loop_irq = 0; 2825 bttv_buffer_activate_video(btv, &new); 2826 bttv_buffer_activate_vbi(btv, NULL); 2827 bttv_set_dma(btv, 0); 2828 2829 /* wake up */ 2830 bttv_irq_wakeup_video(btv, &old, &new, VB2_BUF_STATE_DONE); 2831 bttv_irq_wakeup_vbi(btv, ovbi, VB2_BUF_STATE_DONE); 2832 2833 /* cancel all outstanding capture / vbi requests */ 2834 if (btv->field_count) 2835 seqnr++; 2836 while (!list_empty(&btv->capture)) { 2837 item = list_entry(btv->capture.next, struct bttv_buffer, list); 2838 list_del(&item->list); 2839 item->vbuf.vb2_buf.timestamp = ktime_get_ns(); 2840 item->vbuf.sequence = (btv->field_count >> 1) + seqnr++; 2841 vb2_buffer_done(&item->vbuf.vb2_buf, VB2_BUF_STATE_ERROR); 2842 } 2843 while (!list_empty(&btv->vcapture)) { 2844 item = list_entry(btv->vcapture.next, struct bttv_buffer, list); 2845 list_del(&item->list); 2846 item->vbuf.vb2_buf.timestamp = ktime_get_ns(); 2847 item->vbuf.sequence = (btv->field_count >> 1) + seqnr++; 2848 vb2_buffer_done(&item->vbuf.vb2_buf, VB2_BUF_STATE_ERROR); 2849 } 2850 2851 btv->errors++; 2852 spin_unlock_irqrestore(&btv->s_lock,flags); 2853 } 2854 2855 static void 2856 bttv_irq_wakeup_top(struct bttv *btv) 2857 { 2858 struct bttv_buffer *wakeup = btv->curr.top; 2859 2860 if (NULL == wakeup) 2861 return; 2862 2863 spin_lock(&btv->s_lock); 2864 btv->curr.top_irq = 0; 2865 btv->curr.top = NULL; 2866 bttv_risc_hook(btv, RISC_SLOT_O_FIELD, NULL, 0); 2867 wakeup->vbuf.vb2_buf.timestamp = ktime_get_ns(); 2868 wakeup->vbuf.sequence = btv->field_count >> 1; 2869 vb2_buffer_done(&wakeup->vbuf.vb2_buf, VB2_BUF_STATE_DONE); 2870 if (btv->field_count == 0) 2871 btor(BT848_INT_VSYNC, BT848_INT_MASK); 2872 spin_unlock(&btv->s_lock); 2873 } 2874 2875 static inline int is_active(struct btcx_riscmem *risc, u32 rc) 2876 { 2877 if (rc < risc->dma) 2878 return 0; 2879 if (rc > risc->dma + risc->size) 2880 return 0; 2881 return 1; 2882 } 2883 2884 static void 2885 bttv_irq_switch_video(struct bttv *btv) 2886 { 2887 struct bttv_buffer_set new; 2888 struct bttv_buffer_set old; 2889 dma_addr_t rc; 2890 2891 spin_lock(&btv->s_lock); 2892 2893 /* new buffer set */ 2894 bttv_irq_next_video(btv, &new); 2895 rc = btread(BT848_RISC_COUNT); 2896 if ((btv->curr.top && is_active(&btv->curr.top->top, rc)) || 2897 (btv->curr.bottom && is_active(&btv->curr.bottom->bottom, rc))) { 2898 btv->framedrop++; 2899 if (debug_latency) 2900 bttv_irq_debug_low_latency(btv, rc); 2901 spin_unlock(&btv->s_lock); 2902 return; 2903 } 2904 2905 /* switch over */ 2906 old = btv->curr; 2907 btv->curr = new; 2908 btv->loop_irq &= ~BT848_RISC_VIDEO; 2909 bttv_buffer_activate_video(btv, &new); 2910 bttv_set_dma(btv, 0); 2911 2912 /* switch input */ 2913 if (UNSET != btv->new_input) { 2914 video_mux(btv,btv->new_input); 2915 btv->new_input = UNSET; 2916 } 2917 2918 /* wake up finished buffers */ 2919 bttv_irq_wakeup_video(btv, &old, &new, VB2_BUF_STATE_DONE); 2920 spin_unlock(&btv->s_lock); 2921 } 2922 2923 static void 2924 bttv_irq_switch_vbi(struct bttv *btv) 2925 { 2926 struct bttv_buffer *new = NULL; 2927 struct bttv_buffer *old; 2928 u32 rc; 2929 2930 spin_lock(&btv->s_lock); 2931 2932 if (!list_empty(&btv->vcapture)) 2933 new = list_entry(btv->vcapture.next, struct bttv_buffer, list); 2934 old = btv->cvbi; 2935 2936 rc = btread(BT848_RISC_COUNT); 2937 if (NULL != old && (is_active(&old->top, rc) || 2938 is_active(&old->bottom, rc))) { 2939 btv->framedrop++; 2940 if (debug_latency) 2941 bttv_irq_debug_low_latency(btv, rc); 2942 spin_unlock(&btv->s_lock); 2943 return; 2944 } 2945 2946 /* switch */ 2947 btv->cvbi = new; 2948 btv->loop_irq &= ~BT848_RISC_VBI; 2949 bttv_buffer_activate_vbi(btv, new); 2950 bttv_set_dma(btv, 0); 2951 2952 bttv_irq_wakeup_vbi(btv, old, VB2_BUF_STATE_DONE); 2953 spin_unlock(&btv->s_lock); 2954 } 2955 2956 static irqreturn_t bttv_irq(int irq, void *dev_id) 2957 { 2958 u32 stat,astat; 2959 u32 dstat; 2960 int count; 2961 struct bttv *btv; 2962 int handled = 0; 2963 2964 btv=(struct bttv *)dev_id; 2965 2966 count=0; 2967 while (1) { 2968 /* get/clear interrupt status bits */ 2969 stat=btread(BT848_INT_STAT); 2970 astat=stat&btread(BT848_INT_MASK); 2971 if (!astat) 2972 break; 2973 handled = 1; 2974 btwrite(stat,BT848_INT_STAT); 2975 2976 /* get device status bits */ 2977 dstat=btread(BT848_DSTATUS); 2978 2979 if (irq_debug) { 2980 pr_debug("%d: irq loop=%d fc=%d riscs=%x, riscc=%08x, ", 2981 btv->c.nr, count, btv->field_count, 2982 stat>>28, btread(BT848_RISC_COUNT)); 2983 bttv_print_irqbits(stat,astat); 2984 if (stat & BT848_INT_HLOCK) 2985 pr_cont(" HLOC => %s", 2986 dstat & BT848_DSTATUS_HLOC 2987 ? "yes" : "no"); 2988 if (stat & BT848_INT_VPRES) 2989 pr_cont(" PRES => %s", 2990 dstat & BT848_DSTATUS_PRES 2991 ? "yes" : "no"); 2992 if (stat & BT848_INT_FMTCHG) 2993 pr_cont(" NUML => %s", 2994 dstat & BT848_DSTATUS_NUML 2995 ? "625" : "525"); 2996 pr_cont("\n"); 2997 } 2998 2999 if (astat&BT848_INT_VSYNC) 3000 btv->field_count++; 3001 3002 if ((astat & BT848_INT_GPINT) && btv->remote) { 3003 bttv_input_irq(btv); 3004 } 3005 3006 if (astat & BT848_INT_I2CDONE) { 3007 btv->i2c_done = stat; 3008 wake_up(&btv->i2c_queue); 3009 } 3010 3011 if ((astat & BT848_INT_RISCI) && (stat & BT848_INT_RISCS_VBI)) 3012 bttv_irq_switch_vbi(btv); 3013 3014 if ((astat & BT848_INT_RISCI) && (stat & BT848_INT_RISCS_TOP)) 3015 bttv_irq_wakeup_top(btv); 3016 3017 if ((astat & BT848_INT_RISCI) && (stat & BT848_INT_RISCS_VIDEO)) 3018 bttv_irq_switch_video(btv); 3019 3020 if ((astat & BT848_INT_HLOCK) && btv->opt_automute) 3021 /* trigger automute */ 3022 audio_mux_gpio(btv, btv->audio_input, btv->mute); 3023 3024 if (astat & (BT848_INT_SCERR|BT848_INT_OCERR)) { 3025 pr_info("%d: %s%s @ %08x,", 3026 btv->c.nr, 3027 (astat & BT848_INT_SCERR) ? "SCERR" : "", 3028 (astat & BT848_INT_OCERR) ? "OCERR" : "", 3029 btread(BT848_RISC_COUNT)); 3030 bttv_print_irqbits(stat,astat); 3031 pr_cont("\n"); 3032 if (bttv_debug) 3033 bttv_print_riscaddr(btv); 3034 } 3035 if (fdsr && astat & BT848_INT_FDSR) { 3036 pr_info("%d: FDSR @ %08x\n", 3037 btv->c.nr, btread(BT848_RISC_COUNT)); 3038 if (bttv_debug) 3039 bttv_print_riscaddr(btv); 3040 } 3041 3042 count++; 3043 if (count > 4) { 3044 3045 if (count > 8 || !(astat & BT848_INT_GPINT)) { 3046 btwrite(0, BT848_INT_MASK); 3047 3048 pr_err("%d: IRQ lockup, cleared int mask [", 3049 btv->c.nr); 3050 } else { 3051 pr_err("%d: IRQ lockup, clearing GPINT from int mask [", 3052 btv->c.nr); 3053 3054 btwrite(btread(BT848_INT_MASK) & (-1 ^ BT848_INT_GPINT), 3055 BT848_INT_MASK); 3056 } 3057 3058 bttv_print_irqbits(stat,astat); 3059 3060 pr_cont("]\n"); 3061 } 3062 } 3063 btv->irq_total++; 3064 if (handled) 3065 btv->irq_me++; 3066 return IRQ_RETVAL(handled); 3067 } 3068 3069 3070 /* ----------------------------------------------------------------------- */ 3071 /* initialization */ 3072 3073 static int vdev_init(struct bttv *btv, struct video_device *vfd, 3074 const struct video_device *template, 3075 const char *type_name) 3076 { 3077 int err; 3078 struct vb2_queue *q; 3079 *vfd = *template; 3080 vfd->v4l2_dev = &btv->c.v4l2_dev; 3081 vfd->release = video_device_release_empty; 3082 video_set_drvdata(vfd, btv); 3083 snprintf(vfd->name, sizeof(vfd->name), "BT%d%s %s (%s)", 3084 btv->id, (btv->id==848 && btv->revision==0x12) ? "A" : "", 3085 type_name, bttv_tvcards[btv->c.type].name); 3086 if (btv->tuner_type == TUNER_ABSENT) { 3087 v4l2_disable_ioctl(vfd, VIDIOC_G_FREQUENCY); 3088 v4l2_disable_ioctl(vfd, VIDIOC_S_FREQUENCY); 3089 v4l2_disable_ioctl(vfd, VIDIOC_G_TUNER); 3090 v4l2_disable_ioctl(vfd, VIDIOC_S_TUNER); 3091 } 3092 3093 if (strcmp(type_name, "radio") == 0) 3094 return 0; 3095 3096 if (strcmp(type_name, "video") == 0) { 3097 q = &btv->capq; 3098 q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 3099 q->ops = &bttv_video_qops; 3100 } else if (strcmp(type_name, "vbi") == 0) { 3101 q = &btv->vbiq; 3102 q->type = V4L2_BUF_TYPE_VBI_CAPTURE; 3103 q->ops = &bttv_vbi_qops; 3104 } else { 3105 return -EINVAL; 3106 } 3107 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 3108 q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ | VB2_DMABUF; 3109 q->mem_ops = &vb2_dma_sg_memops; 3110 q->drv_priv = btv; 3111 q->gfp_flags = __GFP_DMA32; 3112 q->buf_struct_size = sizeof(struct bttv_buffer); 3113 q->lock = &btv->lock; 3114 q->min_queued_buffers = 2; 3115 q->dev = &btv->c.pci->dev; 3116 err = vb2_queue_init(q); 3117 if (err) 3118 return err; 3119 vfd->queue = q; 3120 3121 return 0; 3122 } 3123 3124 static void bttv_unregister_video(struct bttv *btv) 3125 { 3126 video_unregister_device(&btv->video_dev); 3127 video_unregister_device(&btv->vbi_dev); 3128 video_unregister_device(&btv->radio_dev); 3129 } 3130 3131 /* register video4linux devices */ 3132 static int bttv_register_video(struct bttv *btv) 3133 { 3134 /* video */ 3135 vdev_init(btv, &btv->video_dev, &bttv_video_template, "video"); 3136 btv->video_dev.device_caps = V4L2_CAP_VIDEO_CAPTURE | 3137 V4L2_CAP_READWRITE | V4L2_CAP_STREAMING; 3138 if (btv->tuner_type != TUNER_ABSENT) 3139 btv->video_dev.device_caps |= V4L2_CAP_TUNER; 3140 3141 if (video_register_device(&btv->video_dev, VFL_TYPE_VIDEO, 3142 video_nr[btv->c.nr]) < 0) 3143 goto err; 3144 pr_info("%d: registered device %s\n", 3145 btv->c.nr, video_device_node_name(&btv->video_dev)); 3146 if (device_create_file(&btv->video_dev.dev, 3147 &dev_attr_card)<0) { 3148 pr_err("%d: device_create_file 'card' failed\n", btv->c.nr); 3149 goto err; 3150 } 3151 3152 /* vbi */ 3153 vdev_init(btv, &btv->vbi_dev, &bttv_video_template, "vbi"); 3154 btv->vbi_dev.device_caps = V4L2_CAP_VBI_CAPTURE | V4L2_CAP_READWRITE | 3155 V4L2_CAP_STREAMING; 3156 if (btv->tuner_type != TUNER_ABSENT) 3157 btv->vbi_dev.device_caps |= V4L2_CAP_TUNER; 3158 3159 if (video_register_device(&btv->vbi_dev, VFL_TYPE_VBI, 3160 vbi_nr[btv->c.nr]) < 0) 3161 goto err; 3162 pr_info("%d: registered device %s\n", 3163 btv->c.nr, video_device_node_name(&btv->vbi_dev)); 3164 3165 if (!btv->has_radio) 3166 return 0; 3167 /* radio */ 3168 vdev_init(btv, &btv->radio_dev, &radio_template, "radio"); 3169 btv->radio_dev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER; 3170 if (btv->has_saa6588) 3171 btv->radio_dev.device_caps |= V4L2_CAP_READWRITE | 3172 V4L2_CAP_RDS_CAPTURE; 3173 if (btv->has_tea575x) 3174 btv->radio_dev.device_caps |= V4L2_CAP_HW_FREQ_SEEK; 3175 btv->radio_dev.ctrl_handler = &btv->radio_ctrl_handler; 3176 if (video_register_device(&btv->radio_dev, VFL_TYPE_RADIO, 3177 radio_nr[btv->c.nr]) < 0) 3178 goto err; 3179 pr_info("%d: registered device %s\n", 3180 btv->c.nr, video_device_node_name(&btv->radio_dev)); 3181 3182 /* all done */ 3183 return 0; 3184 3185 err: 3186 bttv_unregister_video(btv); 3187 return -1; 3188 } 3189 3190 3191 /* on OpenFirmware machines (PowerMac at least), PCI memory cycle */ 3192 /* response on cards with no firmware is not enabled by OF */ 3193 static void pci_set_command(struct pci_dev *dev) 3194 { 3195 #if defined(__powerpc__) 3196 unsigned int cmd; 3197 3198 pci_read_config_dword(dev, PCI_COMMAND, &cmd); 3199 cmd = (cmd | PCI_COMMAND_MEMORY ); 3200 pci_write_config_dword(dev, PCI_COMMAND, cmd); 3201 #endif 3202 } 3203 3204 static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) 3205 { 3206 struct v4l2_frequency init_freq = { 3207 .tuner = 0, 3208 .type = V4L2_TUNER_ANALOG_TV, 3209 .frequency = 980, 3210 }; 3211 int result; 3212 unsigned char lat; 3213 struct bttv *btv; 3214 struct v4l2_ctrl_handler *hdl; 3215 3216 if (bttv_num == BTTV_MAX) 3217 return -ENOMEM; 3218 pr_info("Bt8xx card found (%d)\n", bttv_num); 3219 bttvs[bttv_num] = btv = kzalloc(sizeof(*btv), GFP_KERNEL); 3220 if (btv == NULL) { 3221 pr_err("out of memory\n"); 3222 return -ENOMEM; 3223 } 3224 btv->c.nr = bttv_num; 3225 snprintf(btv->c.v4l2_dev.name, sizeof(btv->c.v4l2_dev.name), 3226 "bttv%d", btv->c.nr); 3227 3228 /* initialize structs / fill in defaults */ 3229 mutex_init(&btv->lock); 3230 spin_lock_init(&btv->s_lock); 3231 spin_lock_init(&btv->gpio_lock); 3232 init_waitqueue_head(&btv->i2c_queue); 3233 INIT_LIST_HEAD(&btv->c.subs); 3234 INIT_LIST_HEAD(&btv->capture); 3235 INIT_LIST_HEAD(&btv->vcapture); 3236 3237 timer_setup(&btv->timeout, bttv_irq_timeout, 0); 3238 3239 btv->i2c_rc = -1; 3240 btv->tuner_type = UNSET; 3241 btv->new_input = UNSET; 3242 btv->has_radio=radio[btv->c.nr]; 3243 3244 /* pci stuff (init, get irq/mmio, ... */ 3245 btv->c.pci = dev; 3246 btv->id = dev->device; 3247 if (pci_enable_device(dev)) { 3248 pr_warn("%d: Can't enable device\n", btv->c.nr); 3249 result = -EIO; 3250 goto free_mem; 3251 } 3252 if (dma_set_mask(&dev->dev, DMA_BIT_MASK(32))) { 3253 pr_warn("%d: No suitable DMA available\n", btv->c.nr); 3254 result = -EIO; 3255 goto free_mem; 3256 } 3257 if (!request_mem_region(pci_resource_start(dev,0), 3258 pci_resource_len(dev,0), 3259 btv->c.v4l2_dev.name)) { 3260 pr_warn("%d: can't request iomem (0x%llx)\n", 3261 btv->c.nr, 3262 (unsigned long long)pci_resource_start(dev, 0)); 3263 result = -EBUSY; 3264 goto free_mem; 3265 } 3266 pci_set_master(dev); 3267 pci_set_command(dev); 3268 3269 result = v4l2_device_register(&dev->dev, &btv->c.v4l2_dev); 3270 if (result < 0) { 3271 pr_warn("%d: v4l2_device_register() failed\n", btv->c.nr); 3272 goto fail0; 3273 } 3274 hdl = &btv->ctrl_handler; 3275 v4l2_ctrl_handler_init(hdl, 20); 3276 btv->c.v4l2_dev.ctrl_handler = hdl; 3277 v4l2_ctrl_handler_init(&btv->radio_ctrl_handler, 6); 3278 3279 btv->revision = dev->revision; 3280 pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat); 3281 pr_info("%d: Bt%d (rev %d) at %s, irq: %d, latency: %d, mmio: 0x%llx\n", 3282 bttv_num, btv->id, btv->revision, pci_name(dev), 3283 btv->c.pci->irq, lat, 3284 (unsigned long long)pci_resource_start(dev, 0)); 3285 schedule(); 3286 3287 btv->bt848_mmio = ioremap(pci_resource_start(dev, 0), 0x1000); 3288 if (NULL == btv->bt848_mmio) { 3289 pr_err("%d: ioremap() failed\n", btv->c.nr); 3290 result = -EIO; 3291 goto fail1; 3292 } 3293 3294 /* identify card */ 3295 bttv_idcard(btv); 3296 3297 /* disable irqs, register irq handler */ 3298 btwrite(0, BT848_INT_MASK); 3299 result = request_irq(btv->c.pci->irq, bttv_irq, 3300 IRQF_SHARED, btv->c.v4l2_dev.name, (void *)btv); 3301 if (result < 0) { 3302 pr_err("%d: can't get IRQ %d\n", 3303 bttv_num, btv->c.pci->irq); 3304 goto fail1; 3305 } 3306 3307 if (0 != bttv_handle_chipset(btv)) { 3308 result = -EIO; 3309 goto fail2; 3310 } 3311 3312 /* init options from insmod args */ 3313 btv->opt_combfilter = combfilter; 3314 bttv_ctrl_combfilter.def = combfilter; 3315 bttv_ctrl_lumafilter.def = lumafilter; 3316 btv->opt_automute = automute; 3317 bttv_ctrl_automute.def = automute; 3318 bttv_ctrl_agc_crush.def = agc_crush; 3319 btv->opt_vcr_hack = vcr_hack; 3320 bttv_ctrl_vcr_hack.def = vcr_hack; 3321 bttv_ctrl_whitecrush_upper.def = whitecrush_upper; 3322 bttv_ctrl_whitecrush_lower.def = whitecrush_lower; 3323 btv->opt_uv_ratio = uv_ratio; 3324 bttv_ctrl_uv_ratio.def = uv_ratio; 3325 bttv_ctrl_full_luma.def = full_luma_range; 3326 bttv_ctrl_coring.def = coring; 3327 3328 /* fill struct bttv with some useful defaults */ 3329 btv->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24); 3330 btv->width = 320; 3331 btv->height = 240; 3332 btv->field = V4L2_FIELD_INTERLACED; 3333 btv->input = 0; 3334 btv->tvnorm = 0; /* Index into bttv_tvnorms[] i.e. PAL. */ 3335 bttv_vbi_fmt_reset(&btv->vbi_fmt, btv->tvnorm); 3336 btv->vbi_count[0] = VBI_DEFLINES; 3337 btv->vbi_count[1] = VBI_DEFLINES; 3338 btv->do_crop = 0; 3339 3340 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3341 V4L2_CID_BRIGHTNESS, 0, 0xff00, 0x100, 32768); 3342 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3343 V4L2_CID_CONTRAST, 0, 0xff80, 0x80, 0x6c00); 3344 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3345 V4L2_CID_SATURATION, 0, 0xff80, 0x80, 32768); 3346 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3347 V4L2_CID_COLOR_KILLER, 0, 1, 1, 0); 3348 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3349 V4L2_CID_HUE, 0, 0xff00, 0x100, 32768); 3350 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3351 V4L2_CID_CHROMA_AGC, 0, 1, 1, !!chroma_agc); 3352 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3353 V4L2_CID_AUDIO_MUTE, 0, 1, 1, 0); 3354 if (btv->volume_gpio) 3355 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops, 3356 V4L2_CID_AUDIO_VOLUME, 0, 0xff00, 0x100, 0xff00); 3357 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_combfilter, NULL); 3358 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_automute, NULL); 3359 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_lumafilter, NULL); 3360 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_agc_crush, NULL); 3361 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_vcr_hack, NULL); 3362 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_whitecrush_lower, NULL); 3363 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_whitecrush_upper, NULL); 3364 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_uv_ratio, NULL); 3365 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_full_luma, NULL); 3366 v4l2_ctrl_new_custom(hdl, &bttv_ctrl_coring, NULL); 3367 3368 /* initialize hardware */ 3369 if (bttv_gpio) 3370 bttv_gpio_tracking(btv,"pre-init"); 3371 3372 bttv_risc_init_main(btv); 3373 init_bt848(btv); 3374 3375 /* gpio */ 3376 btwrite(0x00, BT848_GPIO_REG_INP); 3377 btwrite(0x00, BT848_GPIO_OUT_EN); 3378 if (bttv_verbose) 3379 bttv_gpio_tracking(btv,"init"); 3380 3381 /* needs to be done before i2c is registered */ 3382 bttv_init_card1(btv); 3383 3384 /* register i2c + gpio */ 3385 init_bttv_i2c(btv); 3386 3387 /* some card-specific stuff (needs working i2c) */ 3388 bttv_init_card2(btv); 3389 bttv_init_tuner(btv); 3390 if (btv->tuner_type != TUNER_ABSENT) { 3391 bttv_set_frequency(btv, &init_freq); 3392 btv->radio_freq = 90500 * 16; /* 90.5Mhz default */ 3393 } 3394 btv->std = V4L2_STD_PAL; 3395 init_irqreg(btv); 3396 if (!bttv_tvcards[btv->c.type].no_video) 3397 v4l2_ctrl_handler_setup(hdl); 3398 if (hdl->error) { 3399 result = hdl->error; 3400 goto fail2; 3401 } 3402 /* mute device */ 3403 audio_mute(btv, 1); 3404 3405 /* register video4linux + input */ 3406 if (!bttv_tvcards[btv->c.type].no_video) { 3407 v4l2_ctrl_add_handler(&btv->radio_ctrl_handler, hdl, 3408 v4l2_ctrl_radio_filter, false); 3409 if (btv->radio_ctrl_handler.error) { 3410 result = btv->radio_ctrl_handler.error; 3411 goto fail2; 3412 } 3413 set_input(btv, btv->input, btv->tvnorm); 3414 bttv_crop_reset(&btv->crop[0], btv->tvnorm); 3415 btv->crop[1] = btv->crop[0]; /* current = default */ 3416 disclaim_vbi_lines(btv); 3417 disclaim_video_lines(btv); 3418 bttv_register_video(btv); 3419 } 3420 3421 /* add subdevices and autoload dvb-bt8xx if needed */ 3422 if (bttv_tvcards[btv->c.type].has_dvb) { 3423 bttv_sub_add_device(&btv->c, "dvb"); 3424 request_modules(btv); 3425 } 3426 3427 if (!disable_ir) { 3428 init_bttv_i2c_ir(btv); 3429 bttv_input_init(btv); 3430 } 3431 3432 /* everything is fine */ 3433 bttv_num++; 3434 return 0; 3435 3436 fail2: 3437 free_irq(btv->c.pci->irq,btv); 3438 3439 fail1: 3440 v4l2_ctrl_handler_free(&btv->ctrl_handler); 3441 v4l2_ctrl_handler_free(&btv->radio_ctrl_handler); 3442 v4l2_device_unregister(&btv->c.v4l2_dev); 3443 3444 fail0: 3445 if (btv->bt848_mmio) 3446 iounmap(btv->bt848_mmio); 3447 release_mem_region(pci_resource_start(btv->c.pci,0), 3448 pci_resource_len(btv->c.pci,0)); 3449 pci_disable_device(btv->c.pci); 3450 3451 free_mem: 3452 bttvs[btv->c.nr] = NULL; 3453 kfree(btv); 3454 return result; 3455 } 3456 3457 static void bttv_remove(struct pci_dev *pci_dev) 3458 { 3459 struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev); 3460 struct bttv *btv = to_bttv(v4l2_dev); 3461 3462 if (bttv_verbose) 3463 pr_info("%d: unloading\n", btv->c.nr); 3464 3465 if (bttv_tvcards[btv->c.type].has_dvb) 3466 flush_request_modules(btv); 3467 3468 /* shutdown everything (DMA+IRQs) */ 3469 btand(~15, BT848_GPIO_DMA_CTL); 3470 btwrite(0, BT848_INT_MASK); 3471 btwrite(~0x0, BT848_INT_STAT); 3472 btwrite(0x0, BT848_GPIO_OUT_EN); 3473 if (bttv_gpio) 3474 bttv_gpio_tracking(btv,"cleanup"); 3475 3476 /* tell gpio modules we are leaving ... */ 3477 btv->shutdown=1; 3478 bttv_input_fini(btv); 3479 bttv_sub_del_devices(&btv->c); 3480 3481 /* unregister i2c_bus + input */ 3482 fini_bttv_i2c(btv); 3483 3484 /* unregister video4linux */ 3485 bttv_unregister_video(btv); 3486 3487 /* free allocated memory */ 3488 v4l2_ctrl_handler_free(&btv->ctrl_handler); 3489 v4l2_ctrl_handler_free(&btv->radio_ctrl_handler); 3490 btcx_riscmem_free(btv->c.pci,&btv->main); 3491 3492 /* free resources */ 3493 free_irq(btv->c.pci->irq,btv); 3494 del_timer_sync(&btv->timeout); 3495 iounmap(btv->bt848_mmio); 3496 release_mem_region(pci_resource_start(btv->c.pci,0), 3497 pci_resource_len(btv->c.pci,0)); 3498 pci_disable_device(btv->c.pci); 3499 3500 v4l2_device_unregister(&btv->c.v4l2_dev); 3501 bttvs[btv->c.nr] = NULL; 3502 kfree(btv); 3503 3504 return; 3505 } 3506 3507 static int __maybe_unused bttv_suspend(struct device *dev) 3508 { 3509 struct v4l2_device *v4l2_dev = dev_get_drvdata(dev); 3510 struct bttv *btv = to_bttv(v4l2_dev); 3511 struct bttv_buffer_set idle; 3512 unsigned long flags; 3513 3514 dprintk("%d: suspend\n", btv->c.nr); 3515 3516 /* stop dma + irqs */ 3517 spin_lock_irqsave(&btv->s_lock,flags); 3518 memset(&idle, 0, sizeof(idle)); 3519 btv->state.video = btv->curr; 3520 btv->state.vbi = btv->cvbi; 3521 btv->state.loop_irq = btv->loop_irq; 3522 btv->curr = idle; 3523 btv->loop_irq = 0; 3524 bttv_buffer_activate_video(btv, &idle); 3525 bttv_buffer_activate_vbi(btv, NULL); 3526 bttv_set_dma(btv, 0); 3527 btwrite(0, BT848_INT_MASK); 3528 spin_unlock_irqrestore(&btv->s_lock,flags); 3529 3530 /* save bt878 state */ 3531 btv->state.gpio_enable = btread(BT848_GPIO_OUT_EN); 3532 btv->state.gpio_data = gpio_read(); 3533 3534 btv->state.disabled = 1; 3535 return 0; 3536 } 3537 3538 static int __maybe_unused bttv_resume(struct device *dev) 3539 { 3540 struct v4l2_device *v4l2_dev = dev_get_drvdata(dev); 3541 struct bttv *btv = to_bttv(v4l2_dev); 3542 unsigned long flags; 3543 3544 dprintk("%d: resume\n", btv->c.nr); 3545 3546 btv->state.disabled = 0; 3547 3548 /* restore bt878 state */ 3549 bttv_reinit_bt848(btv); 3550 gpio_inout(0xffffff, btv->state.gpio_enable); 3551 gpio_write(btv->state.gpio_data); 3552 3553 /* restart dma */ 3554 spin_lock_irqsave(&btv->s_lock,flags); 3555 btv->curr = btv->state.video; 3556 btv->cvbi = btv->state.vbi; 3557 btv->loop_irq = btv->state.loop_irq; 3558 bttv_buffer_activate_video(btv, &btv->curr); 3559 bttv_buffer_activate_vbi(btv, btv->cvbi); 3560 bttv_set_dma(btv, 0); 3561 spin_unlock_irqrestore(&btv->s_lock,flags); 3562 return 0; 3563 } 3564 3565 static const struct pci_device_id bttv_pci_tbl[] = { 3566 {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT848), 0}, 3567 {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT849), 0}, 3568 {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT878), 0}, 3569 {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT879), 0}, 3570 {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_FUSION879), 0}, 3571 {0,} 3572 }; 3573 3574 MODULE_DEVICE_TABLE(pci, bttv_pci_tbl); 3575 3576 static SIMPLE_DEV_PM_OPS(bttv_pm_ops, 3577 bttv_suspend, 3578 bttv_resume); 3579 3580 static struct pci_driver bttv_pci_driver = { 3581 .name = "bttv", 3582 .id_table = bttv_pci_tbl, 3583 .probe = bttv_probe, 3584 .remove = bttv_remove, 3585 .driver.pm = &bttv_pm_ops, 3586 }; 3587 3588 static int __init bttv_init_module(void) 3589 { 3590 int ret; 3591 3592 bttv_num = 0; 3593 3594 pr_info("driver version %s loaded\n", BTTV_VERSION); 3595 if (gbuffers < 2 || gbuffers > VIDEO_MAX_FRAME) 3596 gbuffers = 2; 3597 if (gbufsize > BTTV_MAX_FBUF) 3598 gbufsize = BTTV_MAX_FBUF; 3599 gbufsize = (gbufsize + PAGE_SIZE - 1) & PAGE_MASK; 3600 if (bttv_verbose) 3601 pr_info("using %d buffers with %dk (%d pages) each for capture\n", 3602 gbuffers, gbufsize >> 10, gbufsize >> PAGE_SHIFT); 3603 3604 bttv_check_chipset(); 3605 3606 ret = bus_register(&bttv_sub_bus_type); 3607 if (ret < 0) { 3608 pr_warn("bus_register error: %d\n", ret); 3609 return ret; 3610 } 3611 ret = pci_register_driver(&bttv_pci_driver); 3612 if (ret < 0) 3613 bus_unregister(&bttv_sub_bus_type); 3614 3615 return ret; 3616 } 3617 3618 static void __exit bttv_cleanup_module(void) 3619 { 3620 pci_unregister_driver(&bttv_pci_driver); 3621 bus_unregister(&bttv_sub_bus_type); 3622 } 3623 3624 module_init(bttv_init_module); 3625 module_exit(bttv_cleanup_module); 3626