summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarin Lee <me@harin.net>2026-04-01 12:01:59 +0300
committerTakashi Iwai <tiwai@suse.de>2026-04-01 15:43:54 +0300
commit80449e1966cb9df57617a1d22bccd1e29cbc4222 (patch)
tree58dd2ed2f459dbac07910e39321393b84e3ca09d
parent07b116b44e52d78af40c2d39a8e1e34ef1283d0d (diff)
downloadlinux-80449e1966cb9df57617a1d22bccd1e29cbc4222.tar.xz
ALSA: ctxfi: Precompute SRC allocation loop bound
Replace the capability checks in the SRC and SRCIMP allocation loops with a precomputed loop bound. Cards with a dedicated mic input (SB1270, OK0010) allocate all NUM_ATC_SRCS entries, otherwise stop at 4. Signed-off-by: Harin Lee <me@harin.net> Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20260401090159.2404387-4-me@harin.net
-rw-r--r--sound/pci/ctxfi/ctatc.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c
index 7c2f896d531d..516c0a12ed9f 100644
--- a/sound/pci/ctxfi/ctatc.c
+++ b/sound/pci/ctxfi/ctatc.c
@@ -1409,9 +1409,11 @@ static int atc_get_resources(struct ct_atc *atc)
struct sum_desc sum_dsc = {0};
struct sum_mgr *sum_mgr;
struct capabilities cap;
+ int atc_srcs_limit;
int err, i;
cap = atc->capabilities(atc);
+ atc_srcs_limit = cap.dedicated_mic ? NUM_ATC_SRCS : 4;
atc->daios = kcalloc(NUM_DAIOTYP, sizeof(void *), GFP_KERNEL);
if (!atc->daios)
@@ -1453,9 +1455,7 @@ static int atc_get_resources(struct ct_atc *atc)
src_dsc.multi = 1;
src_dsc.msr = atc->msr;
src_dsc.mode = ARCRW;
- for (i = 0; i < NUM_ATC_SRCS; i++) {
- if (((i > 3) && !cap.dedicated_mic))
- continue;
+ for (i = 0; i < atc_srcs_limit; i++) {
err = src_mgr->get_src(src_mgr, &src_dsc,
(struct src **)&atc->srcs[i]);
if (err)
@@ -1464,9 +1464,7 @@ static int atc_get_resources(struct ct_atc *atc)
srcimp_mgr = atc->rsc_mgrs[SRCIMP];
srcimp_dsc.msr = 8;
- for (i = 0; i < NUM_ATC_SRCS; i++) {
- if (((i > 3) && !cap.dedicated_mic))
- continue;
+ for (i = 0; i < atc_srcs_limit; i++) {
err = srcimp_mgr->get_srcimp(srcimp_mgr, &srcimp_dsc,
(struct srcimp **)&atc->srcimps[i]);
if (err)