]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ALSA: ctxfi: Use correct DAIO type for da_desc
authorHarin Lee <me@harin.net>
Wed, 1 Apr 2026 09:01:58 +0000 (18:01 +0900)
committerTakashi Iwai <tiwai@suse.de>
Wed, 1 Apr 2026 12:43:54 +0000 (14:43 +0200)
Skip the unused DAIO type per model (SPDIFIO on CTSB073X, SPDIFI_BAY
on all others) and use the correct DAIO type directly as da_desc
type. This removes the mismatch and misleading between the actual
DAIO resource and the da_desc type like SPDIFI_BAY (formerly SPDIFI1).
Update related functions accordingly, and drop the unreachable
SPDIFI_BAY case from the hw20k2 daio_device_index().

Signed-off-by: Harin Lee <me@harin.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20260401090159.2404387-3-me@harin.net
sound/pci/ctxfi/ctatc.c
sound/pci/ctxfi/ctdaio.c

index 9e0532fb33ff80f17baeddd0a47306f46e3e3c2a..7c2f896d531d747959f401aac1335f98a5b34f9d 100644 (file)
@@ -983,6 +983,11 @@ static int atc_select_mic_in(struct ct_atc *atc)
        return 0;
 }
 
+static inline enum DAIOTYP atc_spdif_in_type(struct ct_atc *atc)
+{
+       return (atc->model == CTSB073X) ? SPDIFI_BAY : SPDIFIO;
+}
+
 static struct capabilities atc_capabilities(struct ct_atc *atc)
 {
        struct hw *hw = atc->hw;
@@ -1121,7 +1126,7 @@ static int atc_spdif_out_unmute(struct ct_atc *atc, unsigned char state)
 
 static int atc_spdif_in_unmute(struct ct_atc *atc, unsigned char state)
 {
-       return atc_daio_unmute(atc, state, SPDIFIO);
+       return atc_daio_unmute(atc, state, atc_spdif_in_type(atc));
 }
 
 static int atc_spdif_out_get_status(struct ct_atc *atc, unsigned int *status)
@@ -1427,14 +1432,12 @@ static int atc_get_resources(struct ct_atc *atc)
        daio_mgr = (struct daio_mgr *)atc->rsc_mgrs[DAIO];
        da_desc.msr = atc->msr;
        for (i = 0; i < NUM_DAIOTYP; i++) {
-               if (((i == MIC) && !cap.dedicated_mic) ||
-                   ((i == RCA) && !cap.dedicated_rca) ||
-                   i == SPDIFI_BAY)
+               if (((i == SPDIFIO) && (atc->model == CTSB073X)) ||
+                       ((i == SPDIFI_BAY) && (atc->model != CTSB073X)) ||
+                       ((i == MIC) && !cap.dedicated_mic) ||
+                       ((i == RCA) && !cap.dedicated_rca))
                        continue;
-               if (atc->model == CTSB073X && i == SPDIFIO)
-                       da_desc.type = SPDIFI_BAY;
-               else
-                       da_desc.type = i;
+               da_desc.type = i;
                da_desc.output = (i < LINEIM) || (i == RCA);
                err = daio_mgr->get_daio(daio_mgr, &da_desc,
                                        (struct daio **)&atc->daios[i]);
@@ -1569,7 +1572,7 @@ static void atc_connect_resources(struct ct_atc *atc)
                mixer->set_input_right(mixer, MIX_MIC_IN, &src->rsc);
        }
 
-       dai = container_of(atc->daios[SPDIFIO], struct dai, daio);
+       dai = container_of(atc->daios[atc_spdif_in_type(atc)], struct dai, daio);
        atc_connect_dai(atc->rsc_mgrs[SRC], dai,
                        (struct src **)&atc->srcs[0],
                        (struct srcimp **)&atc->srcimps[0]);
index 128cf2f69ac1e94ce1d0fcef5a7ef4b92800b718..69aacd06716cef7b41b993ccb0fcda9eab583954 100644 (file)
@@ -120,7 +120,6 @@ static int daio_device_index(enum DAIOTYP type, struct hw *hw)
                switch (type) {
                case SPDIFOO:   return 0;
                case SPDIFIO:   return 0;
-               case SPDIFI_BAY:        return 1;
                case LINEO1:    return 4;
                case LINEO2:    return 7;
                case LINEO3:    return 5;