Loading sound/usb/card.c +3 −1 Original line number Diff line number Diff line Loading @@ -623,6 +623,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, struct snd_usb_audio *chip) { struct snd_card *card; struct usb_mixer_interface *mixer; struct list_head *p; bool was_shutdown; Loading Loading @@ -654,7 +655,8 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, } /* release mixer resources */ list_for_each(p, &chip->mixer_list) { snd_usb_mixer_disconnect(p); mixer = list_entry(p, struct usb_mixer_interface, list); snd_usb_mixer_disconnect(mixer); } } Loading sound/usb/mixer.c +11 −6 Original line number Diff line number Diff line Loading @@ -2169,6 +2169,9 @@ static int parse_audio_unit(struct mixer_build *state, int unitid) static void snd_usb_mixer_free(struct usb_mixer_interface *mixer) { /* kill pending URBs */ snd_usb_mixer_disconnect(mixer); kfree(mixer->id_elems); if (mixer->urb) { kfree(mixer->urb->transfer_buffer); Loading Loading @@ -2500,13 +2503,15 @@ _error: return err; } void snd_usb_mixer_disconnect(struct list_head *p) void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer) { struct usb_mixer_interface *mixer; mixer = list_entry(p, struct usb_mixer_interface, list); if (mixer->disconnected) return; if (mixer->urb) usb_kill_urb(mixer->urb); if (mixer->rc_urb) usb_kill_urb(mixer->rc_urb); mixer->disconnected = true; } #ifdef CONFIG_PM Loading sound/usb/mixer.h +2 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ struct usb_mixer_interface { u8 audigy2nx_leds[3]; u8 xonar_u1_status; bool disconnected; }; #define MAX_CHANNELS 16 /* max logical channels */ Loading Loading @@ -57,7 +58,7 @@ struct usb_mixer_elem_info { int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif, int ignore_error); void snd_usb_mixer_disconnect(struct list_head *p); void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer); void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid); Loading Loading
sound/usb/card.c +3 −1 Original line number Diff line number Diff line Loading @@ -623,6 +623,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, struct snd_usb_audio *chip) { struct snd_card *card; struct usb_mixer_interface *mixer; struct list_head *p; bool was_shutdown; Loading Loading @@ -654,7 +655,8 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, } /* release mixer resources */ list_for_each(p, &chip->mixer_list) { snd_usb_mixer_disconnect(p); mixer = list_entry(p, struct usb_mixer_interface, list); snd_usb_mixer_disconnect(mixer); } } Loading
sound/usb/mixer.c +11 −6 Original line number Diff line number Diff line Loading @@ -2169,6 +2169,9 @@ static int parse_audio_unit(struct mixer_build *state, int unitid) static void snd_usb_mixer_free(struct usb_mixer_interface *mixer) { /* kill pending URBs */ snd_usb_mixer_disconnect(mixer); kfree(mixer->id_elems); if (mixer->urb) { kfree(mixer->urb->transfer_buffer); Loading Loading @@ -2500,13 +2503,15 @@ _error: return err; } void snd_usb_mixer_disconnect(struct list_head *p) void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer) { struct usb_mixer_interface *mixer; mixer = list_entry(p, struct usb_mixer_interface, list); if (mixer->disconnected) return; if (mixer->urb) usb_kill_urb(mixer->urb); if (mixer->rc_urb) usb_kill_urb(mixer->rc_urb); mixer->disconnected = true; } #ifdef CONFIG_PM Loading
sound/usb/mixer.h +2 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ struct usb_mixer_interface { u8 audigy2nx_leds[3]; u8 xonar_u1_status; bool disconnected; }; #define MAX_CHANNELS 16 /* max logical channels */ Loading Loading @@ -57,7 +58,7 @@ struct usb_mixer_elem_info { int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif, int ignore_error); void snd_usb_mixer_disconnect(struct list_head *p); void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer); void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid); Loading