Lines Matching defs:go

80 static void get_resolution(struct go7007 *go, int *width, int *height)
82 switch (go->standard) {
93 *width = go->board_info->sensor_width;
94 *height = go->board_info->sensor_height;
99 static void set_formatting(struct go7007 *go)
101 if (go->format == V4L2_PIX_FMT_MJPEG) {
102 go->pali = 0;
103 go->aspect_ratio = GO7007_RATIO_1_1;
104 go->gop_size = 0;
105 go->ipb = 0;
106 go->closed_gop = 0;
107 go->repeat_seqhead = 0;
108 go->seq_header_enable = 0;
109 go->gop_header_enable = 0;
110 go->dvd_mode = 0;
114 switch (go->format) {
116 go->pali = 0;
120 go->pali = 0x48;
144 go->pali = 0xf5;
147 go->gop_size = v4l2_ctrl_g_ctrl(go->mpeg_video_gop_size);
148 go->closed_gop = v4l2_ctrl_g_ctrl(go->mpeg_video_gop_closure);
149 go->ipb = v4l2_ctrl_g_ctrl(go->mpeg_video_b_frames) != 0;
150 go->bitrate = v4l2_ctrl_g_ctrl(go->mpeg_video_bitrate);
151 go->repeat_seqhead = v4l2_ctrl_g_ctrl(go->mpeg_video_rep_seqheader);
152 go->gop_header_enable = 1;
153 go->dvd_mode = 0;
154 if (go->format == V4L2_PIX_FMT_MPEG2)
155 go->dvd_mode =
156 go->bitrate == 9800000 &&
157 go->gop_size == 15 &&
158 go->ipb == 0 &&
159 go->repeat_seqhead == 1 &&
160 go->closed_gop;
162 switch (v4l2_ctrl_g_ctrl(go->mpeg_video_aspect_ratio)) {
165 go->aspect_ratio = GO7007_RATIO_1_1;
168 go->aspect_ratio = GO7007_RATIO_4_3;
171 go->aspect_ratio = GO7007_RATIO_16_9;
176 static int set_capture_size(struct go7007 *go, struct v4l2_format *fmt, int try)
184 get_resolution(go, &sensor_width, &sensor_height);
189 } else if (go->board_info->sensor_flags & GO7007_SENSOR_SCALING) {
238 go->format = fmt->fmt.pix.pixelformat;
239 go->width = width;
240 go->height = height;
241 go->encoder_h_offset = go->board_info->sensor_h_offset;
242 go->encoder_v_offset = go->board_info->sensor_v_offset;
244 if (go->board_info->sensor_flags & GO7007_SENSOR_SCALING) {
252 go->encoder_h_halve = 0;
253 go->encoder_v_halve = 0;
254 go->encoder_subsample = 0;
255 call_all(&go->v4l2_dev, pad, set_fmt, NULL, &format);
258 go->encoder_h_halve = 1;
259 go->encoder_v_halve = 1;
260 go->encoder_subsample = 1;
262 go->encoder_h_halve = 1;
263 go->encoder_v_halve = 1;
264 go->encoder_subsample = 0;
266 go->encoder_h_halve = 0;
267 go->encoder_v_halve = 0;
268 go->encoder_subsample = 0;
277 struct go7007 *go = video_drvdata(file);
280 strscpy(cap->card, go->name, sizeof(cap->card));
281 strscpy(cap->bus_info, go->bus_info, sizeof(cap->bus_info));
310 struct go7007 *go = video_drvdata(file);
313 fmt->fmt.pix.width = go->width;
314 fmt->fmt.pix.height = go->height;
315 fmt->fmt.pix.pixelformat = go->format;
327 struct go7007 *go = video_drvdata(file);
329 return set_capture_size(go, fmt, 1);
335 struct go7007 *go = video_drvdata(file);
337 if (vb2_is_busy(&go->vidq))
340 return set_capture_size(go, fmt, 0);
359 struct go7007 *go = vb2_get_drv_priv(vq);
365 spin_lock_irqsave(&go->spinlock, flags);
366 list_add_tail(&go7007_vb->list, &go->vidq_active);
367 spin_unlock_irqrestore(&go->spinlock, flags);
385 struct go7007 *go = vb2_get_drv_priv(vq);
389 u32 frame_type_flag = get_frame_type_flag(go7007_vb, go->format);
399 struct go7007 *go = vb2_get_drv_priv(q);
402 set_formatting(go);
403 mutex_lock(&go->hw_lock);
404 go->next_seq = 0;
405 go->active_buf = NULL;
406 go->modet_event_status = 0;
407 if (go7007_start_encoder(go) < 0)
411 mutex_unlock(&go->hw_lock);
414 call_all(&go->v4l2_dev, video, s_stream, 1);
415 v4l2_ctrl_grab(go->mpeg_video_gop_size, true);
416 v4l2_ctrl_grab(go->mpeg_video_gop_closure, true);
417 v4l2_ctrl_grab(go->mpeg_video_bitrate, true);
418 v4l2_ctrl_grab(go->mpeg_video_aspect_ratio, true);
420 if (go->board_id == GO7007_BOARDID_ADS_USBAV_709)
421 go7007_write_addr(go, 0x3c82, 0x0005);
427 struct go7007 *go = vb2_get_drv_priv(q);
430 go7007_stream_stop(go);
431 mutex_lock(&go->hw_lock);
432 go7007_reset_encoder(go);
433 mutex_unlock(&go->hw_lock);
434 call_all(&go->v4l2_dev, video, s_stream, 0);
436 spin_lock_irqsave(&go->spinlock, flags);
437 INIT_LIST_HEAD(&go->vidq_active);
438 spin_unlock_irqrestore(&go->spinlock, flags);
439 v4l2_ctrl_grab(go->mpeg_video_gop_size, false);
440 v4l2_ctrl_grab(go->mpeg_video_gop_closure, false);
441 v4l2_ctrl_grab(go->mpeg_video_bitrate, false);
442 v4l2_ctrl_grab(go->mpeg_video_aspect_ratio, false);
444 if (go->board_id == GO7007_BOARDID_ADS_USBAV_709)
445 go7007_write_addr(go, 0x3c82, 0x000d);
462 struct go7007 *go = video_drvdata(filp);
464 .numerator = 1001 * go->fps_scale,
465 .denominator = go->sensor_framerate,
481 struct go7007 *go = video_drvdata(filp);
487 n = go->sensor_framerate *
491 go->fps_scale = (n + d/2) / d;
493 go->fps_scale = 1;
511 struct go7007 *go = video_drvdata(filp);
520 get_resolution(go, &width, &height);
530 struct go7007 *go = video_drvdata(filp);
540 if (!(go->board_info->sensor_flags & GO7007_SENSOR_SCALING)) {
541 get_resolution(go, &width, &height);
551 fival->discrete.denominator = go->sensor_framerate;
557 struct go7007 *go = video_drvdata(file);
559 *std = go->std;
563 static int go7007_s_std(struct go7007 *go)
565 if (go->std & V4L2_STD_625_50) {
566 go->standard = GO7007_STD_PAL;
567 go->sensor_framerate = 25025;
569 go->standard = GO7007_STD_NTSC;
570 go->sensor_framerate = 30000;
573 call_all(&go->v4l2_dev, video, s_std, go->std);
574 set_capture_size(go, NULL, 0);
580 struct go7007 *go = video_drvdata(file);
582 if (vb2_is_busy(&go->vidq))
585 go->std = std;
587 return go7007_s_std(go);
592 struct go7007 *go = video_drvdata(file);
594 return call_all(&go->v4l2_dev, video, querystd, std);
600 struct go7007 *go = video_drvdata(file);
602 if (inp->index >= go->board_info->num_inputs)
605 strscpy(inp->name, go->board_info->inputs[inp->index].name,
609 if ((go->board_info->flags & GO7007_BOARD_HAS_TUNER) &&
615 if (go->board_info->num_aud_inputs)
616 inp->audioset = (1 << go->board_info->num_aud_inputs) - 1;
620 if (go->board_info->sensor_flags & GO7007_SENSOR_TV)
631 struct go7007 *go = video_drvdata(file);
633 *input = go->input;
640 struct go7007 *go = video_drvdata(file);
642 if (a->index >= go->board_info->num_aud_inputs)
644 strscpy(a->name, go->board_info->aud_inputs[a->index].name,
652 struct go7007 *go = video_drvdata(file);
654 a->index = go->aud_input;
655 strscpy(a->name, go->board_info->aud_inputs[go->aud_input].name,
664 struct go7007 *go = video_drvdata(file);
666 if (a->index >= go->board_info->num_aud_inputs)
668 go->aud_input = a->index;
669 v4l2_subdev_call(go->sd_audio, audio, s_routing,
670 go->board_info->aud_inputs[go->aud_input].audio_input, 0, 0);
674 static void go7007_s_input(struct go7007 *go)
676 unsigned int input = go->input;
678 v4l2_subdev_call(go->sd_video, video, s_routing,
679 go->board_info->inputs[input].video_input, 0,
680 go->board_info->video_config);
681 if (go->board_info->num_aud_inputs) {
682 int aud_input = go->board_info->inputs[input].audio_index;
684 v4l2_subdev_call(go->sd_audio, audio, s_routing,
685 go->board_info->aud_inputs[aud_input].audio_input, 0, 0);
686 go->aud_input = aud_input;
692 struct go7007 *go = video_drvdata(file);
694 if (input >= go->board_info->num_inputs)
696 if (vb2_is_busy(&go->vidq))
699 go->input = input;
700 go7007_s_input(go);
708 struct go7007 *go = video_drvdata(file);
714 return call_all(&go->v4l2_dev, tuner, g_tuner, t);
720 struct go7007 *go = video_drvdata(file);
725 return call_all(&go->v4l2_dev, tuner, s_tuner, t);
731 struct go7007 *go = video_drvdata(file);
736 return call_all(&go->v4l2_dev, tuner, g_frequency, f);
742 struct go7007 *go = video_drvdata(file);
747 return call_all(&go->v4l2_dev, tuner, s_frequency, f);
752 struct go7007 *go = video_drvdata(file);
755 return call_all(&go->v4l2_dev, core, log_status);
775 struct go7007 *go =
782 go->modet[0].pixel_threshold = ctrl->val;
785 go->modet[0].motion_threshold = ctrl->val;
788 go->modet[0].mb_threshold = ctrl->val;
791 go->modet[1].pixel_threshold = ctrl->val;
794 go->modet[1].motion_threshold = ctrl->val;
797 go->modet[1].mb_threshold = ctrl->val;
800 go->modet[2].pixel_threshold = ctrl->val;
803 go->modet[2].motion_threshold = ctrl->val;
806 go->modet[2].mb_threshold = ctrl->val;
809 go->modet[3].pixel_threshold = ctrl->val;
812 go->modet[3].motion_threshold = ctrl->val;
815 go->modet[3].mb_threshold = ctrl->val;
818 mt = go->modet_map;
819 for (y = 0; y < go->height / 16; y++, mt += go->width / 16)
820 memcpy(mt, ctrl->p_new.p_u8 + y * (720 / 16), go->width / 16);
1012 int go7007_v4l2_ctrl_init(struct go7007 *go)
1014 struct v4l2_ctrl_handler *hdl = &go->hdl;
1018 go->mpeg_video_gop_size = v4l2_ctrl_new_std(hdl, NULL,
1020 go->mpeg_video_gop_closure = v4l2_ctrl_new_std(hdl, NULL,
1022 go->mpeg_video_bitrate = v4l2_ctrl_new_std(hdl, NULL,
1025 go->mpeg_video_b_frames = v4l2_ctrl_new_std(hdl, NULL,
1027 go->mpeg_video_rep_seqheader = v4l2_ctrl_new_std(hdl, NULL,
1030 go->mpeg_video_aspect_ratio = v4l2_ctrl_new_std_menu(hdl, NULL,
1055 go->modet_mode = v4l2_ctrl_new_std_menu(hdl, NULL,
1063 v4l2_err(&go->v4l2_dev, "Could not register controls\n");
1066 go->v4l2_dev.ctrl_handler = hdl;
1070 int go7007_v4l2_init(struct go7007 *go)
1072 struct video_device *vdev = &go->vdev;
1075 mutex_init(&go->serialize_lock);
1076 mutex_init(&go->queue_lock);
1078 INIT_LIST_HEAD(&go->vidq_active);
1079 go->vidq.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1080 go->vidq.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
1081 go->vidq.ops = &go7007_video_qops;
1082 go->vidq.mem_ops = &vb2_vmalloc_memops;
1083 go->vidq.drv_priv = go;
1084 go->vidq.buf_struct_size = sizeof(struct go7007_buffer);
1085 go->vidq.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1086 go->vidq.lock = &go->queue_lock;
1087 rv = vb2_queue_init(&go->vidq);
1091 vdev->lock = &go->serialize_lock;
1092 vdev->queue = &go->vidq;
1095 if (go->board_info->num_aud_inputs)
1097 if (go->board_info->flags & GO7007_BOARD_HAS_TUNER)
1099 video_set_drvdata(vdev, go);
1100 vdev->v4l2_dev = &go->v4l2_dev;
1101 if (!v4l2_device_has_op(&go->v4l2_dev, 0, video, querystd))
1103 if (!(go->board_info->flags & GO7007_BOARD_HAS_TUNER)) {
1114 call_all(&go->v4l2_dev, tuner, s_frequency, &f);
1116 if (!(go->board_info->sensor_flags & GO7007_SENSOR_TV)) {
1121 if (go->board_info->sensor_flags & GO7007_SENSOR_SCALING)
1123 if (go->board_info->num_aud_inputs == 0) {
1129 if (go->board_info->sensor_flags & GO7007_SENSOR_SAA7115)
1130 v4l2_subdev_call(go->sd_video, video, s_crystal_freq,
1134 go7007_s_input(go);
1135 if (go->board_info->sensor_flags & GO7007_SENSOR_TV)
1136 go7007_s_std(go);
1140 dev_info(go->dev, "registered device %s [v4l2]\n",
1146 void go7007_v4l2_remove(struct go7007 *go)
1148 v4l2_ctrl_handler_free(&go->hdl);