ALSA: usb-audio: Handle normal and auto-suspend equally
authorTakashi Iwai <tiwai@suse.de>
Wed, 26 Aug 2015 08:23:26 +0000 (10:23 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 26 Aug 2015 14:12:25 +0000 (16:12 +0200)
In theory, the device may get suspended even at runtime PM suspend.
Currently we don't save the mixer state for autopm, and it may bring
inconsistency.

This patch removes the special handling for autosuspend.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/card.c

index 73c5833e765742aca6c83392cff53fc42b751710..18f56646ce86d2b9114507e5db69b802065952a9 100644 (file)
@@ -689,30 +689,20 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message)
        if (chip == (void *)-1L)
                return 0;
 
-       if (!PMSG_IS_AUTO(message)) {
+       chip->autosuspended = !!PMSG_IS_AUTO(message);
+       if (!chip->autosuspended)
                snd_power_change_state(chip->card, SNDRV_CTL_POWER_D3hot);
-               if (!chip->num_suspended_intf++) {
-                       list_for_each_entry(as, &chip->pcm_list, list) {
-                               snd_pcm_suspend_all(as->pcm);
-                               as->substream[0].need_setup_ep =
-                                       as->substream[1].need_setup_ep = true;
-                       }
-                       list_for_each(p, &chip->midi_list) {
-                               snd_usbmidi_suspend(p);
-                       }
+       if (!chip->num_suspended_intf++) {
+               list_for_each_entry(as, &chip->pcm_list, list) {
+                       snd_pcm_suspend_all(as->pcm);
+                       as->substream[0].need_setup_ep =
+                               as->substream[1].need_setup_ep = true;
                }
-       } else {
-               /*
-                * otherwise we keep the rest of the system in the dark
-                * to keep this transparent
-                */
-               if (!chip->num_suspended_intf++)
-                       chip->autosuspended = 1;
-       }
-
-       if (chip->num_suspended_intf == 1)
+               list_for_each(p, &chip->midi_list)
+                       snd_usbmidi_suspend(p);
                list_for_each_entry(mixer, &chip->mixer_list, list)
                        snd_usb_mixer_suspend(mixer);
+       }
 
        return 0;
 }