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