]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: Intel: catpt: Simplify procedure of applying user settings
authorCezary Rojewski <cezary.rojewski@intel.com>
Mon, 9 Mar 2026 09:16:03 +0000 (10:16 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 11 Mar 2026 13:34:11 +0000 (13:34 +0000)
Existing catpt_dai_apply_usettings() applies all the individual control
settings but why-what is covered behind if-statements. Refactor the
operation into:

catpt_apply_controls()
|__ catpt_apply_volume()
|__ catpt_apply_mute()

to make it easy to understand why and what is going on. The update also
enlists snd_ctl_find_id_mixer() for the query purpose, removing code
duplication.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://patch.msgid.link/20260309091605.896307-4-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/catpt/pcm.c

index 08f1e36a136f6dcb38ea64785e0ce00d2ff404b1..3074b6c958fa77100afc0f26942707c91bd3c5f1 100644 (file)
@@ -359,46 +359,48 @@ struct catpt_control_data {
        long volumes[CATPT_CHANNELS_MAX];
 };
 
-static int catpt_dai_apply_usettings(struct snd_soc_dai *dai,
-                                    struct catpt_stream_runtime *stream)
+static int catpt_apply_volume(struct catpt_dev *cdev, struct snd_soc_card *card, const char *name)
 {
-       struct snd_soc_component *component = dai->component;
-       struct snd_kcontrol *pos;
-       struct catpt_dev *cdev = dev_get_drvdata(dai->dev);
-       const char *name;
+       struct snd_kcontrol *kctl = snd_ctl_find_id_mixer(card->snd_card, name);
+       struct catpt_control_data *data;
+
+       if (!kctl)
+               return -ENOENT;
+       data = (struct catpt_control_data *)kctl->private_value;
+
+       return catpt_set_dspvol(cdev, data->pin_id, data->volumes);
+}
+
+static int catpt_apply_mute(struct catpt_dev *cdev, struct snd_soc_card *card)
+{
+       struct snd_kcontrol *kctl = snd_ctl_find_id_mixer(card->snd_card, "Loopback Mute");
+       bool mute;
        int ret;
-       u32 id = stream->info.stream_hw_id;
 
-       /* only selected streams have individual controls */
-       switch (id) {
+       if (!kctl)
+               return -ENOENT;
+       mute = *(bool *)kctl->private_value;
+
+       ret = catpt_ipc_mute_loopback(cdev, CATPT_PIN_ID_REFERENCE, mute);
+       return CATPT_IPC_RET(ret);
+}
+
+static int catpt_apply_controls(struct catpt_dev *cdev, struct snd_soc_card *card,
+                               struct catpt_stream_runtime *stream)
+{
+       /* Only selected streams have individual controls. */
+       switch (stream->info.stream_hw_id) {
        case CATPT_PIN_ID_OFFLOAD1:
-               name = "Media0 Playback Volume";
-               break;
+               return catpt_apply_volume(cdev, card, "Media0 Playback Volume");
        case CATPT_PIN_ID_OFFLOAD2:
-               name = "Media1 Playback Volume";
-               break;
+               return catpt_apply_volume(cdev, card, "Media1 Playback Volume");
        case CATPT_PIN_ID_CAPTURE1:
-               name = "Mic Capture Volume";
-               break;
+               return catpt_apply_volume(cdev, card, "Mic Capture Volume");
        case CATPT_PIN_ID_REFERENCE:
-               name = "Loopback Mute";
-               break;
+               return catpt_apply_mute(cdev, card);
        default:
                return 0;
        }
-
-       list_for_each_entry(pos, &component->card->snd_card->controls, list) {
-               if (pos->private_data == component &&
-                   !strncmp(name, pos->id.name, sizeof(pos->id.name)))
-                       break;
-       }
-       if (list_entry_is_head(pos, &component->card->snd_card->controls, list))
-               return -ENOENT;
-
-       if (stream->template->type != CATPT_STRM_TYPE_LOOPBACK)
-               return catpt_set_dspvol(cdev, id, (long *)pos->private_value);
-       ret = catpt_ipc_mute_loopback(cdev, id, *(bool *)pos->private_value);
-       return CATPT_IPC_RET(ret);
 }
 
 static int catpt_dai_hw_params(struct snd_pcm_substream *substream,
@@ -449,7 +451,7 @@ static int catpt_dai_hw_params(struct snd_pcm_substream *substream,
 
        guard(mutex)(&cdev->stream_mutex);
 
-       ret = catpt_dai_apply_usettings(dai, stream);
+       ret = catpt_apply_controls(cdev, dai->component->card, stream);
        if (ret) {
                catpt_ipc_free_stream(cdev, stream->info.stream_hw_id);
                return ret;