Lines Matching refs:go

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