lkml.org 
[lkml]   [2022]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 020/120] ALSA: hda/sigmatel: Keep power up while beep is enabled
    Date
    From: Takashi Iwai <tiwai@suse.de>

    [ Upstream commit 414d38ba871092aeac4ed097ac4ced89486646f7 ]

    It seems that the beep playback doesn't work well on IDT codec devices
    when the codec auto-pm is enabled. Keep the power on while the beep
    switch is enabled.

    Link: https://bugzilla.suse.com/show_bug.cgi?id=1200544
    Link: https://lore.kernel.org/r/20220904072750.26164-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/pci/hda/patch_sigmatel.c | 22 ++++++++++++++++++++++
    1 file changed, 22 insertions(+)

    diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
    index bfd3fe5eff31..7a8ecc21b347 100644
    --- a/sound/pci/hda/patch_sigmatel.c
    +++ b/sound/pci/hda/patch_sigmatel.c
    @@ -209,6 +209,7 @@ struct sigmatel_spec {

    /* beep widgets */
    hda_nid_t anabeep_nid;
    + bool beep_power_on;

    /* SPDIF-out mux */
    const char * const *spdif_labels;
    @@ -4441,6 +4442,26 @@ static int stac_suspend(struct hda_codec *codec)
    stac_shutup(codec);
    return 0;
    }
    +
    +static int stac_check_power_status(struct hda_codec *codec, hda_nid_t nid)
    +{
    + struct sigmatel_spec *spec = codec->spec;
    + int ret = snd_hda_gen_check_power_status(codec, nid);
    +
    +#ifdef CONFIG_SND_HDA_INPUT_BEEP
    + if (nid == spec->gen.beep_nid && codec->beep) {
    + if (codec->beep->enabled != spec->beep_power_on) {
    + spec->beep_power_on = codec->beep->enabled;
    + if (spec->beep_power_on)
    + snd_hda_power_up_pm(codec);
    + else
    + snd_hda_power_down_pm(codec);
    + }
    + ret |= spec->beep_power_on;
    + }
    +#endif
    + return ret;
    +}
    #else
    #define stac_suspend NULL
    #endif /* CONFIG_PM */
    @@ -4453,6 +4474,7 @@ static const struct hda_codec_ops stac_patch_ops = {
    .unsol_event = snd_hda_jack_unsol_event,
    #ifdef CONFIG_PM
    .suspend = stac_suspend,
    + .check_power_status = stac_check_power_status,
    #endif
    .reboot_notify = stac_shutup,
    };
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-09-26 12:37    [W:4.021 / U:0.652 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site