]> Git Repo - linux.git/commitdiff
ALSA: hda: Fix codec device field initializan
authorCezary Rojewski <[email protected]>
Fri, 10 Feb 2023 16:55:41 +0000 (17:55 +0100)
committerTakashi Iwai <[email protected]>
Sat, 11 Feb 2023 08:36:16 +0000 (09:36 +0100)
Commit f2bd1c5ae2cb ("ALSA: hda: Fix page fault in
snd_hda_codec_shutdown()") relocated initialization of several codec
device fields. Due to differences between codec_exec_verb() and
snd_hdac_bus_exec_bus() in how they handle VERB execution - the latter
does not touch PM - assigning ->exec_verb to codec_exec_verb() causes PM
to be engaged before it is configured for the device. Configuration of
PM for the ASoC HDAudio sound card is done with snd_hda_set_power_save()
during skl_hda_audio_probe() whereas the assignment happens early, in
snd_hda_codec_device_init().

Revert to previous behavior to avoid problems caused by too early PM
manipulation.

Suggested-by: Jason Montleon <[email protected]>
Link: https://lore.kernel.org/regressions/CALFERdzKUodLsm6=Ub3g2+PxpNpPtPq3bGBLbff=eZr9_S=YVA@mail.gmail.com
Fixes: f2bd1c5ae2cb ("ALSA: hda: Fix page fault in snd_hda_codec_shutdown()")
Signed-off-by: Cezary Rojewski <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>
sound/pci/hda/hda_codec.c

index ac1cc7c5290e3d7a974b8618cd9772ee04d40b8f..2e728aad677136470cbb990fa85df6c37e2d8b32 100644 (file)
@@ -927,7 +927,6 @@ snd_hda_codec_device_init(struct hda_bus *bus, unsigned int codec_addr,
        codec->depop_delay = -1;
        codec->fixup_id = HDA_FIXUP_ID_NOT_SET;
        codec->core.dev.release = snd_hda_codec_dev_release;
-       codec->core.exec_verb = codec_exec_verb;
        codec->core.type = HDA_DEV_LEGACY;
 
        mutex_init(&codec->spdif_mutex);
@@ -998,6 +997,7 @@ int snd_hda_codec_device_new(struct hda_bus *bus, struct snd_card *card,
        if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
                return -EINVAL;
 
+       codec->core.exec_verb = codec_exec_verb;
        codec->card = card;
        codec->addr = codec_addr;
 
This page took 0.056551 seconds and 4 git commands to generate.