blob: 1b79475ca134db7797c3ea95075a9fdfec61f983 [file] [log] [blame]
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001/*
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"
Hans Verkuil33c0fca2007-08-23 06:32:46 -030055#include "ivtv-routing.h"
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030056#include "ivtv-gpio.h"
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030057
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030058#include <media/tveeprom.h>
Hans Verkuil469ba042007-07-20 06:51:58 -030059#include <media/saa7115.h>
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030060#include <media/v4l2-chip-ident.h>
Hans Verkuil0e614cd2007-12-21 21:33:36 -030061#include "tuner-xc2028.h"
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030062
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030063/* If you have already X v4l cards, then set this to X. This way
64 the device numbers stay matched. Example: you have a WinTV card
65 without radio and a PVR-350 with. Normally this would give a
66 video1 device together with a radio0 device for the PVR. By
67 setting this to 1 you ensure that radio0 is now also radio1. */
Hans Verkuildd896012008-10-04 08:36:54 -030068int ivtv_first_minor;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030069
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030070/* add your revision and whatnot here */
71static struct pci_device_id ivtv_pci_tbl[] __devinitdata = {
72 {PCI_VENDOR_ID_ICOMP, PCI_DEVICE_ID_IVTV15,
73 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
74 {PCI_VENDOR_ID_ICOMP, PCI_DEVICE_ID_IVTV16,
75 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
76 {0,}
77};
78
79MODULE_DEVICE_TABLE(pci,ivtv_pci_tbl);
80
Hans Verkuil67ec09f2008-11-29 19:38:23 -030081/* ivtv instance counter */
82static atomic_t ivtv_instance = ATOMIC_INIT(0);
83
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030084/* Parameter declarations */
85static int cardtype[IVTV_MAX_CARDS];
Hans Verkuil32db7752007-07-20 09:29:43 -030086static int tuner[IVTV_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
87 -1, -1, -1, -1, -1, -1, -1, -1,
88 -1, -1, -1, -1, -1, -1, -1, -1,
89 -1, -1, -1, -1, -1, -1, -1, -1 };
90static int radio[IVTV_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
91 -1, -1, -1, -1, -1, -1, -1, -1,
92 -1, -1, -1, -1, -1, -1, -1, -1,
93 -1, -1, -1, -1, -1, -1, -1, -1 };
Andy Wallsf412d362009-11-21 01:47:45 -030094static int i2c_clock_period[IVTV_MAX_CARDS] = { -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 -1, -1, -1, -1, -1, -1, -1, -1 };
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030098
Al Viro64a6f952007-10-14 19:35:30 +010099static unsigned int cardtype_c = 1;
100static unsigned int tuner_c = 1;
101static unsigned int radio_c = 1;
Andy Wallsf412d362009-11-21 01:47:45 -0300102static unsigned int i2c_clock_period_c = 1;
Hans Verkuilc0038ce2008-04-22 14:45:49 -0300103static char pal[] = "---";
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300104static char secam[] = "--";
105static char ntsc[] = "-";
106
107/* Buffers */
Hans Verkuil33c0fca2007-08-23 06:32:46 -0300108
109/* DMA Buffers, Default size in MB allocated */
110#define IVTV_DEFAULT_ENC_MPG_BUFFERS 4
111#define IVTV_DEFAULT_ENC_YUV_BUFFERS 2
112#define IVTV_DEFAULT_ENC_VBI_BUFFERS 1
113/* Exception: size in kB for this stream (MB is overkill) */
114#define IVTV_DEFAULT_ENC_PCM_BUFFERS 320
115#define IVTV_DEFAULT_DEC_MPG_BUFFERS 1
116#define IVTV_DEFAULT_DEC_YUV_BUFFERS 1
117/* Exception: size in kB for this stream (MB is way overkill) */
118#define IVTV_DEFAULT_DEC_VBI_BUFFERS 64
119
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300120static int enc_mpg_buffers = IVTV_DEFAULT_ENC_MPG_BUFFERS;
121static int enc_yuv_buffers = IVTV_DEFAULT_ENC_YUV_BUFFERS;
122static int enc_vbi_buffers = IVTV_DEFAULT_ENC_VBI_BUFFERS;
123static int enc_pcm_buffers = IVTV_DEFAULT_ENC_PCM_BUFFERS;
124static int dec_mpg_buffers = IVTV_DEFAULT_DEC_MPG_BUFFERS;
125static int dec_yuv_buffers = IVTV_DEFAULT_DEC_YUV_BUFFERS;
126static int dec_vbi_buffers = IVTV_DEFAULT_DEC_VBI_BUFFERS;
127
Douglas Schilling Landgrafff699e62008-04-22 14:41:48 -0300128static int ivtv_yuv_mode;
129static int ivtv_yuv_threshold = -1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300130static int ivtv_pci_latency = 1;
131
Douglas Schilling Landgrafff699e62008-04-22 14:41:48 -0300132int ivtv_debug;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300133
Hans Verkuil11305d52008-04-22 14:45:50 -0300134static int tunertype = -1;
Hans Verkuil31ec1352007-03-03 08:50:42 -0300135static int newi2c = -1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300136
137module_param_array(tuner, int, &tuner_c, 0644);
138module_param_array(radio, bool, &radio_c, 0644);
139module_param_array(cardtype, int, &cardtype_c, 0644);
140module_param_string(pal, pal, sizeof(pal), 0644);
141module_param_string(secam, secam, sizeof(secam), 0644);
142module_param_string(ntsc, ntsc, sizeof(ntsc), 0644);
143module_param_named(debug,ivtv_debug, int, 0644);
144module_param(ivtv_pci_latency, int, 0644);
145module_param(ivtv_yuv_mode, int, 0644);
146module_param(ivtv_yuv_threshold, int, 0644);
147module_param(ivtv_first_minor, int, 0644);
148
149module_param(enc_mpg_buffers, int, 0644);
150module_param(enc_yuv_buffers, int, 0644);
151module_param(enc_vbi_buffers, int, 0644);
152module_param(enc_pcm_buffers, int, 0644);
153module_param(dec_mpg_buffers, int, 0644);
154module_param(dec_yuv_buffers, int, 0644);
155module_param(dec_vbi_buffers, int, 0644);
156
Hans Verkuil11305d52008-04-22 14:45:50 -0300157module_param(tunertype, int, 0644);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300158module_param(newi2c, int, 0644);
Andy Wallsf412d362009-11-21 01:47:45 -0300159module_param_array(i2c_clock_period, int, &i2c_clock_period_c, 0644);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300160
161MODULE_PARM_DESC(tuner, "Tuner type selection,\n"
162 "\t\t\tsee tuner.h for values");
163MODULE_PARM_DESC(radio,
164 "Enable or disable the radio. Use only if autodetection\n"
165 "\t\t\tfails. 0 = disable, 1 = enable");
166MODULE_PARM_DESC(cardtype,
167 "Only use this option if your card is not detected properly.\n"
168 "\t\tSpecify card type:\n"
169 "\t\t\t 1 = WinTV PVR 250\n"
170 "\t\t\t 2 = WinTV PVR 350\n"
171 "\t\t\t 3 = WinTV PVR-150 or PVR-500\n"
172 "\t\t\t 4 = AVerMedia M179\n"
173 "\t\t\t 5 = YUAN MPG600/Kuroutoshikou iTVC16-STVLP\n"
174 "\t\t\t 6 = YUAN MPG160/Kuroutoshikou iTVC15-STVLP\n"
175 "\t\t\t 7 = YUAN PG600/DIAMONDMM PVR-550 (CX Falcon 2)\n"
176 "\t\t\t 8 = Adaptec AVC-2410\n"
177 "\t\t\t 9 = Adaptec AVC-2010\n"
178 "\t\t\t10 = NAGASE TRANSGEAR 5000TV\n"
179 "\t\t\t11 = AOpen VA2000MAX-STN6\n"
180 "\t\t\t12 = YUAN MPG600GR/Kuroutoshikou CX23416GYC-STVLP\n"
181 "\t\t\t13 = I/O Data GV-MVP/RX\n"
182 "\t\t\t14 = I/O Data GV-MVP/RX2E\n"
183 "\t\t\t15 = GOTVIEW PCI DVD\n"
184 "\t\t\t16 = GOTVIEW PCI DVD2 Deluxe\n"
185 "\t\t\t17 = Yuan MPC622\n"
186 "\t\t\t18 = Digital Cowboy DCT-MTVP1\n"
Hans Verkuil37297802007-09-11 11:59:15 -0300187 "\t\t\t19 = Yuan PG600V2/GotView PCI DVD Lite\n"
188 "\t\t\t20 = Club3D ZAP-TV1x01\n"
189 "\t\t\t21 = AverTV MCE 116 Plus\n"
Hans Verkuile2a17742007-10-30 05:50:03 -0300190 "\t\t\t22 = ASUS Falcon2\n"
Hans Verkuilfdef4642007-10-30 05:55:58 -0300191 "\t\t\t23 = AverMedia PVR-150 Plus\n"
Hans Verkuile08323f2007-12-07 20:40:16 -0300192 "\t\t\t24 = AverMedia EZMaker PCI Deluxe\n"
Hans Verkuil22f23fc2008-04-26 09:19:44 -0300193 "\t\t\t25 = AverMedia M104 (not yet working)\n"
Hans Verkuild56eebf2008-05-20 06:19:47 -0300194 "\t\t\t26 = Buffalo PC-MV5L/PCI\n"
Andy Walls50364592009-07-02 23:08:59 -0300195 "\t\t\t27 = AVerMedia UltraTV 1500 MCE\n"
Eric Anderson7c121672010-02-10 22:14:54 -0300196 "\t\t\t28 = Sony VAIO Giga Pocket (ENX Kikyou)\n"
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300197 "\t\t\t 0 = Autodetect (default)\n"
198 "\t\t\t-1 = Ignore this card\n\t\t");
Hans Verkuilc0038ce2008-04-22 14:45:49 -0300199MODULE_PARM_DESC(pal, "Set PAL standard: BGH, DK, I, M, N, Nc, 60");
200MODULE_PARM_DESC(secam, "Set SECAM standard: BGH, DK, L, LC");
201MODULE_PARM_DESC(ntsc, "Set NTSC standard: M, J (Japan), K (South Korea)");
Hans Verkuil11305d52008-04-22 14:45:50 -0300202MODULE_PARM_DESC(tunertype,
Hans Verkuilc0038ce2008-04-22 14:45:49 -0300203 "Specify tuner type:\n"
Hans Verkuil11305d52008-04-22 14:45:50 -0300204 "\t\t\t 0 = tuner for PAL-B/G/H/D/K/I, SECAM-B/G/H/D/K/L/Lc\n"
205 "\t\t\t 1 = tuner for NTSC-M/J/K, PAL-M/N/Nc\n"
206 "\t\t\t-1 = Autodetect (default)\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300207MODULE_PARM_DESC(debug,
Hans Verkuil1aa32c22007-08-19 06:08:58 -0300208 "Debug level (bitmask). Default: 0\n"
209 "\t\t\t 1/0x0001: warning\n"
210 "\t\t\t 2/0x0002: info\n"
211 "\t\t\t 4/0x0004: mailbox\n"
212 "\t\t\t 8/0x0008: ioctl\n"
213 "\t\t\t 16/0x0010: file\n"
214 "\t\t\t 32/0x0020: dma\n"
215 "\t\t\t 64/0x0040: irq\n"
216 "\t\t\t 128/0x0080: decoder\n"
217 "\t\t\t 256/0x0100: yuv\n"
218 "\t\t\t 512/0x0200: i2c\n"
219 "\t\t\t1024/0x0400: high volume\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300220MODULE_PARM_DESC(ivtv_pci_latency,
221 "Change the PCI latency to 64 if lower: 0 = No, 1 = Yes,\n"
222 "\t\t\tDefault: Yes");
223MODULE_PARM_DESC(ivtv_yuv_mode,
224 "Specify the yuv playback mode:\n"
225 "\t\t\t0 = interlaced\n\t\t\t1 = progressive\n\t\t\t2 = auto\n"
226 "\t\t\tDefault: 0 (interlaced)");
227MODULE_PARM_DESC(ivtv_yuv_threshold,
228 "If ivtv_yuv_mode is 2 (auto) then playback content as\n\t\tprogressive if src height <= ivtv_yuvthreshold\n"
Joe Perchesce27cd32009-07-02 16:02:20 -0300229 "\t\t\tDefault: 480");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300230MODULE_PARM_DESC(enc_mpg_buffers,
231 "Encoder MPG Buffers (in MB)\n"
232 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_MPG_BUFFERS));
233MODULE_PARM_DESC(enc_yuv_buffers,
234 "Encoder YUV Buffers (in MB)\n"
235 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_YUV_BUFFERS));
236MODULE_PARM_DESC(enc_vbi_buffers,
237 "Encoder VBI Buffers (in MB)\n"
238 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_VBI_BUFFERS));
239MODULE_PARM_DESC(enc_pcm_buffers,
Hans Verkuil313e91e2007-08-19 05:32:33 -0300240 "Encoder PCM buffers (in kB)\n"
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300241 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_PCM_BUFFERS));
242MODULE_PARM_DESC(dec_mpg_buffers,
243 "Decoder MPG buffers (in MB)\n"
244 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_MPG_BUFFERS));
245MODULE_PARM_DESC(dec_yuv_buffers,
246 "Decoder YUV buffers (in MB)\n"
247 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_YUV_BUFFERS));
248MODULE_PARM_DESC(dec_vbi_buffers,
Hans Verkuil313e91e2007-08-19 05:32:33 -0300249 "Decoder VBI buffers (in kB)\n"
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300250 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_VBI_BUFFERS));
251MODULE_PARM_DESC(newi2c,
252 "Use new I2C implementation\n"
253 "\t\t\t-1 is autodetect, 0 is off, 1 is on\n"
254 "\t\t\tDefault is autodetect");
Andy Wallsf412d362009-11-21 01:47:45 -0300255MODULE_PARM_DESC(i2c_clock_period,
256 "Period of SCL for the I2C bus controlled by the CX23415/6\n"
257 "\t\t\tMin: 10 usec (100 kHz), Max: 4500 usec (222 Hz)\n"
258 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_I2C_CLOCK_PERIOD));
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300259
Hans Verkuil581644d2009-06-19 11:54:00 -0300260MODULE_PARM_DESC(ivtv_first_minor, "Set device node number assigned to first card");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300261
262MODULE_AUTHOR("Kevin Thayer, Chris Kennedy, Hans Verkuil");
263MODULE_DESCRIPTION("CX23415/CX23416 driver");
264MODULE_SUPPORTED_DEVICE
265 ("CX23415/CX23416 MPEG2 encoder (WinTV PVR-150/250/350/500,\n"
266 "\t\t\tYuan MPG series and similar)");
267MODULE_LICENSE("GPL");
268
269MODULE_VERSION(IVTV_VERSION);
270
271void ivtv_clear_irq_mask(struct ivtv *itv, u32 mask)
272{
273 itv->irqmask &= ~mask;
274 write_reg_sync(itv->irqmask, IVTV_REG_IRQMASK);
275}
276
277void ivtv_set_irq_mask(struct ivtv *itv, u32 mask)
278{
279 itv->irqmask |= mask;
280 write_reg_sync(itv->irqmask, IVTV_REG_IRQMASK);
281}
282
283int ivtv_set_output_mode(struct ivtv *itv, int mode)
284{
285 int old_mode;
286
287 spin_lock(&itv->lock);
288 old_mode = itv->output_mode;
289 if (old_mode == 0)
290 itv->output_mode = old_mode = mode;
291 spin_unlock(&itv->lock);
292 return old_mode;
293}
294
295struct ivtv_stream *ivtv_get_output_stream(struct ivtv *itv)
296{
297 switch (itv->output_mode) {
298 case OUT_MPG:
299 return &itv->streams[IVTV_DEC_STREAM_TYPE_MPG];
300 case OUT_YUV:
301 return &itv->streams[IVTV_DEC_STREAM_TYPE_YUV];
302 default:
303 return NULL;
304 }
305}
306
307int ivtv_waitq(wait_queue_head_t *waitq)
308{
309 DEFINE_WAIT(wait);
310
311 prepare_to_wait(waitq, &wait, TASK_INTERRUPTIBLE);
312 schedule();
313 finish_wait(waitq, &wait);
314 return signal_pending(current) ? -EINTR : 0;
315}
316
317/* Generic utility functions */
Mauro Carvalho Chehab201700d2007-07-19 11:21:04 -0300318int ivtv_msleep_timeout(unsigned int msecs, int intr)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300319{
Mauro Carvalho Chehab201700d2007-07-19 11:21:04 -0300320 int timeout = msecs_to_jiffies(msecs);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300321
322 do {
323 set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
324 timeout = schedule_timeout(timeout);
Hans Verkuil34a78642009-05-02 07:56:46 -0300325 if (intr) {
326 int ret = signal_pending(current);
327
328 if (ret)
329 return ret;
330 }
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300331 } while (timeout);
332 return 0;
333}
334
335/* Release ioremapped memory */
336static void ivtv_iounmap(struct ivtv *itv)
337{
338 if (itv == NULL)
339 return;
340
341 /* Release registers memory */
342 if (itv->reg_mem != NULL) {
343 IVTV_DEBUG_INFO("releasing reg_mem\n");
344 iounmap(itv->reg_mem);
345 itv->reg_mem = NULL;
346 }
347 /* Release io memory */
348 if (itv->has_cx23415 && itv->dec_mem != NULL) {
349 IVTV_DEBUG_INFO("releasing dec_mem\n");
350 iounmap(itv->dec_mem);
351 }
352 itv->dec_mem = NULL;
353
354 /* Release io memory */
355 if (itv->enc_mem != NULL) {
356 IVTV_DEBUG_INFO("releasing enc_mem\n");
357 iounmap(itv->enc_mem);
358 itv->enc_mem = NULL;
359 }
360}
361
362/* Hauppauge card? get values from tveeprom */
363void ivtv_read_eeprom(struct ivtv *itv, struct tveeprom *tv)
364{
365 u8 eedata[256];
366
367 itv->i2c_client.addr = 0xA0 >> 1;
368 tveeprom_read(&itv->i2c_client, eedata, sizeof(eedata));
369 tveeprom_hauppauge_analog(&itv->i2c_client, tv, eedata);
370}
371
372static void ivtv_process_eeprom(struct ivtv *itv)
373{
374 struct tveeprom tv;
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300375 int pci_slot = PCI_SLOT(itv->pdev->devfn);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300376
377 ivtv_read_eeprom(itv, &tv);
378
379 /* Many thanks to Steven Toth from Hauppauge for providing the
380 model numbers */
381 switch (tv.model) {
382 /* In a few cases the PCI subsystem IDs do not correctly
383 identify the card. A better method is to check the
384 model number from the eeprom instead. */
Hans Verkuil1b9d3132007-05-18 16:18:17 -0300385 case 30012 ... 30039: /* Low profile PVR250 */
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300386 case 32000 ... 32999:
387 case 48000 ... 48099: /* 48??? range are PVR250s with a cx23415 */
388 case 48400 ... 48599:
389 itv->card = ivtv_get_card(IVTV_CARD_PVR_250);
390 break;
391 case 48100 ... 48399:
392 case 48600 ... 48999:
393 itv->card = ivtv_get_card(IVTV_CARD_PVR_350);
394 break;
395 case 23000 ... 23999: /* PVR500 */
396 case 25000 ... 25999: /* Low profile PVR150 */
397 case 26000 ... 26999: /* Regular PVR150 */
398 itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
399 break;
400 case 0:
401 IVTV_ERR("Invalid EEPROM\n");
402 return;
403 default:
404 IVTV_ERR("Unknown model %d, defaulting to PVR-150\n", tv.model);
405 itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
406 break;
407 }
408
409 switch (tv.model) {
410 /* Old style PVR350 (with an saa7114) uses this input for
411 the tuner. */
412 case 48254:
413 itv->card = ivtv_get_card(IVTV_CARD_PVR_350_V1);
414 break;
415 default:
416 break;
417 }
418
419 itv->v4l2_cap = itv->card->v4l2_capabilities;
420 itv->card_name = itv->card->name;
Hans Verkuild9009202007-12-07 21:01:15 -0300421 itv->card_i2c = itv->card->i2c;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300422
423 /* If this is a PVR500 then it should be possible to detect whether it is the
424 first or second unit by looking at the subsystem device ID: is bit 4 is
425 set, then it is the second unit (according to info from Hauppauge).
426
427 However, while this works for most cards, I have seen a few PVR500 cards
428 where both units have the same subsystem ID.
429
430 So instead I look at the reported 'PCI slot' (which is the slot on the PVR500
431 PCI bridge) and if it is 8, then it is assumed to be the first unit, otherwise
432 it is the second unit. It is possible that it is a different slot when ivtv is
433 used in Xen, in that case I ignore this card here. The worst that can happen
434 is that the card presents itself with a non-working radio device.
435
436 This detection is needed since the eeprom reports incorrectly that a radio is
437 present on the second unit. */
438 if (tv.model / 1000 == 23) {
Hans Verkuild9009202007-12-07 21:01:15 -0300439 static const struct ivtv_card_tuner_i2c ivtv_i2c_radio = {
440 .radio = { 0x60, I2C_CLIENT_END },
441 .demod = { 0x43, I2C_CLIENT_END },
442 .tv = { 0x61, I2C_CLIENT_END },
443 };
444
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300445 itv->card_name = "WinTV PVR 500";
Hans Verkuild9009202007-12-07 21:01:15 -0300446 itv->card_i2c = &ivtv_i2c_radio;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300447 if (pci_slot == 8 || pci_slot == 9) {
448 int is_first = (pci_slot & 1) == 0;
449
450 itv->card_name = is_first ? "WinTV PVR 500 (unit #1)" :
451 "WinTV PVR 500 (unit #2)";
452 if (!is_first) {
453 IVTV_INFO("Correcting tveeprom data: no radio present on second unit\n");
454 tv.has_radio = 0;
455 }
456 }
457 }
458 IVTV_INFO("Autodetected %s\n", itv->card_name);
459
460 switch (tv.tuner_hauppauge_model) {
461 case 85:
462 case 99:
463 case 112:
464 itv->pvr150_workaround = 1;
465 break;
466 default:
467 break;
468 }
469 if (tv.tuner_type == TUNER_ABSENT)
Andy Walls73600552009-05-22 21:12:00 -0300470 IVTV_ERR("tveeprom cannot autodetect tuner!\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300471
472 if (itv->options.tuner == -1)
473 itv->options.tuner = tv.tuner_type;
474 if (itv->options.radio == -1)
475 itv->options.radio = (tv.has_radio != 0);
476 /* only enable newi2c if an IR blaster is present */
Hans Verkuilb654fcdc2008-07-22 15:50:31 -0300477 if (itv->options.newi2c == -1 && tv.has_ir) {
478 itv->options.newi2c = (tv.has_ir & 4) ? 1 : 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300479 if (itv->options.newi2c) {
Hans Verkuilae38d932007-07-17 13:42:43 -0300480 IVTV_INFO("Reopen i2c bus for IR-blaster support\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300481 exit_ivtv_i2c(itv);
482 init_ivtv_i2c(itv);
483 }
484 }
485
486 if (itv->std != 0)
487 /* user specified tuner standard */
488 return;
489
490 /* autodetect tuner standard */
491 if (tv.tuner_formats & V4L2_STD_PAL) {
492 IVTV_DEBUG_INFO("PAL tuner detected\n");
493 itv->std |= V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
494 } else if (tv.tuner_formats & V4L2_STD_NTSC) {
495 IVTV_DEBUG_INFO("NTSC tuner detected\n");
496 itv->std |= V4L2_STD_NTSC_M;
497 } else if (tv.tuner_formats & V4L2_STD_SECAM) {
498 IVTV_DEBUG_INFO("SECAM tuner detected\n");
499 itv->std |= V4L2_STD_SECAM_L;
500 } else {
501 IVTV_INFO("No tuner detected, default to NTSC-M\n");
502 itv->std |= V4L2_STD_NTSC_M;
503 }
504}
505
506static v4l2_std_id ivtv_parse_std(struct ivtv *itv)
507{
508 switch (pal[0]) {
509 case '6':
Hans Verkuil11305d52008-04-22 14:45:50 -0300510 tunertype = 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300511 return V4L2_STD_PAL_60;
512 case 'b':
513 case 'B':
514 case 'g':
515 case 'G':
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300516 case 'h':
517 case 'H':
Hans Verkuil11305d52008-04-22 14:45:50 -0300518 tunertype = 0;
Hans Verkuilc0038ce2008-04-22 14:45:49 -0300519 return V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300520 case 'n':
521 case 'N':
Hans Verkuil11305d52008-04-22 14:45:50 -0300522 tunertype = 1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300523 if (pal[1] == 'c' || pal[1] == 'C')
524 return V4L2_STD_PAL_Nc;
525 return V4L2_STD_PAL_N;
526 case 'i':
527 case 'I':
Hans Verkuil11305d52008-04-22 14:45:50 -0300528 tunertype = 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300529 return V4L2_STD_PAL_I;
530 case 'd':
531 case 'D':
532 case 'k':
533 case 'K':
Hans Verkuil11305d52008-04-22 14:45:50 -0300534 tunertype = 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300535 return V4L2_STD_PAL_DK;
536 case 'M':
537 case 'm':
Hans Verkuil11305d52008-04-22 14:45:50 -0300538 tunertype = 1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300539 return V4L2_STD_PAL_M;
540 case '-':
541 break;
542 default:
543 IVTV_WARN("pal= argument not recognised\n");
544 return 0;
545 }
546
547 switch (secam[0]) {
548 case 'b':
549 case 'B':
550 case 'g':
551 case 'G':
552 case 'h':
553 case 'H':
Hans Verkuil11305d52008-04-22 14:45:50 -0300554 tunertype = 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300555 return V4L2_STD_SECAM_B | V4L2_STD_SECAM_G | V4L2_STD_SECAM_H;
556 case 'd':
557 case 'D':
558 case 'k':
559 case 'K':
Hans Verkuil11305d52008-04-22 14:45:50 -0300560 tunertype = 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300561 return V4L2_STD_SECAM_DK;
562 case 'l':
563 case 'L':
Hans Verkuil11305d52008-04-22 14:45:50 -0300564 tunertype = 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300565 if (secam[1] == 'C' || secam[1] == 'c')
566 return V4L2_STD_SECAM_LC;
567 return V4L2_STD_SECAM_L;
568 case '-':
569 break;
570 default:
571 IVTV_WARN("secam= argument not recognised\n");
572 return 0;
573 }
574
575 switch (ntsc[0]) {
576 case 'm':
577 case 'M':
Hans Verkuil11305d52008-04-22 14:45:50 -0300578 tunertype = 1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300579 return V4L2_STD_NTSC_M;
580 case 'j':
581 case 'J':
Hans Verkuil11305d52008-04-22 14:45:50 -0300582 tunertype = 1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300583 return V4L2_STD_NTSC_M_JP;
584 case 'k':
585 case 'K':
Hans Verkuil11305d52008-04-22 14:45:50 -0300586 tunertype = 1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300587 return V4L2_STD_NTSC_M_KR;
588 case '-':
589 break;
590 default:
591 IVTV_WARN("ntsc= argument not recognised\n");
592 return 0;
593 }
594
595 /* no match found */
596 return 0;
597}
598
599static void ivtv_process_options(struct ivtv *itv)
600{
601 const char *chipname;
602 int i, j;
603
Hans Verkuil313e91e2007-08-19 05:32:33 -0300604 itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_MPG] = enc_mpg_buffers * 1024;
605 itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_YUV] = enc_yuv_buffers * 1024;
606 itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_VBI] = enc_vbi_buffers * 1024;
607 itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_PCM] = enc_pcm_buffers;
608 itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_MPG] = dec_mpg_buffers * 1024;
609 itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_YUV] = dec_yuv_buffers * 1024;
610 itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_VBI] = dec_vbi_buffers;
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300611 itv->options.cardtype = cardtype[itv->instance];
612 itv->options.tuner = tuner[itv->instance];
613 itv->options.radio = radio[itv->instance];
Andy Wallsf412d362009-11-21 01:47:45 -0300614
615 itv->options.i2c_clock_period = i2c_clock_period[itv->instance];
616 if (itv->options.i2c_clock_period == -1)
617 itv->options.i2c_clock_period = IVTV_DEFAULT_I2C_CLOCK_PERIOD;
618 else if (itv->options.i2c_clock_period < 10)
619 itv->options.i2c_clock_period = 10;
620 else if (itv->options.i2c_clock_period > 4500)
621 itv->options.i2c_clock_period = 4500;
622
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300623 itv->options.newi2c = newi2c;
Hans Verkuil11305d52008-04-22 14:45:50 -0300624 if (tunertype < -1 || tunertype > 1) {
625 IVTV_WARN("Invalid tunertype argument, will autodetect instead\n");
626 tunertype = -1;
Hans Verkuilc0038ce2008-04-22 14:45:49 -0300627 }
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300628 itv->std = ivtv_parse_std(itv);
Hans Verkuil11305d52008-04-22 14:45:50 -0300629 if (itv->std == 0 && tunertype >= 0)
630 itv->std = tunertype ? V4L2_STD_MN : (V4L2_STD_ALL & ~V4L2_STD_MN);
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300631 itv->has_cx23415 = (itv->pdev->device == PCI_DEVICE_ID_IVTV15);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300632 chipname = itv->has_cx23415 ? "cx23415" : "cx23416";
633 if (itv->options.cardtype == -1) {
634 IVTV_INFO("Ignore card (detected %s based chip)\n", chipname);
635 return;
636 }
637 if ((itv->card = ivtv_get_card(itv->options.cardtype - 1))) {
638 IVTV_INFO("User specified %s card (detected %s based chip)\n",
639 itv->card->name, chipname);
640 } else if (itv->options.cardtype != 0) {
641 IVTV_ERR("Unknown user specified type, trying to autodetect card\n");
642 }
643 if (itv->card == NULL) {
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300644 if (itv->pdev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE ||
645 itv->pdev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE_ALT1 ||
646 itv->pdev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE_ALT2) {
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300647 itv->card = ivtv_get_card(itv->has_cx23415 ? IVTV_CARD_PVR_350 : IVTV_CARD_PVR_150);
648 IVTV_INFO("Autodetected Hauppauge card (%s based)\n",
649 chipname);
650 }
651 }
652 if (itv->card == NULL) {
653 for (i = 0; (itv->card = ivtv_get_card(i)); i++) {
654 if (itv->card->pci_list == NULL)
655 continue;
656 for (j = 0; itv->card->pci_list[j].device; j++) {
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300657 if (itv->pdev->device !=
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300658 itv->card->pci_list[j].device)
659 continue;
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300660 if (itv->pdev->subsystem_vendor !=
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300661 itv->card->pci_list[j].subsystem_vendor)
662 continue;
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300663 if (itv->pdev->subsystem_device !=
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300664 itv->card->pci_list[j].subsystem_device)
665 continue;
666 IVTV_INFO("Autodetected %s card (%s based)\n",
667 itv->card->name, chipname);
668 goto done;
669 }
670 }
671 }
672done:
673
674 if (itv->card == NULL) {
675 itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
Bjorn Helgaas29e66a62008-09-04 17:24:51 -0300676 IVTV_ERR("Unknown card: vendor/device: [%04x:%04x]\n",
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300677 itv->pdev->vendor, itv->pdev->device);
Bjorn Helgaas29e66a62008-09-04 17:24:51 -0300678 IVTV_ERR(" subsystem vendor/device: [%04x:%04x]\n",
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300679 itv->pdev->subsystem_vendor, itv->pdev->subsystem_device);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300680 IVTV_ERR(" %s based\n", chipname);
681 IVTV_ERR("Defaulting to %s card\n", itv->card->name);
682 IVTV_ERR("Please mail the vendor/device and subsystem vendor/device IDs and what kind of\n");
683 IVTV_ERR("card you have to the ivtv-devel mailinglist (www.ivtvdriver.org)\n");
Hans Verkuil3e509c72007-12-24 10:41:47 -0300684 IVTV_ERR("Prefix your subject line with [UNKNOWN IVTV CARD].\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300685 }
686 itv->v4l2_cap = itv->card->v4l2_capabilities;
687 itv->card_name = itv->card->name;
Hans Verkuild9009202007-12-07 21:01:15 -0300688 itv->card_i2c = itv->card->i2c;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300689}
690
691/* Precondition: the ivtv structure has been memset to 0. Only
692 the dev and num fields have been filled in.
693 No assumptions on the card type may be made here (see ivtv_init_struct2
694 for that).
695 */
696static int __devinit ivtv_init_struct1(struct ivtv *itv)
697{
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300698 itv->base_addr = pci_resource_start(itv->pdev, 0);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300699 itv->enc_mbox.max_mbox = 2; /* the encoder has 3 mailboxes (0-2) */
700 itv->dec_mbox.max_mbox = 1; /* the decoder has 2 mailboxes (0-1) */
701
Hans Verkuilf8859692007-07-10 14:58:33 -0300702 mutex_init(&itv->serialize_lock);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300703 mutex_init(&itv->i2c_bus_lock);
704 mutex_init(&itv->udma.lock);
705
Hans Verkuild6102902007-03-10 20:09:07 -0300706 spin_lock_init(&itv->lock);
707 spin_lock_init(&itv->dma_reg_lock);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300708
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300709 itv->irq_work_queues = create_singlethread_workqueue(itv->v4l2_dev.name);
Hans Verkuil1e13f9e2007-03-10 06:52:02 -0300710 if (itv->irq_work_queues == NULL) {
711 IVTV_ERR("Could not create ivtv workqueue\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300712 return -1;
713 }
714
Hans Verkuil1e13f9e2007-03-10 06:52:02 -0300715 INIT_WORK(&itv->irq_work_queue, ivtv_irq_work_handler);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300716
717 /* start counting open_id at 1 */
718 itv->open_id = 1;
719
720 /* Initial settings */
721 cx2341x_fill_defaults(&itv->params);
722 itv->params.port = CX2341X_PORT_MEMORY;
723 itv->params.capabilities = CX2341X_CAP_HAS_SLICED_VBI;
Hans Verkuilfd8b2812007-08-23 10:13:15 -0300724 init_waitqueue_head(&itv->eos_waitq);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300725 init_waitqueue_head(&itv->event_waitq);
726 init_waitqueue_head(&itv->vsync_waitq);
727 init_waitqueue_head(&itv->dma_waitq);
728 init_timer(&itv->dma_timer);
729 itv->dma_timer.function = ivtv_unfinished_dma;
730 itv->dma_timer.data = (unsigned long)itv;
731
732 itv->cur_dma_stream = -1;
Hans Verkuildc02d502007-05-19 14:07:16 -0300733 itv->cur_pio_stream = -1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300734 itv->audio_stereo_mode = AUDIO_STEREO;
735 itv->audio_bilingual_mode = AUDIO_MONO_LEFT;
736
737 /* Ctrls */
738 itv->speed = 1000;
739
740 /* VBI */
Hans Verkuila8b86432008-10-04 08:05:30 -0300741 itv->vbi.in.type = V4L2_BUF_TYPE_VBI_CAPTURE;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300742 itv->vbi.sliced_in = &itv->vbi.in.fmt.sliced;
743
Ian Armstrong165e1212008-02-26 16:09:00 -0300744 /* Init the sg table for osd/yuv output */
745 sg_init_table(itv->udma.SGlist, IVTV_DMA_SG_OSD_ENT);
746
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300747 /* OSD */
748 itv->osd_global_alpha_state = 1;
749 itv->osd_global_alpha = 255;
750
751 /* YUV */
752 atomic_set(&itv->yuv_info.next_dma_frame, -1);
753 itv->yuv_info.lace_mode = ivtv_yuv_mode;
754 itv->yuv_info.lace_threshold = ivtv_yuv_threshold;
Ian Armstronga3e5f5e2007-10-20 14:52:55 -0300755 itv->yuv_info.max_frames_buffered = 3;
Ian Armstrong88ab0752008-04-22 14:42:14 -0300756 itv->yuv_info.track_osd = 1;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300757 return 0;
758}
759
760/* Second initialization part. Here the card type has been
761 autodetected. */
762static void __devinit ivtv_init_struct2(struct ivtv *itv)
763{
764 int i;
765
766 for (i = 0; i < IVTV_CARD_MAX_VIDEO_INPUTS; i++)
767 if (itv->card->video_inputs[i].video_type == 0)
768 break;
769 itv->nof_inputs = i;
770 for (i = 0; i < IVTV_CARD_MAX_AUDIO_INPUTS; i++)
771 if (itv->card->audio_inputs[i].audio_type == 0)
772 break;
773 itv->nof_audio_inputs = i;
774
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300775 if (itv->card->hw_all & IVTV_HW_CX25840) {
776 itv->vbi.sliced_size = 288; /* multiple of 16, real size = 284 */
777 } else {
778 itv->vbi.sliced_size = 64; /* multiple of 16, real size = 52 */
779 }
780
781 /* Find tuner input */
782 for (i = 0; i < itv->nof_inputs; i++) {
783 if (itv->card->video_inputs[i].video_type ==
784 IVTV_CARD_INPUT_VID_TUNER)
785 break;
786 }
787 if (i == itv->nof_inputs)
788 i = 0;
789 itv->active_input = i;
790 itv->audio_input = itv->card->video_inputs[i].audio_index;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300791}
792
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300793static int ivtv_setup_pci(struct ivtv *itv, struct pci_dev *pdev,
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300794 const struct pci_device_id *pci_id)
795{
796 u16 cmd;
Hans Verkuilfd8b2812007-08-23 10:13:15 -0300797 u8 card_rev;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300798 unsigned char pci_latency;
799
800 IVTV_DEBUG_INFO("Enabling pci device\n");
801
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300802 if (pci_enable_device(pdev)) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300803 IVTV_ERR("Can't enable device!\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300804 return -EIO;
805 }
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300806 if (pci_set_dma_mask(pdev, 0xffffffff)) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300807 IVTV_ERR("No suitable DMA available.\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300808 return -EIO;
809 }
810 if (!request_mem_region(itv->base_addr, IVTV_ENCODER_SIZE, "ivtv encoder")) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300811 IVTV_ERR("Cannot request encoder memory region.\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300812 return -EIO;
813 }
814
815 if (!request_mem_region(itv->base_addr + IVTV_REG_OFFSET,
816 IVTV_REG_SIZE, "ivtv registers")) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300817 IVTV_ERR("Cannot request register memory region.\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300818 release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
819 return -EIO;
820 }
821
822 if (itv->has_cx23415 &&
823 !request_mem_region(itv->base_addr + IVTV_DECODER_OFFSET,
824 IVTV_DECODER_SIZE, "ivtv decoder")) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300825 IVTV_ERR("Cannot request decoder memory region.\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300826 release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
827 release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
828 return -EIO;
829 }
830
831 /* Check for bus mastering */
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300832 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300833 if (!(cmd & PCI_COMMAND_MASTER)) {
834 IVTV_DEBUG_INFO("Attempting to enable Bus Mastering\n");
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300835 pci_set_master(pdev);
836 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300837 if (!(cmd & PCI_COMMAND_MASTER)) {
838 IVTV_ERR("Bus Mastering is not enabled\n");
839 return -ENXIO;
840 }
841 }
842 IVTV_DEBUG_INFO("Bus Mastering Enabled.\n");
843
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300844 pci_read_config_byte(pdev, PCI_CLASS_REVISION, &card_rev);
845 pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300846
847 if (pci_latency < 64 && ivtv_pci_latency) {
848 IVTV_INFO("Unreasonably low latency timer, "
849 "setting to 64 (was %d)\n", pci_latency);
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300850 pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 64);
851 pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300852 }
853 /* This config space value relates to DMA latencies. The
854 default value 0x8080 is too low however and will lead
855 to DMA errors. 0xffff is the max value which solves
856 these problems. */
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300857 pci_write_config_dword(pdev, 0x40, 0xffff);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300858
859 IVTV_DEBUG_INFO("%d (rev %d) at %02x:%02x.%x, "
860 "irq: %d, latency: %d, memory: 0x%lx\n",
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300861 pdev->device, card_rev, pdev->bus->number,
862 PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn),
863 pdev->irq, pci_latency, (unsigned long)itv->base_addr);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300864
865 return 0;
866}
867
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300868static void ivtv_load_and_init_modules(struct ivtv *itv)
869{
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300870 u32 hw = itv->card->hw_all;
Hans Verkuild9009202007-12-07 21:01:15 -0300871 unsigned i;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300872
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300873 /* check which i2c devices are actually found */
874 for (i = 0; i < 32; i++) {
875 u32 device = 1 << i;
876
877 if (!(device & hw))
878 continue;
Hans Verkuild9009202007-12-07 21:01:15 -0300879 if (device == IVTV_HW_GPIO || device == IVTV_HW_TVEEPROM) {
880 /* GPIO and TVEEPROM do not use i2c probing */
881 itv->hw_flags |= device;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300882 continue;
883 }
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300884 if (ivtv_i2c_register(itv, i) == 0)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300885 itv->hw_flags |= device;
886 }
887
Andy Wallsbfbde8e2009-11-21 11:41:33 -0300888 /* probe for legacy IR controllers that aren't in card definitions */
Andy Walls7ce5c412009-11-21 16:19:27 -0300889 if ((itv->hw_flags & IVTV_HW_IR_ANY) == 0)
890 ivtv_i2c_new_ir_legacy(itv);
Andy Wallsbfbde8e2009-11-21 11:41:33 -0300891
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300892 if (itv->card->hw_all & IVTV_HW_CX25840)
893 itv->sd_video = ivtv_find_hw(itv, IVTV_HW_CX25840);
894 else if (itv->card->hw_all & IVTV_HW_SAA717X)
895 itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA717X);
896 else if (itv->card->hw_all & IVTV_HW_SAA7114)
897 itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA7114);
898 else
899 itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA7115);
900 itv->sd_audio = ivtv_find_hw(itv, itv->card->hw_audio_ctrl);
901 itv->sd_muxer = ivtv_find_hw(itv, itv->card->hw_muxer);
902
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300903 hw = itv->hw_flags;
904
905 if (itv->card->type == IVTV_CARD_CX23416GYC) {
906 /* Several variations of this card exist, detect which card
907 type should be used. */
908 if ((hw & (IVTV_HW_UPD64031A | IVTV_HW_UPD6408X)) == 0)
909 itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGRYCS);
910 else if ((hw & IVTV_HW_UPD64031A) == 0)
911 itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGR);
912 }
Hans Verkuil469ba042007-07-20 06:51:58 -0300913 else if (itv->card->type == IVTV_CARD_GV_MVPRX ||
914 itv->card->type == IVTV_CARD_GV_MVPRX2E) {
Hans Verkuil469ba042007-07-20 06:51:58 -0300915 /* The crystal frequency of GVMVPRX is 24.576MHz */
Hans Verkuil3ff4ad82009-04-01 03:15:52 -0300916 v4l2_subdev_call(itv->sd_video, video, s_crystal_freq,
917 SAA7115_FREQ_24_576_MHZ, SAA7115_FREQ_FL_UCGC);
Hans Verkuil469ba042007-07-20 06:51:58 -0300918 }
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300919
920 if (hw & IVTV_HW_CX25840) {
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300921 itv->vbi.raw_decoder_line_size = 1444;
922 itv->vbi.raw_decoder_sav_odd_field = 0x20;
923 itv->vbi.raw_decoder_sav_even_field = 0x60;
924 itv->vbi.sliced_decoder_line_size = 272;
925 itv->vbi.sliced_decoder_sav_odd_field = 0xB0;
926 itv->vbi.sliced_decoder_sav_even_field = 0xF0;
927 }
928
929 if (hw & IVTV_HW_SAA711X) {
Hans Verkuilaecde8b2008-12-30 07:14:19 -0300930 struct v4l2_dbg_chip_ident v;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300931
932 /* determine the exact saa711x model */
933 itv->hw_flags &= ~IVTV_HW_SAA711X;
934
Hans Verkuilaecde8b2008-12-30 07:14:19 -0300935 v.match.type = V4L2_CHIP_MATCH_I2C_DRIVER;
936 strlcpy(v.match.name, "saa7115", sizeof(v.match.name));
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300937 ivtv_call_hw(itv, IVTV_HW_SAA711X, core, g_chip_ident, &v);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300938 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);
Hans Verkuilaecde8b2008-12-30 07:14:19 -0300942 } else {
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300943 itv->hw_flags |= IVTV_HW_SAA7115;
944 }
945 itv->vbi.raw_decoder_line_size = 1443;
946 itv->vbi.raw_decoder_sav_odd_field = 0x25;
947 itv->vbi.raw_decoder_sav_even_field = 0x62;
948 itv->vbi.sliced_decoder_line_size = 51;
949 itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
950 itv->vbi.sliced_decoder_sav_even_field = 0xEC;
951 }
952
953 if (hw & IVTV_HW_SAA717X) {
954 itv->vbi.raw_decoder_line_size = 1443;
955 itv->vbi.raw_decoder_sav_odd_field = 0x25;
956 itv->vbi.raw_decoder_sav_even_field = 0x62;
957 itv->vbi.sliced_decoder_line_size = 51;
958 itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
959 itv->vbi.sliced_decoder_sav_even_field = 0xEC;
960 }
961}
962
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300963static int __devinit ivtv_probe(struct pci_dev *pdev,
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300964 const struct pci_device_id *pci_id)
965{
966 int retval = 0;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300967 int vbi_buf_size;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300968 struct ivtv *itv;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300969
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300970 itv = kzalloc(sizeof(struct ivtv), GFP_ATOMIC);
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300971 if (itv == NULL)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300972 return -ENOMEM;
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300973 itv->pdev = pdev;
Hans Verkuila79b11c2009-05-02 10:15:17 -0300974 itv->instance = v4l2_device_set_name(&itv->v4l2_dev, "ivtv",
975 &ivtv_instance);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300976
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300977 retval = v4l2_device_register(&pdev->dev, &itv->v4l2_dev);
Hans Verkuil2c1a3c92009-01-12 18:10:43 -0300978 if (retval) {
979 kfree(itv);
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300980 return retval;
Hans Verkuil2c1a3c92009-01-12 18:10:43 -0300981 }
Hans Verkuil67ec09f2008-11-29 19:38:23 -0300982 IVTV_INFO("Initializing card %d\n", itv->instance);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300983
984 ivtv_process_options(itv);
985 if (itv->options.cardtype == -1) {
986 retval = -ENODEV;
987 goto err;
988 }
989 if (ivtv_init_struct1(itv)) {
990 retval = -ENOMEM;
991 goto err;
992 }
993
994 IVTV_DEBUG_INFO("base addr: 0x%08x\n", itv->base_addr);
995
996 /* PCI Device Setup */
Hans Verkuil8ac05ae2009-02-07 07:02:27 -0300997 retval = ivtv_setup_pci(itv, pdev, pci_id);
998 if (retval == -EIO)
999 goto free_workqueue;
1000 if (retval == -ENXIO)
1001 goto free_mem;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001002
1003 /* map io memory */
1004 IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
1005 itv->base_addr + IVTV_ENCODER_OFFSET, IVTV_ENCODER_SIZE);
1006 itv->enc_mem = ioremap_nocache(itv->base_addr + IVTV_ENCODER_OFFSET,
1007 IVTV_ENCODER_SIZE);
1008 if (!itv->enc_mem) {
1009 IVTV_ERR("ioremap failed, perhaps increasing __VMALLOC_RESERVE in page.h\n");
Robert P. J. Daydab2ea42008-04-28 20:16:20 -03001010 IVTV_ERR("or disabling CONFIG_HIGHMEM4G into the kernel would help\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001011 retval = -ENOMEM;
1012 goto free_mem;
1013 }
1014
1015 if (itv->has_cx23415) {
1016 IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
1017 itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1018 itv->dec_mem = ioremap_nocache(itv->base_addr + IVTV_DECODER_OFFSET,
1019 IVTV_DECODER_SIZE);
1020 if (!itv->dec_mem) {
1021 IVTV_ERR("ioremap failed, perhaps increasing __VMALLOC_RESERVE in page.h\n");
Robert P. J. Daydab2ea42008-04-28 20:16:20 -03001022 IVTV_ERR("or disabling CONFIG_HIGHMEM4G into the kernel would help\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001023 retval = -ENOMEM;
1024 goto free_mem;
1025 }
1026 }
1027 else {
1028 itv->dec_mem = itv->enc_mem;
1029 }
1030
1031 /* map registers memory */
1032 IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
1033 itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1034 itv->reg_mem =
1035 ioremap_nocache(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1036 if (!itv->reg_mem) {
1037 IVTV_ERR("ioremap failed, perhaps increasing __VMALLOC_RESERVE in page.h\n");
Robert P. J. Daydab2ea42008-04-28 20:16:20 -03001038 IVTV_ERR("or disabling CONFIG_HIGHMEM4G into the kernel would help\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001039 retval = -ENOMEM;
1040 goto free_io;
1041 }
1042
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001043 retval = ivtv_gpio_init(itv);
1044 if (retval)
1045 goto free_io;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001046
1047 /* active i2c */
1048 IVTV_DEBUG_INFO("activating i2c...\n");
1049 if (init_ivtv_i2c(itv)) {
1050 IVTV_ERR("Could not initialize i2c\n");
Hans Verkuil18e16f92007-10-13 05:54:48 -03001051 goto free_io;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001052 }
1053
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001054 if (itv->card->hw_all & IVTV_HW_TVEEPROM) {
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001055 /* Based on the model number the cardtype may be changed.
1056 The PCI IDs are not always reliable. */
1057 ivtv_process_eeprom(itv);
1058 }
Hans Verkuilecfcc832008-04-26 08:48:26 -03001059 if (itv->card->comment)
1060 IVTV_INFO("%s", itv->card->comment);
1061 if (itv->card->v4l2_capabilities == 0) {
1062 /* card was detected but is not supported */
1063 retval = -ENODEV;
1064 goto free_i2c;
1065 }
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001066
1067 if (itv->std == 0) {
1068 itv->std = V4L2_STD_NTSC_M;
1069 }
1070
1071 if (itv->options.tuner == -1) {
1072 int i;
1073
1074 for (i = 0; i < IVTV_CARD_MAX_TUNERS; i++) {
1075 if ((itv->std & itv->card->tuners[i].std) == 0)
1076 continue;
1077 itv->options.tuner = itv->card->tuners[i].tuner;
1078 break;
1079 }
1080 }
1081 /* if no tuner was found, then pick the first tuner in the card list */
1082 if (itv->options.tuner == -1 && itv->card->tuners[0].std) {
1083 itv->std = itv->card->tuners[0].std;
Hans Verkuilc3cb4d92008-06-27 23:27:25 -03001084 if (itv->std & V4L2_STD_PAL)
1085 itv->std = V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
1086 else if (itv->std & V4L2_STD_NTSC)
1087 itv->std = V4L2_STD_NTSC_M;
1088 else if (itv->std & V4L2_STD_SECAM)
1089 itv->std = V4L2_STD_SECAM_L;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001090 itv->options.tuner = itv->card->tuners[0].tuner;
1091 }
1092 if (itv->options.radio == -1)
1093 itv->options.radio = (itv->card->radio_input.audio_type != 0);
1094
1095 /* The card is now fully identified, continue with card-specific
1096 initialization. */
1097 ivtv_init_struct2(itv);
1098
1099 ivtv_load_and_init_modules(itv);
1100
1101 if (itv->std & V4L2_STD_525_60) {
1102 itv->is_60hz = 1;
1103 itv->is_out_60hz = 1;
1104 } else {
1105 itv->is_50hz = 1;
1106 itv->is_out_50hz = 1;
1107 }
Ian Armstrong77aded62007-11-05 14:27:09 -03001108
1109 itv->yuv_info.osd_full_w = 720;
1110 itv->yuv_info.osd_full_h = itv->is_out_50hz ? 576 : 480;
1111 itv->yuv_info.v4l2_src_w = itv->yuv_info.osd_full_w;
1112 itv->yuv_info.v4l2_src_h = itv->yuv_info.osd_full_h;
1113
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001114 itv->params.video_gop_size = itv->is_60hz ? 15 : 12;
1115
1116 itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_MPG] = 0x08000;
1117 itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_PCM] = 0x01200;
1118 itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_MPG] = 0x10000;
Ian Armstrongc240ad02007-10-16 03:21:46 -03001119 itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_YUV] = 0x10000;
1120 itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_YUV] = 0x08000;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001121
1122 /* Setup VBI Raw Size. Should be big enough to hold PAL.
1123 It is possible to switch between PAL and NTSC, so we need to
1124 take the largest size here. */
1125 /* 1456 is multiple of 16, real size = 1444 */
1126 itv->vbi.raw_size = 1456;
1127 /* We use a buffer size of 1/2 of the total size needed for a
1128 frame. This is actually very useful, since we now receive
1129 a field at a time and that makes 'compressing' the raw data
1130 down to size by stripping off the SAV codes a lot easier.
1131 Note: having two different buffer sizes prevents standard
1132 switching on the fly. We need to find a better solution... */
1133 vbi_buf_size = itv->vbi.raw_size * (itv->is_60hz ? 24 : 36) / 2;
1134 itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_VBI] = vbi_buf_size;
1135 itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_VBI] = sizeof(struct v4l2_sliced_vbi_data) * 36;
1136
1137 if (itv->options.radio > 0)
1138 itv->v4l2_cap |= V4L2_CAP_RADIO;
1139
Hans Verkuild9009202007-12-07 21:01:15 -03001140 if (itv->options.tuner > -1) {
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001141 struct tuner_setup setup;
1142
1143 setup.addr = ADDR_UNSET;
1144 setup.type = itv->options.tuner;
1145 setup.mode_mask = T_ANALOG_TV; /* matches TV tuners */
Hans Verkuil0e614cd2007-12-21 21:33:36 -03001146 setup.tuner_callback = (setup.type == TUNER_XC2028) ?
1147 ivtv_reset_tuner_gpio : NULL;
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001148 ivtv_call_all(itv, tuner, s_type_addr, &setup);
Hans Verkuil0e614cd2007-12-21 21:33:36 -03001149 if (setup.type == TUNER_XC2028) {
1150 static struct xc2028_ctrl ctrl = {
1151 .fname = XC2028_DEFAULT_FIRMWARE,
1152 .max_len = 64,
1153 };
1154 struct v4l2_priv_tun_config cfg = {
1155 .tuner = itv->options.tuner,
1156 .priv = &ctrl,
1157 };
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001158 ivtv_call_all(itv, tuner, s_config, &cfg);
Hans Verkuil0e614cd2007-12-21 21:33:36 -03001159 }
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001160 }
1161
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001162 /* The tuner is fixed to the standard. The other inputs (e.g. S-Video)
1163 are not. */
1164 itv->tuner_std = itv->std;
1165
Hans Verkuil2ce55b62007-08-19 05:09:37 -03001166 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001167 ivtv_call_all(itv, video, s_std_output, itv->std);
Martin Dauskardt323a4912008-10-18 14:59:09 -03001168 /* Turn off the output signal. The mpeg decoder is not yet
1169 active so without this you would get a green image until the
1170 mpeg decoder becomes active. */
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001171 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0);
Hans Verkuil2ce55b62007-08-19 05:09:37 -03001172 }
1173
Hans Verkuilfee73162007-03-11 14:16:42 -03001174 /* clear interrupt mask, effectively disabling interrupts */
1175 ivtv_set_irq_mask(itv, 0xffffffff);
1176
1177 /* Register IRQ */
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001178 retval = request_irq(itv->pdev->irq, ivtv_irq_handler,
1179 IRQF_SHARED | IRQF_DISABLED, itv->v4l2_dev.name, (void *)itv);
Hans Verkuilfee73162007-03-11 14:16:42 -03001180 if (retval) {
1181 IVTV_ERR("Failed to register irq %d\n", retval);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001182 goto free_i2c;
1183 }
1184
1185 retval = ivtv_streams_setup(itv);
1186 if (retval) {
1187 IVTV_ERR("Error %d setting up streams\n", retval);
1188 goto free_irq;
Hans Verkuilfee73162007-03-11 14:16:42 -03001189 }
Hans Verkuil18e16f92007-10-13 05:54:48 -03001190 retval = ivtv_streams_register(itv);
1191 if (retval) {
1192 IVTV_ERR("Error %d registering devices\n", retval);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001193 goto free_streams;
Hans Verkuil18e16f92007-10-13 05:54:48 -03001194 }
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001195 IVTV_INFO("Initialized card: %s\n", itv->card_name);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001196 return 0;
1197
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001198free_streams:
Hans Verkuil3f983872008-05-01 10:31:12 -03001199 ivtv_streams_cleanup(itv, 1);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001200free_irq:
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001201 free_irq(itv->pdev->irq, (void *)itv);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001202free_i2c:
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001203 exit_ivtv_i2c(itv);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001204free_io:
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001205 ivtv_iounmap(itv);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001206free_mem:
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001207 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);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001211free_workqueue:
Hans Verkuil1e13f9e2007-03-10 06:52:02 -03001212 destroy_workqueue(itv->irq_work_queues);
Hans Verkuild86e2ee2008-04-26 08:43:50 -03001213err:
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001214 if (retval == 0)
1215 retval = -ENODEV;
1216 IVTV_ERR("Error %d on initialization\n", retval);
1217
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001218 v4l2_device_unregister(&itv->v4l2_dev);
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001219 kfree(itv);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001220 return retval;
1221}
1222
Hans Verkuilc976bc82007-07-22 12:52:40 -03001223int ivtv_init_on_first_open(struct ivtv *itv)
1224{
1225 struct v4l2_frequency vf;
Hans Verkuil3f038d82008-05-29 16:43:54 -03001226 /* Needed to call ioctls later */
1227 struct ivtv_open_id fh;
Hans Verkuilc976bc82007-07-22 12:52:40 -03001228 int fw_retry_count = 3;
1229 int video_input;
1230
Hans Verkuil3f038d82008-05-29 16:43:54 -03001231 fh.itv = itv;
1232
Hans Verkuil6e5eb592007-07-25 12:55:52 -03001233 if (test_bit(IVTV_F_I_FAILED, &itv->i_flags))
1234 return -ENXIO;
1235
1236 if (test_and_set_bit(IVTV_F_I_INITED, &itv->i_flags))
1237 return 0;
1238
Hans Verkuilc976bc82007-07-22 12:52:40 -03001239 while (--fw_retry_count > 0) {
1240 /* load firmware */
1241 if (ivtv_firmware_init(itv) == 0)
1242 break;
1243 if (fw_retry_count > 1)
1244 IVTV_WARN("Retry loading firmware\n");
1245 }
Hans Verkuil6e5eb592007-07-25 12:55:52 -03001246
Hans Verkuilc976bc82007-07-22 12:52:40 -03001247 if (fw_retry_count == 0) {
Hans Verkuil6e5eb592007-07-25 12:55:52 -03001248 set_bit(IVTV_F_I_FAILED, &itv->i_flags);
1249 return -ENXIO;
Hans Verkuilc976bc82007-07-22 12:52:40 -03001250 }
1251
1252 /* Try and get firmware versions */
1253 IVTV_DEBUG_INFO("Getting firmware version..\n");
1254 ivtv_firmware_versions(itv);
1255
1256 if (itv->card->hw_all & IVTV_HW_CX25840) {
1257 struct v4l2_control ctrl;
1258
Hans Verkuilcc26b072009-03-29 19:20:26 -03001259 v4l2_subdev_call(itv->sd_video, core, load_fw);
Hans Verkuilc976bc82007-07-22 12:52:40 -03001260 /* CX25840_CID_ENABLE_PVR150_WORKAROUND */
1261 ctrl.id = V4L2_CID_PRIVATE_BASE;
1262 ctrl.value = itv->pvr150_workaround;
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001263 v4l2_subdev_call(itv->sd_video, core, s_ctrl, &ctrl);
Hans Verkuilc976bc82007-07-22 12:52:40 -03001264 }
1265
1266 vf.tuner = 0;
1267 vf.type = V4L2_TUNER_ANALOG_TV;
1268 vf.frequency = 6400; /* the tuner 'baseline' frequency */
1269
1270 /* Set initial frequency. For PAL/SECAM broadcasts no
1271 'default' channel exists AFAIK. */
1272 if (itv->std == V4L2_STD_NTSC_M_JP) {
1273 vf.frequency = 1460; /* ch. 1 91250*16/1000 */
1274 }
1275 else if (itv->std & V4L2_STD_NTSC_M) {
1276 vf.frequency = 1076; /* ch. 4 67250*16/1000 */
1277 }
1278
1279 video_input = itv->active_input;
1280 itv->active_input++; /* Force update of input */
Hans Verkuil3f038d82008-05-29 16:43:54 -03001281 ivtv_s_input(NULL, &fh, video_input);
Hans Verkuilc976bc82007-07-22 12:52:40 -03001282
1283 /* Let the VIDIOC_S_STD ioctl do all the work, keeps the code
1284 in one place. */
1285 itv->std++; /* Force full standard initialization */
1286 itv->std_out = itv->std;
Hans Verkuil3f038d82008-05-29 16:43:54 -03001287 ivtv_s_frequency(NULL, &fh, &vf);
Hans Verkuilc976bc82007-07-22 12:52:40 -03001288
1289 if (itv->card->v4l2_capabilities & V4L2_CAP_VIDEO_OUTPUT) {
Martin Dauskardt323a4912008-10-18 14:59:09 -03001290 /* Turn on the TV-out: ivtv_init_mpeg_decoder() initializes
1291 the mpeg decoder so now the saa7127 receives a proper
1292 signal. */
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001293 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1);
Hans Verkuilc976bc82007-07-22 12:52:40 -03001294 ivtv_init_mpeg_decoder(itv);
1295 }
Hans Verkuilc976bc82007-07-22 12:52:40 -03001296
1297 /* On a cx23416 this seems to be able to enable DMA to the chip? */
1298 if (!itv->has_cx23415)
1299 write_reg_sync(0x03, IVTV_REG_DMACONTROL);
1300
1301 /* Default interrupts enabled. For the PVR350 this includes the
1302 decoder VSYNC interrupt, which is always on. It is not only used
1303 during decoding but also by the OSD.
1304 Some old PVR250 cards had a cx23415, so testing for that is too
1305 general. Instead test if the card has video output capability. */
1306 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1307 ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT | IVTV_IRQ_DEC_VSYNC);
1308 ivtv_set_osd_alpha(itv);
1309 }
1310 else
1311 ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT);
Ian Armstrong2443bae2010-03-13 20:22:34 -03001312
1313 /* For cards with video out, this call needs interrupts enabled */
1314 ivtv_s_std(NULL, &fh, &itv->tuner_std);
1315
Hans Verkuilc976bc82007-07-22 12:52:40 -03001316 return 0;
1317}
1318
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001319static void ivtv_remove(struct pci_dev *pdev)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001320{
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001321 struct v4l2_device *v4l2_dev = dev_get_drvdata(&pdev->dev);
1322 struct ivtv *itv = to_ivtv(v4l2_dev);
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001323 int i;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001324
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001325 IVTV_DEBUG_INFO("Removing card\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001326
Hans Verkuilc976bc82007-07-22 12:52:40 -03001327 if (test_bit(IVTV_F_I_INITED, &itv->i_flags)) {
1328 /* Stop all captures */
1329 IVTV_DEBUG_INFO("Stopping all streams\n");
1330 if (atomic_read(&itv->capturing) > 0)
1331 ivtv_stop_all_captures(itv);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001332
Hans Verkuilc976bc82007-07-22 12:52:40 -03001333 /* Stop all decoding */
1334 IVTV_DEBUG_INFO("Stopping decoding\n");
Martin Dauskardt323a4912008-10-18 14:59:09 -03001335
1336 /* Turn off the TV-out */
1337 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001338 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0);
Hans Verkuilc976bc82007-07-22 12:52:40 -03001339 if (atomic_read(&itv->decoding) > 0) {
1340 int type;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001341
Hans Verkuilc976bc82007-07-22 12:52:40 -03001342 if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags))
1343 type = IVTV_DEC_STREAM_TYPE_YUV;
1344 else
1345 type = IVTV_DEC_STREAM_TYPE_MPG;
1346 ivtv_stop_v4l2_decode_stream(&itv->streams[type],
1347 VIDEO_CMD_STOP_TO_BLACK | VIDEO_CMD_STOP_IMMEDIATELY, 0);
1348 }
1349 ivtv_halt_firmware(itv);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001350 }
1351
1352 /* Interrupts */
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001353 ivtv_set_irq_mask(itv, 0xffffffff);
1354 del_timer_sync(&itv->dma_timer);
1355
1356 /* Stop all Work Queues */
Hans Verkuil1e13f9e2007-03-10 06:52:02 -03001357 flush_workqueue(itv->irq_work_queues);
1358 destroy_workqueue(itv->irq_work_queues);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001359
Hans Verkuil3f983872008-05-01 10:31:12 -03001360 ivtv_streams_cleanup(itv, 1);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001361 ivtv_udma_free(itv);
1362
1363 exit_ivtv_i2c(itv);
1364
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001365 free_irq(itv->pdev->irq, (void *)itv);
Hans Verkuil27b5a392007-06-16 16:46:56 -03001366 ivtv_iounmap(itv);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001367
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001368 release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
1369 release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1370 if (itv->has_cx23415)
1371 release_mem_region(itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1372
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001373 pci_disable_device(itv->pdev);
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001374 for (i = 0; i < IVTV_VBI_FRAMES; i++)
1375 kfree(itv->vbi.sliced_mpeg_data[i]);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001376
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001377 printk(KERN_INFO "ivtv: Removed %s\n", itv->card_name);
Hans Verkuil8ac05ae2009-02-07 07:02:27 -03001378
1379 v4l2_device_unregister(&itv->v4l2_dev);
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001380 kfree(itv);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001381}
1382
1383/* define a pci_driver for card detection */
1384static struct pci_driver ivtv_pci_driver = {
1385 .name = "ivtv",
1386 .id_table = ivtv_pci_tbl,
1387 .probe = ivtv_probe,
1388 .remove = ivtv_remove,
1389};
1390
Peter Huewe9710e7a2009-11-04 15:28:33 -03001391static int __init module_start(void)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001392{
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001393 printk(KERN_INFO "ivtv: Start initialization, version %s\n", IVTV_VERSION);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001394
1395 /* Validate parameters */
1396 if (ivtv_first_minor < 0 || ivtv_first_minor >= IVTV_MAX_CARDS) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001397 printk(KERN_ERR "ivtv: Exiting, ivtv_first_minor must be between 0 and %d\n",
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001398 IVTV_MAX_CARDS - 1);
1399 return -1;
1400 }
1401
Hans Verkuil1aa32c22007-08-19 06:08:58 -03001402 if (ivtv_debug < 0 || ivtv_debug > 2047) {
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001403 ivtv_debug = 0;
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001404 printk(KERN_INFO "ivtv: Debug value must be >= 0 and <= 2047\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001405 }
1406
Hans Verkuil6773c1c2007-03-10 20:34:54 -03001407 if (pci_register_driver(&ivtv_pci_driver)) {
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001408 printk(KERN_ERR "ivtv: Error detecting PCI card\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001409 return -ENODEV;
1410 }
Hans Verkuil67ec09f2008-11-29 19:38:23 -03001411 printk(KERN_INFO "ivtv: End initialization\n");
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001412 return 0;
1413}
1414
Peter Huewe9710e7a2009-11-04 15:28:33 -03001415static void __exit module_cleanup(void)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001416{
Hans Verkuilf40a2912007-03-10 20:50:51 -03001417 pci_unregister_driver(&ivtv_pci_driver);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001418}
1419
Hans Verkuil7b3a0d42007-08-26 06:11:07 -03001420/* Note: These symbols are exported because they are used by the ivtvfb
Hans Verkuilb6735ac2007-03-10 06:59:44 -03001421 framebuffer module and an infrared module for the IR-blaster. */
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001422EXPORT_SYMBOL(ivtv_set_irq_mask);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001423EXPORT_SYMBOL(ivtv_api);
1424EXPORT_SYMBOL(ivtv_vapi);
1425EXPORT_SYMBOL(ivtv_vapi_result);
1426EXPORT_SYMBOL(ivtv_clear_irq_mask);
1427EXPORT_SYMBOL(ivtv_debug);
1428EXPORT_SYMBOL(ivtv_reset_ir_gpio);
1429EXPORT_SYMBOL(ivtv_udma_setup);
1430EXPORT_SYMBOL(ivtv_udma_unmap);
1431EXPORT_SYMBOL(ivtv_udma_alloc);
1432EXPORT_SYMBOL(ivtv_udma_prepare);
Hans Verkuil6e5eb592007-07-25 12:55:52 -03001433EXPORT_SYMBOL(ivtv_init_on_first_open);
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001434
1435module_init(module_start);
1436module_exit(module_cleanup);