Lines Matching refs:port
53 static void saa7164_encoder_configure(struct saa7164_port *port) in saa7164_encoder_configure() argument
55 struct saa7164_dev *dev = port->dev; in saa7164_encoder_configure()
58 port->encoder_params.width = port->width; in saa7164_encoder_configure()
59 port->encoder_params.height = port->height; in saa7164_encoder_configure()
60 port->encoder_params.is_50hz = in saa7164_encoder_configure()
61 (port->encodernorm.id & V4L2_STD_625_50) != 0; in saa7164_encoder_configure()
64 saa7164_api_initialize_dif(port); in saa7164_encoder_configure()
67 saa7164_api_configure_dif(port, port->encodernorm.id); in saa7164_encoder_configure()
70 saa7164_api_set_audio_std(port); in saa7164_encoder_configure()
73 static int saa7164_encoder_buffers_dealloc(struct saa7164_port *port) in saa7164_encoder_buffers_dealloc() argument
76 struct saa7164_dev *dev = port->dev; in saa7164_encoder_buffers_dealloc()
81 mutex_lock(&port->dmaqueue_lock); in saa7164_encoder_buffers_dealloc()
83 dprintk(DBGLVL_ENC, "%s(port=%d) dmaqueue\n", __func__, port->nr); in saa7164_encoder_buffers_dealloc()
84 list_for_each_safe(c, n, &port->dmaqueue.list) { in saa7164_encoder_buffers_dealloc()
90 dprintk(DBGLVL_ENC, "%s(port=%d) used\n", __func__, port->nr); in saa7164_encoder_buffers_dealloc()
91 list_for_each_safe(p, q, &port->list_buf_used.list) { in saa7164_encoder_buffers_dealloc()
97 dprintk(DBGLVL_ENC, "%s(port=%d) free\n", __func__, port->nr); in saa7164_encoder_buffers_dealloc()
98 list_for_each_safe(l, v, &port->list_buf_free.list) { in saa7164_encoder_buffers_dealloc()
104 mutex_unlock(&port->dmaqueue_lock); in saa7164_encoder_buffers_dealloc()
105 dprintk(DBGLVL_ENC, "%s(port=%d) done\n", __func__, port->nr); in saa7164_encoder_buffers_dealloc()
111 static int saa7164_encoder_buffers_alloc(struct saa7164_port *port) in saa7164_encoder_buffers_alloc() argument
113 struct saa7164_dev *dev = port->dev; in saa7164_encoder_buffers_alloc()
116 struct tmHWStreamParameters *params = &port->hw_streamingparams; in saa7164_encoder_buffers_alloc()
122 if (port->encoder_params.stream_type == in saa7164_encoder_buffers_alloc()
133 if (port->encoder_params.stream_type == in saa7164_encoder_buffers_alloc()
151 params->numpagetableentries = port->hwcfg.buffercount; in saa7164_encoder_buffers_alloc()
154 for (i = 0; i < port->hwcfg.buffercount; i++) { in saa7164_encoder_buffers_alloc()
155 buf = saa7164_buffer_alloc(port, in saa7164_encoder_buffers_alloc()
167 mutex_lock(&port->dmaqueue_lock); in saa7164_encoder_buffers_alloc()
168 list_add_tail(&buf->list, &port->dmaqueue.list); in saa7164_encoder_buffers_alloc()
169 mutex_unlock(&port->dmaqueue_lock); in saa7164_encoder_buffers_alloc()
188 mutex_lock(&port->dmaqueue_lock); in saa7164_encoder_buffers_alloc()
189 list_add_tail(&ubuf->list, &port->list_buf_free.list); in saa7164_encoder_buffers_alloc()
190 mutex_unlock(&port->dmaqueue_lock); in saa7164_encoder_buffers_alloc()
201 static int saa7164_encoder_initialize(struct saa7164_port *port) in saa7164_encoder_initialize() argument
203 saa7164_encoder_configure(port); in saa7164_encoder_initialize()
208 int saa7164_s_std(struct saa7164_port *port, v4l2_std_id id) in saa7164_s_std() argument
210 struct saa7164_dev *dev = port->dev; in saa7164_s_std()
222 port->encodernorm = saa7164_tvnorms[i]; in saa7164_s_std()
223 port->std = id; in saa7164_s_std()
228 saa7164_api_set_audio_std(port); in saa7164_s_std()
239 return saa7164_s_std(fh->port, id); in vidioc_s_std()
242 int saa7164_g_std(struct saa7164_port *port, v4l2_std_id *id) in saa7164_g_std() argument
244 *id = port->std; in saa7164_g_std()
252 return saa7164_g_std(fh->port, id); in vidioc_g_std()
279 int saa7164_g_input(struct saa7164_port *port, unsigned int *i) in saa7164_g_input() argument
281 struct saa7164_dev *dev = port->dev; in saa7164_g_input()
283 if (saa7164_api_get_videomux(port) != SAA_OK) in saa7164_g_input()
286 *i = (port->mux_input - 1); in saa7164_g_input()
297 return saa7164_g_input(fh->port, i); in vidioc_g_input()
300 int saa7164_s_input(struct saa7164_port *port, unsigned int i) in saa7164_s_input() argument
302 struct saa7164_dev *dev = port->dev; in saa7164_s_input()
309 port->mux_input = i + 1; in saa7164_s_input()
311 if (saa7164_api_set_videomux(port) != SAA_OK) in saa7164_s_input()
321 return saa7164_s_input(fh->port, i); in vidioc_s_input()
327 struct saa7164_port *port = fh->port; in saa7164_g_tuner() local
328 struct saa7164_dev *dev = port->dev; in saa7164_g_tuner()
353 int saa7164_g_frequency(struct saa7164_port *port, struct v4l2_frequency *f) in saa7164_g_frequency() argument
358 f->frequency = port->freq; in saa7164_g_frequency()
367 return saa7164_g_frequency(fh->port, f); in vidioc_g_frequency()
370 int saa7164_s_frequency(struct saa7164_port *port, in saa7164_s_frequency() argument
373 struct saa7164_dev *dev = port->dev; in saa7164_s_frequency()
381 .std = port->encodernorm.id, in saa7164_s_frequency()
392 port->freq = clamp(f->frequency, in saa7164_s_frequency()
396 if (port->nr == SAA7164_PORT_ENC1) in saa7164_s_frequency()
398 else if (port->nr == SAA7164_PORT_ENC2) in saa7164_s_frequency()
410 saa7164_encoder_initialize(port); in saa7164_s_frequency()
420 return saa7164_s_frequency(fh->port, f); in vidioc_s_frequency()
425 struct saa7164_port *port = in saa7164_s_ctrl() local
427 struct saa7164_encoder_params *params = &port->encoder_params; in saa7164_s_ctrl()
432 port->ctl_brightness = ctrl->val; in saa7164_s_ctrl()
433 saa7164_api_set_usercontrol(port, PU_BRIGHTNESS_CONTROL); in saa7164_s_ctrl()
436 port->ctl_contrast = ctrl->val; in saa7164_s_ctrl()
437 saa7164_api_set_usercontrol(port, PU_CONTRAST_CONTROL); in saa7164_s_ctrl()
440 port->ctl_saturation = ctrl->val; in saa7164_s_ctrl()
441 saa7164_api_set_usercontrol(port, PU_SATURATION_CONTROL); in saa7164_s_ctrl()
444 port->ctl_hue = ctrl->val; in saa7164_s_ctrl()
445 saa7164_api_set_usercontrol(port, PU_HUE_CONTROL); in saa7164_s_ctrl()
448 port->ctl_sharpness = ctrl->val; in saa7164_s_ctrl()
449 saa7164_api_set_usercontrol(port, PU_SHARPNESS_CONTROL); in saa7164_s_ctrl()
452 port->ctl_volume = ctrl->val; in saa7164_s_ctrl()
453 saa7164_api_set_audio_volume(port, port->ctl_volume); in saa7164_s_ctrl()
463 ret = saa7164_api_audio_mute(port, params->ctl_mute); in saa7164_s_ctrl()
472 ret = saa7164_api_set_aspect_ratio(port); in saa7164_s_ctrl()
502 struct saa7164_port *port = fh->port; in vidioc_querycap() local
503 struct saa7164_dev *dev = port->dev; in vidioc_querycap()
538 struct saa7164_port *port = fh->port; in vidioc_fmt_vid_cap() local
545 f->fmt.pix.width = port->width; in vidioc_fmt_vid_cap()
546 f->fmt.pix.height = port->height; in vidioc_fmt_vid_cap()
550 static int saa7164_encoder_stop_port(struct saa7164_port *port) in saa7164_encoder_stop_port() argument
552 struct saa7164_dev *dev = port->dev; in saa7164_encoder_stop_port()
555 ret = saa7164_api_transition_port(port, SAA_DMASTATE_STOP); in saa7164_encoder_stop_port()
568 static int saa7164_encoder_acquire_port(struct saa7164_port *port) in saa7164_encoder_acquire_port() argument
570 struct saa7164_dev *dev = port->dev; in saa7164_encoder_acquire_port()
573 ret = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE); in saa7164_encoder_acquire_port()
586 static int saa7164_encoder_pause_port(struct saa7164_port *port) in saa7164_encoder_pause_port() argument
588 struct saa7164_dev *dev = port->dev; in saa7164_encoder_pause_port()
591 ret = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE); in saa7164_encoder_pause_port()
610 static int saa7164_encoder_stop_streaming(struct saa7164_port *port) in saa7164_encoder_stop_streaming() argument
612 struct saa7164_dev *dev = port->dev; in saa7164_encoder_stop_streaming()
618 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr); in saa7164_encoder_stop_streaming()
620 ret = saa7164_encoder_pause_port(port); in saa7164_encoder_stop_streaming()
621 ret = saa7164_encoder_acquire_port(port); in saa7164_encoder_stop_streaming()
622 ret = saa7164_encoder_stop_port(port); in saa7164_encoder_stop_streaming()
625 port->nr); in saa7164_encoder_stop_streaming()
628 mutex_lock(&port->dmaqueue_lock); in saa7164_encoder_stop_streaming()
631 list_for_each_safe(c, n, &port->dmaqueue.list) { in saa7164_encoder_stop_streaming()
637 list_for_each_safe(c, n, &port->list_buf_used.list) { in saa7164_encoder_stop_streaming()
640 list_move_tail(&ubuf->list, &port->list_buf_free.list); in saa7164_encoder_stop_streaming()
643 mutex_unlock(&port->dmaqueue_lock); in saa7164_encoder_stop_streaming()
646 saa7164_encoder_buffers_dealloc(port); in saa7164_encoder_stop_streaming()
648 dprintk(DBGLVL_ENC, "%s(port=%d) Released\n", __func__, port->nr); in saa7164_encoder_stop_streaming()
653 static int saa7164_encoder_start_streaming(struct saa7164_port *port) in saa7164_encoder_start_streaming() argument
655 struct saa7164_dev *dev = port->dev; in saa7164_encoder_start_streaming()
658 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr); in saa7164_encoder_start_streaming()
660 port->done_first_interrupt = 0; in saa7164_encoder_start_streaming()
666 saa7164_encoder_buffers_alloc(port); in saa7164_encoder_start_streaming()
669 saa7164_api_set_encoder(port); in saa7164_encoder_start_streaming()
670 saa7164_api_get_encoder(port); in saa7164_encoder_start_streaming()
673 saa7164_buffer_cfg_port(port); in saa7164_encoder_start_streaming()
676 result = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE); in saa7164_encoder_start_streaming()
682 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP); in saa7164_encoder_start_streaming()
693 result = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE); in saa7164_encoder_start_streaming()
699 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP); in saa7164_encoder_start_streaming()
711 result = saa7164_api_transition_port(port, SAA_DMASTATE_RUN); in saa7164_encoder_start_streaming()
717 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP); in saa7164_encoder_start_streaming()
734 struct saa7164_port *port; in fops_open() local
737 port = (struct saa7164_port *)video_get_drvdata(video_devdata(file)); in fops_open()
738 if (!port) in fops_open()
741 dev = port->dev; in fops_open()
750 fh->port = port; in fops_open()
761 struct saa7164_port *port = fh->port; in fops_release() local
762 struct saa7164_dev *dev = port->dev; in fops_release()
768 if (atomic_dec_return(&port->v4l_reader_count) == 0) { in fops_release()
770 saa7164_encoder_stop_streaming(port); in fops_release()
782 saa7164_user_buffer *saa7164_enc_next_buf(struct saa7164_port *port) in saa7164_enc_next_buf() argument
785 struct saa7164_dev *dev = port->dev; in saa7164_enc_next_buf()
788 mutex_lock(&port->dmaqueue_lock); in saa7164_enc_next_buf()
789 if (!list_empty(&port->list_buf_used.list)) { in saa7164_enc_next_buf()
790 ubuf = list_first_entry(&port->list_buf_used.list, in saa7164_enc_next_buf()
804 mutex_unlock(&port->dmaqueue_lock); in saa7164_enc_next_buf()
815 struct saa7164_port *port = fh->port; in fops_read() local
817 struct saa7164_dev *dev = port->dev; in fops_read()
822 port->last_read_msecs_diff = port->last_read_msecs; in fops_read()
823 port->last_read_msecs = jiffies_to_msecs(jiffies); in fops_read()
824 port->last_read_msecs_diff = port->last_read_msecs - in fops_read()
825 port->last_read_msecs_diff; in fops_read()
827 saa7164_histogram_update(&port->read_interval, in fops_read()
828 port->last_read_msecs_diff); in fops_read()
836 if (atomic_inc_return(&port->v4l_reader_count) == 1) { in fops_read()
838 if (saa7164_encoder_initialize(port) < 0) { in fops_read()
843 saa7164_encoder_start_streaming(port); in fops_read()
850 if (wait_event_interruptible(port->wait_read, in fops_read()
851 saa7164_enc_next_buf(port))) { in fops_read()
858 ubuf = saa7164_enc_next_buf(port); in fops_read()
896 mutex_lock(&port->dmaqueue_lock); in fops_read()
897 list_move_tail(&ubuf->list, &port->list_buf_free.list); in fops_read()
898 mutex_unlock(&port->dmaqueue_lock); in fops_read()
902 if (wait_event_interruptible(port->wait_read, in fops_read()
903 saa7164_enc_next_buf(port))) { in fops_read()
907 ubuf = saa7164_enc_next_buf(port); in fops_read()
922 struct saa7164_port *port = fh->port; in fops_poll() local
925 port->last_poll_msecs_diff = port->last_poll_msecs; in fops_poll()
926 port->last_poll_msecs = jiffies_to_msecs(jiffies); in fops_poll()
927 port->last_poll_msecs_diff = port->last_poll_msecs - in fops_poll()
928 port->last_poll_msecs_diff; in fops_poll()
930 saa7164_histogram_update(&port->poll_interval, in fops_poll()
931 port->last_poll_msecs_diff); in fops_poll()
937 if (atomic_inc_return(&port->v4l_reader_count) == 1) { in fops_poll()
938 if (saa7164_encoder_initialize(port) < 0) in fops_poll()
940 saa7164_encoder_start_streaming(port); in fops_poll()
946 if (!list_empty(&port->list_buf_used.list)) in fops_poll()
994 struct saa7164_port *port, in saa7164_encoder_alloc() argument
1000 struct saa7164_dev *dev = port->dev; in saa7164_encoder_alloc()
1017 int saa7164_encoder_register(struct saa7164_port *port) in saa7164_encoder_register() argument
1019 struct saa7164_dev *dev = port->dev; in saa7164_encoder_register()
1020 struct v4l2_ctrl_handler *hdl = &port->ctrl_handler; in saa7164_encoder_register()
1025 if (port->type != SAA7164_MPEG_ENCODER) in saa7164_encoder_register()
1029 if (port->hwcfg.BARLocation == 0) { in saa7164_encoder_register()
1039 port->encodernorm = saa7164_tvnorms[0]; in saa7164_encoder_register()
1040 port->width = 720; in saa7164_encoder_register()
1041 port->mux_input = 1; /* Composite */ in saa7164_encoder_register()
1042 port->video_format = EU_VIDEO_FORMAT_MPEG_2; in saa7164_encoder_register()
1043 port->audio_format = 0; in saa7164_encoder_register()
1044 port->video_resolution = 0; in saa7164_encoder_register()
1045 port->freq = SAA7164_TV_MIN_FREQ; in saa7164_encoder_register()
1091 port->std = V4L2_STD_NTSC_M; in saa7164_encoder_register()
1093 if (port->encodernorm.id & V4L2_STD_525_60) in saa7164_encoder_register()
1094 port->height = 480; in saa7164_encoder_register()
1096 port->height = 576; in saa7164_encoder_register()
1099 port->v4l_device = saa7164_encoder_alloc(port, in saa7164_encoder_register()
1102 if (!port->v4l_device) { in saa7164_encoder_register()
1109 port->v4l_device->ctrl_handler = hdl; in saa7164_encoder_register()
1111 video_set_drvdata(port->v4l_device, port); in saa7164_encoder_register()
1112 result = video_register_device(port->v4l_device, in saa7164_encoder_register()
1124 dev->name, port->v4l_device->num); in saa7164_encoder_register()
1127 saa7164_api_set_videomux(port); in saa7164_encoder_register()
1128 saa7164_api_set_usercontrol(port, PU_BRIGHTNESS_CONTROL); in saa7164_encoder_register()
1129 saa7164_api_set_usercontrol(port, PU_CONTRAST_CONTROL); in saa7164_encoder_register()
1130 saa7164_api_set_usercontrol(port, PU_HUE_CONTROL); in saa7164_encoder_register()
1131 saa7164_api_set_usercontrol(port, PU_SATURATION_CONTROL); in saa7164_encoder_register()
1132 saa7164_api_set_usercontrol(port, PU_SHARPNESS_CONTROL); in saa7164_encoder_register()
1133 saa7164_api_audio_mute(port, 0); in saa7164_encoder_register()
1134 saa7164_api_set_audio_volume(port, 20); in saa7164_encoder_register()
1135 saa7164_api_set_aspect_ratio(port); in saa7164_encoder_register()
1138 saa7164_api_set_audio_detection(port, 0); in saa7164_encoder_register()
1140 saa7164_api_set_encoder(port); in saa7164_encoder_register()
1141 saa7164_api_get_encoder(port); in saa7164_encoder_register()
1148 void saa7164_encoder_unregister(struct saa7164_port *port) in saa7164_encoder_unregister() argument
1150 struct saa7164_dev *dev = port->dev; in saa7164_encoder_unregister()
1152 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr); in saa7164_encoder_unregister()
1154 if (port->type != SAA7164_MPEG_ENCODER) in saa7164_encoder_unregister()
1157 if (port->v4l_device) { in saa7164_encoder_unregister()
1158 if (port->v4l_device->minor != -1) in saa7164_encoder_unregister()
1159 video_unregister_device(port->v4l_device); in saa7164_encoder_unregister()
1161 video_device_release(port->v4l_device); in saa7164_encoder_unregister()
1163 port->v4l_device = NULL; in saa7164_encoder_unregister()
1165 v4l2_ctrl_handler_free(&port->ctrl_handler); in saa7164_encoder_unregister()
1167 dprintk(DBGLVL_ENC, "%s(port=%d) done\n", __func__, port->nr); in saa7164_encoder_unregister()