Lines Matching refs:port
27 static void saa7164_vbi_configure(struct saa7164_port *port) in saa7164_vbi_configure() argument
29 struct saa7164_dev *dev = port->dev; in saa7164_vbi_configure()
32 port->vbi_params.width = port->enc_port->width; in saa7164_vbi_configure()
33 port->vbi_params.height = port->enc_port->height; in saa7164_vbi_configure()
34 port->vbi_params.is_50hz = in saa7164_vbi_configure()
35 (port->enc_port->encodernorm.id & V4L2_STD_625_50) != 0; in saa7164_vbi_configure()
38 saa7164_api_initialize_dif(port); in saa7164_vbi_configure()
42 static int saa7164_vbi_buffers_dealloc(struct saa7164_port *port) in saa7164_vbi_buffers_dealloc() argument
45 struct saa7164_dev *dev = port->dev; in saa7164_vbi_buffers_dealloc()
50 mutex_lock(&port->dmaqueue_lock); in saa7164_vbi_buffers_dealloc()
52 dprintk(DBGLVL_VBI, "%s(port=%d) dmaqueue\n", __func__, port->nr); in saa7164_vbi_buffers_dealloc()
53 list_for_each_safe(c, n, &port->dmaqueue.list) { in saa7164_vbi_buffers_dealloc()
59 dprintk(DBGLVL_VBI, "%s(port=%d) used\n", __func__, port->nr); in saa7164_vbi_buffers_dealloc()
60 list_for_each_safe(p, q, &port->list_buf_used.list) { in saa7164_vbi_buffers_dealloc()
66 dprintk(DBGLVL_VBI, "%s(port=%d) free\n", __func__, port->nr); in saa7164_vbi_buffers_dealloc()
67 list_for_each_safe(l, v, &port->list_buf_free.list) { in saa7164_vbi_buffers_dealloc()
73 mutex_unlock(&port->dmaqueue_lock); in saa7164_vbi_buffers_dealloc()
74 dprintk(DBGLVL_VBI, "%s(port=%d) done\n", __func__, port->nr); in saa7164_vbi_buffers_dealloc()
80 static int saa7164_vbi_buffers_alloc(struct saa7164_port *port) in saa7164_vbi_buffers_alloc() argument
82 struct saa7164_dev *dev = port->dev; in saa7164_vbi_buffers_alloc()
85 struct tmHWStreamParameters *params = &port->hw_streamingparams; in saa7164_vbi_buffers_alloc()
104 params->numpagetableentries = port->hwcfg.buffercount; in saa7164_vbi_buffers_alloc()
107 for (i = 0; i < port->hwcfg.buffercount; i++) { in saa7164_vbi_buffers_alloc()
108 buf = saa7164_buffer_alloc(port, in saa7164_vbi_buffers_alloc()
120 mutex_lock(&port->dmaqueue_lock); in saa7164_vbi_buffers_alloc()
121 list_add_tail(&buf->list, &port->dmaqueue.list); in saa7164_vbi_buffers_alloc()
122 mutex_unlock(&port->dmaqueue_lock); in saa7164_vbi_buffers_alloc()
141 mutex_lock(&port->dmaqueue_lock); in saa7164_vbi_buffers_alloc()
142 list_add_tail(&ubuf->list, &port->list_buf_free.list); in saa7164_vbi_buffers_alloc()
143 mutex_unlock(&port->dmaqueue_lock); in saa7164_vbi_buffers_alloc()
155 static int saa7164_vbi_initialize(struct saa7164_port *port) in saa7164_vbi_initialize() argument
157 saa7164_vbi_configure(port); in saa7164_vbi_initialize()
166 return saa7164_s_std(fh->port->enc_port, id); in vidioc_s_std()
173 return saa7164_g_std(fh->port->enc_port, id); in vidioc_g_std()
180 return saa7164_g_input(fh->port->enc_port, i); in vidioc_g_input()
187 return saa7164_s_input(fh->port->enc_port, i); in vidioc_s_input()
195 return saa7164_g_frequency(fh->port->enc_port, f); in vidioc_g_frequency()
202 int ret = saa7164_s_frequency(fh->port->enc_port, f); in vidioc_s_frequency()
205 saa7164_vbi_initialize(fh->port); in vidioc_s_frequency()
213 struct saa7164_port *port = fh->port; in vidioc_querycap() local
214 struct saa7164_dev *dev = port->dev; in vidioc_querycap()
233 static int saa7164_vbi_stop_port(struct saa7164_port *port) in saa7164_vbi_stop_port() argument
235 struct saa7164_dev *dev = port->dev; in saa7164_vbi_stop_port()
238 ret = saa7164_api_transition_port(port, SAA_DMASTATE_STOP); in saa7164_vbi_stop_port()
251 static int saa7164_vbi_acquire_port(struct saa7164_port *port) in saa7164_vbi_acquire_port() argument
253 struct saa7164_dev *dev = port->dev; in saa7164_vbi_acquire_port()
256 ret = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE); in saa7164_vbi_acquire_port()
269 static int saa7164_vbi_pause_port(struct saa7164_port *port) in saa7164_vbi_pause_port() argument
271 struct saa7164_dev *dev = port->dev; in saa7164_vbi_pause_port()
274 ret = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE); in saa7164_vbi_pause_port()
293 static int saa7164_vbi_stop_streaming(struct saa7164_port *port) in saa7164_vbi_stop_streaming() argument
295 struct saa7164_dev *dev = port->dev; in saa7164_vbi_stop_streaming()
301 dprintk(DBGLVL_VBI, "%s(port=%d)\n", __func__, port->nr); in saa7164_vbi_stop_streaming()
303 ret = saa7164_vbi_pause_port(port); in saa7164_vbi_stop_streaming()
304 ret = saa7164_vbi_acquire_port(port); in saa7164_vbi_stop_streaming()
305 ret = saa7164_vbi_stop_port(port); in saa7164_vbi_stop_streaming()
308 port->nr); in saa7164_vbi_stop_streaming()
311 mutex_lock(&port->dmaqueue_lock); in saa7164_vbi_stop_streaming()
314 list_for_each_safe(c, n, &port->dmaqueue.list) { in saa7164_vbi_stop_streaming()
320 list_for_each_safe(c, n, &port->list_buf_used.list) { in saa7164_vbi_stop_streaming()
323 list_move_tail(&ubuf->list, &port->list_buf_free.list); in saa7164_vbi_stop_streaming()
326 mutex_unlock(&port->dmaqueue_lock); in saa7164_vbi_stop_streaming()
329 saa7164_vbi_buffers_dealloc(port); in saa7164_vbi_stop_streaming()
331 dprintk(DBGLVL_VBI, "%s(port=%d) Released\n", __func__, port->nr); in saa7164_vbi_stop_streaming()
336 static int saa7164_vbi_start_streaming(struct saa7164_port *port) in saa7164_vbi_start_streaming() argument
338 struct saa7164_dev *dev = port->dev; in saa7164_vbi_start_streaming()
341 dprintk(DBGLVL_VBI, "%s(port=%d)\n", __func__, port->nr); in saa7164_vbi_start_streaming()
343 port->done_first_interrupt = 0; in saa7164_vbi_start_streaming()
349 saa7164_vbi_buffers_alloc(port); in saa7164_vbi_start_streaming()
353 saa7164_api_set_encoder(port); in saa7164_vbi_start_streaming()
354 saa7164_api_get_encoder(port); in saa7164_vbi_start_streaming()
358 saa7164_buffer_cfg_port(port); in saa7164_vbi_start_streaming()
361 if (saa7164_api_set_vbi_format(port) != SAA_OK) { in saa7164_vbi_start_streaming()
368 result = saa7164_api_transition_port(port, SAA_DMASTATE_ACQUIRE); in saa7164_vbi_start_streaming()
379 result = saa7164_api_transition_port(port, SAA_DMASTATE_PAUSE); in saa7164_vbi_start_streaming()
385 result = saa7164_vbi_stop_port(port); in saa7164_vbi_start_streaming()
397 result = saa7164_api_transition_port(port, SAA_DMASTATE_RUN); in saa7164_vbi_start_streaming()
403 result = saa7164_vbi_acquire_port(port); in saa7164_vbi_start_streaming()
404 result = saa7164_vbi_stop_port(port); in saa7164_vbi_start_streaming()
438 struct saa7164_port *port; in fops_open() local
441 port = (struct saa7164_port *)video_get_drvdata(video_devdata(file)); in fops_open()
442 if (!port) in fops_open()
445 dev = port->dev; in fops_open()
454 fh->port = port; in fops_open()
465 struct saa7164_port *port = fh->port; in fops_release() local
466 struct saa7164_dev *dev = port->dev; in fops_release()
472 if (atomic_dec_return(&port->v4l_reader_count) == 0) { in fops_release()
474 saa7164_vbi_stop_streaming(port); in fops_release()
486 saa7164_user_buffer *saa7164_vbi_next_buf(struct saa7164_port *port) in saa7164_vbi_next_buf() argument
489 struct saa7164_dev *dev = port->dev; in saa7164_vbi_next_buf()
492 mutex_lock(&port->dmaqueue_lock); in saa7164_vbi_next_buf()
493 if (!list_empty(&port->list_buf_used.list)) { in saa7164_vbi_next_buf()
494 ubuf = list_first_entry(&port->list_buf_used.list, in saa7164_vbi_next_buf()
507 mutex_unlock(&port->dmaqueue_lock); in saa7164_vbi_next_buf()
518 struct saa7164_port *port = fh->port; in fops_read() local
520 struct saa7164_dev *dev = port->dev; in fops_read()
525 port->last_read_msecs_diff = port->last_read_msecs; in fops_read()
526 port->last_read_msecs = jiffies_to_msecs(jiffies); in fops_read()
527 port->last_read_msecs_diff = port->last_read_msecs - in fops_read()
528 port->last_read_msecs_diff; in fops_read()
530 saa7164_histogram_update(&port->read_interval, in fops_read()
531 port->last_read_msecs_diff); in fops_read()
539 if (atomic_inc_return(&port->v4l_reader_count) == 1) { in fops_read()
541 if (saa7164_vbi_initialize(port) < 0) { in fops_read()
546 saa7164_vbi_start_streaming(port); in fops_read()
553 if (wait_event_interruptible(port->wait_read, in fops_read()
554 saa7164_vbi_next_buf(port))) { in fops_read()
561 ubuf = saa7164_vbi_next_buf(port); in fops_read()
599 mutex_lock(&port->dmaqueue_lock); in fops_read()
600 list_move_tail(&ubuf->list, &port->list_buf_free.list); in fops_read()
601 mutex_unlock(&port->dmaqueue_lock); in fops_read()
605 if (wait_event_interruptible(port->wait_read, in fops_read()
606 saa7164_vbi_next_buf(port))) { in fops_read()
610 ubuf = saa7164_vbi_next_buf(port); in fops_read()
625 struct saa7164_port *port = fh->port; in fops_poll() local
628 port->last_poll_msecs_diff = port->last_poll_msecs; in fops_poll()
629 port->last_poll_msecs = jiffies_to_msecs(jiffies); in fops_poll()
630 port->last_poll_msecs_diff = port->last_poll_msecs - in fops_poll()
631 port->last_poll_msecs_diff; in fops_poll()
633 saa7164_histogram_update(&port->poll_interval, in fops_poll()
634 port->last_poll_msecs_diff); in fops_poll()
636 if (!video_is_registered(port->v4l_device)) in fops_poll()
640 if (atomic_inc_return(&port->v4l_reader_count) == 1) { in fops_poll()
641 if (saa7164_vbi_initialize(port) < 0) in fops_poll()
643 saa7164_vbi_start_streaming(port); in fops_poll()
650 if (wait_event_interruptible(port->wait_read, in fops_poll()
651 saa7164_vbi_next_buf(port))) { in fops_poll()
657 if (!list_empty(&port->list_buf_used.list)) in fops_poll()
696 struct saa7164_port *port, in saa7164_vbi_alloc() argument
702 struct saa7164_dev *dev = port->dev; in saa7164_vbi_alloc()
719 int saa7164_vbi_register(struct saa7164_port *port) in saa7164_vbi_register() argument
721 struct saa7164_dev *dev = port->dev; in saa7164_vbi_register()
726 if (port->type != SAA7164_MPEG_VBI) in saa7164_vbi_register()
730 if (port->hwcfg.BARLocation == 0) { in saa7164_vbi_register()
741 port->v4l_device = saa7164_vbi_alloc(port, in saa7164_vbi_register()
744 if (!port->v4l_device) { in saa7164_vbi_register()
751 port->enc_port = &dev->ports[port->nr - 2]; in saa7164_vbi_register()
752 video_set_drvdata(port->v4l_device, port); in saa7164_vbi_register()
753 result = video_register_device(port->v4l_device, in saa7164_vbi_register()
765 dev->name, port->v4l_device->num); in saa7164_vbi_register()
774 void saa7164_vbi_unregister(struct saa7164_port *port) in saa7164_vbi_unregister() argument
776 struct saa7164_dev *dev = port->dev; in saa7164_vbi_unregister()
778 dprintk(DBGLVL_VBI, "%s(port=%d)\n", __func__, port->nr); in saa7164_vbi_unregister()
780 if (port->type != SAA7164_MPEG_VBI) in saa7164_vbi_unregister()
783 if (port->v4l_device) { in saa7164_vbi_unregister()
784 if (port->v4l_device->minor != -1) in saa7164_vbi_unregister()
785 video_unregister_device(port->v4l_device); in saa7164_vbi_unregister()
787 video_device_release(port->v4l_device); in saa7164_vbi_unregister()
789 port->v4l_device = NULL; in saa7164_vbi_unregister()