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