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