diff options
author | Peter Chen <peter.chen@freescale.com> | 2014-12-31 16:06:49 +0800 |
---|---|---|
committer | Peter Chen <peter.chen@freescale.com> | 2015-01-04 14:54:52 +0800 |
commit | 496fbe0b831b77d0ea0a2c7bbd1d58820b3a01f7 (patch) | |
tree | 46fb95f93bbb3218fefe88127c74681e344fbc9a /sound/usb/mixer.c | |
parent | 6cb794b964ea4a8f00116c800a7075c3b67fff6b (diff) |
MLK-10067 Revert "ALSA: usb-audio: Resume mixer values properly"rel_imx_3.10.53_1.1.0_ga
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 <peter.chen@freescale.com>
Diffstat (limited to 'sound/usb/mixer.c')
-rw-r--r-- | sound/usb/mixer.c | 99 |
1 files changed, 20 insertions, 79 deletions
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 |