Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[linux-drm-fsl-dcu.git] / drivers / media / pci / bt8xx / bttv-driver.c
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/tvaudio.h>
54 #include <media/msp3400.h>
55
56 #include <linux/dma-mapping.h>
57
58 #include <asm/io.h>
59 #include <asm/byteorder.h>
60
61 #include <media/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 = container_of(cd, struct video_device, dev);
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(48, c->rect.width >> 4) + 3) & ~3;
1130                 c->min_scaled_height =
1131                         max(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, core, 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         int retval = 0;
1535
1536         dprintk("switch_overlay: enter [new=%p]\n", new);
1537         if (new)
1538                 new->vb.state = VIDEOBUF_DONE;
1539         spin_lock_irqsave(&btv->s_lock,flags);
1540         old = btv->screen;
1541         btv->screen = new;
1542         btv->loop_irq |= 1;
1543         bttv_set_dma(btv, 0x03);
1544         spin_unlock_irqrestore(&btv->s_lock,flags);
1545         if (NULL != old) {
1546                 dprintk("switch_overlay: old=%p state is %d\n",
1547                         old, old->vb.state);
1548                 bttv_dma_free(&fh->cap,btv, old);
1549                 kfree(old);
1550         }
1551         if (NULL == new)
1552                 free_btres_lock(btv,fh,RESOURCE_OVERLAY);
1553         dprintk("switch_overlay: done\n");
1554         return retval;
1555 }
1556
1557 /* ----------------------------------------------------------------------- */
1558 /* video4linux (1) interface                                               */
1559
1560 static int bttv_prepare_buffer(struct videobuf_queue *q,struct bttv *btv,
1561                                struct bttv_buffer *buf,
1562                                const struct bttv_format *fmt,
1563                                unsigned int width, unsigned int height,
1564                                enum v4l2_field field)
1565 {
1566         struct bttv_fh *fh = q->priv_data;
1567         int redo_dma_risc = 0;
1568         struct bttv_crop c;
1569         int norm;
1570         int rc;
1571
1572         /* check settings */
1573         if (NULL == fmt)
1574                 return -EINVAL;
1575         if (fmt->btformat == BT848_COLOR_FMT_RAW) {
1576                 width  = RAW_BPL;
1577                 height = RAW_LINES*2;
1578                 if (width*height > buf->vb.bsize)
1579                         return -EINVAL;
1580                 buf->vb.size = buf->vb.bsize;
1581
1582                 /* Make sure tvnorm and vbi_end remain consistent
1583                    until we're done. */
1584
1585                 norm = btv->tvnorm;
1586
1587                 /* In this mode capturing always starts at defrect.top
1588                    (default VDELAY), ignoring cropping parameters. */
1589                 if (btv->vbi_end > bttv_tvnorms[norm].cropcap.defrect.top) {
1590                         return -EINVAL;
1591                 }
1592
1593                 c.rect = bttv_tvnorms[norm].cropcap.defrect;
1594         } else {
1595                 norm = btv->tvnorm;
1596                 c = btv->crop[!!fh->do_crop];
1597
1598                 if (width < c.min_scaled_width ||
1599                     width > c.max_scaled_width ||
1600                     height < c.min_scaled_height)
1601                         return -EINVAL;
1602
1603                 switch (field) {
1604                 case V4L2_FIELD_TOP:
1605                 case V4L2_FIELD_BOTTOM:
1606                 case V4L2_FIELD_ALTERNATE:
1607                         /* btv->crop counts frame lines. Max. scale
1608                            factor is 16:1 for frames, 8:1 for fields. */
1609                         if (height * 2 > c.max_scaled_height)
1610                                 return -EINVAL;
1611                         break;
1612
1613                 default:
1614                         if (height > c.max_scaled_height)
1615                                 return -EINVAL;
1616                         break;
1617                 }
1618
1619                 buf->vb.size = (width * height * fmt->depth) >> 3;
1620                 if (0 != buf->vb.baddr  &&  buf->vb.bsize < buf->vb.size)
1621                         return -EINVAL;
1622         }
1623
1624         /* alloc + fill struct bttv_buffer (if changed) */
1625         if (buf->vb.width != width || buf->vb.height != height ||
1626             buf->vb.field != field ||
1627             buf->tvnorm != norm || buf->fmt != fmt ||
1628             buf->crop.top != c.rect.top ||
1629             buf->crop.left != c.rect.left ||
1630             buf->crop.width != c.rect.width ||
1631             buf->crop.height != c.rect.height) {
1632                 buf->vb.width  = width;
1633                 buf->vb.height = height;
1634                 buf->vb.field  = field;
1635                 buf->tvnorm    = norm;
1636                 buf->fmt       = fmt;
1637                 buf->crop      = c.rect;
1638                 redo_dma_risc = 1;
1639         }
1640
1641         /* alloc risc memory */
1642         if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
1643                 redo_dma_risc = 1;
1644                 if (0 != (rc = videobuf_iolock(q,&buf->vb,&btv->fbuf)))
1645                         goto fail;
1646         }
1647
1648         if (redo_dma_risc)
1649                 if (0 != (rc = bttv_buffer_risc(btv,buf)))
1650                         goto fail;
1651
1652         buf->vb.state = VIDEOBUF_PREPARED;
1653         return 0;
1654
1655  fail:
1656         bttv_dma_free(q,btv,buf);
1657         return rc;
1658 }
1659
1660 static int
1661 buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size)
1662 {
1663         struct bttv_fh *fh = q->priv_data;
1664
1665         *size = fh->fmt->depth*fh->width*fh->height >> 3;
1666         if (0 == *count)
1667                 *count = gbuffers;
1668         if (*size * *count > gbuffers * gbufsize)
1669                 *count = (gbuffers * gbufsize) / *size;
1670         return 0;
1671 }
1672
1673 static int
1674 buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
1675                enum v4l2_field field)
1676 {
1677         struct bttv_buffer *buf = container_of(vb,struct bttv_buffer,vb);
1678         struct bttv_fh *fh = q->priv_data;
1679
1680         return bttv_prepare_buffer(q,fh->btv, buf, fh->fmt,
1681                                    fh->width, fh->height, field);
1682 }
1683
1684 static void
1685 buffer_queue(struct videobuf_queue *q, struct videobuf_buffer *vb)
1686 {
1687         struct bttv_buffer *buf = container_of(vb,struct bttv_buffer,vb);
1688         struct bttv_fh *fh = q->priv_data;
1689         struct bttv    *btv = fh->btv;
1690
1691         buf->vb.state = VIDEOBUF_QUEUED;
1692         list_add_tail(&buf->vb.queue,&btv->capture);
1693         if (!btv->curr.frame_irq) {
1694                 btv->loop_irq |= 1;
1695                 bttv_set_dma(btv, 0x03);
1696         }
1697 }
1698
1699 static void buffer_release(struct videobuf_queue *q, struct videobuf_buffer *vb)
1700 {
1701         struct bttv_buffer *buf = container_of(vb,struct bttv_buffer,vb);
1702         struct bttv_fh *fh = q->priv_data;
1703
1704         bttv_dma_free(q,fh->btv,buf);
1705 }
1706
1707 static struct videobuf_queue_ops bttv_video_qops = {
1708         .buf_setup    = buffer_setup,
1709         .buf_prepare  = buffer_prepare,
1710         .buf_queue    = buffer_queue,
1711         .buf_release  = buffer_release,
1712 };
1713
1714 static void radio_enable(struct bttv *btv)
1715 {
1716         /* Switch to the radio tuner */
1717         if (!btv->has_radio_tuner) {
1718                 btv->has_radio_tuner = 1;
1719                 bttv_call_all(btv, tuner, s_radio);
1720                 btv->audio_input = TVAUDIO_INPUT_RADIO;
1721                 audio_input(btv, btv->audio_input);
1722         }
1723 }
1724
1725 static int bttv_s_std(struct file *file, void *priv, v4l2_std_id id)
1726 {
1727         struct bttv_fh *fh  = priv;
1728         struct bttv *btv = fh->btv;
1729         unsigned int i;
1730         int err = 0;
1731
1732         for (i = 0; i < BTTV_TVNORMS; i++)
1733                 if (id & bttv_tvnorms[i].v4l2_id)
1734                         break;
1735         if (i == BTTV_TVNORMS) {
1736                 err = -EINVAL;
1737                 goto err;
1738         }
1739
1740         btv->std = id;
1741         set_tvnorm(btv, i);
1742
1743 err:
1744
1745         return err;
1746 }
1747
1748 static int bttv_g_std(struct file *file, void *priv, v4l2_std_id *id)
1749 {
1750         struct bttv_fh *fh  = priv;
1751         struct bttv *btv = fh->btv;
1752
1753         *id = btv->std;
1754         return 0;
1755 }
1756
1757 static int bttv_querystd(struct file *file, void *f, v4l2_std_id *id)
1758 {
1759         struct bttv_fh *fh = f;
1760         struct bttv *btv = fh->btv;
1761
1762         if (btread(BT848_DSTATUS) & BT848_DSTATUS_NUML)
1763                 *id &= V4L2_STD_625_50;
1764         else
1765                 *id &= V4L2_STD_525_60;
1766         return 0;
1767 }
1768
1769 static int bttv_enum_input(struct file *file, void *priv,
1770                                         struct v4l2_input *i)
1771 {
1772         struct bttv_fh *fh = priv;
1773         struct bttv *btv = fh->btv;
1774         int rc = 0;
1775
1776         if (i->index >= bttv_tvcards[btv->c.type].video_inputs) {
1777                 rc = -EINVAL;
1778                 goto err;
1779         }
1780
1781         i->type     = V4L2_INPUT_TYPE_CAMERA;
1782         i->audioset = 0;
1783
1784         if (btv->tuner_type != TUNER_ABSENT && i->index == 0) {
1785                 sprintf(i->name, "Television");
1786                 i->type  = V4L2_INPUT_TYPE_TUNER;
1787                 i->tuner = 0;
1788         } else if (i->index == btv->svhs) {
1789                 sprintf(i->name, "S-Video");
1790         } else {
1791                 sprintf(i->name, "Composite%d", i->index);
1792         }
1793
1794         if (i->index == btv->input) {
1795                 __u32 dstatus = btread(BT848_DSTATUS);
1796                 if (0 == (dstatus & BT848_DSTATUS_PRES))
1797                         i->status |= V4L2_IN_ST_NO_SIGNAL;
1798                 if (0 == (dstatus & BT848_DSTATUS_HLOC))
1799                         i->status |= V4L2_IN_ST_NO_H_LOCK;
1800         }
1801
1802         i->std = BTTV_NORMS;
1803
1804 err:
1805
1806         return rc;
1807 }
1808
1809 static int bttv_g_input(struct file *file, void *priv, unsigned int *i)
1810 {
1811         struct bttv_fh *fh = priv;
1812         struct bttv *btv = fh->btv;
1813
1814         *i = btv->input;
1815
1816         return 0;
1817 }
1818
1819 static int bttv_s_input(struct file *file, void *priv, unsigned int i)
1820 {
1821         struct bttv_fh *fh  = priv;
1822         struct bttv *btv = fh->btv;
1823
1824         if (i >= bttv_tvcards[btv->c.type].video_inputs)
1825                 return -EINVAL;
1826
1827         set_input(btv, i, btv->tvnorm);
1828         return 0;
1829 }
1830
1831 static int bttv_s_tuner(struct file *file, void *priv,
1832                                         const struct v4l2_tuner *t)
1833 {
1834         struct bttv_fh *fh  = priv;
1835         struct bttv *btv = fh->btv;
1836
1837         if (t->index)
1838                 return -EINVAL;
1839
1840         bttv_call_all(btv, tuner, s_tuner, t);
1841
1842         if (btv->audio_mode_gpio) {
1843                 struct v4l2_tuner copy = *t;
1844
1845                 btv->audio_mode_gpio(btv, &copy, 1);
1846         }
1847         return 0;
1848 }
1849
1850 static int bttv_g_frequency(struct file *file, void *priv,
1851                                         struct v4l2_frequency *f)
1852 {
1853         struct bttv_fh *fh  = priv;
1854         struct bttv *btv = fh->btv;
1855
1856         if (f->tuner)
1857                 return -EINVAL;
1858
1859         if (f->type == V4L2_TUNER_RADIO)
1860                 radio_enable(btv);
1861         f->frequency = f->type == V4L2_TUNER_RADIO ?
1862                                 btv->radio_freq : btv->tv_freq;
1863
1864         return 0;
1865 }
1866
1867 static void bttv_set_frequency(struct bttv *btv, const struct v4l2_frequency *f)
1868 {
1869         struct v4l2_frequency new_freq = *f;
1870
1871         bttv_call_all(btv, tuner, s_frequency, f);
1872         /* s_frequency may clamp the frequency, so get the actual
1873            frequency before assigning radio/tv_freq. */
1874         bttv_call_all(btv, tuner, g_frequency, &new_freq);
1875         if (new_freq.type == V4L2_TUNER_RADIO) {
1876                 radio_enable(btv);
1877                 btv->radio_freq = new_freq.frequency;
1878                 if (btv->has_matchbox)
1879                         tea5757_set_freq(btv, btv->radio_freq);
1880         } else {
1881                 btv->tv_freq = new_freq.frequency;
1882         }
1883 }
1884
1885 static int bttv_s_frequency(struct file *file, void *priv,
1886                                         const struct v4l2_frequency *f)
1887 {
1888         struct bttv_fh *fh  = priv;
1889         struct bttv *btv = fh->btv;
1890
1891         if (f->tuner)
1892                 return -EINVAL;
1893
1894         bttv_set_frequency(btv, f);
1895         return 0;
1896 }
1897
1898 static int bttv_log_status(struct file *file, void *f)
1899 {
1900         struct video_device *vdev = video_devdata(file);
1901         struct bttv_fh *fh  = f;
1902         struct bttv *btv = fh->btv;
1903
1904         v4l2_ctrl_handler_log_status(vdev->ctrl_handler, btv->c.v4l2_dev.name);
1905         bttv_call_all(btv, core, log_status);
1906         return 0;
1907 }
1908
1909 #ifdef CONFIG_VIDEO_ADV_DEBUG
1910 static int bttv_g_register(struct file *file, void *f,
1911                                         struct v4l2_dbg_register *reg)
1912 {
1913         struct bttv_fh *fh = f;
1914         struct bttv *btv = fh->btv;
1915
1916         /* bt848 has a 12-bit register space */
1917         reg->reg &= 0xfff;
1918         reg->val = btread(reg->reg);
1919         reg->size = 1;
1920
1921         return 0;
1922 }
1923
1924 static int bttv_s_register(struct file *file, void *f,
1925                                         const struct v4l2_dbg_register *reg)
1926 {
1927         struct bttv_fh *fh = f;
1928         struct bttv *btv = fh->btv;
1929
1930         /* bt848 has a 12-bit register space */
1931         btwrite(reg->val, reg->reg & 0xfff);
1932
1933         return 0;
1934 }
1935 #endif
1936
1937 /* Given cropping boundaries b and the scaled width and height of a
1938    single field or frame, which must not exceed hardware limits, this
1939    function adjusts the cropping parameters c. */
1940 static void
1941 bttv_crop_adjust        (struct bttv_crop *             c,
1942                          const struct v4l2_rect *       b,
1943                          __s32                          width,
1944                          __s32                          height,
1945                          enum v4l2_field                field)
1946 {
1947         __s32 frame_height = height << !V4L2_FIELD_HAS_BOTH(field);
1948         __s32 max_left;
1949         __s32 max_top;
1950
1951         if (width < c->min_scaled_width) {
1952                 /* Max. hor. scale factor 16:1. */
1953                 c->rect.width = width * 16;
1954         } else if (width > c->max_scaled_width) {
1955                 /* Min. hor. scale factor 1:1. */
1956                 c->rect.width = width;
1957
1958                 max_left = b->left + b->width - width;
1959                 max_left = min(max_left, (__s32) MAX_HDELAY);
1960                 if (c->rect.left > max_left)
1961                         c->rect.left = max_left;
1962         }
1963
1964         if (height < c->min_scaled_height) {
1965                 /* Max. vert. scale factor 16:1, single fields 8:1. */
1966                 c->rect.height = height * 16;
1967         } else if (frame_height > c->max_scaled_height) {
1968                 /* Min. vert. scale factor 1:1.
1969                    Top and height count field lines times two. */
1970                 c->rect.height = (frame_height + 1) & ~1;
1971
1972                 max_top = b->top + b->height - c->rect.height;
1973                 if (c->rect.top > max_top)
1974                         c->rect.top = max_top;
1975         }
1976
1977         bttv_crop_calc_limits(c);
1978 }
1979
1980 /* Returns an error if scaling to a frame or single field with the given
1981    width and height is not possible with the current cropping parameters
1982    and width aligned according to width_mask. If adjust_size is TRUE the
1983    function may adjust the width and/or height instead, rounding width
1984    to (width + width_bias) & width_mask. If adjust_crop is TRUE it may
1985    also adjust the current cropping parameters to get closer to the
1986    desired image size. */
1987 static int
1988 limit_scaled_size_lock       (struct bttv_fh *               fh,
1989                          __s32 *                        width,
1990                          __s32 *                        height,
1991                          enum v4l2_field                field,
1992                          unsigned int                   width_mask,
1993                          unsigned int                   width_bias,
1994                          int                            adjust_size,
1995                          int                            adjust_crop)
1996 {
1997         struct bttv *btv = fh->btv;
1998         const struct v4l2_rect *b;
1999         struct bttv_crop *c;
2000         __s32 min_width;
2001         __s32 min_height;
2002         __s32 max_width;
2003         __s32 max_height;
2004         int rc;
2005
2006         BUG_ON((int) width_mask >= 0 ||
2007                width_bias >= (unsigned int) -width_mask);
2008
2009         /* Make sure tvnorm, vbi_end and the current cropping parameters
2010            remain consistent until we're done. */
2011
2012         b = &bttv_tvnorms[btv->tvnorm].cropcap.bounds;
2013
2014         /* Do crop - use current, don't - use default parameters. */
2015         c = &btv->crop[!!fh->do_crop];
2016
2017         if (fh->do_crop
2018             && adjust_size
2019             && adjust_crop
2020             && !locked_btres(btv, VIDEO_RESOURCES)) {
2021                 min_width = 48;
2022                 min_height = 32;
2023
2024                 /* We cannot scale up. When the scaled image is larger
2025                    than crop.rect we adjust the crop.rect as required
2026                    by the V4L2 spec, hence cropcap.bounds are our limit. */
2027                 max_width = min(b->width, (__s32) MAX_HACTIVE);
2028                 max_height = b->height;
2029
2030                 /* We cannot capture the same line as video and VBI data.
2031                    Note btv->vbi_end is really a minimum, see
2032                    bttv_vbi_try_fmt(). */
2033                 if (btv->vbi_end > b->top) {
2034                         max_height -= btv->vbi_end - b->top;
2035                         rc = -EBUSY;
2036                         if (min_height > max_height)
2037                                 goto fail;
2038                 }
2039         } else {
2040                 rc = -EBUSY;
2041                 if (btv->vbi_end > c->rect.top)
2042                         goto fail;
2043
2044                 min_width  = c->min_scaled_width;
2045                 min_height = c->min_scaled_height;
2046                 max_width  = c->max_scaled_width;
2047                 max_height = c->max_scaled_height;
2048
2049                 adjust_crop = 0;
2050         }
2051
2052         min_width = (min_width - width_mask - 1) & width_mask;
2053         max_width = max_width & width_mask;
2054
2055         /* Max. scale factor is 16:1 for frames, 8:1 for fields. */
2056         min_height = min_height;
2057         /* Min. scale factor is 1:1. */
2058         max_height >>= !V4L2_FIELD_HAS_BOTH(field);
2059
2060         if (adjust_size) {
2061                 *width = clamp(*width, min_width, max_width);
2062                 *height = clamp(*height, min_height, max_height);
2063
2064                 /* Round after clamping to avoid overflow. */
2065                 *width = (*width + width_bias) & width_mask;
2066
2067                 if (adjust_crop) {
2068                         bttv_crop_adjust(c, b, *width, *height, field);
2069
2070                         if (btv->vbi_end > c->rect.top) {
2071                                 /* Move the crop window out of the way. */
2072                                 c->rect.top = btv->vbi_end;
2073                         }
2074                 }
2075         } else {
2076                 rc = -EINVAL;
2077                 if (*width  < min_width ||
2078                     *height < min_height ||
2079                     *width  > max_width ||
2080                     *height > max_height ||
2081                     0 != (*width & ~width_mask))
2082                         goto fail;
2083         }
2084
2085         rc = 0; /* success */
2086
2087  fail:
2088
2089         return rc;
2090 }
2091
2092 /* Returns an error if the given overlay window dimensions are not
2093    possible with the current cropping parameters. If adjust_size is
2094    TRUE the function may adjust the window width and/or height
2095    instead, however it always rounds the horizontal position and
2096    width as btcx_align() does. If adjust_crop is TRUE the function
2097    may also adjust the current cropping parameters to get closer
2098    to the desired window size. */
2099 static int
2100 verify_window_lock(struct bttv_fh *fh, struct v4l2_window *win,
2101                          int adjust_size, int adjust_crop)
2102 {
2103         enum v4l2_field field;
2104         unsigned int width_mask;
2105         int rc;
2106
2107         if (win->w.width < 48)
2108                 win->w.width = 48;
2109         if (win->w.height < 32)
2110                 win->w.height = 32;
2111         if (win->clipcount > 2048)
2112                 win->clipcount = 2048;
2113
2114         win->chromakey = 0;
2115         win->global_alpha = 0;
2116         field = win->field;
2117
2118         switch (field) {
2119         case V4L2_FIELD_TOP:
2120         case V4L2_FIELD_BOTTOM:
2121         case V4L2_FIELD_INTERLACED:
2122                 break;
2123         default:
2124                 field = V4L2_FIELD_ANY;
2125                 break;
2126         }
2127         if (V4L2_FIELD_ANY == field) {
2128                 __s32 height2;
2129
2130                 height2 = fh->btv->crop[!!fh->do_crop].rect.height >> 1;
2131                 field = (win->w.height > height2)
2132                         ? V4L2_FIELD_INTERLACED
2133                         : V4L2_FIELD_TOP;
2134         }
2135         win->field = field;
2136
2137         if (NULL == fh->ovfmt)
2138                 return -EINVAL;
2139         /* 4-byte alignment. */
2140         width_mask = ~0;
2141         switch (fh->ovfmt->depth) {
2142         case 8:
2143         case 24:
2144                 width_mask = ~3;
2145                 break;
2146         case 16:
2147                 width_mask = ~1;
2148                 break;
2149         case 32:
2150                 break;
2151         default:
2152                 BUG();
2153         }
2154
2155         win->w.width -= win->w.left & ~width_mask;
2156         win->w.left = (win->w.left - width_mask - 1) & width_mask;
2157
2158         rc = limit_scaled_size_lock(fh, &win->w.width, &win->w.height,
2159                                field, width_mask,
2160                                /* width_bias: round down */ 0,
2161                                adjust_size, adjust_crop);
2162         if (0 != rc)
2163                 return rc;
2164         return 0;
2165 }
2166
2167 static int setup_window_lock(struct bttv_fh *fh, struct bttv *btv,
2168                         struct v4l2_window *win, int fixup)
2169 {
2170         struct v4l2_clip *clips = NULL;
2171         int n,size,retval = 0;
2172
2173         if (NULL == fh->ovfmt)
2174                 return -EINVAL;
2175         if (!(fh->ovfmt->flags & FORMAT_FLAGS_PACKED))
2176                 return -EINVAL;
2177         retval = verify_window_lock(fh, win,
2178                                /* adjust_size */ fixup,
2179                                /* adjust_crop */ fixup);
2180         if (0 != retval)
2181                 return retval;
2182
2183         /* copy clips  --  luckily v4l1 + v4l2 are binary
2184            compatible here ...*/
2185         n = win->clipcount;
2186         size = sizeof(*clips)*(n+4);
2187         clips = kmalloc(size,GFP_KERNEL);
2188         if (NULL == clips)
2189                 return -ENOMEM;
2190         if (n > 0) {
2191                 if (copy_from_user(clips,win->clips,sizeof(struct v4l2_clip)*n)) {
2192                         kfree(clips);
2193                         return -EFAULT;
2194                 }
2195         }
2196
2197         /* clip against screen */
2198         if (NULL != btv->fbuf.base)
2199                 n = btcx_screen_clips(btv->fbuf.fmt.width, btv->fbuf.fmt.height,
2200                                       &win->w, clips, n);
2201         btcx_sort_clips(clips,n);
2202
2203         /* 4-byte alignments */
2204         switch (fh->ovfmt->depth) {
2205         case 8:
2206         case 24:
2207                 btcx_align(&win->w, clips, n, 3);
2208                 break;
2209         case 16:
2210                 btcx_align(&win->w, clips, n, 1);
2211                 break;
2212         case 32:
2213                 /* no alignment fixups needed */
2214                 break;
2215         default:
2216                 BUG();
2217         }
2218
2219         kfree(fh->ov.clips);
2220         fh->ov.clips    = clips;
2221         fh->ov.nclips   = n;
2222
2223         fh->ov.w        = win->w;
2224         fh->ov.field    = win->field;
2225         fh->ov.setup_ok = 1;
2226
2227         btv->init.ov.w.width   = win->w.width;
2228         btv->init.ov.w.height  = win->w.height;
2229         btv->init.ov.field     = win->field;
2230
2231         /* update overlay if needed */
2232         retval = 0;
2233         if (check_btres(fh, RESOURCE_OVERLAY)) {
2234                 struct bttv_buffer *new;
2235
2236                 new = videobuf_sg_alloc(sizeof(*new));
2237                 new->crop = btv->crop[!!fh->do_crop].rect;
2238                 bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new);
2239                 retval = bttv_switch_overlay(btv,fh,new);
2240         }
2241         return retval;
2242 }
2243
2244 /* ----------------------------------------------------------------------- */
2245
2246 static struct videobuf_queue* bttv_queue(struct bttv_fh *fh)
2247 {
2248         struct videobuf_queue* q = NULL;
2249
2250         switch (fh->type) {
2251         case V4L2_BUF_TYPE_VIDEO_CAPTURE:
2252                 q = &fh->cap;
2253                 break;
2254         case V4L2_BUF_TYPE_VBI_CAPTURE:
2255                 q = &fh->vbi;
2256                 break;
2257         default:
2258                 BUG();
2259         }
2260         return q;
2261 }
2262
2263 static int bttv_resource(struct bttv_fh *fh)
2264 {
2265         int res = 0;
2266
2267         switch (fh->type) {
2268         case V4L2_BUF_TYPE_VIDEO_CAPTURE:
2269                 res = RESOURCE_VIDEO_STREAM;
2270                 break;
2271         case V4L2_BUF_TYPE_VBI_CAPTURE:
2272                 res = RESOURCE_VBI;
2273                 break;
2274         default:
2275                 BUG();
2276         }
2277         return res;
2278 }
2279
2280 static int bttv_switch_type(struct bttv_fh *fh, enum v4l2_buf_type type)
2281 {
2282         struct videobuf_queue *q = bttv_queue(fh);
2283         int res = bttv_resource(fh);
2284
2285         if (check_btres(fh,res))
2286                 return -EBUSY;
2287         if (videobuf_queue_is_busy(q))
2288                 return -EBUSY;
2289         fh->type = type;
2290         return 0;
2291 }
2292
2293 static void
2294 pix_format_set_size     (struct v4l2_pix_format *       f,
2295                          const struct bttv_format *     fmt,
2296                          unsigned int                   width,
2297                          unsigned int                   height)
2298 {
2299         f->width = width;
2300         f->height = height;
2301
2302         if (fmt->flags & FORMAT_FLAGS_PLANAR) {
2303                 f->bytesperline = width; /* Y plane */
2304                 f->sizeimage = (width * height * fmt->depth) >> 3;
2305         } else {
2306                 f->bytesperline = (width * fmt->depth) >> 3;
2307                 f->sizeimage = height * f->bytesperline;
2308         }
2309 }
2310
2311 static int bttv_g_fmt_vid_cap(struct file *file, void *priv,
2312                                         struct v4l2_format *f)
2313 {
2314         struct bttv_fh *fh  = priv;
2315
2316         pix_format_set_size(&f->fmt.pix, fh->fmt,
2317                                 fh->width, fh->height);
2318         f->fmt.pix.field        = fh->cap.field;
2319         f->fmt.pix.pixelformat  = fh->fmt->fourcc;
2320         f->fmt.pix.colorspace   = V4L2_COLORSPACE_SMPTE170M;
2321
2322         return 0;
2323 }
2324
2325 static int bttv_g_fmt_vid_overlay(struct file *file, void *priv,
2326                                         struct v4l2_format *f)
2327 {
2328         struct bttv_fh *fh  = priv;
2329
2330         f->fmt.win.w     = fh->ov.w;
2331         f->fmt.win.field = fh->ov.field;
2332
2333         return 0;
2334 }
2335
2336 static int bttv_try_fmt_vid_cap(struct file *file, void *priv,
2337                                                 struct v4l2_format *f)
2338 {
2339         const struct bttv_format *fmt;
2340         struct bttv_fh *fh = priv;
2341         struct bttv *btv = fh->btv;
2342         enum v4l2_field field;
2343         __s32 width, height;
2344         __s32 height2;
2345         int rc;
2346
2347         fmt = format_by_fourcc(f->fmt.pix.pixelformat);
2348         if (NULL == fmt)
2349                 return -EINVAL;
2350
2351         field = f->fmt.pix.field;
2352
2353         switch (field) {
2354         case V4L2_FIELD_TOP:
2355         case V4L2_FIELD_BOTTOM:
2356         case V4L2_FIELD_ALTERNATE:
2357         case V4L2_FIELD_INTERLACED:
2358                 break;
2359         case V4L2_FIELD_SEQ_BT:
2360         case V4L2_FIELD_SEQ_TB:
2361                 if (!(fmt->flags & FORMAT_FLAGS_PLANAR)) {
2362                         field = V4L2_FIELD_SEQ_TB;
2363                         break;
2364                 }
2365                 /* fall through */
2366         default: /* FIELD_ANY case */
2367                 height2 = btv->crop[!!fh->do_crop].rect.height >> 1;
2368                 field = (f->fmt.pix.height > height2)
2369                         ? V4L2_FIELD_INTERLACED
2370                         : V4L2_FIELD_BOTTOM;
2371                 break;
2372         }
2373
2374         width = f->fmt.pix.width;
2375         height = f->fmt.pix.height;
2376
2377         rc = limit_scaled_size_lock(fh, &width, &height, field,
2378                                /* width_mask: 4 pixels */ ~3,
2379                                /* width_bias: nearest */ 2,
2380                                /* adjust_size */ 1,
2381                                /* adjust_crop */ 0);
2382         if (0 != rc)
2383                 return rc;
2384
2385         /* update data for the application */
2386         f->fmt.pix.field = field;
2387         pix_format_set_size(&f->fmt.pix, fmt, width, height);
2388         f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
2389
2390         return 0;
2391 }
2392
2393 static int bttv_try_fmt_vid_overlay(struct file *file, void *priv,
2394                                                 struct v4l2_format *f)
2395 {
2396         struct bttv_fh *fh = priv;
2397
2398         verify_window_lock(fh, &f->fmt.win,
2399                         /* adjust_size */ 1,
2400                         /* adjust_crop */ 0);
2401         return 0;
2402 }
2403
2404 static int bttv_s_fmt_vid_cap(struct file *file, void *priv,
2405                                 struct v4l2_format *f)
2406 {
2407         int retval;
2408         const struct bttv_format *fmt;
2409         struct bttv_fh *fh = priv;
2410         struct bttv *btv = fh->btv;
2411         __s32 width, height;
2412         enum v4l2_field field;
2413
2414         retval = bttv_switch_type(fh, f->type);
2415         if (0 != retval)
2416                 return retval;
2417
2418         retval = bttv_try_fmt_vid_cap(file, priv, f);
2419         if (0 != retval)
2420                 return retval;
2421
2422         width = f->fmt.pix.width;
2423         height = f->fmt.pix.height;
2424         field = f->fmt.pix.field;
2425
2426         retval = limit_scaled_size_lock(fh, &width, &height, f->fmt.pix.field,
2427                                /* width_mask: 4 pixels */ ~3,
2428                                /* width_bias: nearest */ 2,
2429                                /* adjust_size */ 1,
2430                                /* adjust_crop */ 1);
2431         if (0 != retval)
2432                 return retval;
2433
2434         f->fmt.pix.field = field;
2435
2436         fmt = format_by_fourcc(f->fmt.pix.pixelformat);
2437
2438         /* update our state informations */
2439         fh->fmt              = fmt;
2440         fh->cap.field        = f->fmt.pix.field;
2441         fh->cap.last         = V4L2_FIELD_NONE;
2442         fh->width            = f->fmt.pix.width;
2443         fh->height           = f->fmt.pix.height;
2444         btv->init.fmt        = fmt;
2445         btv->init.width      = f->fmt.pix.width;
2446         btv->init.height     = f->fmt.pix.height;
2447
2448         return 0;
2449 }
2450
2451 static int bttv_s_fmt_vid_overlay(struct file *file, void *priv,
2452                                 struct v4l2_format *f)
2453 {
2454         struct bttv_fh *fh = priv;
2455         struct bttv *btv = fh->btv;
2456
2457         if (no_overlay > 0) {
2458                 pr_err("V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
2459                 return -EINVAL;
2460         }
2461
2462         return setup_window_lock(fh, btv, &f->fmt.win, 1);
2463 }
2464
2465 static int bttv_querycap(struct file *file, void  *priv,
2466                                 struct v4l2_capability *cap)
2467 {
2468         struct video_device *vdev = video_devdata(file);
2469         struct bttv_fh *fh = priv;
2470         struct bttv *btv = fh->btv;
2471
2472         if (0 == v4l2)
2473                 return -EINVAL;
2474
2475         strlcpy(cap->driver, "bttv", sizeof(cap->driver));
2476         strlcpy(cap->card, btv->video_dev->name, sizeof(cap->card));
2477         snprintf(cap->bus_info, sizeof(cap->bus_info),
2478                  "PCI:%s", pci_name(btv->c.pci));
2479         cap->capabilities =
2480                 V4L2_CAP_VIDEO_CAPTURE |
2481                 V4L2_CAP_READWRITE |
2482                 V4L2_CAP_STREAMING |
2483                 V4L2_CAP_DEVICE_CAPS;
2484         if (no_overlay <= 0)
2485                 cap->capabilities |= V4L2_CAP_VIDEO_OVERLAY;
2486         if (btv->vbi_dev)
2487                 cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
2488         if (btv->radio_dev)
2489                 cap->capabilities |= V4L2_CAP_RADIO;
2490
2491         /*
2492          * No need to lock here: those vars are initialized during board
2493          * probe and remains untouched during the rest of the driver lifecycle
2494          */
2495         if (btv->has_saa6588)
2496                 cap->capabilities |= V4L2_CAP_RDS_CAPTURE;
2497         if (btv->tuner_type != TUNER_ABSENT)
2498                 cap->capabilities |= V4L2_CAP_TUNER;
2499         if (vdev->vfl_type == VFL_TYPE_GRABBER)
2500                 cap->device_caps = cap->capabilities &
2501                         (V4L2_CAP_VIDEO_CAPTURE |
2502                          V4L2_CAP_READWRITE |
2503                          V4L2_CAP_STREAMING |
2504                          V4L2_CAP_VIDEO_OVERLAY |
2505                          V4L2_CAP_TUNER);
2506         else if (vdev->vfl_type == VFL_TYPE_VBI)
2507                 cap->device_caps = cap->capabilities &
2508                         (V4L2_CAP_VBI_CAPTURE |
2509                          V4L2_CAP_READWRITE |
2510                          V4L2_CAP_STREAMING |
2511                          V4L2_CAP_TUNER);
2512         else {
2513                 cap->device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
2514                 if (btv->has_saa6588)
2515                         cap->device_caps |= V4L2_CAP_READWRITE |
2516                                                 V4L2_CAP_RDS_CAPTURE;
2517         }
2518         return 0;
2519 }
2520
2521 static int bttv_enum_fmt_cap_ovr(struct v4l2_fmtdesc *f)
2522 {
2523         int index = -1, i;
2524
2525         for (i = 0; i < FORMATS; i++) {
2526                 if (formats[i].fourcc != -1)
2527                         index++;
2528                 if ((unsigned int)index == f->index)
2529                         break;
2530         }
2531         if (FORMATS == i)
2532                 return -EINVAL;
2533
2534         f->pixelformat = formats[i].fourcc;
2535         strlcpy(f->description, formats[i].name, sizeof(f->description));
2536
2537         return i;
2538 }
2539
2540 static int bttv_enum_fmt_vid_cap(struct file *file, void  *priv,
2541                                 struct v4l2_fmtdesc *f)
2542 {
2543         int rc = bttv_enum_fmt_cap_ovr(f);
2544
2545         if (rc < 0)
2546                 return rc;
2547
2548         return 0;
2549 }
2550
2551 static int bttv_enum_fmt_vid_overlay(struct file *file, void  *priv,
2552                                         struct v4l2_fmtdesc *f)
2553 {
2554         int rc;
2555
2556         if (no_overlay > 0) {
2557                 pr_err("V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
2558                 return -EINVAL;
2559         }
2560
2561         rc = bttv_enum_fmt_cap_ovr(f);
2562
2563         if (rc < 0)
2564                 return rc;
2565
2566         if (!(formats[rc].flags & FORMAT_FLAGS_PACKED))
2567                 return -EINVAL;
2568
2569         return 0;
2570 }
2571
2572 static int bttv_g_fbuf(struct file *file, void *f,
2573                                 struct v4l2_framebuffer *fb)
2574 {
2575         struct bttv_fh *fh = f;
2576         struct bttv *btv = fh->btv;
2577
2578         *fb = btv->fbuf;
2579         fb->capability = V4L2_FBUF_CAP_LIST_CLIPPING;
2580         fb->flags = V4L2_FBUF_FLAG_PRIMARY;
2581         if (fh->ovfmt)
2582                 fb->fmt.pixelformat  = fh->ovfmt->fourcc;
2583         return 0;
2584 }
2585
2586 static int bttv_overlay(struct file *file, void *f, unsigned int on)
2587 {
2588         struct bttv_fh *fh = f;
2589         struct bttv *btv = fh->btv;
2590         struct bttv_buffer *new;
2591         int retval = 0;
2592
2593         if (on) {
2594                 /* verify args */
2595                 if (unlikely(!btv->fbuf.base)) {
2596                         return -EINVAL;
2597                 }
2598                 if (unlikely(!fh->ov.setup_ok)) {
2599                         dprintk("%d: overlay: !setup_ok\n", btv->c.nr);
2600                         retval = -EINVAL;
2601                 }
2602                 if (retval)
2603                         return retval;
2604         }
2605
2606         if (!check_alloc_btres_lock(btv, fh, RESOURCE_OVERLAY))
2607                 return -EBUSY;
2608
2609         if (on) {
2610                 fh->ov.tvnorm = btv->tvnorm;
2611                 new = videobuf_sg_alloc(sizeof(*new));
2612                 new->crop = btv->crop[!!fh->do_crop].rect;
2613                 bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new);
2614         } else {
2615                 new = NULL;
2616         }
2617
2618         /* switch over */
2619         retval = bttv_switch_overlay(btv, fh, new);
2620         return retval;
2621 }
2622
2623 static int bttv_s_fbuf(struct file *file, void *f,
2624                                 const struct v4l2_framebuffer *fb)
2625 {
2626         struct bttv_fh *fh = f;
2627         struct bttv *btv = fh->btv;
2628         const struct bttv_format *fmt;
2629         int retval;
2630
2631         if (!capable(CAP_SYS_ADMIN) &&
2632                 !capable(CAP_SYS_RAWIO))
2633                 return -EPERM;
2634
2635         /* check args */
2636         fmt = format_by_fourcc(fb->fmt.pixelformat);
2637         if (NULL == fmt)
2638                 return -EINVAL;
2639         if (0 == (fmt->flags & FORMAT_FLAGS_PACKED))
2640                 return -EINVAL;
2641
2642         retval = -EINVAL;
2643         if (fb->flags & V4L2_FBUF_FLAG_OVERLAY) {
2644                 __s32 width = fb->fmt.width;
2645                 __s32 height = fb->fmt.height;
2646
2647                 retval = limit_scaled_size_lock(fh, &width, &height,
2648                                            V4L2_FIELD_INTERLACED,
2649                                            /* width_mask */ ~3,
2650                                            /* width_bias */ 2,
2651                                            /* adjust_size */ 0,
2652                                            /* adjust_crop */ 0);
2653                 if (0 != retval)
2654                         return retval;
2655         }
2656
2657         /* ok, accept it */
2658         btv->fbuf.base       = fb->base;
2659         btv->fbuf.fmt.width  = fb->fmt.width;
2660         btv->fbuf.fmt.height = fb->fmt.height;
2661         if (0 != fb->fmt.bytesperline)
2662                 btv->fbuf.fmt.bytesperline = fb->fmt.bytesperline;
2663         else
2664                 btv->fbuf.fmt.bytesperline = btv->fbuf.fmt.width*fmt->depth/8;
2665
2666         retval = 0;
2667         fh->ovfmt = fmt;
2668         btv->init.ovfmt = fmt;
2669         if (fb->flags & V4L2_FBUF_FLAG_OVERLAY) {
2670                 fh->ov.w.left   = 0;
2671                 fh->ov.w.top    = 0;
2672                 fh->ov.w.width  = fb->fmt.width;
2673                 fh->ov.w.height = fb->fmt.height;
2674                 btv->init.ov.w.width  = fb->fmt.width;
2675                 btv->init.ov.w.height = fb->fmt.height;
2676                         kfree(fh->ov.clips);
2677                 fh->ov.clips = NULL;
2678                 fh->ov.nclips = 0;
2679
2680                 if (check_btres(fh, RESOURCE_OVERLAY)) {
2681                         struct bttv_buffer *new;
2682
2683                         new = videobuf_sg_alloc(sizeof(*new));
2684                         new->crop = btv->crop[!!fh->do_crop].rect;
2685                         bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new);
2686                         retval = bttv_switch_overlay(btv, fh, new);
2687                 }
2688         }
2689         return retval;
2690 }
2691
2692 static int bttv_reqbufs(struct file *file, void *priv,
2693                                 struct v4l2_requestbuffers *p)
2694 {
2695         struct bttv_fh *fh = priv;
2696         return videobuf_reqbufs(bttv_queue(fh), p);
2697 }
2698
2699 static int bttv_querybuf(struct file *file, void *priv,
2700                                 struct v4l2_buffer *b)
2701 {
2702         struct bttv_fh *fh = priv;
2703         return videobuf_querybuf(bttv_queue(fh), b);
2704 }
2705
2706 static int bttv_qbuf(struct file *file, void *priv, struct v4l2_buffer *b)
2707 {
2708         struct bttv_fh *fh = priv;
2709         struct bttv *btv = fh->btv;
2710         int res = bttv_resource(fh);
2711
2712         if (!check_alloc_btres_lock(btv, fh, res))
2713                 return -EBUSY;
2714
2715         return videobuf_qbuf(bttv_queue(fh), b);
2716 }
2717
2718 static int bttv_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
2719 {
2720         struct bttv_fh *fh = priv;
2721         return videobuf_dqbuf(bttv_queue(fh), b,
2722                         file->f_flags & O_NONBLOCK);
2723 }
2724
2725 static int bttv_streamon(struct file *file, void *priv,
2726                                         enum v4l2_buf_type type)
2727 {
2728         struct bttv_fh *fh = priv;
2729         struct bttv *btv = fh->btv;
2730         int res = bttv_resource(fh);
2731
2732         if (!check_alloc_btres_lock(btv, fh, res))
2733                 return -EBUSY;
2734         return videobuf_streamon(bttv_queue(fh));
2735 }
2736
2737
2738 static int bttv_streamoff(struct file *file, void *priv,
2739                                         enum v4l2_buf_type type)
2740 {
2741         struct bttv_fh *fh = priv;
2742         struct bttv *btv = fh->btv;
2743         int retval;
2744         int res = bttv_resource(fh);
2745
2746
2747         retval = videobuf_streamoff(bttv_queue(fh));
2748         if (retval < 0)
2749                 return retval;
2750         free_btres_lock(btv, fh, res);
2751         return 0;
2752 }
2753
2754 static int bttv_g_parm(struct file *file, void *f,
2755                                 struct v4l2_streamparm *parm)
2756 {
2757         struct bttv_fh *fh = f;
2758         struct bttv *btv = fh->btv;
2759
2760         if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
2761                 return -EINVAL;
2762         parm->parm.capture.readbuffers = gbuffers;
2763         v4l2_video_std_frame_period(bttv_tvnorms[btv->tvnorm].v4l2_id,
2764                                     &parm->parm.capture.timeperframe);
2765
2766         return 0;
2767 }
2768
2769 static int bttv_g_tuner(struct file *file, void *priv,
2770                                 struct v4l2_tuner *t)
2771 {
2772         struct bttv_fh *fh = priv;
2773         struct bttv *btv = fh->btv;
2774
2775         if (0 != t->index)
2776                 return -EINVAL;
2777
2778         t->rxsubchans = V4L2_TUNER_SUB_MONO;
2779         t->capability = V4L2_TUNER_CAP_NORM;
2780         bttv_call_all(btv, tuner, g_tuner, t);
2781         strcpy(t->name, "Television");
2782         t->type       = V4L2_TUNER_ANALOG_TV;
2783         if (btread(BT848_DSTATUS)&BT848_DSTATUS_HLOC)
2784                 t->signal = 0xffff;
2785
2786         if (btv->audio_mode_gpio)
2787                 btv->audio_mode_gpio(btv, t, 0);
2788
2789         return 0;
2790 }
2791
2792 static int bttv_cropcap(struct file *file, void *priv,
2793                                 struct v4l2_cropcap *cap)
2794 {
2795         struct bttv_fh *fh = priv;
2796         struct bttv *btv = fh->btv;
2797
2798         if (cap->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
2799             cap->type != V4L2_BUF_TYPE_VIDEO_OVERLAY)
2800                 return -EINVAL;
2801
2802         *cap = bttv_tvnorms[btv->tvnorm].cropcap;
2803
2804         return 0;
2805 }
2806
2807 static int bttv_g_crop(struct file *file, void *f, struct v4l2_crop *crop)
2808 {
2809         struct bttv_fh *fh = f;
2810         struct bttv *btv = fh->btv;
2811
2812         if (crop->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
2813             crop->type != V4L2_BUF_TYPE_VIDEO_OVERLAY)
2814                 return -EINVAL;
2815
2816         /* No fh->do_crop = 1; because btv->crop[1] may be
2817            inconsistent with fh->width or fh->height and apps
2818            do not expect a change here. */
2819
2820         crop->c = btv->crop[!!fh->do_crop].rect;
2821
2822         return 0;
2823 }
2824
2825 static int bttv_s_crop(struct file *file, void *f, const struct v4l2_crop *crop)
2826 {
2827         struct bttv_fh *fh = f;
2828         struct bttv *btv = fh->btv;
2829         const struct v4l2_rect *b;
2830         int retval;
2831         struct bttv_crop c;
2832         __s32 b_left;
2833         __s32 b_top;
2834         __s32 b_right;
2835         __s32 b_bottom;
2836
2837         if (crop->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
2838             crop->type != V4L2_BUF_TYPE_VIDEO_OVERLAY)
2839                 return -EINVAL;
2840
2841         /* Make sure tvnorm, vbi_end and the current cropping
2842            parameters remain consistent until we're done. Note
2843            read() may change vbi_end in check_alloc_btres_lock(). */
2844         retval = -EBUSY;
2845
2846         if (locked_btres(fh->btv, VIDEO_RESOURCES)) {
2847                 return retval;
2848         }
2849
2850         b = &bttv_tvnorms[btv->tvnorm].cropcap.bounds;
2851
2852         b_left = b->left;
2853         b_right = b_left + b->width;
2854         b_bottom = b->top + b->height;
2855
2856         b_top = max(b->top, btv->vbi_end);
2857         if (b_top + 32 >= b_bottom) {
2858                 return retval;
2859         }
2860
2861         /* Min. scaled size 48 x 32. */
2862         c.rect.left = clamp_t(s32, crop->c.left, b_left, b_right - 48);
2863         c.rect.left = min(c.rect.left, (__s32) MAX_HDELAY);
2864
2865         c.rect.width = clamp_t(s32, crop->c.width,
2866                              48, b_right - c.rect.left);
2867
2868         c.rect.top = clamp_t(s32, crop->c.top, b_top, b_bottom - 32);
2869         /* Top and height must be a multiple of two. */
2870         c.rect.top = (c.rect.top + 1) & ~1;
2871
2872         c.rect.height = clamp_t(s32, crop->c.height,
2873                               32, b_bottom - c.rect.top);
2874         c.rect.height = (c.rect.height + 1) & ~1;
2875
2876         bttv_crop_calc_limits(&c);
2877
2878         btv->crop[1] = c;
2879
2880         fh->do_crop = 1;
2881
2882         if (fh->width < c.min_scaled_width) {
2883                 fh->width = c.min_scaled_width;
2884                 btv->init.width = c.min_scaled_width;
2885         } else if (fh->width > c.max_scaled_width) {
2886                 fh->width = c.max_scaled_width;
2887                 btv->init.width = c.max_scaled_width;
2888         }
2889
2890         if (fh->height < c.min_scaled_height) {
2891                 fh->height = c.min_scaled_height;
2892                 btv->init.height = c.min_scaled_height;
2893         } else if (fh->height > c.max_scaled_height) {
2894                 fh->height = c.max_scaled_height;
2895                 btv->init.height = c.max_scaled_height;
2896         }
2897
2898         return 0;
2899 }
2900
2901 static ssize_t bttv_read(struct file *file, char __user *data,
2902                          size_t count, loff_t *ppos)
2903 {
2904         struct bttv_fh *fh = file->private_data;
2905         int retval = 0;
2906
2907         if (fh->btv->errors)
2908                 bttv_reinit_bt848(fh->btv);
2909         dprintk("%d: read count=%d type=%s\n",
2910                 fh->btv->c.nr, (int)count, v4l2_type_names[fh->type]);
2911
2912         switch (fh->type) {
2913         case V4L2_BUF_TYPE_VIDEO_CAPTURE:
2914                 if (!check_alloc_btres_lock(fh->btv, fh, RESOURCE_VIDEO_READ)) {
2915                         /* VIDEO_READ in use by another fh,
2916                            or VIDEO_STREAM by any fh. */
2917                         return -EBUSY;
2918                 }
2919                 retval = videobuf_read_one(&fh->cap, data, count, ppos,
2920                                            file->f_flags & O_NONBLOCK);
2921                 free_btres_lock(fh->btv, fh, RESOURCE_VIDEO_READ);
2922                 break;
2923         case V4L2_BUF_TYPE_VBI_CAPTURE:
2924                 if (!check_alloc_btres_lock(fh->btv,fh,RESOURCE_VBI))
2925                         return -EBUSY;
2926                 retval = videobuf_read_stream(&fh->vbi, data, count, ppos, 1,
2927                                               file->f_flags & O_NONBLOCK);
2928                 break;
2929         default:
2930                 BUG();
2931         }
2932         return retval;
2933 }
2934
2935 static unsigned int bttv_poll(struct file *file, poll_table *wait)
2936 {
2937         struct bttv_fh *fh = file->private_data;
2938         struct bttv_buffer *buf;
2939         enum v4l2_field field;
2940         unsigned int rc = 0;
2941         unsigned long req_events = poll_requested_events(wait);
2942
2943         if (v4l2_event_pending(&fh->fh))
2944                 rc = POLLPRI;
2945         else if (req_events & POLLPRI)
2946                 poll_wait(file, &fh->fh.wait, wait);
2947
2948         if (!(req_events & (POLLIN | POLLRDNORM)))
2949                 return rc;
2950
2951         if (V4L2_BUF_TYPE_VBI_CAPTURE == fh->type) {
2952                 if (!check_alloc_btres_lock(fh->btv,fh,RESOURCE_VBI))
2953                         return rc | POLLERR;
2954                 return rc | videobuf_poll_stream(file, &fh->vbi, wait);
2955         }
2956
2957         if (check_btres(fh,RESOURCE_VIDEO_STREAM)) {
2958                 /* streaming capture */
2959                 if (list_empty(&fh->cap.stream))
2960                         return rc | POLLERR;
2961                 buf = list_entry(fh->cap.stream.next,struct bttv_buffer,vb.stream);
2962         } else {
2963                 /* read() capture */
2964                 if (NULL == fh->cap.read_buf) {
2965                         /* need to capture a new frame */
2966                         if (locked_btres(fh->btv,RESOURCE_VIDEO_STREAM))
2967                                 return rc | POLLERR;
2968                         fh->cap.read_buf = videobuf_sg_alloc(fh->cap.msize);
2969                         if (NULL == fh->cap.read_buf)
2970                                 return rc | POLLERR;
2971                         fh->cap.read_buf->memory = V4L2_MEMORY_USERPTR;
2972                         field = videobuf_next_field(&fh->cap);
2973                         if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,field)) {
2974                                 kfree (fh->cap.read_buf);
2975                                 fh->cap.read_buf = NULL;
2976                                 return rc | POLLERR;
2977                         }
2978                         fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf);
2979                         fh->cap.read_off = 0;
2980                 }
2981                 buf = (struct bttv_buffer*)fh->cap.read_buf;
2982         }
2983
2984         poll_wait(file, &buf->vb.done, wait);
2985         if (buf->vb.state == VIDEOBUF_DONE ||
2986             buf->vb.state == VIDEOBUF_ERROR)
2987                 rc = rc | POLLIN|POLLRDNORM;
2988         return rc;
2989 }
2990
2991 static int bttv_open(struct file *file)
2992 {
2993         struct video_device *vdev = video_devdata(file);
2994         struct bttv *btv = video_drvdata(file);
2995         struct bttv_fh *fh;
2996         enum v4l2_buf_type type = 0;
2997
2998         dprintk("open dev=%s\n", video_device_node_name(vdev));
2999
3000         if (vdev->vfl_type == VFL_TYPE_GRABBER) {
3001                 type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
3002         } else if (vdev->vfl_type == VFL_TYPE_VBI) {
3003                 type = V4L2_BUF_TYPE_VBI_CAPTURE;
3004         } else {
3005                 WARN_ON(1);
3006                 return -ENODEV;
3007         }
3008
3009         dprintk("%d: open called (type=%s)\n",
3010                 btv->c.nr, v4l2_type_names[type]);
3011
3012         /* allocate per filehandle data */
3013         fh = kmalloc(sizeof(*fh), GFP_KERNEL);
3014         if (unlikely(!fh))
3015                 return -ENOMEM;
3016         btv->users++;
3017         file->private_data = fh;
3018
3019         *fh = btv->init;
3020         v4l2_fh_init(&fh->fh, vdev);
3021
3022         fh->type = type;
3023         fh->ov.setup_ok = 0;
3024
3025         videobuf_queue_sg_init(&fh->cap, &bttv_video_qops,
3026                             &btv->c.pci->dev, &btv->s_lock,
3027                             V4L2_BUF_TYPE_VIDEO_CAPTURE,
3028                             V4L2_FIELD_INTERLACED,
3029                             sizeof(struct bttv_buffer),
3030                             fh, &btv->lock);
3031         videobuf_queue_sg_init(&fh->vbi, &bttv_vbi_qops,
3032                             &btv->c.pci->dev, &btv->s_lock,
3033                             V4L2_BUF_TYPE_VBI_CAPTURE,
3034                             V4L2_FIELD_SEQ_TB,
3035                             sizeof(struct bttv_buffer),
3036                             fh, &btv->lock);
3037         set_tvnorm(btv,btv->tvnorm);
3038         set_input(btv, btv->input, btv->tvnorm);
3039         audio_mute(btv, btv->mute);
3040
3041         /* The V4L2 spec requires one global set of cropping parameters
3042            which only change on request. These are stored in btv->crop[1].
3043            However for compatibility with V4L apps and cropping unaware
3044            V4L2 apps we now reset the cropping parameters as seen through
3045            this fh, which is to say VIDIOC_G_CROP and scaling limit checks
3046            will use btv->crop[0], the default cropping parameters for the
3047            current video standard, and VIDIOC_S_FMT will not implicitely
3048            change the cropping parameters until VIDIOC_S_CROP has been
3049            called. */
3050         fh->do_crop = !reset_crop; /* module parameter */
3051
3052         /* Likewise there should be one global set of VBI capture
3053            parameters, but for compatibility with V4L apps and earlier
3054            driver versions each fh has its own parameters. */
3055         bttv_vbi_fmt_reset(&fh->vbi_fmt, btv->tvnorm);
3056
3057         bttv_field_count(btv);
3058         v4l2_fh_add(&fh->fh);
3059         return 0;
3060 }
3061
3062 static int bttv_release(struct file *file)
3063 {
3064         struct bttv_fh *fh = file->private_data;
3065         struct bttv *btv = fh->btv;
3066
3067         /* turn off overlay */
3068         if (check_btres(fh, RESOURCE_OVERLAY))
3069                 bttv_switch_overlay(btv,fh,NULL);
3070
3071         /* stop video capture */
3072         if (check_btres(fh, RESOURCE_VIDEO_STREAM)) {
3073                 videobuf_streamoff(&fh->cap);
3074                 free_btres_lock(btv,fh,RESOURCE_VIDEO_STREAM);
3075         }
3076         if (fh->cap.read_buf) {
3077                 buffer_release(&fh->cap,fh->cap.read_buf);
3078                 kfree(fh->cap.read_buf);
3079         }
3080         if (check_btres(fh, RESOURCE_VIDEO_READ)) {
3081                 free_btres_lock(btv, fh, RESOURCE_VIDEO_READ);
3082         }
3083
3084         /* stop vbi capture */
3085         if (check_btres(fh, RESOURCE_VBI)) {
3086                 videobuf_stop(&fh->vbi);
3087                 free_btres_lock(btv,fh,RESOURCE_VBI);
3088         }
3089
3090         /* free stuff */
3091
3092         videobuf_mmap_free(&fh->cap);
3093         videobuf_mmap_free(&fh->vbi);
3094         file->private_data = NULL;
3095
3096         btv->users--;
3097         bttv_field_count(btv);
3098
3099         if (!btv->users)
3100                 audio_mute(btv, btv->mute);
3101
3102         v4l2_fh_del(&fh->fh);
3103         v4l2_fh_exit(&fh->fh);
3104         kfree(fh);
3105         return 0;
3106 }
3107
3108 static int
3109 bttv_mmap(struct file *file, struct vm_area_struct *vma)
3110 {
3111         struct bttv_fh *fh = file->private_data;
3112
3113         dprintk("%d: mmap type=%s 0x%lx+%ld\n",
3114                 fh->btv->c.nr, v4l2_type_names[fh->type],
3115                 vma->vm_start, vma->vm_end - vma->vm_start);
3116         return videobuf_mmap_mapper(bttv_queue(fh),vma);
3117 }
3118
3119 static const struct v4l2_file_operations bttv_fops =
3120 {
3121         .owner            = THIS_MODULE,
3122         .open             = bttv_open,
3123         .release          = bttv_release,
3124         .unlocked_ioctl   = video_ioctl2,
3125         .read             = bttv_read,
3126         .mmap             = bttv_mmap,
3127         .poll             = bttv_poll,
3128 };
3129
3130 static const struct v4l2_ioctl_ops bttv_ioctl_ops = {
3131         .vidioc_querycap                = bttv_querycap,
3132         .vidioc_enum_fmt_vid_cap        = bttv_enum_fmt_vid_cap,
3133         .vidioc_g_fmt_vid_cap           = bttv_g_fmt_vid_cap,
3134         .vidioc_try_fmt_vid_cap         = bttv_try_fmt_vid_cap,
3135         .vidioc_s_fmt_vid_cap           = bttv_s_fmt_vid_cap,
3136         .vidioc_enum_fmt_vid_overlay    = bttv_enum_fmt_vid_overlay,
3137         .vidioc_g_fmt_vid_overlay       = bttv_g_fmt_vid_overlay,
3138         .vidioc_try_fmt_vid_overlay     = bttv_try_fmt_vid_overlay,
3139         .vidioc_s_fmt_vid_overlay       = bttv_s_fmt_vid_overlay,
3140         .vidioc_g_fmt_vbi_cap           = bttv_g_fmt_vbi_cap,
3141         .vidioc_try_fmt_vbi_cap         = bttv_try_fmt_vbi_cap,
3142         .vidioc_s_fmt_vbi_cap           = bttv_s_fmt_vbi_cap,
3143         .vidioc_cropcap                 = bttv_cropcap,
3144         .vidioc_reqbufs                 = bttv_reqbufs,
3145         .vidioc_querybuf                = bttv_querybuf,
3146         .vidioc_qbuf                    = bttv_qbuf,
3147         .vidioc_dqbuf                   = bttv_dqbuf,
3148         .vidioc_s_std                   = bttv_s_std,
3149         .vidioc_g_std                   = bttv_g_std,
3150         .vidioc_enum_input              = bttv_enum_input,
3151         .vidioc_g_input                 = bttv_g_input,
3152         .vidioc_s_input                 = bttv_s_input,
3153         .vidioc_streamon                = bttv_streamon,
3154         .vidioc_streamoff               = bttv_streamoff,
3155         .vidioc_g_tuner                 = bttv_g_tuner,
3156         .vidioc_s_tuner                 = bttv_s_tuner,
3157         .vidioc_g_crop                  = bttv_g_crop,
3158         .vidioc_s_crop                  = bttv_s_crop,
3159         .vidioc_g_fbuf                  = bttv_g_fbuf,
3160         .vidioc_s_fbuf                  = bttv_s_fbuf,
3161         .vidioc_overlay                 = bttv_overlay,
3162         .vidioc_g_parm                  = bttv_g_parm,
3163         .vidioc_g_frequency             = bttv_g_frequency,
3164         .vidioc_s_frequency             = bttv_s_frequency,
3165         .vidioc_log_status              = bttv_log_status,
3166         .vidioc_querystd                = bttv_querystd,
3167         .vidioc_subscribe_event         = v4l2_ctrl_subscribe_event,
3168         .vidioc_unsubscribe_event       = v4l2_event_unsubscribe,
3169 #ifdef CONFIG_VIDEO_ADV_DEBUG
3170         .vidioc_g_register              = bttv_g_register,
3171         .vidioc_s_register              = bttv_s_register,
3172 #endif
3173 };
3174
3175 static struct video_device bttv_video_template = {
3176         .fops         = &bttv_fops,
3177         .ioctl_ops    = &bttv_ioctl_ops,
3178         .tvnorms      = BTTV_NORMS,
3179 };
3180
3181 /* ----------------------------------------------------------------------- */
3182 /* radio interface                                                         */
3183
3184 static int radio_open(struct file *file)
3185 {
3186         struct video_device *vdev = video_devdata(file);
3187         struct bttv *btv = video_drvdata(file);
3188         struct bttv_fh *fh;
3189
3190         dprintk("open dev=%s\n", video_device_node_name(vdev));
3191
3192         dprintk("%d: open called (radio)\n", btv->c.nr);
3193
3194         /* allocate per filehandle data */
3195         fh = kmalloc(sizeof(*fh), GFP_KERNEL);
3196         if (unlikely(!fh))
3197                 return -ENOMEM;
3198         file->private_data = fh;
3199         *fh = btv->init;
3200         v4l2_fh_init(&fh->fh, vdev);
3201
3202         btv->radio_user++;
3203         audio_mute(btv, btv->mute);
3204
3205         v4l2_fh_add(&fh->fh);
3206
3207         return 0;
3208 }
3209
3210 static int radio_release(struct file *file)
3211 {
3212         struct bttv_fh *fh = file->private_data;
3213         struct bttv *btv = fh->btv;
3214         struct saa6588_command cmd;
3215
3216         file->private_data = NULL;
3217         v4l2_fh_del(&fh->fh);
3218         v4l2_fh_exit(&fh->fh);
3219         kfree(fh);
3220
3221         btv->radio_user--;
3222
3223         bttv_call_all(btv, core, ioctl, SAA6588_CMD_CLOSE, &cmd);
3224
3225         if (btv->radio_user == 0)
3226                 btv->has_radio_tuner = 0;
3227         return 0;
3228 }
3229
3230 static int radio_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
3231 {
3232         struct bttv_fh *fh = priv;
3233         struct bttv *btv = fh->btv;
3234
3235         if (0 != t->index)
3236                 return -EINVAL;
3237         strcpy(t->name, "Radio");
3238         t->type = V4L2_TUNER_RADIO;
3239         radio_enable(btv);
3240
3241         bttv_call_all(btv, tuner, g_tuner, t);
3242
3243         if (btv->audio_mode_gpio)
3244                 btv->audio_mode_gpio(btv, t, 0);
3245
3246         return 0;
3247 }
3248
3249 static int radio_s_tuner(struct file *file, void *priv,
3250                                         const struct v4l2_tuner *t)
3251 {
3252         struct bttv_fh *fh = priv;
3253         struct bttv *btv = fh->btv;
3254
3255         if (0 != t->index)
3256                 return -EINVAL;
3257
3258         radio_enable(btv);
3259         bttv_call_all(btv, tuner, s_tuner, t);
3260         return 0;
3261 }
3262
3263 static ssize_t radio_read(struct file *file, char __user *data,
3264                          size_t count, loff_t *ppos)
3265 {
3266         struct bttv_fh *fh = file->private_data;
3267         struct bttv *btv = fh->btv;
3268         struct saa6588_command cmd;
3269         cmd.block_count = count/3;
3270         cmd.buffer = data;
3271         cmd.instance = file;
3272         cmd.result = -ENODEV;
3273         radio_enable(btv);
3274
3275         bttv_call_all(btv, core, ioctl, SAA6588_CMD_READ, &cmd);
3276
3277         return cmd.result;
3278 }
3279
3280 static unsigned int radio_poll(struct file *file, poll_table *wait)
3281 {
3282         struct bttv_fh *fh = file->private_data;
3283         struct bttv *btv = fh->btv;
3284         unsigned long req_events = poll_requested_events(wait);
3285         struct saa6588_command cmd;
3286         unsigned int res = 0;
3287
3288         if (v4l2_event_pending(&fh->fh))
3289                 res = POLLPRI;
3290         else if (req_events & POLLPRI)
3291                 poll_wait(file, &fh->fh.wait, wait);
3292         radio_enable(btv);
3293         cmd.instance = file;
3294         cmd.event_list = wait;
3295         cmd.result = res;
3296         bttv_call_all(btv, core, ioctl, SAA6588_CMD_POLL, &cmd);
3297
3298         return cmd.result;
3299 }
3300
3301 static const struct v4l2_file_operations radio_fops =
3302 {
3303         .owner    = THIS_MODULE,
3304         .open     = radio_open,
3305         .read     = radio_read,
3306         .release  = radio_release,
3307         .unlocked_ioctl = video_ioctl2,
3308         .poll     = radio_poll,
3309 };
3310
3311 static const struct v4l2_ioctl_ops radio_ioctl_ops = {
3312         .vidioc_querycap        = bttv_querycap,
3313         .vidioc_log_status      = bttv_log_status,
3314         .vidioc_g_tuner         = radio_g_tuner,
3315         .vidioc_s_tuner         = radio_s_tuner,
3316         .vidioc_g_frequency     = bttv_g_frequency,
3317         .vidioc_s_frequency     = bttv_s_frequency,
3318         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
3319         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
3320 };
3321
3322 static struct video_device radio_template = {
3323         .fops      = &radio_fops,
3324         .ioctl_ops = &radio_ioctl_ops,
3325 };
3326
3327 /* ----------------------------------------------------------------------- */
3328 /* some debug code                                                         */
3329
3330 static int bttv_risc_decode(u32 risc)
3331 {
3332         static char *instr[16] = {
3333                 [ BT848_RISC_WRITE     >> 28 ] = "write",
3334                 [ BT848_RISC_SKIP      >> 28 ] = "skip",
3335                 [ BT848_RISC_WRITEC    >> 28 ] = "writec",
3336                 [ BT848_RISC_JUMP      >> 28 ] = "jump",
3337                 [ BT848_RISC_SYNC      >> 28 ] = "sync",
3338                 [ BT848_RISC_WRITE123  >> 28 ] = "write123",
3339                 [ BT848_RISC_SKIP123   >> 28 ] = "skip123",
3340                 [ BT848_RISC_WRITE1S23 >> 28 ] = "write1s23",
3341         };
3342         static int incr[16] = {
3343                 [ BT848_RISC_WRITE     >> 28 ] = 2,
3344                 [ BT848_RISC_JUMP      >> 28 ] = 2,
3345                 [ BT848_RISC_SYNC      >> 28 ] = 2,
3346                 [ BT848_RISC_WRITE123  >> 28 ] = 5,
3347                 [ BT848_RISC_SKIP123   >> 28 ] = 2,
3348                 [ BT848_RISC_WRITE1S23 >> 28 ] = 3,
3349         };
3350         static char *bits[] = {
3351                 "be0",  "be1",  "be2",  "be3/resync",
3352                 "set0", "set1", "set2", "set3",
3353                 "clr0", "clr1", "clr2", "clr3",
3354                 "irq",  "res",  "eol",  "sol",
3355         };
3356         int i;
3357
3358         pr_cont("0x%08x [ %s", risc,
3359                instr[risc >> 28] ? instr[risc >> 28] : "INVALID");
3360         for (i = ARRAY_SIZE(bits)-1; i >= 0; i--)
3361                 if (risc & (1 << (i + 12)))
3362                         pr_cont(" %s", bits[i]);
3363         pr_cont(" count=%d ]\n", risc & 0xfff);
3364         return incr[risc >> 28] ? incr[risc >> 28] : 1;
3365 }
3366
3367 static void bttv_risc_disasm(struct bttv *btv,
3368                              struct btcx_riscmem *risc)
3369 {
3370         unsigned int i,j,n;
3371
3372         pr_info("%s: risc disasm: %p [dma=0x%08lx]\n",
3373                 btv->c.v4l2_dev.name, risc->cpu, (unsigned long)risc->dma);
3374         for (i = 0; i < (risc->size >> 2); i += n) {
3375                 pr_info("%s:   0x%lx: ",
3376                         btv->c.v4l2_dev.name,
3377                         (unsigned long)(risc->dma + (i<<2)));
3378                 n = bttv_risc_decode(le32_to_cpu(risc->cpu[i]));
3379                 for (j = 1; j < n; j++)
3380                         pr_info("%s:   0x%lx: 0x%08x [ arg #%d ]\n",
3381                                 btv->c.v4l2_dev.name,
3382                                 (unsigned long)(risc->dma + ((i+j)<<2)),
3383                                 risc->cpu[i+j], j);
3384                 if (0 == risc->cpu[i])
3385                         break;
3386         }
3387 }
3388
3389 static void bttv_print_riscaddr(struct bttv *btv)
3390 {
3391         pr_info("  main: %08llx\n", (unsigned long long)btv->main.dma);
3392         pr_info("  vbi : o=%08llx e=%08llx\n",
3393                 btv->cvbi ? (unsigned long long)btv->cvbi->top.dma : 0,
3394                 btv->cvbi ? (unsigned long long)btv->cvbi->bottom.dma : 0);
3395         pr_info("  cap : o=%08llx e=%08llx\n",
3396                 btv->curr.top
3397                 ? (unsigned long long)btv->curr.top->top.dma : 0,
3398                 btv->curr.bottom
3399                 ? (unsigned long long)btv->curr.bottom->bottom.dma : 0);
3400         pr_info("  scr : o=%08llx e=%08llx\n",
3401                 btv->screen ? (unsigned long long)btv->screen->top.dma : 0,
3402                 btv->screen ? (unsigned long long)btv->screen->bottom.dma : 0);
3403         bttv_risc_disasm(btv, &btv->main);
3404 }
3405
3406 /* ----------------------------------------------------------------------- */
3407 /* irq handler                                                             */
3408
3409 static char *irq_name[] = {
3410         "FMTCHG",  // format change detected (525 vs. 625)
3411         "VSYNC",   // vertical sync (new field)
3412         "HSYNC",   // horizontal sync
3413         "OFLOW",   // chroma/luma AGC overflow
3414         "HLOCK",   // horizontal lock changed
3415         "VPRES",   // video presence changed
3416         "6", "7",
3417         "I2CDONE", // hw irc operation finished
3418         "GPINT",   // gpio port triggered irq
3419         "10",
3420         "RISCI",   // risc instruction triggered irq
3421         "FBUS",    // pixel data fifo dropped data (high pci bus latencies)
3422         "FTRGT",   // pixel data fifo overrun
3423         "FDSR",    // fifo data stream resyncronisation
3424         "PPERR",   // parity error (data transfer)
3425         "RIPERR",  // parity error (read risc instructions)
3426         "PABORT",  // pci abort
3427         "OCERR",   // risc instruction error
3428         "SCERR",   // syncronisation error
3429 };
3430
3431 static void bttv_print_irqbits(u32 print, u32 mark)
3432 {
3433         unsigned int i;
3434
3435         pr_cont("bits:");
3436         for (i = 0; i < ARRAY_SIZE(irq_name); i++) {
3437                 if (print & (1 << i))
3438                         pr_cont(" %s", irq_name[i]);
3439                 if (mark & (1 << i))
3440                         pr_cont("*");
3441         }
3442 }
3443
3444 static void bttv_irq_debug_low_latency(struct bttv *btv, u32 rc)
3445 {
3446         pr_warn("%d: irq: skipped frame [main=%lx,o_vbi=%lx,o_field=%lx,rc=%lx]\n",
3447                 btv->c.nr,
3448                 (unsigned long)btv->main.dma,
3449                 (unsigned long)le32_to_cpu(btv->main.cpu[RISC_SLOT_O_VBI+1]),
3450                 (unsigned long)le32_to_cpu(btv->main.cpu[RISC_SLOT_O_FIELD+1]),
3451                 (unsigned long)rc);
3452
3453         if (0 == (btread(BT848_DSTATUS) & BT848_DSTATUS_HLOC)) {
3454                 pr_notice("%d: Oh, there (temporarily?) is no input signal. "
3455                           "Ok, then this is harmless, don't worry ;)\n",
3456                           btv->c.nr);
3457                 return;
3458         }
3459         pr_notice("%d: Uhm. Looks like we have unusual high IRQ latencies\n",
3460                   btv->c.nr);
3461         pr_notice("%d: Lets try to catch the culpit red-handed ...\n",
3462                   btv->c.nr);
3463         dump_stack();
3464 }
3465
3466 static int
3467 bttv_irq_next_video(struct bttv *btv, struct bttv_buffer_set *set)
3468 {
3469         struct bttv_buffer *item;
3470
3471         memset(set,0,sizeof(*set));
3472
3473         /* capture request ? */
3474         if (!list_empty(&btv->capture)) {
3475                 set->frame_irq = 1;
3476                 item = list_entry(btv->capture.next, struct bttv_buffer, vb.queue);
3477                 if (V4L2_FIELD_HAS_TOP(item->vb.field))
3478                         set->top    = item;
3479                 if (V4L2_FIELD_HAS_BOTTOM(item->vb.field))
3480                         set->bottom = item;
3481
3482                 /* capture request for other field ? */
3483                 if (!V4L2_FIELD_HAS_BOTH(item->vb.field) &&
3484                     (item->vb.queue.next != &btv->capture)) {
3485                         item = list_entry(item->vb.queue.next, struct bttv_buffer, vb.queue);
3486                         /* Mike Isely <isely@pobox.com> - Only check
3487                          * and set up the bottom field in the logic
3488                          * below.  Don't ever do the top field.  This
3489                          * of course means that if we set up the
3490                          * bottom field in the above code that we'll
3491                          * actually skip a field.  But that's OK.
3492                          * Having processed only a single buffer this
3493                          * time, then the next time around the first
3494                          * available buffer should be for a top field.
3495                          * That will then cause us here to set up a
3496                          * top then a bottom field in the normal way.
3497                          * The alternative to this understanding is
3498                          * that we set up the second available buffer
3499                          * as a top field, but that's out of order
3500                          * since this driver always processes the top
3501                          * field first - the effect will be the two
3502                          * buffers being returned in the wrong order,
3503                          * with the second buffer also being delayed
3504                          * by one field time (owing to the fifo nature
3505                          * of videobuf).  Worse still, we'll be stuck
3506                          * doing fields out of order now every time
3507                          * until something else causes a field to be
3508                          * dropped.  By effectively forcing a field to
3509                          * drop this way then we always get back into
3510                          * sync within a single frame time.  (Out of
3511                          * order fields can screw up deinterlacing
3512                          * algorithms.) */
3513                         if (!V4L2_FIELD_HAS_BOTH(item->vb.field)) {
3514                                 if (NULL == set->bottom &&
3515                                     V4L2_FIELD_BOTTOM == item->vb.field) {
3516                                         set->bottom = item;
3517                                 }
3518                                 if (NULL != set->top  &&  NULL != set->bottom)
3519                                         set->top_irq = 2;
3520                         }
3521                 }
3522         }
3523
3524         /* screen overlay ? */
3525         if (NULL != btv->screen) {
3526                 if (V4L2_FIELD_HAS_BOTH(btv->screen->vb.field)) {
3527                         if (NULL == set->top && NULL == set->bottom) {
3528                                 set->top    = btv->screen;
3529                                 set->bottom = btv->screen;
3530                         }
3531                 } else {
3532                         if (V4L2_FIELD_TOP == btv->screen->vb.field &&
3533                             NULL == set->top) {
3534                                 set->top = btv->screen;
3535                         }
3536                         if (V4L2_FIELD_BOTTOM == btv->screen->vb.field &&
3537                             NULL == set->bottom) {
3538                                 set->bottom = btv->screen;
3539                         }
3540                 }
3541         }
3542
3543         dprintk("%d: next set: top=%p bottom=%p [screen=%p,irq=%d,%d]\n",
3544                 btv->c.nr, set->top, set->bottom,
3545                 btv->screen, set->frame_irq, set->top_irq);
3546         return 0;
3547 }
3548
3549 static void
3550 bttv_irq_wakeup_video(struct bttv *btv, struct bttv_buffer_set *wakeup,
3551                       struct bttv_buffer_set *curr, unsigned int state)
3552 {
3553         struct timeval ts;
3554
3555         v4l2_get_timestamp(&ts);
3556
3557         if (wakeup->top == wakeup->bottom) {
3558                 if (NULL != wakeup->top && curr->top != wakeup->top) {
3559                         if (irq_debug > 1)
3560                                 pr_debug("%d: wakeup: both=%p\n",
3561                                          btv->c.nr, wakeup->top);
3562                         wakeup->top->vb.ts = ts;
3563                         wakeup->top->vb.field_count = btv->field_count;
3564                         wakeup->top->vb.state = state;
3565                         wake_up(&wakeup->top->vb.done);
3566                 }
3567         } else {
3568                 if (NULL != wakeup->top && curr->top != wakeup->top) {
3569                         if (irq_debug > 1)
3570                                 pr_debug("%d: wakeup: top=%p\n",
3571                                          btv->c.nr, wakeup->top);
3572                         wakeup->top->vb.ts = ts;
3573                         wakeup->top->vb.field_count = btv->field_count;
3574                         wakeup->top->vb.state = state;
3575                         wake_up(&wakeup->top->vb.done);
3576                 }
3577                 if (NULL != wakeup->bottom && curr->bottom != wakeup->bottom) {
3578                         if (irq_debug > 1)
3579                                 pr_debug("%d: wakeup: bottom=%p\n",
3580                                          btv->c.nr, wakeup->bottom);
3581                         wakeup->bottom->vb.ts = ts;
3582                         wakeup->bottom->vb.field_count = btv->field_count;
3583                         wakeup->bottom->vb.state = state;
3584                         wake_up(&wakeup->bottom->vb.done);
3585                 }
3586         }
3587 }
3588
3589 static void
3590 bttv_irq_wakeup_vbi(struct bttv *btv, struct bttv_buffer *wakeup,
3591                     unsigned int state)
3592 {
3593         struct timeval ts;
3594
3595         if (NULL == wakeup)
3596                 return;
3597
3598         v4l2_get_timestamp(&ts);
3599         wakeup->vb.ts = ts;
3600         wakeup->vb.field_count = btv->field_count;
3601         wakeup->vb.state = state;
3602         wake_up(&wakeup->vb.done);
3603 }
3604
3605 static void bttv_irq_timeout(unsigned long data)
3606 {
3607         struct bttv *btv = (struct bttv *)data;
3608         struct bttv_buffer_set old,new;
3609         struct bttv_buffer *ovbi;
3610         struct bttv_buffer *item;
3611         unsigned long flags;
3612
3613         if (bttv_verbose) {
3614                 pr_info("%d: timeout: drop=%d irq=%d/%d, risc=%08x, ",
3615                         btv->c.nr, btv->framedrop, btv->irq_me, btv->irq_total,
3616                         btread(BT848_RISC_COUNT));
3617                 bttv_print_irqbits(btread(BT848_INT_STAT),0);
3618                 pr_cont("\n");
3619         }
3620
3621         spin_lock_irqsave(&btv->s_lock,flags);
3622
3623         /* deactivate stuff */
3624         memset(&new,0,sizeof(new));
3625         old  = btv->curr;
3626         ovbi = btv->cvbi;
3627         btv->curr = new;
3628         btv->cvbi = NULL;
3629         btv->loop_irq = 0;
3630         bttv_buffer_activate_video(btv, &new);
3631         bttv_buffer_activate_vbi(btv,   NULL);
3632         bttv_set_dma(btv, 0);
3633
3634         /* wake up */
3635         bttv_irq_wakeup_video(btv, &old, &new, VIDEOBUF_ERROR);
3636         bttv_irq_wakeup_vbi(btv, ovbi, VIDEOBUF_ERROR);
3637
3638         /* cancel all outstanding capture / vbi requests */
3639         while (!list_empty(&btv->capture)) {
3640                 item = list_entry(btv->capture.next, struct bttv_buffer, vb.queue);
3641                 list_del(&item->vb.queue);
3642                 item->vb.state = VIDEOBUF_ERROR;
3643                 wake_up(&item->vb.done);
3644         }
3645         while (!list_empty(&btv->vcapture)) {
3646                 item = list_entry(btv->vcapture.next, struct bttv_buffer, vb.queue);
3647                 list_del(&item->vb.queue);
3648                 item->vb.state = VIDEOBUF_ERROR;
3649                 wake_up(&item->vb.done);
3650         }
3651
3652         btv->errors++;
3653         spin_unlock_irqrestore(&btv->s_lock,flags);
3654 }
3655
3656 static void
3657 bttv_irq_wakeup_top(struct bttv *btv)
3658 {
3659         struct bttv_buffer *wakeup = btv->curr.top;
3660
3661         if (NULL == wakeup)
3662                 return;
3663
3664         spin_lock(&btv->s_lock);
3665         btv->curr.top_irq = 0;
3666         btv->curr.top = NULL;
3667         bttv_risc_hook(btv, RISC_SLOT_O_FIELD, NULL, 0);
3668
3669         v4l2_get_timestamp(&wakeup->vb.ts);
3670         wakeup->vb.field_count = btv->field_count;
3671         wakeup->vb.state = VIDEOBUF_DONE;
3672         wake_up(&wakeup->vb.done);
3673         spin_unlock(&btv->s_lock);
3674 }
3675
3676 static inline int is_active(struct btcx_riscmem *risc, u32 rc)
3677 {
3678         if (rc < risc->dma)
3679                 return 0;
3680         if (rc > risc->dma + risc->size)
3681                 return 0;
3682         return 1;
3683 }
3684
3685 static void
3686 bttv_irq_switch_video(struct bttv *btv)
3687 {
3688         struct bttv_buffer_set new;
3689         struct bttv_buffer_set old;
3690         dma_addr_t rc;
3691
3692         spin_lock(&btv->s_lock);
3693
3694         /* new buffer set */
3695         bttv_irq_next_video(btv, &new);
3696         rc = btread(BT848_RISC_COUNT);
3697         if ((btv->curr.top    && is_active(&btv->curr.top->top,       rc)) ||
3698             (btv->curr.bottom && is_active(&btv->curr.bottom->bottom, rc))) {
3699                 btv->framedrop++;
3700                 if (debug_latency)
3701                         bttv_irq_debug_low_latency(btv, rc);
3702                 spin_unlock(&btv->s_lock);
3703                 return;
3704         }
3705
3706         /* switch over */
3707         old = btv->curr;
3708         btv->curr = new;
3709         btv->loop_irq &= ~1;
3710         bttv_buffer_activate_video(btv, &new);
3711         bttv_set_dma(btv, 0);
3712
3713         /* switch input */
3714         if (UNSET != btv->new_input) {
3715                 video_mux(btv,btv->new_input);
3716                 btv->new_input = UNSET;
3717         }
3718
3719         /* wake up finished buffers */
3720         bttv_irq_wakeup_video(btv, &old, &new, VIDEOBUF_DONE);
3721         spin_unlock(&btv->s_lock);
3722 }
3723
3724 static void
3725 bttv_irq_switch_vbi(struct bttv *btv)
3726 {
3727         struct bttv_buffer *new = NULL;
3728         struct bttv_buffer *old;
3729         u32 rc;
3730
3731         spin_lock(&btv->s_lock);
3732
3733         if (!list_empty(&btv->vcapture))
3734                 new = list_entry(btv->vcapture.next, struct bttv_buffer, vb.queue);
3735         old = btv->cvbi;
3736
3737         rc = btread(BT848_RISC_COUNT);
3738         if (NULL != old && (is_active(&old->top,    rc) ||
3739                             is_active(&old->bottom, rc))) {
3740                 btv->framedrop++;
3741                 if (debug_latency)
3742                         bttv_irq_debug_low_latency(btv, rc);
3743                 spin_unlock(&btv->s_lock);
3744                 return;
3745         }
3746
3747         /* switch */
3748         btv->cvbi = new;
3749         btv->loop_irq &= ~4;
3750         bttv_buffer_activate_vbi(btv, new);
3751         bttv_set_dma(btv, 0);
3752
3753         bttv_irq_wakeup_vbi(btv, old, VIDEOBUF_DONE);
3754         spin_unlock(&btv->s_lock);
3755 }
3756
3757 static irqreturn_t bttv_irq(int irq, void *dev_id)
3758 {
3759         u32 stat,astat;
3760         u32 dstat;
3761         int count;
3762         struct bttv *btv;
3763         int handled = 0;
3764
3765         btv=(struct bttv *)dev_id;
3766
3767         count=0;
3768         while (1) {
3769                 /* get/clear interrupt status bits */
3770                 stat=btread(BT848_INT_STAT);
3771                 astat=stat&btread(BT848_INT_MASK);
3772                 if (!astat)
3773                         break;
3774                 handled = 1;
3775                 btwrite(stat,BT848_INT_STAT);
3776
3777                 /* get device status bits */
3778                 dstat=btread(BT848_DSTATUS);
3779
3780                 if (irq_debug) {
3781                         pr_debug("%d: irq loop=%d fc=%d riscs=%x, riscc=%08x, ",
3782                                  btv->c.nr, count, btv->field_count,
3783                                  stat>>28, btread(BT848_RISC_COUNT));
3784                         bttv_print_irqbits(stat,astat);
3785                         if (stat & BT848_INT_HLOCK)
3786                                 pr_cont("   HLOC => %s",
3787                                         dstat & BT848_DSTATUS_HLOC
3788                                         ? "yes" : "no");
3789                         if (stat & BT848_INT_VPRES)
3790                                 pr_cont("   PRES => %s",
3791                                         dstat & BT848_DSTATUS_PRES
3792                                         ? "yes" : "no");
3793                         if (stat & BT848_INT_FMTCHG)
3794                                 pr_cont("   NUML => %s",
3795                                         dstat & BT848_DSTATUS_NUML
3796                                         ? "625" : "525");
3797                         pr_cont("\n");
3798                 }
3799
3800                 if (astat&BT848_INT_VSYNC)
3801                         btv->field_count++;
3802
3803                 if ((astat & BT848_INT_GPINT) && btv->remote) {
3804                         bttv_input_irq(btv);
3805                 }
3806
3807                 if (astat & BT848_INT_I2CDONE) {
3808                         btv->i2c_done = stat;
3809                         wake_up(&btv->i2c_queue);
3810                 }
3811
3812                 if ((astat & BT848_INT_RISCI)  &&  (stat & (4<<28)))
3813                         bttv_irq_switch_vbi(btv);
3814
3815                 if ((astat & BT848_INT_RISCI)  &&  (stat & (2<<28)))
3816                         bttv_irq_wakeup_top(btv);
3817
3818                 if ((astat & BT848_INT_RISCI)  &&  (stat & (1<<28)))
3819                         bttv_irq_switch_video(btv);
3820
3821                 if ((astat & BT848_INT_HLOCK)  &&  btv->opt_automute)
3822                         /* trigger automute */
3823                         audio_mux_gpio(btv, btv->audio_input, btv->mute);
3824
3825                 if (astat & (BT848_INT_SCERR|BT848_INT_OCERR)) {
3826                         pr_info("%d: %s%s @ %08x,",
3827                                 btv->c.nr,
3828                                 (astat & BT848_INT_SCERR) ? "SCERR" : "",
3829                                 (astat & BT848_INT_OCERR) ? "OCERR" : "",
3830                                 btread(BT848_RISC_COUNT));
3831                         bttv_print_irqbits(stat,astat);
3832                         pr_cont("\n");
3833                         if (bttv_debug)
3834                                 bttv_print_riscaddr(btv);
3835                 }
3836                 if (fdsr && astat & BT848_INT_FDSR) {
3837                         pr_info("%d: FDSR @ %08x\n",
3838                                 btv->c.nr, btread(BT848_RISC_COUNT));
3839                         if (bttv_debug)
3840                                 bttv_print_riscaddr(btv);
3841                 }
3842
3843                 count++;
3844                 if (count > 4) {
3845
3846                         if (count > 8 || !(astat & BT848_INT_GPINT)) {
3847                                 btwrite(0, BT848_INT_MASK);
3848
3849                                 pr_err("%d: IRQ lockup, cleared int mask [",
3850                                        btv->c.nr);
3851                         } else {
3852                                 pr_err("%d: IRQ lockup, clearing GPINT from int mask [",
3853                                        btv->c.nr);
3854
3855                                 btwrite(btread(BT848_INT_MASK) & (-1 ^ BT848_INT_GPINT),
3856                                                 BT848_INT_MASK);
3857                         };
3858
3859                         bttv_print_irqbits(stat,astat);
3860
3861                         pr_cont("]\n");
3862                 }
3863         }
3864         btv->irq_total++;
3865         if (handled)
3866                 btv->irq_me++;
3867         return IRQ_RETVAL(handled);
3868 }
3869
3870
3871 /* ----------------------------------------------------------------------- */
3872 /* initialization                                                          */
3873
3874 static struct video_device *vdev_init(struct bttv *btv,
3875                                       const struct video_device *template,
3876                                       const char *type_name)
3877 {
3878         struct video_device *vfd;
3879
3880         vfd = video_device_alloc();
3881         if (NULL == vfd)
3882                 return NULL;
3883         *vfd = *template;
3884         vfd->v4l2_dev = &btv->c.v4l2_dev;
3885         vfd->release = video_device_release;
3886         vfd->debug   = bttv_debug;
3887         set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
3888         video_set_drvdata(vfd, btv);
3889         snprintf(vfd->name, sizeof(vfd->name), "BT%d%s %s (%s)",
3890                  btv->id, (btv->id==848 && btv->revision==0x12) ? "A" : "",
3891                  type_name, bttv_tvcards[btv->c.type].name);
3892         if (btv->tuner_type == TUNER_ABSENT) {
3893                 v4l2_disable_ioctl(vfd, VIDIOC_G_FREQUENCY);
3894                 v4l2_disable_ioctl(vfd, VIDIOC_S_FREQUENCY);
3895                 v4l2_disable_ioctl(vfd, VIDIOC_G_TUNER);
3896                 v4l2_disable_ioctl(vfd, VIDIOC_S_TUNER);
3897         }
3898         return vfd;
3899 }
3900
3901 static void bttv_unregister_video(struct bttv *btv)
3902 {
3903         if (btv->video_dev) {
3904                 if (video_is_registered(btv->video_dev))
3905                         video_unregister_device(btv->video_dev);
3906                 else
3907                         video_device_release(btv->video_dev);
3908                 btv->video_dev = NULL;
3909         }
3910         if (btv->vbi_dev) {
3911                 if (video_is_registered(btv->vbi_dev))
3912                         video_unregister_device(btv->vbi_dev);
3913                 else
3914                         video_device_release(btv->vbi_dev);
3915                 btv->vbi_dev = NULL;
3916         }
3917         if (btv->radio_dev) {
3918                 if (video_is_registered(btv->radio_dev))
3919                         video_unregister_device(btv->radio_dev);
3920                 else
3921                         video_device_release(btv->radio_dev);
3922                 btv->radio_dev = NULL;
3923         }
3924 }
3925
3926 /* register video4linux devices */
3927 static int bttv_register_video(struct bttv *btv)
3928 {
3929         if (no_overlay > 0)
3930                 pr_notice("Overlay support disabled\n");
3931
3932         /* video */
3933         btv->video_dev = vdev_init(btv, &bttv_video_template, "video");
3934
3935         if (NULL == btv->video_dev)
3936                 goto err;
3937         if (video_register_device(btv->video_dev, VFL_TYPE_GRABBER,
3938                                   video_nr[btv->c.nr]) < 0)
3939                 goto err;
3940         pr_info("%d: registered device %s\n",
3941                 btv->c.nr, video_device_node_name(btv->video_dev));
3942         if (device_create_file(&btv->video_dev->dev,
3943                                      &dev_attr_card)<0) {
3944                 pr_err("%d: device_create_file 'card' failed\n", btv->c.nr);
3945                 goto err;
3946         }
3947
3948         /* vbi */
3949         btv->vbi_dev = vdev_init(btv, &bttv_video_template, "vbi");
3950
3951         if (NULL == btv->vbi_dev)
3952                 goto err;
3953         if (video_register_device(btv->vbi_dev, VFL_TYPE_VBI,
3954                                   vbi_nr[btv->c.nr]) < 0)
3955                 goto err;
3956         pr_info("%d: registered device %s\n",
3957                 btv->c.nr, video_device_node_name(btv->vbi_dev));
3958
3959         if (!btv->has_radio)
3960                 return 0;
3961         /* radio */
3962         btv->radio_dev = vdev_init(btv, &radio_template, "radio");
3963         if (NULL == btv->radio_dev)
3964                 goto err;
3965         btv->radio_dev->ctrl_handler = &btv->radio_ctrl_handler;
3966         if (video_register_device(btv->radio_dev, VFL_TYPE_RADIO,
3967                                   radio_nr[btv->c.nr]) < 0)
3968                 goto err;
3969         pr_info("%d: registered device %s\n",
3970                 btv->c.nr, video_device_node_name(btv->radio_dev));
3971
3972         /* all done */
3973         return 0;
3974
3975  err:
3976         bttv_unregister_video(btv);
3977         return -1;
3978 }
3979
3980
3981 /* on OpenFirmware machines (PowerMac at least), PCI memory cycle */
3982 /* response on cards with no firmware is not enabled by OF */
3983 static void pci_set_command(struct pci_dev *dev)
3984 {
3985 #if defined(__powerpc__)
3986         unsigned int cmd;
3987
3988         pci_read_config_dword(dev, PCI_COMMAND, &cmd);
3989         cmd = (cmd | PCI_COMMAND_MEMORY );
3990         pci_write_config_dword(dev, PCI_COMMAND, cmd);
3991 #endif
3992 }
3993
3994 static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
3995 {
3996         struct v4l2_frequency init_freq = {
3997                 .tuner = 0,
3998                 .type = V4L2_TUNER_ANALOG_TV,
3999                 .frequency = 980,
4000         };
4001         int result;
4002         unsigned char lat;
4003         struct bttv *btv;
4004         struct v4l2_ctrl_handler *hdl;
4005
4006         if (bttv_num == BTTV_MAX)
4007                 return -ENOMEM;
4008         pr_info("Bt8xx card found (%d)\n", bttv_num);
4009         bttvs[bttv_num] = btv = kzalloc(sizeof(*btv), GFP_KERNEL);
4010         if (btv == NULL) {
4011                 pr_err("out of memory\n");
4012                 return -ENOMEM;
4013         }
4014         btv->c.nr  = bttv_num;
4015         snprintf(btv->c.v4l2_dev.name, sizeof(btv->c.v4l2_dev.name),
4016                         "bttv%d", btv->c.nr);
4017
4018         /* initialize structs / fill in defaults */
4019         mutex_init(&btv->lock);
4020         spin_lock_init(&btv->s_lock);
4021         spin_lock_init(&btv->gpio_lock);
4022         init_waitqueue_head(&btv->i2c_queue);
4023         INIT_LIST_HEAD(&btv->c.subs);
4024         INIT_LIST_HEAD(&btv->capture);
4025         INIT_LIST_HEAD(&btv->vcapture);
4026
4027         init_timer(&btv->timeout);
4028         btv->timeout.function = bttv_irq_timeout;
4029         btv->timeout.data     = (unsigned long)btv;
4030
4031         btv->i2c_rc = -1;
4032         btv->tuner_type  = UNSET;
4033         btv->new_input   = UNSET;
4034         btv->has_radio=radio[btv->c.nr];
4035
4036         /* pci stuff (init, get irq/mmio, ... */
4037         btv->c.pci = dev;
4038         btv->id  = dev->device;
4039         if (pci_enable_device(dev)) {
4040                 pr_warn("%d: Can't enable device\n", btv->c.nr);
4041                 return -EIO;
4042         }
4043         if (pci_set_dma_mask(dev, DMA_BIT_MASK(32))) {
4044                 pr_warn("%d: No suitable DMA available\n", btv->c.nr);
4045                 return -EIO;
4046         }
4047         if (!request_mem_region(pci_resource_start(dev,0),
4048                                 pci_resource_len(dev,0),
4049                                 btv->c.v4l2_dev.name)) {
4050                 pr_warn("%d: can't request iomem (0x%llx)\n",
4051                         btv->c.nr,
4052                         (unsigned long long)pci_resource_start(dev, 0));
4053                 return -EBUSY;
4054         }
4055         pci_set_master(dev);
4056         pci_set_command(dev);
4057
4058         result = v4l2_device_register(&dev->dev, &btv->c.v4l2_dev);
4059         if (result < 0) {
4060                 pr_warn("%d: v4l2_device_register() failed\n", btv->c.nr);
4061                 goto fail0;
4062         }
4063         hdl = &btv->ctrl_handler;
4064         v4l2_ctrl_handler_init(hdl, 20);
4065         btv->c.v4l2_dev.ctrl_handler = hdl;
4066         v4l2_ctrl_handler_init(&btv->radio_ctrl_handler, 6);
4067
4068         btv->revision = dev->revision;
4069         pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat);
4070         pr_info("%d: Bt%d (rev %d) at %s, irq: %d, latency: %d, mmio: 0x%llx\n",
4071                 bttv_num, btv->id, btv->revision, pci_name(dev),
4072                 btv->c.pci->irq, lat,
4073                 (unsigned long long)pci_resource_start(dev, 0));
4074         schedule();
4075
4076         btv->bt848_mmio = ioremap(pci_resource_start(dev, 0), 0x1000);
4077         if (NULL == btv->bt848_mmio) {
4078                 pr_err("%d: ioremap() failed\n", btv->c.nr);
4079                 result = -EIO;
4080                 goto fail1;
4081         }
4082
4083         /* identify card */
4084         bttv_idcard(btv);
4085
4086         /* disable irqs, register irq handler */
4087         btwrite(0, BT848_INT_MASK);
4088         result = request_irq(btv->c.pci->irq, bttv_irq,
4089             IRQF_SHARED, btv->c.v4l2_dev.name, (void *)btv);
4090         if (result < 0) {
4091                 pr_err("%d: can't get IRQ %d\n",
4092                        bttv_num, btv->c.pci->irq);
4093                 goto fail1;
4094         }
4095
4096         if (0 != bttv_handle_chipset(btv)) {
4097                 result = -EIO;
4098                 goto fail2;
4099         }
4100
4101         /* init options from insmod args */
4102         btv->opt_combfilter = combfilter;
4103         bttv_ctrl_combfilter.def = combfilter;
4104         bttv_ctrl_lumafilter.def = lumafilter;
4105         btv->opt_automute   = automute;
4106         bttv_ctrl_automute.def = automute;
4107         bttv_ctrl_agc_crush.def = agc_crush;
4108         btv->opt_vcr_hack   = vcr_hack;
4109         bttv_ctrl_vcr_hack.def = vcr_hack;
4110         bttv_ctrl_whitecrush_upper.def = whitecrush_upper;
4111         bttv_ctrl_whitecrush_lower.def = whitecrush_lower;
4112         btv->opt_uv_ratio   = uv_ratio;
4113         bttv_ctrl_uv_ratio.def = uv_ratio;
4114         bttv_ctrl_full_luma.def = full_luma_range;
4115         bttv_ctrl_coring.def = coring;
4116
4117         /* fill struct bttv with some useful defaults */
4118         btv->init.btv         = btv;
4119         btv->init.ov.w.width  = 320;
4120         btv->init.ov.w.height = 240;
4121         btv->init.fmt         = format_by_fourcc(V4L2_PIX_FMT_BGR24);
4122         btv->init.width       = 320;
4123         btv->init.height      = 240;
4124         btv->init.ov.w.width  = 320;
4125         btv->init.ov.w.height = 240;
4126         btv->init.ov.field    = V4L2_FIELD_INTERLACED;
4127         btv->input = 0;
4128
4129         v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4130                         V4L2_CID_BRIGHTNESS, 0, 0xff00, 0x100, 32768);
4131         v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4132                         V4L2_CID_CONTRAST, 0, 0xff80, 0x80, 0x6c00);
4133         v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4134                         V4L2_CID_SATURATION, 0, 0xff80, 0x80, 32768);
4135         v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4136                         V4L2_CID_COLOR_KILLER, 0, 1, 1, 0);
4137         v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4138                         V4L2_CID_HUE, 0, 0xff00, 0x100, 32768);
4139         v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4140                         V4L2_CID_CHROMA_AGC, 0, 1, 1, !!chroma_agc);
4141         v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4142                 V4L2_CID_AUDIO_MUTE, 0, 1, 1, 0);
4143         if (btv->volume_gpio)
4144                 v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
4145                         V4L2_CID_AUDIO_VOLUME, 0, 0xff00, 0x100, 0xff00);
4146         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_combfilter, NULL);
4147         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_automute, NULL);
4148         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_lumafilter, NULL);
4149         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_agc_crush, NULL);
4150         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_vcr_hack, NULL);
4151         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_whitecrush_lower, NULL);
4152         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_whitecrush_upper, NULL);
4153         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_uv_ratio, NULL);
4154         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_full_luma, NULL);
4155         v4l2_ctrl_new_custom(hdl, &bttv_ctrl_coring, NULL);
4156
4157         /* initialize hardware */
4158         if (bttv_gpio)
4159                 bttv_gpio_tracking(btv,"pre-init");
4160
4161         bttv_risc_init_main(btv);
4162         init_bt848(btv);
4163
4164         /* gpio */
4165         btwrite(0x00, BT848_GPIO_REG_INP);
4166         btwrite(0x00, BT848_GPIO_OUT_EN);
4167         if (bttv_verbose)
4168                 bttv_gpio_tracking(btv,"init");
4169
4170         /* needs to be done before i2c is registered */
4171         bttv_init_card1(btv);
4172
4173         /* register i2c + gpio */
4174         init_bttv_i2c(btv);
4175
4176         /* some card-specific stuff (needs working i2c) */
4177         bttv_init_card2(btv);
4178         bttv_init_tuner(btv);
4179         if (btv->tuner_type != TUNER_ABSENT) {
4180                 bttv_set_frequency(btv, &init_freq);
4181                 btv->radio_freq = 90500 * 16; /* 90.5Mhz default */
4182         }
4183         btv->std = V4L2_STD_PAL;
4184         init_irqreg(btv);
4185         if (!bttv_tvcards[btv->c.type].no_video)
4186                 v4l2_ctrl_handler_setup(hdl);
4187         if (hdl->error) {
4188                 result = hdl->error;
4189                 goto fail2;
4190         }
4191         /* mute device */
4192         audio_mute(btv, 1);
4193
4194         /* register video4linux + input */
4195         if (!bttv_tvcards[btv->c.type].no_video) {
4196                 v4l2_ctrl_add_handler(&btv->radio_ctrl_handler, hdl,
4197                                 v4l2_ctrl_radio_filter);
4198                 if (btv->radio_ctrl_handler.error) {
4199                         result = btv->radio_ctrl_handler.error;
4200                         goto fail2;
4201                 }
4202                 set_input(btv, 0, btv->tvnorm);
4203                 bttv_crop_reset(&btv->crop[0], btv->tvnorm);
4204                 btv->crop[1] = btv->crop[0]; /* current = default */
4205                 disclaim_vbi_lines(btv);
4206                 disclaim_video_lines(btv);
4207                 bttv_register_video(btv);
4208         }
4209
4210         /* add subdevices and autoload dvb-bt8xx if needed */
4211         if (bttv_tvcards[btv->c.type].has_dvb) {
4212                 bttv_sub_add_device(&btv->c, "dvb");
4213                 request_modules(btv);
4214         }
4215
4216         if (!disable_ir) {
4217                 init_bttv_i2c_ir(btv);
4218                 bttv_input_init(btv);
4219         }
4220
4221         /* everything is fine */
4222         bttv_num++;
4223         return 0;
4224
4225 fail2:
4226         free_irq(btv->c.pci->irq,btv);
4227
4228 fail1:
4229         v4l2_ctrl_handler_free(&btv->ctrl_handler);
4230         v4l2_ctrl_handler_free(&btv->radio_ctrl_handler);
4231         v4l2_device_unregister(&btv->c.v4l2_dev);
4232
4233 fail0:
4234         if (btv->bt848_mmio)
4235                 iounmap(btv->bt848_mmio);
4236         release_mem_region(pci_resource_start(btv->c.pci,0),
4237                            pci_resource_len(btv->c.pci,0));
4238         return result;
4239 }
4240
4241 static void bttv_remove(struct pci_dev *pci_dev)
4242 {
4243         struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
4244         struct bttv *btv = to_bttv(v4l2_dev);
4245
4246         if (bttv_verbose)
4247                 pr_info("%d: unloading\n", btv->c.nr);
4248
4249         if (bttv_tvcards[btv->c.type].has_dvb)
4250                 flush_request_modules(btv);
4251
4252         /* shutdown everything (DMA+IRQs) */
4253         btand(~15, BT848_GPIO_DMA_CTL);
4254         btwrite(0, BT848_INT_MASK);
4255         btwrite(~0x0, BT848_INT_STAT);
4256         btwrite(0x0, BT848_GPIO_OUT_EN);
4257         if (bttv_gpio)
4258                 bttv_gpio_tracking(btv,"cleanup");
4259
4260         /* tell gpio modules we are leaving ... */
4261         btv->shutdown=1;
4262         bttv_input_fini(btv);
4263         bttv_sub_del_devices(&btv->c);
4264
4265         /* unregister i2c_bus + input */
4266         fini_bttv_i2c(btv);
4267
4268         /* unregister video4linux */
4269         bttv_unregister_video(btv);
4270
4271         /* free allocated memory */
4272         v4l2_ctrl_handler_free(&btv->ctrl_handler);
4273         v4l2_ctrl_handler_free(&btv->radio_ctrl_handler);
4274         btcx_riscmem_free(btv->c.pci,&btv->main);
4275
4276         /* free resources */
4277         free_irq(btv->c.pci->irq,btv);
4278         iounmap(btv->bt848_mmio);
4279         release_mem_region(pci_resource_start(btv->c.pci,0),
4280                            pci_resource_len(btv->c.pci,0));
4281
4282         v4l2_device_unregister(&btv->c.v4l2_dev);
4283         bttvs[btv->c.nr] = NULL;
4284         kfree(btv);
4285
4286         return;
4287 }
4288
4289 #ifdef CONFIG_PM
4290 static int bttv_suspend(struct pci_dev *pci_dev, pm_message_t state)
4291 {
4292         struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
4293         struct bttv *btv = to_bttv(v4l2_dev);
4294         struct bttv_buffer_set idle;
4295         unsigned long flags;
4296
4297         dprintk("%d: suspend %d\n", btv->c.nr, state.event);
4298
4299         /* stop dma + irqs */
4300         spin_lock_irqsave(&btv->s_lock,flags);
4301         memset(&idle, 0, sizeof(idle));
4302         btv->state.video = btv->curr;
4303         btv->state.vbi   = btv->cvbi;
4304         btv->state.loop_irq = btv->loop_irq;
4305         btv->curr = idle;
4306         btv->loop_irq = 0;
4307         bttv_buffer_activate_video(btv, &idle);
4308         bttv_buffer_activate_vbi(btv, NULL);
4309         bttv_set_dma(btv, 0);
4310         btwrite(0, BT848_INT_MASK);
4311         spin_unlock_irqrestore(&btv->s_lock,flags);
4312
4313         /* save bt878 state */
4314         btv->state.gpio_enable = btread(BT848_GPIO_OUT_EN);
4315         btv->state.gpio_data   = gpio_read();
4316
4317         /* save pci state */
4318         pci_save_state(pci_dev);
4319         if (0 != pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state))) {
4320                 pci_disable_device(pci_dev);
4321                 btv->state.disabled = 1;
4322         }
4323         return 0;
4324 }
4325
4326 static int bttv_resume(struct pci_dev *pci_dev)
4327 {
4328         struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
4329         struct bttv *btv = to_bttv(v4l2_dev);
4330         unsigned long flags;
4331         int err;
4332
4333         dprintk("%d: resume\n", btv->c.nr);
4334
4335         /* restore pci state */
4336         if (btv->state.disabled) {
4337                 err=pci_enable_device(pci_dev);
4338                 if (err) {
4339                         pr_warn("%d: Can't enable device\n", btv->c.nr);
4340                         return err;
4341                 }
4342                 btv->state.disabled = 0;
4343         }
4344         err=pci_set_power_state(pci_dev, PCI_D0);
4345         if (err) {
4346                 pci_disable_device(pci_dev);
4347                 pr_warn("%d: Can't enable device\n", btv->c.nr);
4348                 btv->state.disabled = 1;
4349                 return err;
4350         }
4351
4352         pci_restore_state(pci_dev);
4353
4354         /* restore bt878 state */
4355         bttv_reinit_bt848(btv);
4356         gpio_inout(0xffffff, btv->state.gpio_enable);
4357         gpio_write(btv->state.gpio_data);
4358
4359         /* restart dma */
4360         spin_lock_irqsave(&btv->s_lock,flags);
4361         btv->curr = btv->state.video;
4362         btv->cvbi = btv->state.vbi;
4363         btv->loop_irq = btv->state.loop_irq;
4364         bttv_buffer_activate_video(btv, &btv->curr);
4365         bttv_buffer_activate_vbi(btv, btv->cvbi);
4366         bttv_set_dma(btv, 0);
4367         spin_unlock_irqrestore(&btv->s_lock,flags);
4368         return 0;
4369 }
4370 #endif
4371
4372 static struct pci_device_id bttv_pci_tbl[] = {
4373         {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT848), 0},
4374         {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT849), 0},
4375         {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT878), 0},
4376         {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT879), 0},
4377         {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_FUSION879), 0},
4378         {0,}
4379 };
4380
4381 MODULE_DEVICE_TABLE(pci, bttv_pci_tbl);
4382
4383 static struct pci_driver bttv_pci_driver = {
4384         .name     = "bttv",
4385         .id_table = bttv_pci_tbl,
4386         .probe    = bttv_probe,
4387         .remove   = bttv_remove,
4388 #ifdef CONFIG_PM
4389         .suspend  = bttv_suspend,
4390         .resume   = bttv_resume,
4391 #endif
4392 };
4393
4394 static int __init bttv_init_module(void)
4395 {
4396         int ret;
4397
4398         bttv_num = 0;
4399
4400         pr_info("driver version %s loaded\n", BTTV_VERSION);
4401         if (gbuffers < 2 || gbuffers > VIDEO_MAX_FRAME)
4402                 gbuffers = 2;
4403         if (gbufsize > BTTV_MAX_FBUF)
4404                 gbufsize = BTTV_MAX_FBUF;
4405         gbufsize = (gbufsize + PAGE_SIZE - 1) & PAGE_MASK;
4406         if (bttv_verbose)
4407                 pr_info("using %d buffers with %dk (%d pages) each for capture\n",
4408                         gbuffers, gbufsize >> 10, gbufsize >> PAGE_SHIFT);
4409
4410         bttv_check_chipset();
4411
4412         ret = bus_register(&bttv_sub_bus_type);
4413         if (ret < 0) {
4414                 pr_warn("bus_register error: %d\n", ret);
4415                 return ret;
4416         }
4417         ret = pci_register_driver(&bttv_pci_driver);
4418         if (ret < 0)
4419                 bus_unregister(&bttv_sub_bus_type);
4420
4421         return ret;
4422 }
4423
4424 static void __exit bttv_cleanup_module(void)
4425 {
4426         pci_unregister_driver(&bttv_pci_driver);
4427         bus_unregister(&bttv_sub_bus_type);
4428 }
4429
4430 module_init(bttv_init_module);
4431 module_exit(bttv_cleanup_module);
4432
4433 /*
4434  * Local variables:
4435  * c-basic-offset: 8
4436  * End:
4437  */