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