Lines Matching defs:line6pcm
33 struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
35 ucontrol->value.integer.value[0] = line6pcm->impulse_volume;
42 struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
46 if (line6pcm->impulse_volume == value)
49 line6pcm->impulse_volume = value;
51 err = line6_pcm_acquire(line6pcm, LINE6_STREAM_IMPULSE, true);
53 line6pcm->impulse_volume = 0;
57 line6_pcm_release(line6pcm, LINE6_STREAM_IMPULSE);
76 struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
78 ucontrol->value.integer.value[0] = line6pcm->impulse_period;
85 struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
88 if (line6pcm->impulse_period == value)
91 line6pcm->impulse_period = value;
98 static void line6_unlink_audio_urbs(struct snd_line6_pcm *line6pcm,
103 for (i = 0; i < line6pcm->line6->iso_buffers; i++) {
114 static void line6_wait_clear_audio_urbs(struct snd_line6_pcm *line6pcm,
123 for (i = 0; i < line6pcm->line6->iso_buffers; i++) {
133 dev_err(line6pcm->line6->ifcdev,
138 get_stream(struct snd_line6_pcm *line6pcm, int direction)
141 &line6pcm->out : &line6pcm->in;
145 * call this in line6pcm.state_mutex
147 static int line6_buffer_acquire(struct snd_line6_pcm *line6pcm,
152 line6pcm->max_packet_size_out :
153 line6pcm->max_packet_size_in;
158 kmalloc(array3_size(line6pcm->line6->iso_buffers,
168 * call this in line6pcm.state_mutex
170 static void line6_buffer_release(struct snd_line6_pcm *line6pcm,
175 line6_wait_clear_audio_urbs(line6pcm, pstr);
182 static int line6_stream_start(struct snd_line6_pcm *line6pcm, int direction,
186 struct line6_pcm_stream *pstr = get_stream(line6pcm, direction);
195 ret = line6_submit_audio_out_all_urbs(line6pcm);
197 ret = line6_submit_audio_in_all_urbs(line6pcm);
207 static void line6_stream_stop(struct snd_line6_pcm *line6pcm, int direction,
211 struct line6_pcm_stream *pstr = get_stream(line6pcm, direction);
217 line6_unlink_audio_urbs(line6pcm, pstr);
220 line6pcm->prev_fbuf = NULL;
221 line6pcm->prev_fsize = 0;
230 struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
234 clear_bit(LINE6_FLAG_PREPARED, &line6pcm->flags);
244 (line6pcm->line6->properties->capabilities &
246 err = line6_stream_start(line6pcm, SNDRV_PCM_STREAM_PLAYBACK,
251 err = line6_stream_start(line6pcm, s->stream,
260 (line6pcm->line6->properties->capabilities &
262 line6_stream_stop(line6pcm, SNDRV_PCM_STREAM_PLAYBACK,
265 line6_stream_stop(line6pcm, s->stream,
272 set_bit(LINE6_FLAG_PAUSE_PLAYBACK, &line6pcm->flags);
278 clear_bit(LINE6_FLAG_PAUSE_PLAYBACK, &line6pcm->flags);
292 struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
293 struct line6_pcm_stream *pstr = get_stream(line6pcm, substream->stream);
301 int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int type, bool start)
307 mutex_lock(&line6pcm->state_mutex);
309 pstr = get_stream(line6pcm, dir);
310 ret = line6_buffer_acquire(line6pcm, pstr, dir, type);
314 line6_wait_clear_audio_urbs(line6pcm, pstr);
318 ret = line6_stream_start(line6pcm, dir, type);
324 mutex_unlock(&line6pcm->state_mutex);
326 line6_pcm_release(line6pcm, type);
332 void line6_pcm_release(struct snd_line6_pcm *line6pcm, int type)
337 mutex_lock(&line6pcm->state_mutex);
339 line6_stream_stop(line6pcm, dir, type);
341 pstr = get_stream(line6pcm, dir);
342 line6_buffer_release(line6pcm, pstr, type);
344 mutex_unlock(&line6pcm->state_mutex);
353 struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
354 struct line6_pcm_stream *pstr = get_stream(line6pcm, substream->stream);
356 mutex_lock(&line6pcm->state_mutex);
357 ret = line6_buffer_acquire(line6pcm, pstr, substream->stream,
364 mutex_unlock(&line6pcm->state_mutex);
371 struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
372 struct line6_pcm_stream *pstr = get_stream(line6pcm, substream->stream);
374 mutex_lock(&line6pcm->state_mutex);
375 line6_buffer_release(line6pcm, pstr, LINE6_STREAM_PCM);
376 mutex_unlock(&line6pcm->state_mutex);
397 struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
400 ucontrol->value.integer.value[i] = line6pcm->volume_playback[i];
410 struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
413 if (line6pcm->volume_playback[i] !=
415 line6pcm->volume_playback[i] =
471 struct snd_line6_pcm *line6pcm = snd_pcm_chip(pcm);
473 cleanup_urbs(&line6pcm->out, line6pcm->line6->iso_buffers);
474 cleanup_urbs(&line6pcm->in, line6pcm->line6->iso_buffers);
475 kfree(line6pcm);
505 void line6_pcm_disconnect(struct snd_line6_pcm *line6pcm)
507 line6_unlink_audio_urbs(line6pcm, &line6pcm->out);
508 line6_unlink_audio_urbs(line6pcm, &line6pcm->in);
509 line6_wait_clear_audio_urbs(line6pcm, &line6pcm->out);
510 line6_wait_clear_audio_urbs(line6pcm, &line6pcm->in);
524 struct snd_line6_pcm *line6pcm;
533 line6pcm = kzalloc(sizeof(*line6pcm), GFP_KERNEL);
534 if (!line6pcm)
537 mutex_init(&line6pcm->state_mutex);
538 line6pcm->pcm = pcm;
539 line6pcm->properties = properties;
540 line6pcm->volume_playback[0] = line6pcm->volume_playback[1] = 255;
541 line6pcm->volume_monitor = 255;
542 line6pcm->line6 = line6;
544 spin_lock_init(&line6pcm->out.lock);
545 spin_lock_init(&line6pcm->in.lock);
546 line6pcm->impulse_period = LINE6_IMPULSE_DEFAULT_PERIOD;
548 line6->line6pcm = line6pcm;
550 pcm->private_data = line6pcm;
553 line6pcm->max_packet_size_in =
556 line6pcm->max_packet_size_out =
559 if (!line6pcm->max_packet_size_in || !line6pcm->max_packet_size_out) {
560 dev_err(line6pcm->line6->ifcdev,
565 err = line6_create_audio_out_urbs(line6pcm);
569 err = line6_create_audio_in_urbs(line6pcm);
576 snd_ctl_new1(&line6_controls[i], line6pcm));
588 struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
589 struct line6_pcm_stream *pstr = get_stream(line6pcm, substream->stream);
591 mutex_lock(&line6pcm->state_mutex);
593 line6_wait_clear_audio_urbs(line6pcm, pstr);
595 if (!test_and_set_bit(LINE6_FLAG_PREPARED, &line6pcm->flags)) {
596 line6pcm->out.count = 0;
597 line6pcm->out.pos = 0;
598 line6pcm->out.pos_done = 0;
599 line6pcm->out.bytes = 0;
600 line6pcm->in.count = 0;
601 line6pcm->in.pos_done = 0;
602 line6pcm->in.bytes = 0;
605 mutex_unlock(&line6pcm->state_mutex);