Lines Matching +full:standard +full:- +full:vt

1 // SPDX-License-Identifier: GPL-2.0-only
10 #include "pvrusb2-context.h"
11 #include "pvrusb2-hdw.h"
13 #include "pvrusb2-debug.h"
14 #include "pvrusb2-v4l2.h"
15 #include "pvrusb2-ioread.h"
18 #include <media/v4l2-dev.h>
19 #include <media/v4l2-device.h>
20 #include <media/v4l2-fh.h>
21 #include <media/v4l2-common.h>
22 #include <media/v4l2-ioctl.h>
35 enum pvr2_v4l_type minor_type; /* pvr2-understood minor device type */
54 /* streams - Note that these must be separately, individually,
56 * manage their deletion - separately, individually... */
61 static int video_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
64 static int radio_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
67 static int vbi_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
111 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_querycap()
112 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_querycap()
114 strscpy(cap->driver, "pvrusb2", sizeof(cap->driver)); in pvr2_querycap()
115 strscpy(cap->bus_info, pvr2_hdw_get_bus_info(hdw), in pvr2_querycap()
116 sizeof(cap->bus_info)); in pvr2_querycap()
117 strscpy(cap->card, pvr2_hdw_get_desc(hdw), sizeof(cap->card)); in pvr2_querycap()
118 cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | in pvr2_querycap()
126 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_std()
127 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_std()
139 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_std()
140 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_std()
151 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_querystd()
152 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_querystd()
164 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_enum_input()
165 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_enum_input()
174 tmp.index = vi->index; in pvr2_enum_input()
175 if (vi->index >= fh->input_cnt) in pvr2_enum_input()
176 return -EINVAL; in pvr2_enum_input()
177 val = fh->input_map[vi->index]; in pvr2_enum_input()
189 return -EINVAL; in pvr2_enum_input()
194 tmp.name, sizeof(tmp.name) - 1, &cnt); in pvr2_enum_input()
202 sense in cases where a device might be multi-standard. in pvr2_enum_input()
204 standard, but it can change over time. For now just in pvr2_enum_input()
212 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_input()
213 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_input()
223 for (idx = 0; idx < fh->input_cnt; idx++) { in pvr2_g_input()
224 if (fh->input_map[idx] == val) { in pvr2_g_input()
234 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_input()
235 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_input()
238 if (inp >= fh->input_cnt) in pvr2_s_input()
239 return -EINVAL; in pvr2_s_input()
242 fh->input_map[inp]); in pvr2_s_input()
259 up with a more standard way to say "we have inputs but we in pvr2_enumaudio()
264 if (vin->index > 0) in pvr2_enumaudio()
265 return -EINVAL; in pvr2_enumaudio()
266 strscpy(vin->name, "PVRUSB2 Audio", sizeof(vin->name)); in pvr2_enumaudio()
267 vin->capability = V4L2_AUDCAP_STEREO; in pvr2_enumaudio()
274 vin->index = 0; in pvr2_g_audio()
275 strscpy(vin->name, "PVRUSB2 Audio", sizeof(vin->name)); in pvr2_g_audio()
276 vin->capability = V4L2_AUDCAP_STEREO; in pvr2_g_audio()
282 if (vout->index) in pvr2_s_audio()
283 return -EINVAL; in pvr2_s_audio()
287 static int pvr2_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt) in pvr2_g_tuner() argument
289 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_tuner()
290 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_tuner()
292 if (vt->index != 0) in pvr2_g_tuner()
293 return -EINVAL; /* Only answer for the 1st tuner */ in pvr2_g_tuner()
296 return pvr2_hdw_get_tuner_status(hdw, vt); in pvr2_g_tuner()
299 static int pvr2_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt) in pvr2_s_tuner() argument
301 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_tuner()
302 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_tuner()
305 if (vt->index != 0) in pvr2_s_tuner()
306 return -EINVAL; in pvr2_s_tuner()
310 vt->audmode); in pvr2_s_tuner()
317 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_frequency()
318 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_frequency()
320 struct v4l2_tuner vt; in pvr2_s_frequency() local
325 ret = pvr2_hdw_get_tuner_status(hdw, &vt); in pvr2_s_frequency()
332 if (vf->type == V4L2_TUNER_RADIO) { in pvr2_s_frequency()
339 fv = vf->frequency; in pvr2_s_frequency()
340 if (vt.capability & V4L2_TUNER_CAP_LOW) in pvr2_s_frequency()
352 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_frequency()
353 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_frequency()
356 struct v4l2_tuner vt; in pvr2_g_frequency() local
359 ret = pvr2_hdw_get_tuner_status(hdw, &vt); in pvr2_g_frequency()
371 vf->type = V4L2_TUNER_RADIO; in pvr2_g_frequency()
373 vf->type = V4L2_TUNER_ANALOG_TV; in pvr2_g_frequency()
374 if (vt.capability & V4L2_TUNER_CAP_LOW) in pvr2_g_frequency()
378 vf->frequency = val; in pvr2_g_frequency()
385 if (fd->index) in pvr2_enum_fmt_vid_cap()
386 return -EINVAL; in pvr2_enum_fmt_vid_cap()
388 fd->pixelformat = V4L2_PIX_FMT_MPEG; in pvr2_enum_fmt_vid_cap()
394 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_fmt_vid_cap()
395 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_fmt_vid_cap()
403 vf->fmt.pix.width = val; in pvr2_g_fmt_vid_cap()
408 vf->fmt.pix.height = val; in pvr2_g_fmt_vid_cap()
414 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_try_fmt_vid_cap()
415 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_try_fmt_vid_cap()
418 int h = vf->fmt.pix.height; in pvr2_try_fmt_vid_cap()
419 int w = vf->fmt.pix.width; in pvr2_try_fmt_vid_cap()
427 if (w == -1) in pvr2_try_fmt_vid_cap()
436 if (h == -1) in pvr2_try_fmt_vid_cap()
445 vf->fmt.pix.width = w; in pvr2_try_fmt_vid_cap()
446 vf->fmt.pix.height = h; in pvr2_try_fmt_vid_cap()
452 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_fmt_vid_cap()
453 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_fmt_vid_cap()
461 pvr2_ctrl_set_value(hcp, vf->fmt.pix.width); in pvr2_s_fmt_vid_cap()
462 pvr2_ctrl_set_value(vcp, vf->fmt.pix.height); in pvr2_s_fmt_vid_cap()
469 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_streamon()
470 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_streamon()
471 struct pvr2_v4l2_dev *pdi = fh->pdi; in pvr2_streamon()
474 if (!fh->pdi->stream) { in pvr2_streamon()
478 return -EPERM; in pvr2_streamon()
480 ret = pvr2_hdw_set_stream_type(hdw, pdi->config); in pvr2_streamon()
488 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_streamoff()
489 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_streamoff()
491 if (!fh->pdi->stream) { in pvr2_streamoff()
495 return -EPERM; in pvr2_streamoff()
503 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_queryctrl()
504 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_queryctrl()
508 if (vc->id & V4L2_CTRL_FLAG_NEXT_CTRL) { in pvr2_queryctrl()
510 hdw, (vc->id & ~V4L2_CTRL_FLAG_NEXT_CTRL)); in pvr2_queryctrl()
512 vc->id = pvr2_ctrl_get_v4lid(cptr); in pvr2_queryctrl()
514 cptr = pvr2_hdw_get_ctrl_v4l(hdw, vc->id); in pvr2_queryctrl()
519 vc->id); in pvr2_queryctrl()
520 return -EINVAL; in pvr2_queryctrl()
525 vc->id, pvr2_ctrl_get_name(cptr), in pvr2_queryctrl()
527 strscpy(vc->name, pvr2_ctrl_get_desc(cptr), sizeof(vc->name)); in pvr2_queryctrl()
528 vc->flags = pvr2_ctrl_get_v4lflags(cptr); in pvr2_queryctrl()
530 vc->default_value = val; in pvr2_queryctrl()
533 vc->type = V4L2_CTRL_TYPE_MENU; in pvr2_queryctrl()
534 vc->minimum = 0; in pvr2_queryctrl()
535 vc->maximum = pvr2_ctrl_get_cnt(cptr) - 1; in pvr2_queryctrl()
536 vc->step = 1; in pvr2_queryctrl()
539 vc->type = V4L2_CTRL_TYPE_BOOLEAN; in pvr2_queryctrl()
540 vc->minimum = 0; in pvr2_queryctrl()
541 vc->maximum = 1; in pvr2_queryctrl()
542 vc->step = 1; in pvr2_queryctrl()
545 vc->type = V4L2_CTRL_TYPE_INTEGER; in pvr2_queryctrl()
546 vc->minimum = pvr2_ctrl_get_min(cptr); in pvr2_queryctrl()
547 vc->maximum = pvr2_ctrl_get_max(cptr); in pvr2_queryctrl()
548 vc->step = 1; in pvr2_queryctrl()
553 vc->id, pvr2_ctrl_get_name(cptr)); in pvr2_queryctrl()
554 return -EINVAL; in pvr2_queryctrl()
561 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_querymenu()
562 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_querymenu()
566 ret = pvr2_ctrl_get_valname(pvr2_hdw_get_ctrl_v4l(hdw, vm->id), in pvr2_querymenu()
567 vm->index, in pvr2_querymenu()
568 vm->name, sizeof(vm->name) - 1, in pvr2_querymenu()
570 vm->name[cnt] = 0; in pvr2_querymenu()
576 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_ctrl()
577 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_ctrl()
581 ret = pvr2_ctrl_get_value(pvr2_hdw_get_ctrl_v4l(hdw, vc->id), in pvr2_g_ctrl()
583 vc->value = val; in pvr2_g_ctrl()
589 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_ctrl()
590 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_ctrl()
593 ret = pvr2_ctrl_set_value(pvr2_hdw_get_ctrl_v4l(hdw, vc->id), in pvr2_s_ctrl()
594 vc->value); in pvr2_s_ctrl()
602 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_ext_ctrls()
603 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_ext_ctrls()
611 for (idx = 0; idx < ctls->count; idx++) { in pvr2_g_ext_ctrls()
612 ctrl = ctls->controls + idx; in pvr2_g_ext_ctrls()
613 cptr = pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id); in pvr2_g_ext_ctrls()
615 if (ctls->which == V4L2_CTRL_WHICH_DEF_VAL) in pvr2_g_ext_ctrls()
620 ret = -EINVAL; in pvr2_g_ext_ctrls()
623 ctls->error_idx = idx; in pvr2_g_ext_ctrls()
628 ctrl->value64 = 0; in pvr2_g_ext_ctrls()
629 ctrl->value = val; in pvr2_g_ext_ctrls()
637 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_ext_ctrls()
638 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_ext_ctrls()
644 for (idx = 0; idx < ctls->count; idx++) { in pvr2_s_ext_ctrls()
645 ctrl = ctls->controls + idx; in pvr2_s_ext_ctrls()
647 pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id), in pvr2_s_ext_ctrls()
648 ctrl->value); in pvr2_s_ext_ctrls()
650 ctls->error_idx = idx; in pvr2_s_ext_ctrls()
662 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_try_ext_ctrls()
663 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_try_ext_ctrls()
670 for (idx = 0; idx < ctls->count; idx++) { in pvr2_try_ext_ctrls()
671 ctrl = ctls->controls + idx; in pvr2_try_ext_ctrls()
672 pctl = pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id); in pvr2_try_ext_ctrls()
674 ctls->error_idx = idx; in pvr2_try_ext_ctrls()
675 return -EINVAL; in pvr2_try_ext_ctrls()
684 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_pixelaspect()
685 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_pixelaspect()
690 return -EINVAL; in pvr2_g_pixelaspect()
700 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_g_selection()
701 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_g_selection()
706 if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) in pvr2_g_selection()
707 return -EINVAL; in pvr2_g_selection()
711 switch (sel->target) { in pvr2_g_selection()
716 return -EINVAL; in pvr2_g_selection()
717 sel->r.left = val; in pvr2_g_selection()
721 return -EINVAL; in pvr2_g_selection()
722 sel->r.top = val; in pvr2_g_selection()
726 return -EINVAL; in pvr2_g_selection()
727 sel->r.width = val; in pvr2_g_selection()
731 return -EINVAL; in pvr2_g_selection()
732 sel->r.height = val; in pvr2_g_selection()
736 sel->r = cap.defrect; in pvr2_g_selection()
740 sel->r = cap.bounds; in pvr2_g_selection()
743 return -EINVAL; in pvr2_g_selection()
751 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_s_selection()
752 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_s_selection()
755 if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE || in pvr2_s_selection()
756 sel->target != V4L2_SEL_TGT_CROP) in pvr2_s_selection()
757 return -EINVAL; in pvr2_s_selection()
760 sel->r.left); in pvr2_s_selection()
765 sel->r.top); in pvr2_s_selection()
770 sel->r.width); in pvr2_s_selection()
775 sel->r.height); in pvr2_s_selection()
783 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_log_status()
784 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_log_status()
826 struct pvr2_hdw *hdw = dip->v4lp->channel.mc_head->hdw; in pvr2_v4l2_dev_destroy()
827 enum pvr2_config cfg = dip->config; in pvr2_v4l2_dev_destroy()
834 mcnt = scnprintf(msg, sizeof(msg) - 1, in pvr2_v4l2_dev_destroy()
836 video_device_node_name(&dip->devbase), in pvr2_v4l2_dev_destroy()
840 pvr2_hdw_v4l_store_minor_number(hdw,dip->minor_type,-1); in pvr2_v4l2_dev_destroy()
843 dip->v4lp = NULL; in pvr2_v4l2_dev_destroy()
844 dip->stream = NULL; in pvr2_v4l2_dev_destroy()
848 video_unregister_device(&dip->devbase); in pvr2_v4l2_dev_destroy()
858 if (!dip->devbase.v4l2_dev->dev) return; in pvr2_v4l2_dev_disassociate_parent()
859 dip->devbase.v4l2_dev->dev = NULL; in pvr2_v4l2_dev_disassociate_parent()
860 device_move(&dip->devbase.dev, NULL, DPM_ORDER_NONE); in pvr2_v4l2_dev_disassociate_parent()
866 if (vp->dev_video) { in pvr2_v4l2_destroy_no_lock()
867 pvr2_v4l2_dev_destroy(vp->dev_video); in pvr2_v4l2_destroy_no_lock()
868 vp->dev_video = NULL; in pvr2_v4l2_destroy_no_lock()
870 if (vp->dev_radio) { in pvr2_v4l2_destroy_no_lock()
871 pvr2_v4l2_dev_destroy(vp->dev_radio); in pvr2_v4l2_destroy_no_lock()
872 vp->dev_radio = NULL; in pvr2_v4l2_destroy_no_lock()
876 pvr2_channel_done(&vp->channel); in pvr2_v4l2_destroy_no_lock()
893 if (!vp->channel.mc_head->disconnect_flag) return; in pvr2_v4l2_internal_check()
894 pvr2_v4l2_dev_disassociate_parent(vp->dev_video); in pvr2_v4l2_internal_check()
895 pvr2_v4l2_dev_disassociate_parent(vp->dev_radio); in pvr2_v4l2_internal_check()
896 if (!list_empty(&vp->dev_video->devbase.fh_list) || in pvr2_v4l2_internal_check()
897 (vp->dev_radio && in pvr2_v4l2_internal_check()
898 !list_empty(&vp->dev_radio->devbase.fh_list))) { in pvr2_v4l2_internal_check()
900 "pvr2_v4l2 internal_check exit-empty id=%p", vp); in pvr2_v4l2_internal_check()
909 struct pvr2_v4l2_fh *fhp = file->private_data; in pvr2_v4l2_release()
910 struct pvr2_v4l2 *vp = fhp->pdi->v4lp; in pvr2_v4l2_release()
911 struct pvr2_hdw *hdw = fhp->channel.mc_head->hdw; in pvr2_v4l2_release()
915 if (fhp->rhp) { in pvr2_v4l2_release()
918 sp = pvr2_ioread_get_stream(fhp->rhp); in pvr2_v4l2_release()
920 pvr2_ioread_destroy(fhp->rhp); in pvr2_v4l2_release()
921 fhp->rhp = NULL; in pvr2_v4l2_release()
924 v4l2_fh_del(&fhp->fh); in pvr2_v4l2_release()
925 v4l2_fh_exit(&fhp->fh); in pvr2_v4l2_release()
926 file->private_data = NULL; in pvr2_v4l2_release()
928 pvr2_channel_done(&fhp->channel); in pvr2_v4l2_release()
931 if (fhp->input_map) { in pvr2_v4l2_release()
932 kfree(fhp->input_map); in pvr2_v4l2_release()
933 fhp->input_map = NULL; in pvr2_v4l2_release()
936 if (vp->channel.mc_head->disconnect_flag && in pvr2_v4l2_release()
937 list_empty(&vp->dev_video->devbase.fh_list) && in pvr2_v4l2_release()
938 (!vp->dev_radio || in pvr2_v4l2_release()
939 list_empty(&vp->dev_radio->devbase.fh_list))) { in pvr2_v4l2_release()
958 vp = dip->v4lp; in pvr2_v4l2_open()
959 hdw = vp->channel.hdw; in pvr2_v4l2_open()
966 return -EIO; in pvr2_v4l2_open()
971 return -ENOMEM; in pvr2_v4l2_open()
974 v4l2_fh_init(&fhp->fh, &dip->devbase); in pvr2_v4l2_open()
975 init_waitqueue_head(&fhp->wait_data); in pvr2_v4l2_open()
976 fhp->pdi = dip; in pvr2_v4l2_open()
979 pvr2_channel_init(&fhp->channel,vp->channel.mc_head); in pvr2_v4l2_open()
981 if (dip->v4l_type == VFL_TYPE_RADIO) { in pvr2_v4l2_open()
993 ret = pvr2_channel_limit_inputs(&fhp->channel,input_mask); in pvr2_v4l2_open()
995 pvr2_channel_done(&fhp->channel); in pvr2_v4l2_open()
999 v4l2_fh_exit(&fhp->fh); in pvr2_v4l2_open()
1009 fhp->input_cnt = input_cnt; in pvr2_v4l2_open()
1010 fhp->input_map = kzalloc(input_cnt,GFP_KERNEL); in pvr2_v4l2_open()
1011 if (!fhp->input_map) { in pvr2_v4l2_open()
1012 pvr2_channel_done(&fhp->channel); in pvr2_v4l2_open()
1016 v4l2_fh_exit(&fhp->fh); in pvr2_v4l2_open()
1018 return -ENOMEM; in pvr2_v4l2_open()
1023 fhp->input_map[input_cnt++] = idx; in pvr2_v4l2_open()
1026 fhp->file = file; in pvr2_v4l2_open()
1027 file->private_data = fhp; in pvr2_v4l2_open()
1029 fhp->fw_mode_flag = pvr2_hdw_cpufw_get_enabled(hdw); in pvr2_v4l2_open()
1030 v4l2_fh_add(&fhp->fh); in pvr2_v4l2_open()
1040 wake_up(&fhp->wait_data); in pvr2_v4l2_notify()
1048 if (fh->rhp) return 0; in pvr2_v4l2_iosetup()
1050 if (!fh->pdi->stream) { in pvr2_v4l2_iosetup()
1053 return -EPERM; in pvr2_v4l2_iosetup()
1058 if ((ret = pvr2_channel_claim_stream(&fh->channel, in pvr2_v4l2_iosetup()
1059 fh->pdi->stream)) != 0) { in pvr2_v4l2_iosetup()
1064 fh->rhp = pvr2_channel_create_mpeg_stream(fh->pdi->stream); in pvr2_v4l2_iosetup()
1065 if (!fh->rhp) { in pvr2_v4l2_iosetup()
1066 pvr2_channel_claim_stream(&fh->channel,NULL); in pvr2_v4l2_iosetup()
1067 return -ENOMEM; in pvr2_v4l2_iosetup()
1070 hdw = fh->channel.mc_head->hdw; in pvr2_v4l2_iosetup()
1071 sp = fh->pdi->stream->stream; in pvr2_v4l2_iosetup()
1073 pvr2_hdw_set_stream_type(hdw,fh->pdi->config); in pvr2_v4l2_iosetup()
1075 return pvr2_ioread_set_enabled(fh->rhp,!0); in pvr2_v4l2_iosetup()
1082 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_v4l2_read()
1085 if (fh->fw_mode_flag) { in pvr2_v4l2_read()
1086 struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; in pvr2_v4l2_read()
1093 if (!tbuf) return -ENOMEM; in pvr2_v4l2_read()
1105 tcnt = -EFAULT; in pvr2_v4l2_read()
1111 count -= c2; in pvr2_v4l2_read()
1118 if (!fh->rhp) { in pvr2_v4l2_read()
1126 ret = pvr2_ioread_read(fh->rhp,buff,count); in pvr2_v4l2_read()
1128 if (ret != -EAGAIN) break; in pvr2_v4l2_read()
1129 if (file->f_flags & O_NONBLOCK) break; in pvr2_v4l2_read()
1132 fh->wait_data, in pvr2_v4l2_read()
1133 pvr2_ioread_avail(fh->rhp) >= 0); in pvr2_v4l2_read()
1144 struct pvr2_v4l2_fh *fh = file->private_data; in pvr2_v4l2_poll()
1147 if (fh->fw_mode_flag) { in pvr2_v4l2_poll()
1152 if (!fh->rhp) { in pvr2_v4l2_poll()
1157 poll_wait(file,&fh->wait_data,wait); in pvr2_v4l2_poll()
1159 if (pvr2_ioread_avail(fh->rhp) >= 0) { in pvr2_v4l2_poll()
1192 dip->v4lp = vp; in pvr2_v4l2_dev_init()
1194 hdw = vp->channel.mc_head->hdw; in pvr2_v4l2_dev_init()
1195 dip->v4l_type = v4l_type; in pvr2_v4l2_dev_init()
1198 dip->stream = &vp->channel.mc_head->video_stream; in pvr2_v4l2_dev_init()
1199 dip->config = pvr2_config_mpeg; in pvr2_v4l2_dev_init()
1200 dip->minor_type = pvr2_v4l_type_video; in pvr2_v4l2_dev_init()
1205 dip->config = pvr2_config_vbi; in pvr2_v4l2_dev_init()
1206 dip->minor_type = pvr2_v4l_type_vbi; in pvr2_v4l2_dev_init()
1211 dip->stream = &vp->channel.mc_head->video_stream; in pvr2_v4l2_dev_init()
1212 dip->config = pvr2_config_mpeg; in pvr2_v4l2_dev_init()
1213 dip->minor_type = pvr2_v4l_type_radio; in pvr2_v4l2_dev_init()
1223 dip->devbase = vdev_template; in pvr2_v4l2_dev_init()
1224 dip->devbase.release = pvr2_video_device_release; in pvr2_v4l2_dev_init()
1225 dip->devbase.ioctl_ops = &pvr2_ioctl_ops; in pvr2_v4l2_dev_init()
1226 dip->devbase.device_caps = caps; in pvr2_v4l2_dev_init()
1232 dip->devbase.tvnorms = (v4l2_std_id)val; in pvr2_v4l2_dev_init()
1235 mindevnum = -1; in pvr2_v4l2_dev_init()
1240 pvr2_hdw_set_v4l2_dev(hdw, &dip->devbase); in pvr2_v4l2_dev_init()
1241 if ((video_register_device(&dip->devbase, in pvr2_v4l2_dev_init()
1242 dip->v4l_type, mindevnum) < 0) && in pvr2_v4l2_dev_init()
1243 (video_register_device(&dip->devbase, in pvr2_v4l2_dev_init()
1244 dip->v4l_type, -1) < 0)) { in pvr2_v4l2_dev_init()
1250 video_device_node_name(&dip->devbase), in pvr2_v4l2_dev_init()
1251 pvr2_config_get_name(dip->config)); in pvr2_v4l2_dev_init()
1254 dip->minor_type,dip->devbase.minor); in pvr2_v4l2_dev_init()
1264 pvr2_channel_init(&vp->channel,mnp); in pvr2_v4l2_create()
1267 vp->channel.check_func = pvr2_v4l2_internal_check; in pvr2_v4l2_create()
1270 vp->dev_video = kzalloc(sizeof(*vp->dev_video),GFP_KERNEL); in pvr2_v4l2_create()
1271 if (!vp->dev_video) goto fail; in pvr2_v4l2_create()
1272 pvr2_v4l2_dev_init(vp->dev_video,vp,VFL_TYPE_VIDEO); in pvr2_v4l2_create()
1273 if (pvr2_hdw_get_input_available(vp->channel.mc_head->hdw) & in pvr2_v4l2_create()
1275 vp->dev_radio = kzalloc(sizeof(*vp->dev_radio),GFP_KERNEL); in pvr2_v4l2_create()
1276 if (!vp->dev_radio) goto fail; in pvr2_v4l2_create()
1277 pvr2_v4l2_dev_init(vp->dev_radio,vp,VFL_TYPE_RADIO); in pvr2_v4l2_create()