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;
515 struct saa7164_port *port = fh->port;
522 f->fmt.pix.width = port->width;
523 f->fmt.pix.height = port->height;
527 static int saa7164_encoder_stop_port(struct saa7164_port *port)
529 struct saa7164_dev *dev = port->dev;
532 ret = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
545 static int saa7164_encoder_acquire_port(struct saa7164_port *port)
547 struct saa7164_dev *dev = port->dev;
550 ret = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE);
563 static int saa7164_encoder_pause_port(struct saa7164_port *port)
565 struct saa7164_dev *dev = port->dev;
568 ret = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE);
587 static int saa7164_encoder_stop_streaming(struct saa7164_port *port)
589 struct saa7164_dev *dev = port->dev;
595 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr);
597 ret = saa7164_encoder_pause_port(port);
598 ret = saa7164_encoder_acquire_port(port);
599 ret = saa7164_encoder_stop_port(port);
601 dprintk(DBGLVL_ENC, "%s(port=%d) Hardware stopped\n", __func__,
602 port->nr);
605 mutex_lock(&port->dmaqueue_lock);
608 list_for_each_safe(c, n, &port->dmaqueue.list) {
614 list_for_each_safe(c, n, &port->list_buf_used.list) {
617 list_move_tail(&ubuf->list, &port->list_buf_free.list);
620 mutex_unlock(&port->dmaqueue_lock);
623 saa7164_encoder_buffers_dealloc(port);
625 dprintk(DBGLVL_ENC, "%s(port=%d) Released\n", __func__, port->nr);
630 static int saa7164_encoder_start_streaming(struct saa7164_port *port)
632 struct saa7164_dev *dev = port->dev;
635 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr);
637 port->done_first_interrupt = 0;
643 saa7164_encoder_buffers_alloc(port);
646 saa7164_api_set_encoder(port);
647 saa7164_api_get_encoder(port);
650 saa7164_buffer_cfg_port(port);
653 result = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE);
659 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
670 result = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE);
676 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
688 result = saa7164_api_transition_port(port, SAA_DMASTATE_RUN);
694 result = saa7164_api_transition_port(port, SAA_DMASTATE_STOP);
711 struct saa7164_port *port;
714 port = (struct saa7164_port *)video_get_drvdata(video_devdata(file));
715 if (!port)
718 dev = port->dev;
727 fh->port = port;
738 struct saa7164_port *port = fh->port;
739 struct saa7164_dev *dev = port->dev;
745 if (atomic_dec_return(&port->v4l_reader_count) == 0) {
747 saa7164_encoder_stop_streaming(port);
759 saa7164_user_buffer *saa7164_enc_next_buf(struct saa7164_port *port)
762 struct saa7164_dev *dev = port->dev;
765 mutex_lock(&port->dmaqueue_lock);
766 if (!list_empty(&port->list_buf_used.list)) {
767 ubuf = list_first_entry(&port->list_buf_used.list,
781 mutex_unlock(&port->dmaqueue_lock);
792 struct saa7164_port *port = fh->port;
794 struct saa7164_dev *dev = port->dev;
799 port->last_read_msecs_diff = port->last_read_msecs;
800 port->last_read_msecs = jiffies_to_msecs(jiffies);
801 port->last_read_msecs_diff = port->last_read_msecs -
802 port->last_read_msecs_diff;
804 saa7164_histogram_update(&port->read_interval,
805 port->last_read_msecs_diff);
813 if (atomic_inc_return(&port->v4l_reader_count) == 1) {
815 if (saa7164_encoder_initialize(port) < 0) {
820 saa7164_encoder_start_streaming(port);
827 if (wait_event_interruptible(port->wait_read,
828 saa7164_enc_next_buf(port))) {
835 ubuf = saa7164_enc_next_buf(port);
873 mutex_lock(&port->dmaqueue_lock);
874 list_move_tail(&ubuf->list, &port->list_buf_free.list);
875 mutex_unlock(&port->dmaqueue_lock);
879 if (wait_event_interruptible(port->wait_read,
880 saa7164_enc_next_buf(port))) {
884 ubuf = saa7164_enc_next_buf(port);
899 struct saa7164_port *port = fh->port;
902 port->last_poll_msecs_diff = port->last_poll_msecs;
903 port->last_poll_msecs = jiffies_to_msecs(jiffies);
904 port->last_poll_msecs_diff = port->last_poll_msecs -
905 port->last_poll_msecs_diff;
907 saa7164_histogram_update(&port->poll_interval,
908 port->last_poll_msecs_diff);
914 if (atomic_inc_return(&port->v4l_reader_count) == 1) {
915 if (saa7164_encoder_initialize(port) < 0)
917 saa7164_encoder_start_streaming(port);
923 if (!list_empty(&port->list_buf_used.list))
973 struct saa7164_port *port,
979 struct saa7164_dev *dev = port->dev;
996 int saa7164_encoder_register(struct saa7164_port *port)
998 struct saa7164_dev *dev = port->dev;
999 struct v4l2_ctrl_handler *hdl = &port->ctrl_handler;
1004 BUG_ON(port->type != SAA7164_MPEG_ENCODER);
1007 if (port->hwcfg.BARLocation == 0) {
1016 port->encodernorm = saa7164_tvnorms[0];
1017 port->width = 720;
1018 port->mux_input = 1; /* Composite */
1019 port->video_format = EU_VIDEO_FORMAT_MPEG_2;
1020 port->audio_format = 0;
1021 port->video_resolution = 0;
1022 port->freq = SAA7164_TV_MIN_FREQ;
1068 port->std = V4L2_STD_NTSC_M;
1070 if (port->encodernorm.id & V4L2_STD_525_60)
1071 port->height = 480;
1073 port->height = 576;
1076 port->v4l_device = saa7164_encoder_alloc(port,
1079 if (!port->v4l_device) {
1086 port->v4l_device->ctrl_handler = hdl;
1088 video_set_drvdata(port->v4l_device, port);
1089 result = video_register_device(port->v4l_device,
1098 dev->name, port->v4l_device->num);
1101 saa7164_api_set_videomux(port);
1102 saa7164_api_set_usercontrol(port, PU_BRIGHTNESS_CONTROL);
1103 saa7164_api_set_usercontrol(port, PU_CONTRAST_CONTROL);
1104 saa7164_api_set_usercontrol(port, PU_HUE_CONTROL);
1105 saa7164_api_set_usercontrol(port, PU_SATURATION_CONTROL);
1106 saa7164_api_set_usercontrol(port, PU_SHARPNESS_CONTROL);
1107 saa7164_api_audio_mute(port, 0);
1108 saa7164_api_set_audio_volume(port, 20);
1109 saa7164_api_set_aspect_ratio(port);
1112 saa7164_api_set_audio_detection(port, 0);
1114 saa7164_api_set_encoder(port);
1115 saa7164_api_get_encoder(port);
1119 video_device_release(port->v4l_device);
1120 port->v4l_device = NULL;
1127 void saa7164_encoder_unregister(struct saa7164_port *port)
1129 struct saa7164_dev *dev = port->dev;
1131 dprintk(DBGLVL_ENC, "%s(port=%d)\n", __func__, port->nr);
1133 BUG_ON(port->type != SAA7164_MPEG_ENCODER);
1135 if (port->v4l_device) {
1136 if (port->v4l_device->minor != -1)
1137 video_unregister_device(port->v4l_device);
1139 video_device_release(port->v4l_device);
1141 port->v4l_device = NULL;
1143 v4l2_ctrl_handler_free(&port->ctrl_handler);
1145 dprintk(DBGLVL_ENC, "%s(port=%d) done\n", __func__, port->nr);