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()
260 go->encoder_h_halve = 0; in set_capture_size()
261 go->encoder_v_halve = 0; in set_capture_size()
262 go->encoder_subsample = 0; in set_capture_size()
263 call_all(&go->v4l2_dev, pad, set_fmt, NULL, &format); in set_capture_size()
266 go->encoder_h_halve = 1; in set_capture_size()
267 go->encoder_v_halve = 1; in set_capture_size()
268 go->encoder_subsample = 1; in set_capture_size()
270 go->encoder_h_halve = 1; in set_capture_size()
271 go->encoder_v_halve = 1; in set_capture_size()
272 go->encoder_subsample = 0; in set_capture_size()
274 go->encoder_h_halve = 0; in set_capture_size()
275 go->encoder_v_halve = 0; in set_capture_size()
276 go->encoder_subsample = 0; in set_capture_size()
285 struct go7007 *go = video_drvdata(file); in vidioc_querycap() local
288 strlcpy(cap->card, go->name, sizeof(cap->card)); in vidioc_querycap()
289 strlcpy(cap->bus_info, go->bus_info, sizeof(cap->bus_info)); in vidioc_querycap()
294 if (go->board_info->num_aud_inputs) in vidioc_querycap()
296 if (go->board_info->flags & GO7007_BOARD_HAS_TUNER) in vidioc_querycap()
338 struct go7007 *go = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
341 fmt->fmt.pix.width = go->width; in vidioc_g_fmt_vid_cap()
342 fmt->fmt.pix.height = go->height; in vidioc_g_fmt_vid_cap()
343 fmt->fmt.pix.pixelformat = go->format; in vidioc_g_fmt_vid_cap()
355 struct go7007 *go = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
357 return set_capture_size(go, fmt, 1); in vidioc_try_fmt_vid_cap()
363 struct go7007 *go = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
365 if (vb2_is_busy(&go->vidq)) in vidioc_s_fmt_vid_cap()
368 return set_capture_size(go, fmt, 0); in vidioc_s_fmt_vid_cap()
388 struct go7007 *go = vb2_get_drv_priv(vq); in go7007_buf_queue() local
394 spin_lock_irqsave(&go->spinlock, flags); in go7007_buf_queue()
395 list_add_tail(&go7007_vb->list, &go->vidq_active); in go7007_buf_queue()
396 spin_unlock_irqrestore(&go->spinlock, flags); in go7007_buf_queue()
414 struct go7007 *go = vb2_get_drv_priv(vq); in go7007_buf_finish() local
418 u32 frame_type_flag = get_frame_type_flag(go7007_vb, go->format); in go7007_buf_finish()
428 struct go7007 *go = vb2_get_drv_priv(q); in go7007_start_streaming() local
431 set_formatting(go); in go7007_start_streaming()
432 mutex_lock(&go->hw_lock); in go7007_start_streaming()
433 go->next_seq = 0; in go7007_start_streaming()
434 go->active_buf = NULL; in go7007_start_streaming()
435 go->modet_event_status = 0; in go7007_start_streaming()
437 if (go7007_start_encoder(go) < 0) in go7007_start_streaming()
441 mutex_unlock(&go->hw_lock); in go7007_start_streaming()
446 call_all(&go->v4l2_dev, video, s_stream, 1); in go7007_start_streaming()
447 v4l2_ctrl_grab(go->mpeg_video_gop_size, true); in go7007_start_streaming()
448 v4l2_ctrl_grab(go->mpeg_video_gop_closure, true); in go7007_start_streaming()
449 v4l2_ctrl_grab(go->mpeg_video_bitrate, true); in go7007_start_streaming()
450 v4l2_ctrl_grab(go->mpeg_video_aspect_ratio, true); in go7007_start_streaming()
452 if (go->board_id == GO7007_BOARDID_ADS_USBAV_709) in go7007_start_streaming()
453 go7007_write_addr(go, 0x3c82, 0x0005); in go7007_start_streaming()
459 struct go7007 *go = vb2_get_drv_priv(q); in go7007_stop_streaming() local
463 go7007_stream_stop(go); in go7007_stop_streaming()
464 mutex_lock(&go->hw_lock); in go7007_stop_streaming()
465 go7007_reset_encoder(go); in go7007_stop_streaming()
466 mutex_unlock(&go->hw_lock); in go7007_stop_streaming()
467 call_all(&go->v4l2_dev, video, s_stream, 0); in go7007_stop_streaming()
469 spin_lock_irqsave(&go->spinlock, flags); in go7007_stop_streaming()
470 INIT_LIST_HEAD(&go->vidq_active); in go7007_stop_streaming()
471 spin_unlock_irqrestore(&go->spinlock, flags); in go7007_stop_streaming()
472 v4l2_ctrl_grab(go->mpeg_video_gop_size, false); in go7007_stop_streaming()
473 v4l2_ctrl_grab(go->mpeg_video_gop_closure, false); in go7007_stop_streaming()
474 v4l2_ctrl_grab(go->mpeg_video_bitrate, false); in go7007_stop_streaming()
475 v4l2_ctrl_grab(go->mpeg_video_aspect_ratio, false); in go7007_stop_streaming()
477 if (go->board_id == GO7007_BOARDID_ADS_USBAV_709) in go7007_stop_streaming()
478 go7007_write_addr(go, 0x3c82, 0x000d); in go7007_stop_streaming()
495 struct go7007 *go = video_drvdata(filp); in vidioc_g_parm() local
497 .numerator = 1001 * go->fps_scale, in vidioc_g_parm()
498 .denominator = go->sensor_framerate, in vidioc_g_parm()
514 struct go7007 *go = video_drvdata(filp); in vidioc_s_parm() local
520 n = go->sensor_framerate * in vidioc_s_parm()
524 go->fps_scale = (n + d/2) / d; in vidioc_s_parm()
526 go->fps_scale = 1; in vidioc_s_parm()
544 struct go7007 *go = video_drvdata(filp); in vidioc_enum_framesizes() local
553 get_resolution(go, &width, &height); in vidioc_enum_framesizes()
563 struct go7007 *go = video_drvdata(filp); in vidioc_enum_frameintervals() local
573 if (!(go->board_info->sensor_flags & GO7007_SENSOR_SCALING)) { in vidioc_enum_frameintervals()
574 get_resolution(go, &width, &height); in vidioc_enum_frameintervals()
584 fival->discrete.denominator = go->sensor_framerate; in vidioc_enum_frameintervals()
590 struct go7007 *go = video_drvdata(file); in vidioc_g_std() local
592 *std = go->std; in vidioc_g_std()
596 static int go7007_s_std(struct go7007 *go) in go7007_s_std() argument
598 if (go->std & V4L2_STD_625_50) { in go7007_s_std()
599 go->standard = GO7007_STD_PAL; in go7007_s_std()
600 go->sensor_framerate = 25025; in go7007_s_std()
602 go->standard = GO7007_STD_NTSC; in go7007_s_std()
603 go->sensor_framerate = 30000; in go7007_s_std()
606 call_all(&go->v4l2_dev, video, s_std, go->std); in go7007_s_std()
607 set_capture_size(go, NULL, 0); in go7007_s_std()
613 struct go7007 *go = video_drvdata(file); in vidioc_s_std() local
615 if (vb2_is_busy(&go->vidq)) in vidioc_s_std()
618 go->std = std; in vidioc_s_std()
620 return go7007_s_std(go); in vidioc_s_std()
625 struct go7007 *go = video_drvdata(file); in vidioc_querystd() local
627 return call_all(&go->v4l2_dev, video, querystd, std); in vidioc_querystd()
633 struct go7007 *go = video_drvdata(file); in vidioc_enum_input() local
635 if (inp->index >= go->board_info->num_inputs) in vidioc_enum_input()
638 strncpy(inp->name, go->board_info->inputs[inp->index].name, in vidioc_enum_input()
642 if ((go->board_info->flags & GO7007_BOARD_HAS_TUNER) && in vidioc_enum_input()
648 if (go->board_info->num_aud_inputs) in vidioc_enum_input()
649 inp->audioset = (1 << go->board_info->num_aud_inputs) - 1; in vidioc_enum_input()
653 if (go->board_info->sensor_flags & GO7007_SENSOR_TV) in vidioc_enum_input()
664 struct go7007 *go = video_drvdata(file); in vidioc_g_input() local
666 *input = go->input; in vidioc_g_input()
673 struct go7007 *go = video_drvdata(file); in vidioc_enumaudio() local
675 if (a->index >= go->board_info->num_aud_inputs) in vidioc_enumaudio()
677 strlcpy(a->name, go->board_info->aud_inputs[a->index].name, in vidioc_enumaudio()
685 struct go7007 *go = video_drvdata(file); in vidioc_g_audio() local
687 a->index = go->aud_input; in vidioc_g_audio()
688 strlcpy(a->name, go->board_info->aud_inputs[go->aud_input].name, in vidioc_g_audio()
697 struct go7007 *go = video_drvdata(file); in vidioc_s_audio() local
699 if (a->index >= go->board_info->num_aud_inputs) in vidioc_s_audio()
701 go->aud_input = a->index; in vidioc_s_audio()
702 v4l2_subdev_call(go->sd_audio, audio, s_routing, in vidioc_s_audio()
703 go->board_info->aud_inputs[go->aud_input].audio_input, 0, 0); in vidioc_s_audio()
707 static void go7007_s_input(struct go7007 *go) in go7007_s_input() argument
709 unsigned int input = go->input; in go7007_s_input()
711 v4l2_subdev_call(go->sd_video, video, s_routing, in go7007_s_input()
712 go->board_info->inputs[input].video_input, 0, in go7007_s_input()
713 go->board_info->video_config); in go7007_s_input()
714 if (go->board_info->num_aud_inputs) { in go7007_s_input()
715 int aud_input = go->board_info->inputs[input].audio_index; in go7007_s_input()
717 v4l2_subdev_call(go->sd_audio, audio, s_routing, in go7007_s_input()
718 go->board_info->aud_inputs[aud_input].audio_input, 0, 0); in go7007_s_input()
719 go->aud_input = aud_input; in go7007_s_input()
725 struct go7007 *go = video_drvdata(file); in vidioc_s_input() local
727 if (input >= go->board_info->num_inputs) in vidioc_s_input()
729 if (vb2_is_busy(&go->vidq)) in vidioc_s_input()
732 go->input = input; in vidioc_s_input()
733 go7007_s_input(go); in vidioc_s_input()
741 struct go7007 *go = video_drvdata(file); in vidioc_g_tuner() local
747 return call_all(&go->v4l2_dev, tuner, g_tuner, t); in vidioc_g_tuner()
753 struct go7007 *go = video_drvdata(file); in vidioc_s_tuner() local
758 return call_all(&go->v4l2_dev, tuner, s_tuner, t); in vidioc_s_tuner()
764 struct go7007 *go = video_drvdata(file); in vidioc_g_frequency() local
769 return call_all(&go->v4l2_dev, tuner, g_frequency, f); in vidioc_g_frequency()
775 struct go7007 *go = video_drvdata(file); in vidioc_s_frequency() local
780 return call_all(&go->v4l2_dev, tuner, s_frequency, f); in vidioc_s_frequency()
785 struct go7007 *go = video_drvdata(file); in vidioc_log_status() local
788 return call_all(&go->v4l2_dev, core, log_status); in vidioc_log_status()
809 struct go7007 *go = in go7007_s_ctrl() local
816 go->modet[0].pixel_threshold = ctrl->val; in go7007_s_ctrl()
819 go->modet[0].motion_threshold = ctrl->val; in go7007_s_ctrl()
822 go->modet[0].mb_threshold = ctrl->val; in go7007_s_ctrl()
825 go->modet[1].pixel_threshold = ctrl->val; in go7007_s_ctrl()
828 go->modet[1].motion_threshold = ctrl->val; in go7007_s_ctrl()
831 go->modet[1].mb_threshold = ctrl->val; in go7007_s_ctrl()
834 go->modet[2].pixel_threshold = ctrl->val; in go7007_s_ctrl()
837 go->modet[2].motion_threshold = ctrl->val; in go7007_s_ctrl()
840 go->modet[2].mb_threshold = ctrl->val; in go7007_s_ctrl()
843 go->modet[3].pixel_threshold = ctrl->val; in go7007_s_ctrl()
846 go->modet[3].motion_threshold = ctrl->val; in go7007_s_ctrl()
849 go->modet[3].mb_threshold = ctrl->val; in go7007_s_ctrl()
852 mt = go->modet_map; in go7007_s_ctrl()
853 for (y = 0; y < go->height / 16; y++, mt += go->width / 16) in go7007_s_ctrl()
854 memcpy(mt, ctrl->p_new.p_u8 + y * (720 / 16), go->width / 16); in go7007_s_ctrl()
1046 int go7007_v4l2_ctrl_init(struct go7007 *go) in go7007_v4l2_ctrl_init() argument
1048 struct v4l2_ctrl_handler *hdl = &go->hdl; in go7007_v4l2_ctrl_init()
1052 go->mpeg_video_gop_size = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1054 go->mpeg_video_gop_closure = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1056 go->mpeg_video_bitrate = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1059 go->mpeg_video_b_frames = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1061 go->mpeg_video_rep_seqheader = v4l2_ctrl_new_std(hdl, NULL, in go7007_v4l2_ctrl_init()
1064 go->mpeg_video_aspect_ratio = v4l2_ctrl_new_std_menu(hdl, NULL, in go7007_v4l2_ctrl_init()
1089 go->modet_mode = v4l2_ctrl_new_std_menu(hdl, NULL, in go7007_v4l2_ctrl_init()
1097 v4l2_err(&go->v4l2_dev, "Could not register controls\n"); in go7007_v4l2_ctrl_init()
1100 go->v4l2_dev.ctrl_handler = hdl; in go7007_v4l2_ctrl_init()
1104 int go7007_v4l2_init(struct go7007 *go) in go7007_v4l2_init() argument
1106 struct video_device *vdev = &go->vdev; in go7007_v4l2_init()
1109 mutex_init(&go->serialize_lock); in go7007_v4l2_init()
1110 mutex_init(&go->queue_lock); in go7007_v4l2_init()
1112 INIT_LIST_HEAD(&go->vidq_active); in go7007_v4l2_init()
1113 go->vidq.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in go7007_v4l2_init()
1114 go->vidq.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; in go7007_v4l2_init()
1115 go->vidq.ops = &go7007_video_qops; in go7007_v4l2_init()
1116 go->vidq.mem_ops = &vb2_vmalloc_memops; in go7007_v4l2_init()
1117 go->vidq.drv_priv = go; in go7007_v4l2_init()
1118 go->vidq.buf_struct_size = sizeof(struct go7007_buffer); in go7007_v4l2_init()
1119 go->vidq.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; in go7007_v4l2_init()
1120 go->vidq.lock = &go->queue_lock; in go7007_v4l2_init()
1121 rv = vb2_queue_init(&go->vidq); in go7007_v4l2_init()
1125 vdev->lock = &go->serialize_lock; in go7007_v4l2_init()
1126 vdev->queue = &go->vidq; in go7007_v4l2_init()
1127 video_set_drvdata(vdev, go); in go7007_v4l2_init()
1128 vdev->v4l2_dev = &go->v4l2_dev; in go7007_v4l2_init()
1129 if (!v4l2_device_has_op(&go->v4l2_dev, video, querystd)) in go7007_v4l2_init()
1131 if (!(go->board_info->flags & GO7007_BOARD_HAS_TUNER)) { in go7007_v4l2_init()
1142 call_all(&go->v4l2_dev, tuner, s_frequency, &f); in go7007_v4l2_init()
1144 if (!(go->board_info->sensor_flags & GO7007_SENSOR_TV)) { in go7007_v4l2_init()
1149 if (go->board_info->sensor_flags & GO7007_SENSOR_SCALING) in go7007_v4l2_init()
1151 if (go->board_info->num_aud_inputs == 0) { in go7007_v4l2_init()
1157 if (go->board_info->sensor_flags & GO7007_SENSOR_SAA7115) in go7007_v4l2_init()
1158 v4l2_subdev_call(go->sd_video, video, s_crystal_freq, in go7007_v4l2_init()
1162 go7007_s_input(go); in go7007_v4l2_init()
1163 if (go->board_info->sensor_flags & GO7007_SENSOR_TV) in go7007_v4l2_init()
1164 go7007_s_std(go); in go7007_v4l2_init()
1168 dev_info(go->dev, "registered device %s [v4l2]\n", in go7007_v4l2_init()
1174 void go7007_v4l2_remove(struct go7007 *go) in go7007_v4l2_remove() argument
1176 v4l2_ctrl_handler_free(&go->hdl); in go7007_v4l2_remove()