]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: SDCA: Align mute controls to ALSA expectations
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Thu, 27 Nov 2025 16:34:20 +0000 (16:34 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 27 Nov 2025 19:18:46 +0000 (19:18 +0000)
Currently mute controls will be called "FU xx Mute Switch" (note
the switch is added programmatically outside the coverage of this
patch) and the accompanying volume control would be called "FU xx
Channel Volume".  These names are taken from the SDCA specification,
however, this does not mesh well with the ALSA naming system. ALSA
generally expects enables rather than mutes and expects that mutes
and volumes have matching names.

Update the names and invert the mute controls to make them more
standard "FU XX Channel Switch", this does slightly deviate from
the SDCA specification but it makes the rest of the Linux ecosystem
a lot happier.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20251127163426.2500633-2-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/sdca_function.h
sound/soc/sdca/sdca_asoc.c

index c97861508a158243bf5a509ff122aae85cfd972b..2564fad33fd460a177298a4bb92c251083a53373 100644 (file)
@@ -611,7 +611,7 @@ enum sdca_entity0_controls {
 #define SDCA_CTL_NDAI_PACKETTYPE_NAME                  "NDAI Packet Type"
 #define SDCA_CTL_MIXER_NAME                            "Mixer"
 #define SDCA_CTL_SELECTOR_NAME                         "Selector"
-#define SDCA_CTL_MUTE_NAME                             "Mute"
+#define SDCA_CTL_MUTE_NAME                             "Channel"
 #define SDCA_CTL_CHANNEL_VOLUME_NAME                   "Channel Volume"
 #define SDCA_CTL_AGC_NAME                              "AGC"
 #define SDCA_CTL_BASS_BOOST_NAME                       "Bass Boost"
index 4e3f193c75eff1a60ea1d88d23e7b762783c1e25..0e21ed10917209dd06149dbcaadf7df162b35681 100644 (file)
@@ -886,6 +886,9 @@ static int populate_control(struct device *dev,
        mc->min = 0;
        mc->max = clamp((0x1ull << control->nbits) - 1, 0, type_max(mc->max));
 
+       if (SDCA_CTL_TYPE(entity->type, control->sel) == SDCA_CTL_TYPE_S(FU, MUTE))
+               mc->invert = true;
+
        (*kctl)->name = control_name;
        (*kctl)->private_value = (unsigned long)mc;
        (*kctl)->iface = SNDRV_CTL_ELEM_IFACE_MIXER;