Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[pandora-kernel.git] / drivers / media / video / ivtv / ivtv-driver.c
1 /*
2     ivtv driver initialization and card probing
3     Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
4     Copyright (C) 2004  Chris Kennedy <c@groovy.org>
5     Copyright (C) 2005-2007  Hans Verkuil <hverkuil@xs4all.nl>
6
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 /* Main Driver file for the ivtv project:
23  * Driver for the Conexant CX23415/CX23416 chip.
24  * Author: Kevin Thayer (nufan_wfk at yahoo.com)
25  * License: GPL
26  * http://www.ivtvdriver.org
27  *
28  * -----
29  * MPG600/MPG160 support by  T.Adachi <tadachi@tadachi-net.com>
30  *                      and Takeru KOMORIYA<komoriya@paken.org>
31  *
32  * AVerMedia M179 GPIO info by Chris Pinkham <cpinkham@bc2va.org>
33  *                using information provided by Jiun-Kuei Jung @ AVerMedia.
34  *
35  * Kurouto Sikou CX23416GYC-STVLP tested by K.Ohta <alpha292@bremen.or.jp>
36  *                using information from T.Adachi,Takeru KOMORIYA and others :-)
37  *
38  * Nagase TRANSGEAR 5000TV, Aopen VA2000MAX-STN6 and I/O data GV-MVP/RX
39  *                version by T.Adachi. Special thanks  Mr.Suzuki
40  */
41
42 #include "ivtv-driver.h"
43 #include "ivtv-version.h"
44 #include "ivtv-fileops.h"
45 #include "ivtv-i2c.h"
46 #include "ivtv-firmware.h"
47 #include "ivtv-queue.h"
48 #include "ivtv-udma.h"
49 #include "ivtv-irq.h"
50 #include "ivtv-mailbox.h"
51 #include "ivtv-streams.h"
52 #include "ivtv-ioctl.h"
53 #include "ivtv-cards.h"
54 #include "ivtv-vbi.h"
55 #include "ivtv-routing.h"
56 #include "ivtv-gpio.h"
57 #include "ivtv-yuv.h"
58
59 #include <media/tveeprom.h>
60 #include <media/saa7115.h>
61 #include <media/v4l2-chip-ident.h>
62 #include "tuner-xc2028.h"
63
64 /* var to keep track of the number of array elements in use */
65 int ivtv_cards_active = 0;
66
67 /* If you have already X v4l cards, then set this to X. This way
68    the device numbers stay matched. Example: you have a WinTV card
69    without radio and a PVR-350 with. Normally this would give a
70    video1 device together with a radio0 device for the PVR. By
71    setting this to 1 you ensure that radio0 is now also radio1. */
72 int ivtv_first_minor = 0;
73
74 /* Master variable for all ivtv info */
75 struct ivtv *ivtv_cards[IVTV_MAX_CARDS];
76
77 /* Protects ivtv_cards_active */
78 DEFINE_SPINLOCK(ivtv_cards_lock);
79
80 /* add your revision and whatnot here */
81 static struct pci_device_id ivtv_pci_tbl[] __devinitdata = {
82         {PCI_VENDOR_ID_ICOMP, PCI_DEVICE_ID_IVTV15,
83          PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
84         {PCI_VENDOR_ID_ICOMP, PCI_DEVICE_ID_IVTV16,
85          PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
86         {0,}
87 };
88
89 MODULE_DEVICE_TABLE(pci,ivtv_pci_tbl);
90
91 /* Parameter declarations */
92 static int cardtype[IVTV_MAX_CARDS];
93 static int tuner[IVTV_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
94                                      -1, -1, -1, -1, -1, -1, -1, -1,
95                                      -1, -1, -1, -1, -1, -1, -1, -1,
96                                      -1, -1, -1, -1, -1, -1, -1, -1 };
97 static int radio[IVTV_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
98                                      -1, -1, -1, -1, -1, -1, -1, -1,
99                                      -1, -1, -1, -1, -1, -1, -1, -1,
100                                      -1, -1, -1, -1, -1, -1, -1, -1 };
101
102 static unsigned int cardtype_c = 1;
103 static unsigned int tuner_c = 1;
104 static unsigned int radio_c = 1;
105 static char pal[] = "--";
106 static char secam[] = "--";
107 static char ntsc[] = "-";
108
109 /* Buffers */
110
111 /* DMA Buffers, Default size in MB allocated */
112 #define IVTV_DEFAULT_ENC_MPG_BUFFERS 4
113 #define IVTV_DEFAULT_ENC_YUV_BUFFERS 2
114 #define IVTV_DEFAULT_ENC_VBI_BUFFERS 1
115 /* Exception: size in kB for this stream (MB is overkill) */
116 #define IVTV_DEFAULT_ENC_PCM_BUFFERS 320
117 #define IVTV_DEFAULT_DEC_MPG_BUFFERS 1
118 #define IVTV_DEFAULT_DEC_YUV_BUFFERS 1
119 /* Exception: size in kB for this stream (MB is way overkill) */
120 #define IVTV_DEFAULT_DEC_VBI_BUFFERS 64
121
122 static int enc_mpg_buffers = IVTV_DEFAULT_ENC_MPG_BUFFERS;
123 static int enc_yuv_buffers = IVTV_DEFAULT_ENC_YUV_BUFFERS;
124 static int enc_vbi_buffers = IVTV_DEFAULT_ENC_VBI_BUFFERS;
125 static int enc_pcm_buffers = IVTV_DEFAULT_ENC_PCM_BUFFERS;
126 static int dec_mpg_buffers = IVTV_DEFAULT_DEC_MPG_BUFFERS;
127 static int dec_yuv_buffers = IVTV_DEFAULT_DEC_YUV_BUFFERS;
128 static int dec_vbi_buffers = IVTV_DEFAULT_DEC_VBI_BUFFERS;
129
130 static int ivtv_yuv_mode = 0;
131 static int ivtv_yuv_threshold=-1;
132 static int ivtv_pci_latency = 1;
133
134 int ivtv_debug = 0;
135
136 static int newi2c = -1;
137
138 module_param_array(tuner, int, &tuner_c, 0644);
139 module_param_array(radio, bool, &radio_c, 0644);
140 module_param_array(cardtype, int, &cardtype_c, 0644);
141 module_param_string(pal, pal, sizeof(pal), 0644);
142 module_param_string(secam, secam, sizeof(secam), 0644);
143 module_param_string(ntsc, ntsc, sizeof(ntsc), 0644);
144 module_param_named(debug,ivtv_debug, int, 0644);
145 module_param(ivtv_pci_latency, int, 0644);
146 module_param(ivtv_yuv_mode, int, 0644);
147 module_param(ivtv_yuv_threshold, int, 0644);
148 module_param(ivtv_first_minor, int, 0644);
149
150 module_param(enc_mpg_buffers, int, 0644);
151 module_param(enc_yuv_buffers, int, 0644);
152 module_param(enc_vbi_buffers, int, 0644);
153 module_param(enc_pcm_buffers, int, 0644);
154 module_param(dec_mpg_buffers, int, 0644);
155 module_param(dec_yuv_buffers, int, 0644);
156 module_param(dec_vbi_buffers, int, 0644);
157
158 module_param(newi2c, int, 0644);
159
160 MODULE_PARM_DESC(tuner, "Tuner type selection,\n"
161                         "\t\t\tsee tuner.h for values");
162 MODULE_PARM_DESC(radio,
163                  "Enable or disable the radio. Use only if autodetection\n"
164                  "\t\t\tfails. 0 = disable, 1 = enable");
165 MODULE_PARM_DESC(cardtype,
166                  "Only use this option if your card is not detected properly.\n"
167                  "\t\tSpecify card type:\n"
168                  "\t\t\t 1 = WinTV PVR 250\n"
169                  "\t\t\t 2 = WinTV PVR 350\n"
170                  "\t\t\t 3 = WinTV PVR-150 or PVR-500\n"
171                  "\t\t\t 4 = AVerMedia M179\n"
172                  "\t\t\t 5 = YUAN MPG600/Kuroutoshikou iTVC16-STVLP\n"
173                  "\t\t\t 6 = YUAN MPG160/Kuroutoshikou iTVC15-STVLP\n"
174                  "\t\t\t 7 = YUAN PG600/DIAMONDMM PVR-550 (CX Falcon 2)\n"
175                  "\t\t\t 8 = Adaptec AVC-2410\n"
176                  "\t\t\t 9 = Adaptec AVC-2010\n"
177                  "\t\t\t10 = NAGASE TRANSGEAR 5000TV\n"
178                  "\t\t\t11 = AOpen VA2000MAX-STN6\n"
179                  "\t\t\t12 = YUAN MPG600GR/Kuroutoshikou CX23416GYC-STVLP\n"
180                  "\t\t\t13 = I/O Data GV-MVP/RX\n"
181                  "\t\t\t14 = I/O Data GV-MVP/RX2E\n"
182                  "\t\t\t15 = GOTVIEW PCI DVD\n"
183                  "\t\t\t16 = GOTVIEW PCI DVD2 Deluxe\n"
184                  "\t\t\t17 = Yuan MPC622\n"
185                  "\t\t\t18 = Digital Cowboy DCT-MTVP1\n"
186                  "\t\t\t19 = Yuan PG600V2/GotView PCI DVD Lite\n"
187                  "\t\t\t20 = Club3D ZAP-TV1x01\n"
188                  "\t\t\t21 = AverTV MCE 116 Plus\n"
189                  "\t\t\t22 = ASUS Falcon2\n"
190                  "\t\t\t23 = AverMedia PVR-150 Plus\n"
191                  "\t\t\t24 = AverMedia EZMaker PCI Deluxe\n"
192                  "\t\t\t 0 = Autodetect (default)\n"
193                  "\t\t\t-1 = Ignore this card\n\t\t");
194 MODULE_PARM_DESC(pal, "Set PAL standard: B, G, H, D, K, I, M, N, Nc, 60");
195 MODULE_PARM_DESC(secam, "Set SECAM standard: B, G, H, D, K, L, LC");
196 MODULE_PARM_DESC(ntsc, "Set NTSC standard: M, J, K");
197 MODULE_PARM_DESC(debug,
198                  "Debug level (bitmask). Default: 0\n"
199                  "\t\t\t   1/0x0001: warning\n"
200                  "\t\t\t   2/0x0002: info\n"
201                  "\t\t\t   4/0x0004: mailbox\n"
202                  "\t\t\t   8/0x0008: ioctl\n"
203                  "\t\t\t  16/0x0010: file\n"
204                  "\t\t\t  32/0x0020: dma\n"
205                  "\t\t\t  64/0x0040: irq\n"
206                  "\t\t\t 128/0x0080: decoder\n"
207                  "\t\t\t 256/0x0100: yuv\n"
208                  "\t\t\t 512/0x0200: i2c\n"
209                  "\t\t\t1024/0x0400: high volume\n");
210 MODULE_PARM_DESC(ivtv_pci_latency,
211                  "Change the PCI latency to 64 if lower: 0 = No, 1 = Yes,\n"
212                  "\t\t\tDefault: Yes");
213 MODULE_PARM_DESC(ivtv_yuv_mode,
214                  "Specify the yuv playback mode:\n"
215                  "\t\t\t0 = interlaced\n\t\t\t1 = progressive\n\t\t\t2 = auto\n"
216                  "\t\t\tDefault: 0 (interlaced)");
217 MODULE_PARM_DESC(ivtv_yuv_threshold,
218                  "If ivtv_yuv_mode is 2 (auto) then playback content as\n\t\tprogressive if src height <= ivtv_yuvthreshold\n"
219                  "\t\t\tDefault: 480");;
220 MODULE_PARM_DESC(enc_mpg_buffers,
221                  "Encoder MPG Buffers (in MB)\n"
222                  "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_MPG_BUFFERS));
223 MODULE_PARM_DESC(enc_yuv_buffers,
224                  "Encoder YUV Buffers (in MB)\n"
225                  "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_YUV_BUFFERS));
226 MODULE_PARM_DESC(enc_vbi_buffers,
227                  "Encoder VBI Buffers (in MB)\n"
228                  "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_VBI_BUFFERS));
229 MODULE_PARM_DESC(enc_pcm_buffers,
230                  "Encoder PCM buffers (in kB)\n"
231                  "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_PCM_BUFFERS));
232 MODULE_PARM_DESC(dec_mpg_buffers,
233                  "Decoder MPG buffers (in MB)\n"
234                  "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_MPG_BUFFERS));
235 MODULE_PARM_DESC(dec_yuv_buffers,
236                  "Decoder YUV buffers (in MB)\n"
237                  "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_YUV_BUFFERS));
238 MODULE_PARM_DESC(dec_vbi_buffers,
239                  "Decoder VBI buffers (in kB)\n"
240                  "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_VBI_BUFFERS));
241 MODULE_PARM_DESC(newi2c,
242                  "Use new I2C implementation\n"
243                  "\t\t\t-1 is autodetect, 0 is off, 1 is on\n"
244                  "\t\t\tDefault is autodetect");
245
246 MODULE_PARM_DESC(ivtv_first_minor, "Set minor assigned to first card");
247
248 MODULE_AUTHOR("Kevin Thayer, Chris Kennedy, Hans Verkuil");
249 MODULE_DESCRIPTION("CX23415/CX23416 driver");
250 MODULE_SUPPORTED_DEVICE
251     ("CX23415/CX23416 MPEG2 encoder (WinTV PVR-150/250/350/500,\n"
252                 "\t\t\tYuan MPG series and similar)");
253 MODULE_LICENSE("GPL");
254
255 MODULE_VERSION(IVTV_VERSION);
256
257 void ivtv_clear_irq_mask(struct ivtv *itv, u32 mask)
258 {
259         itv->irqmask &= ~mask;
260         write_reg_sync(itv->irqmask, IVTV_REG_IRQMASK);
261 }
262
263 void ivtv_set_irq_mask(struct ivtv *itv, u32 mask)
264 {
265         itv->irqmask |= mask;
266         write_reg_sync(itv->irqmask, IVTV_REG_IRQMASK);
267 }
268
269 int ivtv_set_output_mode(struct ivtv *itv, int mode)
270 {
271     int old_mode;
272
273     spin_lock(&itv->lock);
274     old_mode = itv->output_mode;
275     if (old_mode == 0)
276         itv->output_mode = old_mode = mode;
277     spin_unlock(&itv->lock);
278     return old_mode;
279 }
280
281 struct ivtv_stream *ivtv_get_output_stream(struct ivtv *itv)
282 {
283         switch (itv->output_mode) {
284         case OUT_MPG:
285                 return &itv->streams[IVTV_DEC_STREAM_TYPE_MPG];
286         case OUT_YUV:
287                 return &itv->streams[IVTV_DEC_STREAM_TYPE_YUV];
288         default:
289                 return NULL;
290         }
291 }
292
293 int ivtv_waitq(wait_queue_head_t *waitq)
294 {
295         DEFINE_WAIT(wait);
296
297         prepare_to_wait(waitq, &wait, TASK_INTERRUPTIBLE);
298         schedule();
299         finish_wait(waitq, &wait);
300         return signal_pending(current) ? -EINTR : 0;
301 }
302
303 /* Generic utility functions */
304 int ivtv_msleep_timeout(unsigned int msecs, int intr)
305 {
306         int ret;
307         int timeout = msecs_to_jiffies(msecs);
308
309         do {
310                 set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
311                 timeout = schedule_timeout(timeout);
312                 if (intr && (ret = signal_pending(current)))
313                         return ret;
314         } while (timeout);
315         return 0;
316 }
317
318 /* Release ioremapped memory */
319 static void ivtv_iounmap(struct ivtv *itv)
320 {
321         if (itv == NULL)
322                 return;
323
324         /* Release registers memory */
325         if (itv->reg_mem != NULL) {
326                 IVTV_DEBUG_INFO("releasing reg_mem\n");
327                 iounmap(itv->reg_mem);
328                 itv->reg_mem = NULL;
329         }
330         /* Release io memory */
331         if (itv->has_cx23415 && itv->dec_mem != NULL) {
332                 IVTV_DEBUG_INFO("releasing dec_mem\n");
333                 iounmap(itv->dec_mem);
334         }
335         itv->dec_mem = NULL;
336
337         /* Release io memory */
338         if (itv->enc_mem != NULL) {
339                 IVTV_DEBUG_INFO("releasing enc_mem\n");
340                 iounmap(itv->enc_mem);
341                 itv->enc_mem = NULL;
342         }
343 }
344
345 /* Hauppauge card? get values from tveeprom */
346 void ivtv_read_eeprom(struct ivtv *itv, struct tveeprom *tv)
347 {
348         u8 eedata[256];
349
350         itv->i2c_client.addr = 0xA0 >> 1;
351         tveeprom_read(&itv->i2c_client, eedata, sizeof(eedata));
352         tveeprom_hauppauge_analog(&itv->i2c_client, tv, eedata);
353 }
354
355 static void ivtv_process_eeprom(struct ivtv *itv)
356 {
357         struct tveeprom tv;
358         int pci_slot = PCI_SLOT(itv->dev->devfn);
359
360         ivtv_read_eeprom(itv, &tv);
361
362         /* Many thanks to Steven Toth from Hauppauge for providing the
363            model numbers */
364         switch (tv.model) {
365                 /* In a few cases the PCI subsystem IDs do not correctly
366                    identify the card. A better method is to check the
367                    model number from the eeprom instead. */
368                 case 30012 ... 30039:  /* Low profile PVR250 */
369                 case 32000 ... 32999:
370                 case 48000 ... 48099:  /* 48??? range are PVR250s with a cx23415 */
371                 case 48400 ... 48599:
372                         itv->card = ivtv_get_card(IVTV_CARD_PVR_250);
373                         break;
374                 case 48100 ... 48399:
375                 case 48600 ... 48999:
376                         itv->card = ivtv_get_card(IVTV_CARD_PVR_350);
377                         break;
378                 case 23000 ... 23999:  /* PVR500 */
379                 case 25000 ... 25999:  /* Low profile PVR150 */
380                 case 26000 ... 26999:  /* Regular PVR150 */
381                         itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
382                         break;
383                 case 0:
384                         IVTV_ERR("Invalid EEPROM\n");
385                         return;
386                 default:
387                         IVTV_ERR("Unknown model %d, defaulting to PVR-150\n", tv.model);
388                         itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
389                         break;
390         }
391
392         switch (tv.model) {
393                 /* Old style PVR350 (with an saa7114) uses this input for
394                    the tuner. */
395                 case 48254:
396                         itv->card = ivtv_get_card(IVTV_CARD_PVR_350_V1);
397                         break;
398                 default:
399                         break;
400         }
401
402         itv->v4l2_cap = itv->card->v4l2_capabilities;
403         itv->card_name = itv->card->name;
404         itv->card_i2c = itv->card->i2c;
405
406         /* If this is a PVR500 then it should be possible to detect whether it is the
407            first or second unit by looking at the subsystem device ID: is bit 4 is
408            set, then it is the second unit (according to info from Hauppauge).
409
410            However, while this works for most cards, I have seen a few PVR500 cards
411            where both units have the same subsystem ID.
412
413            So instead I look at the reported 'PCI slot' (which is the slot on the PVR500
414            PCI bridge) and if it is 8, then it is assumed to be the first unit, otherwise
415            it is the second unit. It is possible that it is a different slot when ivtv is
416            used in Xen, in that case I ignore this card here. The worst that can happen
417            is that the card presents itself with a non-working radio device.
418
419            This detection is needed since the eeprom reports incorrectly that a radio is
420            present on the second unit. */
421         if (tv.model / 1000 == 23) {
422                 static const struct ivtv_card_tuner_i2c ivtv_i2c_radio = {
423                         .radio = { 0x60, I2C_CLIENT_END },
424                         .demod = { 0x43, I2C_CLIENT_END },
425                         .tv = { 0x61, I2C_CLIENT_END },
426                 };
427
428                 itv->card_name = "WinTV PVR 500";
429                 itv->card_i2c = &ivtv_i2c_radio;
430                 if (pci_slot == 8 || pci_slot == 9) {
431                         int is_first = (pci_slot & 1) == 0;
432
433                         itv->card_name = is_first ? "WinTV PVR 500 (unit #1)" :
434                                                     "WinTV PVR 500 (unit #2)";
435                         if (!is_first) {
436                                 IVTV_INFO("Correcting tveeprom data: no radio present on second unit\n");
437                                 tv.has_radio = 0;
438                         }
439                 }
440         }
441         IVTV_INFO("Autodetected %s\n", itv->card_name);
442
443         switch (tv.tuner_hauppauge_model) {
444                 case 85:
445                 case 99:
446                 case 112:
447                         itv->pvr150_workaround = 1;
448                         break;
449                 default:
450                         break;
451         }
452         if (tv.tuner_type == TUNER_ABSENT)
453                 IVTV_ERR("tveeprom cannot autodetect tuner!");
454
455         if (itv->options.tuner == -1)
456                 itv->options.tuner = tv.tuner_type;
457         if (itv->options.radio == -1)
458                 itv->options.radio = (tv.has_radio != 0);
459         /* only enable newi2c if an IR blaster is present */
460         /* FIXME: for 2.6.20 the test against 2 should be removed */
461         if (itv->options.newi2c == -1 && tv.has_ir != -1 && tv.has_ir != 2) {
462                 itv->options.newi2c = (tv.has_ir & 2) ? 1 : 0;
463                 if (itv->options.newi2c) {
464                     IVTV_INFO("Reopen i2c bus for IR-blaster support\n");
465                     exit_ivtv_i2c(itv);
466                     init_ivtv_i2c(itv);
467                 }
468         }
469
470         if (itv->std != 0)
471                 /* user specified tuner standard */
472                 return;
473
474         /* autodetect tuner standard */
475         if (tv.tuner_formats & V4L2_STD_PAL) {
476                 IVTV_DEBUG_INFO("PAL tuner detected\n");
477                 itv->std |= V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
478         } else if (tv.tuner_formats & V4L2_STD_NTSC) {
479                 IVTV_DEBUG_INFO("NTSC tuner detected\n");
480                 itv->std |= V4L2_STD_NTSC_M;
481         } else if (tv.tuner_formats & V4L2_STD_SECAM) {
482                 IVTV_DEBUG_INFO("SECAM tuner detected\n");
483                 itv->std |= V4L2_STD_SECAM_L;
484         } else {
485                 IVTV_INFO("No tuner detected, default to NTSC-M\n");
486                 itv->std |= V4L2_STD_NTSC_M;
487         }
488 }
489
490 static v4l2_std_id ivtv_parse_std(struct ivtv *itv)
491 {
492         switch (pal[0]) {
493                 case '6':
494                         return V4L2_STD_PAL_60;
495                 case 'b':
496                 case 'B':
497                 case 'g':
498                 case 'G':
499                         return V4L2_STD_PAL_BG;
500                 case 'h':
501                 case 'H':
502                         return V4L2_STD_PAL_H;
503                 case 'n':
504                 case 'N':
505                         if (pal[1] == 'c' || pal[1] == 'C')
506                                 return V4L2_STD_PAL_Nc;
507                         return V4L2_STD_PAL_N;
508                 case 'i':
509                 case 'I':
510                         return V4L2_STD_PAL_I;
511                 case 'd':
512                 case 'D':
513                 case 'k':
514                 case 'K':
515                         return V4L2_STD_PAL_DK;
516                 case 'M':
517                 case 'm':
518                         return V4L2_STD_PAL_M;
519                 case '-':
520                         break;
521                 default:
522                         IVTV_WARN("pal= argument not recognised\n");
523                         return 0;
524         }
525
526         switch (secam[0]) {
527                 case 'b':
528                 case 'B':
529                 case 'g':
530                 case 'G':
531                 case 'h':
532                 case 'H':
533                         return V4L2_STD_SECAM_B | V4L2_STD_SECAM_G | V4L2_STD_SECAM_H;
534                 case 'd':
535                 case 'D':
536                 case 'k':
537                 case 'K':
538                         return V4L2_STD_SECAM_DK;
539                 case 'l':
540                 case 'L':
541                         if (secam[1] == 'C' || secam[1] == 'c')
542                                 return V4L2_STD_SECAM_LC;
543                         return V4L2_STD_SECAM_L;
544                 case '-':
545                         break;
546                 default:
547                         IVTV_WARN("secam= argument not recognised\n");
548                         return 0;
549         }
550
551         switch (ntsc[0]) {
552                 case 'm':
553                 case 'M':
554                         return V4L2_STD_NTSC_M;
555                 case 'j':
556                 case 'J':
557                         return V4L2_STD_NTSC_M_JP;
558                 case 'k':
559                 case 'K':
560                         return V4L2_STD_NTSC_M_KR;
561                 case '-':
562                         break;
563                 default:
564                         IVTV_WARN("ntsc= argument not recognised\n");
565                         return 0;
566         }
567
568         /* no match found */
569         return 0;
570 }
571
572 static void ivtv_process_options(struct ivtv *itv)
573 {
574         const char *chipname;
575         int i, j;
576
577         itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_MPG] = enc_mpg_buffers * 1024;
578         itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_YUV] = enc_yuv_buffers * 1024;
579         itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_VBI] = enc_vbi_buffers * 1024;
580         itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_PCM] = enc_pcm_buffers;
581         itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_MPG] = dec_mpg_buffers * 1024;
582         itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_YUV] = dec_yuv_buffers * 1024;
583         itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_VBI] = dec_vbi_buffers;
584         itv->options.cardtype = cardtype[itv->num];
585         itv->options.tuner = tuner[itv->num];
586         itv->options.radio = radio[itv->num];
587         itv->options.newi2c = newi2c;
588
589         itv->std = ivtv_parse_std(itv);
590         itv->has_cx23415 = (itv->dev->device == PCI_DEVICE_ID_IVTV15);
591         chipname = itv->has_cx23415 ? "cx23415" : "cx23416";
592         if (itv->options.cardtype == -1) {
593                 IVTV_INFO("Ignore card (detected %s based chip)\n", chipname);
594                 return;
595         }
596         if ((itv->card = ivtv_get_card(itv->options.cardtype - 1))) {
597                 IVTV_INFO("User specified %s card (detected %s based chip)\n",
598                                 itv->card->name, chipname);
599         } else if (itv->options.cardtype != 0) {
600                 IVTV_ERR("Unknown user specified type, trying to autodetect card\n");
601         }
602         if (itv->card == NULL) {
603                 if (itv->dev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE ||
604                     itv->dev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE_ALT1 ||
605                     itv->dev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE_ALT2) {
606                         itv->card = ivtv_get_card(itv->has_cx23415 ? IVTV_CARD_PVR_350 : IVTV_CARD_PVR_150);
607                         IVTV_INFO("Autodetected Hauppauge card (%s based)\n",
608                                         chipname);
609                 }
610         }
611         if (itv->card == NULL) {
612                 for (i = 0; (itv->card = ivtv_get_card(i)); i++) {
613                         if (itv->card->pci_list == NULL)
614                                 continue;
615                         for (j = 0; itv->card->pci_list[j].device; j++) {
616                                 if (itv->dev->device !=
617                                     itv->card->pci_list[j].device)
618                                         continue;
619                                 if (itv->dev->subsystem_vendor !=
620                                     itv->card->pci_list[j].subsystem_vendor)
621                                         continue;
622                                 if (itv->dev->subsystem_device !=
623                                     itv->card->pci_list[j].subsystem_device)
624                                         continue;
625                                 IVTV_INFO("Autodetected %s card (%s based)\n",
626                                                 itv->card->name, chipname);
627                                 goto done;
628                         }
629                 }
630         }
631 done:
632
633         if (itv->card == NULL) {
634                 itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
635                 IVTV_ERR("Unknown card: vendor/device: %04x/%04x\n",
636                      itv->dev->vendor, itv->dev->device);
637                 IVTV_ERR("              subsystem vendor/device: %04x/%04x\n",
638                      itv->dev->subsystem_vendor, itv->dev->subsystem_device);
639                 IVTV_ERR("              %s based\n", chipname);
640                 IVTV_ERR("Defaulting to %s card\n", itv->card->name);
641                 IVTV_ERR("Please mail the vendor/device and subsystem vendor/device IDs and what kind of\n");
642                 IVTV_ERR("card you have to the ivtv-devel mailinglist (www.ivtvdriver.org)\n");
643                 IVTV_ERR("Prefix your subject line with [UNKNOWN IVTV CARD].\n");
644         }
645         itv->v4l2_cap = itv->card->v4l2_capabilities;
646         itv->card_name = itv->card->name;
647         itv->card_i2c = itv->card->i2c;
648 }
649
650 /* Precondition: the ivtv structure has been memset to 0. Only
651    the dev and num fields have been filled in.
652    No assumptions on the card type may be made here (see ivtv_init_struct2
653    for that).
654  */
655 static int __devinit ivtv_init_struct1(struct ivtv *itv)
656 {
657         itv->base_addr = pci_resource_start(itv->dev, 0);
658         itv->enc_mbox.max_mbox = 2; /* the encoder has 3 mailboxes (0-2) */
659         itv->dec_mbox.max_mbox = 1; /* the decoder has 2 mailboxes (0-1) */
660
661         mutex_init(&itv->serialize_lock);
662         mutex_init(&itv->i2c_bus_lock);
663         mutex_init(&itv->udma.lock);
664
665         spin_lock_init(&itv->lock);
666         spin_lock_init(&itv->dma_reg_lock);
667
668         itv->irq_work_queues = create_workqueue(itv->name);
669         if (itv->irq_work_queues == NULL) {
670                 IVTV_ERR("Could not create ivtv workqueue\n");
671                 return -1;
672         }
673
674         INIT_WORK(&itv->irq_work_queue, ivtv_irq_work_handler);
675
676         /* start counting open_id at 1 */
677         itv->open_id = 1;
678
679         /* Initial settings */
680         cx2341x_fill_defaults(&itv->params);
681         itv->params.port = CX2341X_PORT_MEMORY;
682         itv->params.capabilities = CX2341X_CAP_HAS_SLICED_VBI;
683         init_waitqueue_head(&itv->eos_waitq);
684         init_waitqueue_head(&itv->event_waitq);
685         init_waitqueue_head(&itv->vsync_waitq);
686         init_waitqueue_head(&itv->dma_waitq);
687         init_timer(&itv->dma_timer);
688         itv->dma_timer.function = ivtv_unfinished_dma;
689         itv->dma_timer.data = (unsigned long)itv;
690
691         itv->cur_dma_stream = -1;
692         itv->cur_pio_stream = -1;
693         itv->audio_stereo_mode = AUDIO_STEREO;
694         itv->audio_bilingual_mode = AUDIO_MONO_LEFT;
695
696         /* Ctrls */
697         itv->speed = 1000;
698
699         /* VBI */
700         itv->vbi.in.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
701         itv->vbi.sliced_in = &itv->vbi.in.fmt.sliced;
702
703         /* OSD */
704         itv->osd_global_alpha_state = 1;
705         itv->osd_global_alpha = 255;
706
707         /* YUV */
708         atomic_set(&itv->yuv_info.next_dma_frame, -1);
709         itv->yuv_info.lace_mode = ivtv_yuv_mode;
710         itv->yuv_info.lace_threshold = ivtv_yuv_threshold;
711         itv->yuv_info.max_frames_buffered = 3;
712         return 0;
713 }
714
715 /* Second initialization part. Here the card type has been
716    autodetected. */
717 static void __devinit ivtv_init_struct2(struct ivtv *itv)
718 {
719         int i;
720
721         for (i = 0; i < IVTV_CARD_MAX_VIDEO_INPUTS; i++)
722                 if (itv->card->video_inputs[i].video_type == 0)
723                         break;
724         itv->nof_inputs = i;
725         for (i = 0; i < IVTV_CARD_MAX_AUDIO_INPUTS; i++)
726                 if (itv->card->audio_inputs[i].audio_type == 0)
727                         break;
728         itv->nof_audio_inputs = i;
729
730         if (itv->card->hw_all & IVTV_HW_CX25840) {
731                 itv->vbi.sliced_size = 288;  /* multiple of 16, real size = 284 */
732         } else {
733                 itv->vbi.sliced_size = 64;   /* multiple of 16, real size = 52 */
734         }
735
736         /* Find tuner input */
737         for (i = 0; i < itv->nof_inputs; i++) {
738                 if (itv->card->video_inputs[i].video_type ==
739                                 IVTV_CARD_INPUT_VID_TUNER)
740                         break;
741         }
742         if (i == itv->nof_inputs)
743                 i = 0;
744         itv->active_input = i;
745         itv->audio_input = itv->card->video_inputs[i].audio_index;
746         if (itv->card->hw_all & IVTV_HW_CX25840)
747                 itv->video_dec_func = ivtv_cx25840;
748         else if (itv->card->hw_all & IVTV_HW_SAA717X)
749                 itv->video_dec_func = ivtv_saa717x;
750         else
751                 itv->video_dec_func = ivtv_saa7115;
752 }
753
754 static int ivtv_setup_pci(struct ivtv *itv, struct pci_dev *dev,
755                           const struct pci_device_id *pci_id)
756 {
757         u16 cmd;
758         u8 card_rev;
759         unsigned char pci_latency;
760
761         IVTV_DEBUG_INFO("Enabling pci device\n");
762
763         if (pci_enable_device(dev)) {
764                 IVTV_ERR("Can't enable device %d!\n", itv->num);
765                 return -EIO;
766         }
767         if (pci_set_dma_mask(dev, 0xffffffff)) {
768                 IVTV_ERR("No suitable DMA available on card %d.\n", itv->num);
769                 return -EIO;
770         }
771         if (!request_mem_region(itv->base_addr, IVTV_ENCODER_SIZE, "ivtv encoder")) {
772                 IVTV_ERR("Cannot request encoder memory region on card %d.\n", itv->num);
773                 return -EIO;
774         }
775
776         if (!request_mem_region(itv->base_addr + IVTV_REG_OFFSET,
777                                 IVTV_REG_SIZE, "ivtv registers")) {
778                 IVTV_ERR("Cannot request register memory region on card %d.\n", itv->num);
779                 release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
780                 return -EIO;
781         }
782
783         if (itv->has_cx23415 &&
784             !request_mem_region(itv->base_addr + IVTV_DECODER_OFFSET,
785                                 IVTV_DECODER_SIZE, "ivtv decoder")) {
786                 IVTV_ERR("Cannot request decoder memory region on card %d.\n", itv->num);
787                 release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
788                 release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
789                 return -EIO;
790         }
791
792         /* Check for bus mastering */
793         pci_read_config_word(dev, PCI_COMMAND, &cmd);
794         if (!(cmd & PCI_COMMAND_MASTER)) {
795                 IVTV_DEBUG_INFO("Attempting to enable Bus Mastering\n");
796                 pci_set_master(dev);
797                 pci_read_config_word(dev, PCI_COMMAND, &cmd);
798                 if (!(cmd & PCI_COMMAND_MASTER)) {
799                         IVTV_ERR("Bus Mastering is not enabled\n");
800                         return -ENXIO;
801                 }
802         }
803         IVTV_DEBUG_INFO("Bus Mastering Enabled.\n");
804
805         pci_read_config_byte(dev, PCI_CLASS_REVISION, &card_rev);
806         pci_read_config_byte(dev, PCI_LATENCY_TIMER, &pci_latency);
807
808         if (pci_latency < 64 && ivtv_pci_latency) {
809                 IVTV_INFO("Unreasonably low latency timer, "
810                                "setting to 64 (was %d)\n", pci_latency);
811                 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
812                 pci_read_config_byte(dev, PCI_LATENCY_TIMER, &pci_latency);
813         }
814         /* This config space value relates to DMA latencies. The
815            default value 0x8080 is too low however and will lead
816            to DMA errors. 0xffff is the max value which solves
817            these problems. */
818         pci_write_config_dword(dev, 0x40, 0xffff);
819
820         IVTV_DEBUG_INFO("%d (rev %d) at %02x:%02x.%x, "
821                    "irq: %d, latency: %d, memory: 0x%lx\n",
822                    itv->dev->device, card_rev, dev->bus->number,
823                    PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn),
824                    itv->dev->irq, pci_latency, (unsigned long)itv->base_addr);
825
826         return 0;
827 }
828
829 static u32 ivtv_request_module(struct ivtv *itv, u32 hw,
830                 const char *name, u32 id)
831 {
832         if ((hw & id) == 0)
833                 return hw;
834         if (request_module(name) != 0) {
835                 IVTV_ERR("Failed to load module %s\n", name);
836                 return hw & ~id;
837         }
838         IVTV_DEBUG_INFO("Loaded module %s\n", name);
839         return hw;
840 }
841
842 static void ivtv_load_and_init_modules(struct ivtv *itv)
843 {
844         u32 hw = itv->card->hw_all;
845         unsigned i;
846
847         /* load modules */
848 #ifndef CONFIG_VIDEO_TUNER
849         hw = ivtv_request_module(itv, hw, "tuner", IVTV_HW_TUNER);
850 #endif
851 #ifndef CONFIG_VIDEO_CX25840
852         hw = ivtv_request_module(itv, hw, "cx25840", IVTV_HW_CX25840);
853 #endif
854 #ifndef CONFIG_VIDEO_SAA711X
855         hw = ivtv_request_module(itv, hw, "saa7115", IVTV_HW_SAA711X);
856 #endif
857 #ifndef CONFIG_VIDEO_SAA7127
858         hw = ivtv_request_module(itv, hw, "saa7127", IVTV_HW_SAA7127);
859 #endif
860         hw = ivtv_request_module(itv, hw, "saa717x", IVTV_HW_SAA717X);
861 #ifndef CONFIG_VIDEO_UPD64031A
862         hw = ivtv_request_module(itv, hw, "upd64031a", IVTV_HW_UPD64031A);
863 #endif
864 #ifndef CONFIG_VIDEO_UPD64083
865         hw = ivtv_request_module(itv, hw, "upd64083", IVTV_HW_UPD6408X);
866 #endif
867 #ifndef CONFIG_VIDEO_MSP3400
868         hw = ivtv_request_module(itv, hw, "msp3400", IVTV_HW_MSP34XX);
869 #endif
870 #ifndef CONFIG_VIDEO_VP27SMPX
871         hw = ivtv_request_module(itv, hw, "vp27smpx", IVTV_HW_VP27SMPX);
872 #endif
873 #ifndef CONFIG_VIDEO_WM8775
874         hw = ivtv_request_module(itv, hw, "wm8775", IVTV_HW_WM8775);
875 #endif
876 #ifndef CONFIG_VIDEO_WM8739
877         hw = ivtv_request_module(itv, hw, "wm8739", IVTV_HW_WM8739);
878 #endif
879 #ifndef CONFIG_VIDEO_CS53L32A
880         hw = ivtv_request_module(itv, hw, "cs53l32a", IVTV_HW_CS53L32A);
881 #endif
882 #ifndef CONFIG_VIDEO_M52790
883         hw = ivtv_request_module(itv, hw, "m52790", IVTV_HW_M52790);
884 #endif
885
886         /* check which i2c devices are actually found */
887         for (i = 0; i < 32; i++) {
888                 u32 device = 1 << i;
889
890                 if (!(device & hw))
891                         continue;
892                 if (device == IVTV_HW_GPIO || device == IVTV_HW_TVEEPROM) {
893                         /* GPIO and TVEEPROM do not use i2c probing */
894                         itv->hw_flags |= device;
895                         continue;
896                 }
897                 ivtv_i2c_register(itv, i);
898                 if (ivtv_i2c_hw_addr(itv, device) > 0)
899                         itv->hw_flags |= device;
900         }
901
902         hw = itv->hw_flags;
903
904         if (itv->card->type == IVTV_CARD_CX23416GYC) {
905                 /* Several variations of this card exist, detect which card
906                    type should be used. */
907                 if ((hw & (IVTV_HW_UPD64031A | IVTV_HW_UPD6408X)) == 0)
908                         itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGRYCS);
909                 else if ((hw & IVTV_HW_UPD64031A) == 0)
910                         itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGR);
911         }
912         else if (itv->card->type == IVTV_CARD_GV_MVPRX ||
913                  itv->card->type == IVTV_CARD_GV_MVPRX2E) {
914                 struct v4l2_crystal_freq crystal_freq;
915
916                 /* The crystal frequency of GVMVPRX is 24.576MHz */
917                 crystal_freq.freq = SAA7115_FREQ_24_576_MHZ;
918                 crystal_freq.flags = SAA7115_FREQ_FL_UCGC;
919                 itv->video_dec_func(itv, VIDIOC_INT_S_CRYSTAL_FREQ, &crystal_freq);
920         }
921
922         if (hw & IVTV_HW_CX25840) {
923                 itv->vbi.raw_decoder_line_size = 1444;
924                 itv->vbi.raw_decoder_sav_odd_field = 0x20;
925                 itv->vbi.raw_decoder_sav_even_field = 0x60;
926                 itv->vbi.sliced_decoder_line_size = 272;
927                 itv->vbi.sliced_decoder_sav_odd_field = 0xB0;
928                 itv->vbi.sliced_decoder_sav_even_field = 0xF0;
929         }
930
931         if (hw & IVTV_HW_SAA711X) {
932                 struct v4l2_chip_ident v = { V4L2_CHIP_MATCH_I2C_DRIVER, I2C_DRIVERID_SAA711X };
933
934                 /* determine the exact saa711x model */
935                 itv->hw_flags &= ~IVTV_HW_SAA711X;
936
937                 ivtv_saa7115(itv, VIDIOC_G_CHIP_IDENT, &v);
938                 if (v.ident == V4L2_IDENT_SAA7114) {
939                         itv->hw_flags |= IVTV_HW_SAA7114;
940                         /* VBI is not yet supported by the saa7114 driver. */
941                         itv->v4l2_cap &= ~(V4L2_CAP_SLICED_VBI_CAPTURE|V4L2_CAP_VBI_CAPTURE);
942                 }
943                 else {
944                         itv->hw_flags |= IVTV_HW_SAA7115;
945                 }
946                 itv->vbi.raw_decoder_line_size = 1443;
947                 itv->vbi.raw_decoder_sav_odd_field = 0x25;
948                 itv->vbi.raw_decoder_sav_even_field = 0x62;
949                 itv->vbi.sliced_decoder_line_size = 51;
950                 itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
951                 itv->vbi.sliced_decoder_sav_even_field = 0xEC;
952         }
953
954         if (hw & IVTV_HW_SAA717X) {
955                 itv->vbi.raw_decoder_line_size = 1443;
956                 itv->vbi.raw_decoder_sav_odd_field = 0x25;
957                 itv->vbi.raw_decoder_sav_even_field = 0x62;
958                 itv->vbi.sliced_decoder_line_size = 51;
959                 itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
960                 itv->vbi.sliced_decoder_sav_even_field = 0xEC;
961         }
962 }
963
964 static int __devinit ivtv_probe(struct pci_dev *dev,
965                                 const struct pci_device_id *pci_id)
966 {
967         int retval = 0;
968         int vbi_buf_size;
969         struct ivtv *itv;
970
971         spin_lock(&ivtv_cards_lock);
972
973         /* Make sure we've got a place for this card */
974         if (ivtv_cards_active == IVTV_MAX_CARDS) {
975                 printk(KERN_ERR "ivtv:  Maximum number of cards detected (%d)\n",
976                               ivtv_cards_active);
977                 spin_unlock(&ivtv_cards_lock);
978                 return -ENOMEM;
979         }
980
981         itv = kzalloc(sizeof(struct ivtv), GFP_ATOMIC);
982         if (itv == NULL) {
983                 spin_unlock(&ivtv_cards_lock);
984                 return -ENOMEM;
985         }
986         ivtv_cards[ivtv_cards_active] = itv;
987         itv->dev = dev;
988         itv->num = ivtv_cards_active++;
989         snprintf(itv->name, sizeof(itv->name) - 1, "ivtv%d", itv->num);
990         IVTV_INFO("Initializing card #%d\n", itv->num);
991
992         spin_unlock(&ivtv_cards_lock);
993
994         ivtv_process_options(itv);
995         if (itv->options.cardtype == -1) {
996                 retval = -ENODEV;
997                 goto err;
998         }
999         if (ivtv_init_struct1(itv)) {
1000                 retval = -ENOMEM;
1001                 goto err;
1002         }
1003
1004         IVTV_DEBUG_INFO("base addr: 0x%08x\n", itv->base_addr);
1005
1006         /* PCI Device Setup */
1007         if ((retval = ivtv_setup_pci(itv, dev, pci_id)) != 0) {
1008                 if (retval == -EIO)
1009                         goto free_workqueue;
1010                 else if (retval == -ENXIO)
1011                         goto free_mem;
1012         }
1013         /* save itv in the pci struct for later use */
1014         pci_set_drvdata(dev, itv);
1015
1016         /* map io memory */
1017         IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
1018                    itv->base_addr + IVTV_ENCODER_OFFSET, IVTV_ENCODER_SIZE);
1019         itv->enc_mem = ioremap_nocache(itv->base_addr + IVTV_ENCODER_OFFSET,
1020                                        IVTV_ENCODER_SIZE);
1021         if (!itv->enc_mem) {
1022                 IVTV_ERR("ioremap failed, perhaps increasing __VMALLOC_RESERVE in page.h\n");
1023                 IVTV_ERR("or disabling CONFIG_HIMEM4G into the kernel would help\n");
1024                 retval = -ENOMEM;
1025                 goto free_mem;
1026         }
1027
1028         if (itv->has_cx23415) {
1029                 IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
1030                                 itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1031                 itv->dec_mem = ioremap_nocache(itv->base_addr + IVTV_DECODER_OFFSET,
1032                                 IVTV_DECODER_SIZE);
1033                 if (!itv->dec_mem) {
1034                         IVTV_ERR("ioremap failed, perhaps increasing __VMALLOC_RESERVE in page.h\n");
1035                         IVTV_ERR("or disabling CONFIG_HIMEM4G into the kernel would help\n");
1036                         retval = -ENOMEM;
1037                         goto free_mem;
1038                 }
1039         }
1040         else {
1041                 itv->dec_mem = itv->enc_mem;
1042         }
1043
1044         /* map registers memory */
1045         IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
1046                    itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1047         itv->reg_mem =
1048             ioremap_nocache(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1049         if (!itv->reg_mem) {
1050                 IVTV_ERR("ioremap failed, perhaps increasing __VMALLOC_RESERVE in page.h\n");
1051                 IVTV_ERR("or disabling CONFIG_HIMEM4G into the kernel would help\n");
1052                 retval = -ENOMEM;
1053                 goto free_io;
1054         }
1055
1056         /* Check yuv output filter table */
1057         if (itv->has_cx23415) ivtv_yuv_filter_check(itv);
1058
1059         ivtv_gpio_init(itv);
1060
1061         /* active i2c  */
1062         IVTV_DEBUG_INFO("activating i2c...\n");
1063         if (init_ivtv_i2c(itv)) {
1064                 IVTV_ERR("Could not initialize i2c\n");
1065                 goto free_io;
1066         }
1067
1068         IVTV_DEBUG_INFO("Active card count: %d.\n", ivtv_cards_active);
1069
1070         if (itv->card->hw_all & IVTV_HW_TVEEPROM) {
1071                 /* Based on the model number the cardtype may be changed.
1072                    The PCI IDs are not always reliable. */
1073                 ivtv_process_eeprom(itv);
1074         }
1075
1076         if (itv->std == 0) {
1077                 itv->std = V4L2_STD_NTSC_M;
1078         }
1079
1080         if (itv->options.tuner == -1) {
1081                 int i;
1082
1083                 for (i = 0; i < IVTV_CARD_MAX_TUNERS; i++) {
1084                         if ((itv->std & itv->card->tuners[i].std) == 0)
1085                                 continue;
1086                         itv->options.tuner = itv->card->tuners[i].tuner;
1087                         break;
1088                 }
1089         }
1090         /* if no tuner was found, then pick the first tuner in the card list */
1091         if (itv->options.tuner == -1 && itv->card->tuners[0].std) {
1092                 itv->std = itv->card->tuners[0].std;
1093                 itv->options.tuner = itv->card->tuners[0].tuner;
1094         }
1095         if (itv->options.radio == -1)
1096                 itv->options.radio = (itv->card->radio_input.audio_type != 0);
1097
1098         /* The card is now fully identified, continue with card-specific
1099            initialization. */
1100         ivtv_init_struct2(itv);
1101
1102         ivtv_load_and_init_modules(itv);
1103
1104         if (itv->std & V4L2_STD_525_60) {
1105                 itv->is_60hz = 1;
1106                 itv->is_out_60hz = 1;
1107         } else {
1108                 itv->is_50hz = 1;
1109                 itv->is_out_50hz = 1;
1110         }
1111
1112         itv->yuv_info.osd_full_w = 720;
1113         itv->yuv_info.osd_full_h = itv->is_out_50hz ? 576 : 480;
1114         itv->yuv_info.v4l2_src_w = itv->yuv_info.osd_full_w;
1115         itv->yuv_info.v4l2_src_h = itv->yuv_info.osd_full_h;
1116
1117         itv->params.video_gop_size = itv->is_60hz ? 15 : 12;
1118
1119         itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_MPG] = 0x08000;
1120         itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_PCM] = 0x01200;
1121         itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_MPG] = 0x10000;
1122         itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_YUV] = 0x10000;
1123         itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_YUV] = 0x08000;
1124
1125         /* Setup VBI Raw Size. Should be big enough to hold PAL.
1126            It is possible to switch between PAL and NTSC, so we need to
1127            take the largest size here. */
1128         /* 1456 is multiple of 16, real size = 1444 */
1129         itv->vbi.raw_size = 1456;
1130         /* We use a buffer size of 1/2 of the total size needed for a
1131            frame. This is actually very useful, since we now receive
1132            a field at a time and that makes 'compressing' the raw data
1133            down to size by stripping off the SAV codes a lot easier.
1134            Note: having two different buffer sizes prevents standard
1135            switching on the fly. We need to find a better solution... */
1136         vbi_buf_size = itv->vbi.raw_size * (itv->is_60hz ? 24 : 36) / 2;
1137         itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_VBI] = vbi_buf_size;
1138         itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_VBI] = sizeof(struct v4l2_sliced_vbi_data) * 36;
1139
1140         if (itv->options.radio > 0)
1141                 itv->v4l2_cap |= V4L2_CAP_RADIO;
1142
1143         if (itv->options.tuner > -1) {
1144                 struct tuner_setup setup;
1145
1146                 setup.addr = ADDR_UNSET;
1147                 setup.type = itv->options.tuner;
1148                 setup.mode_mask = T_ANALOG_TV;  /* matches TV tuners */
1149                 setup.tuner_callback = (setup.type == TUNER_XC2028) ?
1150                         ivtv_reset_tuner_gpio : NULL;
1151                 ivtv_call_i2c_clients(itv, TUNER_SET_TYPE_ADDR, &setup);
1152                 if (setup.type == TUNER_XC2028) {
1153                         static struct xc2028_ctrl ctrl = {
1154                                 .fname = XC2028_DEFAULT_FIRMWARE,
1155                                 .max_len = 64,
1156                         };
1157                         struct v4l2_priv_tun_config cfg = {
1158                                 .tuner = itv->options.tuner,
1159                                 .priv = &ctrl,
1160                         };
1161                         ivtv_call_i2c_clients(itv, TUNER_SET_CONFIG, &cfg);
1162                 }
1163         }
1164
1165         /* The tuner is fixed to the standard. The other inputs (e.g. S-Video)
1166            are not. */
1167         itv->tuner_std = itv->std;
1168
1169         if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1170                 ivtv_call_i2c_clients(itv, VIDIOC_INT_S_STD_OUTPUT, &itv->std);
1171         }
1172
1173         retval = ivtv_streams_setup(itv);
1174         if (retval) {
1175                 IVTV_ERR("Error %d setting up streams\n", retval);
1176                 goto free_i2c;
1177         }
1178
1179         IVTV_DEBUG_IRQ("Masking interrupts\n");
1180         /* clear interrupt mask, effectively disabling interrupts */
1181         ivtv_set_irq_mask(itv, 0xffffffff);
1182
1183         /* Register IRQ */
1184         retval = request_irq(itv->dev->irq, ivtv_irq_handler,
1185                              IRQF_SHARED | IRQF_DISABLED, itv->name, (void *)itv);
1186         if (retval) {
1187                 IVTV_ERR("Failed to register irq %d\n", retval);
1188                 goto free_streams;
1189         }
1190         retval = ivtv_streams_register(itv);
1191         if (retval) {
1192                 IVTV_ERR("Error %d registering devices\n", retval);
1193                 goto free_irq;
1194         }
1195         IVTV_INFO("Initialized card #%d: %s\n", itv->num, itv->card_name);
1196         return 0;
1197
1198       free_irq:
1199         free_irq(itv->dev->irq, (void *)itv);
1200       free_streams:
1201         ivtv_streams_cleanup(itv);
1202       free_i2c:
1203         exit_ivtv_i2c(itv);
1204       free_io:
1205         ivtv_iounmap(itv);
1206       free_mem:
1207         release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
1208         release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1209         if (itv->has_cx23415)
1210                 release_mem_region(itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1211       free_workqueue:
1212         destroy_workqueue(itv->irq_work_queues);
1213       err:
1214         if (retval == 0)
1215                 retval = -ENODEV;
1216         IVTV_ERR("Error %d on initialization\n", retval);
1217
1218         spin_lock(&ivtv_cards_lock);
1219         kfree(ivtv_cards[ivtv_cards_active]);
1220         ivtv_cards[ivtv_cards_active] = NULL;
1221         spin_unlock(&ivtv_cards_lock);
1222         return retval;
1223 }
1224
1225 int ivtv_init_on_first_open(struct ivtv *itv)
1226 {
1227         struct v4l2_frequency vf;
1228         int fw_retry_count = 3;
1229         int video_input;
1230
1231         if (test_bit(IVTV_F_I_FAILED, &itv->i_flags))
1232                 return -ENXIO;
1233
1234         if (test_and_set_bit(IVTV_F_I_INITED, &itv->i_flags))
1235                 return 0;
1236
1237         while (--fw_retry_count > 0) {
1238                 /* load firmware */
1239                 if (ivtv_firmware_init(itv) == 0)
1240                         break;
1241                 if (fw_retry_count > 1)
1242                         IVTV_WARN("Retry loading firmware\n");
1243         }
1244
1245         if (fw_retry_count == 0) {
1246                 set_bit(IVTV_F_I_FAILED, &itv->i_flags);
1247                 return -ENXIO;
1248         }
1249
1250         /* Try and get firmware versions */
1251         IVTV_DEBUG_INFO("Getting firmware version..\n");
1252         ivtv_firmware_versions(itv);
1253
1254         if (itv->card->hw_all & IVTV_HW_CX25840) {
1255                 struct v4l2_control ctrl;
1256
1257                 /* CX25840_CID_ENABLE_PVR150_WORKAROUND */
1258                 ctrl.id = V4L2_CID_PRIVATE_BASE;
1259                 ctrl.value = itv->pvr150_workaround;
1260                 itv->video_dec_func(itv, VIDIOC_S_CTRL, &ctrl);
1261         }
1262
1263         vf.tuner = 0;
1264         vf.type = V4L2_TUNER_ANALOG_TV;
1265         vf.frequency = 6400; /* the tuner 'baseline' frequency */
1266
1267         /* Set initial frequency. For PAL/SECAM broadcasts no
1268            'default' channel exists AFAIK. */
1269         if (itv->std == V4L2_STD_NTSC_M_JP) {
1270                 vf.frequency = 1460;    /* ch. 1 91250*16/1000 */
1271         }
1272         else if (itv->std & V4L2_STD_NTSC_M) {
1273                 vf.frequency = 1076;    /* ch. 4 67250*16/1000 */
1274         }
1275
1276         video_input = itv->active_input;
1277         itv->active_input++;    /* Force update of input */
1278         ivtv_v4l2_ioctls(itv, NULL, VIDIOC_S_INPUT, &video_input);
1279
1280         /* Let the VIDIOC_S_STD ioctl do all the work, keeps the code
1281            in one place. */
1282         itv->std++;             /* Force full standard initialization */
1283         itv->std_out = itv->std;
1284         ivtv_v4l2_ioctls(itv, NULL, VIDIOC_S_FREQUENCY, &vf);
1285
1286         if (itv->card->v4l2_capabilities & V4L2_CAP_VIDEO_OUTPUT) {
1287                 ivtv_init_mpeg_decoder(itv);
1288         }
1289         ivtv_v4l2_ioctls(itv, NULL, VIDIOC_S_STD, &itv->tuner_std);
1290
1291         /* On a cx23416 this seems to be able to enable DMA to the chip? */
1292         if (!itv->has_cx23415)
1293                 write_reg_sync(0x03, IVTV_REG_DMACONTROL);
1294
1295         /* Default interrupts enabled. For the PVR350 this includes the
1296            decoder VSYNC interrupt, which is always on. It is not only used
1297            during decoding but also by the OSD.
1298            Some old PVR250 cards had a cx23415, so testing for that is too
1299            general. Instead test if the card has video output capability. */
1300         if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1301                 ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT | IVTV_IRQ_DEC_VSYNC);
1302                 ivtv_set_osd_alpha(itv);
1303         }
1304         else
1305                 ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT);
1306         return 0;
1307 }
1308
1309 static void ivtv_remove(struct pci_dev *pci_dev)
1310 {
1311         struct ivtv *itv = pci_get_drvdata(pci_dev);
1312
1313         IVTV_DEBUG_INFO("Removing Card #%d\n", itv->num);
1314
1315         if (test_bit(IVTV_F_I_INITED, &itv->i_flags)) {
1316                 /* Stop all captures */
1317                 IVTV_DEBUG_INFO("Stopping all streams\n");
1318                 if (atomic_read(&itv->capturing) > 0)
1319                         ivtv_stop_all_captures(itv);
1320
1321                 /* Stop all decoding */
1322                 IVTV_DEBUG_INFO("Stopping decoding\n");
1323                 if (atomic_read(&itv->decoding) > 0) {
1324                         int type;
1325
1326                         if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags))
1327                                 type = IVTV_DEC_STREAM_TYPE_YUV;
1328                         else
1329                                 type = IVTV_DEC_STREAM_TYPE_MPG;
1330                         ivtv_stop_v4l2_decode_stream(&itv->streams[type],
1331                                 VIDEO_CMD_STOP_TO_BLACK | VIDEO_CMD_STOP_IMMEDIATELY, 0);
1332                 }
1333                 ivtv_halt_firmware(itv);
1334         }
1335
1336         /* Interrupts */
1337         ivtv_set_irq_mask(itv, 0xffffffff);
1338         del_timer_sync(&itv->dma_timer);
1339
1340         /* Stop all Work Queues */
1341         flush_workqueue(itv->irq_work_queues);
1342         destroy_workqueue(itv->irq_work_queues);
1343
1344         ivtv_streams_cleanup(itv);
1345         ivtv_udma_free(itv);
1346
1347         exit_ivtv_i2c(itv);
1348
1349         free_irq(itv->dev->irq, (void *)itv);
1350         ivtv_iounmap(itv);
1351
1352         release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
1353         release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1354         if (itv->has_cx23415)
1355                 release_mem_region(itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1356
1357         pci_disable_device(itv->dev);
1358
1359         IVTV_INFO("Removed %s, card #%d\n", itv->card_name, itv->num);
1360 }
1361
1362 /* define a pci_driver for card detection */
1363 static struct pci_driver ivtv_pci_driver = {
1364       .name =     "ivtv",
1365       .id_table = ivtv_pci_tbl,
1366       .probe =    ivtv_probe,
1367       .remove =   ivtv_remove,
1368 };
1369
1370 static int module_start(void)
1371 {
1372         printk(KERN_INFO "ivtv:  Start initialization, version %s\n", IVTV_VERSION);
1373
1374         memset(ivtv_cards, 0, sizeof(ivtv_cards));
1375
1376         /* Validate parameters */
1377         if (ivtv_first_minor < 0 || ivtv_first_minor >= IVTV_MAX_CARDS) {
1378                 printk(KERN_ERR "ivtv:  Exiting, ivtv_first_minor must be between 0 and %d\n",
1379                      IVTV_MAX_CARDS - 1);
1380                 return -1;
1381         }
1382
1383         if (ivtv_debug < 0 || ivtv_debug > 2047) {
1384                 ivtv_debug = 0;
1385                 printk(KERN_INFO "ivtv:  Debug value must be >= 0 and <= 2047\n");
1386         }
1387
1388         if (pci_register_driver(&ivtv_pci_driver)) {
1389                 printk(KERN_ERR "ivtv:  Error detecting PCI card\n");
1390                 return -ENODEV;
1391         }
1392         printk(KERN_INFO "ivtv:  End initialization\n");
1393         return 0;
1394 }
1395
1396 static void module_cleanup(void)
1397 {
1398         int i, j;
1399
1400         pci_unregister_driver(&ivtv_pci_driver);
1401
1402         spin_lock(&ivtv_cards_lock);
1403         for (i = 0; i < ivtv_cards_active; i++) {
1404                 if (ivtv_cards[i] == NULL)
1405                         continue;
1406                 for (j = 0; j < IVTV_VBI_FRAMES; j++) {
1407                         kfree(ivtv_cards[i]->vbi.sliced_mpeg_data[j]);
1408                 }
1409                 kfree(ivtv_cards[i]);
1410         }
1411         spin_unlock(&ivtv_cards_lock);
1412 }
1413
1414 /* Note: These symbols are exported because they are used by the ivtvfb
1415    framebuffer module and an infrared module for the IR-blaster. */
1416 EXPORT_SYMBOL(ivtv_set_irq_mask);
1417 EXPORT_SYMBOL(ivtv_cards_active);
1418 EXPORT_SYMBOL(ivtv_cards);
1419 EXPORT_SYMBOL(ivtv_cards_lock);
1420 EXPORT_SYMBOL(ivtv_api);
1421 EXPORT_SYMBOL(ivtv_vapi);
1422 EXPORT_SYMBOL(ivtv_vapi_result);
1423 EXPORT_SYMBOL(ivtv_clear_irq_mask);
1424 EXPORT_SYMBOL(ivtv_debug);
1425 EXPORT_SYMBOL(ivtv_reset_ir_gpio);
1426 EXPORT_SYMBOL(ivtv_udma_setup);
1427 EXPORT_SYMBOL(ivtv_udma_unmap);
1428 EXPORT_SYMBOL(ivtv_udma_alloc);
1429 EXPORT_SYMBOL(ivtv_udma_prepare);
1430 EXPORT_SYMBOL(ivtv_init_on_first_open);
1431
1432 module_init(module_start);
1433 module_exit(module_cleanup);