[PATCH] ALSA: hda/hdmi: add keep-alive support for ADL-P and DG2
Takashi Iwai
tiwai at suse.de
Wed Feb 16 10:13:49 CET 2022
On Wed, 16 Feb 2022 09:38:44 +0100,
Amadeusz SX2awiX4ski wrote:
>
> On 2/15/2022 3:01 PM, Kai Vehmanen wrote:
>
> > static void silent_stream_disable(struct hda_codec *codec,
> > @@ -1726,7 +1786,16 @@ static void silent_stream_disable(struct hda_codec *codec,
> > {
> > struct hdmi_spec *spec = codec->spec;
> > struct hdmi_spec_per_cvt *per_cvt;
> > - int cvt_idx;
> > + int cvt_idx, err;
> > +
> > + err = snd_hda_power_up_pm(codec);
> > + if (err < 0 && err != -EACCES) {
> > + codec_err(codec,
> > + "Failed to power up codec for silent stream disable ret=[%d]\n",
> > + err);
> > + snd_hda_power_down_pm(codec);
>
> If power up failed, do you need to power down?
Yes, it's essentially pm_runtime_get(), and you need to put down also
at an error path.
But, what I don't follow in the patch is about the part:
> static void silent_stream_enable(struct hda_codec *codec,
> struct hdmi_spec_per_pin *per_pin)
> {
(snip)
> unlock_out:
> mutex_unlock(&per_pin->lock);
> +
> + if (err || !keep_power)
> + snd_hda_power_down_pm(codec);
So this may leave the power up. But where is the corresponding part
that turns it down? The newly added snd_hda_power_up_pm() in
silent_stream_disable() is paired with the one at the tail of that
function, so it looks like a refcount unbalance. Kai?
thanks,
Takashi
More information about the Alsa-devel
mailing list