Lines Matching refs:go
88 static void get_resolution(struct go7007 *go, int *width, int *height) in get_resolution() argument
90 switch (go->standard) { in get_resolution()
101 *width = go->board_info->sensor_width; in get_resolution()
102 *height = go->board_info->sensor_height; in get_resolution()
107 static void set_formatting(struct go7007 *go) in set_formatting() argument
109 if (go->format == V4L2_PIX_FMT_MJPEG) { in set_formatting()
110 go->pali = 0; in set_formatting()
111 go->aspect_ratio = GO7007_RATIO_1_1; in set_formatting()
112 go->gop_size = 0; in set_formatting()
113 go->ipb = 0; in set_formatting()
114 go->closed_gop = 0; in set_formatting()
115 go->repeat_seqhead = 0; in set_formatting()
116 go->seq_header_enable = 0; in set_formatting()
117 go->gop_header_enable = 0; in set_formatting()
118 go->dvd_mode = 0; in set_formatting()
122 switch (go->format) { in set_formatting()
124 go->pali = 0; in set_formatting()
128 go->pali = 0x48; in set_formatting()
152 go->pali = 0xf5; in set_formatting()
155 go->gop_size = v4l2_ctrl_g_ctrl(go->mpeg_video_gop_size); in set_formatting()
156 go->closed_gop = v4l2_ctrl_g_ctrl(go->mpeg_video_gop_closure); in set_formatting()
157 go->ipb = v4l2_ctrl_g_ctrl(go->mpeg_video_b_frames) != 0; in set_formatting()
158 go->bitrate = v4l2_ctrl_g_ctrl(go->mpeg_video_bitrate); in set_formatting()
159 go->repeat_seqhead = v4l2_ctrl_g_ctrl(go->mpeg_video_rep_seqheader); in set_formatting()
160 go->gop_header_enable = 1; in set_formatting()
161 go->dvd_mode = 0; in set_formatting()
162 if (go->format == V4L2_PIX_FMT_MPEG2) in set_formatting()
163 go->dvd_mode = in set_formatting()
164 go->bitrate == 9800000 && in set_formatting()
165 go->gop_size == 15 && in set_formatting()
166 go->ipb == 0 && in set_formatting()
167 go->repeat_seqhead == 1 && in set_formatting()
168 go->closed_gop; in set_formatting()
170 switch (v4l2_ctrl_g_ctrl(go->mpeg_video_aspect_ratio)) { in set_formatting()
173 go->aspect_ratio = GO7007_RATIO_1_1; in set_formatting()
176 go->aspect_ratio = GO7007_RATIO_4_3; in set_formatting()
179 go->aspect_ratio = GO7007_RATIO_16_9; in set_formatting()
184 static int set_capture_size(struct go7007 *go, struct v4l2_format *fmt, int try) in set_capture_size() argument
192 get_resolution(go, &sensor_width, &sensor_height); in set_capture_size()
197 } else if (go->board_info->sensor_flags & GO7007_SENSOR_SCALING) { in set_capture_size()
246 go->format = fmt->fmt.pix.pixelformat; in set_capture_size()
247 go->width = width; in set_capture_size()
248 go->height = height; in set_capture_size()
249 go->encoder_h_offset = go->board_info->sensor_h_offset; in set_capture_size()
250 go->encoder_v_offset = go->board_info->sensor_v_offset; in set_capture_size()
252 if (go->board_info->sensor_flags & GO7007_SENSOR_SCALING) { in set_capture_size()
258 go->encoder_h_halve = 0; in set_capture_size()
259 go->encoder_v_halve = 0; in set_capture_size()
260 go->encoder_subsample = 0; in set_capture_size()
261 call_all(&go->v4l2_dev, video, s_mbus_fmt, &mbus_fmt); in set_capture_size()
264 go->encoder_h_halve = 1; in set_capture_size()
265 go->encoder_v_halve = 1; in set_capture_size()
266 go->encoder_subsample = 1; in set_capture_size()
268 go->encoder_h_halve = 1; in set_capture_size()
269 go->encoder_v_halve = 1; in set_capture_size()
270 go->encoder_subsample = 0; in set_capture_size()
272 go->encoder_h_halve = 0; in set_capture_size()
273 go->encoder_v_halve = 0; in set_capture_size()
274 go->encoder_subsample = 0; in set_capture_size()
283 struct go7007 *go = video_drvdata(file); in vidioc_querycap() local
286 strlcpy(cap->card, go->name, sizeof(cap->card)); in vidioc_querycap()
287 strlcpy(cap->bus_info, go->bus_info, sizeof(cap->bus_info)); in vidioc_querycap()
292 if (go->board_info->num_aud_inputs) in vidioc_querycap()
294 if (go->board_info->flags & GO7007_BOARD_HAS_TUNER) in vidioc_querycap()
336 struct go7007 *go = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
339 fmt->fmt.pix.width = go->width; in vidioc_g_fmt_vid_cap()
340 fmt->fmt.pix.height = go->height; in vidioc_g_fmt_vid_cap()
341 fmt->fmt.pix.pixelformat = go->format; in vidioc_g_fmt_vid_cap()
353 struct go7007 *go = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
355 return set_capture_size(go, fmt, 1); in vidioc_try_fmt_vid_cap()
361 struct go7007 *go = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
363 if (vb2_is_busy(&go->vidq)) in vidioc_s_fmt_vid_cap()
366 return set_capture_size(go, fmt, 0); in vidioc_s_fmt_vid_cap()
386 struct go7007 *go = vb2_get_drv_priv(vq); in go7007_buf_queue() local
391 spin_lock_irqsave(&go->spinlock, flags); in go7007_buf_queue()
392 list_add_tail(&go7007_vb->list, &go->vidq_active); in go7007_buf_queue()
393 spin_unlock_irqrestore(&go->spinlock, flags); in go7007_buf_queue()
410 struct go7007 *go = vb2_get_drv_priv(vq); in go7007_buf_finish() local
413 u32 frame_type_flag = get_frame_type_flag(go7007_vb, go->format); in go7007_buf_finish()
424 struct go7007 *go = vb2_get_drv_priv(q); in go7007_start_streaming() local
427 set_formatting(go); in go7007_start_streaming()
428 mutex_lock(&go->hw_lock); in go7007_start_streaming()
429 go->next_seq = 0; in go7007_start_streaming()
430 go->active_buf = NULL; in go7007_start_streaming()
431 go->modet_event_status = 0; in go7007_start_streaming()
433 if (go7007_start_encoder(go) < 0) in go7007_start_streaming()
437 mutex_unlock(&go->hw_lock); in go7007_start_streaming()
442 call_all(&go->v4l2_dev, video, s_stream, 1); in go7007_start_streaming()
443 v4l2_ctrl_grab(go->mpeg_video_gop_size, true); in go7007_start_streaming()
444 v4l2_ctrl_grab(go->mpeg_video_gop_closure, true); in go7007_start_streaming()
445 v4l2_ctrl_grab(go->mpeg_video_bitrate, true); in go7007_start_streaming()
446 v4l2_ctrl_grab(go->mpeg_video_aspect_ratio, true); in go7007_start_streaming()
448 if (go->board_id == GO7007_BOARDID_ADS_USBAV_709) in go7007_start_streaming()
449 go7007_write_addr(go, 0x3c82, 0x0005); in go7007_start_streaming()
455 struct go7007 *go = vb2_get_drv_priv(q); in go7007_stop_streaming() local
459 go7007_stream_stop(go); in go7007_stop_streaming()
460 mutex_lock(&go->hw_lock); in go7007_stop_streaming()
461 go7007_reset_encoder(go); in go7007_stop_streaming()
462 mutex_unlock(&go->hw_lock); in go7007_stop_streaming()
463 call_all(&go->v4l2_dev, video, s_stream, 0); in go7007_stop_streaming()
465 spin_lock_irqsave(&go->spinlock, flags); in go7007_stop_streaming()
466 INIT_LIST_HEAD(&go->vidq_active); in go7007_stop_streaming()
467 spin_unlock_irqrestore(&go->spinlock, flags); in go7007_stop_streaming()
468 v4l2_ctrl_grab(go->mpeg_video_gop_size, false); in go7007_stop_streaming()
469 v4l2_ctrl_grab(go->mpeg_video_gop_closure, false); in go7007_stop_streaming()
470 v4l2_ctrl_grab(go->mpeg_video_bitrate, false); in go7007_stop_streaming()
471 v4l2_ctrl_grab(go->mpeg_video_aspect_ratio, false); in go7007_stop_streaming()
473 if (go->board_id == GO7007_BOARDID_ADS_USBAV_709) in go7007_stop_streaming()
474 go7007_write_addr(go, 0x3c82, 0x000d); in go7007_stop_streaming()
491 struct go7007 *go = video_drvdata(filp); in vidioc_g_parm() local
493 .numerator = 1001 * go->fps_scale, in vidioc_g_parm()
494 .denominator = go->sensor_framerate, in vidioc_g_parm()
510 struct go7007 *go = video_drvdata(filp); in vidioc_s_parm() local
516 n = go->sensor_framerate * in vidioc_s_parm()
520 go->fps_scale = (n + d/2) / d; in vidioc_s_parm()
522 go->fps_scale = 1; in vidioc_s_parm()
540 struct go7007 *go = video_drvdata(filp); in vidioc_enum_framesizes() local
549 get_resolution(go, &width, &height); in vidioc_enum_framesizes()
559 struct go7007 *go = video_drvdata(filp); in vidioc_enum_frameintervals() local
569 if (!(go->board_info->sensor_flags & GO7007_SENSOR_SCALING)) { in vidioc_enum_frameintervals()
570 get_resolution(go, &width, &height); in vidioc_enum_frameintervals()
580 fival->discrete.denominator = go->sensor_framerate; in vidioc_enum_frameintervals()
586 struct go7007 *go = video_drvdata(file); in vidioc_g_std() local
588 *std = go->std; in vidioc_g_std()
592 static int go7007_s_std(struct go7007 *go) in go7007_s_std() argument
594 if (go->std & V4L2_STD_625_50) { in go7007_s_std()
595 go->standard = GO7007_STD_PAL; in go7007_s_std()
596 go->sensor_framerate = 25025; in go7007_s_std()
598 go->standard = GO7007_STD_NTSC; in go7007_s_std()
599 go->sensor_framerate = 30000; in go7007_s_std()
602 call_all(&go->v4l2_dev, video, s_std, go->std); in go7007_s_std()
603 set_capture_size(go, NULL, 0); in go7007_s_std()
609 struct go7007 *go = video_drvdata(file); in vidioc_s_std() local
611 if (vb2_is_busy(&go->vidq)) in vidioc_s_std()
614 go->std = std; in vidioc_s_std()
616 return go7007_s_std(go); in vidioc_s_std()
621 struct go7007 *go = video_drvdata(file); in vidioc_querystd() local
623 return call_all(&go->v4l2_dev, video, querystd, std); in vidioc_querystd()
629 struct go7007 *go = video_drvdata(file); in vidioc_enum_input() local
631 if (inp->index >= go->board_info->num_inputs) in vidioc_enum_input()
634 strncpy(inp->name, go->board_info->inputs[inp->index].name, in vidioc_enum_input()
638 if ((go->board_info->flags & GO7007_BOARD_HAS_TUNER) && in vidioc_enum_input()
644 if (go->board_info->num_aud_inputs) in vidioc_enum_input()
645 inp->audioset = (1 << go->board_info->num_aud_inputs) - 1; in vidioc_enum_input()
649 if (go->board_info->sensor_flags & GO7007_SENSOR_TV) in vidioc_enum_input()
660 struct go7007 *go = video_drvdata(file); in vidioc_g_input() local
662 *input = go->input; in vidioc_g_input()
669 struct go7007 *go = video_drvdata(file); in vidioc_enumaudio() local
671 if (a->index >= go->board_info->num_aud_inputs) in vidioc_enumaudio()
673 strlcpy(a->name, go->board_info->aud_inputs[a->index].name, in vidioc_enumaudio()
681 struct go7007 *go = video_drvdata(file); in vidioc_g_audio() local
683 a->index = go->aud_input; in vidioc_g_audio()
684 strlcpy(a->name, go->board_info->aud_inputs[go->aud_input].name, in vidioc_g_audio()
693 struct go7007 *go = video_drvdata(file); in vidioc_s_audio() local
695 if (a->index >= go->board_info->num_aud_inputs) in vidioc_s_audio()
697 go->aud_input = a->index; in vidioc_s_audio()
698 v4l2_subdev_call(go->sd_audio, audio, s_routing, in vidioc_s_audio()
699 go->board_info->aud_inputs[go->aud_input].audio_input, 0, 0); in vidioc_s_audio()
703 static void go7007_s_input(struct go7007 *go) in go7007_s_input() argument
705 unsigned int input = go->input; in go7007_s_input()
707 v4l2_subdev_call(go->sd_video, video, s_routing, in go7007_s_input()
708 go->board_info->inputs[input].video_input, 0, in go7007_s_input()
709 go->board_info->video_config); in go7007_s_input()
710 if (go->board_info->num_aud_inputs) { in go7007_s_input()
711 int aud_input = go->board_info->inputs[input].audio_index; in go7007_s_input()
713 v4l2_subdev_call(go->sd_audio, audio, s_routing, in go7007_s_input()
714 go->board_info->aud_inputs[aud_input].audio_input, 0, 0); in go7007_s_input()
715 go->aud_input = aud_input; in go7007_s_input()
721 struct go7007 *go = video_drvdata(file); in vidioc_s_input() local
723 if (input >= go->board_info->num_inputs) in vidioc_s_input()
725 if (vb2_is_busy(&go->vidq)) in vidioc_s_input()
728 go->input = input; in vidioc_s_input()
729 go7007_s_input(go); in vidioc_s_input()
737 struct go7007 *go = video_drvdata(file); in vidioc_g_tuner() local
743 return call_all(&go->v4l2_dev, tuner, g_tuner, t); in vidioc_g_tuner()
749 struct go7007 *go = video_drvdata(file); in vidioc_s_tuner() local
754 return call_all(&go->v4l2_dev, tuner, s_tuner, t); in vidioc_s_tuner()
760 struct go7007 *go = video_drvdata(file); in vidioc_g_frequency() local
765 return call_all(&go->v4l2_dev, tuner, g_frequency, f); in vidioc_g_frequency()
771 struct go7007 *go = video_drvdata(file); in vidioc_s_frequency() local
776 return call_all(&go->v4l2_dev, tuner, s_frequency, f); in vidioc_s_frequency()
781 struct go7007 *go = video_drvdata(file); in vidioc_log_status() local
784 return call_all(&go->v4l2_dev, core, log_status); in vidioc_log_status()
805 struct go7007 *go = in go7007_s_ctrl() local
812 go->modet[0].pixel_threshold = ctrl->val; in go7007_s_ctrl()
815 go->modet[0].motion_threshold = ctrl->val; in go7007_s_ctrl()
818 go->modet[0].mb_threshold = ctrl->val; in go7007_s_ctrl()
821 go->modet[1].pixel_threshold = ctrl->val; in go7007_s_ctrl()
824 go->modet[1].motion_threshold = ctrl->val; in go7007_s_ctrl()
827 go->modet[1].mb_threshold = ctrl->val; in go7007_s_ctrl()
830 go->modet[2].pixel_threshold = ctrl->val; in go7007_s_ctrl()
833 go->modet[2].motion_threshold = ctrl->val; in go7007_s_ctrl()
836 go->modet[2].mb_threshold = ctrl->val; in go7007_s_ctrl()
839 go->modet[3].pixel_threshold = ctrl->val; in go7007_s_ctrl()
842 go->modet[3].motion_threshold = ctrl->val; in go7007_s_ctrl()
845 go->modet[3].mb_threshold = ctrl->val; in go7007_s_ctrl()
848 mt = go->modet_map; in go7007_s_ctrl()
849 for (y = 0; y < go->height / 16; y++, mt += go->width / 16) in go7007_s_ctrl()
850 memcpy(mt, ctrl->p_new.p_u8 + y * (720 / 16), go->width / 16); in go7007_s_ctrl()
1042 int go7007_v4l2_ctrl_init(struct go7007 *go) in go7007_v4l2_ctrl_init() argument
1044 struct v4l2_ctrl_handler *hdl = &go->hdl; in go7007_v4l2_ctrl_init()
1048 go->mpeg_video_gop_size = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1050 go->mpeg_video_gop_closure = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1052 go->mpeg_video_bitrate = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1055 go->mpeg_video_b_frames = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1057 go->mpeg_video_rep_seqheader = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1060 go->mpeg_video_aspect_ratio = v4l2_ctrl_new_std_menu(hdl, NULL, in go7007_v4l2_ctrl_init()
1085 go->modet_mode = v4l2_ctrl_new_std_menu(hdl, NULL, in go7007_v4l2_ctrl_init()
1093 v4l2_err(&go->v4l2_dev, "Could not register controls\n"); in go7007_v4l2_ctrl_init()
1096 go->v4l2_dev.ctrl_handler = hdl; in go7007_v4l2_ctrl_init()
1100 int go7007_v4l2_init(struct go7007 *go) in go7007_v4l2_init() argument
1102 struct video_device *vdev = &go->vdev; in go7007_v4l2_init()
1105 mutex_init(&go->serialize_lock); in go7007_v4l2_init()
1106 mutex_init(&go->queue_lock); in go7007_v4l2_init()
1108 INIT_LIST_HEAD(&go->vidq_active); in go7007_v4l2_init()
1109 go->vidq.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in go7007_v4l2_init()
1110 go->vidq.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; in go7007_v4l2_init()
1111 go->vidq.ops = &go7007_video_qops; in go7007_v4l2_init()
1112 go->vidq.mem_ops = &vb2_vmalloc_memops; in go7007_v4l2_init()
1113 go->vidq.drv_priv = go; in go7007_v4l2_init()
1114 go->vidq.buf_struct_size = sizeof(struct go7007_buffer); in go7007_v4l2_init()
1115 go->vidq.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; in go7007_v4l2_init()
1116 go->vidq.lock = &go->queue_lock; in go7007_v4l2_init()
1117 rv = vb2_queue_init(&go->vidq); in go7007_v4l2_init()
1121 vdev->lock = &go->serialize_lock; in go7007_v4l2_init()
1122 vdev->queue = &go->vidq; in go7007_v4l2_init()
1123 video_set_drvdata(vdev, go); in go7007_v4l2_init()
1124 vdev->v4l2_dev = &go->v4l2_dev; in go7007_v4l2_init()
1125 if (!v4l2_device_has_op(&go->v4l2_dev, video, querystd)) in go7007_v4l2_init()
1127 if (!(go->board_info->flags & GO7007_BOARD_HAS_TUNER)) { in go7007_v4l2_init()
1138 call_all(&go->v4l2_dev, tuner, s_frequency, &f); in go7007_v4l2_init()
1140 if (!(go->board_info->sensor_flags & GO7007_SENSOR_TV)) { in go7007_v4l2_init()
1145 if (go->board_info->sensor_flags & GO7007_SENSOR_SCALING) in go7007_v4l2_init()
1147 if (go->board_info->num_aud_inputs == 0) { in go7007_v4l2_init()
1153 if (go->board_info->sensor_flags & GO7007_SENSOR_SAA7115) in go7007_v4l2_init()
1154 v4l2_subdev_call(go->sd_video, video, s_crystal_freq, in go7007_v4l2_init()
1158 go7007_s_input(go); in go7007_v4l2_init()
1159 if (go->board_info->sensor_flags & GO7007_SENSOR_TV) in go7007_v4l2_init()
1160 go7007_s_std(go); in go7007_v4l2_init()
1164 dev_info(go->dev, "registered device %s [v4l2]\n", in go7007_v4l2_init()
1170 void go7007_v4l2_remove(struct go7007 *go) in go7007_v4l2_remove() argument
1172 v4l2_ctrl_handler_free(&go->hdl); in go7007_v4l2_remove()