Lines Matching refs:itv

35 	struct ivtv *itv = id->itv;  in ivtv_claim_stream()  local
36 struct ivtv_stream *s = &itv->streams[type]; in ivtv_claim_stream()
62 ivtv_clear_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_claim_stream()
72 itv->vbi.insert_mpeg && !ivtv_raw_vbi(itv)) { in ivtv_claim_stream()
77 s_vbi = &itv->streams[vbi_type]; in ivtv_claim_stream()
82 ivtv_clear_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_claim_stream()
94 struct ivtv *itv = s->itv; in ivtv_release_stream() local
112 ivtv_set_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_release_stream()
118 s_vbi = &itv->streams[IVTV_DEC_STREAM_TYPE_VBI]; in ivtv_release_stream()
120 s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_release_stream()
135 ivtv_set_irq_mask(itv, IVTV_IRQ_DEC_VBI_RE_INSERT); in ivtv_release_stream()
141 static void ivtv_dualwatch(struct ivtv *itv) in ivtv_dualwatch() argument
147 new_stereo_mode = v4l2_ctrl_g_ctrl(itv->cxhdl.audio_mode); in ivtv_dualwatch()
149 ivtv_call_all(itv, tuner, g_tuner, &vt); in ivtv_dualwatch()
153 if (new_stereo_mode == itv->dualwatch_stereo_mode) in ivtv_dualwatch()
157 itv->dualwatch_stereo_mode, new_stereo_mode); in ivtv_dualwatch()
158 if (v4l2_ctrl_s_ctrl(itv->cxhdl.audio_mode, new_stereo_mode)) in ivtv_dualwatch()
162 static void ivtv_update_pgm_info(struct ivtv *itv) in ivtv_update_pgm_info() argument
164 u32 wr_idx = (read_enc(itv->pgm_info_offset) - itv->pgm_info_offset - 4) / 24; in ivtv_update_pgm_info()
168 if (wr_idx >= itv->pgm_info_num) { in ivtv_update_pgm_info()
169 IVTV_DEBUG_WARN("Invalid PGM index %d (>= %d)\n", wr_idx, itv->pgm_info_num); in ivtv_update_pgm_info()
172 cnt = (wr_idx + itv->pgm_info_num - itv->pgm_info_write_idx) % itv->pgm_info_num; in ivtv_update_pgm_info()
174 int idx = (itv->pgm_info_write_idx + i) % itv->pgm_info_num; in ivtv_update_pgm_info()
175 struct v4l2_enc_idx_entry *e = itv->pgm_info + idx; in ivtv_update_pgm_info()
176 u32 addr = itv->pgm_info_offset + 4 + idx * 24; in ivtv_update_pgm_info()
182 if (e->offset > itv->mpg_data_received) { in ivtv_update_pgm_info()
185 e->offset += itv->vbi_data_inserted; in ivtv_update_pgm_info()
191 itv->pgm_info_write_idx = (itv->pgm_info_write_idx + i) % itv->pgm_info_num; in ivtv_update_pgm_info()
196 struct ivtv *itv = s->itv; in ivtv_schedule() local
199 lockdep_assert_held(&itv->serialize_lock); in ivtv_schedule()
201 mutex_unlock(&itv->serialize_lock); in ivtv_schedule()
207 mutex_lock(&itv->serialize_lock); in ivtv_schedule()
212 struct ivtv *itv = s->itv; in ivtv_get_buffer() local
213 struct ivtv_stream *s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_get_buffer()
220 ivtv_update_pgm_info(itv); in ivtv_get_buffer()
223 itv->dualwatch_jiffies + in ivtv_get_buffer()
225 itv->dualwatch_jiffies = jiffies; in ivtv_get_buffer()
226 ivtv_dualwatch(itv); in ivtv_get_buffer()
233 ivtv_process_vbi_data(itv, buf, s_vbi->dma_pts, s_vbi->type); in ivtv_get_buffer()
237 buf = &itv->vbi.sliced_mpeg_buf; in ivtv_get_buffer()
259 ivtv_process_vbi_data(itv, buf, s->dma_pts, s->type); in ivtv_get_buffer()
287 static void ivtv_setup_sliced_vbi_buf(struct ivtv *itv) in ivtv_setup_sliced_vbi_buf() argument
289 int idx = itv->vbi.inserted_frame % IVTV_VBI_FRAMES; in ivtv_setup_sliced_vbi_buf()
291 itv->vbi.sliced_mpeg_buf.buf = itv->vbi.sliced_mpeg_data[idx]; in ivtv_setup_sliced_vbi_buf()
292 itv->vbi.sliced_mpeg_buf.bytesused = itv->vbi.sliced_mpeg_size[idx]; in ivtv_setup_sliced_vbi_buf()
293 itv->vbi.sliced_mpeg_buf.readpos = 0; in ivtv_setup_sliced_vbi_buf()
299 struct ivtv *itv = s->itv; in ivtv_copy_buf_to_user() local
303 if (itv->vbi.insert_mpeg && s->type == IVTV_ENC_STREAM_TYPE_MPG && in ivtv_copy_buf_to_user()
304 !ivtv_raw_vbi(itv) && buf != &itv->vbi.sliced_mpeg_buf) { in ivtv_copy_buf_to_user()
308 u8 ch = itv->search_pack_header ? 0xba : 0xe0; in ivtv_copy_buf_to_user()
317 if (!itv->search_pack_header) { in ivtv_copy_buf_to_user()
323 itv->search_pack_header = 1; in ivtv_copy_buf_to_user()
336 itv->search_pack_header = 0; in ivtv_copy_buf_to_user()
338 ivtv_setup_sliced_vbi_buf(itv); in ivtv_copy_buf_to_user()
351 if (s->type == IVTV_ENC_STREAM_TYPE_MPG && buf != &itv->vbi.sliced_mpeg_buf) in ivtv_copy_buf_to_user()
352 itv->mpg_data_received += len; in ivtv_copy_buf_to_user()
358 struct ivtv *itv = s->itv; in ivtv_read() local
362 if (atomic_read(&itv->capturing) == 0 && s->fh == NULL) { in ivtv_read()
371 (s->type == IVTV_ENC_STREAM_TYPE_VBI && !ivtv_raw_vbi(itv))) in ivtv_read()
394 if (buf != &itv->vbi.sliced_mpeg_buf) { in ivtv_read()
398 int idx = itv->vbi.inserted_frame % IVTV_VBI_FRAMES; in ivtv_read()
399 itv->vbi.sliced_mpeg_size[idx] = 0; in ivtv_read()
400 itv->vbi.inserted_frame++; in ivtv_read()
401 itv->vbi_data_inserted += buf->bytesused; in ivtv_read()
417 struct ivtv *itv = s->itv; in ivtv_read_pos() local
427 struct ivtv *itv = id->itv; in ivtv_start_capture() local
428 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_start_capture()
457 s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI]; in ivtv_start_capture()
482 if (test_and_clear_bit(IVTV_F_I_ENC_PAUSED, &itv->i_flags)) in ivtv_start_capture()
483 ivtv_vapi(itv, CX2341X_ENC_PAUSE_ENCODER, 1, 1); in ivtv_start_capture()
506 struct ivtv *itv = id->itv; in ivtv_v4l2_read() local
507 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_v4l2_read()
512 if (mutex_lock_interruptible(&itv->serialize_lock)) in ivtv_v4l2_read()
517 mutex_unlock(&itv->serialize_lock); in ivtv_v4l2_read()
523 struct ivtv *itv = id->itv; in ivtv_start_decoding() local
524 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_start_decoding()
527 if (atomic_read(&itv->decoding) == 0) { in ivtv_start_decoding()
542 return ivtv_set_speed(itv, speed); in ivtv_start_decoding()
548 struct ivtv *itv = s->itv; in ivtv_schedule_dma() local
552 lockdep_assert_held(&itv->serialize_lock); in ivtv_schedule_dma()
554 mutex_unlock(&itv->serialize_lock); in ivtv_schedule_dma()
555 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtv_schedule_dma()
559 finish_wait(&itv->dma_waitq, &wait); in ivtv_schedule_dma()
560 mutex_lock(&itv->serialize_lock); in ivtv_schedule_dma()
568 struct ivtv *itv = id->itv; in ivtv_write() local
569 struct ivtv_stream *s = &itv->streams[id->type]; in ivtv_write()
570 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_write()
594 return ivtv_write_vbi_from_user(itv, in ivtv_write()
600 if (ivtv_set_output_mode(itv, mode) != mode) { in ivtv_write()
608 rc = ivtv_start_decoding(id, itv->speed); in ivtv_write()
621 if (mode == OUT_YUV && s->q_full.length == 0 && itv->dma_data_req_size) { in ivtv_write()
622 while (count >= itv->dma_data_req_size) { in ivtv_write()
623 rc = ivtv_yuv_udma_stream_frame(itv, (void __user *)user_buf); in ivtv_write()
628 bytes_written += itv->dma_data_req_size; in ivtv_write()
629 user_buf += itv->dma_data_req_size; in ivtv_write()
630 count -= itv->dma_data_req_size; in ivtv_write()
661 yi->stream_size + count > itv->dma_data_req_size) in ivtv_write()
663 itv->dma_data_req_size - yi->stream_size); in ivtv_write()
679 if (yi->stream_size == itv->dma_data_req_size) { in ivtv_write()
698 if (s->q_full.length >= itv->dma_data_req_size) { in ivtv_write()
700 ivtv_yuv_setup_stream_frame(itv); 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);