---
sound/usb/mixer.c | 12 ++++++++++--
- sound/usb/mixer.h | 2 ++
- 2 files changed, 12 insertions(+), 2 deletions(-)
+ sound/usb/mixer.h | 1 +
+ 2 files changed, 11 insertions(+), 2 deletions(-)
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
static void snd_usb_mixer_free(struct usb_mixer_interface *mixer)
{
+ /* kill pending URBs */
-+ snd_usb_mixer_disconnect(mixer);
++ snd_usb_mixer_disconnect(&mixer->list);
+
kfree(mixer->id_elems);
if (mixer->urb) {
kfree(mixer->urb->transfer_buffer);
-@@ -2501,8 +2504,13 @@ void snd_usb_mixer_disconnect(struct lis
- /* stop any bus activity of a mixer */
- static void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer)
- {
+@@ -2493,8 +2496,13 @@ void snd_usb_mixer_disconnect(struct lis
+ struct usb_mixer_interface *mixer;
+
+ mixer = list_entry(p, struct usb_mixer_interface, list);
- usb_kill_urb(mixer->urb);
- usb_kill_urb(mixer->rc_urb);
+ if (mixer->disconnected)
+ mixer->disconnected = true;
}
- static int snd_usb_mixer_activate(struct usb_mixer_interface *mixer)
+ #ifdef CONFIG_PM
--- a/sound/usb/mixer.h
+++ b/sound/usb/mixer.h
-@@ -23,6 +23,8 @@ struct usb_mixer_interface {
+@@ -23,6 +23,7 @@ struct usb_mixer_interface {
u8 audigy2nx_leds[3];
u8 xonar_u1_status;
-+
+ bool disconnected;
};