|
@@ -44,6 +44,7 @@ static void change_volume(struct urb *urb_out, int volume[],
|
|
|
}
|
|
|
} else if (bytes_per_frame == 6) {
|
|
|
unsigned char *p, *buf_end;
|
|
|
+
|
|
|
p = (unsigned char *)urb_out->transfer_buffer;
|
|
|
buf_end = p + urb_out->transfer_buffer_length;
|
|
|
|
|
@@ -310,6 +311,7 @@ void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm)
|
|
|
if (test_bit(i, &line6pcm->active_urb_out)) {
|
|
|
if (!test_and_set_bit(i, &line6pcm->unlink_urb_out)) {
|
|
|
struct urb *u = line6pcm->urb_audio_out[i];
|
|
|
+
|
|
|
usb_unlink_urb(u);
|
|
|
}
|
|
|
}
|
|
@@ -363,7 +365,6 @@ static void audio_out_callback(struct urb *urb)
|
|
|
{
|
|
|
int i, index, length = 0, shutdown = 0;
|
|
|
unsigned long flags;
|
|
|
-
|
|
|
struct snd_line6_pcm *line6pcm = (struct snd_line6_pcm *)urb->context;
|
|
|
struct snd_pcm_substream *substream =
|
|
|
get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK);
|
|
@@ -389,6 +390,7 @@ static void audio_out_callback(struct urb *urb)
|
|
|
|
|
|
if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags)) {
|
|
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
|
|
+
|
|
|
line6pcm->pos_out_done +=
|
|
|
length / line6pcm->properties->bytes_per_frame;
|
|
|
|
|
@@ -485,6 +487,7 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
|
|
|
static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream)
|
|
|
{
|
|
|
struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
|
|
|
+
|
|
|
line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER);
|
|
|
return snd_pcm_lib_free_pages(substream);
|
|
|
}
|
|
@@ -539,6 +542,7 @@ static snd_pcm_uframes_t
|
|
|
snd_line6_playback_pointer(struct snd_pcm_substream *substream)
|
|
|
{
|
|
|
struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
|
|
|
+
|
|
|
return line6pcm->pos_out_done;
|
|
|
}
|
|
|
|