Go to file
Alexander Tsoy 2e23b6f3db ALSA: usb-audio: Improve frames size computation
[ Upstream commit f0bd62b64016508938df9babe47f65c2c727d25c ]

For computation of the the next frame size current value of fs/fps and
accumulated fractional parts of fs/fps are used, where values are stored
in Q16.16 format. This is quite natural for computing frame size for
asynchronous endpoints driven by explicit feedback, since in this case
fs/fps is a value provided by the feedback endpoint and it's already in
the Q format. If an error is accumulated over time, the device can
adjust fs/fps value to prevent buffer overruns/underruns.

But for synchronous endpoints the accuracy provided by these computations
is not enough. Due to accumulated error the driver periodically produces
frames with incorrect size (+/- 1 audio sample).

This patch fixes this issue by implementing a different algorithm for
frame size computation. It is based on accumulating of the remainders
from division fs/fps and it doesn't accumulate errors over time. This
new method is enabled for synchronous and adaptive playback endpoints.

Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
Link: https://lore.kernel.org/r/20200424022449.14972-1-alexander@tsoy.me
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-03-16 16:30:10 +08:00
Documentation dt-bindings: display: mediatek: control dpi pins mode to avoid leakage 2021-03-16 16:29:24 +08:00
LICENSES Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
arch arm64: dts: qcom: fix pm8150 gpio interrupts 2021-03-16 16:30:09 +08:00
block iocost: don't let vrate run wild while there's no saturation signal 2021-03-16 16:29:32 +08:00
certs Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
crypto crypto: drbg - fix error return code in drbg_alloc_state() 2021-03-16 16:29:06 +08:00
drivers staging: gasket: Fix mapping refcnt leak when register/store fails 2021-03-16 16:30:10 +08:00
fs virtiofs: schedule blocking async replies in separate worker 2021-03-16 16:30:09 +08:00
include usb: gadget: core: sync interrupt before unbind the udc 2021-03-16 16:30:03 +08:00
init x86: Fix early boot crash on gcc-10, third try 2021-03-16 16:28:02 +08:00
ipc ipc/util.c: sysvipc_find_ipc() incorrectly updates position index 2021-03-16 16:27:51 +08:00
kernel kernel/cpu_pm: Fix uninitted local in cpu_pm 2021-03-16 16:29:48 +08:00
lib kasan: stop tests being eliminated as dead code with FORTIFY_SOURCE 2021-03-16 16:29:38 +08:00
mm mm: call cond_resched() from deferred_init_memmap() 2021-03-16 16:29:40 +08:00
net bpf, sockhash: Fix memory leak when unlinking sockets in sock_hash_free 2021-03-16 16:30:07 +08:00
package config/arm64: OPEN CONFIG_PSI and phytium configs 2021-03-16 11:02:59 +08:00
samples samples: bpf: Fix build error 2021-03-16 16:28:31 +08:00
scripts mksysmap: Fix the mismatch of '.L' symbols in System.map 2021-03-16 16:30:06 +08:00
security apparmor: fix nnp subset test for unconfined 2021-03-16 16:30:07 +08:00
sound ALSA: usb-audio: Improve frames size computation 2021-03-16 16:30:10 +08:00
tools perf symbols: Fix kernel maps for kcore and eBPF 2021-03-16 16:29:54 +08:00
usr Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
virt KVM: arm64: Save the host's PtrAuth keys in non-preemptible context 2021-03-16 16:29:14 +08:00
.clang-format Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.cocciconfig Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.get_maintainer.ignore Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.gitattributes Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.gitignore Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
COPYING Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
CREDITS Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
Kbuild Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
Kconfig Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
MAINTAINERS Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
Makefile kbuild: force to build vmlinux if CONFIG_MODVERSION=y 2021-03-16 16:29:50 +08:00
README Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
README.md Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
backport_remove_lists.txt Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
tools_key.pub Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00

README.md

Tencent Linux Kernel 4.0