1 /*
2  *
3  *
4  *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
5  *  Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>
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
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21 
22 #include <linux/kernel.h>
23 #include <linux/slab.h>
24 #include "pvrusb2-context.h"
25 #include "pvrusb2-hdw.h"
26 #include "pvrusb2.h"
27 #include "pvrusb2-debug.h"
28 #include "pvrusb2-v4l2.h"
29 #include "pvrusb2-ioread.h"
30 #include <linux/videodev2.h>
31 #include <linux/module.h>
32 #include <media/v4l2-dev.h>
33 #include <media/v4l2-device.h>
34 #include <media/v4l2-fh.h>
35 #include <media/v4l2-common.h>
36 #include <media/v4l2-ioctl.h>
37 
38 struct pvr2_v4l2_dev;
39 struct pvr2_v4l2_fh;
40 struct pvr2_v4l2;
41 
42 struct pvr2_v4l2_dev {
43 	struct video_device devbase; /* MUST be first! */
44 	struct pvr2_v4l2 *v4lp;
45 	struct pvr2_context_stream *stream;
46 	/* Information about this device: */
47 	enum pvr2_config config; /* Expected stream format */
48 	int v4l_type; /* V4L defined type for this device node */
49 	enum pvr2_v4l_type minor_type; /* pvr2-understood minor device type */
50 };
51 
52 struct pvr2_v4l2_fh {
53 	struct v4l2_fh fh;
54 	struct pvr2_channel channel;
55 	struct pvr2_v4l2_dev *pdi;
56 	struct pvr2_ioread *rhp;
57 	struct file *file;
58 	wait_queue_head_t wait_data;
59 	int fw_mode_flag;
60 	/* Map contiguous ordinal value to input id */
61 	unsigned char *input_map;
62 	unsigned int input_cnt;
63 };
64 
65 struct pvr2_v4l2 {
66 	struct pvr2_channel channel;
67 
68 	/* streams - Note that these must be separately, individually,
69 	 * allocated pointers.  This is because the v4l core is going to
70 	 * manage their deletion - separately, individually...  */
71 	struct pvr2_v4l2_dev *dev_video;
72 	struct pvr2_v4l2_dev *dev_radio;
73 };
74 
75 static int video_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
76 module_param_array(video_nr, int, NULL, 0444);
77 MODULE_PARM_DESC(video_nr, "Offset for device's video dev minor");
78 static int radio_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
79 module_param_array(radio_nr, int, NULL, 0444);
80 MODULE_PARM_DESC(radio_nr, "Offset for device's radio dev minor");
81 static int vbi_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
82 module_param_array(vbi_nr, int, NULL, 0444);
83 MODULE_PARM_DESC(vbi_nr, "Offset for device's vbi dev minor");
84 
85 static struct v4l2_fmtdesc pvr_fmtdesc [] = {
86 	{
87 		.index          = 0,
88 		.type           = V4L2_BUF_TYPE_VIDEO_CAPTURE,
89 		.flags          = V4L2_FMT_FLAG_COMPRESSED,
90 		.description    = "MPEG1/2",
91 		// This should really be V4L2_PIX_FMT_MPEG, but xawtv
92 		// breaks when I do that.
93 		.pixelformat    = 0, // V4L2_PIX_FMT_MPEG,
94 	}
95 };
96 
97 #define PVR_FORMAT_PIX  0
98 #define PVR_FORMAT_VBI  1
99 
100 static struct v4l2_format pvr_format [] = {
101 	[PVR_FORMAT_PIX] = {
102 		.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE,
103 		.fmt    = {
104 			.pix        = {
105 				.width          = 720,
106 				.height             = 576,
107 				// This should really be V4L2_PIX_FMT_MPEG,
108 				// but xawtv breaks when I do that.
109 				.pixelformat    = 0, // V4L2_PIX_FMT_MPEG,
110 				.field          = V4L2_FIELD_INTERLACED,
111 				.bytesperline   = 0,  // doesn't make sense
112 						      // here
113 				//FIXME : Don't know what to put here...
114 				.sizeimage          = (32*1024),
115 				.colorspace     = 0, // doesn't make sense here
116 				.priv           = 0
117 			}
118 		}
119 	},
120 	[PVR_FORMAT_VBI] = {
121 		.type   = V4L2_BUF_TYPE_VBI_CAPTURE,
122 		.fmt    = {
123 			.vbi        = {
124 				.sampling_rate = 27000000,
125 				.offset = 248,
126 				.samples_per_line = 1443,
127 				.sample_format = V4L2_PIX_FMT_GREY,
128 				.start = { 0, 0 },
129 				.count = { 0, 0 },
130 				.flags = 0,
131 			}
132 		}
133 	}
134 };
135 
136 
137 
138 /*
139  * This is part of Video 4 Linux API. These procedures handle ioctl() calls.
140  */
141 static int pvr2_querycap(struct file *file, void *priv, struct v4l2_capability *cap)
142 {
143 	struct pvr2_v4l2_fh *fh = file->private_data;
144 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
145 
146 	strlcpy(cap->driver, "pvrusb2", sizeof(cap->driver));
147 	strlcpy(cap->bus_info, pvr2_hdw_get_bus_info(hdw),
148 			sizeof(cap->bus_info));
149 	strlcpy(cap->card, pvr2_hdw_get_desc(hdw), sizeof(cap->card));
150 	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER |
151 			    V4L2_CAP_AUDIO | V4L2_CAP_RADIO |
152 			    V4L2_CAP_READWRITE | V4L2_CAP_DEVICE_CAPS;
153 	switch (fh->pdi->devbase.vfl_type) {
154 	case VFL_TYPE_GRABBER:
155 		cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_AUDIO;
156 		break;
157 	case VFL_TYPE_RADIO:
158 		cap->device_caps = V4L2_CAP_RADIO;
159 		break;
160 	}
161 	cap->device_caps |= V4L2_CAP_TUNER | V4L2_CAP_READWRITE;
162 	return 0;
163 }
164 
165 static int pvr2_g_std(struct file *file, void *priv, v4l2_std_id *std)
166 {
167 	struct pvr2_v4l2_fh *fh = file->private_data;
168 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
169 	int val = 0;
170 	int ret;
171 
172 	ret = pvr2_ctrl_get_value(
173 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_STDCUR), &val);
174 	*std = val;
175 	return ret;
176 }
177 
178 static int pvr2_s_std(struct file *file, void *priv, v4l2_std_id std)
179 {
180 	struct pvr2_v4l2_fh *fh = file->private_data;
181 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
182 
183 	return pvr2_ctrl_set_value(
184 		pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_STDCUR), std);
185 }
186 
187 static int pvr2_querystd(struct file *file, void *priv, v4l2_std_id *std)
188 {
189 	struct pvr2_v4l2_fh *fh = file->private_data;
190 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
191 	int val = 0;
192 	int ret;
193 
194 	ret = pvr2_ctrl_get_value(
195 		pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_STDDETECT), &val);
196 	*std = val;
197 	return ret;
198 }
199 
200 static int pvr2_enum_input(struct file *file, void *priv, struct v4l2_input *vi)
201 {
202 	struct pvr2_v4l2_fh *fh = file->private_data;
203 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
204 	struct pvr2_ctrl *cptr;
205 	struct v4l2_input tmp;
206 	unsigned int cnt;
207 	int val;
208 
209 	cptr = pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_INPUT);
210 
211 	memset(&tmp, 0, sizeof(tmp));
212 	tmp.index = vi->index;
213 	if (vi->index >= fh->input_cnt)
214 		return -EINVAL;
215 	val = fh->input_map[vi->index];
216 	switch (val) {
217 	case PVR2_CVAL_INPUT_TV:
218 	case PVR2_CVAL_INPUT_DTV:
219 	case PVR2_CVAL_INPUT_RADIO:
220 		tmp.type = V4L2_INPUT_TYPE_TUNER;
221 		break;
222 	case PVR2_CVAL_INPUT_SVIDEO:
223 	case PVR2_CVAL_INPUT_COMPOSITE:
224 		tmp.type = V4L2_INPUT_TYPE_CAMERA;
225 		break;
226 	default:
227 		return -EINVAL;
228 	}
229 
230 	cnt = 0;
231 	pvr2_ctrl_get_valname(cptr, val,
232 			tmp.name, sizeof(tmp.name) - 1, &cnt);
233 	tmp.name[cnt] = 0;
234 
235 	/* Don't bother with audioset, since this driver currently
236 	   always switches the audio whenever the video is
237 	   switched. */
238 
239 	/* Handling std is a tougher problem.  It doesn't make
240 	   sense in cases where a device might be multi-standard.
241 	   We could just copy out the current value for the
242 	   standard, but it can change over time.  For now just
243 	   leave it zero. */
244 	*vi = tmp;
245 	return 0;
246 }
247 
248 static int pvr2_g_input(struct file *file, void *priv, unsigned int *i)
249 {
250 	struct pvr2_v4l2_fh *fh = file->private_data;
251 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
252 	unsigned int idx;
253 	struct pvr2_ctrl *cptr;
254 	int val;
255 	int ret;
256 
257 	cptr = pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_INPUT);
258 	val = 0;
259 	ret = pvr2_ctrl_get_value(cptr, &val);
260 	*i = 0;
261 	for (idx = 0; idx < fh->input_cnt; idx++) {
262 		if (fh->input_map[idx] == val) {
263 			*i = idx;
264 			break;
265 		}
266 	}
267 	return ret;
268 }
269 
270 static int pvr2_s_input(struct file *file, void *priv, unsigned int inp)
271 {
272 	struct pvr2_v4l2_fh *fh = file->private_data;
273 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
274 
275 	if (inp >= fh->input_cnt)
276 		return -EINVAL;
277 	return pvr2_ctrl_set_value(
278 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_INPUT),
279 			fh->input_map[inp]);
280 }
281 
282 static int pvr2_enumaudio(struct file *file, void *priv, struct v4l2_audio *vin)
283 {
284 	/* pkt: FIXME: We are returning one "fake" input here
285 	   which could very well be called "whatever_we_like".
286 	   This is for apps that want to see an audio input
287 	   just to feel comfortable, as well as to test if
288 	   it can do stereo or sth. There is actually no guarantee
289 	   that the actual audio input cannot change behind the app's
290 	   back, but most applications should not mind that either.
291 
292 	   Hopefully, mplayer people will work with us on this (this
293 	   whole mess is to support mplayer pvr://), or Hans will come
294 	   up with a more standard way to say "we have inputs but we
295 	   don 't want you to change them independent of video" which
296 	   will sort this mess.
297 	 */
298 
299 	if (vin->index > 0)
300 		return -EINVAL;
301 	strncpy(vin->name, "PVRUSB2 Audio", 14);
302 	vin->capability = V4L2_AUDCAP_STEREO;
303 	return 0;
304 }
305 
306 static int pvr2_g_audio(struct file *file, void *priv, struct v4l2_audio *vin)
307 {
308 	/* pkt: FIXME: see above comment (VIDIOC_ENUMAUDIO) */
309 	vin->index = 0;
310 	strncpy(vin->name, "PVRUSB2 Audio", 14);
311 	vin->capability = V4L2_AUDCAP_STEREO;
312 	return 0;
313 }
314 
315 static int pvr2_s_audio(struct file *file, void *priv, const struct v4l2_audio *vout)
316 {
317 	if (vout->index)
318 		return -EINVAL;
319 	return 0;
320 }
321 
322 static int pvr2_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)
323 {
324 	struct pvr2_v4l2_fh *fh = file->private_data;
325 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
326 
327 	if (vt->index != 0)
328 		return -EINVAL; /* Only answer for the 1st tuner */
329 
330 	pvr2_hdw_execute_tuner_poll(hdw);
331 	return pvr2_hdw_get_tuner_status(hdw, vt);
332 }
333 
334 static int pvr2_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)
335 {
336 	struct pvr2_v4l2_fh *fh = file->private_data;
337 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
338 
339 	if (vt->index != 0)
340 		return -EINVAL;
341 
342 	return pvr2_ctrl_set_value(
343 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_AUDIOMODE),
344 			vt->audmode);
345 }
346 
347 static int pvr2_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *vf)
348 {
349 	struct pvr2_v4l2_fh *fh = file->private_data;
350 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
351 	unsigned long fv;
352 	struct v4l2_tuner vt;
353 	int cur_input;
354 	struct pvr2_ctrl *ctrlp;
355 	int ret;
356 
357 	ret = pvr2_hdw_get_tuner_status(hdw, &vt);
358 	if (ret != 0)
359 		return ret;
360 	ctrlp = pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_INPUT);
361 	ret = pvr2_ctrl_get_value(ctrlp, &cur_input);
362 	if (ret != 0)
363 		return ret;
364 	if (vf->type == V4L2_TUNER_RADIO) {
365 		if (cur_input != PVR2_CVAL_INPUT_RADIO)
366 			pvr2_ctrl_set_value(ctrlp, PVR2_CVAL_INPUT_RADIO);
367 	} else {
368 		if (cur_input == PVR2_CVAL_INPUT_RADIO)
369 			pvr2_ctrl_set_value(ctrlp, PVR2_CVAL_INPUT_TV);
370 	}
371 	fv = vf->frequency;
372 	if (vt.capability & V4L2_TUNER_CAP_LOW)
373 		fv = (fv * 125) / 2;
374 	else
375 		fv = fv * 62500;
376 	return pvr2_ctrl_set_value(
377 			pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_FREQUENCY),fv);
378 }
379 
380 static int pvr2_g_frequency(struct file *file, void *priv, struct v4l2_frequency *vf)
381 {
382 	struct pvr2_v4l2_fh *fh = file->private_data;
383 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
384 	int val = 0;
385 	int cur_input;
386 	struct v4l2_tuner vt;
387 	int ret;
388 
389 	ret = pvr2_hdw_get_tuner_status(hdw, &vt);
390 	if (ret != 0)
391 		return ret;
392 	ret = pvr2_ctrl_get_value(
393 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_FREQUENCY),
394 			&val);
395 	if (ret != 0)
396 		return ret;
397 	pvr2_ctrl_get_value(
398 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_INPUT),
399 			&cur_input);
400 	if (cur_input == PVR2_CVAL_INPUT_RADIO)
401 		vf->type = V4L2_TUNER_RADIO;
402 	else
403 		vf->type = V4L2_TUNER_ANALOG_TV;
404 	if (vt.capability & V4L2_TUNER_CAP_LOW)
405 		val = (val * 2) / 125;
406 	else
407 		val /= 62500;
408 	vf->frequency = val;
409 	return 0;
410 }
411 
412 static int pvr2_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *fd)
413 {
414 	/* Only one format is supported : mpeg.*/
415 	if (fd->index != 0)
416 		return -EINVAL;
417 
418 	memcpy(fd, pvr_fmtdesc, sizeof(struct v4l2_fmtdesc));
419 	return 0;
420 }
421 
422 static int pvr2_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)
423 {
424 	struct pvr2_v4l2_fh *fh = file->private_data;
425 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
426 	int val;
427 
428 	memcpy(vf, &pvr_format[PVR_FORMAT_PIX], sizeof(struct v4l2_format));
429 	val = 0;
430 	pvr2_ctrl_get_value(
431 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_HRES),
432 			&val);
433 	vf->fmt.pix.width = val;
434 	val = 0;
435 	pvr2_ctrl_get_value(
436 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_VRES),
437 			&val);
438 	vf->fmt.pix.height = val;
439 	return 0;
440 }
441 
442 static int pvr2_try_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)
443 {
444 	struct pvr2_v4l2_fh *fh = file->private_data;
445 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
446 	int lmin, lmax, ldef;
447 	struct pvr2_ctrl *hcp, *vcp;
448 	int h = vf->fmt.pix.height;
449 	int w = vf->fmt.pix.width;
450 
451 	hcp = pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_HRES);
452 	vcp = pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_VRES);
453 
454 	lmin = pvr2_ctrl_get_min(hcp);
455 	lmax = pvr2_ctrl_get_max(hcp);
456 	pvr2_ctrl_get_def(hcp, &ldef);
457 	if (w == -1)
458 		w = ldef;
459 	else if (w < lmin)
460 		w = lmin;
461 	else if (w > lmax)
462 		w = lmax;
463 	lmin = pvr2_ctrl_get_min(vcp);
464 	lmax = pvr2_ctrl_get_max(vcp);
465 	pvr2_ctrl_get_def(vcp, &ldef);
466 	if (h == -1)
467 		h = ldef;
468 	else if (h < lmin)
469 		h = lmin;
470 	else if (h > lmax)
471 		h = lmax;
472 
473 	memcpy(vf, &pvr_format[PVR_FORMAT_PIX],
474 			sizeof(struct v4l2_format));
475 	vf->fmt.pix.width = w;
476 	vf->fmt.pix.height = h;
477 	return 0;
478 }
479 
480 static int pvr2_s_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)
481 {
482 	struct pvr2_v4l2_fh *fh = file->private_data;
483 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
484 	struct pvr2_ctrl *hcp, *vcp;
485 	int ret = pvr2_try_fmt_vid_cap(file, fh, vf);
486 
487 	if (ret)
488 		return ret;
489 	hcp = pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_HRES);
490 	vcp = pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_VRES);
491 	pvr2_ctrl_set_value(hcp, vf->fmt.pix.width);
492 	pvr2_ctrl_set_value(vcp, vf->fmt.pix.height);
493 	return 0;
494 }
495 
496 static int pvr2_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
497 {
498 	struct pvr2_v4l2_fh *fh = file->private_data;
499 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
500 	struct pvr2_v4l2_dev *pdi = fh->pdi;
501 	int ret;
502 
503 	if (!fh->pdi->stream) {
504 		/* No stream defined for this node.  This means
505 		   that we're not currently allowed to stream from
506 		   this node. */
507 		return -EPERM;
508 	}
509 	ret = pvr2_hdw_set_stream_type(hdw, pdi->config);
510 	if (ret < 0)
511 		return ret;
512 	return pvr2_hdw_set_streaming(hdw, !0);
513 }
514 
515 static int pvr2_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
516 {
517 	struct pvr2_v4l2_fh *fh = file->private_data;
518 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
519 
520 	if (!fh->pdi->stream) {
521 		/* No stream defined for this node.  This means
522 		   that we're not currently allowed to stream from
523 		   this node. */
524 		return -EPERM;
525 	}
526 	return pvr2_hdw_set_streaming(hdw, 0);
527 }
528 
529 static int pvr2_queryctrl(struct file *file, void *priv,
530 		struct v4l2_queryctrl *vc)
531 {
532 	struct pvr2_v4l2_fh *fh = file->private_data;
533 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
534 	struct pvr2_ctrl *cptr;
535 	int val;
536 
537 	if (vc->id & V4L2_CTRL_FLAG_NEXT_CTRL) {
538 		cptr = pvr2_hdw_get_ctrl_nextv4l(
539 				hdw, (vc->id & ~V4L2_CTRL_FLAG_NEXT_CTRL));
540 		if (cptr)
541 			vc->id = pvr2_ctrl_get_v4lid(cptr);
542 	} else {
543 		cptr = pvr2_hdw_get_ctrl_v4l(hdw, vc->id);
544 	}
545 	if (!cptr) {
546 		pvr2_trace(PVR2_TRACE_V4LIOCTL,
547 				"QUERYCTRL id=0x%x not implemented here",
548 				vc->id);
549 		return -EINVAL;
550 	}
551 
552 	pvr2_trace(PVR2_TRACE_V4LIOCTL,
553 			"QUERYCTRL id=0x%x mapping name=%s (%s)",
554 			vc->id, pvr2_ctrl_get_name(cptr),
555 			pvr2_ctrl_get_desc(cptr));
556 	strlcpy(vc->name, pvr2_ctrl_get_desc(cptr), sizeof(vc->name));
557 	vc->flags = pvr2_ctrl_get_v4lflags(cptr);
558 	pvr2_ctrl_get_def(cptr, &val);
559 	vc->default_value = val;
560 	switch (pvr2_ctrl_get_type(cptr)) {
561 	case pvr2_ctl_enum:
562 		vc->type = V4L2_CTRL_TYPE_MENU;
563 		vc->minimum = 0;
564 		vc->maximum = pvr2_ctrl_get_cnt(cptr) - 1;
565 		vc->step = 1;
566 		break;
567 	case pvr2_ctl_bool:
568 		vc->type = V4L2_CTRL_TYPE_BOOLEAN;
569 		vc->minimum = 0;
570 		vc->maximum = 1;
571 		vc->step = 1;
572 		break;
573 	case pvr2_ctl_int:
574 		vc->type = V4L2_CTRL_TYPE_INTEGER;
575 		vc->minimum = pvr2_ctrl_get_min(cptr);
576 		vc->maximum = pvr2_ctrl_get_max(cptr);
577 		vc->step = 1;
578 		break;
579 	default:
580 		pvr2_trace(PVR2_TRACE_V4LIOCTL,
581 				"QUERYCTRL id=0x%x name=%s not mappable",
582 				vc->id, pvr2_ctrl_get_name(cptr));
583 		return -EINVAL;
584 	}
585 	return 0;
586 }
587 
588 static int pvr2_querymenu(struct file *file, void *priv, struct v4l2_querymenu *vm)
589 {
590 	struct pvr2_v4l2_fh *fh = file->private_data;
591 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
592 	unsigned int cnt = 0;
593 	int ret;
594 
595 	ret = pvr2_ctrl_get_valname(pvr2_hdw_get_ctrl_v4l(hdw, vm->id),
596 			vm->index,
597 			vm->name, sizeof(vm->name) - 1,
598 			&cnt);
599 	vm->name[cnt] = 0;
600 	return ret;
601 }
602 
603 static int pvr2_g_ctrl(struct file *file, void *priv, struct v4l2_control *vc)
604 {
605 	struct pvr2_v4l2_fh *fh = file->private_data;
606 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
607 	int val = 0;
608 	int ret;
609 
610 	ret = pvr2_ctrl_get_value(pvr2_hdw_get_ctrl_v4l(hdw, vc->id),
611 			&val);
612 	vc->value = val;
613 	return ret;
614 }
615 
616 static int pvr2_s_ctrl(struct file *file, void *priv, struct v4l2_control *vc)
617 {
618 	struct pvr2_v4l2_fh *fh = file->private_data;
619 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
620 
621 	return pvr2_ctrl_set_value(pvr2_hdw_get_ctrl_v4l(hdw, vc->id),
622 			vc->value);
623 }
624 
625 static int pvr2_g_ext_ctrls(struct file *file, void *priv,
626 					struct v4l2_ext_controls *ctls)
627 {
628 	struct pvr2_v4l2_fh *fh = file->private_data;
629 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
630 	struct v4l2_ext_control *ctrl;
631 	struct pvr2_ctrl *cptr;
632 	unsigned int idx;
633 	int val;
634 	int ret;
635 
636 	ret = 0;
637 	for (idx = 0; idx < ctls->count; idx++) {
638 		ctrl = ctls->controls + idx;
639 		cptr = pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id);
640 		if (cptr) {
641 			if (ctls->which == V4L2_CTRL_WHICH_DEF_VAL)
642 				pvr2_ctrl_get_def(cptr, &val);
643 			else
644 				ret = pvr2_ctrl_get_value(cptr, &val);
645 		} else
646 			ret = -EINVAL;
647 
648 		if (ret) {
649 			ctls->error_idx = idx;
650 			return ret;
651 		}
652 		/* Ensure that if read as a 64 bit value, the user
653 		   will still get a hopefully sane value */
654 		ctrl->value64 = 0;
655 		ctrl->value = val;
656 	}
657 	return 0;
658 }
659 
660 static int pvr2_s_ext_ctrls(struct file *file, void *priv,
661 		struct v4l2_ext_controls *ctls)
662 {
663 	struct pvr2_v4l2_fh *fh = file->private_data;
664 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
665 	struct v4l2_ext_control *ctrl;
666 	unsigned int idx;
667 	int ret;
668 
669 	/* Default value cannot be changed */
670 	if (ctls->which == V4L2_CTRL_WHICH_DEF_VAL)
671 		return -EINVAL;
672 
673 	ret = 0;
674 	for (idx = 0; idx < ctls->count; idx++) {
675 		ctrl = ctls->controls + idx;
676 		ret = pvr2_ctrl_set_value(
677 				pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id),
678 				ctrl->value);
679 		if (ret) {
680 			ctls->error_idx = idx;
681 			return ret;
682 		}
683 	}
684 	return 0;
685 }
686 
687 static int pvr2_try_ext_ctrls(struct file *file, void *priv,
688 		struct v4l2_ext_controls *ctls)
689 {
690 	struct pvr2_v4l2_fh *fh = file->private_data;
691 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
692 	struct v4l2_ext_control *ctrl;
693 	struct pvr2_ctrl *pctl;
694 	unsigned int idx;
695 
696 	/* For the moment just validate that the requested control
697 	   actually exists. */
698 	for (idx = 0; idx < ctls->count; idx++) {
699 		ctrl = ctls->controls + idx;
700 		pctl = pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id);
701 		if (!pctl) {
702 			ctls->error_idx = idx;
703 			return -EINVAL;
704 		}
705 	}
706 	return 0;
707 }
708 
709 static int pvr2_cropcap(struct file *file, void *priv, struct v4l2_cropcap *cap)
710 {
711 	struct pvr2_v4l2_fh *fh = file->private_data;
712 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
713 	int ret;
714 
715 	if (cap->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
716 		return -EINVAL;
717 	ret = pvr2_hdw_get_cropcap(hdw, cap);
718 	cap->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; /* paranoia */
719 	return ret;
720 }
721 
722 static int pvr2_g_selection(struct file *file, void *priv,
723 			    struct v4l2_selection *sel)
724 {
725 	struct pvr2_v4l2_fh *fh = file->private_data;
726 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
727 	struct v4l2_cropcap cap;
728 	int val = 0;
729 	int ret;
730 
731 	if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
732 		return -EINVAL;
733 
734 	cap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
735 
736 	switch (sel->target) {
737 	case V4L2_SEL_TGT_CROP:
738 		ret = pvr2_ctrl_get_value(
739 			  pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPL), &val);
740 		if (ret != 0)
741 			return -EINVAL;
742 		sel->r.left = val;
743 		ret = pvr2_ctrl_get_value(
744 			  pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPT), &val);
745 		if (ret != 0)
746 			return -EINVAL;
747 		sel->r.top = val;
748 		ret = pvr2_ctrl_get_value(
749 			  pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPW), &val);
750 		if (ret != 0)
751 			return -EINVAL;
752 		sel->r.width = val;
753 		ret = pvr2_ctrl_get_value(
754 			  pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPH), &val);
755 		if (ret != 0)
756 			return -EINVAL;
757 		sel->r.height = val;
758 		break;
759 	case V4L2_SEL_TGT_CROP_DEFAULT:
760 		ret = pvr2_hdw_get_cropcap(hdw, &cap);
761 		sel->r = cap.defrect;
762 		break;
763 	case V4L2_SEL_TGT_CROP_BOUNDS:
764 		ret = pvr2_hdw_get_cropcap(hdw, &cap);
765 		sel->r = cap.bounds;
766 		break;
767 	default:
768 		return -EINVAL;
769 	}
770 	return ret;
771 }
772 
773 static int pvr2_s_selection(struct file *file, void *priv,
774 			    struct v4l2_selection *sel)
775 {
776 	struct pvr2_v4l2_fh *fh = file->private_data;
777 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
778 	int ret;
779 
780 	if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ||
781 	    sel->target != V4L2_SEL_TGT_CROP)
782 		return -EINVAL;
783 	ret = pvr2_ctrl_set_value(
784 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPL),
785 			sel->r.left);
786 	if (ret != 0)
787 		return -EINVAL;
788 	ret = pvr2_ctrl_set_value(
789 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPT),
790 			sel->r.top);
791 	if (ret != 0)
792 		return -EINVAL;
793 	ret = pvr2_ctrl_set_value(
794 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPW),
795 			sel->r.width);
796 	if (ret != 0)
797 		return -EINVAL;
798 	ret = pvr2_ctrl_set_value(
799 			pvr2_hdw_get_ctrl_by_id(hdw, PVR2_CID_CROPH),
800 			sel->r.height);
801 	if (ret != 0)
802 		return -EINVAL;
803 	return 0;
804 }
805 
806 static int pvr2_log_status(struct file *file, void *priv)
807 {
808 	struct pvr2_v4l2_fh *fh = file->private_data;
809 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
810 
811 	pvr2_hdw_trigger_module_log(hdw);
812 	return 0;
813 }
814 
815 static const struct v4l2_ioctl_ops pvr2_ioctl_ops = {
816 	.vidioc_querycap		    = pvr2_querycap,
817 	.vidioc_s_audio			    = pvr2_s_audio,
818 	.vidioc_g_audio			    = pvr2_g_audio,
819 	.vidioc_enumaudio		    = pvr2_enumaudio,
820 	.vidioc_enum_input		    = pvr2_enum_input,
821 	.vidioc_cropcap			    = pvr2_cropcap,
822 	.vidioc_s_selection		    = pvr2_s_selection,
823 	.vidioc_g_selection		    = pvr2_g_selection,
824 	.vidioc_g_input			    = pvr2_g_input,
825 	.vidioc_s_input			    = pvr2_s_input,
826 	.vidioc_g_frequency		    = pvr2_g_frequency,
827 	.vidioc_s_frequency		    = pvr2_s_frequency,
828 	.vidioc_s_tuner			    = pvr2_s_tuner,
829 	.vidioc_g_tuner			    = pvr2_g_tuner,
830 	.vidioc_g_std			    = pvr2_g_std,
831 	.vidioc_s_std			    = pvr2_s_std,
832 	.vidioc_querystd		    = pvr2_querystd,
833 	.vidioc_log_status		    = pvr2_log_status,
834 	.vidioc_enum_fmt_vid_cap	    = pvr2_enum_fmt_vid_cap,
835 	.vidioc_g_fmt_vid_cap		    = pvr2_g_fmt_vid_cap,
836 	.vidioc_s_fmt_vid_cap		    = pvr2_s_fmt_vid_cap,
837 	.vidioc_try_fmt_vid_cap		    = pvr2_try_fmt_vid_cap,
838 	.vidioc_streamon		    = pvr2_streamon,
839 	.vidioc_streamoff		    = pvr2_streamoff,
840 	.vidioc_queryctrl		    = pvr2_queryctrl,
841 	.vidioc_querymenu		    = pvr2_querymenu,
842 	.vidioc_g_ctrl			    = pvr2_g_ctrl,
843 	.vidioc_s_ctrl			    = pvr2_s_ctrl,
844 	.vidioc_g_ext_ctrls		    = pvr2_g_ext_ctrls,
845 	.vidioc_s_ext_ctrls		    = pvr2_s_ext_ctrls,
846 	.vidioc_try_ext_ctrls		    = pvr2_try_ext_ctrls,
847 };
848 
849 static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip)
850 {
851 	struct pvr2_hdw *hdw = dip->v4lp->channel.mc_head->hdw;
852 	enum pvr2_config cfg = dip->config;
853 	char msg[80];
854 	unsigned int mcnt;
855 
856 	/* Construct the unregistration message *before* we actually
857 	   perform the unregistration step.  By doing it this way we don't
858 	   have to worry about potentially touching deleted resources. */
859 	mcnt = scnprintf(msg, sizeof(msg) - 1,
860 			 "pvrusb2: unregistered device %s [%s]",
861 			 video_device_node_name(&dip->devbase),
862 			 pvr2_config_get_name(cfg));
863 	msg[mcnt] = 0;
864 
865 	pvr2_hdw_v4l_store_minor_number(hdw,dip->minor_type,-1);
866 
867 	/* Paranoia */
868 	dip->v4lp = NULL;
869 	dip->stream = NULL;
870 
871 	/* Actual deallocation happens later when all internal references
872 	   are gone. */
873 	video_unregister_device(&dip->devbase);
874 
875 	printk(KERN_INFO "%s\n", msg);
876 
877 }
878 
879 
880 static void pvr2_v4l2_dev_disassociate_parent(struct pvr2_v4l2_dev *dip)
881 {
882 	if (!dip) return;
883 	if (!dip->devbase.v4l2_dev->dev) return;
884 	dip->devbase.v4l2_dev->dev = NULL;
885 	device_move(&dip->devbase.dev, NULL, DPM_ORDER_NONE);
886 }
887 
888 
889 static void pvr2_v4l2_destroy_no_lock(struct pvr2_v4l2 *vp)
890 {
891 	if (vp->dev_video) {
892 		pvr2_v4l2_dev_destroy(vp->dev_video);
893 		vp->dev_video = NULL;
894 	}
895 	if (vp->dev_radio) {
896 		pvr2_v4l2_dev_destroy(vp->dev_radio);
897 		vp->dev_radio = NULL;
898 	}
899 
900 	pvr2_trace(PVR2_TRACE_STRUCT,"Destroying pvr2_v4l2 id=%p",vp);
901 	pvr2_channel_done(&vp->channel);
902 	kfree(vp);
903 }
904 
905 
906 static void pvr2_video_device_release(struct video_device *vdev)
907 {
908 	struct pvr2_v4l2_dev *dev;
909 	dev = container_of(vdev,struct pvr2_v4l2_dev,devbase);
910 	kfree(dev);
911 }
912 
913 
914 static void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
915 {
916 	struct pvr2_v4l2 *vp;
917 	vp = container_of(chp,struct pvr2_v4l2,channel);
918 	if (!vp->channel.mc_head->disconnect_flag) return;
919 	pvr2_v4l2_dev_disassociate_parent(vp->dev_video);
920 	pvr2_v4l2_dev_disassociate_parent(vp->dev_radio);
921 	if (!list_empty(&vp->dev_video->devbase.fh_list) ||
922 	    !list_empty(&vp->dev_radio->devbase.fh_list))
923 		return;
924 	pvr2_v4l2_destroy_no_lock(vp);
925 }
926 
927 
928 static long pvr2_v4l2_ioctl(struct file *file,
929 			   unsigned int cmd, unsigned long arg)
930 {
931 
932 	struct pvr2_v4l2_fh *fh = file->private_data;
933 	struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
934 	long ret = -EINVAL;
935 
936 	if (pvrusb2_debug & PVR2_TRACE_V4LIOCTL)
937 		v4l_printk_ioctl(pvr2_hdw_get_driver_name(hdw), cmd);
938 
939 	if (!pvr2_hdw_dev_ok(hdw)) {
940 		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
941 			   "ioctl failed - bad or no context");
942 		return -EFAULT;
943 	}
944 
945 	ret = video_ioctl2(file, cmd, arg);
946 
947 	pvr2_hdw_commit_ctl(hdw);
948 
949 	if (ret < 0) {
950 		if (pvrusb2_debug & PVR2_TRACE_V4LIOCTL) {
951 			pvr2_trace(PVR2_TRACE_V4LIOCTL,
952 				   "pvr2_v4l2_do_ioctl failure, ret=%ld command was:",
953 ret);
954 			v4l_printk_ioctl(pvr2_hdw_get_driver_name(hdw), cmd);
955 		}
956 	} else {
957 		pvr2_trace(PVR2_TRACE_V4LIOCTL,
958 			   "pvr2_v4l2_do_ioctl complete, ret=%ld (0x%lx)",
959 			   ret, ret);
960 	}
961 	return ret;
962 
963 }
964 
965 
966 static int pvr2_v4l2_release(struct file *file)
967 {
968 	struct pvr2_v4l2_fh *fhp = file->private_data;
969 	struct pvr2_v4l2 *vp = fhp->pdi->v4lp;
970 	struct pvr2_hdw *hdw = fhp->channel.mc_head->hdw;
971 
972 	pvr2_trace(PVR2_TRACE_OPEN_CLOSE,"pvr2_v4l2_release");
973 
974 	if (fhp->rhp) {
975 		struct pvr2_stream *sp;
976 		pvr2_hdw_set_streaming(hdw,0);
977 		sp = pvr2_ioread_get_stream(fhp->rhp);
978 		if (sp) pvr2_stream_set_callback(sp,NULL,NULL);
979 		pvr2_ioread_destroy(fhp->rhp);
980 		fhp->rhp = NULL;
981 	}
982 
983 	v4l2_fh_del(&fhp->fh);
984 	v4l2_fh_exit(&fhp->fh);
985 	file->private_data = NULL;
986 
987 	pvr2_channel_done(&fhp->channel);
988 	pvr2_trace(PVR2_TRACE_STRUCT,
989 		   "Destroying pvr_v4l2_fh id=%p",fhp);
990 	if (fhp->input_map) {
991 		kfree(fhp->input_map);
992 		fhp->input_map = NULL;
993 	}
994 	kfree(fhp);
995 	if (vp->channel.mc_head->disconnect_flag &&
996 	    list_empty(&vp->dev_video->devbase.fh_list) &&
997 	    list_empty(&vp->dev_radio->devbase.fh_list)) {
998 		pvr2_v4l2_destroy_no_lock(vp);
999 	}
1000 	return 0;
1001 }
1002 
1003 
1004 static int pvr2_v4l2_open(struct file *file)
1005 {
1006 	struct pvr2_v4l2_dev *dip; /* Our own context pointer */
1007 	struct pvr2_v4l2_fh *fhp;
1008 	struct pvr2_v4l2 *vp;
1009 	struct pvr2_hdw *hdw;
1010 	unsigned int input_mask = 0;
1011 	unsigned int input_cnt,idx;
1012 	int ret = 0;
1013 
1014 	dip = container_of(video_devdata(file),struct pvr2_v4l2_dev,devbase);
1015 
1016 	vp = dip->v4lp;
1017 	hdw = vp->channel.hdw;
1018 
1019 	pvr2_trace(PVR2_TRACE_OPEN_CLOSE,"pvr2_v4l2_open");
1020 
1021 	if (!pvr2_hdw_dev_ok(hdw)) {
1022 		pvr2_trace(PVR2_TRACE_OPEN_CLOSE,
1023 			   "pvr2_v4l2_open: hardware not ready");
1024 		return -EIO;
1025 	}
1026 
1027 	fhp = kzalloc(sizeof(*fhp),GFP_KERNEL);
1028 	if (!fhp) {
1029 		return -ENOMEM;
1030 	}
1031 
1032 	v4l2_fh_init(&fhp->fh, &dip->devbase);
1033 	init_waitqueue_head(&fhp->wait_data);
1034 	fhp->pdi = dip;
1035 
1036 	pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr_v4l2_fh id=%p",fhp);
1037 	pvr2_channel_init(&fhp->channel,vp->channel.mc_head);
1038 
1039 	if (dip->v4l_type == VFL_TYPE_RADIO) {
1040 		/* Opening device as a radio, legal input selection subset
1041 		   is just the radio. */
1042 		input_mask = (1 << PVR2_CVAL_INPUT_RADIO);
1043 	} else {
1044 		/* Opening the main V4L device, legal input selection
1045 		   subset includes all analog inputs. */
1046 		input_mask = ((1 << PVR2_CVAL_INPUT_RADIO) |
1047 			      (1 << PVR2_CVAL_INPUT_TV) |
1048 			      (1 << PVR2_CVAL_INPUT_COMPOSITE) |
1049 			      (1 << PVR2_CVAL_INPUT_SVIDEO));
1050 	}
1051 	ret = pvr2_channel_limit_inputs(&fhp->channel,input_mask);
1052 	if (ret) {
1053 		pvr2_channel_done(&fhp->channel);
1054 		pvr2_trace(PVR2_TRACE_STRUCT,
1055 			   "Destroying pvr_v4l2_fh id=%p (input mask error)",
1056 			   fhp);
1057 
1058 		kfree(fhp);
1059 		return ret;
1060 	}
1061 
1062 	input_mask &= pvr2_hdw_get_input_available(hdw);
1063 	input_cnt = 0;
1064 	for (idx = 0; idx < (sizeof(input_mask) << 3); idx++) {
1065 		if (input_mask & (1 << idx)) input_cnt++;
1066 	}
1067 	fhp->input_cnt = input_cnt;
1068 	fhp->input_map = kzalloc(input_cnt,GFP_KERNEL);
1069 	if (!fhp->input_map) {
1070 		pvr2_channel_done(&fhp->channel);
1071 		pvr2_trace(PVR2_TRACE_STRUCT,
1072 			   "Destroying pvr_v4l2_fh id=%p (input map failure)",
1073 			   fhp);
1074 		kfree(fhp);
1075 		return -ENOMEM;
1076 	}
1077 	input_cnt = 0;
1078 	for (idx = 0; idx < (sizeof(input_mask) << 3); idx++) {
1079 		if (!(input_mask & (1 << idx))) continue;
1080 		fhp->input_map[input_cnt++] = idx;
1081 	}
1082 
1083 	fhp->file = file;
1084 	file->private_data = fhp;
1085 
1086 	fhp->fw_mode_flag = pvr2_hdw_cpufw_get_enabled(hdw);
1087 	v4l2_fh_add(&fhp->fh);
1088 
1089 	return 0;
1090 }
1091 
1092 
1093 static void pvr2_v4l2_notify(struct pvr2_v4l2_fh *fhp)
1094 {
1095 	wake_up(&fhp->wait_data);
1096 }
1097 
1098 static int pvr2_v4l2_iosetup(struct pvr2_v4l2_fh *fh)
1099 {
1100 	int ret;
1101 	struct pvr2_stream *sp;
1102 	struct pvr2_hdw *hdw;
1103 	if (fh->rhp) return 0;
1104 
1105 	if (!fh->pdi->stream) {
1106 		/* No stream defined for this node.  This means that we're
1107 		   not currently allowed to stream from this node. */
1108 		return -EPERM;
1109 	}
1110 
1111 	/* First read() attempt.  Try to claim the stream and start
1112 	   it... */
1113 	if ((ret = pvr2_channel_claim_stream(&fh->channel,
1114 					     fh->pdi->stream)) != 0) {
1115 		/* Someone else must already have it */
1116 		return ret;
1117 	}
1118 
1119 	fh->rhp = pvr2_channel_create_mpeg_stream(fh->pdi->stream);
1120 	if (!fh->rhp) {
1121 		pvr2_channel_claim_stream(&fh->channel,NULL);
1122 		return -ENOMEM;
1123 	}
1124 
1125 	hdw = fh->channel.mc_head->hdw;
1126 	sp = fh->pdi->stream->stream;
1127 	pvr2_stream_set_callback(sp,(pvr2_stream_callback)pvr2_v4l2_notify,fh);
1128 	pvr2_hdw_set_stream_type(hdw,fh->pdi->config);
1129 	if ((ret = pvr2_hdw_set_streaming(hdw,!0)) < 0) return ret;
1130 	return pvr2_ioread_set_enabled(fh->rhp,!0);
1131 }
1132 
1133 
1134 static ssize_t pvr2_v4l2_read(struct file *file,
1135 			      char __user *buff, size_t count, loff_t *ppos)
1136 {
1137 	struct pvr2_v4l2_fh *fh = file->private_data;
1138 	int ret;
1139 
1140 	if (fh->fw_mode_flag) {
1141 		struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
1142 		char *tbuf;
1143 		int c1,c2;
1144 		int tcnt = 0;
1145 		unsigned int offs = *ppos;
1146 
1147 		tbuf = kmalloc(PAGE_SIZE,GFP_KERNEL);
1148 		if (!tbuf) return -ENOMEM;
1149 
1150 		while (count) {
1151 			c1 = count;
1152 			if (c1 > PAGE_SIZE) c1 = PAGE_SIZE;
1153 			c2 = pvr2_hdw_cpufw_get(hdw,offs,tbuf,c1);
1154 			if (c2 < 0) {
1155 				tcnt = c2;
1156 				break;
1157 			}
1158 			if (!c2) break;
1159 			if (copy_to_user(buff,tbuf,c2)) {
1160 				tcnt = -EFAULT;
1161 				break;
1162 			}
1163 			offs += c2;
1164 			tcnt += c2;
1165 			buff += c2;
1166 			count -= c2;
1167 			*ppos += c2;
1168 		}
1169 		kfree(tbuf);
1170 		return tcnt;
1171 	}
1172 
1173 	if (!fh->rhp) {
1174 		ret = pvr2_v4l2_iosetup(fh);
1175 		if (ret) {
1176 			return ret;
1177 		}
1178 	}
1179 
1180 	for (;;) {
1181 		ret = pvr2_ioread_read(fh->rhp,buff,count);
1182 		if (ret >= 0) break;
1183 		if (ret != -EAGAIN) break;
1184 		if (file->f_flags & O_NONBLOCK) break;
1185 		/* Doing blocking I/O.  Wait here. */
1186 		ret = wait_event_interruptible(
1187 			fh->wait_data,
1188 			pvr2_ioread_avail(fh->rhp) >= 0);
1189 		if (ret < 0) break;
1190 	}
1191 
1192 	return ret;
1193 }
1194 
1195 
1196 static unsigned int pvr2_v4l2_poll(struct file *file, poll_table *wait)
1197 {
1198 	unsigned int mask = 0;
1199 	struct pvr2_v4l2_fh *fh = file->private_data;
1200 	int ret;
1201 
1202 	if (fh->fw_mode_flag) {
1203 		mask |= POLLIN | POLLRDNORM;
1204 		return mask;
1205 	}
1206 
1207 	if (!fh->rhp) {
1208 		ret = pvr2_v4l2_iosetup(fh);
1209 		if (ret) return POLLERR;
1210 	}
1211 
1212 	poll_wait(file,&fh->wait_data,wait);
1213 
1214 	if (pvr2_ioread_avail(fh->rhp) >= 0) {
1215 		mask |= POLLIN | POLLRDNORM;
1216 	}
1217 
1218 	return mask;
1219 }
1220 
1221 
1222 static const struct v4l2_file_operations vdev_fops = {
1223 	.owner      = THIS_MODULE,
1224 	.open       = pvr2_v4l2_open,
1225 	.release    = pvr2_v4l2_release,
1226 	.read       = pvr2_v4l2_read,
1227 	.unlocked_ioctl = pvr2_v4l2_ioctl,
1228 	.poll       = pvr2_v4l2_poll,
1229 };
1230 
1231 
1232 static struct video_device vdev_template = {
1233 	.fops       = &vdev_fops,
1234 };
1235 
1236 
1237 static void pvr2_v4l2_dev_init(struct pvr2_v4l2_dev *dip,
1238 			       struct pvr2_v4l2 *vp,
1239 			       int v4l_type)
1240 {
1241 	int mindevnum;
1242 	int unit_number;
1243 	struct pvr2_hdw *hdw;
1244 	int *nr_ptr = NULL;
1245 	dip->v4lp = vp;
1246 
1247 	hdw = vp->channel.mc_head->hdw;
1248 	dip->v4l_type = v4l_type;
1249 	switch (v4l_type) {
1250 	case VFL_TYPE_GRABBER:
1251 		dip->stream = &vp->channel.mc_head->video_stream;
1252 		dip->config = pvr2_config_mpeg;
1253 		dip->minor_type = pvr2_v4l_type_video;
1254 		nr_ptr = video_nr;
1255 		if (!dip->stream) {
1256 			pr_err(KBUILD_MODNAME
1257 				": Failed to set up pvrusb2 v4l video dev due to missing stream instance\n");
1258 			return;
1259 		}
1260 		break;
1261 	case VFL_TYPE_VBI:
1262 		dip->config = pvr2_config_vbi;
1263 		dip->minor_type = pvr2_v4l_type_vbi;
1264 		nr_ptr = vbi_nr;
1265 		break;
1266 	case VFL_TYPE_RADIO:
1267 		dip->stream = &vp->channel.mc_head->video_stream;
1268 		dip->config = pvr2_config_mpeg;
1269 		dip->minor_type = pvr2_v4l_type_radio;
1270 		nr_ptr = radio_nr;
1271 		break;
1272 	default:
1273 		/* Bail out (this should be impossible) */
1274 		pr_err(KBUILD_MODNAME ": Failed to set up pvrusb2 v4l dev due to unrecognized config\n");
1275 		return;
1276 	}
1277 
1278 	dip->devbase = vdev_template;
1279 	dip->devbase.release = pvr2_video_device_release;
1280 	dip->devbase.ioctl_ops = &pvr2_ioctl_ops;
1281 	{
1282 		int val;
1283 		pvr2_ctrl_get_value(
1284 			pvr2_hdw_get_ctrl_by_id(hdw,
1285 						PVR2_CID_STDAVAIL), &val);
1286 		dip->devbase.tvnorms = (v4l2_std_id)val;
1287 	}
1288 
1289 	mindevnum = -1;
1290 	unit_number = pvr2_hdw_get_unit_number(hdw);
1291 	if (nr_ptr && (unit_number >= 0) && (unit_number < PVR_NUM)) {
1292 		mindevnum = nr_ptr[unit_number];
1293 	}
1294 	pvr2_hdw_set_v4l2_dev(hdw, &dip->devbase);
1295 	if ((video_register_device(&dip->devbase,
1296 				   dip->v4l_type, mindevnum) < 0) &&
1297 	    (video_register_device(&dip->devbase,
1298 				   dip->v4l_type, -1) < 0)) {
1299 		pr_err(KBUILD_MODNAME
1300 			": Failed to register pvrusb2 v4l device\n");
1301 	}
1302 
1303 	printk(KERN_INFO "pvrusb2: registered device %s [%s]\n",
1304 	       video_device_node_name(&dip->devbase),
1305 	       pvr2_config_get_name(dip->config));
1306 
1307 	pvr2_hdw_v4l_store_minor_number(hdw,
1308 					dip->minor_type,dip->devbase.minor);
1309 }
1310 
1311 
1312 struct pvr2_v4l2 *pvr2_v4l2_create(struct pvr2_context *mnp)
1313 {
1314 	struct pvr2_v4l2 *vp;
1315 
1316 	vp = kzalloc(sizeof(*vp),GFP_KERNEL);
1317 	if (!vp) return vp;
1318 	pvr2_channel_init(&vp->channel,mnp);
1319 	pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr2_v4l2 id=%p",vp);
1320 
1321 	vp->channel.check_func = pvr2_v4l2_internal_check;
1322 
1323 	/* register streams */
1324 	vp->dev_video = kzalloc(sizeof(*vp->dev_video),GFP_KERNEL);
1325 	if (!vp->dev_video) goto fail;
1326 	pvr2_v4l2_dev_init(vp->dev_video,vp,VFL_TYPE_GRABBER);
1327 	if (pvr2_hdw_get_input_available(vp->channel.mc_head->hdw) &
1328 	    (1 << PVR2_CVAL_INPUT_RADIO)) {
1329 		vp->dev_radio = kzalloc(sizeof(*vp->dev_radio),GFP_KERNEL);
1330 		if (!vp->dev_radio) goto fail;
1331 		pvr2_v4l2_dev_init(vp->dev_radio,vp,VFL_TYPE_RADIO);
1332 	}
1333 
1334 	return vp;
1335  fail:
1336 	pvr2_trace(PVR2_TRACE_STRUCT,"Failure creating pvr2_v4l2 id=%p",vp);
1337 	pvr2_v4l2_destroy_no_lock(vp);
1338 	return NULL;
1339 }
1340