Lines Matching refs:port
36 /* Take the encoder configuration form the port struct and
39 static void saa7164_encoder_configure(struct saa7164_port *port)
41 struct saa7164_dev *dev = port->dev;
44 port->encoder_params.width = port->width;
45 port->encoder_params.height = port->height;
46 port->encoder_params.is_50hz =
47 (port->encodernorm.id & V4L2_STD_625_50) != 0;
50 saa7164_api_initialize_dif(port);
53 saa7164_api_configure_dif(port, port->encodernorm.id);
56 saa7164_api_set_audio_std(port);
59 static int saa7164_encoder_buffers_dealloc(struct saa7164_port *port)
62 struct saa7164_dev *dev = port->dev;
67 mutex_lock(&port->dmaqueue_lock);
69 dprintk(DBGLVL_ENC, "%s(port=%d) dmaqueue\n", __func__, port->nr);
70 list_for_each_safe(c, n, &port->dmaqueue.list) {
76 dprintk(DBGLVL_ENC, "%s(port=%d) used\n", __func__, port->nr);
77 list_for_each_safe(p, q, &port->list_buf_used.list) {
83 dprintk(DBGLVL_ENC, "%s(port=%d) free\n", __func__, port->nr);
84 list_for_each_safe(l, v, &port->list_buf_free.list) {
90 mutex_unlock(&port->dmaqueue_lock);
91 dprintk(DBGLVL_ENC, "%s(port=%d) done\n", __func__, port->nr);
97 static int saa7164_encoder_buffers_alloc(struct saa7164_port *port)
99 struct saa7164_dev *dev = port->dev;
102 struct tmHWStreamParameters *params = &port->hw_streamingparams;
108 if (port->encoder_params.stream_type ==
119 if (port->encoder_params.stream_type ==
137 params->numpagetableentries = port->hwcfg.buffercount;
140 for (i = 0; i < port->hwcfg.buffercount; i++) {
141 buf = saa7164_buffer_alloc(port,
152 mutex_lock(&port->dmaqueue_lock);
153 list_add_tail(&buf->list, &port->dmaqueue.list);
154 mutex_unlock(&port->dmaqueue_lock);
173 mutex_lock(&port->dmaqueue_lock);
174 list_add_tail(&ubuf->list, &port->list_buf_free.list);
175 mutex_unlock(&port->dmaqueue_lock);
186 static int saa7164_encoder_initialize(struct saa7164_port *port)
188 saa7164_encoder_configure(port);
193 int saa7164_s_std(struct saa7164_port *port, v4l2_std_id id)
195 struct saa7164_dev *dev = port->dev;
207 port->encodernorm = saa7164_tvnorms[i];
208 port->std = id;
213 saa7164_api_set_audio_std(port);
224 return saa7164_s_std(fh->port, id);
227 int saa7164_g_std(struct saa7164_port *port, v4l2_std_id *id)
229 *id = port->std;
237 return saa7164_g_std(fh->port, id);
264 int saa7164_g_input(struct saa7164_port *port, unsigned int *i)
266 struct saa7164_dev *dev = port->dev;
268 if (saa7164_api_get_videomux(port) != SAA_OK)
271 *i = (port->mux_input - 1);
282 return saa7164_g_input(fh->port, i);
285 int saa7164_s_input(struct saa7164_port *port, unsigned int i)
287 struct saa7164_dev *dev = port->dev;
294 port->mux_input = i + 1;
296 if (saa7164_api_set_videomux(port) != SAA_OK)
306 return saa7164_s_input(fh->port, i);
312 struct saa7164_port *port = fh->port;
313 struct saa7164_dev *dev = port->dev;
338 int saa7164_g_frequency(struct saa7164_port *port, struct v4l2_frequency *f)
343 f->frequency = port->freq;
352 return saa7164_g_frequency(fh->port, f);
355 int saa7164_s_frequency(struct saa7164_port *port,
358 struct saa7164_dev *dev = port->dev;
366 .std = port->encodernorm.id,
377 port->freq = clamp(f->frequency,
381 if (port->nr == SAA7164_PORT_ENC1)
383 else if (port->nr == SAA7164_PORT_ENC2)
395 saa7164_encoder_initialize(port);
405 return saa7164_s_frequency(fh->port, f);
410 struct saa7164_port *port =
412 struct saa7164_encoder_params *params = &port->encoder_params;
417 port->ctl_brightness = ctrl->val;
418 saa7164_api_set_usercontrol(port, PU_BRIGHTNESS_CONTROL);
421 port->ctl_contrast = ctrl->val;
422 saa7164_api_set_usercontrol(port, PU_CONTRAST_CONTROL);
425 port->ctl_saturation = ctrl->val;
426 saa7164_api_set_usercontrol(port, PU_SATURATION_CONTROL);
429 port->ctl_hue = ctrl->val;
430 saa7164_api_set_usercontrol(port, PU_HUE_CONTROL);
433 port->ctl_sharpness = ctrl->val;
434 saa7164_api_set_usercontrol(port, PU_SHARPNESS_CONTROL);
437 port->ctl_volume = ctrl->val;
438 saa7164_api_set_audio_volume(port, port->ctl_volume);
448 ret = saa7164_api_audio_mute(port, params->ctl_mute);
457 ret = saa7164_api_set_aspect_ratio(port);
487 struct saa7164_port *port = fh->port;
488 struct saa7164_dev *dev = port->dev;
514 struct saa7164_port *port = fh->port;
521 f->fmt.pix.width = port->width;
522 f->fmt.pix.height = port->height;
526 static int saa7164_encoder_stop_port(struct saa7164_port *port)
528 struct saa7164_dev *dev = port->dev;
531 ret = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
544 static int saa7164_encoder_acquire_port(struct saa7164_port *port)
546 struct saa7164_dev *dev = port->dev;
549 ret = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE);
562 static int saa7164_encoder_pause_port(struct saa7164_port *port)
564 struct saa7164_dev *dev = port->dev;
567 ret = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE);
586 static int saa7164_encoder_stop_streaming(struct saa7164_port *port)
588 struct saa7164_dev *dev = port->dev;
594 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr);
596 ret = saa7164_encoder_pause_port(port);
597 ret = saa7164_encoder_acquire_port(port);
598 ret = saa7164_encoder_stop_port(port);
600 dprintk(DBGLVL_ENC, "%s(port=%d) Hardware stopped\n", __func__,
601 port->nr);
604 mutex_lock(&port->dmaqueue_lock);
607 list_for_each_safe(c, n, &port->dmaqueue.list) {
613 list_for_each_safe(c, n, &port->list_buf_used.list) {
616 list_move_tail(&ubuf->list, &port->list_buf_free.list);
619 mutex_unlock(&port->dmaqueue_lock);
622 saa7164_encoder_buffers_dealloc(port);
624 dprintk(DBGLVL_ENC, "%s(port=%d) Released\n", __func__, port->nr);
629 static int saa7164_encoder_start_streaming(struct saa7164_port *port)
631 struct saa7164_dev *dev = port->dev;
634 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr);
636 port->done_first_interrupt = 0;
642 saa7164_encoder_buffers_alloc(port);
645 saa7164_api_set_encoder(port);
646 saa7164_api_get_encoder(port);
649 saa7164_buffer_cfg_port(port);
652 result = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE);
658 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
669 result = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE);
675 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
687 result = saa7164_api_transition_port(port, SAA_DMASTATE_RUN);
693 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
710 struct saa7164_port *port;
713 port = (struct saa7164_port *)video_get_drvdata(video_devdata(file));
714 if (!port)
717 dev = port->dev;
726 fh->port = port;
737 struct saa7164_port *port = fh->port;
738 struct saa7164_dev *dev = port->dev;
744 if (atomic_dec_return(&port->v4l_reader_count) == 0) {
746 saa7164_encoder_stop_streaming(port);
758 saa7164_user_buffer *saa7164_enc_next_buf(struct saa7164_port *port)
761 struct saa7164_dev *dev = port->dev;
764 mutex_lock(&port->dmaqueue_lock);
765 if (!list_empty(&port->list_buf_used.list)) {
766 ubuf = list_first_entry(&port->list_buf_used.list,
780 mutex_unlock(&port->dmaqueue_lock);
791 struct saa7164_port *port = fh->port;
793 struct saa7164_dev *dev = port->dev;
798 port->last_read_msecs_diff = port->last_read_msecs;
799 port->last_read_msecs = jiffies_to_msecs(jiffies);
800 port->last_read_msecs_diff = port->last_read_msecs -
801 port->last_read_msecs_diff;
803 saa7164_histogram_update(&port->read_interval,
804 port->last_read_msecs_diff);
812 if (atomic_inc_return(&port->v4l_reader_count) == 1) {
814 if (saa7164_encoder_initialize(port) < 0) {
819 saa7164_encoder_start_streaming(port);
826 if (wait_event_interruptible(port->wait_read,
827 saa7164_enc_next_buf(port))) {
834 ubuf = saa7164_enc_next_buf(port);
872 mutex_lock(&port->dmaqueue_lock);
873 list_move_tail(&ubuf->list, &port->list_buf_free.list);
874 mutex_unlock(&port->dmaqueue_lock);
878 if (wait_event_interruptible(port->wait_read,
879 saa7164_enc_next_buf(port))) {
883 ubuf = saa7164_enc_next_buf(port);
898 struct saa7164_port *port = fh->port;
901 port->last_poll_msecs_diff = port->last_poll_msecs;
902 port->last_poll_msecs = jiffies_to_msecs(jiffies);
903 port->last_poll_msecs_diff = port->last_poll_msecs -
904 port->last_poll_msecs_diff;
906 saa7164_histogram_update(&port->poll_interval,
907 port->last_poll_msecs_diff);
913 if (atomic_inc_return(&port->v4l_reader_count) == 1) {
914 if (saa7164_encoder_initialize(port) < 0)
916 saa7164_encoder_start_streaming(port);
922 if (!list_empty(&port->list_buf_used.list))
972 struct saa7164_port *port,
978 struct saa7164_dev *dev = port->dev;
995 int saa7164_encoder_register(struct saa7164_port *port)
997 struct saa7164_dev *dev = port->dev;
998 struct v4l2_ctrl_handler *hdl = &port->ctrl_handler;
1003 BUG_ON(port->type != SAA7164_MPEG_ENCODER);
1006 if (port->hwcfg.BARLocation == 0) {
1015 port->encodernorm = saa7164_tvnorms[0];
1016 port->width = 720;
1017 port->mux_input = 1; /* Composite */
1018 port->video_format = EU_VIDEO_FORMAT_MPEG_2;
1019 port->audio_format = 0;
1020 port->video_resolution = 0;
1021 port->freq = SAA7164_TV_MIN_FREQ;
1067 port->std = V4L2_STD_NTSC_M;
1069 if (port->encodernorm.id & V4L2_STD_525_60)
1070 port->height = 480;
1072 port->height = 576;
1075 port->v4l_device = saa7164_encoder_alloc(port,
1078 if (!port->v4l_device) {
1085 port->v4l_device->ctrl_handler = hdl;
1087 video_set_drvdata(port->v4l_device, port);
1088 result = video_register_device(port->v4l_device,
1097 dev->name, port->v4l_device->num);
1100 saa7164_api_set_videomux(port);
1101 saa7164_api_set_usercontrol(port, PU_BRIGHTNESS_CONTROL);
1102 saa7164_api_set_usercontrol(port, PU_CONTRAST_CONTROL);
1103 saa7164_api_set_usercontrol(port, PU_HUE_CONTROL);
1104 saa7164_api_set_usercontrol(port, PU_SATURATION_CONTROL);
1105 saa7164_api_set_usercontrol(port, PU_SHARPNESS_CONTROL);
1106 saa7164_api_audio_mute(port, 0);
1107 saa7164_api_set_audio_volume(port, 20);
1108 saa7164_api_set_aspect_ratio(port);
1111 saa7164_api_set_audio_detection(port, 0);
1113 saa7164_api_set_encoder(port);
1114 saa7164_api_get_encoder(port);
1118 video_device_release(port->v4l_device);
1119 port->v4l_device = NULL;
1126 void saa7164_encoder_unregister(struct saa7164_port *port)
1128 struct saa7164_dev *dev = port->dev;
1130 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr);
1132 BUG_ON(port->type != SAA7164_MPEG_ENCODER);
1134 if (port->v4l_device) {
1135 if (port->v4l_device->minor != -1)
1136 video_unregister_device(port->v4l_device);
1138 video_device_release(port->v4l_device);
1140 port->v4l_device = NULL;
1142 v4l2_ctrl_handler_free(&port->ctrl_handler);
1144 dprintk(DBGLVL_ENC, "%s(port=%d) done\n", __func__, port->nr);