diff options
Diffstat (limited to 'sound/usb/card.c')
-rw-r--r-- | sound/usb/card.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sound/usb/card.c b/sound/usb/card.c index c0f8270bc19..7fa53d91e73 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -586,6 +586,7 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message) struct snd_usb_audio *chip = usb_get_intfdata(intf); struct list_head *p; struct snd_usb_stream *as; + struct usb_mixer_interface *mixer; if (chip == (void *)-1L) return 0; @@ -596,6 +597,10 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message) as = list_entry(p, struct snd_usb_stream, list); snd_pcm_suspend_all(as->pcm); } + + list_for_each_entry(mixer, &chip->mixer_list, list) { + snd_usb_mixer_inactivate(mixer); + } } return 0; @@ -604,6 +609,7 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message) static int usb_audio_resume(struct usb_interface *intf) { struct snd_usb_audio *chip = usb_get_intfdata(intf); + struct usb_mixer_interface *mixer; if (chip == (void *)-1L) return 0; @@ -611,8 +617,10 @@ static int usb_audio_resume(struct usb_interface *intf) return 0; /* * ALSA leaves material resumption to user space - * we just notify + * we just notify and restart the mixers */ + list_for_each_entry(mixer, &chip->mixer_list, list) + snd_usb_mixer_activate(mixer); snd_power_change_state(chip->card, SNDRV_CTL_POWER_D0); |