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