Lines Matching refs:rt

70 static int usb6fire_pcm_set_rate(struct pcm_runtime *rt)
73 struct control_runtime *ctrl_rt = rt->chip->control;
78 dev_err(&rt->chip->dev->dev,
80 rates[rt->rate]);
84 ret = ctrl_rt->set_rate(ctrl_rt, rt->rate);
86 dev_err(&rt->chip->dev->dev,
88 rates[rt->rate]);
95 dev_err(&rt->chip->dev->dev,
97 rates[rt->rate]);
104 dev_err(&rt->chip->dev->dev,
106 rates[rt->rate]);
110 rt->in_n_analog = IN_N_CHANNELS;
111 rt->out_n_analog = OUT_N_CHANNELS;
112 rt->in_packet_size = rates_in_packet_size[rt->rate];
113 rt->out_packet_size = rates_out_packet_size[rt->rate];
120 struct pcm_runtime *rt = snd_pcm_substream_chip(alsa_sub);
123 return &rt->playback;
125 return &rt->capture;
126 dev_err(&rt->chip->dev->dev, "error getting pcm substream slot.\n");
131 static void usb6fire_pcm_stream_stop(struct pcm_runtime *rt)
134 struct control_runtime *ctrl_rt = rt->chip->control;
136 if (rt->stream_state != STREAM_DISABLED) {
138 rt->stream_state = STREAM_STOPPING;
141 usb_kill_urb(&rt->in_urbs[i].instance);
142 usb_kill_urb(&rt->out_urbs[i].instance);
146 rt->stream_state = STREAM_DISABLED;
151 static int usb6fire_pcm_stream_start(struct pcm_runtime *rt)
158 if (rt->stream_state == STREAM_DISABLED) {
160 rt->stream_wait_cond = false;
161 rt->stream_state = STREAM_STARTING;
164 packet = &rt->in_urbs[i].packets[k];
165 packet->offset = k * rt->in_packet_size;
166 packet->length = rt->in_packet_size;
170 ret = usb_submit_urb(&rt->in_urbs[i].instance,
173 usb6fire_pcm_stream_stop(rt);
179 wait_event_timeout(rt->stream_wait_queue, rt->stream_wait_cond,
181 if (rt->stream_wait_cond)
182 rt->stream_state = STREAM_RUNNING;
184 usb6fire_pcm_stream_stop(rt);
198 struct pcm_runtime *rt = snd_pcm_substream_chip(sub->instance);
212 / (rt->in_n_analog << 2);
227 src += rt->in_n_analog;
245 struct pcm_runtime *rt = snd_pcm_substream_chip(sub->instance);
259 dev_err(&rt->chip->dev->dev, "Unknown sample format.");
268 / (rt->out_n_analog << 2);
275 dest += rt->out_n_analog;
290 struct pcm_runtime *rt = in_urb->chip->pcm;
300 if (usb_urb->status || rt->panic || rt->stream_state == STREAM_STOPPING)
304 rt->panic = true;
308 if (rt->stream_state == STREAM_DISABLED) {
309 dev_err(&rt->chip->dev->dev,
315 sub = &rt->capture;
332 - 4) / (rt->in_n_analog << 2)
333 * (rt->out_n_analog << 2) + 4;
340 sub = &rt->playback;
358 / (rt->out_n_analog << 2);
365 channel < rt->out_n_analog;
378 struct pcm_runtime *rt = urb->chip->pcm;
380 if (rt->stream_state == STREAM_STARTING) {
381 rt->stream_wait_cond = true;
382 wake_up(&rt->stream_wait_queue);
388 struct pcm_runtime *rt = snd_pcm_substream_chip(alsa_sub);
392 if (rt->panic)
395 mutex_lock(&rt->stream_mutex);
399 if (rt->rate < ARRAY_SIZE(rates))
400 alsa_rt->hw.rates = rates_alsaid[rt->rate];
402 sub = &rt->playback;
404 if (rt->rate < ARRAY_SIZE(rates))
405 alsa_rt->hw.rates = rates_alsaid[rt->rate];
407 sub = &rt->capture;
411 mutex_unlock(&rt->stream_mutex);
412 dev_err(&rt->chip->dev->dev, "invalid stream type.\n");
418 mutex_unlock(&rt->stream_mutex);
424 struct pcm_runtime *rt = snd_pcm_substream_chip(alsa_sub);
428 if (rt->panic)
431 mutex_lock(&rt->stream_mutex);
440 if (!rt->playback.instance && !rt->capture.instance) {
441 usb6fire_pcm_stream_stop(rt);
442 rt->rate = ARRAY_SIZE(rates);
445 mutex_unlock(&rt->stream_mutex);
451 struct pcm_runtime *rt = snd_pcm_substream_chip(alsa_sub);
456 if (rt->panic)
461 mutex_lock(&rt->stream_mutex);
465 if (rt->stream_state == STREAM_DISABLED) {
466 for (rt->rate = 0; rt->rate < ARRAY_SIZE(rates); rt->rate++)
467 if (alsa_rt->rate == rates[rt->rate])
469 if (rt->rate == ARRAY_SIZE(rates)) {
470 mutex_unlock(&rt->stream_mutex);
471 dev_err(&rt->chip->dev->dev,
477 ret = usb6fire_pcm_set_rate(rt);
479 mutex_unlock(&rt->stream_mutex);
482 ret = usb6fire_pcm_stream_start(rt);
484 mutex_unlock(&rt->stream_mutex);
485 dev_err(&rt->chip->dev->dev,
490 mutex_unlock(&rt->stream_mutex);
497 struct pcm_runtime *rt = snd_pcm_substream_chip(alsa_sub);
500 if (rt->panic)
529 struct pcm_runtime *rt = snd_pcm_substream_chip(alsa_sub);
533 if (rt->panic || !sub)
568 static int usb6fire_pcm_buffers_init(struct pcm_runtime *rt)
573 rt->out_urbs[i].buffer = kcalloc(PCM_MAX_PACKET_SIZE,
576 if (!rt->out_urbs[i].buffer)
578 rt->in_urbs[i].buffer = kcalloc(PCM_MAX_PACKET_SIZE,
581 if (!rt->in_urbs[i].buffer)
587 static void usb6fire_pcm_buffers_destroy(struct pcm_runtime *rt)
592 kfree(rt->out_urbs[i].buffer);
593 kfree(rt->in_urbs[i].buffer);
602 struct pcm_runtime *rt =
605 if (!rt)
608 ret = usb6fire_pcm_buffers_init(rt);
610 usb6fire_pcm_buffers_destroy(rt);
611 kfree(rt);
615 rt->chip = chip;
616 rt->stream_state = STREAM_DISABLED;
617 rt->rate = ARRAY_SIZE(rates);
618 init_waitqueue_head(&rt->stream_wait_queue);
619 mutex_init(&rt->stream_mutex);
621 spin_lock_init(&rt->playback.lock);
622 spin_lock_init(&rt->capture.lock);
625 usb6fire_pcm_init_urb(&rt->in_urbs[i], chip, true, IN_EP,
627 usb6fire_pcm_init_urb(&rt->out_urbs[i], chip, false, OUT_EP,
630 rt->in_urbs[i].peer = &rt->out_urbs[i];
631 rt->out_urbs[i].peer = &rt->in_urbs[i];
636 usb6fire_pcm_buffers_destroy(rt);
637 kfree(rt);
642 pcm->private_data = rt;
648 rt->instance = pcm;
650 chip->pcm = rt;
656 struct pcm_runtime *rt = chip->pcm;
659 if (rt) {
660 rt->panic = true;
662 if (rt->playback.instance)
663 snd_pcm_stop_xrun(rt->playback.instance);
665 if (rt->capture.instance)
666 snd_pcm_stop_xrun(rt->capture.instance);
669 usb_poison_urb(&rt->in_urbs[i].instance);
670 usb_poison_urb(&rt->out_urbs[i].instance);
678 struct pcm_runtime *rt = chip->pcm;
680 usb6fire_pcm_buffers_destroy(rt);
681 kfree(rt);