Skip to content

Commit cfb692c

Browse files
Meng Dongyangrkhuangtao
authored andcommitted
usb: gadget: uac: stop sending audio when disconnect
The sending process may still work if disconnect from PC, for the sending function is called in the complete call back function. So set alt to 0 when disconnect or reset, and stop follow-up sending in complete function if alt is 0. Change-Id: I073f122fe2ce2faf8cf6fb036fb983f9f3325f34 Signed-off-by: Meng Dongyang <daniel.meng@rock-chips.com>
1 parent d04e0d9 commit cfb692c

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

drivers/usb/gadget/function/f_audio_source.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,8 @@ static void audio_data_complete(struct usb_ep *ep, struct usb_request *req)
674674
snd_pcm_period_elapsed(audio->substream);
675675
audio->period_offset = 0;
676676
}
677-
audio_send(audio);
677+
if (audio->alt)
678+
audio_send(audio);
678679
}
679680

680681
static int audio_set_endpoint_req(struct usb_function *f,
@@ -913,6 +914,9 @@ static void audio_disable(struct usb_function *f)
913914
{
914915
struct audio_dev *audio = func_to_audio(f);
915916

917+
audio->alt = 0;
918+
schedule_work(&audio->work);
919+
916920
pr_debug("audio_disable\n");
917921
usb_ep_disable(audio->in_ep);
918922
}
@@ -1064,9 +1068,11 @@ audio_unbind(struct usb_configuration *c, struct usb_function *f)
10641068

10651069
static void audio_pcm_playback_start(struct audio_dev *audio)
10661070
{
1067-
audio->start_time = ktime_get();
1068-
audio->frames_sent = 0;
1069-
audio_send(audio);
1071+
if (audio->alt) {
1072+
audio->start_time = ktime_get();
1073+
audio->frames_sent = 0;
1074+
audio_send(audio);
1075+
}
10701076
}
10711077

10721078
static void audio_pcm_playback_stop(struct audio_dev *audio)

0 commit comments

Comments
 (0)