ALSA: usb-audio: Drop keep_interface flag again
authorTakashi Iwai <tiwai@suse.de>
Mon, 23 Nov 2020 08:53:21 +0000 (09:53 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 23 Nov 2020 14:13:37 +0000 (15:13 +0100)
This behavior turned out to be invalid from the USB spec POV and
shouldn't be applied.  As it's an optional flag that is set only via
an card control element that must be hardly used, let's drop it
again.

Tested-by: Keith Milner <kamilner@superlative.org>
Tested-by: Dylan Robinson <dylan_robinson@motu.com>
Link: https://lore.kernel.org/r/20201123085347.19667-16-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/mixer.c
sound/usb/pcm.c
sound/usb/usbaudio.h

index 81e987eaf063757cc0bb8ac6e6e3a298e0405645..12b15ed59eaa11ae7767a9b566b32abf033355a5 100644 (file)
@@ -3454,48 +3454,6 @@ static int snd_usb_mixer_status_create(struct usb_mixer_interface *mixer)
        return 0;
 }
 
-static int keep_iface_ctl_get(struct snd_kcontrol *kcontrol,
-                             struct snd_ctl_elem_value *ucontrol)
-{
-       struct usb_mixer_interface *mixer = snd_kcontrol_chip(kcontrol);
-
-       ucontrol->value.integer.value[0] = mixer->chip->keep_iface;
-       return 0;
-}
-
-static int keep_iface_ctl_put(struct snd_kcontrol *kcontrol,
-                             struct snd_ctl_elem_value *ucontrol)
-{
-       struct usb_mixer_interface *mixer = snd_kcontrol_chip(kcontrol);
-       bool keep_iface = !!ucontrol->value.integer.value[0];
-
-       if (mixer->chip->keep_iface == keep_iface)
-               return 0;
-       mixer->chip->keep_iface = keep_iface;
-       return 1;
-}
-
-static const struct snd_kcontrol_new keep_iface_ctl = {
-       .iface = SNDRV_CTL_ELEM_IFACE_CARD,
-       .name = "Keep Interface",
-       .info = snd_ctl_boolean_mono_info,
-       .get = keep_iface_ctl_get,
-       .put = keep_iface_ctl_put,
-};
-
-static int create_keep_iface_ctl(struct usb_mixer_interface *mixer)
-{
-       struct snd_kcontrol *kctl = snd_ctl_new1(&keep_iface_ctl, mixer);
-
-       /* need only one control per card */
-       if (snd_ctl_find_id(mixer->chip->card, &kctl->id)) {
-               snd_ctl_free_one(kctl);
-               return 0;
-       }
-
-       return snd_ctl_add(mixer->chip->card, kctl);
-}
-
 int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
                         int ignore_error)
 {
@@ -3548,10 +3506,6 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
        if (err < 0)
                goto _error;
 
-       err = create_keep_iface_ctl(mixer);
-       if (err < 0)
-               goto _error;
-
        err = snd_usb_mixer_apply_create_quirk(mixer);
        if (err < 0)
                goto _error;
index 03b1a02bcff463a00f291409aaa1a4253831a03b..392aa1cba61cf85144f85d8fa11399f1d83c2405 100644 (file)
@@ -648,14 +648,12 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
 
        /* close the old interface */
        if (subs->interface >= 0 && (subs->interface != fmt->iface || subs->need_setup_fmt)) {
-               if (!subs->stream->chip->keep_iface) {
-                       err = usb_set_interface(subs->dev, subs->interface, 0);
-                       if (err < 0) {
-                               dev_err(&dev->dev,
-                                       "%d:%d: return to setting 0 failed (%d)\n",
-                                       fmt->iface, fmt->altsetting, err);
-                               return -EIO;
-                       }
+               err = usb_set_interface(subs->dev, subs->interface, 0);
+               if (err < 0) {
+                       dev_err(&dev->dev,
+                               "%d:%d: return to setting 0 failed (%d)\n",
+                               fmt->iface, fmt->altsetting, err);
+                       return -EIO;
                }
                subs->interface = -1;
                subs->altset_idx = 0;
@@ -1483,8 +1481,7 @@ static int snd_usb_pcm_close(struct snd_pcm_substream *substream)
 
        snd_media_stop_pipeline(subs);
 
-       if (!as->chip->keep_iface &&
-           subs->interface >= 0 &&
+       if (subs->interface >= 0 &&
            !snd_usb_lock_shutdown(subs->stream->chip)) {
                usb_set_interface(subs->dev, subs->interface, 0);
                subs->interface = -1;
index 0805b7f21272ff715f26600300887026716d6d6f..aa017a93f7bd1a0493f299ae5db911b6c801441c 100644 (file)
@@ -53,9 +53,6 @@ struct snd_usb_audio {
 
        int setup;                      /* from the 'device_setup' module param */
        bool autoclock;                 /* from the 'autoclock' module param */
-       bool keep_iface;                /* keep interface/altset after closing
-                                        * or parameter change
-                                        */
 
        struct usb_host_interface *ctrl_intf;   /* the audio control interface */
        struct media_device *media_dev;