ALSA: usb-audio: Move playback_first flag into quirk_flags
authorTakashi Iwai <tiwai@suse.de>
Thu, 29 Jul 2021 07:38:51 +0000 (09:38 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 2 Aug 2021 07:05:58 +0000 (09:05 +0200)
The snd_usb_audio.playback_first flag is used by the implicit feedback
mode handling, and this can be also moved to quirk_flags.

Link: https://lore.kernel.org/r/20210729073855.19043-6-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/endpoint.c
sound/usb/implicit.c
sound/usb/usbaudio.h

index 16c36e4..6016e97 100644 (file)
@@ -1382,7 +1382,7 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
                goto __error;
 
        if (snd_usb_endpoint_implicit_feedback_sink(ep) &&
-           !ep->chip->playback_first) {
+           !(ep->chip->quirk_flags & QUIRK_FLAG_PLAYBACK_FIRST)) {
                for (i = 0; i < ep->nurbs; i++) {
                        struct snd_urb_ctx *ctx = ep->urb + i;
                        list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs);
index 590a0db..23767a1 100644 (file)
@@ -171,7 +171,7 @@ static int add_roland_implicit_fb(struct snd_usb_audio *chip,
        if (!usb_endpoint_is_isoc_in(epd) ||
            (epd->bmAttributes & USB_ENDPOINT_SYNCTYPE) != USB_ENDPOINT_SYNC_ASYNC)
                return 0;
-       chip->playback_first = 1;
+       chip->quirk_flags |= QUIRK_FLAG_PLAYBACK_FIRST;
        return add_implicit_fb_sync_ep(chip, fmt, epd->bEndpointAddress, 0,
                                       alts->desc.bInterfaceNumber, alts);
 }
@@ -320,7 +320,7 @@ static int audioformat_implicit_fb_quirk(struct snd_usb_audio *chip,
                case IMPLICIT_FB_FIXED:
                        return 0; /* no quirk */
                case IMPLICIT_FB_BOTH:
-                       chip->playback_first = 1;
+                       chip->quirk_flags |= QUIRK_FLAG_PLAYBACK_FIRST;
                        return add_generic_implicit_fb(chip, fmt, alts);
                }
        }
@@ -344,7 +344,7 @@ static int audioformat_implicit_fb_quirk(struct snd_usb_audio *chip,
 
        /* Pioneer devices with vendor spec class */
        if (is_pioneer_implicit_fb(chip, alts)) {
-               chip->playback_first = 1;
+               chip->quirk_flags |= QUIRK_FLAG_PLAYBACK_FIRST;
                return add_implicit_fb_sync_ep(chip, fmt,
                                               get_endpoint(alts, 1)->bEndpointAddress,
                                               1, alts->desc.bInterfaceNumber,
index 4003ca9..8de2b6c 100644 (file)
@@ -36,7 +36,6 @@ struct snd_usb_audio {
        wait_queue_head_t shutdown_wait;
        unsigned int quirk_flags;
        unsigned int need_delayed_register:1; /* warn for delayed registration */
-       unsigned int playback_first:1;  /* for implicit fb: don't wait for the first capture URBs */
        int num_interfaces;
        int num_suspended_intf;
        int sample_rate_read_error;
@@ -139,11 +138,14 @@ extern bool snd_usb_skip_validation;
  *  slots (audio frames)
  * QUIRK_TX_LENGTH:
  *  Add length specifier to transfers
+ * QUIRK_FLAG_PLAYBACK_FIRST:
+ *  Start playback stream at first even in implement feedback mode
  */
 
 #define QUIRK_FLAG_GET_SAMPLE_RATE     (1U << 0)
 #define QUIRK_FLAG_SHARE_MEDIA_DEVICE  (1U << 1)
 #define QUIRK_FLAG_ALIGN_TRANSFER      (1U << 2)
 #define QUIRK_FLAG_TX_LENGTH           (1U << 3)
+#define QUIRK_FLAG_PLAYBACK_FIRST      (1U << 4)
 
 #endif /* __USBAUDIO_H */