* The endpoint needs to be closed via snd_usb_endpoint_close() later.
  *
  * Note that this function doesn't configure the endpoint.  The substream
- * needs to set it up later via snd_usb_endpoint_set_params() and
- * snd_usb_endpoint_prepare().
+ * needs to set it up later via snd_usb_endpoint_configure().
  */
 struct snd_usb_endpoint *
 snd_usb_endpoint_open(struct snd_usb_audio *chip,
 /*
  * snd_usb_endpoint_set_params: configure an snd_usb_endpoint
  *
- * It's called either from hw_params callback.
  * Determine the number of URBs to be used on this endpoint.
  * An endpoint must be configured before it can be started.
  * An endpoint that is already running can not be reconfigured.
  */
-int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
-                               struct snd_usb_endpoint *ep)
+static int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
+                                      struct snd_usb_endpoint *ep)
 {
        const struct audioformat *fmt = ep->cur_audiofmt;
        int err;
 }
 
 /*
- * snd_usb_endpoint_prepare: Prepare the endpoint
+ * snd_usb_endpoint_configure: Configure the endpoint
  *
  * This function sets up the EP to be fully usable state.
- * It's called either from prepare callback.
+ * It's called either from hw_params or prepare callback.
  * The function checks need_setup flag, and performs nothing unless needed,
  * so it's safe to call this multiple times.
  *
  * This returns zero if unchanged, 1 if the configuration has changed,
  * or a negative error code.
  */
-int snd_usb_endpoint_prepare(struct snd_usb_audio *chip,
-                            struct snd_usb_endpoint *ep)
+int snd_usb_endpoint_configure(struct snd_usb_audio *chip,
+                              struct snd_usb_endpoint *ep)
 {
        bool iface_first;
        int err = 0;
                        if (err < 0)
                                goto unlock;
                }
+               err = snd_usb_endpoint_set_params(chip, ep);
+               if (err < 0)
+                       goto unlock;
                goto done;
        }
 
        if (err < 0)
                goto unlock;
 
+       err = snd_usb_endpoint_set_params(chip, ep);
+       if (err < 0)
+               goto unlock;
+
        err = snd_usb_select_mode_quirk(chip, ep->cur_audiofmt);
        if (err < 0)
                goto unlock;
 
                      bool is_sync_ep);
 void snd_usb_endpoint_close(struct snd_usb_audio *chip,
                            struct snd_usb_endpoint *ep);
-int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
-                               struct snd_usb_endpoint *ep);
-int snd_usb_endpoint_prepare(struct snd_usb_audio *chip,
-                            struct snd_usb_endpoint *ep);
+int snd_usb_endpoint_configure(struct snd_usb_audio *chip,
+                              struct snd_usb_endpoint *ep);
 int snd_usb_endpoint_get_clock_rate(struct snd_usb_audio *chip, int clock);
 
 bool snd_usb_endpoint_compatible(struct snd_usb_audio *chip,
 
                if (stop_endpoints(subs, false))
                        sync_pending_stops(subs);
                if (subs->sync_endpoint) {
-                       err = snd_usb_endpoint_prepare(chip, subs->sync_endpoint);
+                       err = snd_usb_endpoint_configure(chip, subs->sync_endpoint);
                        if (err < 0)
                                return err;
                }
-               err = snd_usb_endpoint_prepare(chip, subs->data_endpoint);
+               err = snd_usb_endpoint_configure(chip, subs->data_endpoint);
                if (err < 0)
                        return err;
                snd_usb_set_format_quirk(subs, subs->cur_audiofmt);
        } else {
                if (subs->sync_endpoint) {
-                       err = snd_usb_endpoint_prepare(chip, subs->sync_endpoint);
+                       err = snd_usb_endpoint_configure(chip, subs->sync_endpoint);
                        if (err < 0)
                                return err;
                }
        subs->cur_audiofmt = fmt;
        mutex_unlock(&chip->mutex);
 
-       if (subs->sync_endpoint) {
-               ret = snd_usb_endpoint_set_params(chip, subs->sync_endpoint);
-               if (ret < 0)
-                       goto unlock;
-       }
-
-       ret = snd_usb_endpoint_set_params(chip, subs->data_endpoint);
+       ret = configure_endpoints(chip, subs);
 
  unlock:
        if (ret < 0)