Lines Matching refs:pipe

46 				  struct vx_pipe *pipe)  in vx_pcm_read_per_bytes()  argument
48 int offset = pipe->hw_ptr; in vx_pcm_read_per_bytes()
51 if (++offset >= pipe->buffer_bytes) { in vx_pcm_read_per_bytes()
56 if (++offset >= pipe->buffer_bytes) { in vx_pcm_read_per_bytes()
61 if (++offset >= pipe->buffer_bytes) { in vx_pcm_read_per_bytes()
65 pipe->hw_ptr = offset; in vx_pcm_read_per_bytes()
91 struct vx_pipe *pipe) in vx_set_differed_time() argument
94 if (! (pipe->differed_type & DC_DIFFERED_DELAY)) in vx_set_differed_time()
101 vx_set_pcx_time(chip, &pipe->pcx_time, &rmh->Cmd[1]); in vx_set_differed_time()
104 if (pipe->differed_type & DC_NOTIFY_DELAY) in vx_set_differed_time()
108 if (pipe->differed_type & DC_MULTIPLE_DELAY) in vx_set_differed_time()
112 if (pipe->differed_type & DC_STREAM_TIME_DELAY) in vx_set_differed_time()
124 static int vx_set_stream_format(struct vx_core *chip, struct vx_pipe *pipe, in vx_set_stream_format() argument
129 vx_init_rmh(&rmh, pipe->is_capture ? in vx_set_stream_format()
131 rmh.Cmd[0] |= pipe->number << FIELD_SIZE; in vx_set_stream_format()
134 vx_set_differed_time(chip, &rmh, pipe); in vx_set_stream_format()
151 static int vx_set_format(struct vx_core *chip, struct vx_pipe *pipe, in vx_set_format() argument
174 return vx_set_stream_format(chip, pipe, header); in vx_set_format()
210 static int vx_get_pipe_state(struct vx_core *chip, struct vx_pipe *pipe, int *state) in vx_get_pipe_state() argument
216 vx_set_pipe_cmd_params(&rmh, pipe->is_capture, pipe->number, 0); in vx_get_pipe_state()
219 *state = (rmh.Stat[0] & (1 << pipe->number)) ? 1 : 0; in vx_get_pipe_state()
235 static int vx_query_hbuffer_size(struct vx_core *chip, struct vx_pipe *pipe) in vx_query_hbuffer_size() argument
241 vx_set_pipe_cmd_params(&rmh, pipe->is_capture, pipe->number, 0); in vx_query_hbuffer_size()
242 if (pipe->is_capture) in vx_query_hbuffer_size()
259 static int vx_pipe_can_start(struct vx_core *chip, struct vx_pipe *pipe) in vx_pipe_can_start() argument
265 vx_set_pipe_cmd_params(&rmh, pipe->is_capture, pipe->number, 0); in vx_pipe_can_start()
280 static int vx_conf_pipe(struct vx_core *chip, struct vx_pipe *pipe) in vx_conf_pipe() argument
285 if (pipe->is_capture) in vx_conf_pipe()
287 rmh.Cmd[1] = 1 << pipe->number; in vx_conf_pipe()
319 static int vx_toggle_pipe(struct vx_core *chip, struct vx_pipe *pipe, int state) in vx_toggle_pipe() argument
324 if (vx_get_pipe_state(chip, pipe, &cur_state) < 0) in vx_toggle_pipe()
335 err = vx_pipe_can_start(chip, pipe); in vx_toggle_pipe()
345 if ((err = vx_conf_pipe(chip, pipe)) < 0) in vx_toggle_pipe()
356 err = vx_get_pipe_state(chip, pipe, &cur_state); in vx_toggle_pipe()
372 static int vx_stop_pipe(struct vx_core *chip, struct vx_pipe *pipe) in vx_stop_pipe() argument
376 vx_set_pipe_cmd_params(&rmh, pipe->is_capture, pipe->number, 0); in vx_stop_pipe()
395 struct vx_pipe *pipe; in vx_alloc_pipe() local
414 pipe = kzalloc(sizeof(*pipe), GFP_KERNEL); in vx_alloc_pipe()
415 if (! pipe) { in vx_alloc_pipe()
424 pipe->number = audioid; in vx_alloc_pipe()
425 pipe->is_capture = capture; in vx_alloc_pipe()
426 pipe->channels = num_audio; in vx_alloc_pipe()
427 pipe->differed_type = 0; in vx_alloc_pipe()
428 pipe->pcx_time = 0; in vx_alloc_pipe()
429 pipe->data_mode = data_mode; in vx_alloc_pipe()
430 *pipep = pipe; in vx_alloc_pipe()
440 static int vx_free_pipe(struct vx_core *chip, struct vx_pipe *pipe) in vx_free_pipe() argument
445 vx_set_pipe_cmd_params(&rmh, pipe->is_capture, pipe->number, 0); in vx_free_pipe()
448 kfree(pipe); in vx_free_pipe()
458 static int vx_start_stream(struct vx_core *chip, struct vx_pipe *pipe) in vx_start_stream() argument
463 vx_set_stream_cmd_params(&rmh, pipe->is_capture, pipe->number); in vx_start_stream()
464 vx_set_differed_time(chip, &rmh, pipe); in vx_start_stream()
474 static int vx_stop_stream(struct vx_core *chip, struct vx_pipe *pipe) in vx_stop_stream() argument
479 vx_set_stream_cmd_params(&rmh, pipe->is_capture, pipe->number); in vx_stop_stream()
515 struct vx_pipe *pipe = NULL; in vx_pcm_playback_open() local
527 pipe = chip->playback_pipes[audio]; in vx_pcm_playback_open()
528 if (! pipe) { in vx_pcm_playback_open()
530 err = vx_alloc_pipe(chip, 0, audio, 2, &pipe); /* stereo playback */ in vx_pcm_playback_open()
533 chip->playback_pipes[audio] = pipe; in vx_pcm_playback_open()
536 pipe->references++; in vx_pcm_playback_open()
538 pipe->substream = subs; in vx_pcm_playback_open()
539 chip->playback_pipes[audio] = pipe; in vx_pcm_playback_open()
543 runtime->private_data = pipe; in vx_pcm_playback_open()
558 struct vx_pipe *pipe; in vx_pcm_playback_close() local
563 pipe = subs->runtime->private_data; in vx_pcm_playback_close()
565 if (--pipe->references == 0) { in vx_pcm_playback_close()
566 chip->playback_pipes[pipe->number] = NULL; in vx_pcm_playback_close()
567 vx_free_pipe(chip, pipe); in vx_pcm_playback_close()
581 static int vx_notify_end_of_buffer(struct vx_core *chip, struct vx_pipe *pipe) in vx_notify_end_of_buffer() argument
589 vx_set_stream_cmd_params(&rmh, 0, pipe->number); in vx_notify_end_of_buffer()
611 struct vx_pipe *pipe, int size) in vx_pcm_playback_transfer_chunk() argument
615 space = vx_query_hbuffer_size(chip, pipe); in vx_pcm_playback_transfer_chunk()
632 vx_pseudo_dma_write(chip, runtime, pipe, size); in vx_pcm_playback_transfer_chunk()
633 err = vx_notify_end_of_buffer(chip, pipe); in vx_pcm_playback_transfer_chunk()
649 struct vx_pipe *pipe) in vx_update_pipe_position() argument
656 vx_set_pipe_cmd_params(&rmh, pipe->is_capture, pipe->number, 0); in vx_update_pipe_position()
662 update = (int)(count - pipe->cur_count); in vx_update_pipe_position()
663 pipe->cur_count = count; in vx_update_pipe_position()
664 pipe->position += update; in vx_update_pipe_position()
665 if (pipe->position >= (int)runtime->buffer_size) in vx_update_pipe_position()
666 pipe->position %= runtime->buffer_size; in vx_update_pipe_position()
667 pipe->transferred += update; in vx_update_pipe_position()
677 struct vx_pipe *pipe, int nchunks) in vx_pcm_playback_transfer() argument
682 if (! pipe->prepared || (chip->chip_status & VX_STAT_IS_STALE)) in vx_pcm_playback_transfer()
685 if ((err = vx_pcm_playback_transfer_chunk(chip, runtime, pipe, in vx_pcm_playback_transfer()
697 struct vx_pipe *pipe) in vx_pcm_playback_update() argument
702 if (pipe->running && ! (chip->chip_status & VX_STAT_IS_STALE)) { in vx_pcm_playback_update()
703 if ((err = vx_update_pipe_position(chip, runtime, pipe)) < 0) in vx_pcm_playback_update()
705 if (pipe->transferred >= (int)runtime->period_size) { in vx_pcm_playback_update()
706 pipe->transferred %= runtime->period_size; in vx_pcm_playback_update()
718 struct vx_pipe *pipe = subs->runtime->private_data; in vx_pcm_trigger() local
727 if (! pipe->is_capture) in vx_pcm_trigger()
728 vx_pcm_playback_transfer(chip, subs, pipe, 2); in vx_pcm_trigger()
729 err = vx_start_stream(chip, pipe); in vx_pcm_trigger()
734 err = vx_toggle_pipe(chip, pipe, 1); in vx_pcm_trigger()
737 vx_stop_stream(chip, pipe); in vx_pcm_trigger()
741 pipe->running = 1; in vx_pcm_trigger()
745 vx_toggle_pipe(chip, pipe, 0); in vx_pcm_trigger()
746 vx_stop_pipe(chip, pipe); in vx_pcm_trigger()
747 vx_stop_stream(chip, pipe); in vx_pcm_trigger()
749 pipe->running = 0; in vx_pcm_trigger()
752 if ((err = vx_toggle_pipe(chip, pipe, 0)) < 0) in vx_pcm_trigger()
756 if ((err = vx_toggle_pipe(chip, pipe, 1)) < 0) in vx_pcm_trigger()
771 struct vx_pipe *pipe = runtime->private_data; in vx_pcm_playback_pointer() local
772 return pipe->position; in vx_pcm_playback_pointer()
800 struct vx_pipe *pipe = runtime->private_data; in vx_pcm_prepare() local
808 if (data_mode != pipe->data_mode && ! pipe->is_capture) { in vx_pcm_prepare()
814 vx_set_pipe_cmd_params(&rmh, 0, pipe->number, 0); in vx_pcm_prepare()
818 vx_set_pipe_cmd_params(&rmh, 0, pipe->number, pipe->channels); in vx_pcm_prepare()
823 pipe->data_mode = data_mode; in vx_pcm_prepare()
833 if ((err = vx_set_format(chip, pipe, runtime)) < 0) in vx_pcm_prepare()
837 pipe->align = 2; /* 16bit word */ in vx_pcm_prepare()
839 pipe->align = 4; /* 32bit word */ in vx_pcm_prepare()
842 pipe->buffer_bytes = frames_to_bytes(runtime, runtime->buffer_size); in vx_pcm_prepare()
843 pipe->period_bytes = frames_to_bytes(runtime, runtime->period_size); in vx_pcm_prepare()
844 pipe->hw_ptr = 0; in vx_pcm_prepare()
847 vx_update_pipe_position(chip, runtime, pipe); in vx_pcm_prepare()
849 pipe->transferred = 0; in vx_pcm_prepare()
850 pipe->position = 0; in vx_pcm_prepare()
852 pipe->prepared = 1; in vx_pcm_prepare()
905 struct vx_pipe *pipe; in vx_pcm_capture_open() local
916 err = vx_alloc_pipe(chip, 1, audio, 2, &pipe); in vx_pcm_capture_open()
919 pipe->substream = subs; in vx_pcm_capture_open()
920 chip->capture_pipes[audio] = pipe; in vx_pcm_capture_open()
944 pipe->monitoring_pipe = pipe_out_monitoring; /* default value NULL */ in vx_pcm_capture_open()
948 runtime->private_data = pipe; in vx_pcm_capture_open()
963 struct vx_pipe *pipe; in vx_pcm_capture_close() local
968 pipe = subs->runtime->private_data; in vx_pcm_capture_close()
969 chip->capture_pipes[pipe->number] = NULL; in vx_pcm_capture_close()
971 pipe_out_monitoring = pipe->monitoring_pipe; in vx_pcm_capture_close()
980 chip->playback_pipes[pipe->number] = NULL; in vx_pcm_capture_close()
981 pipe->monitoring_pipe = NULL; in vx_pcm_capture_close()
985 vx_free_pipe(chip, pipe); in vx_pcm_capture_close()
997 struct vx_pipe *pipe) in vx_pcm_capture_update() argument
1002 if (!pipe->running || (chip->chip_status & VX_STAT_IS_STALE)) in vx_pcm_capture_update()
1009 space = vx_query_hbuffer_size(chip, pipe); in vx_pcm_capture_update()
1024 if ((pipe->hw_ptr % pipe->align) == 0) in vx_pcm_capture_update()
1028 vx_pcm_read_per_bytes(chip, runtime, pipe); in vx_pcm_capture_update()
1033 int align = pipe->align * 3; in vx_pcm_capture_update()
1036 vx_pseudo_dma_read(chip, runtime, pipe, space); in vx_pcm_capture_update()
1044 vx_pcm_read_per_bytes(chip, runtime, pipe); in vx_pcm_capture_update()
1052 vx_pcm_read_per_bytes(chip, runtime, pipe); in vx_pcm_capture_update()
1056 pipe->transferred += size; in vx_pcm_capture_update()
1057 if (pipe->transferred >= pipe->period_bytes) { in vx_pcm_capture_update()
1058 pipe->transferred %= pipe->period_bytes; in vx_pcm_capture_update()
1075 struct vx_pipe *pipe = runtime->private_data; in vx_pcm_capture_pointer() local
1076 return bytes_to_frames(runtime, pipe->hw_ptr); in vx_pcm_capture_pointer()
1101 struct vx_pipe *pipe; in vx_pcm_update_intr() local
1136 pipe = chip->playback_pipes[p]; in vx_pcm_update_intr()
1137 if (pipe && pipe->substream) { in vx_pcm_update_intr()
1138 vx_pcm_playback_update(chip, pipe->substream, pipe); in vx_pcm_update_intr()
1139 vx_pcm_playback_transfer(chip, pipe->substream, pipe, buf); in vx_pcm_update_intr()
1146 pipe = chip->capture_pipes[i]; in vx_pcm_update_intr()
1147 if (pipe && pipe->substream) in vx_pcm_update_intr()
1148 vx_pcm_capture_update(chip, pipe->substream, pipe); in vx_pcm_update_intr()