Lines Matching refs:line6pcm

65 static void create_impulse_test_signal(struct snd_line6_pcm *line6pcm,  in create_impulse_test_signal()  argument
72 short *pi = (short *)line6pcm->prev_fbuf; in create_impulse_test_signal()
83 unsigned char *pi = line6pcm->prev_fbuf; in create_impulse_test_signal()
97 if (--line6pcm->impulse_count <= 0) { in create_impulse_test_signal()
100 line6pcm->impulse_volume; in create_impulse_test_signal()
101 line6pcm->impulse_count = line6pcm->impulse_period; in create_impulse_test_signal()
140 static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) in submit_audio_out_urb() argument
146 line6pcm->properties->bytes_per_channel * in submit_audio_out_urb()
147 line6pcm->properties->playback_hw.channels_max; in submit_audio_out_urb()
149 line6pcm->properties->rates.rats[0].num_min; in submit_audio_out_urb()
151 line6pcm->properties->rates.rats[0].den * in submit_audio_out_urb()
152 (line6pcm->line6->intervals_per_second / LINE6_ISO_INTERVAL); in submit_audio_out_urb()
155 index = find_first_zero_bit(&line6pcm->out.active_urbs, in submit_audio_out_urb()
156 line6pcm->line6->iso_buffers); in submit_audio_out_urb()
158 if (index < 0 || index >= line6pcm->line6->iso_buffers) { in submit_audio_out_urb()
159 dev_err(line6pcm->line6->ifcdev, "no free URB found\n"); in submit_audio_out_urb()
163 urb_out = line6pcm->out.urbs[index]; in submit_audio_out_urb()
173 fsize = line6pcm->prev_fsize; in submit_audio_out_urb()
177 line6pcm->out.count += frame_increment; in submit_audio_out_urb()
178 n = line6pcm->out.count / frame_factor; in submit_audio_out_urb()
179 line6pcm->out.count -= n * frame_factor; in submit_audio_out_urb()
192 dev_err(line6pcm->line6->ifcdev, "driver bug: urb_size = 0\n"); in submit_audio_out_urb()
198 line6pcm->out.buffer + in submit_audio_out_urb()
199 index * LINE6_ISO_PACKETS * line6pcm->max_packet_size_out; in submit_audio_out_urb()
201 urb_out->context = line6pcm; in submit_audio_out_urb()
203 if (test_bit(LINE6_STREAM_PCM, &line6pcm->out.running) && in submit_audio_out_urb()
204 !test_bit(LINE6_FLAG_PAUSE_PLAYBACK, &line6pcm->flags)) { in submit_audio_out_urb()
206 get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK)->runtime; in submit_audio_out_urb()
208 if (line6pcm->out.pos + urb_frames > runtime->buffer_size) { in submit_audio_out_urb()
215 len = runtime->buffer_size - line6pcm->out.pos; in submit_audio_out_urb()
220 line6pcm->out.pos * bytes_per_frame, in submit_audio_out_urb()
226 dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", in submit_audio_out_urb()
231 line6pcm->out.pos * bytes_per_frame, in submit_audio_out_urb()
235 line6pcm->out.pos += urb_frames; in submit_audio_out_urb()
236 if (line6pcm->out.pos >= runtime->buffer_size) in submit_audio_out_urb()
237 line6pcm->out.pos -= runtime->buffer_size; in submit_audio_out_urb()
239 change_volume(urb_out, line6pcm->volume_playback, in submit_audio_out_urb()
246 spin_lock_nested(&line6pcm->in.lock, SINGLE_DEPTH_NESTING); in submit_audio_out_urb()
247 if (line6pcm->prev_fbuf) { in submit_audio_out_urb()
248 if (test_bit(LINE6_STREAM_IMPULSE, &line6pcm->out.running)) { in submit_audio_out_urb()
249 create_impulse_test_signal(line6pcm, urb_out, in submit_audio_out_urb()
251 if (test_bit(LINE6_STREAM_PCM, &line6pcm->in.running)) { in submit_audio_out_urb()
252 line6_capture_copy(line6pcm, in submit_audio_out_urb()
256 line6_capture_check_period(line6pcm, in submit_audio_out_urb()
260 if (!(line6pcm->line6->properties->capabilities & LINE6_CAP_HWMON) in submit_audio_out_urb()
261 && line6pcm->out.running && line6pcm->in.running) in submit_audio_out_urb()
262 add_monitor_signal(urb_out, line6pcm->prev_fbuf, in submit_audio_out_urb()
263 line6pcm->volume_monitor, in submit_audio_out_urb()
266 line6pcm->prev_fbuf = NULL; in submit_audio_out_urb()
267 line6pcm->prev_fsize = 0; in submit_audio_out_urb()
269 spin_unlock(&line6pcm->in.lock); in submit_audio_out_urb()
274 set_bit(index, &line6pcm->out.active_urbs); in submit_audio_out_urb()
276 dev_err(line6pcm->line6->ifcdev, in submit_audio_out_urb()
286 int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm) in line6_submit_audio_out_all_urbs() argument
290 for (i = 0; i < line6pcm->line6->iso_buffers; ++i) { in line6_submit_audio_out_all_urbs()
291 ret = submit_audio_out_urb(line6pcm); in line6_submit_audio_out_all_urbs()
306 struct snd_line6_pcm *line6pcm = (struct snd_line6_pcm *)urb->context; in audio_out_callback() local
308 get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK); in audio_out_callback()
310 line6pcm->properties->bytes_per_channel * in audio_out_callback()
311 line6pcm->properties->playback_hw.channels_max; in audio_out_callback()
317 line6pcm->out.last_frame = urb->start_frame; in audio_out_callback()
320 for (index = 0; index < line6pcm->line6->iso_buffers; index++) in audio_out_callback()
321 if (urb == line6pcm->out.urbs[index]) in audio_out_callback()
324 if (index >= line6pcm->line6->iso_buffers) in audio_out_callback()
330 spin_lock_irqsave(&line6pcm->out.lock, flags); in audio_out_callback()
332 if (test_bit(LINE6_STREAM_PCM, &line6pcm->out.running)) { in audio_out_callback()
335 line6pcm->out.pos_done += in audio_out_callback()
338 if (line6pcm->out.pos_done >= runtime->buffer_size) in audio_out_callback()
339 line6pcm->out.pos_done -= runtime->buffer_size; in audio_out_callback()
342 clear_bit(index, &line6pcm->out.active_urbs); in audio_out_callback()
350 if (test_and_clear_bit(index, &line6pcm->out.unlink_urbs)) in audio_out_callback()
354 submit_audio_out_urb(line6pcm); in audio_out_callback()
356 if (test_bit(LINE6_STREAM_PCM, &line6pcm->out.running)) { in audio_out_callback()
357 line6pcm->out.bytes += length; in audio_out_callback()
358 if (line6pcm->out.bytes >= line6pcm->out.period) { in audio_out_callback()
359 line6pcm->out.bytes %= line6pcm->out.period; in audio_out_callback()
360 spin_unlock(&line6pcm->out.lock); in audio_out_callback()
362 spin_lock(&line6pcm->out.lock); in audio_out_callback()
366 spin_unlock_irqrestore(&line6pcm->out.lock, flags); in audio_out_callback()
374 struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); in snd_line6_playback_open() local
377 &line6pcm->properties->rates); in snd_line6_playback_open()
381 runtime->hw = line6pcm->properties->playback_hw; in snd_line6_playback_open()
402 int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm) in line6_create_audio_out_urbs() argument
404 struct usb_line6 *line6 = line6pcm->line6; in line6_create_audio_out_urbs()
407 line6pcm->out.urbs = kcalloc(line6->iso_buffers, sizeof(struct urb *), in line6_create_audio_out_urbs()
409 if (line6pcm->out.urbs == NULL) in line6_create_audio_out_urbs()
417 urb = line6pcm->out.urbs[i] = in line6_create_audio_out_urbs()