Lines Matching refs:itv
46 struct ivtv *itv = id->itv; in ivtv_claim_stream() local
47 struct ivtv_stream *s = &itv->streams[type]; in ivtv_claim_stream()
73 ivtv_clear_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_claim_stream()
83 itv->vbi.insert_mpeg && !ivtv_raw_vbi(itv)) { in ivtv_claim_stream()
88 s_vbi = &itv->streams[vbi_type]; in ivtv_claim_stream()
93 ivtv_clear_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_claim_stream()
105 struct ivtv *itv = s->itv; in ivtv_release_stream() local
123 ivtv_set_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_release_stream()
129 s_vbi = &itv->streams[IVTV_DEC_STREAM_TYPE_VBI]; in ivtv_release_stream()
131 s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_release_stream()
146 ivtv_set_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_release_stream()
152 static void ivtv_dualwatch(struct ivtv *itv) in ivtv_dualwatch() argument
158 new_stereo_mode = v4l2_ctrl_g_ctrl(itv->cxhdl.audio_mode); in ivtv_dualwatch()
160 ivtv_call_all(itv, tuner, g_tuner, &vt); in ivtv_dualwatch()
164 if (new_stereo_mode == itv->dualwatch_stereo_mode) in ivtv_dualwatch()
168 itv->dualwatch_stereo_mode, new_stereo_mode); in ivtv_dualwatch()
169 if (v4l2_ctrl_s_ctrl(itv->cxhdl.audio_mode, new_stereo_mode)) in ivtv_dualwatch()
173 static void ivtv_update_pgm_info(struct ivtv *itv) in ivtv_update_pgm_info() argument
175 u32 wr_idx = (read_enc(itv->pgm_info_offset) - itv->pgm_info_offset - 4) / 24; in ivtv_update_pgm_info()
179 if (wr_idx >= itv->pgm_info_num) { in ivtv_update_pgm_info()
180 IVTV_DEBUG_WARN("Invalid PGM index %d (>= %d)\n", wr_idx, itv->pgm_info_num); in ivtv_update_pgm_info()
183 cnt = (wr_idx + itv->pgm_info_num - itv->pgm_info_write_idx) % itv->pgm_info_num; in ivtv_update_pgm_info()
185 int idx = (itv->pgm_info_write_idx + i) % itv->pgm_info_num; in ivtv_update_pgm_info()
186 struct v4l2_enc_idx_entry *e = itv->pgm_info + idx; in ivtv_update_pgm_info()
187 u32 addr = itv->pgm_info_offset + 4 + idx * 24; in ivtv_update_pgm_info()
193 if (e->offset > itv->mpg_data_received) { in ivtv_update_pgm_info()
196 e->offset += itv->vbi_data_inserted; in ivtv_update_pgm_info()
202 itv->pgm_info_write_idx = (itv->pgm_info_write_idx + i) % itv->pgm_info_num; in ivtv_update_pgm_info()
207 struct ivtv *itv = s->itv; in ivtv_get_buffer() local
208 struct ivtv_stream *s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_get_buffer()
216 ivtv_update_pgm_info(itv); in ivtv_get_buffer()
219 itv->dualwatch_jiffies + in ivtv_get_buffer()
221 itv->dualwatch_jiffies = jiffies; in ivtv_get_buffer()
222 ivtv_dualwatch(itv); in ivtv_get_buffer()
229 ivtv_process_vbi_data(itv, buf, s_vbi->dma_pts, s_vbi->type); in ivtv_get_buffer()
233 buf = &itv->vbi.sliced_mpeg_buf; in ivtv_get_buffer()
255 ivtv_process_vbi_data(itv, buf, s->dma_pts, s->type); in ivtv_get_buffer()
273 mutex_unlock(&itv->serialize_lock); in ivtv_get_buffer()
279 mutex_lock(&itv->serialize_lock); in ivtv_get_buffer()
289 static void ivtv_setup_sliced_vbi_buf(struct ivtv *itv) in ivtv_setup_sliced_vbi_buf() argument
291 int idx = itv->vbi.inserted_frame % IVTV_VBI_FRAMES; in ivtv_setup_sliced_vbi_buf()
293 itv->vbi.sliced_mpeg_buf.buf = itv->vbi.sliced_mpeg_data[idx]; in ivtv_setup_sliced_vbi_buf()
294 itv->vbi.sliced_mpeg_buf.bytesused = itv->vbi.sliced_mpeg_size[idx]; in ivtv_setup_sliced_vbi_buf()
295 itv->vbi.sliced_mpeg_buf.readpos = 0; in ivtv_setup_sliced_vbi_buf()
301 struct ivtv *itv = s->itv; in ivtv_copy_buf_to_user() local
305 if (itv->vbi.insert_mpeg && s->type == IVTV_ENC_STREAM_TYPE_MPG && in ivtv_copy_buf_to_user()
306 !ivtv_raw_vbi(itv) && buf != &itv->vbi.sliced_mpeg_buf) { in ivtv_copy_buf_to_user()
310 u8 ch = itv->search_pack_header ? 0xba : 0xe0; in ivtv_copy_buf_to_user()
319 if (!itv->search_pack_header) { in ivtv_copy_buf_to_user()
325 itv->search_pack_header = 1; in ivtv_copy_buf_to_user()
338 itv->search_pack_header = 0; in ivtv_copy_buf_to_user()
340 ivtv_setup_sliced_vbi_buf(itv); in ivtv_copy_buf_to_user()
353 if (s->type == IVTV_ENC_STREAM_TYPE_MPG && buf != &itv->vbi.sliced_mpeg_buf) in ivtv_copy_buf_to_user()
354 itv->mpg_data_received += len; in ivtv_copy_buf_to_user()
360 struct ivtv *itv = s->itv; in ivtv_read() local
364 if (atomic_read(&itv->capturing) == 0 && s->fh == NULL) { in ivtv_read()
373 (s->type == IVTV_ENC_STREAM_TYPE_VBI && !ivtv_raw_vbi(itv))) in ivtv_read()
396 if (buf != &itv->vbi.sliced_mpeg_buf) { in ivtv_read()
400 int idx = itv->vbi.inserted_frame % IVTV_VBI_FRAMES; in ivtv_read()
401 itv->vbi.sliced_mpeg_size[idx] = 0; in ivtv_read()
402 itv->vbi.inserted_frame++; in ivtv_read()
403 itv->vbi_data_inserted += buf->bytesused; in ivtv_read()
419 struct ivtv *itv = s->itv; in ivtv_read_pos() local
429 struct ivtv *itv = id->itv; in ivtv_start_capture() local
430 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_start_capture()
459 s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_start_capture()
484 if (test_and_clear_bit(IVTV_F_I_ENC_PAUSED, &itv->i_flags)) in ivtv_start_capture()
485 ivtv_vapi(itv, CX2341X_ENC_PAUSE_ENCODER, 1, 1); in ivtv_start_capture()
508 struct ivtv *itv = id->itv; in ivtv_v4l2_read() local
509 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_read()
514 if (mutex_lock_interruptible(&itv->serialize_lock)) in ivtv_v4l2_read()
519 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_read()
525 struct ivtv *itv = id->itv; in ivtv_start_decoding() local
526 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_start_decoding()
529 if (atomic_read(&itv->decoding) == 0) { in ivtv_start_decoding()
544 return ivtv_set_speed(itv, speed); in ivtv_start_decoding()
551 struct ivtv *itv = id->itv; in ivtv_write() local
552 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_write()
553 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_write()
578 return ivtv_write_vbi_from_user(itv, in ivtv_write()
584 if (ivtv_set_output_mode(itv, mode) != mode) { in ivtv_write()
592 rc = ivtv_start_decoding(id, itv->speed); in ivtv_write()
605 if (mode == OUT_YUV && s->q_full.length == 0 && itv->dma_data_req_size) { in ivtv_write()
606 while (count >= itv->dma_data_req_size) { in ivtv_write()
607 rc = ivtv_yuv_udma_stream_frame(itv, (void __user *)user_buf); in ivtv_write()
612 bytes_written += itv->dma_data_req_size; in ivtv_write()
613 user_buf += itv->dma_data_req_size; in ivtv_write()
614 count -= itv->dma_data_req_size; in ivtv_write()
633 mutex_unlock(&itv->serialize_lock); in ivtv_write()
639 mutex_lock(&itv->serialize_lock); in ivtv_write()
651 yi->stream_size + count > itv->dma_data_req_size) in ivtv_write()
653 itv->dma_data_req_size - yi->stream_size); in ivtv_write()
669 if (yi->stream_size == itv->dma_data_req_size) { in ivtv_write()
688 if (s->q_full.length >= itv->dma_data_req_size) { in ivtv_write()
692 ivtv_yuv_setup_stream_frame(itv); in ivtv_write()
694 mutex_unlock(&itv->serialize_lock); in ivtv_write()
695 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtv_write()
700 finish_wait(&itv->dma_waitq, &wait); in ivtv_write()
701 mutex_lock(&itv->serialize_lock); in ivtv_write()
708 ivtv_queue_move(s, &s->q_full, NULL, &s->q_predma, itv->dma_data_req_size); in ivtv_write()
709 ivtv_dma_stream_dec_prepare(s, itv->dma_data_req_offset + IVTV_DECODER_OFFSET, 1); in ivtv_write()
723 struct ivtv *itv = id->itv; in ivtv_v4l2_write() local
726 if (mutex_lock_interruptible(&itv->serialize_lock)) in ivtv_v4l2_write()
729 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_write()
736 struct ivtv *itv = id->itv; in ivtv_v4l2_dec_poll() local
737 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_dec_poll()
748 clear_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags); in ivtv_v4l2_dec_poll()
755 set_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags); in ivtv_v4l2_dec_poll()
756 if (test_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags) || in ivtv_v4l2_dec_poll()
757 test_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags)) in ivtv_v4l2_dec_poll()
771 struct ivtv *itv = id->itv; in ivtv_v4l2_enc_poll() local
772 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_enc_poll()
782 mutex_lock(&itv->serialize_lock); in ivtv_v4l2_enc_poll()
784 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_enc_poll()
810 struct ivtv *itv = id->itv; in ivtv_stop_capture() local
811 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_stop_capture()
819 struct ivtv_stream *s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_stop_capture()
849 struct ivtv *itv = id->itv; in ivtv_stop_decoding() local
850 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_stop_decoding()
855 test_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags)) { in ivtv_stop_decoding()
857 ivtv_yuv_close(itv); in ivtv_stop_decoding()
865 itv->output_mode = OUT_NONE; in ivtv_stop_decoding()
870 if (itv->output_mode == OUT_UDMA_YUV && id->yuv_frames) in ivtv_stop_decoding()
871 itv->output_mode = OUT_NONE; in ivtv_stop_decoding()
873 itv->speed = 0; in ivtv_stop_decoding()
874 clear_bit(IVTV_F_I_DEC_PAUSED, &itv->i_flags); in ivtv_stop_decoding()
882 struct ivtv *itv = id->itv; in ivtv_v4l2_close() local
883 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_close()
887 mutex_lock(&itv->serialize_lock); in ivtv_v4l2_close()
893 ivtv_mute(itv); in ivtv_v4l2_close()
895 clear_bit(IVTV_F_I_RADIO_USER, &itv->i_flags); in ivtv_v4l2_close()
897 ivtv_call_all(itv, video, s_std, itv->std); in ivtv_v4l2_close()
899 ivtv_audio_set_io(itv); in ivtv_v4l2_close()
900 if (itv->hw_flags & IVTV_HW_SAA711X) { in ivtv_v4l2_close()
901 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq, in ivtv_v4l2_close()
904 if (atomic_read(&itv->capturing) > 0) { in ivtv_v4l2_close()
906 ivtv_vapi(itv, CX2341X_ENC_MUTE_VIDEO, 1, in ivtv_v4l2_close()
907 v4l2_ctrl_g_ctrl(itv->cxhdl.video_mute) | in ivtv_v4l2_close()
908 (v4l2_ctrl_g_ctrl(itv->cxhdl.video_mute_yuv) << 8)); in ivtv_v4l2_close()
911 ivtv_unmute(itv); in ivtv_v4l2_close()
924 struct ivtv_stream *s_vout = &itv->streams[IVTV_DEC_STREAM_TYPE_VOUT]; in ivtv_v4l2_close()
930 if (itv->output_mode == OUT_NONE && !test_bit(IVTV_F_S_APPL_IO, &s_vout->s_flags)) { in ivtv_v4l2_close()
932 ivtv_disable_cc(itv); in ivtv_v4l2_close()
939 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_close()
947 struct ivtv *itv = s->itv; local
953 if (ivtv_init_on_first_open(itv)) {
969 res = ivtv_firmware_check(itv, "ivtv_serialized_open");
971 res = ivtv_firmware_check(itv, "ivtv_serialized_open");
977 test_bit(IVTV_F_S_CLAIMED, &itv->streams[IVTV_DEC_STREAM_TYPE_YUV].s_flags))
981 test_bit(IVTV_F_S_CLAIMED, &itv->streams[IVTV_DEC_STREAM_TYPE_MPG].s_flags))
989 ivtv_udma_alloc(itv);
999 item->itv = itv;
1007 if (!test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags)) {
1008 if (atomic_read(&itv->capturing) > 0) {
1018 set_bit(IVTV_F_I_RADIO_USER, &itv->i_flags);
1020 ivtv_mute(itv);
1022 ivtv_call_all(itv, tuner, s_radio);
1024 ivtv_audio_set_io(itv);
1025 if (itv->hw_flags & IVTV_HW_SAA711X) {
1026 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq,
1030 ivtv_unmute(itv);
1035 clear_bit(IVTV_F_I_DEC_YUV, &itv->i_flags);
1037 set_bit(IVTV_F_I_DEC_YUV, &itv->i_flags);
1039 itv->dma_data_req_size =
1040 1080 * ((itv->yuv_info.v4l2_src_h + 31) & ~31);
1041 itv->yuv_info.stream_size = 0;
1058 void ivtv_mute(struct ivtv *itv) argument
1060 if (atomic_read(&itv->capturing))
1061 ivtv_vapi(itv, CX2341X_ENC_MUTE_AUDIO, 1, 1);
1065 void ivtv_unmute(struct ivtv *itv) argument
1067 if (atomic_read(&itv->capturing)) {
1069 ivtv_vapi(itv, CX2341X_ENC_MISC, 1, 12);
1070 ivtv_vapi(itv, CX2341X_ENC_MUTE_AUDIO, 1, 0);