Lines Matching refs:itv
34 struct ivtv *itv = id->itv; in ivtv_claim_stream() local
35 struct ivtv_stream *s = &itv->streams[type]; in ivtv_claim_stream()
61 ivtv_clear_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_claim_stream()
71 itv->vbi.insert_mpeg && !ivtv_raw_vbi(itv)) { in ivtv_claim_stream()
76 s_vbi = &itv->streams[vbi_type]; in ivtv_claim_stream()
81 ivtv_clear_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_claim_stream()
93 struct ivtv *itv = s->itv; in ivtv_release_stream() local
111 ivtv_set_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_release_stream()
117 s_vbi = &itv->streams[IVTV_DEC_STREAM_TYPE_VBI]; in ivtv_release_stream()
119 s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_release_stream()
134 ivtv_set_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_release_stream()
140 static void ivtv_dualwatch(struct ivtv *itv) in ivtv_dualwatch() argument
146 new_stereo_mode = v4l2_ctrl_g_ctrl(itv->cxhdl.audio_mode); in ivtv_dualwatch()
148 ivtv_call_all(itv, tuner, g_tuner, &vt); in ivtv_dualwatch()
152 if (new_stereo_mode == itv->dualwatch_stereo_mode) in ivtv_dualwatch()
156 itv->dualwatch_stereo_mode, new_stereo_mode); in ivtv_dualwatch()
157 if (v4l2_ctrl_s_ctrl(itv->cxhdl.audio_mode, new_stereo_mode)) in ivtv_dualwatch()
161 static void ivtv_update_pgm_info(struct ivtv *itv) in ivtv_update_pgm_info() argument
163 u32 wr_idx = (read_enc(itv->pgm_info_offset) - itv->pgm_info_offset - 4) / 24; in ivtv_update_pgm_info()
167 if (wr_idx >= itv->pgm_info_num) { in ivtv_update_pgm_info()
168 IVTV_DEBUG_WARN("Invalid PGM index %d (>= %d)\n", wr_idx, itv->pgm_info_num); in ivtv_update_pgm_info()
171 cnt = (wr_idx + itv->pgm_info_num - itv->pgm_info_write_idx) % itv->pgm_info_num; in ivtv_update_pgm_info()
173 int idx = (itv->pgm_info_write_idx + i) % itv->pgm_info_num; in ivtv_update_pgm_info()
174 struct v4l2_enc_idx_entry *e = itv->pgm_info + idx; in ivtv_update_pgm_info()
175 u32 addr = itv->pgm_info_offset + 4 + idx * 24; in ivtv_update_pgm_info()
181 if (e->offset > itv->mpg_data_received) { in ivtv_update_pgm_info()
184 e->offset += itv->vbi_data_inserted; in ivtv_update_pgm_info()
190 itv->pgm_info_write_idx = (itv->pgm_info_write_idx + i) % itv->pgm_info_num; in ivtv_update_pgm_info()
195 struct ivtv *itv = s->itv; in ivtv_get_buffer() local
196 struct ivtv_stream *s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_get_buffer()
204 ivtv_update_pgm_info(itv); in ivtv_get_buffer()
207 itv->dualwatch_jiffies + in ivtv_get_buffer()
209 itv->dualwatch_jiffies = jiffies; in ivtv_get_buffer()
210 ivtv_dualwatch(itv); in ivtv_get_buffer()
217 ivtv_process_vbi_data(itv, buf, s_vbi->dma_pts, s_vbi->type); in ivtv_get_buffer()
221 buf = &itv->vbi.sliced_mpeg_buf; in ivtv_get_buffer()
243 ivtv_process_vbi_data(itv, buf, s->dma_pts, s->type); in ivtv_get_buffer()
261 mutex_unlock(&itv->serialize_lock); in ivtv_get_buffer()
267 mutex_lock(&itv->serialize_lock); in ivtv_get_buffer()
277 static void ivtv_setup_sliced_vbi_buf(struct ivtv *itv) in ivtv_setup_sliced_vbi_buf() argument
279 int idx = itv->vbi.inserted_frame % IVTV_VBI_FRAMES; in ivtv_setup_sliced_vbi_buf()
281 itv->vbi.sliced_mpeg_buf.buf = itv->vbi.sliced_mpeg_data[idx]; in ivtv_setup_sliced_vbi_buf()
282 itv->vbi.sliced_mpeg_buf.bytesused = itv->vbi.sliced_mpeg_size[idx]; in ivtv_setup_sliced_vbi_buf()
283 itv->vbi.sliced_mpeg_buf.readpos = 0; in ivtv_setup_sliced_vbi_buf()
289 struct ivtv *itv = s->itv; in ivtv_copy_buf_to_user() local
293 if (itv->vbi.insert_mpeg && s->type == IVTV_ENC_STREAM_TYPE_MPG && in ivtv_copy_buf_to_user()
294 !ivtv_raw_vbi(itv) && buf != &itv->vbi.sliced_mpeg_buf) { in ivtv_copy_buf_to_user()
298 u8 ch = itv->search_pack_header ? 0xba : 0xe0; in ivtv_copy_buf_to_user()
307 if (!itv->search_pack_header) { in ivtv_copy_buf_to_user()
313 itv->search_pack_header = 1; in ivtv_copy_buf_to_user()
326 itv->search_pack_header = 0; in ivtv_copy_buf_to_user()
328 ivtv_setup_sliced_vbi_buf(itv); in ivtv_copy_buf_to_user()
341 if (s->type == IVTV_ENC_STREAM_TYPE_MPG && buf != &itv->vbi.sliced_mpeg_buf) in ivtv_copy_buf_to_user()
342 itv->mpg_data_received += len; in ivtv_copy_buf_to_user()
348 struct ivtv *itv = s->itv; in ivtv_read() local
352 if (atomic_read(&itv->capturing) == 0 && s->fh == NULL) { in ivtv_read()
361 (s->type == IVTV_ENC_STREAM_TYPE_VBI && !ivtv_raw_vbi(itv))) in ivtv_read()
384 if (buf != &itv->vbi.sliced_mpeg_buf) { in ivtv_read()
388 int idx = itv->vbi.inserted_frame % IVTV_VBI_FRAMES; in ivtv_read()
389 itv->vbi.sliced_mpeg_size[idx] = 0; in ivtv_read()
390 itv->vbi.inserted_frame++; in ivtv_read()
391 itv->vbi_data_inserted += buf->bytesused; in ivtv_read()
407 struct ivtv *itv = s->itv; in ivtv_read_pos() local
417 struct ivtv *itv = id->itv; in ivtv_start_capture() local
418 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_start_capture()
447 s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_start_capture()
472 if (test_and_clear_bit(IVTV_F_I_ENC_PAUSED, &itv->i_flags)) in ivtv_start_capture()
473 ivtv_vapi(itv, CX2341X_ENC_PAUSE_ENCODER, 1, 1); in ivtv_start_capture()
496 struct ivtv *itv = id->itv; in ivtv_v4l2_read() local
497 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_read()
502 if (mutex_lock_interruptible(&itv->serialize_lock)) in ivtv_v4l2_read()
507 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_read()
513 struct ivtv *itv = id->itv; in ivtv_start_decoding() local
514 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_start_decoding()
517 if (atomic_read(&itv->decoding) == 0) { in ivtv_start_decoding()
532 return ivtv_set_speed(itv, speed); in ivtv_start_decoding()
539 struct ivtv *itv = id->itv; in ivtv_write() local
540 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_write()
541 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_write()
566 return ivtv_write_vbi_from_user(itv, in ivtv_write()
572 if (ivtv_set_output_mode(itv, mode) != mode) { in ivtv_write()
580 rc = ivtv_start_decoding(id, itv->speed); in ivtv_write()
593 if (mode == OUT_YUV && s->q_full.length == 0 && itv->dma_data_req_size) { in ivtv_write()
594 while (count >= itv->dma_data_req_size) { in ivtv_write()
595 rc = ivtv_yuv_udma_stream_frame(itv, (void __user *)user_buf); in ivtv_write()
600 bytes_written += itv->dma_data_req_size; in ivtv_write()
601 user_buf += itv->dma_data_req_size; in ivtv_write()
602 count -= itv->dma_data_req_size; in ivtv_write()
621 mutex_unlock(&itv->serialize_lock); in ivtv_write()
627 mutex_lock(&itv->serialize_lock); in ivtv_write()
639 yi->stream_size + count > itv->dma_data_req_size) in ivtv_write()
641 itv->dma_data_req_size - yi->stream_size); in ivtv_write()
657 if (yi->stream_size == itv->dma_data_req_size) { in ivtv_write()
676 if (s->q_full.length >= itv->dma_data_req_size) { in ivtv_write()
680 ivtv_yuv_setup_stream_frame(itv); in ivtv_write()
682 mutex_unlock(&itv->serialize_lock); in ivtv_write()
683 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtv_write()
688 finish_wait(&itv->dma_waitq, &wait); in ivtv_write()
689 mutex_lock(&itv->serialize_lock); in ivtv_write()
696 ivtv_queue_move(s, &s->q_full, NULL, &s->q_predma, itv->dma_data_req_size); in ivtv_write()
697 ivtv_dma_stream_dec_prepare(s, itv->dma_data_req_offset + IVTV_DECODER_OFFSET, 1); in ivtv_write()
711 struct ivtv *itv = id->itv; in ivtv_v4l2_write() local
714 if (mutex_lock_interruptible(&itv->serialize_lock)) in ivtv_v4l2_write()
717 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_write()
724 struct ivtv *itv = id->itv; in ivtv_v4l2_dec_poll() local
725 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_dec_poll()
736 clear_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags); in ivtv_v4l2_dec_poll()
743 set_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags); in ivtv_v4l2_dec_poll()
744 if (test_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags) || in ivtv_v4l2_dec_poll()
745 test_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags)) in ivtv_v4l2_dec_poll()
759 struct ivtv *itv = id->itv; in ivtv_v4l2_enc_poll() local
760 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_enc_poll()
770 mutex_lock(&itv->serialize_lock); in ivtv_v4l2_enc_poll()
772 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_enc_poll()
798 struct ivtv *itv = id->itv; in ivtv_stop_capture() local
799 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_stop_capture()
807 struct ivtv_stream *s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_stop_capture()
837 struct ivtv *itv = id->itv; in ivtv_stop_decoding() local
838 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_stop_decoding()
843 test_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags)) { in ivtv_stop_decoding()
845 ivtv_yuv_close(itv); in ivtv_stop_decoding()
853 itv->output_mode = OUT_NONE; in ivtv_stop_decoding()
858 if (itv->output_mode == OUT_UDMA_YUV && id->yuv_frames) in ivtv_stop_decoding()
859 itv->output_mode = OUT_NONE; in ivtv_stop_decoding()
861 itv->speed = 0; in ivtv_stop_decoding()
862 clear_bit(IVTV_F_I_DEC_PAUSED, &itv->i_flags); in ivtv_stop_decoding()
870 struct ivtv *itv = id->itv; in ivtv_v4l2_close() local
871 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_close()
875 mutex_lock(&itv->serialize_lock); in ivtv_v4l2_close()
881 ivtv_mute(itv); in ivtv_v4l2_close()
883 clear_bit(IVTV_F_I_RADIO_USER, &itv->i_flags); in ivtv_v4l2_close()
885 ivtv_call_all(itv, video, s_std, itv->std); in ivtv_v4l2_close()
887 ivtv_audio_set_io(itv); in ivtv_v4l2_close()
888 if (itv->hw_flags & IVTV_HW_SAA711X) { in ivtv_v4l2_close()
889 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq, in ivtv_v4l2_close()
892 if (atomic_read(&itv->capturing) > 0) { in ivtv_v4l2_close()
894 ivtv_vapi(itv, CX2341X_ENC_MUTE_VIDEO, 1, in ivtv_v4l2_close()
895 v4l2_ctrl_g_ctrl(itv->cxhdl.video_mute) | in ivtv_v4l2_close()
896 (v4l2_ctrl_g_ctrl(itv->cxhdl.video_mute_yuv) << 8)); in ivtv_v4l2_close()
899 ivtv_unmute(itv); in ivtv_v4l2_close()
912 struct ivtv_stream *s_vout = &itv->streams[IVTV_DEC_STREAM_TYPE_VOUT]; in ivtv_v4l2_close()
918 if (itv->output_mode == OUT_NONE && !test_bit(IVTV_F_S_APPL_IO, &s_vout->s_flags)) { in ivtv_v4l2_close()
920 ivtv_disable_cc(itv); in ivtv_v4l2_close()
927 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_close()
935 struct ivtv *itv = s->itv; local
941 if (ivtv_init_on_first_open(itv)) {
957 res = ivtv_firmware_check(itv, "ivtv_serialized_open");
959 res = ivtv_firmware_check(itv, "ivtv_serialized_open");
965 test_bit(IVTV_F_S_CLAIMED, &itv->streams[IVTV_DEC_STREAM_TYPE_YUV].s_flags))
969 test_bit(IVTV_F_S_CLAIMED, &itv->streams[IVTV_DEC_STREAM_TYPE_MPG].s_flags))
977 ivtv_udma_alloc(itv);
987 item->itv = itv;
995 if (!test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags)) {
996 if (atomic_read(&itv->capturing) > 0) {
1006 set_bit(IVTV_F_I_RADIO_USER, &itv->i_flags);
1008 ivtv_mute(itv);
1010 ivtv_call_all(itv, tuner, s_radio);
1012 ivtv_audio_set_io(itv);
1013 if (itv->hw_flags & IVTV_HW_SAA711X) {
1014 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq,
1018 ivtv_unmute(itv);
1023 clear_bit(IVTV_F_I_DEC_YUV, &itv->i_flags);
1025 set_bit(IVTV_F_I_DEC_YUV, &itv->i_flags);
1027 itv->dma_data_req_size =
1028 1080 * ((itv->yuv_info.v4l2_src_h + 31) & ~31);
1029 itv->yuv_info.stream_size = 0;
1046 void ivtv_mute(struct ivtv *itv) argument
1048 if (atomic_read(&itv->capturing))
1049 ivtv_vapi(itv, CX2341X_ENC_MUTE_AUDIO, 1, 1);
1053 void ivtv_unmute(struct ivtv *itv) argument
1055 if (atomic_read(&itv->capturing)) {
1057 ivtv_vapi(itv, CX2341X_ENC_MISC, 1, 12);
1058 ivtv_vapi(itv, CX2341X_ENC_MUTE_AUDIO, 1, 0);