From 496fbe0b831b77d0ea0a2c7bbd1d58820b3a01f7 Mon Sep 17 00:00:00 2001 From: Peter Chen Date: Wed, 31 Dec 2014 16:06:49 +0800 Subject: MLK-10067 Revert "ALSA: usb-audio: Resume mixer values properly" This reverts commit 178bb7bed5b467463a3861aecdd5361ea9d295b7. It causes the USB audio which defines quirk will be dead lock at its resume code Signed-off-by: Peter Chen --- sound/usb/card.c | 18 ++-------- sound/usb/mixer.c | 99 +++++++++++-------------------------------------------- sound/usb/mixer.h | 7 ++-- 3 files changed, 25 insertions(+), 99 deletions(-) diff --git a/sound/usb/card.c b/sound/usb/card.c index 07de1e7ba3ec..64952e2d3ed1 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -694,12 +694,12 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message) } list_for_each_entry(mixer, &chip->mixer_list, list) - snd_usb_mixer_suspend(mixer); + snd_usb_mixer_inactivate(mixer); return 0; } -static int __usb_audio_resume(struct usb_interface *intf, bool reset_resume) +static int usb_audio_resume(struct usb_interface *intf) { struct snd_usb_audio *chip = usb_get_intfdata(intf); struct usb_mixer_interface *mixer; @@ -714,7 +714,7 @@ static int __usb_audio_resume(struct usb_interface *intf, bool reset_resume) * we just notify and restart the mixers */ list_for_each_entry(mixer, &chip->mixer_list, list) { - err = snd_usb_mixer_resume(mixer, reset_resume); + err = snd_usb_mixer_activate(mixer); if (err < 0) goto err_out; } @@ -726,20 +726,9 @@ static int __usb_audio_resume(struct usb_interface *intf, bool reset_resume) err_out: return err; } - -static int usb_audio_resume(struct usb_interface *intf) -{ - return __usb_audio_resume(intf, false); -} - -static int usb_audio_reset_resume(struct usb_interface *intf) -{ - return __usb_audio_resume(intf, true); -} #else #define usb_audio_suspend NULL #define usb_audio_resume NULL -#define usb_audio_reset_resume NULL #endif /* CONFIG_PM */ static struct usb_device_id usb_audio_ids [] = { @@ -761,7 +750,6 @@ static struct usb_driver usb_audio_driver = { .disconnect = usb_audio_disconnect, .suspend = usb_audio_suspend, .resume = usb_audio_resume, - .reset_resume = usb_audio_reset_resume, .id_table = usb_audio_ids, .supports_autosuspend = 1, }; diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index cde3b9126a24..be4db47cb2d9 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -2300,6 +2300,26 @@ requeue: } } +/* stop any bus activity of a mixer */ +void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer) +{ + usb_kill_urb(mixer->urb); + usb_kill_urb(mixer->rc_urb); +} + +int snd_usb_mixer_activate(struct usb_mixer_interface *mixer) +{ + int err; + + if (mixer->urb) { + err = usb_submit_urb(mixer->urb, GFP_NOIO); + if (err < 0) + return err; + } + + return 0; +} + /* create the handler for the optional status interrupt endpoint */ static int snd_usb_mixer_status_create(struct usb_mixer_interface *mixer) { @@ -2398,82 +2418,3 @@ void snd_usb_mixer_disconnect(struct list_head *p) usb_kill_urb(mixer->urb); usb_kill_urb(mixer->rc_urb); } - -#ifdef CONFIG_PM -/* stop any bus activity of a mixer */ -static void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer) -{ - usb_kill_urb(mixer->urb); - usb_kill_urb(mixer->rc_urb); -} - -static int snd_usb_mixer_activate(struct usb_mixer_interface *mixer) -{ - int err; - - if (mixer->urb) { - err = usb_submit_urb(mixer->urb, GFP_NOIO); - if (err < 0) - return err; - } - - return 0; -} - -int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer) -{ - snd_usb_mixer_inactivate(mixer); - return 0; -} - -static int restore_mixer_value(struct usb_mixer_elem_info *cval) -{ - int c, err, idx; - - if (cval->cmask) { - idx = 0; - for (c = 0; c < MAX_CHANNELS; c++) { - if (!(cval->cmask & (1 << c))) - continue; - if (cval->cached & (1 << c)) { - err = set_cur_mix_value(cval, c + 1, idx, - cval->cache_val[idx]); - if (err < 0) - return err; - } - idx++; - } - } else { - /* master */ - if (cval->cached) { - err = set_cur_mix_value(cval, 0, 0, *cval->cache_val); - if (err < 0) - return err; - } - } - - return 0; -} - -int snd_usb_mixer_resume(struct usb_mixer_interface *mixer, bool reset_resume) -{ - struct usb_mixer_elem_info *cval; - int id, err; - - /* FIXME: any mixer quirks? */ - - if (reset_resume) { - /* restore cached mixer values */ - for (id = 0; id < MAX_ID_ELEMS; id++) { - for (cval = mixer->id_elems[id]; cval; - cval = cval->next_id_elem) { - err = restore_mixer_value(cval); - if (err < 0) - return err; - } - } - } - - return snd_usb_mixer_activate(mixer); -} -#endif diff --git a/sound/usb/mixer.h b/sound/usb/mixer.h index 73b1f649447b..aab80df201bd 100644 --- a/sound/usb/mixer.h +++ b/sound/usb/mixer.h @@ -63,6 +63,8 @@ void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid); int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval, int request, int validx, int value_set); +void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer); +int snd_usb_mixer_activate(struct usb_mixer_interface *mixer); int snd_usb_mixer_add_control(struct usb_mixer_interface *mixer, struct snd_kcontrol *kctl); @@ -70,9 +72,4 @@ int snd_usb_mixer_add_control(struct usb_mixer_interface *mixer, int snd_usb_mixer_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag, unsigned int size, unsigned int __user *_tlv); -#ifdef CONFIG_PM -int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer); -int snd_usb_mixer_resume(struct usb_mixer_interface *mixer, bool reset_resume); -#endif - #endif /* __USBMIXER_H */ -- cgit v1.2.3