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