Lines Matching refs:line6pcm

69 static void create_impulse_test_signal(struct snd_line6_pcm *line6pcm,  in create_impulse_test_signal()  argument
76 short *pi = (short *)line6pcm->prev_fbuf; in create_impulse_test_signal()
87 unsigned char *pi = line6pcm->prev_fbuf; in create_impulse_test_signal()
101 if (--line6pcm->impulse_count <= 0) { in create_impulse_test_signal()
104 line6pcm->impulse_volume; in create_impulse_test_signal()
105 line6pcm->impulse_count = line6pcm->impulse_period; in create_impulse_test_signal()
144 static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) in submit_audio_out_urb() argument
149 const int bytes_per_frame = line6pcm->properties->bytes_per_frame; in submit_audio_out_urb()
151 line6pcm->properties->rates.rats[0].num_min; in submit_audio_out_urb()
153 line6pcm->properties->rates.rats[0].den * in submit_audio_out_urb()
158 find_first_zero_bit(&line6pcm->out.active_urbs, LINE6_ISO_BUFFERS); in submit_audio_out_urb()
161 dev_err(line6pcm->line6->ifcdev, "no free URB found\n"); in submit_audio_out_urb()
165 urb_out = line6pcm->out.urbs[index]; in submit_audio_out_urb()
174 fsize = line6pcm->prev_fsize; in submit_audio_out_urb()
178 line6pcm->out.count += frame_increment; in submit_audio_out_urb()
179 n = line6pcm->out.count / frame_factor; in submit_audio_out_urb()
180 line6pcm->out.count -= n * frame_factor; in submit_audio_out_urb()
191 dev_err(line6pcm->line6->ifcdev, "driver bug: urb_size = 0\n"); in submit_audio_out_urb()
197 line6pcm->out.buffer + in submit_audio_out_urb()
198 index * LINE6_ISO_PACKETS * line6pcm->max_packet_size; in submit_audio_out_urb()
200 urb_out->context = line6pcm; in submit_audio_out_urb()
202 if (test_bit(LINE6_STREAM_PCM, &line6pcm->out.running) && in submit_audio_out_urb()
203 !test_bit(LINE6_FLAG_PAUSE_PLAYBACK, &line6pcm->flags)) { in submit_audio_out_urb()
205 get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK)->runtime; in submit_audio_out_urb()
207 if (line6pcm->out.pos + urb_frames > runtime->buffer_size) { in submit_audio_out_urb()
214 len = runtime->buffer_size - line6pcm->out.pos; in submit_audio_out_urb()
219 line6pcm->out.pos * bytes_per_frame, in submit_audio_out_urb()
225 dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", in submit_audio_out_urb()
230 line6pcm->out.pos * bytes_per_frame, in submit_audio_out_urb()
234 line6pcm->out.pos += urb_frames; in submit_audio_out_urb()
235 if (line6pcm->out.pos >= runtime->buffer_size) in submit_audio_out_urb()
236 line6pcm->out.pos -= runtime->buffer_size; in submit_audio_out_urb()
238 change_volume(urb_out, line6pcm->volume_playback, in submit_audio_out_urb()
245 spin_lock_nested(&line6pcm->in.lock, SINGLE_DEPTH_NESTING); in submit_audio_out_urb()
246 if (line6pcm->prev_fbuf) { in submit_audio_out_urb()
247 if (test_bit(LINE6_STREAM_IMPULSE, &line6pcm->out.running)) { in submit_audio_out_urb()
248 create_impulse_test_signal(line6pcm, urb_out, in submit_audio_out_urb()
250 if (test_bit(LINE6_STREAM_PCM, &line6pcm->in.running)) { in submit_audio_out_urb()
251 line6_capture_copy(line6pcm, in submit_audio_out_urb()
255 line6_capture_check_period(line6pcm, in submit_audio_out_urb()
259 if (!(line6pcm->line6->properties->capabilities & LINE6_CAP_HWMON) in submit_audio_out_urb()
260 && line6pcm->out.running && line6pcm->in.running) in submit_audio_out_urb()
261 add_monitor_signal(urb_out, line6pcm->prev_fbuf, in submit_audio_out_urb()
262 line6pcm->volume_monitor, in submit_audio_out_urb()
265 line6pcm->prev_fbuf = NULL; in submit_audio_out_urb()
266 line6pcm->prev_fsize = 0; in submit_audio_out_urb()
268 spin_unlock(&line6pcm->in.lock); in submit_audio_out_urb()
273 set_bit(index, &line6pcm->out.active_urbs); in submit_audio_out_urb()
275 dev_err(line6pcm->line6->ifcdev, in submit_audio_out_urb()
285 int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm) in line6_submit_audio_out_all_urbs() argument
290 ret = submit_audio_out_urb(line6pcm); in line6_submit_audio_out_all_urbs()
305 struct snd_line6_pcm *line6pcm = (struct snd_line6_pcm *)urb->context; in audio_out_callback() local
307 get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK); in audio_out_callback()
313 line6pcm->out.last_frame = urb->start_frame; in audio_out_callback()
317 if (urb == line6pcm->out.urbs[index]) in audio_out_callback()
326 spin_lock_irqsave(&line6pcm->out.lock, flags); in audio_out_callback()
328 if (test_bit(LINE6_STREAM_PCM, &line6pcm->out.running)) { in audio_out_callback()
331 line6pcm->out.pos_done += in audio_out_callback()
332 length / line6pcm->properties->bytes_per_frame; in audio_out_callback()
334 if (line6pcm->out.pos_done >= runtime->buffer_size) in audio_out_callback()
335 line6pcm->out.pos_done -= runtime->buffer_size; in audio_out_callback()
338 clear_bit(index, &line6pcm->out.active_urbs); in audio_out_callback()
346 if (test_and_clear_bit(index, &line6pcm->out.unlink_urbs)) in audio_out_callback()
350 submit_audio_out_urb(line6pcm); in audio_out_callback()
352 if (test_bit(LINE6_STREAM_PCM, &line6pcm->out.running)) { in audio_out_callback()
353 line6pcm->out.bytes += length; in audio_out_callback()
354 if (line6pcm->out.bytes >= line6pcm->out.period) { in audio_out_callback()
355 line6pcm->out.bytes %= line6pcm->out.period; in audio_out_callback()
356 spin_unlock(&line6pcm->out.lock); in audio_out_callback()
358 spin_lock(&line6pcm->out.lock); in audio_out_callback()
362 spin_unlock_irqrestore(&line6pcm->out.lock, flags); in audio_out_callback()
370 struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); in snd_line6_playback_open() local
373 &line6pcm->properties->rates); in snd_line6_playback_open()
377 runtime->hw = line6pcm->properties->playback_hw; in snd_line6_playback_open()
399 int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm) in line6_create_audio_out_urbs() argument
401 struct usb_line6 *line6 = line6pcm->line6; in line6_create_audio_out_urbs()
409 urb = line6pcm->out.urbs[i] = in line6_create_audio_out_urbs()