mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
ALSA: usb-audio: Add lowlatency module option
For making user to switch back to the old playback mode, this patch
adds a new module option 'lowlatency' to snd-usb-audio driver.
When user face a regression due to the recent low-latency playback
support, they can test easily by passing lowlatency=0 option without
rebuilding the kernel.
Fixes: 307cc9baac
("ALSA: usb-audio: Reduce latency at playback start, take#2")
Link: https://lore.kernel.org/r/20210829073830.22686-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4267c5a8f3
commit
4801bee7d5
@ -68,6 +68,7 @@ static int pid[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = -1 };
|
||||
static int device_setup[SNDRV_CARDS]; /* device parameter for this card */
|
||||
static bool ignore_ctl_error;
|
||||
static bool autoclock = true;
|
||||
static bool lowlatency = true;
|
||||
static char *quirk_alias[SNDRV_CARDS];
|
||||
static char *delayed_register[SNDRV_CARDS];
|
||||
static bool implicit_fb[SNDRV_CARDS];
|
||||
@ -92,6 +93,8 @@ MODULE_PARM_DESC(ignore_ctl_error,
|
||||
"Ignore errors from USB controller for mixer interfaces.");
|
||||
module_param(autoclock, bool, 0444);
|
||||
MODULE_PARM_DESC(autoclock, "Enable auto-clock selection for UAC2 devices (default: yes).");
|
||||
module_param(lowlatency, bool, 0444);
|
||||
MODULE_PARM_DESC(lowlatency, "Enable low latency playback (default: yes).");
|
||||
module_param_array(quirk_alias, charp, NULL, 0444);
|
||||
MODULE_PARM_DESC(quirk_alias, "Quirk aliases, e.g. 0123abcd:5678beef.");
|
||||
module_param_array(delayed_register, charp, NULL, 0444);
|
||||
@ -599,6 +602,7 @@ static int snd_usb_audio_create(struct usb_interface *intf,
|
||||
chip->setup = device_setup[idx];
|
||||
chip->generic_implicit_fb = implicit_fb[idx];
|
||||
chip->autoclock = autoclock;
|
||||
chip->lowlatency = lowlatency;
|
||||
atomic_set(&chip->active, 1); /* avoid autopm during probing */
|
||||
atomic_set(&chip->usage_count, 0);
|
||||
atomic_set(&chip->shutdown, 0);
|
||||
|
@ -617,7 +617,8 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
/* check whether early start is needed for playback stream */
|
||||
subs->early_playback_start =
|
||||
subs->direction == SNDRV_PCM_STREAM_PLAYBACK &&
|
||||
subs->data_endpoint->nominal_queue_size >= subs->buffer_bytes;
|
||||
(!chip->lowlatency ||
|
||||
(subs->data_endpoint->nominal_queue_size >= subs->buffer_bytes));
|
||||
|
||||
if (subs->early_playback_start)
|
||||
ret = start_endpoints(subs);
|
||||
|
@ -57,6 +57,7 @@ struct snd_usb_audio {
|
||||
bool generic_implicit_fb; /* from the 'implicit_fb' module param */
|
||||
bool autoclock; /* from the 'autoclock' module param */
|
||||
|
||||
bool lowlatency; /* from the 'lowlatency' module param */
|
||||
struct usb_host_interface *ctrl_intf; /* the audio control interface */
|
||||
struct media_device *media_dev;
|
||||
struct media_intf_devnode *ctl_intf_media_devnode;
|
||||
|
Loading…
Reference in New Issue
Block a user